Contract Overview
Balance:
0 BTT
BTT Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x67d866e99d739802710c949c25c5e4aa6c743507b0b79dded41c3abcba08c5b2 | 0x60a06040 | 11339976 | 198 days 14 hrs ago | 0x56fb3f7d1c1ed4e61aa3af7ea143f8c48be1a02f | IN | Create: BtfsStatus | 0 BTT | 1,104.9519 |
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
BtfsStatus
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at bttcscan.com on 2022-09-07 */ // File: @openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol) pragma solidity ^0.8.0; /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ``` * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ */ library StorageSlotUpgradeable { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { assembly { r.slot := slot } } } // File: @openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.0; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeaconUpgradeable { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function implementation() external view returns (address); } // File: @openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.0; /** * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified * proxy whose upgrades are fully controlled by the current implementation. */ interface IERC1822ProxiableUpgradeable { /** * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation * address. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. */ function proxiableUUID() external view returns (bytes32); } // File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts (last updated v4.6.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; /** * @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 proxied contracts do not make use of 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. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ``` * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * 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. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`. */ modifier initializer() { bool isTopLevelCall = _setInitializedVersion(1); if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original * initialization step. This is essential to configure modules that are added through upgrades and that require * initialization. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. */ modifier reinitializer(uint8 version) { bool isTopLevelCall = _setInitializedVersion(version); if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(version); } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. */ function _disableInitializers() internal virtual { _setInitializedVersion(type(uint8).max); } function _setInitializedVersion(uint8 version) private returns (bool) { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, and for the lowest level // of initializers, because in other contexts the contract may have been reentered. if (_initializing) { require( version == 1 && !AddressUpgradeable.isContract(address(this)), "Initializable: contract is already initialized" ); return false; } else { require(_initialized < version, "Initializable: contract is already initialized"); _initialized = version; return true; } } } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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 ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; } // File: @openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol) pragma solidity ^0.8.2; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. * * _Available since v4.1._ * * @custom:oz-upgrades-unsafe-allow delegatecall */ abstract contract ERC1967UpgradeUpgradeable is Initializable { function __ERC1967Upgrade_init() internal onlyInitializing { } function __ERC1967Upgrade_init_unchained() internal onlyInitializing { } // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Returns the current implementation address. */ function _getImplementation() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { require(AddressUpgradeable.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Perform implementation upgrade * * Emits an {Upgraded} event. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Perform implementation upgrade with additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCall( address newImplementation, bytes memory data, bool forceCall ) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { _functionDelegateCall(newImplementation, data); } } /** * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCallUUPS( address newImplementation, bytes memory data, bool forceCall ) internal { // Upgrades from old implementations will perform a rollback test. This test requires the new // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing // this special case will break upgrade paths from old UUPS implementation to new ones. if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) { _setImplementation(newImplementation); } else { try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) { require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); } catch { revert("ERC1967Upgrade: new implementation is not UUPS"); } _upgradeToAndCall(newImplementation, data, forceCall); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Returns the current admin. */ function _getAdmin() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. */ function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. */ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Emitted when the beacon is upgraded. */ event BeaconUpgraded(address indexed beacon); /** * @dev Returns the current beacon. */ function _getBeacon() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { require(AddressUpgradeable.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon; } /** * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). * * Emits a {BeaconUpgraded} event. */ function _upgradeBeaconToAndCall( address newBeacon, bytes memory data, bool forceCall ) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { _functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data); } } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) { require(AddressUpgradeable.isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return AddressUpgradeable.verifyCallResult(success, returndata, "Address: low-level delegate call failed"); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (proxy/utils/UUPSUpgradeable.sol) pragma solidity ^0.8.0; /** * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. * * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing * `UUPSUpgradeable` with a custom implementation of upgrades. * * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. * * _Available since v4.1._ */ abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable { function __UUPSUpgradeable_init() internal onlyInitializing { } function __UUPSUpgradeable_init_unchained() internal onlyInitializing { } /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment address private immutable __self = address(this); /** * @dev Check that the execution is being performed through a delegatecall call and that the execution context is * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to * fail. */ modifier onlyProxy() { require(address(this) != __self, "Function must be called through delegatecall"); require(_getImplementation() == __self, "Function must be called through active proxy"); _; } /** * @dev Check that the execution is not being performed through a delegate call. This allows a function to be * callable on the implementing contract but not through proxies. */ modifier notDelegated() { require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); _; } /** * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the * implementation. It is used to validate that the this implementation remains valid after an upgrade. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. */ function proxiableUUID() external view virtual override notDelegated returns (bytes32) { return _IMPLEMENTATION_SLOT; } /** * @dev Upgrade the implementation of the proxy to `newImplementation`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeTo(address newImplementation) external virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); } /** * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call * encoded in `data`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, data, true); } /** * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by * {upgradeTo} and {upgradeToAndCall}. * * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. * * ```solidity * function _authorizeUpgrade(address) internal override onlyOwner {} * ``` */ function _authorizeUpgrade(address newImplementation) internal virtual; /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: contracts/8-status-new.sol pragma solidity ^0.8.4; // Open Zeppelin libraries for controlling upgradability and access. // BtfsStatus for hosts' heartbeat report contract BtfsStatus is Initializable, UUPSUpgradeable, OwnableUpgradeable{ using SafeMath for uint256; // map[peer]info struct info { uint32 createTime; string version; uint32 lastNonce; uint32 lastSignedTime; bytes lastSigned; uint16[30] hearts; } mapping(string => info) private peerMap; // sign address address currentSignAddress; address[20] currentSignAddressList; // version string public currentVersion; event signAddressChanged(address lastSignAddress, address currentSignAddress); event versionChanged(string currentVersion, string version); event statusReported(string peer, uint32 createTime, string version, uint32 Nonce, address bttcAddress, uint32 signedTime, uint32 lastNonce, uint32 nowTime, uint16[30] hearts); // stat struct statistics { uint64 total; uint64 totalUsers; } statistics public totalStat; // initialize function initialize(address signAddress) public initializer { currentSignAddress = signAddress; __Ownable_init(); } ///@dev required by the OZ UUPS module function _authorizeUpgrade(address) internal override onlyOwner {} // set sign address, only owner do it function setSignAddress(address addr) public onlyOwner { emit signAddressChanged(currentSignAddress, addr); currentSignAddress = addr; } // get sign address, only owner do it function getSignAddress() public view onlyOwner returns (address) { return (currentSignAddress); } // set current version, only owner do it function setCurrentVersion(string memory ver) public onlyOwner { emit versionChanged(currentVersion, ver); currentVersion = ver; } // get host when score = 8.0 function getHighScoreHost() external returns(info[] memory) {} function getStatus(string memory peer) external view returns(string memory, uint32, string memory, uint32, uint32, bytes memory, uint16[30] memory) { if (peerMap[peer].lastNonce == 0) { uint16[30] memory hearts; bytes memory s; return ("", 0, "", 0, 0, s, hearts); } else { info memory node = peerMap[peer]; return (peer, node.createTime, node.version, node.lastNonce, node.lastSignedTime, node.lastSigned, node.hearts); } } // set heart, max idle days = 10 function setHeart(string memory peer, uint32 Nonce, uint32 nowTime) internal { uint32 diffTime = nowTime - peerMap[peer].lastSignedTime; if (diffTime > 30 * 86400) { diffTime = 30 * 86400; } uint32 diffDays = diffTime / 86400; uint32 diffNonce = Nonce - peerMap[peer].lastNonce; if (diffDays > 0 && diffNonce > diffDays * 24) { diffNonce = diffDays * 24; } uint32 balanceNum = diffNonce; // 1.set new (diffDays-1) average Nonce; (it is alse reset 0 for more than 30 days' diffDays) for (uint32 i = 1; i < diffDays; i++) { uint indexTmp = ((nowTime - i * 86400) / 86400) % 30; peerMap[peer].hearts[indexTmp] = uint16(diffNonce/diffDays); balanceNum = balanceNum - diffNonce/diffDays; } // 2.set today balanceNum uint index = (nowTime / 86400) % 30; peerMap[peer].hearts[index] = uint16(balanceNum); } // report status function reportStatus(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime, bytes memory signed) external { require(0 < createTime, "reportStatus: Invalid createTime"); require(0 < Nonce, "reportStatus: Invalid Nonce"); require(0 < signedTime, "reportStatus: Invalid signedTime"); require(0 < signed.length, "reportStatus: Invalid signed"); require(peerMap[peer].lastNonce < Nonce, "reportStatus: Invalid lastNonce<Nonce"); // verify input param with the signed data. bytes32 hash = genHash(peer, createTime, version, Nonce, bttcAddress, signedTime); require( recoverSigner(hash, signed) == currentSignAddress, "reportStatus: Invalid signed address."); // only bttcAddress is sender, to report status require(bttcAddress == msg.sender, "reportStatus: Invalid msg.sender"); uint32 lastNonce = peerMap[peer].lastNonce; uint32 nowTime = uint32(block.timestamp); uint index = (nowTime / 86400) % 30; // first report if (peerMap[peer].lastNonce == 0) { uint32 initNonce = Nonce; if (initNonce > 24) { initNonce = 24; } peerMap[peer].hearts[index] = uint16(initNonce); totalStat.totalUsers += 1; totalStat.total += 1; } else { require(nowTime-signedTime <= 86400, "reportStatus: signed time must be within 1 days of the current time."); require(peerMap[peer].createTime == createTime, "reportStatus: Invalid createTime."); setHeart(peer, Nonce, nowTime); totalStat.total += Nonce - peerMap[peer].lastNonce; } peerMap[peer].createTime = createTime; peerMap[peer].version = version; peerMap[peer].lastNonce = Nonce; peerMap[peer].lastSignedTime = signedTime; peerMap[peer].lastSigned = signed; emitStatusReported( peer, createTime, version, Nonce, bttcAddress, signedTime, lastNonce, uint32(block.timestamp) ); } function emitStatusReported(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime, uint32 lastNonce, uint32 nowTime) internal { uint16[30] memory hearts = peerMap[peer].hearts; emit statusReported( peer, createTime, version, Nonce, bttcAddress, signedTime, lastNonce, nowTime, hearts ); } function recoverSigner(bytes32 hash, bytes memory sig) internal pure returns (address) { (uint8 v, bytes32 r, bytes32 s) = splitSignature(sig); return ecrecover(hash, v+27, r, s); } function splitSignature(bytes memory sig) internal pure returns (uint8, bytes32, bytes32) { require(sig.length == 65); bytes32 r; bytes32 s; uint8 v; assembly { // first 32 bytes, after the length prefix r := mload(add(sig, 32)) // second 32 bytes s := mload(add(sig, 64)) // final byte (first byte of the next 32 bytes) v := byte(0, mload(add(sig, 96))) } return (v, r, s); } function genHash(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime) internal pure returns (bytes32) { bytes memory data = abi.encode(peer, createTime, version, Nonce, bttcAddress, signedTime); return keccak256(abi.encode("\x19Ethereum Signed Message:\n", data.length, data)); } // call from external function genHashExt(string memory peer, uint32 createTime, string memory version, uint32 Nonce, address bttcAddress, uint32 signedTime) external pure returns (bytes32) { return genHash(peer, createTime, version, Nonce, bttcAddress, signedTime); } // call from external function recoverSignerExt(bytes32 hash, bytes memory sig) external pure returns (address) { (uint8 v, bytes32 r, bytes32 s) = splitSignature(sig); return ecrecover(hash, v+27, r, s); } }
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lastSignAddress","type":"address"},{"indexed":false,"internalType":"address","name":"currentSignAddress","type":"address"}],"name":"signAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"peer","type":"string"},{"indexed":false,"internalType":"uint32","name":"createTime","type":"uint32"},{"indexed":false,"internalType":"string","name":"version","type":"string"},{"indexed":false,"internalType":"uint32","name":"Nonce","type":"uint32"},{"indexed":false,"internalType":"address","name":"bttcAddress","type":"address"},{"indexed":false,"internalType":"uint32","name":"signedTime","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"lastNonce","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"nowTime","type":"uint32"},{"indexed":false,"internalType":"uint16[30]","name":"hearts","type":"uint16[30]"}],"name":"statusReported","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"currentVersion","type":"string"},{"indexed":false,"internalType":"string","name":"version","type":"string"}],"name":"versionChanged","type":"event"},{"inputs":[],"name":"currentVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"peer","type":"string"},{"internalType":"uint32","name":"createTime","type":"uint32"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint32","name":"Nonce","type":"uint32"},{"internalType":"address","name":"bttcAddress","type":"address"},{"internalType":"uint32","name":"signedTime","type":"uint32"}],"name":"genHashExt","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getHighScoreHost","outputs":[{"components":[{"internalType":"uint32","name":"createTime","type":"uint32"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint32","name":"lastNonce","type":"uint32"},{"internalType":"uint32","name":"lastSignedTime","type":"uint32"},{"internalType":"bytes","name":"lastSigned","type":"bytes"},{"internalType":"uint16[30]","name":"hearts","type":"uint16[30]"}],"internalType":"struct BtfsStatus.info[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getSignAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"peer","type":"string"}],"name":"getStatus","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"string","name":"","type":"string"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint16[30]","name":"","type":"uint16[30]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSignerExt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"peer","type":"string"},{"internalType":"uint32","name":"createTime","type":"uint32"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint32","name":"Nonce","type":"uint32"},{"internalType":"address","name":"bttcAddress","type":"address"},{"internalType":"uint32","name":"signedTime","type":"uint32"},{"internalType":"bytes","name":"signed","type":"bytes"}],"name":"reportStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ver","type":"string"}],"name":"setCurrentVersion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStat","outputs":[{"internalType":"uint64","name":"total","type":"uint64"},{"internalType":"uint64","name":"totalUsers","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c6141f56100816000396000818161098b01528181610a1a01528181610b4e01528181610bdd0152610c8d01526141f56000f3fe6080604052600436106100fe5760003560e01c80636846874d116100955780639d888e86116100645780639d888e8614610307578063a6a83a0914610332578063c4d66de81461036f578063e77fdbb314610398578063f2fde38b146103c3576100fe565b80636846874d1461025f578063715018a61461028857806375839f3a1461029f5780638da5cb5b146102dc576100fe565b80633659cfe6116100d15780633659cfe6146101c357806338b88cb1146101ec5780634f1ef2861461021857806352d1902d14610234576100fe565b806313930cf614610103578063151370451461012c5780631a82de771461015557806322b05ed214610180575b600080fd5b34801561010f57600080fd5b5061012a6004803603810190610125919061278a565b6103ec565b005b34801561013857600080fd5b50610153600480360381019061014e9190612678565b6104bc565b005b34801561016157600080fd5b5061016a6105d7565b60405161017791906130c8565b60405180910390f35b34801561018c57600080fd5b506101a760048036038101906101a2919061278a565b61067d565b6040516101ba97969594939291906132d5565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612678565b610989565b005b3480156101f857600080fd5b50610201610b12565b60405161020f929190613654565b60405180910390f35b610232600480360381019061022d91906126a5565b610b4c565b005b34801561024057600080fd5b50610249610c89565b604051610256919061312e565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190612898565b610d42565b005b34801561029457600080fd5b5061029d61146a565b005b3480156102ab57600080fd5b506102c660048036038101906102c191906127d3565b6114f2565b6040516102d3919061312e565b60405180910390f35b3480156102e857600080fd5b506102f161150e565b6040516102fe91906130c8565b60405180910390f35b34801561031357600080fd5b5061031c611538565b60405161032991906131a9565b60405180910390f35b34801561033e57600080fd5b506103596004803603810190610354919061272e565b6115c6565b60405161036691906130c8565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612678565b611641565b005b3480156103a457600080fd5b506103ad611717565b6040516103ba919061310c565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190612678565b61171c565b005b6103f4611814565b73ffffffffffffffffffffffffffffffffffffffff1661041261150e565b73ffffffffffffffffffffffffffffffffffffffff1614610468576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161045f90613551565b60405180910390fd5b7f80af6bbb3cb9aa0aad01eae48ff867ec029bd4a463b03ad7426f9508b2eaac8160df8260405161049a92919061335a565b60405180910390a18060df90805190602001906104b89291906123f8565b5050565b6104c4611814565b73ffffffffffffffffffffffffffffffffffffffff166104e261150e565b73ffffffffffffffffffffffffffffffffffffffff1614610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052f90613551565b60405180910390fd5b7f799687174e9d4c0b0c3552621923bcfe3569533db0b1ade3cd8192bc8f854b3760ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161058b9291906130e3565b60405180910390a18060ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006105e1611814565b73ffffffffffffffffffffffffffffffffffffffff166105ff61150e565b73ffffffffffffffffffffffffffffffffffffffff1614610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c90613551565b60405180910390fd5b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060006060600080606061069061247e565b600060c9896040516106a291906130b1565b908152602001604051809103902060020160009054906101000a900463ffffffff1663ffffffff16141561071f576106d861247e565b60606000806000838560405180602001604052806000815250949392919060405180602001604052806000815250939291909850985098509850985098509850505061097e565b600060c98960405161073191906130b1565b90815260200160405180910390206040518060c00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182018054610780906139eb565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac906139eb565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b505050505081526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160038201805461085e906139eb565b80601f016020809104026020016040519081016040528092919081815260200182805461088a906139eb565b80156108d75780601f106108ac576101008083540402835291602001916108d7565b820191906000526020600020905b8154815290600101906020018083116108ba57829003601f168201915b5050505050815260200160048201601e806020026040519081016040528092919082601e8015610944576020028201916000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161090b5790505b505050505081525050905088816000015182602001518360400151846060015185608001518660a001519750975097509750975097509750505b919395979092949650565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f906133d1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a5761181c565b73ffffffffffffffffffffffffffffffffffffffff1614610aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa490613431565b60405180910390fd5b610ab681611873565b610b0f81600067ffffffffffffffff811115610ad557610ad4613b68565b5b6040519080825280601f01601f191660200182016040528015610b075781602001600182028036833780820191505090505b5060006118f2565b50565b60e08060000160009054906101000a900467ffffffffffffffff16908060000160089054906101000a900467ffffffffffffffff16905082565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd2906133d1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c1a61181c565b73ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790613431565b60405180910390fd5b610c7982611873565b610c85828260016118f2565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090613451565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b8563ffffffff16600010610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290613614565b60405180910390fd5b8363ffffffff16600010610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb90613411565b60405180910390fd5b8163ffffffff16600010610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e14906135b4565b60405180910390fd5b8051600010610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e58906134d1565b60405180910390fd5b8363ffffffff1660c988604051610e7891906130b1565b908152602001604051809103902060020160009054906101000a900463ffffffff1663ffffffff1610610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed7906134b1565b60405180910390fd5b6000610ef0888888888888611a6f565b905060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f358284611ad5565b73ffffffffffffffffffffffffffffffffffffffff1614610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f82906133b1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff0906135f4565b60405180910390fd5b600060c98960405161100b91906130b1565b908152602001604051809103902060020160009054906101000a900463ffffffff16905060004290506000601e6201518083611047919061386f565b6110519190613a7b565b63ffffffff169050600060c98c60405161106b91906130b1565b908152602001604051809103902060020160009054906101000a900463ffffffff1663ffffffff1614156111af57600088905060188163ffffffff1611156110b257601890505b8060c98d6040516110c391906130b1565b908152602001604051809103902060040183601e81106110e6576110e5613b39565b5b601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600160e060000160088282829054906101000a900467ffffffffffffffff1661113491906137fa565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160e060000160008282829054906101000a900467ffffffffffffffff1661118391906137fa565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050611321565b6201518086836111bf91906138de565b63ffffffff161115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd90613511565b60405180910390fd5b8963ffffffff1660c98c60405161121d91906130b1565b908152602001604051809103902060000160009054906101000a900463ffffffff1663ffffffff1614611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c906133f1565b60405180910390fd5b6112908b8984611b50565b60c98b6040516112a091906130b1565b908152602001604051809103902060020160009054906101000a900463ffffffff16886112cd91906138de565b63ffffffff1660e060000160008282829054906101000a900467ffffffffffffffff166112fa91906137fa565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b8960c98c60405161133291906130b1565b908152602001604051809103902060000160006101000a81548163ffffffff021916908363ffffffff1602179055508860c98c60405161137291906130b1565b908152602001604051809103902060010190805190602001906113969291906123f8565b508760c98c6040516113a891906130b1565b908152602001604051809103902060020160006101000a81548163ffffffff021916908363ffffffff1602179055508560c98c6040516113e891906130b1565b908152602001604051809103902060020160046101000a81548163ffffffff021916908363ffffffff1602179055508460c98c60405161142891906130b1565b9081526020016040518091039020600301908051906020019061144c9291906124a1565b5061145d8b8b8b8b8b8b8942611db4565b5050505050505050505050565b611472611814565b73ffffffffffffffffffffffffffffffffffffffff1661149061150e565b73ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd90613551565b60405180910390fd5b6114f06000611e8f565b565b6000611502878787878787611a6f565b90509695505050505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60df8054611545906139eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611571906139eb565b80156115be5780601f10611593576101008083540402835291602001916115be565b820191906000526020600020905b8154815290600101906020018083116115a157829003601f168201915b505050505081565b6000806000806115d585611f55565b925092509250600186601b856115eb9190613838565b84846040516000815260200160405260405161160a9493929190613149565b6020604051602081039080840390855afa15801561162c573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600061164d6001611f98565b90508015611671576001600060016101000a81548160ff0219169083151502179055505b8160ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116ba612088565b80156117135760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161170a919061318e565b60405180910390a15b5050565b606090565b611724611814565b73ffffffffffffffffffffffffffffffffffffffff1661174261150e565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f90613551565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90613391565b60405180910390fd5b61181181611e8f565b50565b600033905090565b600061184a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6120e1565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61187b611814565b73ffffffffffffffffffffffffffffffffffffffff1661189961150e565b73ffffffffffffffffffffffffffffffffffffffff16146118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e690613551565b60405180910390fd5b50565b61191e7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b6120eb565b60000160009054906101000a900460ff16156119425761193d836120f5565b611a6a565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198857600080fd5b505afa9250505080156119b957506040513d601f19601f820116820180604052508101906119b69190612701565b60015b6119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef906134f1565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5490613471565b60405180910390fd5b50611a698383836121ae565b5b505050565b600080878787878787604051602001611a8d969594939291906131cb565b6040516020818303038152906040529050805181604051602001611ab2929190613571565b604051602081830303815290604052805190602001209150509695505050505050565b600080600080611ae485611f55565b925092509250600186601b85611afa9190613838565b848460405160008152602001604052604051611b199493929190613149565b6020604051602081039080840390855afa158015611b3b573d6000803e3d6000fd5b50505060206040510351935050505092915050565b600060c984604051611b6291906130b1565b908152602001604051809103902060020160049054906101000a900463ffffffff1682611b8f91906138de565b905062278d008163ffffffff161115611ba95762278d0090505b60006201518082611bba919061386f565b9050600060c986604051611bce91906130b1565b908152602001604051809103902060020160009054906101000a900463ffffffff1685611bfb91906138de565b905060008263ffffffff16118015611c2a5750601882611c1b91906138a0565b63ffffffff168163ffffffff16115b15611c3f57601882611c3c91906138a0565b90505b60008190506000600190505b8363ffffffff168163ffffffff161015611d2b576000601e620151808084611c7391906138a0565b89611c7e91906138de565b611c88919061386f565b611c929190613a7b565b63ffffffff1690508484611ca6919061386f565b60c98a604051611cb691906130b1565b908152602001604051809103902060040182601e8110611cd957611cd8613b39565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055508484611d0a919061386f565b83611d1591906138de565b9250508080611d2390613a4e565b915050611c4b565b506000601e6201518087611d3f919061386f565b611d499190613a7b565b63ffffffff1690508160c989604051611d6291906130b1565b908152602001604051809103902060040182601e8110611d8557611d84613b39565b5b601091828204019190066002026101000a81548161ffff021916908361ffff1602179055505050505050505050565b600060c989604051611dc691906130b1565b9081526020016040518091039020600401601e806020026040519081016040528092919082601e8015611e36576020028201916000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611dfd5790505b505050505090507febfed14756579dd6c3419c51b35d199e7a08b687258f3e8232ff772aa9dd679c898989898989898989604051611e7c9998979695949392919061323a565b60405180910390a1505050505050505050565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060006041845114611f6857600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b60008060019054906101000a900460ff161561200f5760018260ff16148015611fc75750611fc5306121da565b155b612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613491565b60405180910390fd5b60009050612083565b8160ff1660008054906101000a900460ff1660ff1610612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b90613491565b60405180910390fd5b816000806101000a81548160ff021916908360ff160217905550600190505b919050565b600060019054906101000a900460ff166120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90613634565b60405180910390fd5b6120df6121fd565b565b6000819050919050565b6000819050919050565b6120fe816121da565b61213d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213490613531565b60405180910390fd5b8061216a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6120e1565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121b78361225e565b6000825111806121c45750805b156121d5576121d383836122ad565b505b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661224c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224390613634565b60405180910390fd5b61225c612257611814565b611e8f565b565b612267816120f5565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606122b8836121da565b6122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee906135d4565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff168460405161231f919061309a565b600060405180830381855af49150503d806000811461235a576040519150601f19603f3d011682016040523d82523d6000602084013e61235f565b606091505b5091509150612387828260405180606001604052806027815260200161419960279139612391565b9250505092915050565b606083156123a1578290506123f1565b6000835111156123b45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e891906131a9565b60405180910390fd5b9392505050565b828054612404906139eb565b90600052602060002090601f016020900481019282612426576000855561246d565b82601f1061243f57805160ff191683800117855561246d565b8280016001018555821561246d579182015b8281111561246c578251825591602001919060010190612451565b5b50905061247a9190612527565b5090565b604051806103c00160405280601e90602082028036833780820191505090505090565b8280546124ad906139eb565b90600052602060002090601f0160209004810192826124cf5760008555612516565b82601f106124e857805160ff1916838001178555612516565b82800160010185558215612516579182015b828111156125155782518255916020019190600101906124fa565b5b5090506125239190612527565b5090565b5b80821115612540576000816000905550600101612528565b5090565b6000612557612552846136a2565b61367d565b90508281526020810184848401111561257357612572613b9c565b5b61257e8482856139a9565b509392505050565b6000612599612594846136d3565b61367d565b9050828152602081018484840111156125b5576125b4613b9c565b5b6125c08482856139a9565b509392505050565b6000813590506125d781614153565b92915050565b6000813590506125ec8161416a565b92915050565b6000815190506126018161416a565b92915050565b600082601f83011261261c5761261b613b97565b5b813561262c848260208601612544565b91505092915050565b600082601f83011261264a57612649613b97565b5b813561265a848260208601612586565b91505092915050565b60008135905061267281614181565b92915050565b60006020828403121561268e5761268d613ba6565b5b600061269c848285016125c8565b91505092915050565b600080604083850312156126bc576126bb613ba6565b5b60006126ca858286016125c8565b925050602083013567ffffffffffffffff8111156126eb576126ea613ba1565b5b6126f785828601612607565b9150509250929050565b60006020828403121561271757612716613ba6565b5b6000612725848285016125f2565b91505092915050565b6000806040838503121561274557612744613ba6565b5b6000612753858286016125dd565b925050602083013567ffffffffffffffff81111561277457612773613ba1565b5b61278085828601612607565b9150509250929050565b6000602082840312156127a05761279f613ba6565b5b600082013567ffffffffffffffff8111156127be576127bd613ba1565b5b6127ca84828501612635565b91505092915050565b60008060008060008060c087890312156127f0576127ef613ba6565b5b600087013567ffffffffffffffff81111561280e5761280d613ba1565b5b61281a89828a01612635565b965050602061282b89828a01612663565b955050604087013567ffffffffffffffff81111561284c5761284b613ba1565b5b61285889828a01612635565b945050606061286989828a01612663565b935050608061287a89828a016125c8565b92505060a061288b89828a01612663565b9150509295509295509295565b600080600080600080600060e0888a0312156128b7576128b6613ba6565b5b600088013567ffffffffffffffff8111156128d5576128d4613ba1565b5b6128e18a828b01612635565b97505060206128f28a828b01612663565b965050604088013567ffffffffffffffff81111561291357612912613ba1565b5b61291f8a828b01612635565b95505060606129308a828b01612663565b94505060806129418a828b016125c8565b93505060a06129528a828b01612663565b92505060c088013567ffffffffffffffff81111561297357612972613ba1565b5b61297f8a828b01612607565b91505092959891949750929550565b600061299a8383612faf565b905092915050565b60006129ae8383613040565b60208301905092915050565b6129c381613912565b82525050565b60006129d482613733565b6129de8185613779565b9350836020820285016129f085613704565b8060005b85811015612a2c5784840389528151612a0d858261298e565b9450612a188361375f565b925060208a019950506001810190506129f4565b50829750879550505050505092915050565b612a478161373e565b612a51818461378a565b9250612a5c82613714565b8060005b83811015612a8d578151612a7487826129a2565b9650612a7f8361376c565b925050600181019050612a60565b505050505050565b612a9e8161373e565b612aa88184613795565b9250612ab382613714565b8060005b83811015612ae4578151612acb87826129a2565b9650612ad68361376c565b925050600181019050612ab7565b505050505050565b612af581613924565b82525050565b6000612b0682613749565b612b1081856137a0565b9350612b208185602086016139b8565b612b2981613bab565b840191505092915050565b6000612b3f82613749565b612b4981856137b1565b9350612b598185602086016139b8565b612b6281613bab565b840191505092915050565b6000612b7882613749565b612b8281856137c2565b9350612b928185602086016139b8565b80840191505092915050565b612ba781613997565b82525050565b6000612bb882613754565b612bc281856137cd565b9350612bd28185602086016139b8565b612bdb81613bab565b840191505092915050565b6000612bf182613754565b612bfb81856137de565b9350612c0b8185602086016139b8565b612c1481613bab565b840191505092915050565b6000612c2a82613754565b612c3481856137ef565b9350612c448185602086016139b8565b80840191505092915050565b60008154612c5d816139eb565b612c6781866137de565b94506001821660008114612c825760018114612c9457612cc7565b60ff1983168652602086019350612cc7565b612c9d8561371e565b60005b83811015612cbf57815481890152600182019150602081019050612ca0565b808801955050505b50505092915050565b6000612cdd6026836137de565b9150612ce882613bbc565b604082019050919050565b6000612d006025836137de565b9150612d0b82613c0b565b604082019050919050565b6000612d23602c836137de565b9150612d2e82613c5a565b604082019050919050565b6000612d466021836137de565b9150612d5182613ca9565b604082019050919050565b6000612d69601b836137de565b9150612d7482613cf8565b602082019050919050565b6000612d8c602c836137de565b9150612d9782613d21565b604082019050919050565b6000612daf6038836137de565b9150612dba82613d70565b604082019050919050565b6000612dd26029836137de565b9150612ddd82613dbf565b604082019050919050565b6000612df5602e836137de565b9150612e0082613e0e565b604082019050919050565b6000612e186025836137de565b9150612e2382613e5d565b604082019050919050565b6000612e3b601c836137de565b9150612e4682613eac565b602082019050919050565b6000612e5e602e836137de565b9150612e6982613ed5565b604082019050919050565b6000612e816044836137de565b9150612e8c82613f24565b606082019050919050565b6000612ea4602d836137de565b9150612eaf82613f99565b604082019050919050565b6000612ec76020836137de565b9150612ed282613fe8565b602082019050919050565b6000612eea601a836137de565b9150612ef582614011565b602082019050919050565b6000612f0d6020836137de565b9150612f188261403a565b602082019050919050565b6000612f306026836137de565b9150612f3b82614063565b604082019050919050565b6000612f536020836137de565b9150612f5e826140b2565b602082019050919050565b6000612f766020836137de565b9150612f81826140db565b602082019050919050565b6000612f99602b836137de565b9150612fa482614104565b604082019050919050565b600061046083016000830151612fc8600086018261305e565b5060208301518482036020860152612fe08282612bad565b9150506040830151612ff5604086018261305e565b506060830151613008606086018261305e565b50608083015184820360808601526130208282612afb565b91505060a083015161303560a0860182612a3e565b508091505092915050565b6130498161392e565b82525050565b6130588161395c565b82525050565b61306781613966565b82525050565b61307681613966565b82525050565b61308581613976565b82525050565b6130948161398a565b82525050565b60006130a68284612b6d565b915081905092915050565b60006130bd8284612c1f565b915081905092915050565b60006020820190506130dd60008301846129ba565b92915050565b60006040820190506130f860008301856129ba565b61310560208301846129ba565b9392505050565b6000602082019050818103600083015261312681846129c9565b905092915050565b60006020820190506131436000830184612aec565b92915050565b600060808201905061315e6000830187612aec565b61316b602083018661308b565b6131786040830185612aec565b6131856060830184612aec565b95945050505050565b60006020820190506131a36000830184612b9e565b92915050565b600060208201905081810360008301526131c38184612be6565b905092915050565b600060c08201905081810360008301526131e58189612be6565b90506131f4602083018861306d565b81810360408301526132068187612be6565b9050613215606083018661306d565b61322260808301856129ba565b61322f60a083018461306d565b979650505050505050565b60006104c0820190508181036000830152613255818c612be6565b9050613264602083018b61306d565b8181036040830152613276818a612be6565b9050613285606083018961306d565b61329260808301886129ba565b61329f60a083018761306d565b6132ac60c083018661306d565b6132b960e083018561306d565b6132c7610100830184612a95565b9a9950505050505050505050565b60006104808201905081810360008301526132f0818a612be6565b90506132ff602083018961306d565b81810360408301526133118188612be6565b9050613320606083018761306d565b61332d608083018661306d565b81810360a083015261333f8185612b34565b905061334e60c0830184612a95565b98975050505050505050565b600060408201905081810360008301526133748185612c50565b905081810360208301526133888184612be6565b90509392505050565b600060208201905081810360008301526133aa81612cd0565b9050919050565b600060208201905081810360008301526133ca81612cf3565b9050919050565b600060208201905081810360008301526133ea81612d16565b9050919050565b6000602082019050818103600083015261340a81612d39565b9050919050565b6000602082019050818103600083015261342a81612d5c565b9050919050565b6000602082019050818103600083015261344a81612d7f565b9050919050565b6000602082019050818103600083015261346a81612da2565b9050919050565b6000602082019050818103600083015261348a81612dc5565b9050919050565b600060208201905081810360008301526134aa81612de8565b9050919050565b600060208201905081810360008301526134ca81612e0b565b9050919050565b600060208201905081810360008301526134ea81612e2e565b9050919050565b6000602082019050818103600083015261350a81612e51565b9050919050565b6000602082019050818103600083015261352a81612e74565b9050919050565b6000602082019050818103600083015261354a81612e97565b9050919050565b6000602082019050818103600083015261356a81612eba565b9050919050565b6000606082019050818103600083015261358a81612edd565b9050613599602083018561304f565b81810360408301526135ab8184612b34565b90509392505050565b600060208201905081810360008301526135cd81612f00565b9050919050565b600060208201905081810360008301526135ed81612f23565b9050919050565b6000602082019050818103600083015261360d81612f46565b9050919050565b6000602082019050818103600083015261362d81612f69565b9050919050565b6000602082019050818103600083015261364d81612f8c565b9050919050565b6000604082019050613669600083018561307c565b613676602083018461307c565b9392505050565b6000613687613698565b90506136938282613a1d565b919050565b6000604051905090565b600067ffffffffffffffff8211156136bd576136bc613b68565b5b6136c682613bab565b9050602081019050919050565b600067ffffffffffffffff8211156136ee576136ed613b68565b5b6136f782613bab565b9050602081019050919050565b6000819050602082019050919050565b6000819050919050565b60008190508160005260206000209050919050565b600081519050919050565b6000601e9050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061380582613976565b915061381083613976565b92508267ffffffffffffffff0382111561382d5761382c613aac565b5b828201905092915050565b60006138438261398a565b915061384e8361398a565b92508260ff0382111561386457613863613aac565b5b828201905092915050565b600061387a82613966565b915061388583613966565b92508261389557613894613adb565b5b828204905092915050565b60006138ab82613966565b91506138b683613966565b92508163ffffffff04831182151516156138d3576138d2613aac565b5b828202905092915050565b60006138e982613966565b91506138f483613966565b92508282101561390757613906613aac565b5b828203905092915050565b600061391d8261393c565b9050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006139a28261398a565b9050919050565b82818337600083830152505050565b60005b838110156139d65780820151818401526020810190506139bb565b838111156139e5576000848401525b50505050565b60006002820490506001821680613a0357607f821691505b60208210811415613a1757613a16613b0a565b5b50919050565b613a2682613bab565b810181811067ffffffffffffffff82111715613a4557613a44613b68565b5b80604052505050565b6000613a5982613966565b915063ffffffff821415613a7057613a6f613aac565b5b600182019050919050565b6000613a8682613966565b9150613a9183613966565b925082613aa157613aa0613adb565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964207369676e65642061646460008201527f726573732e000000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c69642063726561746554696d6560008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964204e6f6e63650000000000600082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964206c6173744e6f6e63653c60008201527f4e6f6e6365000000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964207369676e656400000000600082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a207369676e65642074696d65206d757374206260008201527f652077697468696e20312064617973206f66207468652063757272656e74207460208201527f696d652e00000000000000000000000000000000000000000000000000000000604082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000600082015250565b7f7265706f72745374617475733a20496e76616c6964207369676e656454696d65600082015250565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f7265706f72745374617475733a20496e76616c6964206d73672e73656e646572600082015250565b7f7265706f72745374617475733a20496e76616c69642063726561746554696d65600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b61415c81613912565b811461416757600080fd5b50565b61417381613924565b811461417e57600080fd5b50565b61418a81613966565b811461419557600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220248cc5481a03e2ac4715d623925b123280594e95ae6261e57b76523ef77d7dea64736f6c63430008070033
Deployed ByteCode Sourcemap
42272:7994:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43969:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43593:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43803:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44234:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;33556:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43230:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;34015:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33234:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45836:2260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21259:103;;;;;;;;;;;;;:::i;:::-;;49756:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20608:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42763:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50051:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43286:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44164:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21517:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43969:153;20839:12;:10;:12::i;:::-;20828:23;;:7;:5;:7::i;:::-;:23;;;20820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44048:35:::1;44063:14;44079:3;44048:35;;;;;;;:::i;:::-;;;;;;;;44111:3;44094:14;:20;;;;;;;;;;;;:::i;:::-;;43969:153:::0;:::o;43593:159::-;20839:12;:10;:12::i;:::-;20828:23;;:7;:5;:7::i;:::-;:23;;;20820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43664:44:::1;43683:18;;;;;;;;;;;43703:4;43664:44;;;;;;;:::i;:::-;;;;;;;;43740:4;43719:18;;:25;;;;;;;;;;;;;;;;;;43593:159:::0;:::o;43803:112::-;43860:7;20839:12;:10;:12::i;:::-;20828:23;;:7;:5;:7::i;:::-;:23;;;20820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43888:18:::1;;;;;;;;;;;43880:27;;43803:112:::0;:::o;44234:521::-;44295:13;44310:6;44318:13;44333:6;44341;44349:12;44363:17;;:::i;:::-;44424:1;44397:7;44405:4;44397:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:28;;;44393:355;;;44442:24;;:::i;:::-;44481:14;44522:1;44529;44532;44535;44538:6;44510:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44393:355;44578:16;44597:7;44605:4;44597:13;;;;;;:::i;:::-;;;;;;;;;;;;;44578:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44633:4;44639;:15;;;44656:4;:12;;;44670:4;:14;;;44686:4;:19;;;44707:4;:15;;;44724:4;:11;;;44625:111;;;;;;;;;;;;;;;44234:521;;;;;;;;;;:::o;33556:200::-;32106:6;32089:23;;32097:4;32089:23;;;;32081:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32204:6;32180:30;;:20;:18;:20::i;:::-;:30;;;32172:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33640:36:::1;33658:17;33640;:36::i;:::-;33687:61;33709:17;33738:1;33728:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33742:5;33687:21;:61::i;:::-;33556:200:::0;:::o;43230:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34015:225::-;32106:6;32089:23;;32097:4;32089:23;;;;32081:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32204:6;32180:30;;:20;:18;:20::i;:::-;:30;;;32172:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34133:36:::1;34151:17;34133;:36::i;:::-;34180:52;34202:17;34221:4;34227;34180:21;:52::i;:::-;34015:225:::0;;:::o;33234:133::-;33312:7;32551:6;32534:23;;32542:4;32534:23;;;32526:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;23532:66:::1;33339:20;;33332:27;;33234:133:::0;:::o;45836:2260::-;46029:10;46025:14;;:1;:14;46017:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46099:5;46095:9;;:1;:9;46087:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;46159:10;46155:14;;:1;:14;46147:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46229:6;:13;46225:1;:17;46217:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;46320:5;46294:31;;:7;46302:4;46294:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:31;;;46286:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;46433:12;46448:66;46456:4;46462:10;46474:7;46483:5;46490:11;46503:10;46448:7;:66::i;:::-;46433:81;;46565:18;;;;;;;;;;;46534:49;;:27;46548:4;46554:6;46534:13;:27::i;:::-;:49;;;46525:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;46720:10;46705:25;;:11;:25;;;46697:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;46780:16;46799:7;46807:4;46799:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;46780:42;;46833:14;46857:15;46833:40;;46884:10;46917:2;46908:5;46898:7;:15;;;;:::i;:::-;46897:22;;;;:::i;:::-;46884:35;;;;46988:1;46961:7;46969:4;46961:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:28;;;46957:661;;;47006:16;47025:5;47006:24;;47061:2;47049:9;:14;;;47045:69;;;47096:2;47084:14;;47045:69;47167:9;47130:7;47138:4;47130:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;47151:5;47130:27;;;;;;;:::i;:::-;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;47218:1;47194:9;:20;;;:25;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;47253:1;47234:9;:15;;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46991:275;46957:661;;;47317:5;47303:10;47295:7;:18;;;;:::i;:::-;:27;;;;47287:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;47446:10;47418:38;;:7;47426:4;47418:13;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;;;;;;;;;;:38;;;47410:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;47511:30;47520:4;47526:5;47533:7;47511:8;:30::i;:::-;47583:7;47591:4;47583:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;47575:5;:31;;;;:::i;:::-;47556:50;;:9;:15;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46957:661;47657:10;47630:7;47638:4;47630:13;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;:37;;;;;;;;;;;;;;;;;;47702:7;47678;47686:4;47678:13;;;;;;:::i;:::-;;;;;;;;;;;;;:21;;:31;;;;;;;;;;;;:::i;:::-;;47746:5;47720:7;47728:4;47720:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;:31;;;;;;;;;;;;;;;;;;47793:10;47762:7;47770:4;47762:13;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;:41;;;;;;;;;;;;;;;;;;47841:6;47814:7;47822:4;47814:13;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;:33;;;;;;;;;;;;:::i;:::-;;47860:228;47893:4;47912:10;47937:7;47959:5;47979:11;48005:10;48030:9;48061:15;47860:18;:228::i;:::-;46004:2092;;;;45836:2260;;;;;;;:::o;21259:103::-;20839:12;:10;:12::i;:::-;20828:23;;:7;:5;:7::i;:::-;:23;;;20820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21324:30:::1;21351:1;21324:18;:30::i;:::-;21259:103::o:0;49756:260::-;49915:7;49942:66;49950:4;49956:10;49968:7;49977:5;49984:11;49997:10;49942:7;:66::i;:::-;49935:73;;49756:260;;;;;;;;:::o;20608:87::-;20654:7;20681:6;;;;;;;;;;;20674:13;;20608:87;:::o;42763:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50051:212::-;50132:7;50158;50167:9;50178;50191:19;50206:3;50191:14;:19::i;:::-;50157:53;;;;;;50228:27;50238:4;50246:2;50244:1;:4;;;;:::i;:::-;50250:1;50253;50228:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50221:34;;;;;50051:212;;;;:::o;43286:138::-;14883:19;14905:25;14928:1;14905:22;:25::i;:::-;14883:47;;14945:14;14941:67;;;14992:4;14976:13;;:20;;;;;;;;;;;;;;;;;;14941:67;43378:11:::1;43357:18;;:32;;;;;;;;;;;;;;;;;;43400:16;:14;:16::i;:::-;15034:14:::0;15030:102;;;15081:5;15065:13;;:21;;;;;;;;;;;;;;;;;;15106:14;15118:1;15106:14;;;;;;:::i;:::-;;;;;;;;15030:102;14872:267;43286:138;:::o;44164:62::-;44209:13;44164:62;:::o;21517:201::-;20839:12;:10;:12::i;:::-;20828:23;;:7;:5;:7::i;:::-;:23;;;20820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21626:1:::1;21606:22;;:8;:22;;;;21598:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21682:28;21701:8;21682:18;:28::i;:::-;21517:201:::0;:::o;18819:98::-;18872:7;18899:10;18892:17;;18819:98;:::o;23813:153::-;23866:7;23893:59;23532:66;23931:20;;23893:37;:59::i;:::-;:65;;;;;;;;;;;;23886:72;;23813:153;:::o;43476:66::-;20839:12;:10;:12::i;:::-;20828:23;;:7;:5;:7::i;:::-;:23;;;20820:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43476:66;:::o;25231:992::-;25685:53;23184:66;25723:14;;25685:37;:53::i;:::-;:59;;;;;;;;;;;;25681:535;;;25761:37;25780:17;25761:18;:37::i;:::-;25681:535;;;25864:17;25835:61;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25831:306;;26065:56;;;;;;;;;;:::i;:::-;;;;;;;;25831:306;23532:66;25957:20;;25949:4;:28;25941:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:140;26151:53;26169:17;26188:4;26194:9;26151:17;:53::i;:::-;25681:535;25231:992;;;:::o;49356:365::-;49512:7;49532:17;49563:4;49569:10;49581:7;49590:5;49597:11;49610:10;49552:69;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49532:89;;49694:4;:11;49707:4;49649:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49639:74;;;;;;49632:81;;;49356:365;;;;;;;;:::o;48610:209::-;48688:7;48714;48723:9;48734;48747:19;48762:3;48747:14;:19::i;:::-;48713:53;;;;;;48784:27;48794:4;48802:2;48800:1;:4;;;;:::i;:::-;48806:1;48809;48784:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48777:34;;;;;48610:209;;;;:::o;44803:1003::-;44891:15;44919:7;44927:4;44919:13;;;;;;:::i;:::-;;;;;;;;;;;;;:28;;;;;;;;;;;;44909:7;:38;;;;:::i;:::-;44891:56;;44973:10;44962:8;:21;;;44958:75;;;45011:10;45000:21;;44958:75;45043:15;45072:5;45061:8;:16;;;;:::i;:::-;45043:34;;45090:16;45117:7;45125:4;45117:13;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;45109:5;:31;;;;:::i;:::-;45090:50;;45166:1;45155:8;:12;;;:41;;;;;45194:2;45183:8;:13;;;;:::i;:::-;45171:25;;:9;:25;;;45155:41;45151:99;;;45236:2;45225:8;:13;;;;:::i;:::-;45213:25;;45151:99;45260:17;45280:9;45260:29;;45410:8;45421:1;45410:12;;45405:252;45428:8;45424:12;;:1;:12;;;45405:252;;;45458:13;45508:2;45499:5;45490;45486:1;:9;;;;:::i;:::-;45476:7;:19;;;;:::i;:::-;45475:29;;;;:::i;:::-;45474:36;;;;:::i;:::-;45458:52;;;;45575:8;45565:9;:18;;;;:::i;:::-;45525:7;45533:4;45525:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;45546:8;45525:30;;;;;;;:::i;:::-;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;45637:8;45627:9;:18;;;;:::i;:::-;45614:10;:31;;;;:::i;:::-;45601:44;;45443:214;45438:3;;;;;:::i;:::-;;;;45405:252;;;;45704:10;45737:2;45728:5;45718:7;:15;;;;:::i;:::-;45717:22;;;;:::i;:::-;45704:35;;;;45787:10;45750:7;45758:4;45750:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;45771:5;45750:27;;;;;;;:::i;:::-;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;44880:926;;;;;44803:1003;;;:::o;48104:498::-;48302:24;48329:7;48337:4;48329:13;;;;;;:::i;:::-;;;;;;;;;;;;;:20;;48302:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48365:229;48394:4;48413:10;48438:7;48460:5;48480:11;48506:10;48531:9;48555:7;48577:6;48365:229;;;;;;;;;;;;;;:::i;:::-;;;;;;;;48291:311;48104:498;;;;;;;;:::o;21878:191::-;21952:16;21971:6;;;;;;;;;;;21952:25;;21997:8;21988:6;;:17;;;;;;;;;;;;;;;;;;22052:8;22021:40;;22042:8;22021:40;;;;;;;;;;;;21941:128;21878:191;:::o;48827:521::-;48892:5;48899:7;48908;48955:2;48941:3;:10;:16;48933:25;;;;;;48971:9;48991;49011:7;49127:2;49122:3;49118:12;49112:19;49107:24;;49193:2;49188:3;49184:12;49178:19;49173:24;;49296:2;49291:3;49287:12;49281:19;49278:1;49273:28;49268:33;;49332:1;49335;49338;49324:16;;;;;;;;;48827:521;;;;;:::o;17113:823::-;17177:4;17514:13;;;;;;;;;;;17510:419;;;17581:1;17570:7;:12;;;:61;;;;;17587:44;17625:4;17587:29;:44::i;:::-;17586:45;17570:61;17544:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;17735:5;17728:12;;;;17510:419;17796:7;17781:22;;:12;;;;;;;;;;:22;;;17773:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17884:7;17869:12;;:22;;;;;;;;;;;;;;;;;;17913:4;17906:11;;17113:823;;;;:::o;20309:97::-;16510:13;;;;;;;;;;;16502:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20372:26:::1;:24;:26::i;:::-;20309:97::o:0;1711:151::-;1772:21;1840:4;1830:14;;1711:151;;;:::o;1965:::-;2026:21;2094:4;2084:14;;1965:151;;;:::o;24062:284::-;24144:48;24174:17;24144:29;:48::i;:::-;24136:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;24321:17;24253:59;23532:66;24291:20;;24253:37;:59::i;:::-;:65;;;:85;;;;;;;;;;;;;;;;;;24062:284;:::o;24755:297::-;24898:29;24909:17;24898:10;:29::i;:::-;24956:1;24942:4;:11;:15;:28;;;;24961:9;24942:28;24938:107;;;24987:46;25009:17;25028:4;24987:21;:46::i;:::-;;24938:107;24755:297;;;:::o;5400:326::-;5460:4;5717:1;5695:7;:19;;;:23;5688:30;;5400:326;;;:::o;20414:113::-;16510:13;;;;;;;;;;;16502:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;20487:32:::1;20506:12;:10;:12::i;:::-;20487:18;:32::i;:::-;20414:113::o:0;24459:155::-;24526:37;24545:17;24526:18;:37::i;:::-;24588:17;24579:27;;;;;;;;;;;;24459:155;:::o;29492:461::-;29575:12;29608:37;29638:6;29608:29;:37::i;:::-;29600:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;29762:12;29776:23;29803:6;:19;;29823:4;29803:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29761:67;;;;29846:99;29882:7;29891:10;29846:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;29839:106;;;;29492:461;;;;:::o;10974:712::-;11124:12;11153:7;11149:530;;;11184:10;11177:17;;;;11149:530;11318:1;11298:10;:17;:21;11294:374;;;11496:10;11490:17;11557:15;11544:10;11540:2;11536:19;11529:44;11294:374;11639:12;11632:20;;;;;;;;;;;:::i;:::-;;;;;;;;10974:712;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:::-;1032:5;1070:6;1057:20;1048:29;;1086:33;1113:5;1086:33;:::i;:::-;986:139;;;;:::o;1131:143::-;1188:5;1219:6;1213:13;1204:22;;1235:33;1262:5;1235:33;:::i;:::-;1131:143;;;;:::o;1293:338::-;1348:5;1397:3;1390:4;1382:6;1378:17;1374:27;1364:122;;1405:79;;:::i;:::-;1364:122;1522:6;1509:20;1547:78;1621:3;1613:6;1606:4;1598:6;1594:17;1547:78;:::i;:::-;1538:87;;1354:277;1293:338;;;;:::o;1651:340::-;1707:5;1756:3;1749:4;1741:6;1737:17;1733:27;1723:122;;1764:79;;:::i;:::-;1723:122;1881:6;1868:20;1906:79;1981:3;1973:6;1966:4;1958:6;1954:17;1906:79;:::i;:::-;1897:88;;1713:278;1651:340;;;;:::o;1997:137::-;2042:5;2080:6;2067:20;2058:29;;2096:32;2122:5;2096:32;:::i;:::-;1997:137;;;;:::o;2140:329::-;2199:6;2248:2;2236:9;2227:7;2223:23;2219:32;2216:119;;;2254:79;;:::i;:::-;2216:119;2374:1;2399:53;2444:7;2435:6;2424:9;2420:22;2399:53;:::i;:::-;2389:63;;2345:117;2140:329;;;;:::o;2475:652::-;2552:6;2560;2609:2;2597:9;2588:7;2584:23;2580:32;2577:119;;;2615:79;;:::i;:::-;2577:119;2735:1;2760:53;2805:7;2796:6;2785:9;2781:22;2760:53;:::i;:::-;2750:63;;2706:117;2890:2;2879:9;2875:18;2862:32;2921:18;2913:6;2910:30;2907:117;;;2943:79;;:::i;:::-;2907:117;3048:62;3102:7;3093:6;3082:9;3078:22;3048:62;:::i;:::-;3038:72;;2833:287;2475:652;;;;;:::o;3133:351::-;3203:6;3252:2;3240:9;3231:7;3227:23;3223:32;3220:119;;;3258:79;;:::i;:::-;3220:119;3378:1;3403:64;3459:7;3450:6;3439:9;3435:22;3403:64;:::i;:::-;3393:74;;3349:128;3133:351;;;;:::o;3490:652::-;3567:6;3575;3624:2;3612:9;3603:7;3599:23;3595:32;3592:119;;;3630:79;;:::i;:::-;3592:119;3750:1;3775:53;3820:7;3811:6;3800:9;3796:22;3775:53;:::i;:::-;3765:63;;3721:117;3905:2;3894:9;3890:18;3877:32;3936:18;3928:6;3925:30;3922:117;;;3958:79;;:::i;:::-;3922:117;4063:62;4117:7;4108:6;4097:9;4093:22;4063:62;:::i;:::-;4053:72;;3848:287;3490:652;;;;;:::o;4148:509::-;4217:6;4266:2;4254:9;4245:7;4241:23;4237:32;4234:119;;;4272:79;;:::i;:::-;4234:119;4420:1;4409:9;4405:17;4392:31;4450:18;4442:6;4439:30;4436:117;;;4472:79;;:::i;:::-;4436:117;4577:63;4632:7;4623:6;4612:9;4608:22;4577:63;:::i;:::-;4567:73;;4363:287;4148:509;;;;:::o;4663:1411::-;4784:6;4792;4800;4808;4816;4824;4873:3;4861:9;4852:7;4848:23;4844:33;4841:120;;;4880:79;;:::i;:::-;4841:120;5028:1;5017:9;5013:17;5000:31;5058:18;5050:6;5047:30;5044:117;;;5080:79;;:::i;:::-;5044:117;5185:63;5240:7;5231:6;5220:9;5216:22;5185:63;:::i;:::-;5175:73;;4971:287;5297:2;5323:52;5367:7;5358:6;5347:9;5343:22;5323:52;:::i;:::-;5313:62;;5268:117;5452:2;5441:9;5437:18;5424:32;5483:18;5475:6;5472:30;5469:117;;;5505:79;;:::i;:::-;5469:117;5610:63;5665:7;5656:6;5645:9;5641:22;5610:63;:::i;:::-;5600:73;;5395:288;5722:2;5748:52;5792:7;5783:6;5772:9;5768:22;5748:52;:::i;:::-;5738:62;;5693:117;5849:3;5876:53;5921:7;5912:6;5901:9;5897:22;5876:53;:::i;:::-;5866:63;;5820:119;5978:3;6005:52;6049:7;6040:6;6029:9;6025:22;6005:52;:::i;:::-;5995:62;;5949:118;4663:1411;;;;;;;;:::o;6080:1735::-;6219:6;6227;6235;6243;6251;6259;6267;6316:3;6304:9;6295:7;6291:23;6287:33;6284:120;;;6323:79;;:::i;:::-;6284:120;6471:1;6460:9;6456:17;6443:31;6501:18;6493:6;6490:30;6487:117;;;6523:79;;:::i;:::-;6487:117;6628:63;6683:7;6674:6;6663:9;6659:22;6628:63;:::i;:::-;6618:73;;6414:287;6740:2;6766:52;6810:7;6801:6;6790:9;6786:22;6766:52;:::i;:::-;6756:62;;6711:117;6895:2;6884:9;6880:18;6867:32;6926:18;6918:6;6915:30;6912:117;;;6948:79;;:::i;:::-;6912:117;7053:63;7108:7;7099:6;7088:9;7084:22;7053:63;:::i;:::-;7043:73;;6838:288;7165:2;7191:52;7235:7;7226:6;7215:9;7211:22;7191:52;:::i;:::-;7181:62;;7136:117;7292:3;7319:53;7364:7;7355:6;7344:9;7340:22;7319:53;:::i;:::-;7309:63;;7263:119;7421:3;7448:52;7492:7;7483:6;7472:9;7468:22;7448:52;:::i;:::-;7438:62;;7392:118;7577:3;7566:9;7562:19;7549:33;7609:18;7601:6;7598:30;7595:117;;;7631:79;;:::i;:::-;7595:117;7736:62;7790:7;7781:6;7770:9;7766:22;7736:62;:::i;:::-;7726:72;;7520:288;6080:1735;;;;;;;;;;:::o;7821:244::-;7934:10;7969:90;8055:3;8047:6;7969:90;:::i;:::-;7955:104;;7821:244;;;;:::o;8071:175::-;8138:10;8159:44;8199:3;8191:6;8159:44;:::i;:::-;8235:4;8230:3;8226:14;8212:28;;8071:175;;;;:::o;8252:118::-;8339:24;8357:5;8339:24;:::i;:::-;8334:3;8327:37;8252:118;;:::o;8436:1087::-;8599:3;8628:76;8698:5;8628:76;:::i;:::-;8720:108;8821:6;8816:3;8720:108;:::i;:::-;8713:115;;8854:3;8899:4;8891:6;8887:17;8882:3;8878:27;8929:78;9001:5;8929:78;:::i;:::-;9030:7;9061:1;9046:432;9071:6;9068:1;9065:13;9046:432;;;9142:9;9136:4;9132:20;9127:3;9120:33;9193:6;9187:13;9221:108;9324:4;9309:13;9221:108;:::i;:::-;9213:116;;9352:82;9427:6;9352:82;:::i;:::-;9342:92;;9463:4;9458:3;9454:14;9447:21;;9106:372;9093:1;9090;9086:9;9081:14;;9046:432;;;9050:14;9494:4;9487:11;;9514:3;9507:10;;8604:919;;;;;8436:1087;;;;:::o;9561:672::-;9687:52;9733:5;9687:52;:::i;:::-;9755:74;9822:6;9817:3;9755:74;:::i;:::-;9748:81;;9853:54;9901:5;9853:54;:::i;:::-;9930:7;9961:1;9946:280;9971:6;9968:1;9965:13;9946:280;;;10047:6;10041:13;10074:61;10131:3;10116:13;10074:61;:::i;:::-;10067:68;;10158:58;10209:6;10158:58;:::i;:::-;10148:68;;10006:220;9993:1;9990;9986:9;9981:14;;9946:280;;;9950:14;9663:570;;;9561:672;;:::o;10271:692::-;10407:52;10453:5;10407:52;:::i;:::-;10475:84;10552:6;10547:3;10475:84;:::i;:::-;10468:91;;10583:54;10631:5;10583:54;:::i;:::-;10660:7;10691:1;10676:280;10701:6;10698:1;10695:13;10676:280;;;10777:6;10771:13;10804:61;10861:3;10846:13;10804:61;:::i;:::-;10797:68;;10888:58;10939:6;10888:58;:::i;:::-;10878:68;;10736:220;10723:1;10720;10716:9;10711:14;;10676:280;;;10680:14;10383:580;;;10271:692;;:::o;10969:118::-;11056:24;11074:5;11056:24;:::i;:::-;11051:3;11044:37;10969:118;;:::o;11093:340::-;11169:3;11197:38;11229:5;11197:38;:::i;:::-;11251:60;11304:6;11299:3;11251:60;:::i;:::-;11244:67;;11320:52;11365:6;11360:3;11353:4;11346:5;11342:16;11320:52;:::i;:::-;11397:29;11419:6;11397:29;:::i;:::-;11392:3;11388:39;11381:46;;11173:260;11093:340;;;;:::o;11439:360::-;11525:3;11553:38;11585:5;11553:38;:::i;:::-;11607:70;11670:6;11665:3;11607:70;:::i;:::-;11600:77;;11686:52;11731:6;11726:3;11719:4;11712:5;11708:16;11686:52;:::i;:::-;11763:29;11785:6;11763:29;:::i;:::-;11758:3;11754:39;11747:46;;11529:270;11439:360;;;;:::o;11805:373::-;11909:3;11937:38;11969:5;11937:38;:::i;:::-;11991:88;12072:6;12067:3;11991:88;:::i;:::-;11984:95;;12088:52;12133:6;12128:3;12121:4;12114:5;12110:16;12088:52;:::i;:::-;12165:6;12160:3;12156:16;12149:23;;11913:265;11805:373;;;;:::o;12184:143::-;12277:43;12314:5;12277:43;:::i;:::-;12272:3;12265:56;12184:143;;:::o;12333:344::-;12411:3;12439:39;12472:5;12439:39;:::i;:::-;12494:61;12548:6;12543:3;12494:61;:::i;:::-;12487:68;;12564:52;12609:6;12604:3;12597:4;12590:5;12586:16;12564:52;:::i;:::-;12641:29;12663:6;12641:29;:::i;:::-;12636:3;12632:39;12625:46;;12415:262;12333:344;;;;:::o;12683:364::-;12771:3;12799:39;12832:5;12799:39;:::i;:::-;12854:71;12918:6;12913:3;12854:71;:::i;:::-;12847:78;;12934:52;12979:6;12974:3;12967:4;12960:5;12956:16;12934:52;:::i;:::-;13011:29;13033:6;13011:29;:::i;:::-;13006:3;13002:39;12995:46;;12775:272;12683:364;;;;:::o;13053:377::-;13159:3;13187:39;13220:5;13187:39;:::i;:::-;13242:89;13324:6;13319:3;13242:89;:::i;:::-;13235:96;;13340:52;13385:6;13380:3;13373:4;13366:5;13362:16;13340:52;:::i;:::-;13417:6;13412:3;13408:16;13401:23;;13163:267;13053:377;;;;:::o;13460:802::-;13545:3;13582:5;13576:12;13611:36;13637:9;13611:36;:::i;:::-;13663:71;13727:6;13722:3;13663:71;:::i;:::-;13656:78;;13765:1;13754:9;13750:17;13781:1;13776:135;;;;13925:1;13920:336;;;;13743:513;;13776:135;13860:4;13856:9;13845;13841:25;13836:3;13829:38;13896:4;13891:3;13887:14;13880:21;;13776:135;;13920:336;13987:38;14019:5;13987:38;:::i;:::-;14047:1;14061:154;14075:6;14072:1;14069:13;14061:154;;;14149:7;14143:14;14139:1;14134:3;14130:11;14123:35;14199:1;14190:7;14186:15;14175:26;;14097:4;14094:1;14090:12;14085:17;;14061:154;;;14244:1;14239:3;14235:11;14228:18;;13927:329;;13743:513;;13549:713;;13460:802;;;;:::o;14268:366::-;14410:3;14431:67;14495:2;14490:3;14431:67;:::i;:::-;14424:74;;14507:93;14596:3;14507:93;:::i;:::-;14625:2;14620:3;14616:12;14609:19;;14268:366;;;:::o;14640:::-;14782:3;14803:67;14867:2;14862:3;14803:67;:::i;:::-;14796:74;;14879:93;14968:3;14879:93;:::i;:::-;14997:2;14992:3;14988:12;14981:19;;14640:366;;;:::o;15012:::-;15154:3;15175:67;15239:2;15234:3;15175:67;:::i;:::-;15168:74;;15251:93;15340:3;15251:93;:::i;:::-;15369:2;15364:3;15360:12;15353:19;;15012:366;;;:::o;15384:::-;15526:3;15547:67;15611:2;15606:3;15547:67;:::i;:::-;15540:74;;15623:93;15712:3;15623:93;:::i;:::-;15741:2;15736:3;15732:12;15725:19;;15384:366;;;:::o;15756:::-;15898:3;15919:67;15983:2;15978:3;15919:67;:::i;:::-;15912:74;;15995:93;16084:3;15995:93;:::i;:::-;16113:2;16108:3;16104:12;16097:19;;15756:366;;;:::o;16128:::-;16270:3;16291:67;16355:2;16350:3;16291:67;:::i;:::-;16284:74;;16367:93;16456:3;16367:93;:::i;:::-;16485:2;16480:3;16476:12;16469:19;;16128:366;;;:::o;16500:::-;16642:3;16663:67;16727:2;16722:3;16663:67;:::i;:::-;16656:74;;16739:93;16828:3;16739:93;:::i;:::-;16857:2;16852:3;16848:12;16841:19;;16500:366;;;:::o;16872:::-;17014:3;17035:67;17099:2;17094:3;17035:67;:::i;:::-;17028:74;;17111:93;17200:3;17111:93;:::i;:::-;17229:2;17224:3;17220:12;17213:19;;16872:366;;;:::o;17244:::-;17386:3;17407:67;17471:2;17466:3;17407:67;:::i;:::-;17400:74;;17483:93;17572:3;17483:93;:::i;:::-;17601:2;17596:3;17592:12;17585:19;;17244:366;;;:::o;17616:::-;17758:3;17779:67;17843:2;17838:3;17779:67;:::i;:::-;17772:74;;17855:93;17944:3;17855:93;:::i;:::-;17973:2;17968:3;17964:12;17957:19;;17616:366;;;:::o;17988:::-;18130:3;18151:67;18215:2;18210:3;18151:67;:::i;:::-;18144:74;;18227:93;18316:3;18227:93;:::i;:::-;18345:2;18340:3;18336:12;18329:19;;17988:366;;;:::o;18360:::-;18502:3;18523:67;18587:2;18582:3;18523:67;:::i;:::-;18516:74;;18599:93;18688:3;18599:93;:::i;:::-;18717:2;18712:3;18708:12;18701:19;;18360:366;;;:::o;18732:::-;18874:3;18895:67;18959:2;18954:3;18895:67;:::i;:::-;18888:74;;18971:93;19060:3;18971:93;:::i;:::-;19089:2;19084:3;19080:12;19073:19;;18732:366;;;:::o;19104:::-;19246:3;19267:67;19331:2;19326:3;19267:67;:::i;:::-;19260:74;;19343:93;19432:3;19343:93;:::i;:::-;19461:2;19456:3;19452:12;19445:19;;19104:366;;;:::o;19476:::-;19618:3;19639:67;19703:2;19698:3;19639:67;:::i;:::-;19632:74;;19715:93;19804:3;19715:93;:::i;:::-;19833:2;19828:3;19824:12;19817:19;;19476:366;;;:::o;19848:::-;19990:3;20011:67;20075:2;20070:3;20011:67;:::i;:::-;20004:74;;20087:93;20176:3;20087:93;:::i;:::-;20205:2;20200:3;20196:12;20189:19;;19848:366;;;:::o;20220:::-;20362:3;20383:67;20447:2;20442:3;20383:67;:::i;:::-;20376:74;;20459:93;20548:3;20459:93;:::i;:::-;20577:2;20572:3;20568:12;20561:19;;20220:366;;;:::o;20592:::-;20734:3;20755:67;20819:2;20814:3;20755:67;:::i;:::-;20748:74;;20831:93;20920:3;20831:93;:::i;:::-;20949:2;20944:3;20940:12;20933:19;;20592:366;;;:::o;20964:::-;21106:3;21127:67;21191:2;21186:3;21127:67;:::i;:::-;21120:74;;21203:93;21292:3;21203:93;:::i;:::-;21321:2;21316:3;21312:12;21305:19;;20964:366;;;:::o;21336:::-;21478:3;21499:67;21563:2;21558:3;21499:67;:::i;:::-;21492:74;;21575:93;21664:3;21575:93;:::i;:::-;21693:2;21688:3;21684:12;21677:19;;21336:366;;;:::o;21708:::-;21850:3;21871:67;21935:2;21930:3;21871:67;:::i;:::-;21864:74;;21947:93;22036:3;21947:93;:::i;:::-;22065:2;22060:3;22056:12;22049:19;;21708:366;;;:::o;22136:1429::-;22239:3;22275:6;22270:3;22266:16;22370:4;22363:5;22359:16;22353:23;22389:61;22444:4;22439:3;22435:14;22421:12;22389:61;:::i;:::-;22292:168;22545:4;22538:5;22534:16;22528:23;22598:3;22592:4;22588:14;22581:4;22576:3;22572:14;22565:38;22624:73;22692:4;22678:12;22624:73;:::i;:::-;22616:81;;22470:238;22795:4;22788:5;22784:16;22778:23;22814:61;22869:4;22864:3;22860:14;22846:12;22814:61;:::i;:::-;22718:167;22977:4;22970:5;22966:16;22960:23;22996:61;23051:4;23046:3;23042:14;23028:12;22996:61;:::i;:::-;22895:172;23155:4;23148:5;23144:16;23138:23;23208:3;23202:4;23198:14;23191:4;23186:3;23182:14;23175:38;23234:71;23300:4;23286:12;23234:71;:::i;:::-;23226:79;;23077:239;23400:4;23393:5;23389:16;23383:23;23419:109;23522:4;23517:3;23513:14;23499:12;23419:109;:::i;:::-;23326:212;23555:4;23548:11;;22244:1321;22136:1429;;;;:::o;23571:105::-;23646:23;23663:5;23646:23;:::i;:::-;23641:3;23634:36;23571:105;;:::o;23682:118::-;23769:24;23787:5;23769:24;:::i;:::-;23764:3;23757:37;23682:118;;:::o;23806:105::-;23881:23;23898:5;23881:23;:::i;:::-;23876:3;23869:36;23806:105;;:::o;23917:115::-;24002:23;24019:5;24002:23;:::i;:::-;23997:3;23990:36;23917:115;;:::o;24038:::-;24123:23;24140:5;24123:23;:::i;:::-;24118:3;24111:36;24038:115;;:::o;24159:112::-;24242:22;24258:5;24242:22;:::i;:::-;24237:3;24230:35;24159:112;;:::o;24277:271::-;24407:3;24429:93;24518:3;24509:6;24429:93;:::i;:::-;24422:100;;24539:3;24532:10;;24277:271;;;;:::o;24554:275::-;24686:3;24708:95;24799:3;24790:6;24708:95;:::i;:::-;24701:102;;24820:3;24813:10;;24554:275;;;;:::o;24835:222::-;24928:4;24966:2;24955:9;24951:18;24943:26;;24979:71;25047:1;25036:9;25032:17;25023:6;24979:71;:::i;:::-;24835:222;;;;:::o;25063:332::-;25184:4;25222:2;25211:9;25207:18;25199:26;;25235:71;25303:1;25292:9;25288:17;25279:6;25235:71;:::i;:::-;25316:72;25384:2;25373:9;25369:18;25360:6;25316:72;:::i;:::-;25063:332;;;;;:::o;25401:461::-;25588:4;25626:2;25615:9;25611:18;25603:26;;25675:9;25669:4;25665:20;25661:1;25650:9;25646:17;25639:47;25703:152;25850:4;25841:6;25703:152;:::i;:::-;25695:160;;25401:461;;;;:::o;25868:222::-;25961:4;25999:2;25988:9;25984:18;25976:26;;26012:71;26080:1;26069:9;26065:17;26056:6;26012:71;:::i;:::-;25868:222;;;;:::o;26096:545::-;26269:4;26307:3;26296:9;26292:19;26284:27;;26321:71;26389:1;26378:9;26374:17;26365:6;26321:71;:::i;:::-;26402:68;26466:2;26455:9;26451:18;26442:6;26402:68;:::i;:::-;26480:72;26548:2;26537:9;26533:18;26524:6;26480:72;:::i;:::-;26562;26630:2;26619:9;26615:18;26606:6;26562:72;:::i;:::-;26096:545;;;;;;;:::o;26647:234::-;26746:4;26784:2;26773:9;26769:18;26761:26;;26797:77;26871:1;26860:9;26856:17;26847:6;26797:77;:::i;:::-;26647:234;;;;:::o;26887:313::-;27000:4;27038:2;27027:9;27023:18;27015:26;;27087:9;27081:4;27077:20;27073:1;27062:9;27058:17;27051:47;27115:78;27188:4;27179:6;27115:78;:::i;:::-;27107:86;;26887:313;;;;:::o;27206:945::-;27473:4;27511:3;27500:9;27496:19;27488:27;;27561:9;27555:4;27551:20;27547:1;27536:9;27532:17;27525:47;27589:78;27662:4;27653:6;27589:78;:::i;:::-;27581:86;;27677:70;27743:2;27732:9;27728:18;27719:6;27677:70;:::i;:::-;27794:9;27788:4;27784:20;27779:2;27768:9;27764:18;27757:48;27822:78;27895:4;27886:6;27822:78;:::i;:::-;27814:86;;27910:70;27976:2;27965:9;27961:18;27952:6;27910:70;:::i;:::-;27990:73;28058:3;28047:9;28043:19;28034:6;27990:73;:::i;:::-;28073:71;28139:3;28128:9;28124:19;28115:6;28073:71;:::i;:::-;27206:945;;;;;;;;;:::o;28157:1363::-;28550:4;28588;28577:9;28573:20;28565:28;;28639:9;28633:4;28629:20;28625:1;28614:9;28610:17;28603:47;28667:78;28740:4;28731:6;28667:78;:::i;:::-;28659:86;;28755:70;28821:2;28810:9;28806:18;28797:6;28755:70;:::i;:::-;28872:9;28866:4;28862:20;28857:2;28846:9;28842:18;28835:48;28900:78;28973:4;28964:6;28900:78;:::i;:::-;28892:86;;28988:70;29054:2;29043:9;29039:18;29030:6;28988:70;:::i;:::-;29068:73;29136:3;29125:9;29121:19;29112:6;29068:73;:::i;:::-;29151:71;29217:3;29206:9;29202:19;29193:6;29151:71;:::i;:::-;29232;29298:3;29287:9;29283:19;29274:6;29232:71;:::i;:::-;29313;29379:3;29368:9;29364:19;29355:6;29313:71;:::i;:::-;29394:119;29508:3;29497:9;29493:19;29484:6;29394:119;:::i;:::-;28157:1363;;;;;;;;;;;;:::o;29526:1236::-;29885:4;29923;29912:9;29908:20;29900:28;;29974:9;29968:4;29964:20;29960:1;29949:9;29945:17;29938:47;30002:78;30075:4;30066:6;30002:78;:::i;:::-;29994:86;;30090:70;30156:2;30145:9;30141:18;30132:6;30090:70;:::i;:::-;30207:9;30201:4;30197:20;30192:2;30181:9;30177:18;30170:48;30235:78;30308:4;30299:6;30235:78;:::i;:::-;30227:86;;30323:70;30389:2;30378:9;30374:18;30365:6;30323:70;:::i;:::-;30403:71;30469:3;30458:9;30454:19;30445:6;30403:71;:::i;:::-;30522:9;30516:4;30512:20;30506:3;30495:9;30491:19;30484:49;30550:76;30621:4;30612:6;30550:76;:::i;:::-;30542:84;;30636:119;30750:3;30739:9;30735:19;30726:6;30636:119;:::i;:::-;29526:1236;;;;;;;;;;:::o;30768:508::-;30926:4;30964:2;30953:9;30949:18;30941:26;;31013:9;31007:4;31003:20;30999:1;30988:9;30984:17;30977:47;31041:75;31111:4;31102:6;31041:75;:::i;:::-;31033:83;;31163:9;31157:4;31153:20;31148:2;31137:9;31133:18;31126:48;31191:78;31264:4;31255:6;31191:78;:::i;:::-;31183:86;;30768:508;;;;;:::o;31282:419::-;31448:4;31486:2;31475:9;31471:18;31463:26;;31535:9;31529:4;31525:20;31521:1;31510:9;31506:17;31499:47;31563:131;31689:4;31563:131;:::i;:::-;31555:139;;31282:419;;;:::o;31707:::-;31873:4;31911:2;31900:9;31896:18;31888:26;;31960:9;31954:4;31950:20;31946:1;31935:9;31931:17;31924:47;31988:131;32114:4;31988:131;:::i;:::-;31980:139;;31707:419;;;:::o;32132:::-;32298:4;32336:2;32325:9;32321:18;32313:26;;32385:9;32379:4;32375:20;32371:1;32360:9;32356:17;32349:47;32413:131;32539:4;32413:131;:::i;:::-;32405:139;;32132:419;;;:::o;32557:::-;32723:4;32761:2;32750:9;32746:18;32738:26;;32810:9;32804:4;32800:20;32796:1;32785:9;32781:17;32774:47;32838:131;32964:4;32838:131;:::i;:::-;32830:139;;32557:419;;;:::o;32982:::-;33148:4;33186:2;33175:9;33171:18;33163:26;;33235:9;33229:4;33225:20;33221:1;33210:9;33206:17;33199:47;33263:131;33389:4;33263:131;:::i;:::-;33255:139;;32982:419;;;:::o;33407:::-;33573:4;33611:2;33600:9;33596:18;33588:26;;33660:9;33654:4;33650:20;33646:1;33635:9;33631:17;33624:47;33688:131;33814:4;33688:131;:::i;:::-;33680:139;;33407:419;;;:::o;33832:::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:::-;34423:4;34461:2;34450:9;34446:18;34438:26;;34510:9;34504:4;34500:20;34496:1;34485:9;34481:17;34474:47;34538:131;34664:4;34538:131;:::i;:::-;34530:139;;34257:419;;;:::o;34682:::-;34848:4;34886:2;34875:9;34871:18;34863:26;;34935:9;34929:4;34925:20;34921:1;34910:9;34906:17;34899:47;34963:131;35089:4;34963:131;:::i;:::-;34955:139;;34682:419;;;:::o;35107:::-;35273:4;35311:2;35300:9;35296:18;35288:26;;35360:9;35354:4;35350:20;35346:1;35335:9;35331:17;35324:47;35388:131;35514:4;35388:131;:::i;:::-;35380:139;;35107:419;;;:::o;35532:::-;35698:4;35736:2;35725:9;35721:18;35713:26;;35785:9;35779:4;35775:20;35771:1;35760:9;35756:17;35749:47;35813:131;35939:4;35813:131;:::i;:::-;35805:139;;35532:419;;;:::o;35957:::-;36123:4;36161:2;36150:9;36146:18;36138:26;;36210:9;36204:4;36200:20;36196:1;36185:9;36181:17;36174:47;36238:131;36364:4;36238:131;:::i;:::-;36230:139;;35957:419;;;:::o;36382:::-;36548:4;36586:2;36575:9;36571:18;36563:26;;36635:9;36629:4;36625:20;36621:1;36610:9;36606:17;36599:47;36663:131;36789:4;36663:131;:::i;:::-;36655:139;;36382:419;;;:::o;36807:::-;36973:4;37011:2;37000:9;36996:18;36988:26;;37060:9;37054:4;37050:20;37046:1;37035:9;37031:17;37024:47;37088:131;37214:4;37088:131;:::i;:::-;37080:139;;36807:419;;;:::o;37232:::-;37398:4;37436:2;37425:9;37421:18;37413:26;;37485:9;37479:4;37475:20;37471:1;37460:9;37456:17;37449:47;37513:131;37639:4;37513:131;:::i;:::-;37505:139;;37232:419;;;:::o;37657:726::-;37897:4;37935:2;37924:9;37920:18;37912:26;;37984:9;37978:4;37974:20;37970:1;37959:9;37955:17;37948:47;38012:131;38138:4;38012:131;:::i;:::-;38004:139;;38153:72;38221:2;38210:9;38206:18;38197:6;38153:72;:::i;:::-;38272:9;38266:4;38262:20;38257:2;38246:9;38242:18;38235:48;38300:76;38371:4;38362:6;38300:76;:::i;:::-;38292:84;;37657:726;;;;;:::o;38389:419::-;38555:4;38593:2;38582:9;38578:18;38570:26;;38642:9;38636:4;38632:20;38628:1;38617:9;38613:17;38606:47;38670:131;38796:4;38670:131;:::i;:::-;38662:139;;38389:419;;;:::o;38814:::-;38980:4;39018:2;39007:9;39003:18;38995:26;;39067:9;39061:4;39057:20;39053:1;39042:9;39038:17;39031:47;39095:131;39221:4;39095:131;:::i;:::-;39087:139;;38814:419;;;:::o;39239:::-;39405:4;39443:2;39432:9;39428:18;39420:26;;39492:9;39486:4;39482:20;39478:1;39467:9;39463:17;39456:47;39520:131;39646:4;39520:131;:::i;:::-;39512:139;;39239:419;;;:::o;39664:::-;39830:4;39868:2;39857:9;39853:18;39845:26;;39917:9;39911:4;39907:20;39903:1;39892:9;39888:17;39881:47;39945:131;40071:4;39945:131;:::i;:::-;39937:139;;39664:419;;;:::o;40089:::-;40255:4;40293:2;40282:9;40278:18;40270:26;;40342:9;40336:4;40332:20;40328:1;40317:9;40313:17;40306:47;40370:131;40496:4;40370:131;:::i;:::-;40362:139;;40089:419;;;:::o;40514:324::-;40631:4;40669:2;40658:9;40654:18;40646:26;;40682:69;40748:1;40737:9;40733:17;40724:6;40682:69;:::i;:::-;40761:70;40827:2;40816:9;40812:18;40803:6;40761:70;:::i;:::-;40514:324;;;;;:::o;40844:129::-;40878:6;40905:20;;:::i;:::-;40895:30;;40934:33;40962:4;40954:6;40934:33;:::i;:::-;40844:129;;;:::o;40979:75::-;41012:6;41045:2;41039:9;41029:19;;40979:75;:::o;41060:307::-;41121:4;41211:18;41203:6;41200:30;41197:56;;;41233:18;;:::i;:::-;41197:56;41271:29;41293:6;41271:29;:::i;:::-;41263:37;;41355:4;41349;41345:15;41337:23;;41060:307;;;:::o;41373:308::-;41435:4;41525:18;41517:6;41514:30;41511:56;;;41547:18;;:::i;:::-;41511:56;41585:29;41607:6;41585:29;:::i;:::-;41577:37;;41669:4;41663;41659:15;41651:23;;41373:308;;;:::o;41687:154::-;41776:4;41799:3;41791:11;;41829:4;41824:3;41820:14;41812:22;;41687:154;;;:::o;41847:98::-;41912:4;41935:3;41927:11;;41847:98;;;:::o;41951:141::-;42000:4;42023:3;42015:11;;42046:3;42043:1;42036:14;42080:4;42077:1;42067:18;42059:26;;41951:141;;;:::o;42098:136::-;42187:6;42221:5;42215:12;42205:22;;42098:136;;;:::o;42240:104::-;42305:6;42333:4;42323:14;;42240:104;;;:::o;42350:98::-;42401:6;42435:5;42429:12;42419:22;;42350:98;;;:::o;42454:99::-;42506:6;42540:5;42534:12;42524:22;;42454:99;;;:::o;42559:135::-;42651:4;42683;42678:3;42674:14;42666:22;;42559:135;;;:::o;42700:111::-;42768:4;42800;42795:3;42791:14;42783:22;;42700:111;;;:::o;42817:206::-;42938:11;42972:6;42967:3;42960:19;43012:4;43007:3;43003:14;42988:29;;42817:206;;;;:::o;43029:133::-;43116:11;43153:3;43138:18;;43029:133;;;;:::o;43168:143::-;43265:11;43302:3;43287:18;;43168:143;;;;:::o;43317:158::-;43390:11;43424:6;43419:3;43412:19;43464:4;43459:3;43455:14;43440:29;;43317:158;;;;:::o;43481:168::-;43564:11;43598:6;43593:3;43586:19;43638:4;43633:3;43629:14;43614:29;;43481:168;;;;:::o;43655:147::-;43756:11;43793:3;43778:18;;43655:147;;;;:::o;43808:159::-;43882:11;43916:6;43911:3;43904:19;43956:4;43951:3;43947:14;43932:29;;43808:159;;;;:::o;43973:169::-;44057:11;44091:6;44086:3;44079:19;44131:4;44126:3;44122:14;44107:29;;43973:169;;;;:::o;44148:148::-;44250:11;44287:3;44272:18;;44148:148;;;;:::o;44302:254::-;44341:3;44360:19;44377:1;44360:19;:::i;:::-;44355:24;;44393:19;44410:1;44393:19;:::i;:::-;44388:24;;44498:1;44478:18;44474:26;44471:1;44468:33;44465:59;;;44504:18;;:::i;:::-;44465:59;44548:1;44545;44541:9;44534:16;;44302:254;;;;:::o;44562:237::-;44600:3;44619:18;44635:1;44619:18;:::i;:::-;44614:23;;44651:18;44667:1;44651:18;:::i;:::-;44646:23;;44741:1;44735:4;44731:12;44728:1;44725:19;44722:45;;;44747:18;;:::i;:::-;44722:45;44791:1;44788;44784:9;44777:16;;44562:237;;;;:::o;44805:182::-;44844:1;44861:19;44878:1;44861:19;:::i;:::-;44856:24;;44894:19;44911:1;44894:19;:::i;:::-;44889:24;;44932:1;44922:35;;44937:18;;:::i;:::-;44922:35;44979:1;44976;44972:9;44967:14;;44805:182;;;;:::o;44993:289::-;45032:7;45055:19;45072:1;45055:19;:::i;:::-;45050:24;;45088:19;45105:1;45088:19;:::i;:::-;45083:24;;45219:1;45207:10;45203:18;45200:1;45197:25;45192:1;45185:9;45178:17;45174:49;45171:75;;;45226:18;;:::i;:::-;45171:75;45274:1;45271;45267:9;45256:20;;44993:289;;;;:::o;45288:188::-;45327:4;45347:19;45364:1;45347:19;:::i;:::-;45342:24;;45380:19;45397:1;45380:19;:::i;:::-;45375:24;;45418:1;45415;45412:8;45409:34;;;45423:18;;:::i;:::-;45409:34;45468:1;45465;45461:9;45453:17;;45288:188;;;;:::o;45482:96::-;45519:7;45548:24;45566:5;45548:24;:::i;:::-;45537:35;;45482:96;;;:::o;45584:77::-;45621:7;45650:5;45639:16;;45584:77;;;:::o;45667:89::-;45703:7;45743:6;45736:5;45732:18;45721:29;;45667:89;;;:::o;45762:126::-;45799:7;45839:42;45832:5;45828:54;45817:65;;45762:126;;;:::o;45894:77::-;45931:7;45960:5;45949:16;;45894:77;;;:::o;45977:93::-;46013:7;46053:10;46046:5;46042:22;46031:33;;45977:93;;;:::o;46076:101::-;46112:7;46152:18;46145:5;46141:30;46130:41;;46076:101;;;:::o;46183:86::-;46218:7;46258:4;46251:5;46247:16;46236:27;;46183:86;;;:::o;46275:117::-;46331:9;46364:22;46380:5;46364:22;:::i;:::-;46351:35;;46275:117;;;:::o;46398:154::-;46482:6;46477:3;46472;46459:30;46544:1;46535:6;46530:3;46526:16;46519:27;46398:154;;;:::o;46558:307::-;46626:1;46636:113;46650:6;46647:1;46644:13;46636:113;;;46735:1;46730:3;46726:11;46720:18;46716:1;46711:3;46707:11;46700:39;46672:2;46669:1;46665:10;46660:15;;46636:113;;;46767:6;46764:1;46761:13;46758:101;;;46847:1;46838:6;46833:3;46829:16;46822:27;46758:101;46607:258;46558:307;;;:::o;46871:320::-;46915:6;46952:1;46946:4;46942:12;46932:22;;46999:1;46993:4;46989:12;47020:18;47010:81;;47076:4;47068:6;47064:17;47054:27;;47010:81;47138:2;47130:6;47127:14;47107:18;47104:38;47101:84;;;47157:18;;:::i;:::-;47101:84;46922:269;46871:320;;;:::o;47197:281::-;47280:27;47302:4;47280:27;:::i;:::-;47272:6;47268:40;47410:6;47398:10;47395:22;47374:18;47362:10;47359:34;47356:62;47353:88;;;47421:18;;:::i;:::-;47353:88;47461:10;47457:2;47450:22;47240:238;47197:281;;:::o;47484:175::-;47522:3;47545:23;47562:5;47545:23;:::i;:::-;47536:32;;47590:10;47583:5;47580:21;47577:47;;;47604:18;;:::i;:::-;47577:47;47651:1;47644:5;47640:13;47633:20;;47484:175;;;:::o;47665:173::-;47696:1;47713:19;47730:1;47713:19;:::i;:::-;47708:24;;47746:19;47763:1;47746:19;:::i;:::-;47741:24;;47784:1;47774:35;;47789:18;;:::i;:::-;47774:35;47830:1;47827;47823:9;47818:14;;47665:173;;;;:::o;47844:180::-;47892:77;47889:1;47882:88;47989:4;47986:1;47979:15;48013:4;48010:1;48003:15;48030:180;48078:77;48075:1;48068:88;48175:4;48172:1;48165:15;48199:4;48196:1;48189:15;48216:180;48264:77;48261:1;48254:88;48361:4;48358:1;48351:15;48385:4;48382:1;48375:15;48402:180;48450:77;48447:1;48440:88;48547:4;48544:1;48537:15;48571:4;48568:1;48561:15;48588:180;48636:77;48633:1;48626:88;48733:4;48730:1;48723:15;48757:4;48754:1;48747:15;48774:117;48883:1;48880;48873:12;48897:117;49006:1;49003;48996:12;49020:117;49129:1;49126;49119:12;49143:117;49252:1;49249;49242:12;49266:102;49307:6;49358:2;49354:7;49349:2;49342:5;49338:14;49334:28;49324:38;;49266:102;;;:::o;49374:225::-;49514:34;49510:1;49502:6;49498:14;49491:58;49583:8;49578:2;49570:6;49566:15;49559:33;49374:225;:::o;49605:224::-;49745:34;49741:1;49733:6;49729:14;49722:58;49814:7;49809:2;49801:6;49797:15;49790:32;49605:224;:::o;49835:231::-;49975:34;49971:1;49963:6;49959:14;49952:58;50044:14;50039:2;50031:6;50027:15;50020:39;49835:231;:::o;50072:220::-;50212:34;50208:1;50200:6;50196:14;50189:58;50281:3;50276:2;50268:6;50264:15;50257:28;50072:220;:::o;50298:177::-;50438:29;50434:1;50426:6;50422:14;50415:53;50298:177;:::o;50481:231::-;50621:34;50617:1;50609:6;50605:14;50598:58;50690:14;50685:2;50677:6;50673:15;50666:39;50481:231;:::o;50718:243::-;50858:34;50854:1;50846:6;50842:14;50835:58;50927:26;50922:2;50914:6;50910:15;50903:51;50718:243;:::o;50967:228::-;51107:34;51103:1;51095:6;51091:14;51084:58;51176:11;51171:2;51163:6;51159:15;51152:36;50967:228;:::o;51201:233::-;51341:34;51337:1;51329:6;51325:14;51318:58;51410:16;51405:2;51397:6;51393:15;51386:41;51201:233;:::o;51440:224::-;51580:34;51576:1;51568:6;51564:14;51557:58;51649:7;51644:2;51636:6;51632:15;51625:32;51440:224;:::o;51670:178::-;51810:30;51806:1;51798:6;51794:14;51787:54;51670:178;:::o;51854:233::-;51994:34;51990:1;51982:6;51978:14;51971:58;52063:16;52058:2;52050:6;52046:15;52039:41;51854:233;:::o;52093:292::-;52233:34;52229:1;52221:6;52217:14;52210:58;52302:34;52297:2;52289:6;52285:15;52278:59;52371:6;52366:2;52358:6;52354:15;52347:31;52093:292;:::o;52391:232::-;52531:34;52527:1;52519:6;52515:14;52508:58;52600:15;52595:2;52587:6;52583:15;52576:40;52391:232;:::o;52629:182::-;52769:34;52765:1;52757:6;52753:14;52746:58;52629:182;:::o;52817:214::-;52957:66;52953:1;52945:6;52941:14;52934:90;52817:214;:::o;53037:182::-;53177:34;53173:1;53165:6;53161:14;53154:58;53037:182;:::o;53225:225::-;53365:34;53361:1;53353:6;53349:14;53342:58;53434:8;53429:2;53421:6;53417:15;53410:33;53225:225;:::o;53456:182::-;53596:34;53592:1;53584:6;53580:14;53573:58;53456:182;:::o;53644:::-;53784:34;53780:1;53772:6;53768:14;53761:58;53644:182;:::o;53832:230::-;53972:34;53968:1;53960:6;53956:14;53949:58;54041:13;54036:2;54028:6;54024:15;54017:38;53832:230;:::o;54068:122::-;54141:24;54159:5;54141:24;:::i;:::-;54134:5;54131:35;54121:63;;54180:1;54177;54170:12;54121:63;54068:122;:::o;54196:::-;54269:24;54287:5;54269:24;:::i;:::-;54262:5;54259:35;54249:63;;54308:1;54305;54298:12;54249:63;54196:122;:::o;54324:120::-;54396:23;54413:5;54396:23;:::i;:::-;54389:5;54386:34;54376:62;;54434:1;54431;54424:12;54376:62;54324:120;:::o
Swarm Source
ipfs://248cc5481a03e2ac4715d623925b123280594e95ae6261e57b76523ef77d7dea
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.