Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 755 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Import Lrd | 24313294 | 9 days ago | IN | 0 ETH | 0.00002377 | ||||
| Export Lrd | 24298678 | 11 days ago | IN | 0 ETH | 0.00010581 | ||||
| Import Lrd | 24297598 | 11 days ago | IN | 0 ETH | 0.00004351 | ||||
| Import Lrd | 24167853 | 30 days ago | IN | 0 ETH | 0.00002027 | ||||
| Import Lrd | 24131581 | 35 days ago | IN | 0 ETH | 0.00001974 | ||||
| Export Lrd | 24131541 | 35 days ago | IN | 0 ETH | 0.00005236 | ||||
| Import Lrd | 24114014 | 37 days ago | IN | 0 ETH | 0.00000689 | ||||
| Import Lrd | 24112586 | 37 days ago | IN | 0 ETH | 0.00001053 | ||||
| Import Lrd | 24095984 | 40 days ago | IN | 0 ETH | 0.00031092 | ||||
| Import Lrd | 24089136 | 41 days ago | IN | 0 ETH | 0.00017024 | ||||
| Import Lrd | 24085597 | 41 days ago | IN | 0 ETH | 0.00000747 | ||||
| Import Lrd | 24085589 | 41 days ago | IN | 0 ETH | 0.00001073 | ||||
| Import Lrd | 24085507 | 41 days ago | IN | 0 ETH | 0.00002097 | ||||
| Import Lrd | 24083745 | 41 days ago | IN | 0 ETH | 0.00003462 | ||||
| Import Lrd | 24074370 | 43 days ago | IN | 0 ETH | 0.00001079 | ||||
| Import Lrd | 24073678 | 43 days ago | IN | 0 ETH | 0.00003992 | ||||
| Export Lrd | 24073674 | 43 days ago | IN | 0 ETH | 0.00005777 | ||||
| Export Lrd | 24055900 | 45 days ago | IN | 0 ETH | 0.00002642 | ||||
| Import Lrd | 23990821 | 54 days ago | IN | 0 ETH | 0.00007749 | ||||
| Import Lrd | 23984444 | 55 days ago | IN | 0 ETH | 0.00002994 | ||||
| Import Lrd | 23758186 | 87 days ago | IN | 0 ETH | 0.00005048 | ||||
| Export Lrd | 23740347 | 89 days ago | IN | 0 ETH | 0.00045725 | ||||
| Import Lrd | 23712081 | 93 days ago | IN | 0 ETH | 0.00012114 | ||||
| Import Lrd | 23695081 | 96 days ago | IN | 0 ETH | 0.00003356 | ||||
| Import Lrd | 23691537 | 96 days ago | IN | 0 ETH | 0.00035508 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LRDLock
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-01-13
*/
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Context.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 Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (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 Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
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);
}
}
// 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: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [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 Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/LRD/LRDLock.sol
pragma solidity 0.8.9;
contract LRDLock is Ownable, ReentrancyGuard {
using SafeMath for uint256;
using SafeERC20 for IERC20;
struct PlayerParams {
uint256 amount;
uint256 importTime;
uint256 unlockTime;
}
struct UserData {
uint256 amount; // The amount deposited this time
uint256 importTime; // The time of thie deposit
uint256 totalAmount; // Total deposits (as of current deposits)
uint256 endTime; // Maturity time
}
bool public gameStatus;
address public verifier;
address public lrd;
address[] public playerList;
uint256[] public importTypes;
uint256 public totalAmount;
uint256 public activeUsers;
mapping(address => PlayerParams) public player;
mapping(address => UserData[]) public usersData;
mapping(address => bool) public addressExists;
mapping(address => uint256) public nonce;
event ImportLrd(address indexed owner, uint256 indexed amount, uint256 importType, uint256 unlockTime, uint256 time);
event ExportLrd(address indexed owner, uint256 indexed amount, uint256 time);
event ChangeVerifier(address indexed verifier, uint256 indexed time);
event ChangeToken(address indexed token, uint256 indexed time);
event PauseGame(bool indexed gameStatus, uint256 indexed time);
event ResumeGame(bool indexed gameStatus, uint256 indexed time);
event UpdateImportTypes(uint256 indexed index, uint256 indexed duration, uint256 indexed time);
event AddImportTypes(uint256 indexed duration, uint256 indexed time);
constructor(address _verifier, address _token) {
require(_verifier != address(0), "Lrd: Address error");
require(_token != address(0), "Lrd: Address error");
verifier = _verifier;
lrd = _token;
gameStatus = true;
// Add importType slices for the seconds of 4 weeks, 13 weeks, 26 weeks, 52 weeks, respectively
importTypes = [0, 86400 * 28, 86400 * 91, 86400 * 182, 86400 * 364];
}
function importLrd(uint256 _amount, uint256 _importType, uint8 _v, bytes32 _r, bytes32 _s) external {
require(gameStatus, "Lrd: The game is paused, cannot import");
require(!(_amount == 0 && _importType == 0), "Lrd: Amont and importType cannot be 0 at the same time");
require(_amount >= 0, "Lrd: Amount to import should be greater than 0");
PlayerParams storage params = player[msg.sender];
require(params.unlockTime == 0 || params.unlockTime > block.timestamp, "Lrd:Lock time is up, please export first");
if(params.amount == 0) {
require(_amount > 0, "Lrd: Must deposit a non-zero amount for the first time");
}
{
bytes memory prefix = "\x19Ethereum Signed Message:\n32";
bytes32 message = keccak256(abi.encodePacked(_amount, _importType, msg.sender, address(this), block.chainid, nonce[msg.sender]));
bytes32 hash = keccak256(abi.encodePacked(prefix, message));
address recover = ecrecover(hash, _v, _r, _s);
require(recover == verifier, "Lrd: Verification failed about importLrd");
}
if(!addressExists[msg.sender]){
playerList.push(msg.sender);
addressExists[msg.sender] = true;
activeUsers += 1;
}
if(_amount > 0) {
if(params.amount == 0) {
require(_importType != 0, "Lrd: The first import lock type is wrong");
params.unlockTime = block.timestamp + importTypes[_importType];
params.importTime = block.timestamp;
} else {
params.unlockTime += importTypes[_importType];
}
IERC20 _token = IERC20(lrd);
require(_token.balanceOf(msg.sender) >= _amount, "Lrd: Not enough token to import");
uint256 amountBefore = _token.balanceOf(address(this));
_token.safeTransferFrom(msg.sender, address(this), _amount);
uint256 amountAfter = _token.balanceOf(address(this));
require(amountAfter - amountBefore >= _amount, "Lrd: import LRD err");
params.amount += _amount;
totalAmount += _amount;
} else if(_importType != 0){
require(params.amount > 0, "Lrd: Cannot extend unlock time without existing deposit");
params.unlockTime += importTypes[_importType];
}
// Push in current wallet pledge information for easy back-end calculation of returns
UserData memory userData;
userData.amount = _amount;
userData.importTime = block.timestamp;
userData.totalAmount = params.amount;
userData.endTime = params.unlockTime;
usersData[msg.sender].push(userData);
nonce[msg.sender]++;
emit ImportLrd(msg.sender, _amount, _importType, params.unlockTime, block.timestamp);
}
function exportLrd(uint8 _v, bytes32 _r, bytes32 _s) external nonReentrant {
PlayerParams storage params = player[msg.sender];
require(block.timestamp >= params.unlockTime, "Lrd: The lock time is not up");
{
bytes memory prefix = "\x19Ethereum Signed Message:\n32";
bytes32 message = keccak256(abi.encodePacked(params.amount, msg.sender, address(this), block.chainid, nonce[msg.sender]));
bytes32 hash = keccak256(abi.encodePacked(prefix, message));
address recover = ecrecover(hash, _v, _r, _s);
require(recover == verifier, "Lrd: Verification failed about exportLrd");
}
IERC20 _token = IERC20(lrd);
require(_token.balanceOf(address(this)) >= params.amount, "Lrd: There is not enough balance to export");
_token.safeTransfer(msg.sender, params.amount);
totalAmount -= params.amount;
params.amount = 0;
params.importTime = 0;
params.unlockTime = 0;
addressExists[msg.sender] = false;
activeUsers -= 1;
nonce[msg.sender]++;
delete usersData[msg.sender];
removeFromPlayerList(msg.sender);
emit ExportLrd(msg.sender, params.amount, block.timestamp);
}
// Get all player import information
function getAllUserInfo() external view returns (string memory) {
uint256 userCount = playerList.length;
string memory result;
for (uint256 i = 0; i < userCount; i++) {
address userAddress = playerList[i];
UserData[] storage user = usersData[userAddress];
result = string(abi.encodePacked(result, userAddressToString(userAddress), ":"));
for (uint256 j = 0; j < user.length; j++) {
result = string(abi.encodePacked(result, depositDetailToString(user[j])));
if (j < user.length - 1) {
result = string(abi.encodePacked(result, ";"));
}
}
if (i < userCount - 1) {
result = string(abi.encodePacked(result, "@@"));
}
}
return result;
}
// Converts the user address to a string
function userAddressToString(address _address) public pure returns (string memory) {
uint256 addressUint = uint256(uint160(_address));
return toString(addressUint);
}
// Convert DepositDetail to a string
function depositDetailToString(UserData memory _detail) internal pure returns (string memory) {
string memory amountStr = toString(_detail.amount);
string memory importTimeStr = toString(_detail.importTime);
string memory totalAmountStr = toString(_detail.totalAmount);
string memory endTimeStr = toString(_detail.endTime);
return string(abi.encodePacked(amountStr, ",", importTimeStr, ",", totalAmountStr, ",", endTimeStr));
}
// Convert bytes32 to a string
function toString(uint256 _data) internal pure returns (string memory) {
if (_data == 0) {
return "0";
}
uint256 temp = _data;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (_data != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + _data % 10));
_data /= 10;
}
return string(buffer);
}
// Removes an address from the player list
function removeFromPlayerList(address _player) internal {
int256 playerIndex = -1;
for (uint256 i = 0; i < playerList.length; i++) {
if (playerList[i] == _player) {
playerIndex = int256(i);
break;
}
}
if (playerIndex != -1) {
playerList[uint256(playerIndex)] = playerList[playerList.length - 1];
playerList.pop();
}
}
// Change the checkout wallet
function changeVerifier(address _verifier) external onlyOwner {
require(_verifier != address(0), "Lrd: Address error");
verifier = _verifier;
emit ChangeVerifier(_verifier, block.timestamp);
}
// Change import token address
function changeToken(address _token) external onlyOwner {
require(_token != address(0), "Lrd: Address error");
lrd = _token;
emit ChangeToken(_token, block.timestamp);
}
// Pause game and player can ont import token
function pauseGame() external onlyOwner {
require(gameStatus, "Lrd: The game has been paused, don't pause it again");
gameStatus = false;
emit PauseGame(gameStatus, block.timestamp);
}
// Resume game and player can ont import token
function resumeGame() external onlyOwner {
require(!gameStatus, "Lrd: The game has begun");
gameStatus = true;
emit ResumeGame(gameStatus, block.timestamp);
}
// Change the time for the specified type of import
function updateImportTypes(uint256 _index, uint256 _newSeconds) external onlyOwner {
require(_index < importTypes.length, "Lrd: Index out of bounds");
require(_newSeconds > 0, "Lrd: The import time cannot be less than 0");
importTypes[_index] = _newSeconds;
emit UpdateImportTypes(_index, _newSeconds, block.timestamp);
}
// Add the import time type
function addImportTypes(uint256 _newSeconds) external onlyOwner {
require(_newSeconds > 0, "Lrd: The import time cannot be less than 0");
importTypes.push(_newSeconds);
emit AddImportTypes(_newSeconds, block.timestamp);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_verifier","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AddImportTypes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ChangeToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ChangeVerifier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ExportLrd","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"importType","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ImportLrd","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":"bool","name":"gameStatus","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"PauseGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"gameStatus","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ResumeGame","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateImportTypes","type":"event"},{"inputs":[],"name":"activeUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSeconds","type":"uint256"}],"name":"addImportTypes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"changeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_verifier","type":"address"}],"name":"changeVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"exportLrd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllUserInfo","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_importType","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"importLrd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"importTypes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lrd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"player","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"importTime","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"playerList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_newSeconds","type":"uint256"}],"name":"updateImportTypes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"userAddressToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"usersData","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"importTime","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verifier","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200443c3803806200443c8339818101604052810190620000379190620003fe565b620000576200004b6200024f60201b60201c565b6200025760201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620000d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c890620004a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000144576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013b90620004a6565b60405180910390fd5b81600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260006101000a81548160ff0219169083151502179055506040518060a00160405280600063ffffffff1681526020016224ea0063ffffffff1681526020016277f88063ffffffff16815260200162eff10063ffffffff1681526020016301dfe20063ffffffff168152506005906005620002469291906200031b565b505050620004c8565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562000362579160200282015b8281111562000361578251829063ffffffff169055916020019190600101906200033c565b5b50905062000371919062000375565b5090565b5b808211156200039057600081600090555060010162000376565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003c68262000399565b9050919050565b620003d881620003b9565b8114620003e457600080fd5b50565b600081519050620003f881620003cd565b92915050565b6000806040838503121562000418576200041762000394565b5b60006200042885828601620003e7565b92505060206200043b85828601620003e7565b9150509250929050565b600082825260208201905092915050565b7f4c72643a2041646472657373206572726f720000000000000000000000000000600082015250565b60006200048e60128362000445565b91506200049b8262000456565b602082019050919050565b60006020820190508181036000830152620004c1816200047f565b9050919050565b613f6480620004d86000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063ab3635161161007c578063ab363516146103a6578063ae6d9073146103c4578063cb5ba8fa146103f4578063cf04fb9414610410578063d3f42d241461042c578063f2fde38b1461044a57610158565b8063715018a6146102f6578063722fed7e1461030057806374aa34de1461031e5780638da5cb5b1461033c578063a013be871461035a578063a50252221461037657610158565b8063433de52011610115578063433de52014610222578063499831f21461023e5780634c54e1b5146102485780635137d4151461027a57806366829b16146102aa57806370ae92d2146102c657610158565b80631a39d8ef1461015d578063233c1dfd1461017b5780632b7ac3f3146101ab57806330dc6308146101c9578063340232ad146101fc5780633cc4c6ce14610218575b600080fd5b610165610466565b60405161017291906126bd565b60405180910390f35b61019560048036038101906101909190612709565b61046c565b6040516101a291906126bd565b60405180910390f35b6101b3610490565b6040516101c09190612777565b60405180910390f35b6101e360048036038101906101de91906127be565b6104b6565b6040516101f394939291906127fe565b60405180910390f35b61021660048036038101906102119190612709565b610503565b005b6102206105a8565b005b61023c600480360381019061023791906128b2565b61065c565b005b6102466110b2565b005b610262600480360381019061025d919061292d565b611165565b6040516102719392919061295a565b60405180910390f35b610294600480360381019061028f919061292d565b61118f565b6040516102a19190612a2a565b60405180910390f35b6102c460048036038101906102bf919061292d565b6111bd565b005b6102e060048036038101906102db919061292d565b6112bd565b6040516102ed91906126bd565b60405180910390f35b6102fe6112d5565b005b6103086112e9565b6040516103159190612a67565b60405180910390f35b6103266112fc565b60405161033391906126bd565b60405180910390f35b610344611302565b6040516103519190612777565b60405180910390f35b610374600480360381019061036f9190612a82565b61132b565b005b610390600480360381019061038b919061292d565b611413565b60405161039d9190612a67565b60405180910390f35b6103ae611433565b6040516103bb9190612777565b60405180910390f35b6103de60048036038101906103d99190612709565b611459565b6040516103eb9190612777565b60405180910390f35b61040e60048036038101906104099190612ac2565b611498565b005b61042a6004803603810190610425919061292d565b611a10565b005b610434611b10565b6040516104419190612a2a565b60405180910390f35b610464600480360381019061045f919061292d565b611d0d565b005b60065481565b6005818154811061047c57600080fd5b906000526020600020016000915090505481565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960205281600052604060002081815481106104d257600080fd5b9060005260206000209060040201600091509150508060000154908060010154908060020154908060030154905084565b61050b611d91565b6000811161054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054590612b87565b60405180910390fd5b600581908060018154018082558091505060019003906000526020600020016000909190919091505542817f5e97e1bd43fe053d200fca519798acfa0a2938947269af3a7190dbc3c086bb2060405160405180910390a350565b6105b0611d91565b600260009054906101000a900460ff1615610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f790612bf3565b60405180910390fd5b6001600260006101000a81548160ff02191690831515021790555042600260009054906101000a900460ff1615157f8b9597418818188d3aa607ce74107a861b3bce82f1df2d8d76839c5af6d9cf2560405160405180910390a3565b600260009054906101000a900460ff166106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290612c85565b60405180910390fd5b6000851480156106bb5750600084145b156106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f290612d17565b60405180910390fd5b600085101561073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073690612da9565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015414806107985750428160020154115b6107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90612e3b565b60405180910390fd5b6000816000015414156108285760008611610827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081e90612ecd565b60405180910390fd5b5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008787333046600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516020016108be96959493929190612f56565b604051602081830303815290604052805190602001209050600082826040516020016108eb92919061302e565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516109289493929190613074565b6020604051602081039080840390855afa15801561094a573d6000803e3d6000fd5b505050602060405103519050600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd9061312b565b60405180910390fd5b50505050600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b11576004339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000828254610b09919061317a565b925050819055505b6000861115610ea857600081600001541415610bab576000851415610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290613242565b60405180910390fd5b60058581548110610b7f57610b7e613262565b5b906000526020600020015442610b95919061317a565b8160020181905550428160010181905550610be5565b60058581548110610bbf57610bbe613262565b5b9060005260206000200154816002016000828254610bdd919061317a565b925050819055505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050868173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c469190612777565b60206040518083038186803b158015610c5e57600080fd5b505afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9691906132a6565b1015610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce9061331f565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d129190612777565b60206040518083038186803b158015610d2a57600080fd5b505afa158015610d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6291906132a6565b9050610d9133308a8573ffffffffffffffffffffffffffffffffffffffff16611e0f909392919063ffffffff16565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dcc9190612777565b60206040518083038186803b158015610de457600080fd5b505afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c91906132a6565b9050888282610e2b919061333f565b1015610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906133bf565b60405180910390fd5b88846000016000828254610e80919061317a565b925050819055508860066000828254610e99919061317a565b92505081905550505050610f32565b60008514610f31576000816000015411610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613451565b60405180910390fd5b60058581548110610f0b57610f0a613262565b5b9060005260206000200154816002016000828254610f29919061317a565b925050819055505b5b610f3a612621565b868160000181815250504281602001818152505081600001548160400181815250508160020154816060018181525050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301555050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061104d90613471565b9190505550863373ffffffffffffffffffffffffffffffffffffffff167fac4824c01483d078d07cf31ba2cd5adea5d99b8fe0961e3052dca87feae402c7888560020154426040516110a19392919061295a565b60405180910390a350505050505050565b6110ba611d91565b600260009054906101000a900460ff16611109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111009061352c565b60405180910390fd5b6000600260006101000a81548160ff02191690831515021790555042600260009054906101000a900460ff1615157ffeb21874e9b892515f8b1ff0e3674cc7f520bb23cb2aa8c3f16eef3e678a9c2560405160405180910390a3565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b606060008273ffffffffffffffffffffffffffffffffffffffff1690506111b581611e98565b915050919050565b6111c5611d91565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90613598565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428173ffffffffffffffffffffffffffffffffffffffff167fc2c9529f3d593377ffb0193b696541c0c709ed162cecfa71235495a527d8ab3b60405160405180910390a350565b600b6020528060005260406000206000915090505481565b6112dd611d91565b6112e76000611ff9565b565b600260009054906101000a900460ff1681565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611333611d91565b600580549050821061137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190613604565b60405180910390fd5b600081116113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490612b87565b60405180910390fd5b80600583815481106113d2576113d1613262565b5b90600052602060002001819055504281837f0a6b4480358f02a0784ea6efd5ba2dca5f84cddbbf14627876b198caaffc02bd60405160405180910390a45050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004818154811061146957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590613670565b60405180910390fd5b60026001819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020154421015611570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611567906136dc565b60405180910390fd5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008260000154333046600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516020016116089594939291906136fc565b6040516020818303038152906040528051906020012090506000828260405160200161163592919061302e565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516116729493929190613074565b6020604051602081039080840390855afa158015611694573d6000803e3d6000fd5b505050602060405103519050600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611727906137cd565b60405180910390fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600001548173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117999190612777565b60206040518083038186803b1580156117b157600080fd5b505afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e991906132a6565b101561182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061385f565b60405180910390fd5b6118593383600001548373ffffffffffffffffffffffffffffffffffffffff166120bd9092919063ffffffff16565b81600001546006600082825461186f919061333f565b925050819055506000826000018190555060008260010181905550600082600201819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008282546118ff919061333f565b92505081905550600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061195690613471565b9190505550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006119a69190612649565b6119af33612143565b81600001543373ffffffffffffffffffffffffffffffffffffffff167f1b9d1ce7c2da9b246a9f10db2e2132d1b06fd7cba4fe271ad7a7e5be45eb1ed5426040516119fa91906126bd565b60405180910390a3505060018081905550505050565b611a18611d91565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f90613598565b60405180910390fd5b80600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428173ffffffffffffffffffffffffffffffffffffffff167f1a595e45e444de13dc2056ab6e8f56864f3626505c2affcc14b4515b239540cd60405160405180910390a350565b606060006004805490509050606060005b82811015611d0457600060048281548110611b3f57611b3e613262565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905083611bb98361118f565b604051602001611bca929190613907565b604051602081830303815290604052935060005b8180549050811015611cb75784611c47838381548110611c0157611c00613262565b5b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050612325565b604051602001611c58929190613936565b604051602081830303815290604052945060018280549050611c7a919061333f565b811015611ca45784604051602001611c9291906139a6565b60405160208183030381529060405294505b8080611caf90613471565b915050611bde565b50600185611cc5919061333f565b831015611cef5783604051602001611cdd9190613a14565b60405160208183030381529060405293505b50508080611cfc90613471565b915050611b21565b50809250505090565b611d15611d91565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c90613aa8565b60405180910390fd5b611d8e81611ff9565b50565b611d9961239c565b73ffffffffffffffffffffffffffffffffffffffff16611db7611302565b73ffffffffffffffffffffffffffffffffffffffff1614611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0490613b14565b60405180910390fd5b565b611e92846323b872dd60e01b858585604051602401611e3093929190613b34565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123a4565b50505050565b60606000821415611ee0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ff4565b600082905060005b60008214611f12578080611efb90613471565b915050600a82611f0b9190613b9a565b9150611ee8565b60008167ffffffffffffffff811115611f2e57611f2d613bcb565b5b6040519080825280601f01601f191660200182016040528015611f605781602001600182028036833780820191505090505b5090505b60008514611fed57600182611f79919061333f565b9150600a85611f889190613bfa565b6030611f94919061317a565b60f81b818381518110611faa57611fa9613262565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fe69190613b9a565b9450611f64565b8093505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61213e8363a9059cbb60e01b84846040516024016120dc929190613c2b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123a4565b505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b600480549050811015612205578273ffffffffffffffffffffffffffffffffffffffff16600482815481106121a3576121a2613262565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121f257809150612205565b80806121fd90613471565b91505061216b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123215760046001600480549050612241919061333f565b8154811061225257612251613262565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004828154811061229157612290613262565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060048054806122eb576122ea613c54565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b606060006123368360000151611e98565b905060006123478460200151611e98565b905060006123588560400151611e98565b905060006123698660600151611e98565b9050838383836040516020016123829493929190613ccf565b604051602081830303815290604052945050505050919050565b600033905090565b6000612406826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661246b9092919063ffffffff16565b905060008151111561246657808060200190518101906124269190613d5a565b612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90613df9565b60405180910390fd5b5b505050565b606061247a8484600085612483565b90509392505050565b6060824710156124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bf90613e8b565b60405180910390fd5b6124d185612597565b612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790613ef7565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125399190613f17565b60006040518083038185875af1925050503d8060008114612576576040519150601f19603f3d011682016040523d82523d6000602084013e61257b565b606091505b509150915061258b8282866125ba565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156125ca5782905061261a565b6000835111156125dd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126119190612a2a565b60405180910390fd5b9392505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b508054600082556004029060005260206000209081019061266a919061266d565b50565b5b808211156126a0576000808201600090556001820160009055600282016000905560038201600090555060040161266e565b5090565b6000819050919050565b6126b7816126a4565b82525050565b60006020820190506126d260008301846126ae565b92915050565b600080fd5b6126e6816126a4565b81146126f157600080fd5b50565b600081359050612703816126dd565b92915050565b60006020828403121561271f5761271e6126d8565b5b600061272d848285016126f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061276182612736565b9050919050565b61277181612756565b82525050565b600060208201905061278c6000830184612768565b92915050565b61279b81612756565b81146127a657600080fd5b50565b6000813590506127b881612792565b92915050565b600080604083850312156127d5576127d46126d8565b5b60006127e3858286016127a9565b92505060206127f4858286016126f4565b9150509250929050565b600060808201905061281360008301876126ae565b61282060208301866126ae565b61282d60408301856126ae565b61283a60608301846126ae565b95945050505050565b600060ff82169050919050565b61285981612843565b811461286457600080fd5b50565b60008135905061287681612850565b92915050565b6000819050919050565b61288f8161287c565b811461289a57600080fd5b50565b6000813590506128ac81612886565b92915050565b600080600080600060a086880312156128ce576128cd6126d8565b5b60006128dc888289016126f4565b95505060206128ed888289016126f4565b94505060406128fe88828901612867565b935050606061290f8882890161289d565b92505060806129208882890161289d565b9150509295509295909350565b600060208284031215612943576129426126d8565b5b6000612951848285016127a9565b91505092915050565b600060608201905061296f60008301866126ae565b61297c60208301856126ae565b61298960408301846126ae565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129cb5780820151818401526020810190506129b0565b838111156129da576000848401525b50505050565b6000601f19601f8301169050919050565b60006129fc82612991565b612a06818561299c565b9350612a168185602086016129ad565b612a1f816129e0565b840191505092915050565b60006020820190508181036000830152612a4481846129f1565b905092915050565b60008115159050919050565b612a6181612a4c565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b60008060408385031215612a9957612a986126d8565b5b6000612aa7858286016126f4565b9250506020612ab8858286016126f4565b9150509250929050565b600080600060608486031215612adb57612ada6126d8565b5b6000612ae986828701612867565b9350506020612afa8682870161289d565b9250506040612b0b8682870161289d565b9150509250925092565b7f4c72643a2054686520696d706f72742074696d652063616e6e6f74206265206c60008201527f657373207468616e203000000000000000000000000000000000000000000000602082015250565b6000612b71602a8361299c565b9150612b7c82612b15565b604082019050919050565b60006020820190508181036000830152612ba081612b64565b9050919050565b7f4c72643a205468652067616d652068617320626567756e000000000000000000600082015250565b6000612bdd60178361299c565b9150612be882612ba7565b602082019050919050565b60006020820190508181036000830152612c0c81612bd0565b9050919050565b7f4c72643a205468652067616d65206973207061757365642c2063616e6e6f742060008201527f696d706f72740000000000000000000000000000000000000000000000000000602082015250565b6000612c6f60268361299c565b9150612c7a82612c13565b604082019050919050565b60006020820190508181036000830152612c9e81612c62565b9050919050565b7f4c72643a20416d6f6e7420616e6420696d706f7274547970652063616e6e6f7460008201527f2062652030206174207468652073616d652074696d6500000000000000000000602082015250565b6000612d0160368361299c565b9150612d0c82612ca5565b604082019050919050565b60006020820190508181036000830152612d3081612cf4565b9050919050565b7f4c72643a20416d6f756e7420746f20696d706f72742073686f756c642062652060008201527f67726561746572207468616e2030000000000000000000000000000000000000602082015250565b6000612d93602e8361299c565b9150612d9e82612d37565b604082019050919050565b60006020820190508181036000830152612dc281612d86565b9050919050565b7f4c72643a4c6f636b2074696d652069732075702c20706c65617365206578706f60008201527f7274206669727374000000000000000000000000000000000000000000000000602082015250565b6000612e2560288361299c565b9150612e3082612dc9565b604082019050919050565b60006020820190508181036000830152612e5481612e18565b9050919050565b7f4c72643a204d757374206465706f7369742061206e6f6e2d7a65726f20616d6f60008201527f756e7420666f72207468652066697273742074696d6500000000000000000000602082015250565b6000612eb760368361299c565b9150612ec282612e5b565b604082019050919050565b60006020820190508181036000830152612ee681612eaa565b9050919050565b6000819050919050565b612f08612f03826126a4565b612eed565b82525050565b60008160601b9050919050565b6000612f2682612f0e565b9050919050565b6000612f3882612f1b565b9050919050565b612f50612f4b82612756565b612f2d565b82525050565b6000612f628289612ef7565b602082019150612f728288612ef7565b602082019150612f828287612f3f565b601482019150612f928286612f3f565b601482019150612fa28285612ef7565b602082019150612fb28284612ef7565b602082019150819050979650505050505050565b600081519050919050565b600081905092915050565b6000612fe782612fc6565b612ff18185612fd1565b93506130018185602086016129ad565b80840191505092915050565b6000819050919050565b6130286130238261287c565b61300d565b82525050565b600061303a8285612fdc565b91506130468284613017565b6020820191508190509392505050565b61305f8161287c565b82525050565b61306e81612843565b82525050565b60006080820190506130896000830187613056565b6130966020830186613065565b6130a36040830185613056565b6130b06060830184613056565b95945050505050565b7f4c72643a20566572696669636174696f6e206661696c65642061626f7574206960008201527f6d706f72744c7264000000000000000000000000000000000000000000000000602082015250565b600061311560288361299c565b9150613120826130b9565b604082019050919050565b6000602082019050818103600083015261314481613108565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613185826126a4565b9150613190836126a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c5576131c461314b565b5b828201905092915050565b7f4c72643a2054686520666972737420696d706f7274206c6f636b20747970652060008201527f69732077726f6e67000000000000000000000000000000000000000000000000602082015250565b600061322c60288361299c565b9150613237826131d0565b604082019050919050565b6000602082019050818103600083015261325b8161321f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506132a0816126dd565b92915050565b6000602082840312156132bc576132bb6126d8565b5b60006132ca84828501613291565b91505092915050565b7f4c72643a204e6f7420656e6f75676820746f6b656e20746f20696d706f727400600082015250565b6000613309601f8361299c565b9150613314826132d3565b602082019050919050565b60006020820190508181036000830152613338816132fc565b9050919050565b600061334a826126a4565b9150613355836126a4565b9250828210156133685761336761314b565b5b828203905092915050565b7f4c72643a20696d706f7274204c52442065727200000000000000000000000000600082015250565b60006133a960138361299c565b91506133b482613373565b602082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f4c72643a2043616e6e6f7420657874656e6420756e6c6f636b2074696d65207760008201527f6974686f7574206578697374696e67206465706f736974000000000000000000602082015250565b600061343b60378361299c565b9150613446826133df565b604082019050919050565b6000602082019050818103600083015261346a8161342e565b9050919050565b600061347c826126a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134af576134ae61314b565b5b600182019050919050565b7f4c72643a205468652067616d6520686173206265656e207061757365642c206460008201527f6f6e277420706175736520697420616761696e00000000000000000000000000602082015250565b600061351660338361299c565b9150613521826134ba565b604082019050919050565b6000602082019050818103600083015261354581613509565b9050919050565b7f4c72643a2041646472657373206572726f720000000000000000000000000000600082015250565b600061358260128361299c565b915061358d8261354c565b602082019050919050565b600060208201905081810360008301526135b181613575565b9050919050565b7f4c72643a20496e646578206f7574206f6620626f756e64730000000000000000600082015250565b60006135ee60188361299c565b91506135f9826135b8565b602082019050919050565b6000602082019050818103600083015261361d816135e1565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061365a601f8361299c565b915061366582613624565b602082019050919050565b600060208201905081810360008301526136898161364d565b9050919050565b7f4c72643a20546865206c6f636b2074696d65206973206e6f7420757000000000600082015250565b60006136c6601c8361299c565b91506136d182613690565b602082019050919050565b600060208201905081810360008301526136f5816136b9565b9050919050565b60006137088288612ef7565b6020820191506137188287612f3f565b6014820191506137288286612f3f565b6014820191506137388285612ef7565b6020820191506137488284612ef7565b6020820191508190509695505050505050565b7f4c72643a20566572696669636174696f6e206661696c65642061626f7574206560008201527f78706f72744c7264000000000000000000000000000000000000000000000000602082015250565b60006137b760288361299c565b91506137c28261375b565b604082019050919050565b600060208201905081810360008301526137e6816137aa565b9050919050565b7f4c72643a205468657265206973206e6f7420656e6f7567682062616c616e636560008201527f20746f206578706f727400000000000000000000000000000000000000000000602082015250565b6000613849602a8361299c565b9150613854826137ed565b604082019050919050565b600060208201905081810360008301526138788161383c565b9050919050565b600081905092915050565b600061389582612991565b61389f818561387f565b93506138af8185602086016129ad565b80840191505092915050565b7f3a00000000000000000000000000000000000000000000000000000000000000600082015250565b60006138f160018361387f565b91506138fc826138bb565b600182019050919050565b6000613913828561388a565b915061391f828461388a565b915061392a826138e4565b91508190509392505050565b6000613942828561388a565b915061394e828461388a565b91508190509392505050565b7f3b00000000000000000000000000000000000000000000000000000000000000600082015250565b600061399060018361387f565b915061399b8261395a565b600182019050919050565b60006139b2828461388a565b91506139bd82613983565b915081905092915050565b7f4040000000000000000000000000000000000000000000000000000000000000600082015250565b60006139fe60028361387f565b9150613a09826139c8565b600282019050919050565b6000613a20828461388a565b9150613a2b826139f1565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a9260268361299c565b9150613a9d82613a36565b604082019050919050565b60006020820190508181036000830152613ac181613a85565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613afe60208361299c565b9150613b0982613ac8565b602082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b6000606082019050613b496000830186612768565b613b566020830185612768565b613b6360408301846126ae565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba5826126a4565b9150613bb0836126a4565b925082613bc057613bbf613b6b565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613c05826126a4565b9150613c10836126a4565b925082613c2057613c1f613b6b565b5b828206905092915050565b6000604082019050613c406000830185612768565b613c4d60208301846126ae565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613cb960018361387f565b9150613cc482613c83565b600182019050919050565b6000613cdb828761388a565b9150613ce682613cac565b9150613cf2828661388a565b9150613cfd82613cac565b9150613d09828561388a565b9150613d1482613cac565b9150613d20828461388a565b915081905095945050505050565b613d3781612a4c565b8114613d4257600080fd5b50565b600081519050613d5481613d2e565b92915050565b600060208284031215613d7057613d6f6126d8565b5b6000613d7e84828501613d45565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613de3602a8361299c565b9150613dee82613d87565b604082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613e7560268361299c565b9150613e8082613e19565b604082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613ee1601d8361299c565b9150613eec82613eab565b602082019050919050565b60006020820190508181036000830152613f1081613ed4565b9050919050565b6000613f238284612fdc565b91508190509291505056fea2646970667358221220aa489dc2b1cb2bf1e94ddd95bf5699f431c5edf28ac494fb08ca43fa0409911464736f6c634300080900330000000000000000000000005f00bbbb77f28aa7f908738ad110994461e8c0ad000000000000000000000000a83e93de372654fb9278bd018a0ac2b4e69f157f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063ab3635161161007c578063ab363516146103a6578063ae6d9073146103c4578063cb5ba8fa146103f4578063cf04fb9414610410578063d3f42d241461042c578063f2fde38b1461044a57610158565b8063715018a6146102f6578063722fed7e1461030057806374aa34de1461031e5780638da5cb5b1461033c578063a013be871461035a578063a50252221461037657610158565b8063433de52011610115578063433de52014610222578063499831f21461023e5780634c54e1b5146102485780635137d4151461027a57806366829b16146102aa57806370ae92d2146102c657610158565b80631a39d8ef1461015d578063233c1dfd1461017b5780632b7ac3f3146101ab57806330dc6308146101c9578063340232ad146101fc5780633cc4c6ce14610218575b600080fd5b610165610466565b60405161017291906126bd565b60405180910390f35b61019560048036038101906101909190612709565b61046c565b6040516101a291906126bd565b60405180910390f35b6101b3610490565b6040516101c09190612777565b60405180910390f35b6101e360048036038101906101de91906127be565b6104b6565b6040516101f394939291906127fe565b60405180910390f35b61021660048036038101906102119190612709565b610503565b005b6102206105a8565b005b61023c600480360381019061023791906128b2565b61065c565b005b6102466110b2565b005b610262600480360381019061025d919061292d565b611165565b6040516102719392919061295a565b60405180910390f35b610294600480360381019061028f919061292d565b61118f565b6040516102a19190612a2a565b60405180910390f35b6102c460048036038101906102bf919061292d565b6111bd565b005b6102e060048036038101906102db919061292d565b6112bd565b6040516102ed91906126bd565b60405180910390f35b6102fe6112d5565b005b6103086112e9565b6040516103159190612a67565b60405180910390f35b6103266112fc565b60405161033391906126bd565b60405180910390f35b610344611302565b6040516103519190612777565b60405180910390f35b610374600480360381019061036f9190612a82565b61132b565b005b610390600480360381019061038b919061292d565b611413565b60405161039d9190612a67565b60405180910390f35b6103ae611433565b6040516103bb9190612777565b60405180910390f35b6103de60048036038101906103d99190612709565b611459565b6040516103eb9190612777565b60405180910390f35b61040e60048036038101906104099190612ac2565b611498565b005b61042a6004803603810190610425919061292d565b611a10565b005b610434611b10565b6040516104419190612a2a565b60405180910390f35b610464600480360381019061045f919061292d565b611d0d565b005b60065481565b6005818154811061047c57600080fd5b906000526020600020016000915090505481565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960205281600052604060002081815481106104d257600080fd5b9060005260206000209060040201600091509150508060000154908060010154908060020154908060030154905084565b61050b611d91565b6000811161054e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054590612b87565b60405180910390fd5b600581908060018154018082558091505060019003906000526020600020016000909190919091505542817f5e97e1bd43fe053d200fca519798acfa0a2938947269af3a7190dbc3c086bb2060405160405180910390a350565b6105b0611d91565b600260009054906101000a900460ff1615610600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f790612bf3565b60405180910390fd5b6001600260006101000a81548160ff02191690831515021790555042600260009054906101000a900460ff1615157f8b9597418818188d3aa607ce74107a861b3bce82f1df2d8d76839c5af6d9cf2560405160405180910390a3565b600260009054906101000a900460ff166106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290612c85565b60405180910390fd5b6000851480156106bb5750600084145b156106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f290612d17565b60405180910390fd5b600085101561073f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073690612da9565b60405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816002015414806107985750428160020154115b6107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90612e3b565b60405180910390fd5b6000816000015414156108285760008611610827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081e90612ecd565b60405180910390fd5b5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008787333046600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516020016108be96959493929190612f56565b604051602081830303815290604052805190602001209050600082826040516020016108eb92919061302e565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516109289493929190613074565b6020604051602081039080840390855afa15801561094a573d6000803e3d6000fd5b505050602060405103519050600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dd9061312b565b60405180910390fd5b50505050600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b11576004339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000828254610b09919061317a565b925050819055505b6000861115610ea857600081600001541415610bab576000851415610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290613242565b60405180910390fd5b60058581548110610b7f57610b7e613262565b5b906000526020600020015442610b95919061317a565b8160020181905550428160010181905550610be5565b60058581548110610bbf57610bbe613262565b5b9060005260206000200154816002016000828254610bdd919061317a565b925050819055505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050868173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610c469190612777565b60206040518083038186803b158015610c5e57600080fd5b505afa158015610c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9691906132a6565b1015610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce9061331f565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610d129190612777565b60206040518083038186803b158015610d2a57600080fd5b505afa158015610d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6291906132a6565b9050610d9133308a8573ffffffffffffffffffffffffffffffffffffffff16611e0f909392919063ffffffff16565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dcc9190612777565b60206040518083038186803b158015610de457600080fd5b505afa158015610df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1c91906132a6565b9050888282610e2b919061333f565b1015610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e63906133bf565b60405180910390fd5b88846000016000828254610e80919061317a565b925050819055508860066000828254610e99919061317a565b92505081905550505050610f32565b60008514610f31576000816000015411610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee90613451565b60405180910390fd5b60058581548110610f0b57610f0a613262565b5b9060005260206000200154816002016000828254610f29919061317a565b925050819055505b5b610f3a612621565b868160000181815250504281602001818152505081600001548160400181815250508160020154816060018181525050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301555050600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061104d90613471565b9190505550863373ffffffffffffffffffffffffffffffffffffffff167fac4824c01483d078d07cf31ba2cd5adea5d99b8fe0961e3052dca87feae402c7888560020154426040516110a19392919061295a565b60405180910390a350505050505050565b6110ba611d91565b600260009054906101000a900460ff16611109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111009061352c565b60405180910390fd5b6000600260006101000a81548160ff02191690831515021790555042600260009054906101000a900460ff1615157ffeb21874e9b892515f8b1ff0e3674cc7f520bb23cb2aa8c3f16eef3e678a9c2560405160405180910390a3565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b606060008273ffffffffffffffffffffffffffffffffffffffff1690506111b581611e98565b915050919050565b6111c5611d91565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122c90613598565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428173ffffffffffffffffffffffffffffffffffffffff167fc2c9529f3d593377ffb0193b696541c0c709ed162cecfa71235495a527d8ab3b60405160405180910390a350565b600b6020528060005260406000206000915090505481565b6112dd611d91565b6112e76000611ff9565b565b600260009054906101000a900460ff1681565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611333611d91565b600580549050821061137a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137190613604565b60405180910390fd5b600081116113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490612b87565b60405180910390fd5b80600583815481106113d2576113d1613262565b5b90600052602060002001819055504281837f0a6b4480358f02a0784ea6efd5ba2dca5f84cddbbf14627876b198caaffc02bd60405160405180910390a45050565b600a6020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6004818154811061146957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260015414156114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590613670565b60405180910390fd5b60026001819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020154421015611570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611567906136dc565b60405180910390fd5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008260000154333046600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516020016116089594939291906136fc565b6040516020818303038152906040528051906020012090506000828260405160200161163592919061302e565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516116729493929190613074565b6020604051602081039080840390855afa158015611694573d6000803e3d6000fd5b505050602060405103519050600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611727906137cd565b60405180910390fd5b505050506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600001548173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117999190612777565b60206040518083038186803b1580156117b157600080fd5b505afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e991906132a6565b101561182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118219061385f565b60405180910390fd5b6118593383600001548373ffffffffffffffffffffffffffffffffffffffff166120bd9092919063ffffffff16565b81600001546006600082825461186f919061333f565b925050819055506000826000018190555060008260010181905550600082600201819055506000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008282546118ff919061333f565b92505081905550600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061195690613471565b9190505550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006119a69190612649565b6119af33612143565b81600001543373ffffffffffffffffffffffffffffffffffffffff167f1b9d1ce7c2da9b246a9f10db2e2132d1b06fd7cba4fe271ad7a7e5be45eb1ed5426040516119fa91906126bd565b60405180910390a3505060018081905550505050565b611a18611d91565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7f90613598565b60405180910390fd5b80600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428173ffffffffffffffffffffffffffffffffffffffff167f1a595e45e444de13dc2056ab6e8f56864f3626505c2affcc14b4515b239540cd60405160405180910390a350565b606060006004805490509050606060005b82811015611d0457600060048281548110611b3f57611b3e613262565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905083611bb98361118f565b604051602001611bca929190613907565b604051602081830303815290604052935060005b8180549050811015611cb75784611c47838381548110611c0157611c00613262565b5b9060005260206000209060040201604051806080016040529081600082015481526020016001820154815260200160028201548152602001600382015481525050612325565b604051602001611c58929190613936565b604051602081830303815290604052945060018280549050611c7a919061333f565b811015611ca45784604051602001611c9291906139a6565b60405160208183030381529060405294505b8080611caf90613471565b915050611bde565b50600185611cc5919061333f565b831015611cef5783604051602001611cdd9190613a14565b60405160208183030381529060405293505b50508080611cfc90613471565b915050611b21565b50809250505090565b611d15611d91565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c90613aa8565b60405180910390fd5b611d8e81611ff9565b50565b611d9961239c565b73ffffffffffffffffffffffffffffffffffffffff16611db7611302565b73ffffffffffffffffffffffffffffffffffffffff1614611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0490613b14565b60405180910390fd5b565b611e92846323b872dd60e01b858585604051602401611e3093929190613b34565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123a4565b50505050565b60606000821415611ee0576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ff4565b600082905060005b60008214611f12578080611efb90613471565b915050600a82611f0b9190613b9a565b9150611ee8565b60008167ffffffffffffffff811115611f2e57611f2d613bcb565b5b6040519080825280601f01601f191660200182016040528015611f605781602001600182028036833780820191505090505b5090505b60008514611fed57600182611f79919061333f565b9150600a85611f889190613bfa565b6030611f94919061317a565b60f81b818381518110611faa57611fa9613262565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611fe69190613b9a565b9450611f64565b8093505050505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61213e8363a9059cbb60e01b84846040516024016120dc929190613c2b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506123a4565b505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905060005b600480549050811015612205578273ffffffffffffffffffffffffffffffffffffffff16600482815481106121a3576121a2613262565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156121f257809150612205565b80806121fd90613471565b91505061216b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146123215760046001600480549050612241919061333f565b8154811061225257612251613262565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004828154811061229157612290613262565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060048054806122eb576122ea613c54565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b606060006123368360000151611e98565b905060006123478460200151611e98565b905060006123588560400151611e98565b905060006123698660600151611e98565b9050838383836040516020016123829493929190613ccf565b604051602081830303815290604052945050505050919050565b600033905090565b6000612406826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661246b9092919063ffffffff16565b905060008151111561246657808060200190518101906124269190613d5a565b612465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245c90613df9565b60405180910390fd5b5b505050565b606061247a8484600085612483565b90509392505050565b6060824710156124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bf90613e8b565b60405180910390fd5b6124d185612597565b612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790613ef7565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125399190613f17565b60006040518083038185875af1925050503d8060008114612576576040519150601f19603f3d011682016040523d82523d6000602084013e61257b565b606091505b509150915061258b8282866125ba565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b606083156125ca5782905061261a565b6000835111156125dd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126119190612a2a565b60405180910390fd5b9392505050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b508054600082556004029060005260206000209081019061266a919061266d565b50565b5b808211156126a0576000808201600090556001820160009055600282016000905560038201600090555060040161266e565b5090565b6000819050919050565b6126b7816126a4565b82525050565b60006020820190506126d260008301846126ae565b92915050565b600080fd5b6126e6816126a4565b81146126f157600080fd5b50565b600081359050612703816126dd565b92915050565b60006020828403121561271f5761271e6126d8565b5b600061272d848285016126f4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061276182612736565b9050919050565b61277181612756565b82525050565b600060208201905061278c6000830184612768565b92915050565b61279b81612756565b81146127a657600080fd5b50565b6000813590506127b881612792565b92915050565b600080604083850312156127d5576127d46126d8565b5b60006127e3858286016127a9565b92505060206127f4858286016126f4565b9150509250929050565b600060808201905061281360008301876126ae565b61282060208301866126ae565b61282d60408301856126ae565b61283a60608301846126ae565b95945050505050565b600060ff82169050919050565b61285981612843565b811461286457600080fd5b50565b60008135905061287681612850565b92915050565b6000819050919050565b61288f8161287c565b811461289a57600080fd5b50565b6000813590506128ac81612886565b92915050565b600080600080600060a086880312156128ce576128cd6126d8565b5b60006128dc888289016126f4565b95505060206128ed888289016126f4565b94505060406128fe88828901612867565b935050606061290f8882890161289d565b92505060806129208882890161289d565b9150509295509295909350565b600060208284031215612943576129426126d8565b5b6000612951848285016127a9565b91505092915050565b600060608201905061296f60008301866126ae565b61297c60208301856126ae565b61298960408301846126ae565b949350505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156129cb5780820151818401526020810190506129b0565b838111156129da576000848401525b50505050565b6000601f19601f8301169050919050565b60006129fc82612991565b612a06818561299c565b9350612a168185602086016129ad565b612a1f816129e0565b840191505092915050565b60006020820190508181036000830152612a4481846129f1565b905092915050565b60008115159050919050565b612a6181612a4c565b82525050565b6000602082019050612a7c6000830184612a58565b92915050565b60008060408385031215612a9957612a986126d8565b5b6000612aa7858286016126f4565b9250506020612ab8858286016126f4565b9150509250929050565b600080600060608486031215612adb57612ada6126d8565b5b6000612ae986828701612867565b9350506020612afa8682870161289d565b9250506040612b0b8682870161289d565b9150509250925092565b7f4c72643a2054686520696d706f72742074696d652063616e6e6f74206265206c60008201527f657373207468616e203000000000000000000000000000000000000000000000602082015250565b6000612b71602a8361299c565b9150612b7c82612b15565b604082019050919050565b60006020820190508181036000830152612ba081612b64565b9050919050565b7f4c72643a205468652067616d652068617320626567756e000000000000000000600082015250565b6000612bdd60178361299c565b9150612be882612ba7565b602082019050919050565b60006020820190508181036000830152612c0c81612bd0565b9050919050565b7f4c72643a205468652067616d65206973207061757365642c2063616e6e6f742060008201527f696d706f72740000000000000000000000000000000000000000000000000000602082015250565b6000612c6f60268361299c565b9150612c7a82612c13565b604082019050919050565b60006020820190508181036000830152612c9e81612c62565b9050919050565b7f4c72643a20416d6f6e7420616e6420696d706f7274547970652063616e6e6f7460008201527f2062652030206174207468652073616d652074696d6500000000000000000000602082015250565b6000612d0160368361299c565b9150612d0c82612ca5565b604082019050919050565b60006020820190508181036000830152612d3081612cf4565b9050919050565b7f4c72643a20416d6f756e7420746f20696d706f72742073686f756c642062652060008201527f67726561746572207468616e2030000000000000000000000000000000000000602082015250565b6000612d93602e8361299c565b9150612d9e82612d37565b604082019050919050565b60006020820190508181036000830152612dc281612d86565b9050919050565b7f4c72643a4c6f636b2074696d652069732075702c20706c65617365206578706f60008201527f7274206669727374000000000000000000000000000000000000000000000000602082015250565b6000612e2560288361299c565b9150612e3082612dc9565b604082019050919050565b60006020820190508181036000830152612e5481612e18565b9050919050565b7f4c72643a204d757374206465706f7369742061206e6f6e2d7a65726f20616d6f60008201527f756e7420666f72207468652066697273742074696d6500000000000000000000602082015250565b6000612eb760368361299c565b9150612ec282612e5b565b604082019050919050565b60006020820190508181036000830152612ee681612eaa565b9050919050565b6000819050919050565b612f08612f03826126a4565b612eed565b82525050565b60008160601b9050919050565b6000612f2682612f0e565b9050919050565b6000612f3882612f1b565b9050919050565b612f50612f4b82612756565b612f2d565b82525050565b6000612f628289612ef7565b602082019150612f728288612ef7565b602082019150612f828287612f3f565b601482019150612f928286612f3f565b601482019150612fa28285612ef7565b602082019150612fb28284612ef7565b602082019150819050979650505050505050565b600081519050919050565b600081905092915050565b6000612fe782612fc6565b612ff18185612fd1565b93506130018185602086016129ad565b80840191505092915050565b6000819050919050565b6130286130238261287c565b61300d565b82525050565b600061303a8285612fdc565b91506130468284613017565b6020820191508190509392505050565b61305f8161287c565b82525050565b61306e81612843565b82525050565b60006080820190506130896000830187613056565b6130966020830186613065565b6130a36040830185613056565b6130b06060830184613056565b95945050505050565b7f4c72643a20566572696669636174696f6e206661696c65642061626f7574206960008201527f6d706f72744c7264000000000000000000000000000000000000000000000000602082015250565b600061311560288361299c565b9150613120826130b9565b604082019050919050565b6000602082019050818103600083015261314481613108565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613185826126a4565b9150613190836126a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c5576131c461314b565b5b828201905092915050565b7f4c72643a2054686520666972737420696d706f7274206c6f636b20747970652060008201527f69732077726f6e67000000000000000000000000000000000000000000000000602082015250565b600061322c60288361299c565b9150613237826131d0565b604082019050919050565b6000602082019050818103600083015261325b8161321f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506132a0816126dd565b92915050565b6000602082840312156132bc576132bb6126d8565b5b60006132ca84828501613291565b91505092915050565b7f4c72643a204e6f7420656e6f75676820746f6b656e20746f20696d706f727400600082015250565b6000613309601f8361299c565b9150613314826132d3565b602082019050919050565b60006020820190508181036000830152613338816132fc565b9050919050565b600061334a826126a4565b9150613355836126a4565b9250828210156133685761336761314b565b5b828203905092915050565b7f4c72643a20696d706f7274204c52442065727200000000000000000000000000600082015250565b60006133a960138361299c565b91506133b482613373565b602082019050919050565b600060208201905081810360008301526133d88161339c565b9050919050565b7f4c72643a2043616e6e6f7420657874656e6420756e6c6f636b2074696d65207760008201527f6974686f7574206578697374696e67206465706f736974000000000000000000602082015250565b600061343b60378361299c565b9150613446826133df565b604082019050919050565b6000602082019050818103600083015261346a8161342e565b9050919050565b600061347c826126a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134af576134ae61314b565b5b600182019050919050565b7f4c72643a205468652067616d6520686173206265656e207061757365642c206460008201527f6f6e277420706175736520697420616761696e00000000000000000000000000602082015250565b600061351660338361299c565b9150613521826134ba565b604082019050919050565b6000602082019050818103600083015261354581613509565b9050919050565b7f4c72643a2041646472657373206572726f720000000000000000000000000000600082015250565b600061358260128361299c565b915061358d8261354c565b602082019050919050565b600060208201905081810360008301526135b181613575565b9050919050565b7f4c72643a20496e646578206f7574206f6620626f756e64730000000000000000600082015250565b60006135ee60188361299c565b91506135f9826135b8565b602082019050919050565b6000602082019050818103600083015261361d816135e1565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061365a601f8361299c565b915061366582613624565b602082019050919050565b600060208201905081810360008301526136898161364d565b9050919050565b7f4c72643a20546865206c6f636b2074696d65206973206e6f7420757000000000600082015250565b60006136c6601c8361299c565b91506136d182613690565b602082019050919050565b600060208201905081810360008301526136f5816136b9565b9050919050565b60006137088288612ef7565b6020820191506137188287612f3f565b6014820191506137288286612f3f565b6014820191506137388285612ef7565b6020820191506137488284612ef7565b6020820191508190509695505050505050565b7f4c72643a20566572696669636174696f6e206661696c65642061626f7574206560008201527f78706f72744c7264000000000000000000000000000000000000000000000000602082015250565b60006137b760288361299c565b91506137c28261375b565b604082019050919050565b600060208201905081810360008301526137e6816137aa565b9050919050565b7f4c72643a205468657265206973206e6f7420656e6f7567682062616c616e636560008201527f20746f206578706f727400000000000000000000000000000000000000000000602082015250565b6000613849602a8361299c565b9150613854826137ed565b604082019050919050565b600060208201905081810360008301526138788161383c565b9050919050565b600081905092915050565b600061389582612991565b61389f818561387f565b93506138af8185602086016129ad565b80840191505092915050565b7f3a00000000000000000000000000000000000000000000000000000000000000600082015250565b60006138f160018361387f565b91506138fc826138bb565b600182019050919050565b6000613913828561388a565b915061391f828461388a565b915061392a826138e4565b91508190509392505050565b6000613942828561388a565b915061394e828461388a565b91508190509392505050565b7f3b00000000000000000000000000000000000000000000000000000000000000600082015250565b600061399060018361387f565b915061399b8261395a565b600182019050919050565b60006139b2828461388a565b91506139bd82613983565b915081905092915050565b7f4040000000000000000000000000000000000000000000000000000000000000600082015250565b60006139fe60028361387f565b9150613a09826139c8565b600282019050919050565b6000613a20828461388a565b9150613a2b826139f1565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a9260268361299c565b9150613a9d82613a36565b604082019050919050565b60006020820190508181036000830152613ac181613a85565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613afe60208361299c565b9150613b0982613ac8565b602082019050919050565b60006020820190508181036000830152613b2d81613af1565b9050919050565b6000606082019050613b496000830186612768565b613b566020830185612768565b613b6360408301846126ae565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ba5826126a4565b9150613bb0836126a4565b925082613bc057613bbf613b6b565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613c05826126a4565b9150613c10836126a4565b925082613c2057613c1f613b6b565b5b828206905092915050565b6000604082019050613c406000830185612768565b613c4d60208301846126ae565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613cb960018361387f565b9150613cc482613c83565b600182019050919050565b6000613cdb828761388a565b9150613ce682613cac565b9150613cf2828661388a565b9150613cfd82613cac565b9150613d09828561388a565b9150613d1482613cac565b9150613d20828461388a565b915081905095945050505050565b613d3781612a4c565b8114613d4257600080fd5b50565b600081519050613d5481613d2e565b92915050565b600060208284031215613d7057613d6f6126d8565b5b6000613d7e84828501613d45565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613de3602a8361299c565b9150613dee82613d87565b604082019050919050565b60006020820190508181036000830152613e1281613dd6565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000613e7560268361299c565b9150613e8082613e19565b604082019050919050565b60006020820190508181036000830152613ea481613e68565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000613ee1601d8361299c565b9150613eec82613eab565b602082019050919050565b60006020820190508181036000830152613f1081613ed4565b9050919050565b6000613f238284612fdc565b91508190509291505056fea2646970667358221220aa489dc2b1cb2bf1e94ddd95bf5699f431c5edf28ac494fb08ca43fa0409911464736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005f00bbbb77f28aa7f908738ad110994461e8c0ad000000000000000000000000a83e93de372654fb9278bd018a0ac2b4e69f157f
-----Decoded View---------------
Arg [0] : _verifier (address): 0x5F00bBBB77f28Aa7F908738AD110994461E8C0Ad
Arg [1] : _token (address): 0xa83E93dE372654Fb9278Bd018A0Ac2B4E69f157f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f00bbbb77f28aa7f908738ad110994461e8c0ad
Arg [1] : 000000000000000000000000a83e93de372654fb9278bd018a0ac2b4e69f157f
Deployed Bytecode Sourcemap
31770:11125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32448:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32320:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32573:47;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42627:263;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41957:192;;;:::i;:::-;;33869:3046;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41671:226;;;:::i;:::-;;32520:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39273:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41407:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32679:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5535:103;;;:::i;:::-;;32286:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32483:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4887:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42214:372;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32627:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32352:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32379:27;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36923:1374;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41135:228;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38347:872;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5793:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32448:28;;;;:::o;32413:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32320:25::-;;;;;;;;;;;;;:::o;32573:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42627:263::-;4773:13;:11;:13::i;:::-;42724:1:::1;42710:11;:15;42702:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42783:11;42800;42783:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42866:15;42853:11;42838:44;;;;;;;;;;42627:263:::0;:::o;41957:192::-;4773:13;:11;:13::i;:::-;42018:10:::1;;;;;;;;;;;42017:11;42009:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;42080:4;42067:10;;:17;;;;;;;;;;;;;;;;;;42125:15;42113:10;;;;;;;;;;;42102:39;;;;;;;;;;;;41957:192::o:0;33869:3046::-;33988:10;;;;;;;;;;;33980:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34073:1;34062:7;:12;:32;;;;;34093:1;34078:11;:16;34062:32;34060:35;34052:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;34189:1;34178:7;:12;;34170:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;34263:27;34293:6;:18;34300:10;34293:18;;;;;;;;;;;;;;;34263:48;;34353:1;34332:6;:17;;;:22;:61;;;;34378:15;34358:6;:17;;;:35;34332:61;34324:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;34471:1;34454:6;:13;;;:18;34451:128;;;34507:1;34497:7;:11;34489:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;34451:128;34606:19;:60;;;;;;;;;;;;;;;;;;;34681:15;34734:7;34743:11;34756:10;34776:4;34783:13;34798:5;:17;34804:10;34798:17;;;;;;;;;;;;;;;;34717:99;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34707:110;;;;;;34681:136;;34832:12;34885:6;34893:7;34868:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34858:44;;;;;;34832:70;;34917:15;34943:27;34953:4;34959:2;34963;34967;34943:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34917:53;;35006:8;;;;;;;;;;;34995:19;;:7;:19;;;34987:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34591:480;;;;35087:13;:25;35101:10;35087:25;;;;;;;;;;;;;;;;;;;;;;;;;35083:175;;35128:10;35144;35128:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35198:4;35170:13;:25;35184:10;35170:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;35245:1;35217:11;;:29;;;;;;;:::i;:::-;;;;;;;;35083:175;35283:1;35273:7;:11;35270:1132;;;35321:1;35304:6;:13;;;:18;35301:348;;;35366:1;35351:11;:16;;35343:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35469:11;35481;35469:24;;;;;;;;:::i;:::-;;;;;;;;;;35451:15;:42;;;;:::i;:::-;35431:6;:17;;:62;;;;35532:15;35512:6;:17;;:35;;;;35301:348;;;35609:11;35621;35609:24;;;;;;;;:::i;:::-;;;;;;;;;;35588:6;:17;;;:45;;;;;;;:::i;:::-;;;;;;;;35301:348;35665:13;35688:3;;;;;;;;;;;35665:27;;35747:7;35715:6;:16;;;35732:10;35715:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;35707:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;35807:20;35830:6;:16;;;35855:4;35830:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35807:54;;35876:59;35900:10;35920:4;35927:7;35876:6;:23;;;;:59;;;;;;:::i;:::-;35950:19;35972:6;:16;;;35997:4;35972:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35950:53;;36056:7;36040:12;36026:11;:26;;;;:::i;:::-;:37;;36018:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36133:7;36116:6;:13;;;:24;;;;;;;:::i;:::-;;;;;;;;36175:7;36155:11;;:27;;;;;;;:::i;:::-;;;;;;;;35286:910;;;35270:1132;;;36220:1;36205:11;:16;36202:200;;36265:1;36249:6;:13;;;:17;36241:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36366:11;36378;36366:24;;;;;;;;:::i;:::-;;;;;;;;;;36345:6;:17;;;:45;;;;;;;:::i;:::-;;;;;;;;36202:200;35270:1132;36519:24;;:::i;:::-;36577:7;36554:8;:15;;:30;;;;;36618:15;36595:8;:19;;:38;;;;;36667:6;:13;;;36644:8;:20;;:36;;;;;36714:6;:17;;;36691:8;:16;;:40;;;;;36742:9;:21;36752:10;36742:21;;;;;;;;;;;;;;;36769:8;36742:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36791:5;:17;36797:10;36791:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;36850:7;36838:10;36828:79;;;36859:11;36872:6;:17;;;36891:15;36828:79;;;;;;;;:::i;:::-;;;;;;;;33969:2946;;33869:3046;;;;;:::o;41671:226::-;4773:13;:11;:13::i;:::-;41730:10:::1;;;;;;;;;;;41722:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;41820:5;41807:10;;:18;;;;;;;;;;;;;;;;;;41873:15;41861:10;;;;;;;;;;;41851:38;;;;;;;;;;;;41671:226::o:0;32520:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39273:189::-;39341:13;39367:19;39405:8;39389:26;;39367:48;;39433:21;39442:11;39433:8;:21::i;:::-;39426:28;;;39273:189;;;:::o;41407:205::-;4773:13;:11;:13::i;:::-;41500:1:::1;41482:20;;:6;:20;;;;41474:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;41544:6;41538:3;;:12;;;;;;;;;;;;;;;;;;41588:15;41580:6;41568:36;;;;;;;;;;;;41407:205:::0;:::o;32679:40::-;;;;;;;;;;;;;;;;;:::o;5535:103::-;4773:13;:11;:13::i;:::-;5600:30:::1;5627:1;5600:18;:30::i;:::-;5535:103::o:0;32286:27::-;;;;;;;;;;;;;:::o;32483:28::-;;;;:::o;4887:87::-;4933:7;4960:6;;;;;;;;;;;4953:13;;4887:87;:::o;42214:372::-;4773:13;:11;:13::i;:::-;42325:11:::1;:18;;;;42316:6;:27;42308:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42405:1;42391:11;:15;42383:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42486:11;42464;42476:6;42464:19;;;;;;;;:::i;:::-;;;;;;;;;:33;;;;42562:15;42549:11;42541:6;42523:55;;;;;;;;;;42214:372:::0;;:::o;32627:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;32352:20::-;;;;;;;;;;;;;:::o;32379:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36923:1374::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;37009:27:::1;37039:6;:18;37046:10;37039:18;;;;;;;;;;;;;;;37009:48;;37097:6;:17;;;37078:15;:36;;37070:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37176:19;:60;;;;;;;;;;;;;;;;::::0;::::1;;37251:15;37304:6;:13;;;37319:10;37339:4;37346:13;37361:5;:17;37367:10;37361:17;;;;;;;;;;;;;;;;37287:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37277:103;;;;;;37251:129;;37395:12;37448:6;37456:7;37431:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37421:44;;;;;;37395:70;;37480:15;37506:27;37516:4;37522:2;37526;37530;37506:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;37480:53;;37569:8;;;;;;;;;;;37558:19;;:7;:19;;;37550:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;37161:473;;;;37646:13;37669:3;;;;;;;;;;;37646:27;;37727:6;:13;;;37692:6;:16;;;37717:4;37692:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;37684:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;37798:46;37818:10;37830:6;:13;;;37798:6;:19;;;;:46;;;;;:::i;:::-;37885:6;:13;;;37857:11;;:41;;;;;;;:::i;:::-;;;;;;;;37937:1;37909:6;:13;;:29;;;;37977:1;37949:6;:17;;:29;;;;38017:1;37989:6;:17;;:29;;;;38057:5;38029:13;:25;38043:10;38029:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;38101:1;38073:11;;:29;;;;;;;:::i;:::-;;;;;;;;38113:5;:17;38119:10;38113:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;38150:9;:21;38160:10;38150:21;;;;;;;;;;;;;;;;38143:28;;;;:::i;:::-;38184:32;38205:10;38184:20;:32::i;:::-;38256:6;:13;;;38244:10;38234:53;;;38271:15;38234:53;;;;;;:::i;:::-;;;;;;;;36998:1299;;1768:1:::0;2722:7;:22;;;;36923:1374;;;:::o;41135:228::-;4773:13;:11;:13::i;:::-;41237:1:::1;41216:23;;:9;:23;;;;41208:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;41286:9;41275:8;;:20;;;;;;;;;;;;;;;;;;41339:15;41328:9;41313:42;;;;;;;;;;;;41135:228:::0;:::o;38347:872::-;38396:13;38422:17;38442:10;:17;;;;38422:37;;38470:20;38508:9;38503:683;38527:9;38523:1;:13;38503:683;;;38558:19;38580:10;38591:1;38580:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38558:35;;38608:23;38634:9;:22;38644:11;38634:22;;;;;;;;;;;;;;;38608:48;;38706:6;38714:32;38734:11;38714:19;:32::i;:::-;38689:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38673:80;;38775:9;38770:284;38794:4;:11;;;;38790:1;:15;38770:284;;;38864:6;38872:30;38894:4;38899:1;38894:7;;;;;;;;:::i;:::-;;;;;;;;;;;;38872:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:21;:30::i;:::-;38847:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38831:73;;38947:1;38933:4;:11;;;;:15;;;;:::i;:::-;38929:1;:19;38925:114;;;39006:6;38989:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;38973:46;;38925:114;38807:3;;;;;:::i;:::-;;;;38770:284;;;;39090:1;39078:9;:13;;;;:::i;:::-;39074:1;:17;39070:105;;;39145:6;39128:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;39112:47;;39070:105;38543:643;;38538:3;;;;;:::i;:::-;;;;38503:683;;;;39205:6;39198:13;;;;38347:872;:::o;5793:201::-;4773:13;:11;:13::i;:::-;5902:1:::1;5882:22;;:8;:22;;;;5874:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5958:28;5977:8;5958:18;:28::i;:::-;5793:201:::0;:::o;5052:132::-;5127:12;:10;:12::i;:::-;5116:23;;:7;:5;:7::i;:::-;:23;;;5108:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5052:132::o;28123:248::-;28267:96;28287:5;28317:27;;;28346:4;28352:2;28356:5;28294:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28267:19;:96::i;:::-;28123:248;;;;:::o;40031:546::-;40087:13;40126:1;40117:5;:10;40113:53;;;40144:10;;;;;;;;;;;;;;;;;;;;;40113:53;40178:12;40193:5;40178:20;;40209:14;40236:78;40251:1;40243:4;:9;40236:78;;40269:8;;;;;:::i;:::-;;;;40300:2;40292:10;;;;;:::i;:::-;;;40236:78;;;40326:19;40358:6;40348:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40326:39;;40376:160;40392:1;40383:5;:10;40376:160;;40427:1;40410:18;;;;;:::i;:::-;;;40486:2;40478:5;:10;;;;:::i;:::-;40473:2;:15;;;;:::i;:::-;40460:30;;40443:6;40450;40443:14;;;;;;;;:::i;:::-;;;;;:47;;;;;;;;;;;40522:2;40505:19;;;;;:::i;:::-;;;40376:160;;;40562:6;40548:21;;;;;40031:546;;;;:::o;6154:191::-;6228:16;6247:6;;;;;;;;;;;6228:25;;6273:8;6264:6;;:17;;;;;;;;;;;;;;;;;;6328:8;6297:40;;6318:8;6297:40;;;;;;;;;;;;6217:128;6154:191;:::o;27904:211::-;28021:86;28041:5;28071:23;;;28096:2;28100:5;28048:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28021:19;:86::i;:::-;27904:211;;;:::o;40637:455::-;40704:18;40725:2;40704:23;;40743:9;40738:186;40762:10;:17;;;;40758:1;:21;40738:186;;;40822:7;40805:24;;:10;40816:1;40805:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;40801:112;;;40871:1;40850:23;;40892:5;;40801:112;40781:3;;;;;:::i;:::-;;;;40738:186;;;;40955:2;40940:11;:17;40936:149;;41009:10;41040:1;41020:10;:17;;;;:21;;;;:::i;:::-;41009:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40974:10;40993:11;40974:32;;;;;;;;:::i;:::-;;;;;;;;;;:68;;;;;;;;;;;;;;;;;;41057:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;40936:149;40693:399;40637:455;:::o;39512:475::-;39591:13;39617:23;39643:24;39652:7;:14;;;39643:8;:24::i;:::-;39617:50;;39678:27;39708:28;39717:7;:18;;;39708:8;:28::i;:::-;39678:58;;39747:28;39778:29;39787:7;:19;;;39778:8;:29::i;:::-;39747:60;;39818:24;39845:25;39854:7;:15;;;39845:8;:25::i;:::-;39818:52;;39914:9;39930:13;39950:14;39971:10;39897:85;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39883:100;;;;;;39512:475;;;:::o;3438:98::-;3491:7;3518:10;3511:17;;3438:98;:::o;30971:716::-;31395:23;31421:69;31449:4;31421:69;;;;;;;;;;;;;;;;;31429:5;31421:27;;;;:69;;;;;:::i;:::-;31395:95;;31525:1;31505:10;:17;:21;31501:179;;;31602:10;31591:30;;;;;;;;;;;;:::i;:::-;31583:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:179;31041:646;30971:716;;:::o;17371:229::-;17508:12;17540:52;17562:6;17570:4;17576:1;17579:12;17540:21;:52::i;:::-;17533:59;;17371:229;;;;;:::o;18491:510::-;18661:12;18719:5;18694:21;:30;;18686:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;18786:18;18797:6;18786:10;:18::i;:::-;18778:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18852:12;18866:23;18893:6;:11;;18912:5;18919:4;18893:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18851:73;;;;18942:51;18959:7;18968:10;18980:12;18942:16;:51::i;:::-;18935:58;;;;18491:510;;;;;;:::o;14626:326::-;14686:4;14943:1;14921:7;:19;;;:23;14914:30;;14626:326;;;:::o;21177:762::-;21327:12;21356:7;21352:580;;;21387:10;21380:17;;;;21352:580;21521:1;21501:10;:17;:21;21497:424;;;21749:10;21743:17;21810:15;21797:10;21793:2;21789:19;21782:44;21497:424;21892:12;21885:20;;;;;;;;;;;:::i;:::-;;;;;;;;21177:762;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:222::-;1828:4;1866:2;1855:9;1851:18;1843:26;;1879:71;1947:1;1936:9;1932:17;1923:6;1879:71;:::i;:::-;1735:222;;;;:::o;1963:122::-;2036:24;2054:5;2036:24;:::i;:::-;2029:5;2026:35;2016:63;;2075:1;2072;2065:12;2016:63;1963:122;:::o;2091:139::-;2137:5;2175:6;2162:20;2153:29;;2191:33;2218:5;2191:33;:::i;:::-;2091:139;;;;:::o;2236:474::-;2304:6;2312;2361:2;2349:9;2340:7;2336:23;2332:32;2329:119;;;2367:79;;:::i;:::-;2329:119;2487:1;2512:53;2557:7;2548:6;2537:9;2533:22;2512:53;:::i;:::-;2502:63;;2458:117;2614:2;2640:53;2685:7;2676:6;2665:9;2661:22;2640:53;:::i;:::-;2630:63;;2585:118;2236:474;;;;;:::o;2716:553::-;2893:4;2931:3;2920:9;2916:19;2908:27;;2945:71;3013:1;3002:9;2998:17;2989:6;2945:71;:::i;:::-;3026:72;3094:2;3083:9;3079:18;3070:6;3026:72;:::i;:::-;3108;3176:2;3165:9;3161:18;3152:6;3108:72;:::i;:::-;3190;3258:2;3247:9;3243:18;3234:6;3190:72;:::i;:::-;2716:553;;;;;;;:::o;3275:86::-;3310:7;3350:4;3343:5;3339:16;3328:27;;3275:86;;;:::o;3367:118::-;3438:22;3454:5;3438:22;:::i;:::-;3431:5;3428:33;3418:61;;3475:1;3472;3465:12;3418:61;3367:118;:::o;3491:135::-;3535:5;3573:6;3560:20;3551:29;;3589:31;3614:5;3589:31;:::i;:::-;3491:135;;;;:::o;3632:77::-;3669:7;3698:5;3687:16;;3632:77;;;:::o;3715:122::-;3788:24;3806:5;3788:24;:::i;:::-;3781:5;3778:35;3768:63;;3827:1;3824;3817:12;3768:63;3715:122;:::o;3843:139::-;3889:5;3927:6;3914:20;3905:29;;3943:33;3970:5;3943:33;:::i;:::-;3843:139;;;;:::o;3988:907::-;4081:6;4089;4097;4105;4113;4162:3;4150:9;4141:7;4137:23;4133:33;4130:120;;;4169:79;;:::i;:::-;4130:120;4289:1;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4260:117;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4544:2;4570:51;4613:7;4604:6;4593:9;4589:22;4570:51;:::i;:::-;4560:61;;4515:116;4670:2;4696:53;4741:7;4732:6;4721:9;4717:22;4696:53;:::i;:::-;4686:63;;4641:118;4798:3;4825:53;4870:7;4861:6;4850:9;4846:22;4825:53;:::i;:::-;4815:63;;4769:119;3988:907;;;;;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:442::-;5385:4;5423:2;5412:9;5408:18;5400:26;;5436:71;5504:1;5493:9;5489:17;5480:6;5436:71;:::i;:::-;5517:72;5585:2;5574:9;5570:18;5561:6;5517:72;:::i;:::-;5599;5667:2;5656:9;5652:18;5643:6;5599:72;:::i;:::-;5236:442;;;;;;:::o;5684:99::-;5736:6;5770:5;5764:12;5754:22;;5684:99;;;:::o;5789:169::-;5873:11;5907:6;5902:3;5895:19;5947:4;5942:3;5938:14;5923:29;;5789:169;;;;:::o;5964:307::-;6032:1;6042:113;6056:6;6053:1;6050:13;6042:113;;;6141:1;6136:3;6132:11;6126:18;6122:1;6117:3;6113:11;6106:39;6078:2;6075:1;6071:10;6066:15;;6042:113;;;6173:6;6170:1;6167:13;6164:101;;;6253:1;6244:6;6239:3;6235:16;6228:27;6164:101;6013:258;5964:307;;;:::o;6277:102::-;6318:6;6369:2;6365:7;6360:2;6353:5;6349:14;6345:28;6335:38;;6277:102;;;:::o;6385:364::-;6473:3;6501:39;6534:5;6501:39;:::i;:::-;6556:71;6620:6;6615:3;6556:71;:::i;:::-;6549:78;;6636:52;6681:6;6676:3;6669:4;6662:5;6658:16;6636:52;:::i;:::-;6713:29;6735:6;6713:29;:::i;:::-;6708:3;6704:39;6697:46;;6477:272;6385:364;;;;:::o;6755:313::-;6868:4;6906:2;6895:9;6891:18;6883:26;;6955:9;6949:4;6945:20;6941:1;6930:9;6926:17;6919:47;6983:78;7056:4;7047:6;6983:78;:::i;:::-;6975:86;;6755:313;;;;:::o;7074:90::-;7108:7;7151:5;7144:13;7137:21;7126:32;;7074:90;;;:::o;7170:109::-;7251:21;7266:5;7251:21;:::i;:::-;7246:3;7239:34;7170:109;;:::o;7285:210::-;7372:4;7410:2;7399:9;7395:18;7387:26;;7423:65;7485:1;7474:9;7470:17;7461:6;7423:65;:::i;:::-;7285:210;;;;:::o;7501:474::-;7569:6;7577;7626:2;7614:9;7605:7;7601:23;7597:32;7594:119;;;7632:79;;:::i;:::-;7594:119;7752:1;7777:53;7822:7;7813:6;7802:9;7798:22;7777:53;:::i;:::-;7767:63;;7723:117;7879:2;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7850:118;7501:474;;;;;:::o;7981:615::-;8056:6;8064;8072;8121:2;8109:9;8100:7;8096:23;8092:32;8089:119;;;8127:79;;:::i;:::-;8089:119;8247:1;8272:51;8315:7;8306:6;8295:9;8291:22;8272:51;:::i;:::-;8262:61;;8218:115;8372:2;8398:53;8443:7;8434:6;8423:9;8419:22;8398:53;:::i;:::-;8388:63;;8343:118;8500:2;8526:53;8571:7;8562:6;8551:9;8547:22;8526:53;:::i;:::-;8516:63;;8471:118;7981:615;;;;;:::o;8602:229::-;8742:34;8738:1;8730:6;8726:14;8719:58;8811:12;8806:2;8798:6;8794:15;8787:37;8602:229;:::o;8837:366::-;8979:3;9000:67;9064:2;9059:3;9000:67;:::i;:::-;8993:74;;9076:93;9165:3;9076:93;:::i;:::-;9194:2;9189:3;9185:12;9178:19;;8837:366;;;:::o;9209:419::-;9375:4;9413:2;9402:9;9398:18;9390:26;;9462:9;9456:4;9452:20;9448:1;9437:9;9433:17;9426:47;9490:131;9616:4;9490:131;:::i;:::-;9482:139;;9209:419;;;:::o;9634:173::-;9774:25;9770:1;9762:6;9758:14;9751:49;9634:173;:::o;9813:366::-;9955:3;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10052:93;10141:3;10052:93;:::i;:::-;10170:2;10165:3;10161:12;10154:19;;9813:366;;;:::o;10185:419::-;10351:4;10389:2;10378:9;10374:18;10366:26;;10438:9;10432:4;10428:20;10424:1;10413:9;10409:17;10402:47;10466:131;10592:4;10466:131;:::i;:::-;10458:139;;10185:419;;;:::o;10610:225::-;10750:34;10746:1;10738:6;10734:14;10727:58;10819:8;10814:2;10806:6;10802:15;10795:33;10610:225;:::o;10841:366::-;10983:3;11004:67;11068:2;11063:3;11004:67;:::i;:::-;10997:74;;11080:93;11169:3;11080:93;:::i;:::-;11198:2;11193:3;11189:12;11182:19;;10841:366;;;:::o;11213:419::-;11379:4;11417:2;11406:9;11402:18;11394:26;;11466:9;11460:4;11456:20;11452:1;11441:9;11437:17;11430:47;11494:131;11620:4;11494:131;:::i;:::-;11486:139;;11213:419;;;:::o;11638:241::-;11778:34;11774:1;11766:6;11762:14;11755:58;11847:24;11842:2;11834:6;11830:15;11823:49;11638:241;:::o;11885:366::-;12027:3;12048:67;12112:2;12107:3;12048:67;:::i;:::-;12041:74;;12124:93;12213:3;12124:93;:::i;:::-;12242:2;12237:3;12233:12;12226:19;;11885:366;;;:::o;12257:419::-;12423:4;12461:2;12450:9;12446:18;12438:26;;12510:9;12504:4;12500:20;12496:1;12485:9;12481:17;12474:47;12538:131;12664:4;12538:131;:::i;:::-;12530:139;;12257:419;;;:::o;12682:233::-;12822:34;12818:1;12810:6;12806:14;12799:58;12891:16;12886:2;12878:6;12874:15;12867:41;12682:233;:::o;12921:366::-;13063:3;13084:67;13148:2;13143:3;13084:67;:::i;:::-;13077:74;;13160:93;13249:3;13160:93;:::i;:::-;13278:2;13273:3;13269:12;13262:19;;12921:366;;;:::o;13293:419::-;13459:4;13497:2;13486:9;13482:18;13474:26;;13546:9;13540:4;13536:20;13532:1;13521:9;13517:17;13510:47;13574:131;13700:4;13574:131;:::i;:::-;13566:139;;13293:419;;;:::o;13718:227::-;13858:34;13854:1;13846:6;13842:14;13835:58;13927:10;13922:2;13914:6;13910:15;13903:35;13718:227;:::o;13951:366::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:419::-;14489:4;14527:2;14516:9;14512:18;14504:26;;14576:9;14570:4;14566:20;14562:1;14551:9;14547:17;14540:47;14604:131;14730:4;14604:131;:::i;:::-;14596:139;;14323:419;;;:::o;14748:241::-;14888:34;14884:1;14876:6;14872:14;14865:58;14957:24;14952:2;14944:6;14940:15;14933:49;14748:241;:::o;14995:366::-;15137:3;15158:67;15222:2;15217:3;15158:67;:::i;:::-;15151:74;;15234:93;15323:3;15234:93;:::i;:::-;15352:2;15347:3;15343:12;15336:19;;14995:366;;;:::o;15367:419::-;15533:4;15571:2;15560:9;15556:18;15548:26;;15620:9;15614:4;15610:20;15606:1;15595:9;15591:17;15584:47;15648:131;15774:4;15648:131;:::i;:::-;15640:139;;15367:419;;;:::o;15792:79::-;15831:7;15860:5;15849:16;;15792:79;;;:::o;15877:157::-;15982:45;16002:24;16020:5;16002:24;:::i;:::-;15982:45;:::i;:::-;15977:3;15970:58;15877:157;;:::o;16040:94::-;16073:8;16121:5;16117:2;16113:14;16092:35;;16040:94;;;:::o;16140:::-;16179:7;16208:20;16222:5;16208:20;:::i;:::-;16197:31;;16140:94;;;:::o;16240:100::-;16279:7;16308:26;16328:5;16308:26;:::i;:::-;16297:37;;16240:100;;;:::o;16346:157::-;16451:45;16471:24;16489:5;16471:24;:::i;:::-;16451:45;:::i;:::-;16446:3;16439:58;16346:157;;:::o;16509:961::-;16761:3;16776:75;16847:3;16838:6;16776:75;:::i;:::-;16876:2;16871:3;16867:12;16860:19;;16889:75;16960:3;16951:6;16889:75;:::i;:::-;16989:2;16984:3;16980:12;16973:19;;17002:75;17073:3;17064:6;17002:75;:::i;:::-;17102:2;17097:3;17093:12;17086:19;;17115:75;17186:3;17177:6;17115:75;:::i;:::-;17215:2;17210:3;17206:12;17199:19;;17228:75;17299:3;17290:6;17228:75;:::i;:::-;17328:2;17323:3;17319:12;17312:19;;17341:75;17412:3;17403:6;17341:75;:::i;:::-;17441:2;17436:3;17432:12;17425:19;;17461:3;17454:10;;16509:961;;;;;;;;;:::o;17476:98::-;17527:6;17561:5;17555:12;17545:22;;17476:98;;;:::o;17580:147::-;17681:11;17718:3;17703:18;;17580:147;;;;:::o;17733:373::-;17837:3;17865:38;17897:5;17865:38;:::i;:::-;17919:88;18000:6;17995:3;17919:88;:::i;:::-;17912:95;;18016:52;18061:6;18056:3;18049:4;18042:5;18038:16;18016:52;:::i;:::-;18093:6;18088:3;18084:16;18077:23;;17841:265;17733:373;;;;:::o;18112:79::-;18151:7;18180:5;18169:16;;18112:79;;;:::o;18197:157::-;18302:45;18322:24;18340:5;18322:24;:::i;:::-;18302:45;:::i;:::-;18297:3;18290:58;18197:157;;:::o;18360:412::-;18518:3;18540:93;18629:3;18620:6;18540:93;:::i;:::-;18533:100;;18643:75;18714:3;18705:6;18643:75;:::i;:::-;18743:2;18738:3;18734:12;18727:19;;18763:3;18756:10;;18360:412;;;;;:::o;18778:118::-;18865:24;18883:5;18865:24;:::i;:::-;18860:3;18853:37;18778:118;;:::o;18902:112::-;18985:22;19001:5;18985:22;:::i;:::-;18980:3;18973:35;18902:112;;:::o;19020:545::-;19193:4;19231:3;19220:9;19216:19;19208:27;;19245:71;19313:1;19302:9;19298:17;19289:6;19245:71;:::i;:::-;19326:68;19390:2;19379:9;19375:18;19366:6;19326:68;:::i;:::-;19404:72;19472:2;19461:9;19457:18;19448:6;19404:72;:::i;:::-;19486;19554:2;19543:9;19539:18;19530:6;19486:72;:::i;:::-;19020:545;;;;;;;:::o;19571:227::-;19711:34;19707:1;19699:6;19695:14;19688:58;19780:10;19775:2;19767:6;19763:15;19756:35;19571:227;:::o;19804:366::-;19946:3;19967:67;20031:2;20026:3;19967:67;:::i;:::-;19960:74;;20043:93;20132:3;20043:93;:::i;:::-;20161:2;20156:3;20152:12;20145:19;;19804:366;;;:::o;20176:419::-;20342:4;20380:2;20369:9;20365:18;20357:26;;20429:9;20423:4;20419:20;20415:1;20404:9;20400:17;20393:47;20457:131;20583:4;20457:131;:::i;:::-;20449:139;;20176:419;;;:::o;20601:180::-;20649:77;20646:1;20639:88;20746:4;20743:1;20736:15;20770:4;20767:1;20760:15;20787:305;20827:3;20846:20;20864:1;20846:20;:::i;:::-;20841:25;;20880:20;20898:1;20880:20;:::i;:::-;20875:25;;21034:1;20966:66;20962:74;20959:1;20956:81;20953:107;;;21040:18;;:::i;:::-;20953:107;21084:1;21081;21077:9;21070:16;;20787:305;;;;:::o;21098:227::-;21238:34;21234:1;21226:6;21222:14;21215:58;21307:10;21302:2;21294:6;21290:15;21283:35;21098:227;:::o;21331:366::-;21473:3;21494:67;21558:2;21553:3;21494:67;:::i;:::-;21487:74;;21570:93;21659:3;21570:93;:::i;:::-;21688:2;21683:3;21679:12;21672:19;;21331:366;;;:::o;21703:419::-;21869:4;21907:2;21896:9;21892:18;21884:26;;21956:9;21950:4;21946:20;21942:1;21931:9;21927:17;21920:47;21984:131;22110:4;21984:131;:::i;:::-;21976:139;;21703:419;;;:::o;22128:180::-;22176:77;22173:1;22166:88;22273:4;22270:1;22263:15;22297:4;22294:1;22287:15;22314:143;22371:5;22402:6;22396:13;22387:22;;22418:33;22445:5;22418:33;:::i;:::-;22314:143;;;;:::o;22463:351::-;22533:6;22582:2;22570:9;22561:7;22557:23;22553:32;22550:119;;;22588:79;;:::i;:::-;22550:119;22708:1;22733:64;22789:7;22780:6;22769:9;22765:22;22733:64;:::i;:::-;22723:74;;22679:128;22463:351;;;;:::o;22820:181::-;22960:33;22956:1;22948:6;22944:14;22937:57;22820:181;:::o;23007:366::-;23149:3;23170:67;23234:2;23229:3;23170:67;:::i;:::-;23163:74;;23246:93;23335:3;23246:93;:::i;:::-;23364:2;23359:3;23355:12;23348:19;;23007:366;;;:::o;23379:419::-;23545:4;23583:2;23572:9;23568:18;23560:26;;23632:9;23626:4;23622:20;23618:1;23607:9;23603:17;23596:47;23660:131;23786:4;23660:131;:::i;:::-;23652:139;;23379:419;;;:::o;23804:191::-;23844:4;23864:20;23882:1;23864:20;:::i;:::-;23859:25;;23898:20;23916:1;23898:20;:::i;:::-;23893:25;;23937:1;23934;23931:8;23928:34;;;23942:18;;:::i;:::-;23928:34;23987:1;23984;23980:9;23972:17;;23804:191;;;;:::o;24001:169::-;24141:21;24137:1;24129:6;24125:14;24118:45;24001:169;:::o;24176:366::-;24318:3;24339:67;24403:2;24398:3;24339:67;:::i;:::-;24332:74;;24415:93;24504:3;24415:93;:::i;:::-;24533:2;24528:3;24524:12;24517:19;;24176:366;;;:::o;24548:419::-;24714:4;24752:2;24741:9;24737:18;24729:26;;24801:9;24795:4;24791:20;24787:1;24776:9;24772:17;24765:47;24829:131;24955:4;24829:131;:::i;:::-;24821:139;;24548:419;;;:::o;24973:242::-;25113:34;25109:1;25101:6;25097:14;25090:58;25182:25;25177:2;25169:6;25165:15;25158:50;24973:242;:::o;25221:366::-;25363:3;25384:67;25448:2;25443:3;25384:67;:::i;:::-;25377:74;;25460:93;25549:3;25460:93;:::i;:::-;25578:2;25573:3;25569:12;25562:19;;25221:366;;;:::o;25593:419::-;25759:4;25797:2;25786:9;25782:18;25774:26;;25846:9;25840:4;25836:20;25832:1;25821:9;25817:17;25810:47;25874:131;26000:4;25874:131;:::i;:::-;25866:139;;25593:419;;;:::o;26018:233::-;26057:3;26080:24;26098:5;26080:24;:::i;:::-;26071:33;;26126:66;26119:5;26116:77;26113:103;;;26196:18;;:::i;:::-;26113:103;26243:1;26236:5;26232:13;26225:20;;26018:233;;;:::o;26257:238::-;26397:34;26393:1;26385:6;26381:14;26374:58;26466:21;26461:2;26453:6;26449:15;26442:46;26257:238;:::o;26501:366::-;26643:3;26664:67;26728:2;26723:3;26664:67;:::i;:::-;26657:74;;26740:93;26829:3;26740:93;:::i;:::-;26858:2;26853:3;26849:12;26842:19;;26501:366;;;:::o;26873:419::-;27039:4;27077:2;27066:9;27062:18;27054:26;;27126:9;27120:4;27116:20;27112:1;27101:9;27097:17;27090:47;27154:131;27280:4;27154:131;:::i;:::-;27146:139;;26873:419;;;:::o;27298:168::-;27438:20;27434:1;27426:6;27422:14;27415:44;27298:168;:::o;27472:366::-;27614:3;27635:67;27699:2;27694:3;27635:67;:::i;:::-;27628:74;;27711:93;27800:3;27711:93;:::i;:::-;27829:2;27824:3;27820:12;27813:19;;27472:366;;;:::o;27844:419::-;28010:4;28048:2;28037:9;28033:18;28025:26;;28097:9;28091:4;28087:20;28083:1;28072:9;28068:17;28061:47;28125:131;28251:4;28125:131;:::i;:::-;28117:139;;27844:419;;;:::o;28269:174::-;28409:26;28405:1;28397:6;28393:14;28386:50;28269:174;:::o;28449:366::-;28591:3;28612:67;28676:2;28671:3;28612:67;:::i;:::-;28605:74;;28688:93;28777:3;28688:93;:::i;:::-;28806:2;28801:3;28797:12;28790:19;;28449:366;;;:::o;28821:419::-;28987:4;29025:2;29014:9;29010:18;29002:26;;29074:9;29068:4;29064:20;29060:1;29049:9;29045:17;29038:47;29102:131;29228:4;29102:131;:::i;:::-;29094:139;;28821:419;;;:::o;29246:181::-;29386:33;29382:1;29374:6;29370:14;29363:57;29246:181;:::o;29433:366::-;29575:3;29596:67;29660:2;29655:3;29596:67;:::i;:::-;29589:74;;29672:93;29761:3;29672:93;:::i;:::-;29790:2;29785:3;29781:12;29774:19;;29433:366;;;:::o;29805:419::-;29971:4;30009:2;29998:9;29994:18;29986:26;;30058:9;30052:4;30048:20;30044:1;30033:9;30029:17;30022:47;30086:131;30212:4;30086:131;:::i;:::-;30078:139;;29805:419;;;:::o;30230:178::-;30370:30;30366:1;30358:6;30354:14;30347:54;30230:178;:::o;30414:366::-;30556:3;30577:67;30641:2;30636:3;30577:67;:::i;:::-;30570:74;;30653:93;30742:3;30653:93;:::i;:::-;30771:2;30766:3;30762:12;30755:19;;30414:366;;;:::o;30786:419::-;30952:4;30990:2;30979:9;30975:18;30967:26;;31039:9;31033:4;31029:20;31025:1;31014:9;31010:17;31003:47;31067:131;31193:4;31067:131;:::i;:::-;31059:139;;30786:419;;;:::o;31211:820::-;31435:3;31450:75;31521:3;31512:6;31450:75;:::i;:::-;31550:2;31545:3;31541:12;31534:19;;31563:75;31634:3;31625:6;31563:75;:::i;:::-;31663:2;31658:3;31654:12;31647:19;;31676:75;31747:3;31738:6;31676:75;:::i;:::-;31776:2;31771:3;31767:12;31760:19;;31789:75;31860:3;31851:6;31789:75;:::i;:::-;31889:2;31884:3;31880:12;31873:19;;31902:75;31973:3;31964:6;31902:75;:::i;:::-;32002:2;31997:3;31993:12;31986:19;;32022:3;32015:10;;31211:820;;;;;;;;:::o;32037:227::-;32177:34;32173:1;32165:6;32161:14;32154:58;32246:10;32241:2;32233:6;32229:15;32222:35;32037:227;:::o;32270:366::-;32412:3;32433:67;32497:2;32492:3;32433:67;:::i;:::-;32426:74;;32509:93;32598:3;32509:93;:::i;:::-;32627:2;32622:3;32618:12;32611:19;;32270:366;;;:::o;32642:419::-;32808:4;32846:2;32835:9;32831:18;32823:26;;32895:9;32889:4;32885:20;32881:1;32870:9;32866:17;32859:47;32923:131;33049:4;32923:131;:::i;:::-;32915:139;;32642:419;;;:::o;33067:229::-;33207:34;33203:1;33195:6;33191:14;33184:58;33276:12;33271:2;33263:6;33259:15;33252:37;33067:229;:::o;33302:366::-;33444:3;33465:67;33529:2;33524:3;33465:67;:::i;:::-;33458:74;;33541:93;33630:3;33541:93;:::i;:::-;33659:2;33654:3;33650:12;33643:19;;33302:366;;;:::o;33674:419::-;33840:4;33878:2;33867:9;33863:18;33855:26;;33927:9;33921:4;33917:20;33913:1;33902:9;33898:17;33891:47;33955:131;34081:4;33955:131;:::i;:::-;33947:139;;33674:419;;;:::o;34099:148::-;34201:11;34238:3;34223:18;;34099:148;;;;:::o;34253:377::-;34359:3;34387:39;34420:5;34387:39;:::i;:::-;34442:89;34524:6;34519:3;34442:89;:::i;:::-;34435:96;;34540:52;34585:6;34580:3;34573:4;34566:5;34562:16;34540:52;:::i;:::-;34617:6;34612:3;34608:16;34601:23;;34363:267;34253:377;;;;:::o;34636:151::-;34776:3;34772:1;34764:6;34760:14;34753:27;34636:151;:::o;34793:400::-;34953:3;34974:84;35056:1;35051:3;34974:84;:::i;:::-;34967:91;;35067:93;35156:3;35067:93;:::i;:::-;35185:1;35180:3;35176:11;35169:18;;34793:400;;;:::o;35199:701::-;35480:3;35502:95;35593:3;35584:6;35502:95;:::i;:::-;35495:102;;35614:95;35705:3;35696:6;35614:95;:::i;:::-;35607:102;;35726:148;35870:3;35726:148;:::i;:::-;35719:155;;35891:3;35884:10;;35199:701;;;;;:::o;35906:435::-;36086:3;36108:95;36199:3;36190:6;36108:95;:::i;:::-;36101:102;;36220:95;36311:3;36302:6;36220:95;:::i;:::-;36213:102;;36332:3;36325:10;;35906:435;;;;;:::o;36347:151::-;36487:3;36483:1;36475:6;36471:14;36464:27;36347:151;:::o;36504:400::-;36664:3;36685:84;36767:1;36762:3;36685:84;:::i;:::-;36678:91;;36778:93;36867:3;36778:93;:::i;:::-;36896:1;36891:3;36887:11;36880:18;;36504:400;;;:::o;36910:541::-;37143:3;37165:95;37256:3;37247:6;37165:95;:::i;:::-;37158:102;;37277:148;37421:3;37277:148;:::i;:::-;37270:155;;37442:3;37435:10;;36910:541;;;;:::o;37457:152::-;37597:4;37593:1;37585:6;37581:14;37574:28;37457:152;:::o;37615:400::-;37775:3;37796:84;37878:1;37873:3;37796:84;:::i;:::-;37789:91;;37889:93;37978:3;37889:93;:::i;:::-;38007:1;38002:3;37998:11;37991:18;;37615:400;;;:::o;38021:541::-;38254:3;38276:95;38367:3;38358:6;38276:95;:::i;:::-;38269:102;;38388:148;38532:3;38388:148;:::i;:::-;38381:155;;38553:3;38546:10;;38021:541;;;;:::o;38568:225::-;38708:34;38704:1;38696:6;38692:14;38685:58;38777:8;38772:2;38764:6;38760:15;38753:33;38568:225;:::o;38799:366::-;38941:3;38962:67;39026:2;39021:3;38962:67;:::i;:::-;38955:74;;39038:93;39127:3;39038:93;:::i;:::-;39156:2;39151:3;39147:12;39140:19;;38799:366;;;:::o;39171:419::-;39337:4;39375:2;39364:9;39360:18;39352:26;;39424:9;39418:4;39414:20;39410:1;39399:9;39395:17;39388:47;39452:131;39578:4;39452:131;:::i;:::-;39444:139;;39171:419;;;:::o;39596:182::-;39736:34;39732:1;39724:6;39720:14;39713:58;39596:182;:::o;39784:366::-;39926:3;39947:67;40011:2;40006:3;39947:67;:::i;:::-;39940:74;;40023:93;40112:3;40023:93;:::i;:::-;40141:2;40136:3;40132:12;40125:19;;39784:366;;;:::o;40156:419::-;40322:4;40360:2;40349:9;40345:18;40337:26;;40409:9;40403:4;40399:20;40395:1;40384:9;40380:17;40373:47;40437:131;40563:4;40437:131;:::i;:::-;40429:139;;40156:419;;;:::o;40581:442::-;40730:4;40768:2;40757:9;40753:18;40745:26;;40781:71;40849:1;40838:9;40834:17;40825:6;40781:71;:::i;:::-;40862:72;40930:2;40919:9;40915:18;40906:6;40862:72;:::i;:::-;40944;41012:2;41001:9;40997:18;40988:6;40944:72;:::i;:::-;40581:442;;;;;;:::o;41029:180::-;41077:77;41074:1;41067:88;41174:4;41171:1;41164:15;41198:4;41195:1;41188:15;41215:185;41255:1;41272:20;41290:1;41272:20;:::i;:::-;41267:25;;41306:20;41324:1;41306:20;:::i;:::-;41301:25;;41345:1;41335:35;;41350:18;;:::i;:::-;41335:35;41392:1;41389;41385:9;41380:14;;41215:185;;;;:::o;41406:180::-;41454:77;41451:1;41444:88;41551:4;41548:1;41541:15;41575:4;41572:1;41565:15;41592:176;41624:1;41641:20;41659:1;41641:20;:::i;:::-;41636:25;;41675:20;41693:1;41675:20;:::i;:::-;41670:25;;41714:1;41704:35;;41719:18;;:::i;:::-;41704:35;41760:1;41757;41753:9;41748:14;;41592:176;;;;:::o;41774:332::-;41895:4;41933:2;41922:9;41918:18;41910:26;;41946:71;42014:1;42003:9;41999:17;41990:6;41946:71;:::i;:::-;42027:72;42095:2;42084:9;42080:18;42071:6;42027:72;:::i;:::-;41774:332;;;;;:::o;42112:180::-;42160:77;42157:1;42150:88;42257:4;42254:1;42247:15;42281:4;42278:1;42271:15;42298:151;42438:3;42434:1;42426:6;42422:14;42415:27;42298:151;:::o;42455:400::-;42615:3;42636:84;42718:1;42713:3;42636:84;:::i;:::-;42629:91;;42729:93;42818:3;42729:93;:::i;:::-;42847:1;42842:3;42838:11;42831:18;;42455:400;;;:::o;42861:1553::-;43440:3;43462:95;43553:3;43544:6;43462:95;:::i;:::-;43455:102;;43574:148;43718:3;43574:148;:::i;:::-;43567:155;;43739:95;43830:3;43821:6;43739:95;:::i;:::-;43732:102;;43851:148;43995:3;43851:148;:::i;:::-;43844:155;;44016:95;44107:3;44098:6;44016:95;:::i;:::-;44009:102;;44128:148;44272:3;44128:148;:::i;:::-;44121:155;;44293:95;44384:3;44375:6;44293:95;:::i;:::-;44286:102;;44405:3;44398:10;;42861:1553;;;;;;;:::o;44420:116::-;44490:21;44505:5;44490:21;:::i;:::-;44483:5;44480:32;44470:60;;44526:1;44523;44516:12;44470:60;44420:116;:::o;44542:137::-;44596:5;44627:6;44621:13;44612:22;;44643:30;44667:5;44643:30;:::i;:::-;44542:137;;;;:::o;44685:345::-;44752:6;44801:2;44789:9;44780:7;44776:23;44772:32;44769:119;;;44807:79;;:::i;:::-;44769:119;44927:1;44952:61;45005:7;44996:6;44985:9;44981:22;44952:61;:::i;:::-;44942:71;;44898:125;44685:345;;;;:::o;45036:229::-;45176:34;45172:1;45164:6;45160:14;45153:58;45245:12;45240:2;45232:6;45228:15;45221:37;45036:229;:::o;45271:366::-;45413:3;45434:67;45498:2;45493:3;45434:67;:::i;:::-;45427:74;;45510:93;45599:3;45510:93;:::i;:::-;45628:2;45623:3;45619:12;45612:19;;45271:366;;;:::o;45643:419::-;45809:4;45847:2;45836:9;45832:18;45824:26;;45896:9;45890:4;45886:20;45882:1;45871:9;45867:17;45860:47;45924:131;46050:4;45924:131;:::i;:::-;45916:139;;45643:419;;;:::o;46068:225::-;46208:34;46204:1;46196:6;46192:14;46185:58;46277:8;46272:2;46264:6;46260:15;46253:33;46068:225;:::o;46299:366::-;46441:3;46462:67;46526:2;46521:3;46462:67;:::i;:::-;46455:74;;46538:93;46627:3;46538:93;:::i;:::-;46656:2;46651:3;46647:12;46640:19;;46299:366;;;:::o;46671:419::-;46837:4;46875:2;46864:9;46860:18;46852:26;;46924:9;46918:4;46914:20;46910:1;46899:9;46895:17;46888:47;46952:131;47078:4;46952:131;:::i;:::-;46944:139;;46671:419;;;:::o;47096:179::-;47236:31;47232:1;47224:6;47220:14;47213:55;47096:179;:::o;47281:366::-;47423:3;47444:67;47508:2;47503:3;47444:67;:::i;:::-;47437:74;;47520:93;47609:3;47520:93;:::i;:::-;47638:2;47633:3;47629:12;47622:19;;47281:366;;;:::o;47653:419::-;47819:4;47857:2;47846:9;47842:18;47834:26;;47906:9;47900:4;47896:20;47892:1;47881:9;47877:17;47870:47;47934:131;48060:4;47934:131;:::i;:::-;47926:139;;47653:419;;;:::o;48078:271::-;48208:3;48230:93;48319:3;48310:6;48230:93;:::i;:::-;48223:100;;48340:3;48333:10;;48078:271;;;;:::o
Swarm Source
ipfs://aa489dc2b1cb2bf1e94ddd95bf5699f431c5edf28ac494fb08ca43fa04099114
Loading...
Loading
Loading...
Loading
Net Worth in USD
$3,126.54
Net Worth in ETH
1.384791
Token Allocations
LRDS
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.024026 | 130,131.38 | $3,126.54 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.