Polygon Sponsored slots available. Book your slot here!
[ Download CSV Export ]
OVERVIEW
Cross-Chain Rewards Token.Contract Name:
RewardsToken
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-04 */ // Sources flattened with hardhat v2.3.0 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/utils/[email protected] 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 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; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @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, IERC20Metadata { mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The defaut value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - 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); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); _balances[sender] = senderBalance - 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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - 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 { } } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/utils/introspection/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { function hasRole(bytes32 role, address account) external view returns (bool); function getRoleAdmin(bytes32 role) external view returns (bytes32); function grantRole(bytes32 role, address account) external; function revokeRole(bytes32 role, address account) external; function renounceRole(bytes32 role, address account) external; } /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ``` * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ``` * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping (address => bool) members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ * * _Available since v4.1._ */ modifier onlyRole(bytes32 role) { _checkRole(role, _msgSender()); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{20}) is missing role (0x[0-9a-f]{32})$/ */ function _checkRole(bytes32 role, address account) internal view { if(!hasRole(role, account)) { revert(string(abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ))); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view override returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, getRoleAdmin(role), adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File @openzeppelin/contracts/utils/structs/[email protected] pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // 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)); } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^0.8.0; /** * @dev External interface of AccessControlEnumerable declared to support ERC165 detection. */ interface IAccessControlEnumerable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); function getRoleMemberCount(bytes32 role) external view returns (uint256); } /** * @dev Extension of {AccessControl} that allows enumerating the members of each role. */ abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl { using EnumerableSet for EnumerableSet.AddressSet; mapping (bytes32 => EnumerableSet.AddressSet) private _roleMembers; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControlEnumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view override returns (address) { return _roleMembers[role].at(index); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view override returns (uint256) { return _roleMembers[role].length(); } /** * @dev Overload {grantRole} to track enumerable memberships */ function grantRole(bytes32 role, address account) public virtual override { super.grantRole(role, account); _roleMembers[role].add(account); } /** * @dev Overload {revokeRole} to track enumerable memberships */ function revokeRole(bytes32 role, address account) public virtual override { super.revokeRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {renounceRole} to track enumerable memberships */ function renounceRole(bytes32 role, address account) public virtual override { super.renounceRole(role, account); _roleMembers[role].remove(account); } /** * @dev Overload {_setupRole} to track enumerable memberships */ function _setupRole(bytes32 role, address account) internal virtual override { super._setupRole(role, account); _roleMembers[role].add(account); } } // File contracts/RewardsToken.sol pragma solidity ^0.8.0; /** * @dev {ERC20} token, including: * * - ability for holders to burn (destroy) their tokens * - a minter role that allows for token minting (creation) * * This contract uses {AccessControl} to lock permissioned functions using the * different roles - head to its documentation for details. * * The account that deploys the contract will be granted the minter * role, as well as the default admin role, which will let it grant the minter * role to other accounts. */ contract RewardsToken is Context, AccessControlEnumerable, ERC20Burnable { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); /** * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` to the * account that deploys the contract. * * See {ERC20-constructor}. */ constructor(string memory name, string memory symbol) ERC20(name, symbol) { _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); _setupRole(MINTER_ROLE, _msgSender()); } /** * @dev Creates `amount` new tokens for `to`. * * See {ERC20-_mint}. * * Requirements: * * - the caller must have the `MINTER_ROLE`. */ function mint(address to, uint256 amount) public virtual { require(hasRole(MINTER_ROLE, _msgSender()), "RewardsToken: must have minter role to mint"); _mint(to, amount); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20) { super._beforeTokenTransfer(from, to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620034f5380380620034f58339818101604052810190620000379190620005bd565b818181600590805190602001906200005192919062000370565b5080600690805190602001906200006a92919062000370565b505050620000916000801b62000085620000da60201b60201c565b620000e260201b60201c565b620000d27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620000c6620000da60201b60201c565b620000e260201b60201c565b5050620006a7565b600033905090565b620000f982826200012a60201b62000d101760201c565b6200012581600160008581526020019081526020016000206200014060201b62000d1e1790919060201c565b505050565b6200013c82826200017860201b60201c565b5050565b600062000170836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200026960201b60201c565b905092915050565b6200018a8282620002e360201b60201c565b6200026557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200020a620000da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200027d83836200034d60201b60201c565b620002d8578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002dd565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200037e9062000671565b90600052602060002090601f016020900481019282620003a25760008555620003ee565b82601f10620003bd57805160ff1916838001178555620003ee565b82800160010185558215620003ee579182015b82811115620003ed578251825591602001919060010190620003d0565b5b509050620003fd919062000401565b5090565b5b808211156200041c57600081600090555060010162000402565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000489826200043e565b810181811067ffffffffffffffff82111715620004ab57620004aa6200044f565b5b80604052505050565b6000620004c062000420565b9050620004ce82826200047e565b919050565b600067ffffffffffffffff821115620004f157620004f06200044f565b5b620004fc826200043e565b9050602081019050919050565b60005b83811015620005295780820151818401526020810190506200050c565b8381111562000539576000848401525b50505050565b6000620005566200055084620004d3565b620004b4565b90508281526020810184848401111562000575576200057462000439565b5b6200058284828562000509565b509392505050565b600082601f830112620005a257620005a162000434565b5b8151620005b48482602086016200053f565b91505092915050565b60008060408385031215620005d757620005d66200042a565b5b600083015167ffffffffffffffff811115620005f857620005f76200042f565b5b62000606858286016200058a565b925050602083015167ffffffffffffffff8111156200062a57620006296200042f565b5b62000638858286016200058a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068a57607f821691505b60208210811415620006a157620006a062000642565b5b50919050565b612e3e80620006b76000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146103ff578063a9059cbb1461042f578063ca15c8731461045f578063d53913931461048f578063d547741f146104ad578063dd62ed3e146104c957610158565b806370a082311461031757806379cc6790146103475780639010d07c1461036357806391d148541461039357806395d89b41146103c3578063a217fddf146103e157610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806342966c68146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b61017760048036038101906101729190611e16565b6104f9565b6040516101849190611e5e565b60405180910390f35b610195610573565b6040516101a29190611f12565b60405180910390f35b6101c560048036038101906101c09190611fc8565b610605565b6040516101d29190611e5e565b60405180910390f35b6101e3610623565b6040516101f09190612017565b60405180910390f35b610213600480360381019061020e9190612032565b61062d565b6040516102209190611e5e565b60405180910390f35b610243600480360381019061023e91906120bb565b61072e565b60405161025091906120f7565b60405180910390f35b610273600480360381019061026e9190612112565b61074d565b005b61027d610781565b60405161028a919061216e565b60405180910390f35b6102ad60048036038101906102a89190612112565b61078a565b005b6102c960048036038101906102c49190611fc8565b6107be565b6040516102d69190611e5e565b60405180910390f35b6102f960048036038101906102f49190611fc8565b61086a565b005b61031560048036038101906103109190612189565b6108e8565b005b610331600480360381019061032c91906121b6565b6108fc565b60405161033e9190612017565b60405180910390f35b610361600480360381019061035c9190611fc8565b610945565b005b61037d600480360381019061037891906121e3565b6109c9565b60405161038a9190612232565b60405180910390f35b6103ad60048036038101906103a89190612112565b6109f8565b6040516103ba9190611e5e565b60405180910390f35b6103cb610a62565b6040516103d89190611f12565b60405180910390f35b6103e9610af4565b6040516103f691906120f7565b60405180910390f35b61041960048036038101906104149190611fc8565b610afb565b6040516104269190611e5e565b60405180910390f35b61044960048036038101906104449190611fc8565b610bef565b6040516104569190611e5e565b60405180910390f35b610479600480360381019061047491906120bb565b610c0d565b6040516104869190612017565b60405180910390f35b610497610c31565b6040516104a491906120f7565b60405180910390f35b6104c760048036038101906104c29190612112565b610c55565b005b6104e360048036038101906104de919061224d565b610c89565b6040516104f09190612017565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610d4e565b5b9050919050565b606060058054610582906122bc565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906122bc565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b6000610619610612610dc8565b8484610dd0565b6001905092915050565b6000600454905090565b600061063a848484610f9b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610685610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90612360565b60405180910390fd5b61072285610711610dc8565b858461071d91906123af565b610dd0565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b610757828261121d565b61077c8160016000858152602001908152602001600020610d1e90919063ffffffff16565b505050565b60006012905090565b6107948282611246565b6107b981600160008581526020019081526020016000206112c990919063ffffffff16565b505050565b60006108606107cb610dc8565b8484600360006107d9610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085b91906123e3565b610dd0565b6001905092915050565b61089b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610896610dc8565b6109f8565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d1906124ab565b60405180910390fd5b6108e482826112f9565b5050565b6108f96108f3610dc8565b8261144e565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061095883610953610dc8565b610c89565b90508181101561099d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109949061253d565b60405180910390fd5b6109ba836109a9610dc8565b84846109b591906123af565b610dd0565b6109c4838361144e565b505050565b60006109f0826001600086815260200190815260200160002061162490919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a71906122bc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906122bc565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000801b81565b60008060036000610b0a610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe906125cf565b60405180910390fd5b610be4610bd2610dc8565b858584610bdf91906123af565b610dd0565b600191505092915050565b6000610c03610bfc610dc8565b8484610f9b565b6001905092915050565b6000610c2a6001600084815260200190815260200160002061163e565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c5f8282611653565b610c8481600160008581526020019081526020016000206112c990919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d1a828261167c565b5050565b6000610d46836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61175c565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dc15750610dc0826117cc565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790612661565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906126f3565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8e9190612017565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290612785565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107290612817565b60405180910390fd5b611086838383611836565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906128a9565b60405180910390fd5b818161111991906123af565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ab91906123e3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120f9190612017565b60405180910390a350505050565b6112268261072e565b61123781611232610dc8565b611846565b611241838361167c565b505050565b61124e610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b29061293b565b60405180910390fd5b6112c582826118e3565b5050565b60006112f1836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119c4565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611369576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611360906129a7565b60405180910390fd5b61137560008383611836565b806004600082825461138791906123e3565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113dd91906123e3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114429190612017565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590612a39565b60405180910390fd5b6114ca82600083611836565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154890612acb565b60405180910390fd5b818161155d91906123af565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546115b291906123af565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116179190612017565b60405180910390a3505050565b60006116338360000183611ad0565b60001c905092915050565b600061164c82600001611b44565b9050919050565b61165c8261072e565b61166d81611668610dc8565b611846565b61167783836118e3565b505050565b61168682826109f8565b61175857600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506116fd610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006117688383611b55565b6117c15782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506117c6565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611841838383611b78565b505050565b61185082826109f8565b6118df576118758173ffffffffffffffffffffffffffffffffffffffff166014611b7d565b6118838360001c6020611b7d565b604051602001611894929190612bbf565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d69190611f12565b60405180910390fd5b5050565b6118ed82826109f8565b156119c057600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611965610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611ac45760006001826119f691906123af565b9050600060018660000180549050611a0e91906123af565b90506000866000018281548110611a2857611a27612bf9565b5b9060005260206000200154905080876000018481548110611a4c57611a4b612bf9565b5b9060005260206000200181905550838760010160008381526020019081526020016000208190555086600001805480611a8857611a87612c28565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611aca565b60009150505b92915050565b600081836000018054905011611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612cc9565b60405180910390fd5b826000018281548110611b3157611b30612bf9565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b505050565b606060006002836002611b909190612ce9565b611b9a91906123e3565b67ffffffffffffffff811115611bb357611bb2612d43565b5b6040519080825280601f01601f191660200182016040528015611be55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611c1d57611c1c612bf9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611c8157611c80612bf9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611cc19190612ce9565b611ccb91906123e3565b90505b6001811115611d6b577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611d0d57611d0c612bf9565b5b1a60f81b828281518110611d2457611d23612bf9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611d6490612d72565b9050611cce565b5060008414611daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da690612de8565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611df381611dbe565b8114611dfe57600080fd5b50565b600081359050611e1081611dea565b92915050565b600060208284031215611e2c57611e2b611db9565b5b6000611e3a84828501611e01565b91505092915050565b60008115159050919050565b611e5881611e43565b82525050565b6000602082019050611e736000830184611e4f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611eb3578082015181840152602081019050611e98565b83811115611ec2576000848401525b50505050565b6000601f19601f8301169050919050565b6000611ee482611e79565b611eee8185611e84565b9350611efe818560208601611e95565b611f0781611ec8565b840191505092915050565b60006020820190508181036000830152611f2c8184611ed9565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f5f82611f34565b9050919050565b611f6f81611f54565b8114611f7a57600080fd5b50565b600081359050611f8c81611f66565b92915050565b6000819050919050565b611fa581611f92565b8114611fb057600080fd5b50565b600081359050611fc281611f9c565b92915050565b60008060408385031215611fdf57611fde611db9565b5b6000611fed85828601611f7d565b9250506020611ffe85828601611fb3565b9150509250929050565b61201181611f92565b82525050565b600060208201905061202c6000830184612008565b92915050565b60008060006060848603121561204b5761204a611db9565b5b600061205986828701611f7d565b935050602061206a86828701611f7d565b925050604061207b86828701611fb3565b9150509250925092565b6000819050919050565b61209881612085565b81146120a357600080fd5b50565b6000813590506120b58161208f565b92915050565b6000602082840312156120d1576120d0611db9565b5b60006120df848285016120a6565b91505092915050565b6120f181612085565b82525050565b600060208201905061210c60008301846120e8565b92915050565b6000806040838503121561212957612128611db9565b5b6000612137858286016120a6565b925050602061214885828601611f7d565b9150509250929050565b600060ff82169050919050565b61216881612152565b82525050565b6000602082019050612183600083018461215f565b92915050565b60006020828403121561219f5761219e611db9565b5b60006121ad84828501611fb3565b91505092915050565b6000602082840312156121cc576121cb611db9565b5b60006121da84828501611f7d565b91505092915050565b600080604083850312156121fa576121f9611db9565b5b6000612208858286016120a6565b925050602061221985828601611fb3565b9150509250929050565b61222c81611f54565b82525050565b60006020820190506122476000830184612223565b92915050565b6000806040838503121561226457612263611db9565b5b600061227285828601611f7d565b925050602061228385828601611f7d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122d457607f821691505b602082108114156122e8576122e761228d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061234a602883611e84565b9150612355826122ee565b604082019050919050565b600060208201905081810360008301526123798161233d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123ba82611f92565b91506123c583611f92565b9250828210156123d8576123d7612380565b5b828203905092915050565b60006123ee82611f92565b91506123f983611f92565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561242e5761242d612380565b5b828201905092915050565b7f52657761726473546f6b656e3a206d7573742068617665206d696e746572207260008201527f6f6c6520746f206d696e74000000000000000000000000000000000000000000602082015250565b6000612495602b83611e84565b91506124a082612439565b604082019050919050565b600060208201905081810360008301526124c481612488565b9050919050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000612527602483611e84565b9150612532826124cb565b604082019050919050565b600060208201905081810360008301526125568161251a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006125b9602583611e84565b91506125c48261255d565b604082019050919050565b600060208201905081810360008301526125e8816125ac565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061264b602483611e84565b9150612656826125ef565b604082019050919050565b6000602082019050818103600083015261267a8161263e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126dd602283611e84565b91506126e882612681565b604082019050919050565b6000602082019050818103600083015261270c816126d0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061276f602583611e84565b915061277a82612713565b604082019050919050565b6000602082019050818103600083015261279e81612762565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612801602383611e84565b915061280c826127a5565b604082019050919050565b60006020820190508181036000830152612830816127f4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612893602683611e84565b915061289e82612837565b604082019050919050565b600060208201905081810360008301526128c281612886565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612925602f83611e84565b9150612930826128c9565b604082019050919050565b6000602082019050818103600083015261295481612918565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612991601f83611e84565b915061299c8261295b565b602082019050919050565b600060208201905081810360008301526129c081612984565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612a23602183611e84565b9150612a2e826129c7565b604082019050919050565b60006020820190508181036000830152612a5281612a16565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ab5602283611e84565b9150612ac082612a59565b604082019050919050565b60006020820190508181036000830152612ae481612aa8565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612b2c601783612aeb565b9150612b3782612af6565b601782019050919050565b6000612b4d82611e79565b612b578185612aeb565b9350612b67818560208601611e95565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612ba9601183612aeb565b9150612bb482612b73565b601182019050919050565b6000612bca82612b1f565b9150612bd68285612b42565b9150612be182612b9c565b9150612bed8284612b42565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000612cb3602283611e84565b9150612cbe82612c57565b604082019050919050565b60006020820190508181036000830152612ce281612ca6565b9050919050565b6000612cf482611f92565b9150612cff83611f92565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d3857612d37612380565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000612d7d82611f92565b91506000821415612d9157612d90612380565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000612dd2602083611e84565b9150612ddd82612d9c565b602082019050919050565b60006020820190508181036000830152612e0181612dc5565b905091905056fea2646970667358221220d2be01be5fa4748ec1bac560b584509d3e00e5efcdd8fbf71458e2b12cda73f064736f6c63430008090033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000007526577617264730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035257440000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000007526577617264730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035257440000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): Rewards
Arg [1] : symbol (string): RWD
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [3] : 5265776172647300000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 5257440000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
42526:1076:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39621:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6606:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8773:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7726:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9424:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25927:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40992:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7568:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41515:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10255:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43229:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15870:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7897:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16280:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40447:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24925:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6825:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22890:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10973:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8237:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40766:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42606:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41250:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8475:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39621:227;39706:4;39745:42;39730:57;;;:11;:57;;;;:110;;;;39804:36;39828:11;39804:23;:36::i;:::-;39730:110;39723:117;;39621:227;;;:::o;6606:100::-;6660:13;6693:5;6686:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6606:100;:::o;8773:169::-;8856:4;8873:39;8882:12;:10;:12::i;:::-;8896:7;8905:6;8873:8;:39::i;:::-;8930:4;8923:11;;8773:169;;;;:::o;7726:108::-;7787:7;7814:12;;7807:19;;7726:108;:::o;9424:422::-;9530:4;9547:36;9557:6;9565:9;9576:6;9547:9;:36::i;:::-;9596:24;9623:11;:19;9635:6;9623:19;;;;;;;;;;;;;;;:33;9643:12;:10;:12::i;:::-;9623:33;;;;;;;;;;;;;;;;9596:60;;9695:6;9675:16;:26;;9667:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9757:57;9766:6;9774:12;:10;:12::i;:::-;9807:6;9788:16;:25;;;;:::i;:::-;9757:8;:57::i;:::-;9834:4;9827:11;;;9424:422;;;;;:::o;25927:123::-;25993:7;26020:6;:12;26027:4;26020:12;;;;;;;;;;;:22;;;26013:29;;25927:123;;;:::o;40992:165::-;41077:30;41093:4;41099:7;41077:15;:30::i;:::-;41118:31;41141:7;41118:12;:18;41131:4;41118:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;40992:165;;:::o;7568:93::-;7626:5;7651:2;7644:9;;7568:93;:::o;41515:174::-;41603:33;41622:4;41628:7;41603:18;:33::i;:::-;41647:34;41673:7;41647:12;:18;41660:4;41647:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;41515:174;;:::o;10255:215::-;10343:4;10360:80;10369:12;:10;:12::i;:::-;10383:7;10429:10;10392:11;:25;10404:12;:10;:12::i;:::-;10392:25;;;;;;;;;;;;;;;:34;10418:7;10392:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10360:8;:80::i;:::-;10458:4;10451:11;;10255:215;;;;:::o;43229:194::-;43305:34;42644:24;43326:12;:10;:12::i;:::-;43305:7;:34::i;:::-;43297:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;43398:17;43404:2;43408:6;43398:5;:17::i;:::-;43229:194;;:::o;15870:91::-;15926:27;15932:12;:10;:12::i;:::-;15946:6;15926:5;:27::i;:::-;15870:91;:::o;7897:127::-;7971:7;7998:9;:18;8008:7;7998:18;;;;;;;;;;;;;;;;7991:25;;7897:127;;;:::o;16280:332::-;16357:24;16384:32;16394:7;16403:12;:10;:12::i;:::-;16384:9;:32::i;:::-;16357:59;;16455:6;16435:16;:26;;16427:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16513:58;16522:7;16531:12;:10;:12::i;:::-;16564:6;16545:16;:25;;;;:::i;:::-;16513:8;:58::i;:::-;16582:22;16588:7;16597:6;16582:5;:22::i;:::-;16346:266;16280:332;;:::o;40447:145::-;40529:7;40556:28;40578:5;40556:12;:18;40569:4;40556:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;40549:35;;40447:145;;;;:::o;24925:139::-;25003:4;25027:6;:12;25034:4;25027:12;;;;;;;;;;;:20;;:29;25048:7;25027:29;;;;;;;;;;;;;;;;;;;;;;;;;25020:36;;24925:139;;;;:::o;6825:104::-;6881:13;6914:7;6907:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6825:104;:::o;22890:49::-;22935:4;22890:49;;;:::o;10973:377::-;11066:4;11083:24;11110:11;:25;11122:12;:10;:12::i;:::-;11110:25;;;;;;;;;;;;;;;:34;11136:7;11110:34;;;;;;;;;;;;;;;;11083:61;;11183:15;11163:16;:35;;11155:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11251:67;11260:12;:10;:12::i;:::-;11274:7;11302:15;11283:16;:34;;;;:::i;:::-;11251:8;:67::i;:::-;11338:4;11331:11;;;10973:377;;;;:::o;8237:175::-;8323:4;8340:42;8350:12;:10;:12::i;:::-;8364:9;8375:6;8340:9;:42::i;:::-;8400:4;8393:11;;8237:175;;;;:::o;40766:134::-;40838:7;40865:27;:12;:18;40878:4;40865:18;;;;;;;;;;;:25;:27::i;:::-;40858:34;;40766:134;;;:::o;42606:62::-;42644:24;42606:62;:::o;41250:170::-;41336:31;41353:4;41359:7;41336:16;:31::i;:::-;41378:34;41404:7;41378:12;:18;41391:4;41378:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;41250:170;;:::o;8475:151::-;8564:7;8591:11;:18;8603:5;8591:18;;;;;;;;;;;;;;;:27;8610:7;8591:27;;;;;;;;;;;;;;;;8584:34;;8475:151;;;;:::o;28161:112::-;28240:25;28251:4;28257:7;28240:10;:25::i;:::-;28161:112;;:::o;35753:152::-;35823:4;35847:50;35852:3;:10;;35888:5;35872:23;;35864:32;;35847:4;:50::i;:::-;35840:57;;35753:152;;;;:::o;24616:217::-;24701:4;24740:32;24725:47;;;:11;:47;;;;:100;;;;24789:36;24813:11;24789:23;:36::i;:::-;24725:100;24718:107;;24616:217;;;:::o;4191:98::-;4244:7;4271:10;4264:17;;4191:98;:::o;14329:346::-;14448:1;14431:19;;:5;:19;;;;14423:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14529:1;14510:21;;:7;:21;;;;14502:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14613:6;14583:11;:18;14595:5;14583:18;;;;;;;;;;;;;;;:27;14602:7;14583:27;;;;;;;;;;;;;;;:36;;;;14651:7;14635:32;;14644:5;14635:32;;;14660:6;14635:32;;;;;;:::i;:::-;;;;;;;;14329:346;;;:::o;11840:604::-;11964:1;11946:20;;:6;:20;;;;11938:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12048:1;12027:23;;:9;:23;;;;12019:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12103:47;12124:6;12132:9;12143:6;12103:20;:47::i;:::-;12163:21;12187:9;:17;12197:6;12187:17;;;;;;;;;;;;;;;;12163:41;;12240:6;12223:13;:23;;12215:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12336:6;12320:13;:22;;;;:::i;:::-;12300:9;:17;12310:6;12300:17;;;;;;;;;;;;;;;:42;;;;12377:6;12353:9;:20;12363:9;12353:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12418:9;12401:35;;12410:6;12401:35;;;12429:6;12401:35;;;;;;:::i;:::-;;;;;;;;11927:517;11840:604;;;:::o;26312:147::-;26395:18;26408:4;26395:12;:18::i;:::-;24494:30;24505:4;24511:12;:10;:12::i;:::-;24494:10;:30::i;:::-;26426:25:::1;26437:4;26443:7;26426:10;:25::i;:::-;26312:147:::0;;;:::o;27360:218::-;27467:12;:10;:12::i;:::-;27456:23;;:7;:23;;;27448:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27544:26;27556:4;27562:7;27544:11;:26::i;:::-;27360:218;;:::o;36081:158::-;36154:4;36178:53;36186:3;:10;;36222:5;36206:23;;36198:32;;36178:7;:53::i;:::-;36171:60;;36081:158;;;;:::o;12726:338::-;12829:1;12810:21;;:7;:21;;;;12802:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12880:49;12909:1;12913:7;12922:6;12880:20;:49::i;:::-;12958:6;12942:12;;:22;;;;;;;:::i;:::-;;;;;;;;12997:6;12975:9;:18;12985:7;12975:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13040:7;13019:37;;13036:1;13019:37;;;13049:6;13019:37;;;;;;:::i;:::-;;;;;;;;12726:338;;:::o;13397:494::-;13500:1;13481:21;;:7;:21;;;;13473:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13553:49;13574:7;13591:1;13595:6;13553:20;:49::i;:::-;13615:22;13640:9;:18;13650:7;13640:18;;;;;;;;;;;;;;;;13615:43;;13695:6;13677:14;:24;;13669:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13789:6;13772:14;:23;;;;:::i;:::-;13751:9;:18;13761:7;13751:18;;;;;;;;;;;;;;;:44;;;;13822:6;13806:12;;:22;;;;;;;:::i;:::-;;;;;;;;13872:1;13846:37;;13855:7;13846:37;;;13876:6;13846:37;;;;;;:::i;:::-;;;;;;;;13462:429;13397:494;;:::o;37039:158::-;37113:7;37164:22;37168:3;:10;;37180:5;37164:3;:22::i;:::-;37156:31;;37133:56;;37039:158;;;;:::o;36578:117::-;36641:7;36668:19;36676:3;:10;;36668:7;:19::i;:::-;36661:26;;36578:117;;;:::o;26704:149::-;26788:18;26801:4;26788:12;:18::i;:::-;24494:30;24505:4;24511:12;:10;:12::i;:::-;24494:10;:30::i;:::-;26819:26:::1;26831:4;26837:7;26819:11;:26::i;:::-;26704:149:::0;;;:::o;28608:229::-;28683:22;28691:4;28697:7;28683;:22::i;:::-;28678:152;;28754:4;28722:6;:12;28729:4;28722:12;;;;;;;;;;;:20;;:29;28743:7;28722:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;28805:12;:10;:12::i;:::-;28778:40;;28796:7;28778:40;;28790:4;28778:40;;;;;;;;;;28678:152;28608:229;;:::o;30808:414::-;30871:4;30893:21;30903:3;30908:5;30893:9;:21::i;:::-;30888:327;;30931:3;:11;;30948:5;30931:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31114:3;:11;;:18;;;;31092:3;:12;;:19;31105:5;31092:19;;;;;;;;;;;:40;;;;31154:4;31147:11;;;;30888:327;31198:5;31191:12;;30808:414;;;;;:::o;20340:157::-;20425:4;20464:25;20449:40;;;:11;:40;;;;20442:47;;20340:157;;;:::o;43431:168::-;43547:44;43574:4;43580:2;43584:6;43547:26;:44::i;:::-;43431:168;;;:::o;25354:384::-;25434:22;25442:4;25448:7;25434;:22::i;:::-;25430:301;;25566:41;25594:7;25566:41;;25604:2;25566:19;:41::i;:::-;25664:38;25692:4;25684:13;;25699:2;25664:19;:38::i;:::-;25487:230;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25473:246;;;;;;;;;;;:::i;:::-;;;;;;;;25430:301;25354:384;;:::o;28845:230::-;28920:22;28928:4;28934:7;28920;:22::i;:::-;28916:152;;;28991:5;28959:6;:12;28966:4;28959:12;;;;;;;;;;;:20;;:29;28980:7;28959:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29043:12;:10;:12::i;:::-;29016:40;;29034:7;29016:40;;29028:4;29016:40;;;;;;;;;;28916:152;28845:230;;:::o;31398:1553::-;31464:4;31582:18;31603:3;:12;;:19;31616:5;31603:19;;;;;;;;;;;;31582:40;;31653:1;31639:10;:15;31635:1309;;32001:21;32038:1;32025:10;:14;;;;:::i;:::-;32001:38;;32054:17;32095:1;32074:3;:11;;:18;;;;:22;;;;:::i;:::-;32054:42;;32341:17;32361:3;:11;;32373:9;32361:22;;;;;;;;:::i;:::-;;;;;;;;;;32341:42;;32507:9;32478:3;:11;;32490:13;32478:26;;;;;;;;:::i;:::-;;;;;;;;;:38;;;;32610:10;32584:3;:12;;:23;32597:9;32584:23;;;;;;;;;;;:36;;;;32745:3;:11;;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32840:3;:12;;:19;32853:5;32840:19;;;;;;;;;;;32833:26;;;32883:4;32876:11;;;;;;;;31635:1309;32927:5;32920:12;;;31398:1553;;;;;:::o;33705:204::-;33772:7;33821:5;33800:3;:11;;:18;;;;:26;33792:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33883:3;:11;;33895:5;33883:18;;;;;;;;:::i;:::-;;;;;;;;;;33876:25;;33705:204;;;;:::o;33252:109::-;33308:7;33335:3;:11;;:18;;;;33328:25;;33252:109;;;:::o;33037:129::-;33110:4;33157:1;33134:3;:12;;:19;33147:5;33134:19;;;;;;;;;;;;:24;;33127:31;;33037:129;;;;:::o;15278:92::-;;;;:::o;18231:447::-;18306:13;18332:19;18377:1;18368:6;18364:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18354:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18332:47;;18390:15;:6;18397:1;18390:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;18416;:6;18423:1;18416:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;18447:9;18472:1;18463:6;18459:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;18447:26;;18442:131;18479:1;18475;:5;18442:131;;;18514:8;18531:3;18523:5;:11;18514:21;;;;;;;:::i;:::-;;;;;18502:6;18509:1;18502:9;;;;;;;;:::i;:::-;;;;;:33;;;;;;;;;;;18560:1;18550:11;;;;;18482:3;;;;:::i;:::-;;;18442:131;;;;18600:1;18591:5;:10;18583:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18663:6;18649:21;;;18231:447;;;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:126::-;2945:7;2985:42;2978:5;2974:54;2963:65;;2908:126;;;:::o;3040:96::-;3077:7;3106:24;3124:5;3106:24;:::i;:::-;3095:35;;3040:96;;;:::o;3142:122::-;3215:24;3233:5;3215:24;:::i;:::-;3208:5;3205:35;3195:63;;3254:1;3251;3244:12;3195:63;3142:122;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:77::-;3452:7;3481:5;3470:16;;3415:77;;;:::o;3498:122::-;3571:24;3589:5;3571:24;:::i;:::-;3564:5;3561:35;3551:63;;3610:1;3607;3600:12;3551:63;3498:122;:::o;3626:139::-;3672:5;3710:6;3697:20;3688:29;;3726:33;3753:5;3726:33;:::i;:::-;3626:139;;;;:::o;3771:474::-;3839:6;3847;3896:2;3884:9;3875:7;3871:23;3867:32;3864:119;;;3902:79;;:::i;:::-;3864:119;4022:1;4047:53;4092:7;4083:6;4072:9;4068:22;4047:53;:::i;:::-;4037:63;;3993:117;4149:2;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4120:118;3771:474;;;;;:::o;4251:118::-;4338:24;4356:5;4338:24;:::i;:::-;4333:3;4326:37;4251:118;;:::o;4375:222::-;4468:4;4506:2;4495:9;4491:18;4483:26;;4519:71;4587:1;4576:9;4572:17;4563:6;4519:71;:::i;:::-;4375:222;;;;:::o;4603:619::-;4680:6;4688;4696;4745:2;4733:9;4724:7;4720:23;4716:32;4713:119;;;4751:79;;:::i;:::-;4713:119;4871:1;4896:53;4941:7;4932:6;4921:9;4917:22;4896:53;:::i;:::-;4886:63;;4842:117;4998:2;5024:53;5069:7;5060:6;5049:9;5045:22;5024:53;:::i;:::-;5014:63;;4969:118;5126:2;5152:53;5197:7;5188:6;5177:9;5173:22;5152:53;:::i;:::-;5142:63;;5097:118;4603:619;;;;;:::o;5228:77::-;5265:7;5294:5;5283:16;;5228:77;;;:::o;5311:122::-;5384:24;5402:5;5384:24;:::i;:::-;5377:5;5374:35;5364:63;;5423:1;5420;5413:12;5364:63;5311:122;:::o;5439:139::-;5485:5;5523:6;5510:20;5501:29;;5539:33;5566:5;5539:33;:::i;:::-;5439:139;;;;:::o;5584:329::-;5643:6;5692:2;5680:9;5671:7;5667:23;5663:32;5660:119;;;5698:79;;:::i;:::-;5660:119;5818:1;5843:53;5888:7;5879:6;5868:9;5864:22;5843:53;:::i;:::-;5833:63;;5789:117;5584:329;;;;:::o;5919:118::-;6006:24;6024:5;6006:24;:::i;:::-;6001:3;5994:37;5919:118;;:::o;6043:222::-;6136:4;6174:2;6163:9;6159:18;6151:26;;6187:71;6255:1;6244:9;6240:17;6231:6;6187:71;:::i;:::-;6043:222;;;;:::o;6271:474::-;6339:6;6347;6396:2;6384:9;6375:7;6371:23;6367:32;6364:119;;;6402:79;;:::i;:::-;6364:119;6522:1;6547:53;6592:7;6583:6;6572:9;6568:22;6547:53;:::i;:::-;6537:63;;6493:117;6649:2;6675:53;6720:7;6711:6;6700:9;6696:22;6675:53;:::i;:::-;6665:63;;6620:118;6271:474;;;;;:::o;6751:86::-;6786:7;6826:4;6819:5;6815:16;6804:27;;6751:86;;;:::o;6843:112::-;6926:22;6942:5;6926:22;:::i;:::-;6921:3;6914:35;6843:112;;:::o;6961:214::-;7050:4;7088:2;7077:9;7073:18;7065:26;;7101:67;7165:1;7154:9;7150:17;7141:6;7101:67;:::i;:::-;6961:214;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:::-;7575:6;7624:2;7612:9;7603:7;7599:23;7595:32;7592:119;;;7630:79;;:::i;:::-;7592:119;7750:1;7775:53;7820:7;7811:6;7800:9;7796:22;7775:53;:::i;:::-;7765:63;;7721:117;7516:329;;;;:::o;7851:474::-;7919:6;7927;7976:2;7964:9;7955:7;7951:23;7947:32;7944:119;;;7982:79;;:::i;:::-;7944:119;8102:1;8127:53;8172:7;8163:6;8152:9;8148:22;8127:53;:::i;:::-;8117:63;;8073:117;8229:2;8255:53;8300:7;8291:6;8280:9;8276:22;8255:53;:::i;:::-;8245:63;;8200:118;7851:474;;;;;:::o;8331:118::-;8418:24;8436:5;8418:24;:::i;:::-;8413:3;8406:37;8331:118;;:::o;8455:222::-;8548:4;8586:2;8575:9;8571:18;8563:26;;8599:71;8667:1;8656:9;8652:17;8643:6;8599:71;:::i;:::-;8455:222;;;;:::o;8683:474::-;8751:6;8759;8808:2;8796:9;8787:7;8783:23;8779:32;8776:119;;;8814:79;;:::i;:::-;8776:119;8934:1;8959:53;9004:7;8995:6;8984:9;8980:22;8959:53;:::i;:::-;8949:63;;8905:117;9061:2;9087:53;9132:7;9123:6;9112:9;9108:22;9087:53;:::i;:::-;9077:63;;9032:118;8683:474;;;;;:::o;9163:180::-;9211:77;9208:1;9201:88;9308:4;9305:1;9298:15;9332:4;9329:1;9322:15;9349:320;9393:6;9430:1;9424:4;9420:12;9410:22;;9477:1;9471:4;9467:12;9498:18;9488:81;;9554:4;9546:6;9542:17;9532:27;;9488:81;9616:2;9608:6;9605:14;9585:18;9582:38;9579:84;;;9635:18;;:::i;:::-;9579:84;9400:269;9349:320;;;:::o;9675:227::-;9815:34;9811:1;9803:6;9799:14;9792:58;9884:10;9879:2;9871:6;9867:15;9860:35;9675:227;:::o;9908:366::-;10050:3;10071:67;10135:2;10130:3;10071:67;:::i;:::-;10064:74;;10147:93;10236:3;10147:93;:::i;:::-;10265:2;10260:3;10256:12;10249:19;;9908:366;;;:::o;10280:419::-;10446:4;10484:2;10473:9;10469:18;10461:26;;10533:9;10527:4;10523:20;10519:1;10508:9;10504:17;10497:47;10561:131;10687:4;10561:131;:::i;:::-;10553:139;;10280:419;;;:::o;10705:180::-;10753:77;10750:1;10743:88;10850:4;10847:1;10840:15;10874:4;10871:1;10864:15;10891:191;10931:4;10951:20;10969:1;10951:20;:::i;:::-;10946:25;;10985:20;11003:1;10985:20;:::i;:::-;10980:25;;11024:1;11021;11018:8;11015:34;;;11029:18;;:::i;:::-;11015:34;11074:1;11071;11067:9;11059:17;;10891:191;;;;:::o;11088:305::-;11128:3;11147:20;11165:1;11147:20;:::i;:::-;11142:25;;11181:20;11199:1;11181:20;:::i;:::-;11176:25;;11335:1;11267:66;11263:74;11260:1;11257:81;11254:107;;;11341:18;;:::i;:::-;11254:107;11385:1;11382;11378:9;11371:16;;11088:305;;;;:::o;11399:230::-;11539:34;11535:1;11527:6;11523:14;11516:58;11608:13;11603:2;11595:6;11591:15;11584:38;11399:230;:::o;11635:366::-;11777:3;11798:67;11862:2;11857:3;11798:67;:::i;:::-;11791:74;;11874:93;11963:3;11874:93;:::i;:::-;11992:2;11987:3;11983:12;11976:19;;11635:366;;;:::o;12007:419::-;12173:4;12211:2;12200:9;12196:18;12188:26;;12260:9;12254:4;12250:20;12246:1;12235:9;12231:17;12224:47;12288:131;12414:4;12288:131;:::i;:::-;12280:139;;12007:419;;;:::o;12432:223::-;12572:34;12568:1;12560:6;12556:14;12549:58;12641:6;12636:2;12628:6;12624:15;12617:31;12432:223;:::o;12661:366::-;12803:3;12824:67;12888:2;12883:3;12824:67;:::i;:::-;12817:74;;12900:93;12989:3;12900:93;:::i;:::-;13018:2;13013:3;13009:12;13002:19;;12661:366;;;:::o;13033:419::-;13199:4;13237:2;13226:9;13222:18;13214:26;;13286:9;13280:4;13276:20;13272:1;13261:9;13257:17;13250:47;13314:131;13440:4;13314:131;:::i;:::-;13306:139;;13033:419;;;:::o;13458:224::-;13598:34;13594:1;13586:6;13582:14;13575:58;13667:7;13662:2;13654:6;13650:15;13643:32;13458:224;:::o;13688:366::-;13830:3;13851:67;13915:2;13910:3;13851:67;:::i;:::-;13844:74;;13927:93;14016:3;13927:93;:::i;:::-;14045:2;14040:3;14036:12;14029:19;;13688:366;;;:::o;14060:419::-;14226:4;14264:2;14253:9;14249:18;14241:26;;14313:9;14307:4;14303:20;14299:1;14288:9;14284:17;14277:47;14341:131;14467:4;14341:131;:::i;:::-;14333:139;;14060:419;;;:::o;14485:223::-;14625:34;14621:1;14613:6;14609:14;14602:58;14694:6;14689:2;14681:6;14677:15;14670:31;14485:223;:::o;14714:366::-;14856:3;14877:67;14941:2;14936:3;14877:67;:::i;:::-;14870:74;;14953:93;15042:3;14953:93;:::i;:::-;15071:2;15066:3;15062:12;15055:19;;14714:366;;;:::o;15086:419::-;15252:4;15290:2;15279:9;15275:18;15267:26;;15339:9;15333:4;15329:20;15325:1;15314:9;15310:17;15303:47;15367:131;15493:4;15367:131;:::i;:::-;15359:139;;15086:419;;;:::o;15511:221::-;15651:34;15647:1;15639:6;15635:14;15628:58;15720:4;15715:2;15707:6;15703:15;15696:29;15511:221;:::o;15738:366::-;15880:3;15901:67;15965:2;15960:3;15901:67;:::i;:::-;15894:74;;15977:93;16066:3;15977:93;:::i;:::-;16095:2;16090:3;16086:12;16079:19;;15738:366;;;:::o;16110:419::-;16276:4;16314:2;16303:9;16299:18;16291:26;;16363:9;16357:4;16353:20;16349:1;16338:9;16334:17;16327:47;16391:131;16517:4;16391:131;:::i;:::-;16383:139;;16110:419;;;:::o;16535:224::-;16675:34;16671:1;16663:6;16659:14;16652:58;16744:7;16739:2;16731:6;16727:15;16720:32;16535:224;:::o;16765:366::-;16907:3;16928:67;16992:2;16987:3;16928:67;:::i;:::-;16921:74;;17004:93;17093:3;17004:93;:::i;:::-;17122:2;17117:3;17113:12;17106:19;;16765:366;;;:::o;17137:419::-;17303:4;17341:2;17330:9;17326:18;17318:26;;17390:9;17384:4;17380:20;17376:1;17365:9;17361:17;17354:47;17418:131;17544:4;17418:131;:::i;:::-;17410:139;;17137:419;;;:::o;17562:222::-;17702:34;17698:1;17690:6;17686:14;17679:58;17771:5;17766:2;17758:6;17754:15;17747:30;17562:222;:::o;17790:366::-;17932:3;17953:67;18017:2;18012:3;17953:67;:::i;:::-;17946:74;;18029:93;18118:3;18029:93;:::i;:::-;18147:2;18142:3;18138:12;18131:19;;17790:366;;;:::o;18162:419::-;18328:4;18366:2;18355:9;18351:18;18343:26;;18415:9;18409:4;18405:20;18401:1;18390:9;18386:17;18379:47;18443:131;18569:4;18443:131;:::i;:::-;18435:139;;18162:419;;;:::o;18587:225::-;18727:34;18723:1;18715:6;18711:14;18704:58;18796:8;18791:2;18783:6;18779:15;18772:33;18587:225;:::o;18818:366::-;18960:3;18981:67;19045:2;19040:3;18981:67;:::i;:::-;18974:74;;19057:93;19146:3;19057:93;:::i;:::-;19175:2;19170:3;19166:12;19159:19;;18818:366;;;:::o;19190:419::-;19356:4;19394:2;19383:9;19379:18;19371:26;;19443:9;19437:4;19433:20;19429:1;19418:9;19414:17;19407:47;19471:131;19597:4;19471:131;:::i;:::-;19463:139;;19190:419;;;:::o;19615:234::-;19755:34;19751:1;19743:6;19739:14;19732:58;19824:17;19819:2;19811:6;19807:15;19800:42;19615:234;:::o;19855:366::-;19997:3;20018:67;20082:2;20077:3;20018:67;:::i;:::-;20011:74;;20094:93;20183:3;20094:93;:::i;:::-;20212:2;20207:3;20203:12;20196:19;;19855:366;;;:::o;20227:419::-;20393:4;20431:2;20420:9;20416:18;20408:26;;20480:9;20474:4;20470:20;20466:1;20455:9;20451:17;20444:47;20508:131;20634:4;20508:131;:::i;:::-;20500:139;;20227:419;;;:::o;20652:181::-;20792:33;20788:1;20780:6;20776:14;20769:57;20652:181;:::o;20839:366::-;20981:3;21002:67;21066:2;21061:3;21002:67;:::i;:::-;20995:74;;21078:93;21167:3;21078:93;:::i;:::-;21196:2;21191:3;21187:12;21180:19;;20839:366;;;:::o;21211:419::-;21377:4;21415:2;21404:9;21400:18;21392:26;;21464:9;21458:4;21454:20;21450:1;21439:9;21435:17;21428:47;21492:131;21618:4;21492:131;:::i;:::-;21484:139;;21211:419;;;:::o;21636:220::-;21776:34;21772:1;21764:6;21760:14;21753:58;21845:3;21840:2;21832:6;21828:15;21821:28;21636:220;:::o;21862:366::-;22004:3;22025:67;22089:2;22084:3;22025:67;:::i;:::-;22018:74;;22101:93;22190:3;22101:93;:::i;:::-;22219:2;22214:3;22210:12;22203:19;;21862:366;;;:::o;22234:419::-;22400:4;22438:2;22427:9;22423:18;22415:26;;22487:9;22481:4;22477:20;22473:1;22462:9;22458:17;22451:47;22515:131;22641:4;22515:131;:::i;:::-;22507:139;;22234:419;;;:::o;22659:221::-;22799:34;22795:1;22787:6;22783:14;22776:58;22868:4;22863:2;22855:6;22851:15;22844:29;22659:221;:::o;22886:366::-;23028:3;23049:67;23113:2;23108:3;23049:67;:::i;:::-;23042:74;;23125:93;23214:3;23125:93;:::i;:::-;23243:2;23238:3;23234:12;23227:19;;22886:366;;;:::o;23258:419::-;23424:4;23462:2;23451:9;23447:18;23439:26;;23511:9;23505:4;23501:20;23497:1;23486:9;23482:17;23475:47;23539:131;23665:4;23539:131;:::i;:::-;23531:139;;23258:419;;;:::o;23683:148::-;23785:11;23822:3;23807:18;;23683:148;;;;:::o;23837:173::-;23977:25;23973:1;23965:6;23961:14;23954:49;23837:173;:::o;24016:402::-;24176:3;24197:85;24279:2;24274:3;24197:85;:::i;:::-;24190:92;;24291:93;24380:3;24291:93;:::i;:::-;24409:2;24404:3;24400:12;24393:19;;24016:402;;;:::o;24424:377::-;24530:3;24558:39;24591:5;24558:39;:::i;:::-;24613:89;24695:6;24690:3;24613:89;:::i;:::-;24606:96;;24711:52;24756:6;24751:3;24744:4;24737:5;24733:16;24711:52;:::i;:::-;24788:6;24783:3;24779:16;24772:23;;24534:267;24424:377;;;;:::o;24807:167::-;24947:19;24943:1;24935:6;24931:14;24924:43;24807:167;:::o;24980:402::-;25140:3;25161:85;25243:2;25238:3;25161:85;:::i;:::-;25154:92;;25255:93;25344:3;25255:93;:::i;:::-;25373:2;25368:3;25364:12;25357:19;;24980:402;;;:::o;25388:967::-;25770:3;25792:148;25936:3;25792:148;:::i;:::-;25785:155;;25957:95;26048:3;26039:6;25957:95;:::i;:::-;25950:102;;26069:148;26213:3;26069:148;:::i;:::-;26062:155;;26234:95;26325:3;26316:6;26234:95;:::i;:::-;26227:102;;26346:3;26339:10;;25388:967;;;;;:::o;26361:180::-;26409:77;26406:1;26399:88;26506:4;26503:1;26496:15;26530:4;26527:1;26520:15;26547:180;26595:77;26592:1;26585:88;26692:4;26689:1;26682:15;26716:4;26713:1;26706:15;26733:221;26873:34;26869:1;26861:6;26857:14;26850:58;26942:4;26937:2;26929:6;26925:15;26918:29;26733:221;:::o;26960:366::-;27102:3;27123:67;27187:2;27182:3;27123:67;:::i;:::-;27116:74;;27199:93;27288:3;27199:93;:::i;:::-;27317:2;27312:3;27308:12;27301:19;;26960:366;;;:::o;27332:419::-;27498:4;27536:2;27525:9;27521:18;27513:26;;27585:9;27579:4;27575:20;27571:1;27560:9;27556:17;27549:47;27613:131;27739:4;27613:131;:::i;:::-;27605:139;;27332:419;;;:::o;27757:348::-;27797:7;27820:20;27838:1;27820:20;:::i;:::-;27815:25;;27854:20;27872:1;27854:20;:::i;:::-;27849:25;;28042:1;27974:66;27970:74;27967:1;27964:81;27959:1;27952:9;27945:17;27941:105;27938:131;;;28049:18;;:::i;:::-;27938:131;28097:1;28094;28090:9;28079:20;;27757:348;;;;:::o;28111:180::-;28159:77;28156:1;28149:88;28256:4;28253:1;28246:15;28280:4;28277:1;28270:15;28297:171;28336:3;28359:24;28377:5;28359:24;:::i;:::-;28350:33;;28405:4;28398:5;28395:15;28392:41;;;28413:18;;:::i;:::-;28392:41;28460:1;28453:5;28449:13;28442:20;;28297:171;;;:::o;28474:182::-;28614:34;28610:1;28602:6;28598:14;28591:58;28474:182;:::o;28662:366::-;28804:3;28825:67;28889:2;28884:3;28825:67;:::i;:::-;28818:74;;28901:93;28990:3;28901:93;:::i;:::-;29019:2;29014:3;29010:12;29003:19;;28662:366;;;:::o;29034:419::-;29200:4;29238:2;29227:9;29223:18;29215:26;;29287:9;29281:4;29277:20;29273:1;29262:9;29258:17;29251:47;29315:131;29441:4;29315:131;:::i;:::-;29307:139;;29034:419;;;:::o
Swarm Source
ipfs://d2be01be5fa4748ec1bac560b584509d3e00e5efcdd8fbf71458e2b12cda73f0
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.