Contract Overview
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x7f635162885dc8d96dd0808690c00f0f762dd08116eedc24c1fd609c3424259f | Distribute Token... | 25018349 | 465 days 13 hrs ago | 0x37627beff2f83b0a10dc688d741802d5e26d3be0 | IN | 0xc7963fb87c365f67247f97d329d50b9ec5a374b8 | 0 MATIC | 0.001380858304 | |
0x6947136257ff5066fd44b04d106c4c08ca18bdc37dda8b056ee9a2d251ed5efc | Distribute Token... | 25018301 | 465 days 13 hrs ago | 0x37627beff2f83b0a10dc688d741802d5e26d3be0 | IN | 0xc7963fb87c365f67247f97d329d50b9ec5a374b8 | 0 MATIC | 0.001386817347 | |
0x0a2c9b8b848f17de5099df14f922875c4aa147673eef3d31ec71a1859a8bac11 | Add | 20209470 | 590 days 18 hrs ago | Tutellus: Deployer | IN | 0xc7963fb87c365f67247f97d329d50b9ec5a374b8 | 0 MATIC | 0.00651777 | |
0x0870cc5fcf84a4d9caa34a2223c63dfde8ca2a1d18e9500d6723a2910fec4cd8 | Add | 20208537 | 590 days 19 hrs ago | Tutellus: Deployer | IN | 0xc7963fb87c365f67247f97d329d50b9ec5a374b8 | 0 MATIC | 0.0059559 |
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xb4ebbb59cf80b7cd7cb97cf4e3424af05f44c79f533d0e0bece91cd81096b971 | 20208514 | 590 days 19 hrs ago | 0xf33dce7f829157500a5351475384d54e45c7aff6 | Contract Creation | 0 MATIC |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xBFAbCEb2C2Beb8206bA1EBC5F94A9D2D9144BC36
Contract Name:
TutellusRewardsVault
Compiler Version
v0.8.2+commit.661d1103
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "./utils/AccessControlProxyPausable.sol"; import "./interfaces/ITutellusERC20.sol"; contract TutellusRewardsVault is AccessControlProxyPausable { struct Info { uint256 allocation; uint256 released; uint256 distributed; } mapping(address=>Info) public info; mapping(uint256=>address) private id; uint private _lastUpdate; uint private _startBlock; uint private _endBlock; uint256 private _increment; uint256 private _total; address public token; event Init(uint startBlock, uint endBlock, uint256 increment); event Add(address account); event UpdateAllocation(uint256[] allocation); event DistributeTokens(address sender, address account, uint256 amount); constructor ( address rolemanager, address token_, uint256 amount, uint startBlock_, uint endBlock_ ) { __TutellusRewardsVault_init( rolemanager, token_, amount, startBlock_, endBlock_ ); } function startBlock() public view returns (uint) { return _startBlock; } function endBlock() public view returns (uint) { return _endBlock; } function add(address account, uint256[] memory allocation) public onlyRole(DEFAULT_ADMIN_ROLE) { id[_total] = account; info[account] = Info(0,0,0); _total+=1; updateAllocation(allocation); emit Add(account); } function updateAllocation(uint256[] memory allocation) public onlyRole(DEFAULT_ADMIN_ROLE) { uint256 sum = 0; uint256 length = allocation.length; require(length == _total, "TutellusRewardsVault: allocation array must have same length as number of accounts"); for(uint256 i=0; i<length; i++) { info[id[i]].released = releasedId(id[i]); info[id[i]].allocation = allocation[i]; sum+=allocation[i]; } _lastUpdate = block.number; require(sum==1e20, "TutellusRewardsVault: total allocation must be 1e20"); emit UpdateAllocation(allocation); } function released() public view returns (uint256) { return releasedRange(_startBlock, block.number); } function availableId(address account) public view returns (uint256) { return releasedId(account) - info[account].distributed; } function releasedRange(uint from, uint to) public view returns (uint256) { require(from <= to, "TutellusRewardsVault: {from} is after {to}"); if (to > _endBlock) { to = _endBlock; } if (from < _startBlock) { from = _startBlock; } uint256 comp0 = (_increment * ((to - _startBlock) ** 2)) / 2; uint256 comp1 = (_increment * ((from - _startBlock) ** 2)) / 2; return comp0 - comp1; } function releasedId(address account) public view returns (uint256) { return info[account].released + ((releasedRange(_lastUpdate, block.number) * info[account].allocation) / 1e20); } function distributeTokens(address account, uint256 amount) public { require(amount <= availableId(msg.sender), "TutellusRewardsVault: amount exceeds available"); info[msg.sender].distributed += amount; ITutellusERC20 tokenInterface = ITutellusERC20(token); tokenInterface.transfer(account, amount); emit DistributeTokens(msg.sender, account, amount); } function __TutellusRewardsVault_init( address rolemanager, address token_, uint256 amount, uint startBlock_, uint endBlock_ ) internal initializer { __AccessControlProxyPausable_init(rolemanager); __TutellusRewardsVault_init_unchained( token_, amount, startBlock_, endBlock_ ); } function __TutellusRewardsVault_init_unchained( address token_, uint256 amount, uint startBlock_, uint endBlock_ ) internal initializer { require(endBlock_ > startBlock_, "TutellusRewardsVault: start block exceeds end block"); token = token_; _startBlock = startBlock_; _endBlock = endBlock_; uint blocks = endBlock_ - startBlock_; _increment = (2 * amount) / (blocks ** 2); _lastUpdate = block.number; emit Init(_startBlock, _endBlock, _increment); } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; import "@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol"; abstract contract AccessControlProxyPausable is PausableUpgradeable { address private _manager; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); modifier onlyRole(bytes32 role) { address account = msg.sender; require(hasRole(role, account), string( abi.encodePacked( "AccessControlProxyPausable: account ", StringsUpgradeable.toHexString(uint160(account), 20), " is missing role ", StringsUpgradeable.toHexString(uint256(role), 32) ) )); _; } function hasRole(bytes32 role, address account) public view returns (bool) { IAccessControlUpgradeable manager = IAccessControlUpgradeable(_manager); return manager.hasRole(role, account); } function __AccessControlProxyPausable_init(address manager) internal initializer { __Pausable_init(); __AccessControlProxyPausable_init_unchained(manager); } function __AccessControlProxyPausable_init_unchained(address manager) internal initializer { _manager = manager; } function pause() public onlyRole(PAUSER_ROLE){ _pause(); } function unpause() public onlyRole(PAUSER_ROLE){ _unpause(); } function updateManager(address manager) public onlyRole(DEFAULT_ADMIN_ROLE) { _manager = manager; } }
// SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; interface ITutellusERC20 { /** * @dev Returns the amount of tokens burned. */ function burned() external view returns (uint256); /** * @dev Mints `amount` tokens to `account`. */ function mint(address account, uint256 amount) external; /** * @dev Burns `amount` tokens. */ function burn(uint256 amount) external; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControlUpgradeable { /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. * * _Available since v3.1._ */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/ContextUpgradeable.sol"; import "../proxy/utils/Initializable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[49] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev String operations. */ library StringsUpgradeable { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../proxy/utils/Initializable.sol"; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"rolemanager","type":"address"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startBlock_","type":"uint256"},{"internalType":"uint256","name":"endBlock_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DistributeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"increment","type":"uint256"}],"name":"Init","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[]","name":"allocation","type":"uint256[]"}],"name":"UpdateAllocation","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"allocation","type":"uint256[]"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"availableId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"distributeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"info","outputs":[{"internalType":"uint256","name":"allocation","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"},{"internalType":"uint256","name":"distributed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasedId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"from","type":"uint256"},{"internalType":"uint256","name":"to","type":"uint256"}],"name":"releasedRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"allocation","type":"uint256[]"}],"name":"updateAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"updateManager","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620031ed380380620031ed83398181016040528101906200003791906200088c565b6200004c85858585856200005760201b60201c565b505050505062000df3565b600060019054906101000a900460ff16806200007e575060008054906101000a900460ff16155b620000c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000b7906200096d565b60405180910390fd5b60008060019054906101000a900460ff16159050801562000111576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b62000122866200016060201b60201c565b62000136858585856200026160201b60201c565b8015620001585760008060016101000a81548160ff0219169083151502179055505b505050505050565b600060019054906101000a900460ff168062000187575060008054906101000a900460ff16155b620001c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c0906200096d565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200021a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200022a6200046560201b60201c565b6200023b826200056460201b60201c565b80156200025d5760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff168062000288575060008054906101000a900460ff16155b620002ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c1906200096d565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200031b576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b82821162000360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000357906200098f565b60405180910390fd5b84606d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260698190555081606a8190555060008383620003bf919062000c30565b9050600281620003d0919062000a92565b856002620003df919062000bcf565b620003eb9190620009ff565b606b81905550436068819055507ff1bd4f3fcb4e0b193abc7e4002c0284e25086269a02de2e4c52045a91f647037606954606a54606b546040516200043393929190620009b1565b60405180910390a15080156200045e5760008060016101000a81548160ff0219169083151502179055505b5050505050565b600060019054906101000a900460ff16806200048c575060008054906101000a900460ff16155b620004ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c5906200096d565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200051f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200052f6200068560201b60201c565b6200053f6200076460201b60201c565b8015620005615760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200058b575060008054906101000a900460ff16155b620005cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c4906200096d565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200061e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b81606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620006815760008060016101000a81548160ff0219169083151502179055505b5050565b600060019054906101000a900460ff1680620006ac575060008054906101000a900460ff16155b620006ee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e5906200096d565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200073f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015620007615760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806200078b575060008054906101000a900460ff16155b620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c4906200096d565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200081e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6000603360006101000a81548160ff02191690831515021790555080156200085b5760008060016101000a81548160ff0219169083151502179055505b50565b6000815190506200086f8162000dbf565b92915050565b600081519050620008868162000dd9565b92915050565b600080600080600060a08688031215620008a557600080fd5b6000620008b5888289016200085e565b9550506020620008c8888289016200085e565b9450506040620008db8882890162000875565b9350506060620008ee8882890162000875565b9250506080620009018882890162000875565b9150509295509295909350565b60006200091d602e83620009ee565b91506200092a8262000d21565b604082019050919050565b600062000944603383620009ee565b9150620009518262000d70565b604082019050919050565b620009678162000c9f565b82525050565b6000602082019050818103600083015262000988816200090e565b9050919050565b60006020820190508181036000830152620009aa8162000935565b9050919050565b6000606082019050620009c860008301866200095c565b620009d760208301856200095c565b620009e660408301846200095c565b949350505050565b600082825260208201905092915050565b600062000a0c8262000c9f565b915062000a198362000c9f565b92508262000a2c5762000a2b62000ce5565b5b828204905092915050565b6000808291508390505b600185111562000a895780860481111562000a615762000a6062000cb6565b5b600185161562000a715780820291505b808102905062000a818562000d14565b945062000a41565b94509492505050565b600062000a9f8262000c9f565b915062000aac8362000ca9565b925062000adb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ae3565b905092915050565b60008262000af5576001905062000bc8565b8162000b05576000905062000bc8565b816001811462000b1e576002811462000b295762000b5f565b600191505062000bc8565b60ff84111562000b3e5762000b3d62000cb6565b5b8360020a91508482111562000b585762000b5762000cb6565b5b5062000bc8565b5060208310610133831016604e8410600b841016171562000b995782820a90508381111562000b935762000b9262000cb6565b5b62000bc8565b62000ba8848484600162000a37565b9250905081840481111562000bc25762000bc162000cb6565b5b81810290505b9392505050565b600062000bdc8262000c9f565b915062000be98362000c9f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c255762000c2462000cb6565b5b828202905092915050565b600062000c3d8262000c9f565b915062000c4a8362000c9f565b92508282101562000c605762000c5f62000cb6565b5b828203905092915050565b600062000c788262000c7f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f547574656c6c7573526577617264735661756c743a20737461727420626c6f6360008201527f6b206578636565647320656e6420626c6f636b00000000000000000000000000602082015250565b62000dca8162000c6b565b811462000dd657600080fd5b50565b62000de48162000c9f565b811462000df057600080fd5b50565b6123ea8062000e036000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80636867aac5116100a2578063a217fddf11610071578063a217fddf146102bd578063ae7928bf146102db578063cccc9a921461030b578063e63ab1e914610327578063fc0c546a1461034557610116565b80636867aac5146102355780638456cb591461026557806391d148541461026f578063961325211461029f57610116565b806337cb9e67116100e957806337cb9e67146101b75780633f4ba83a146101d357806348cd4cb1146101dd57806358aba00f146101fb5780635c975abb1461021757610116565b8063083c63231461011b5780630aae7a6b14610139578063158a49881461016b5780631d444d3014610187575b600080fd5b610123610363565b6040516101309190611b99565b60405180910390f35b610153600480360381019061014e9190611560565b61036d565b60405161016293929190611bb4565b60405180910390f35b610185600480360381019061018091906115dd565b610397565b005b6101a1600480360381019061019c9190611560565b610530565b6040516101ae9190611b99565b60405180910390f35b6101d160048036038101906101cc9190611619565b61058f565b005b6101db6108ea565b005b6101e56109b7565b6040516101f29190611b99565b60405180910390f35b61021560048036038101906102109190611560565b6109c1565b005b61021f610aab565b60405161022c9190611a38565b60405180910390f35b61024f600480360381019061024a91906116bf565b610ac2565b60405161025c9190611b99565b60405180910390f35b61026d610ba9565b005b61028960048036038101906102849190611683565b610c76565b6040516102969190611a38565b60405180910390f35b6102a7610d32565b6040516102b49190611b99565b60405180910390f35b6102c5610d45565b6040516102d29190611a53565b60405180910390f35b6102f560048036038101906102f09190611560565b610d4c565b6040516103029190611b99565b60405180910390f35b61032560048036038101906103209190611589565b610e0f565b005b61032f610fe5565b60405161033c9190611a53565b60405180910390f35b61034d611009565b60405161035a919061199b565b60405180910390f35b6000606a54905090565b60666020528060005260406000206000915090508060000154908060010154908060020154905083565b6103a033610530565b8111156103e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d990611af9565b60405180910390fd5b80606660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546104349190611c9c565b925050819055506000606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b815260040161049d9291906119ed565b602060405180830381600087803b1580156104b757600080fd5b505af11580156104cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ef919061165a565b507f94c0ac970a66c6e8a58afdcd954f63d508e147b98e6f8b803e5c8c37dab11c85338484604051610523939291906119b6565b60405180910390a1505050565b6000606660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461057e83610d4c565b6105889190611eee565b9050919050565b6000801b60003390506105a28282610c76565b6105c38273ffffffffffffffffffffffffffffffffffffffff16601461102f565b6105d18460001c602061102f565b6040516020016105e2929190611961565b60405160208183030381529060405290610632576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106299190611a97565b60405180910390fd5b5060008084519050606c54811461067e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590611b19565b60405180910390fd5b60005b81811015610859576106c56067600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d4c565b606660006067600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550858181518110610777577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151606660006067600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550858181518110610831577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151836108449190611c9c565b925080806108519061200f565b915050610681565b504360688190555068056bc75e2d6310000082146108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a390611b79565b60405180910390fd5b7ff33f61b2dd1b74358b2cd80adfa809a090f0e0b0f7e4b6e408b4994f31b073fc856040516108db9190611a16565b60405180910390a15050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a600033905061091a8282610c76565b61093b8273ffffffffffffffffffffffffffffffffffffffff16601461102f565b6109498460001c602061102f565b60405160200161095a929190611961565b604051602081830303815290604052906109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a19190611a97565b60405180910390fd5b506109b3611329565b5050565b6000606954905090565b6000801b60003390506109d48282610c76565b6109f58273ffffffffffffffffffffffffffffffffffffffff16601461102f565b610a038460001c602061102f565b604051602001610a14929190611961565b60405160208183030381529060405290610a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5b9190611a97565b60405180910390fd5b5082606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000603360009054906101000a900460ff16905090565b600081831115610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90611b59565b60405180910390fd5b606a54821115610b1757606a5491505b606954831015610b275760695492505b600060028060695485610b3a9190611eee565b610b449190611d76565b606b54610b519190611e94565b610b5b9190611cf2565b9050600060028060695487610b709190611eee565b610b7a9190611d76565b606b54610b879190611e94565b610b919190611cf2565b90508082610b9f9190611eee565b9250505092915050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6000339050610bd98282610c76565b610bfa8273ffffffffffffffffffffffffffffffffffffffff16601461102f565b610c088460001c602061102f565b604051602001610c19929190611961565b60405160208183030381529060405290610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c609190611a97565b60405180910390fd5b50610c726113cb565b5050565b600080606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166391d1485485856040518363ffffffff1660e01b8152600401610cd9929190611a6e565b60206040518083038186803b158015610cf157600080fd5b505afa158015610d05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d29919061165a565b91505092915050565b6000610d4060695443610ac2565b905090565b6000801b81565b600068056bc75e2d63100000606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154610da760685443610ac2565b610db19190611e94565b610dbb9190611cf2565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610e089190611c9c565b9050919050565b6000801b6000339050610e228282610c76565b610e438273ffffffffffffffffffffffffffffffffffffffff16601461102f565b610e518460001c602061102f565b604051602001610e62929190611961565b60405160208183030381529060405290610eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea99190611a97565b60405180910390fd5b508360676000606c54815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060008152602001600081526020016000815250606660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050506001606c6000828254610f989190611c9c565b92505081905550610fa88361058f565b7f87dc5eecd6d6bdeae407c426da6bfba5b7190befc554ed5d4d62dd5cf939fbae84604051610fd7919061199b565b60405180910390a150505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b606d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600060028360026110429190611e94565b61104c9190611c9c565b67ffffffffffffffff81111561108b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156110bd5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061111b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106111a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026111e59190611e94565b6111ef9190611c9c565b90505b60018111156112db577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611257577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110611294577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806112d490611fb4565b90506111f2565b506000841461131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131690611ab9565b60405180910390fd5b8091505092915050565b611331610aab565b611370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136790611ad9565b60405180910390fd5b6000603360006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6113b461146e565b6040516113c1919061199b565b60405180910390a1565b6113d3610aab565b15611413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140a90611b39565b60405180910390fd5b6001603360006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861145761146e565b604051611464919061199b565b60405180910390a1565b600033905090565b600061148961148484611c10565b611beb565b905080838252602082019050828560208602820111156114a857600080fd5b60005b858110156114d857816114be888261154b565b8452602084019350602083019250506001810190506114ab565b5050509392505050565b6000813590506114f181612358565b92915050565b600082601f83011261150857600080fd5b8135611518848260208601611476565b91505092915050565b6000815190506115308161236f565b92915050565b60008135905061154581612386565b92915050565b60008135905061155a8161239d565b92915050565b60006020828403121561157257600080fd5b6000611580848285016114e2565b91505092915050565b6000806040838503121561159c57600080fd5b60006115aa858286016114e2565b925050602083013567ffffffffffffffff8111156115c757600080fd5b6115d3858286016114f7565b9150509250929050565b600080604083850312156115f057600080fd5b60006115fe858286016114e2565b925050602061160f8582860161154b565b9150509250929050565b60006020828403121561162b57600080fd5b600082013567ffffffffffffffff81111561164557600080fd5b611651848285016114f7565b91505092915050565b60006020828403121561166c57600080fd5b600061167a84828501611521565b91505092915050565b6000806040838503121561169657600080fd5b60006116a485828601611536565b92505060206116b5858286016114e2565b9150509250929050565b600080604083850312156116d257600080fd5b60006116e08582860161154b565b92505060206116f18582860161154b565b9150509250929050565b60006117078383611943565b60208301905092915050565b61171c81611f22565b82525050565b600061172d82611c4c565b6117378185611c6f565b935061174283611c3c565b8060005b8381101561177357815161175a88826116fb565b975061176583611c62565b925050600181019050611746565b5085935050505092915050565b61178981611f34565b82525050565b61179881611f40565b82525050565b60006117a982611c57565b6117b38185611c80565b93506117c3818560208601611f81565b6117cc816120e5565b840191505092915050565b60006117e282611c57565b6117ec8185611c91565b93506117fc818560208601611f81565b80840191505092915050565b6000611815602083611c80565b915061182082612103565b602082019050919050565b6000611838602483611c91565b91506118438261212c565b602482019050919050565b600061185b601483611c80565b91506118668261217b565b602082019050919050565b600061187e602e83611c80565b9150611889826121a4565b604082019050919050565b60006118a1605283611c80565b91506118ac826121f3565b606082019050919050565b60006118c4601083611c80565b91506118cf82612268565b602082019050919050565b60006118e7602a83611c80565b91506118f282612291565b604082019050919050565b600061190a603383611c80565b9150611915826122e0565b604082019050919050565b600061192d601183611c91565b91506119388261232f565b601182019050919050565b61194c81611f6a565b82525050565b61195b81611f6a565b82525050565b600061196c8261182b565b915061197882856117d7565b915061198382611920565b915061198f82846117d7565b91508190509392505050565b60006020820190506119b06000830184611713565b92915050565b60006060820190506119cb6000830186611713565b6119d86020830185611713565b6119e56040830184611952565b949350505050565b6000604082019050611a026000830185611713565b611a0f6020830184611952565b9392505050565b60006020820190508181036000830152611a308184611722565b905092915050565b6000602082019050611a4d6000830184611780565b92915050565b6000602082019050611a68600083018461178f565b92915050565b6000604082019050611a83600083018561178f565b611a906020830184611713565b9392505050565b60006020820190508181036000830152611ab1818461179e565b905092915050565b60006020820190508181036000830152611ad281611808565b9050919050565b60006020820190508181036000830152611af28161184e565b9050919050565b60006020820190508181036000830152611b1281611871565b9050919050565b60006020820190508181036000830152611b3281611894565b9050919050565b60006020820190508181036000830152611b52816118b7565b9050919050565b60006020820190508181036000830152611b72816118da565b9050919050565b60006020820190508181036000830152611b92816118fd565b9050919050565b6000602082019050611bae6000830184611952565b92915050565b6000606082019050611bc96000830186611952565b611bd66020830185611952565b611be36040830184611952565b949350505050565b6000611bf5611c06565b9050611c018282611fde565b919050565b6000604051905090565b600067ffffffffffffffff821115611c2b57611c2a6120b6565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000611ca782611f6a565b9150611cb283611f6a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611ce757611ce6612058565b5b828201905092915050565b6000611cfd82611f6a565b9150611d0883611f6a565b925082611d1857611d17612087565b5b828204905092915050565b6000808291508390505b6001851115611d6d57808604811115611d4957611d48612058565b5b6001851615611d585780820291505b8081029050611d66856120f6565b9450611d2d565b94509492505050565b6000611d8182611f6a565b9150611d8c83611f74565b9250611db97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611dc1565b905092915050565b600082611dd15760019050611e8d565b81611ddf5760009050611e8d565b8160018114611df55760028114611dff57611e2e565b6001915050611e8d565b60ff841115611e1157611e10612058565b5b8360020a915084821115611e2857611e27612058565b5b50611e8d565b5060208310610133831016604e8410600b8410161715611e635782820a905083811115611e5e57611e5d612058565b5b611e8d565b611e708484846001611d23565b92509050818404811115611e8757611e86612058565b5b81810290505b9392505050565b6000611e9f82611f6a565b9150611eaa83611f6a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611ee357611ee2612058565b5b828202905092915050565b6000611ef982611f6a565b9150611f0483611f6a565b925082821015611f1757611f16612058565b5b828203905092915050565b6000611f2d82611f4a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611f9f578082015181840152602081019050611f84565b83811115611fae576000848401525b50505050565b6000611fbf82611f6a565b91506000821415611fd357611fd2612058565b5b600182039050919050565b611fe7826120e5565b810181811067ffffffffffffffff82111715612006576120056120b6565b5b80604052505050565b600061201a82611f6a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561204d5761204c612058565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c50726f78795061757361626c653a206163636f60008201527f756e742000000000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f547574656c6c7573526577617264735661756c743a20616d6f756e742065786360008201527f6565647320617661696c61626c65000000000000000000000000000000000000602082015250565b7f547574656c6c7573526577617264735661756c743a20616c6c6f636174696f6e60008201527f206172726179206d75737420686176652073616d65206c656e6774682061732060208201527f6e756d626572206f66206163636f756e74730000000000000000000000000000604082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f547574656c6c7573526577617264735661756c743a207b66726f6d7d2069732060008201527f6166746572207b746f7d00000000000000000000000000000000000000000000602082015250565b7f547574656c6c7573526577617264735661756c743a20746f74616c20616c6c6f60008201527f636174696f6e206d757374206265203165323000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b61236181611f22565b811461236c57600080fd5b50565b61237881611f34565b811461238357600080fd5b50565b61238f81611f40565b811461239a57600080fd5b50565b6123a681611f6a565b81146123b157600080fd5b5056fea26469706673582212209c91c6365a4853c2451ecb11b1e5bc4b532bfef85311543d8c151d4473509e7764736f6c6343000802003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
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.