Source Code
Latest 25 from a total of 1,067 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unstake By Ids | 18947741 | 717 days ago | IN | 0 ETH | 0.00154977 | ||||
| Unstake By Ids | 18487206 | 781 days ago | IN | 0 ETH | 0.0005504 | ||||
| Stake By Ids | 18117039 | 833 days ago | IN | 0 ETH | 0.00254311 | ||||
| Unstake By Ids | 18092321 | 836 days ago | IN | 0 ETH | 0.00150324 | ||||
| Stake By Ids | 17876947 | 867 days ago | IN | 0 ETH | 0.0027479 | ||||
| Stake By Ids | 17669491 | 896 days ago | IN | 0 ETH | 0.01111858 | ||||
| Unstake By Ids | 17566577 | 910 days ago | IN | 0 ETH | 0.00163311 | ||||
| Unstake By Ids | 17518505 | 917 days ago | IN | 0 ETH | 0.00169559 | ||||
| Unstake By Ids | 17515995 | 917 days ago | IN | 0 ETH | 0.0033692 | ||||
| Unstake By Ids | 17515961 | 917 days ago | IN | 0 ETH | 0.00508099 | ||||
| Unstake By Ids | 17510860 | 918 days ago | IN | 0 ETH | 0.00285039 | ||||
| Unstake By Ids | 17497417 | 920 days ago | IN | 0 ETH | 0.00618184 | ||||
| Unstake By Ids | 17495105 | 920 days ago | IN | 0 ETH | 0.0066157 | ||||
| Unstake By Ids | 17485798 | 921 days ago | IN | 0 ETH | 0.00351565 | ||||
| Unstake By Ids | 17464032 | 925 days ago | IN | 0 ETH | 0.0021338 | ||||
| Unstake By Ids | 17451577 | 926 days ago | IN | 0 ETH | 0.00785079 | ||||
| Stake By Ids | 17449248 | 927 days ago | IN | 0 ETH | 0.00350178 | ||||
| Unstake By Ids | 17429016 | 929 days ago | IN | 0 ETH | 0.00426131 | ||||
| Unstake By Ids | 17416484 | 931 days ago | IN | 0 ETH | 0.01502111 | ||||
| Unstake By Ids | 17410526 | 932 days ago | IN | 0 ETH | 0.00645956 | ||||
| Unstake By Ids | 17410521 | 932 days ago | IN | 0 ETH | 0.00728723 | ||||
| Unstake By Ids | 17403317 | 933 days ago | IN | 0 ETH | 0.15161497 | ||||
| Bonus | 17386266 | 936 days ago | IN | 0 ETH | 0.00095176 | ||||
| Reduce | 17386262 | 936 days ago | IN | 0 ETH | 0.00078088 | ||||
| Bonus | 17386257 | 936 days ago | IN | 0 ETH | 0.00140661 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WCAMundialStaking
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-12-22
*/
// 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/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.8.0) (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() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// 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/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// 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.8.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: @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: contracts/WCAMundialStaking.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract WCAMundialStaking is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
// Interfaces for ERC721 and ERC20
IERC721 public immutable nftCollection;
IERC20 public immutable rewardsToken;
// Constructor function to set the rewards token and the NFT collection addresses
constructor(IERC721 _nftCollection, IERC20 _rewardsToken) {
nftCollection = _nftCollection;
rewardsToken = _rewardsToken;
}
address public manager;
uint256 public startClaimTimestamp = 1685570400; // Jun 01 2023
uint256 public startUnstakeTimestamp = 1671577200; // Dec 21 2022
uint256 public endRewardsTimestamp = 1676761200; // Feb 19 2023
// Almost 20 Token rewards per day => 0.00023149 * 10**18
uint256 public rewardsPerSeconds = 231490000000000;
uint256 public rewardExponent = 10**10;
// Rewards have vesting of 0.13% per day => 0.00000154% per second => 1.54 * 10^-8 => 154 * 10^-10
uint256 public rewardsLockSeconds = 154;
bool public _stakingLive = false;
mapping(uint256 => uint256) public tokenIdTimeStaked;
mapping(uint256 => address) public tokenIdToStaker;
mapping(address => uint256[]) public stakerToTokenIds;
mapping(address => uint256) public stakerRewards;
mapping(address => uint256) public stakerRewardsClaimed;
// Modifiers
modifier onlyOwnerOrManager() {
require(owner() == msg.sender || manager == msg.sender, "Unauthorized");
_;
}
modifier canClaim() {
require(block.timestamp >= startClaimTimestamp, "You can't already claim your rewards");
_;
}
modifier canUnstake() {
require(block.timestamp >= startUnstakeTimestamp, "You can't already unstake your NFTs");
_;
}
modifier stakingIsLive() {
require(_stakingLive, "Staking isn't live");
_;
}
function setManager(address _manager) external onlyOwner {
manager = _manager;
}
function setRewardsPerSecond(uint256 _rewardsPerSeconds) external onlyOwnerOrManager {
rewardsPerSeconds = _rewardsPerSeconds;
}
function setRewardExponent(uint256 _rewardExponent) external onlyOwnerOrManager {
rewardExponent = _rewardExponent;
}
function setStartClaimTimestamp(uint256 _timestamp) external onlyOwnerOrManager {
require(_timestamp >= endRewardsTimestamp, "Start claim timestamp must be after end rewards timestamp");
startClaimTimestamp = _timestamp;
}
function setEndRewardsTimestamp(uint256 _timestamp) external onlyOwnerOrManager {
endRewardsTimestamp = _timestamp;
}
function setStartUnstakeTimestamp(uint256 _timestamp) external onlyOwnerOrManager {
startUnstakeTimestamp = _timestamp;
}
function toggleStakingLive() external onlyOwnerOrManager {
_stakingLive = !_stakingLive;
}
function bonus(address _address, uint256 _bonus) external onlyOwnerOrManager {
stakerRewards[_address] += _bonus;
}
function reduce(address _address, uint256 _reduce) external onlyOwnerOrManager {
stakerRewards[_address] -= _reduce;
}
function getTotalRewards(address staker) public view returns (uint256) {
return getAvailableRewards(staker) + stakerRewardsClaimed[staker];
}
function getStakedCount(address staker) external view returns (uint256) {
return stakerToTokenIds[staker].length;
}
function getStakedTokens(address staker) external view returns (uint256[] memory) {
return stakerToTokenIds[staker];
}
function stakeByIds(uint256[] calldata tokenIds) external stakingIsLive {
for (uint256 i = 0; i < tokenIds.length; i++) {
uint256 tokenId = tokenIds[i];
require(nftCollection.ownerOf(tokenId) == msg.sender && tokenIdToStaker[tokenId] == address(0), "You don't own this token!");
nftCollection.transferFrom(msg.sender, address(this), tokenId);
stakerToTokenIds[msg.sender].push(tokenId);
tokenIdTimeStaked[tokenId] = block.timestamp;
tokenIdToStaker[tokenId] = msg.sender;
}
}
function removeTokenIdFromArray(uint256[] storage array, uint256 tokenId) internal {
uint256 length = array.length;
for (uint256 i = 0; i < length; i++) {
if (array[i] == tokenId) {
length--;
if (i < length) {
array[i] = array[length];
}
array.pop();
break;
}
}
}
function unstakeByIds(uint256[] calldata tokenIds) public canUnstake nonReentrant {
for (uint256 i = 0; i < tokenIds.length; i++) {
uint256 tokenId = tokenIds[i];
require(tokenIdToStaker[tokenId] == msg.sender, "You don't own this token!");
stakerRewards[msg.sender] += getRewardsByTokenId(tokenId);
removeTokenIdFromArray(stakerToTokenIds[msg.sender], tokenId);
tokenIdToStaker[tokenId] = address(0);
nftCollection.transferFrom(address(this), msg.sender, tokenId);
}
}
function getRewardsByTokenId(uint256 _tokenId) public view returns (uint256) {
uint256 timestamp = block.timestamp;
if (tokenIdToStaker[_tokenId] == address(0) || tokenIdTimeStaked[_tokenId] > endRewardsTimestamp) {
return 0;
}
if (timestamp > endRewardsTimestamp) {
timestamp = endRewardsTimestamp;
}
return ((timestamp - tokenIdTimeStaked[_tokenId]) * rewardsPerSeconds);
}
function getAvailableRewards(address _staker) public view returns (uint256) {
uint256 tokenRewards = 0;
for (uint256 i = stakerToTokenIds[_staker].length; i > 0; i--) {
uint256 tokenId = stakerToTokenIds[msg.sender][i - 1];
tokenRewards += getRewardsByTokenId(tokenId);
}
if (tokenRewards == 0 && stakerRewards[_staker] == 0) {
return 0;
}
uint256 availableRewards = stakerRewards[_staker] + tokenRewards - stakerRewardsClaimed[_staker];
return availableRewards;
}
function getClaimableRewards(address _staker) public view returns (uint256) {
// Calculate the percentage of rewards to unlock based on the time passed since the start of the claim
if (block.timestamp < startClaimTimestamp) {
return 0;
}
uint256 totalRewards = getTotalRewards(_staker);
uint256 secondsFromClaimStart = block.timestamp - startClaimTimestamp;
uint256 rewardsToUnlock = ((totalRewards / rewardExponent) * secondsFromClaimStart * rewardsLockSeconds) - stakerRewardsClaimed[_staker];
// If the rewards to unlock are more than the total rewards, return the total rewards
if (rewardsToUnlock > totalRewards) {
return totalRewards;
}
require(rewardsToUnlock <= totalRewards, "You can't claim more than you have");
// Else return the rewards to unlock
return rewardsToUnlock;
}
function claimRewards() external canClaim nonReentrant {
uint256 rewardsToUnlock = getClaimableRewards(msg.sender);
// Require that the sender has claimed in the past
require(rewardsToUnlock > 0, "You have no rewards to claim");
stakerRewardsClaimed[msg.sender] += rewardsToUnlock;
// Send token from owner to staker
rewardsToken.transferFrom(owner(), msg.sender, rewardsToUnlock);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC721","name":"_nftCollection","type":"address"},{"internalType":"contract IERC20","name":"_rewardsToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_stakingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"bonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endRewardsTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getAvailableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getClaimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getRewardsByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftCollection","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_reduce","type":"uint256"}],"name":"reduce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardExponent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsLockSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setEndRewardsTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardExponent","type":"uint256"}],"name":"setRewardExponent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsPerSeconds","type":"uint256"}],"name":"setRewardsPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setStartClaimTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setStartUnstakeTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerToTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startUnstakeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStakingLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdTimeStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c0604052636477c3606003556363a23e706004556363f1587060055565d289f73814006006556402540be400600755609a6008556000600960006101000a81548160ff0219169083151502179055503480156200005c57600080fd5b5060405162003007380380620030078339818101604052810190620000829190620002ab565b6001600081905550620000aa6200009e6200011a60201b60201c565b6200012260201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050620002f2565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021a82620001ed565b9050919050565b60006200022e826200020d565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b600062000273826200020d565b9050919050565b620002858162000266565b81146200029157600080fd5b50565b600081519050620002a5816200027a565b92915050565b60008060408385031215620002c557620002c4620001e8565b5b6000620002d5858286016200024f565b9250506020620002e88582860162000294565b9150509250929050565b60805160a051612cd36200033460003960008181610c6b01526118c30152600081816110730152818161129c015281816119850152611ae00152612cd36000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063873e31fa11610125578063d0ebdbe7116100ad578063d9ffad471161007c578063d9ffad471461062b578063f0f0b22814610647578063f1c9939014610677578063f2fde38b14610695578063fb5d82d0146106b15761021c565b8063d0ebdbe7146105b5578063d1af0c7d146105d1578063d1e5587e146105ef578063d780cbb21461060d5761021c565b8063a1993211116100f4578063a1993211146104fd578063b4b4ca771461051b578063bd87f57714610539578063c4c0e04c14610569578063cbeb09aa146105995761021c565b8063873e31fa146104895780638da5cb5b146104b9578063966d7e47146104d75780639903303f146104f35761021c565b8063481c6a75116101a857806363c28db11161017757806363c28db1146103d15780636588103b1461040157806370f8f9d91461041f578063715018a61461044f57806383c13db2146104595761021c565b8063481c6a751461034957806348aa193614610367578063515ec105146103835780635c1e645a146103b35761021c565b80632bcf161c116101ef5780632bcf161c146102a7578063308e401e146102d757806336ed62eb14610307578063372500ab146103235780634661c4041461032d5761021c565b806305880316146102215780630f4ae692146102515780631395e6401461026d57806326a73fc714610289575b600080fd5b61023b60048036038101906102369190612086565b6106cd565b60405161024891906120c2565b60405180910390f35b61026b6004803603810190610266919061213b565b6106e5565b005b6102876004803603810190610282919061213b565b61080c565b005b610291610933565b60405161029e91906120c2565b60405180910390f35b6102c160048036038101906102bc919061217b565b610939565b6040516102ce91906120c2565b60405180910390f35b6102f160048036038101906102ec919061217b565b610995565b6040516102fe91906120c2565b60405180910390f35b610321600480360381019061031c9190612086565b610a9f565b005b61032b610b76565b005b61034760048036038101906103429190612086565b610d1c565b005b610351610e38565b60405161035e91906121b7565b60405180910390f35b610381600480360381019061037c9190612237565b610e5e565b005b61039d60048036038101906103989190612086565b611121565b6040516103aa91906120c2565b60405180910390f35b6103bb6111fd565b6040516103c891906120c2565b60405180910390f35b6103eb60048036038101906103e6919061217b565b611203565b6040516103f89190612342565b60405180910390f35b61040961129a565b60405161041691906123c3565b60405180910390f35b61043960048036038101906104349190612086565b6112be565b60405161044691906121b7565b60405180910390f35b6104576112f1565b005b610473600480360381019061046e919061217b565b611305565b60405161048091906120c2565b60405180910390f35b6104a3600480360381019061049e919061217b565b611351565b6040516104b091906120c2565b60405180910390f35b6104c1611542565b6040516104ce91906121b7565b60405180910390f35b6104f160048036038101906104ec9190612086565b61156c565b005b6104fb611643565b005b61050561173c565b60405161051291906120c2565b60405180910390f35b610523611742565b60405161053091906123f9565b60405180910390f35b610553600480360381019061054e919061213b565b611755565b60405161056091906120c2565b60405180910390f35b610583600480360381019061057e919061217b565b611786565b60405161059091906120c2565b60405180910390f35b6105b360048036038101906105ae9190612086565b61179e565b005b6105cf60048036038101906105ca919061217b565b611875565b005b6105d96118c1565b6040516105e69190612435565b60405180910390f35b6105f76118e5565b60405161060491906120c2565b60405180910390f35b6106156118eb565b60405161062291906120c2565b60405180910390f35b61064560048036038101906106409190612237565b6118f1565b005b610661600480360381019061065c919061217b565b611c56565b60405161066e91906120c2565b60405180910390f35b61067f611c6e565b60405161068c91906120c2565b60405180910390f35b6106af60048036038101906106aa919061217b565b611c74565b005b6106cb60048036038101906106c69190612086565b611cf7565b005b600a6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16610704611542565b73ffffffffffffffffffffffffffffffffffffffff16148061077357503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6107b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a9906124ad565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461080191906124fc565b925050819055505050565b3373ffffffffffffffffffffffffffffffffffffffff1661082b611542565b73ffffffffffffffffffffffffffffffffffffffff16148061089a57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d0906124ad565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109289190612530565b925050819055505050565b60085481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461098483611351565b61098e91906124fc565b9050919050565b60006003544210156109aa5760009050610a9a565b60006109b583610939565b90506000600354426109c79190612530565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546008548360075486610a1d9190612593565b610a2791906125c4565b610a3191906125c4565b610a3b9190612530565b905082811115610a5057829350505050610a9a565b82811115610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612678565b60405180910390fd5b8093505050505b919050565b3373ffffffffffffffffffffffffffffffffffffffff16610abe611542565b73ffffffffffffffffffffffffffffffffffffffff161480610b2d57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b63906124ad565b60405180910390fd5b8060048190555050565b600354421015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb29061270a565b60405180910390fd5b610bc3611dce565b6000610bce33610995565b905060008111610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a90612776565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c6291906124fc565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd610cad611542565b33846040518463ffffffff1660e01b8152600401610ccd93929190612796565b6020604051808303816000875af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1091906127f9565b5050610d1a611e1d565b565b3373ffffffffffffffffffffffffffffffffffffffff16610d3b611542565b73ffffffffffffffffffffffffffffffffffffffff161480610daa57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906124ad565b60405180910390fd5b600554811015610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590612898565b60405180910390fd5b8060038190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600454421015610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a9061292a565b60405180910390fd5b610eab611dce565b60005b82829050811015611114576000838383818110610ece57610ecd61294a565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906129c5565b60405180910390fd5b610f8181611121565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fcf91906124fc565b9250508190555061101e600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082611e27565b6000600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016110ce93929190612796565b600060405180830381600087803b1580156110e857600080fd5b505af11580156110fc573d6000803e3d6000fd5b5050505050808061110c906129e5565b915050610eae565b5061111d611e1d565b5050565b600080429050600073ffffffffffffffffffffffffffffffffffffffff16600b600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111a95750600554600a600085815260200190815260200160002054115b156111b85760009150506111f8565b6005548111156111c85760055490505b600654600a600085815260200190815260200160002054826111ea9190612530565b6111f491906125c4565b9150505b919050565b60045481565b6060600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561128e57602002820191906000526020600020905b81548152602001906001019080831161127a575b50505050509050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f9611efa565b6113036000611f78565b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080600090506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b600081111561143f576000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836113f79190612530565b815481106114085761140761294a565b5b9060005260206000200154905061141e81611121565b8361142991906124fc565b925050808061143790612a2d565b9150506113a0565b5060008114801561148f57506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1561149e57600091505061153d565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461152b91906124fc565b6115359190612530565b905080925050505b919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1661158b611542565b73ffffffffffffffffffffffffffffffffffffffff1614806115fa57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906124ad565b60405180910390fd5b8060058190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611662611542565b73ffffffffffffffffffffffffffffffffffffffff1614806116d157503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611707906124ad565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b60055481565b600960009054906101000a900460ff1681565b600c602052816000526040600020818154811061177157600080fd5b90600052602060002001600091509150505481565b600e6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff166117bd611542565b73ffffffffffffffffffffffffffffffffffffffff16148061182c57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61186b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611862906124ad565b60405180910390fd5b8060068190555050565b61187d611efa565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b60065481565b600960009054906101000a900460ff16611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790612aa2565b60405180910390fd5b60005b82829050811015611c515760008383838181106119635761196261294a565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016119dc91906120c2565b602060405180830381865afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190612ad7565b73ffffffffffffffffffffffffffffffffffffffff16148015611a9f5750600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad5906129c5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611b3b93929190612796565b600060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600a60008381526020019081526020016000208190555033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611c49906129e5565b915050611943565b505050565b600d6020528060005260406000206000915090505481565b60075481565b611c7c611efa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290612b76565b60405180910390fd5b611cf481611f78565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611d16611542565b73ffffffffffffffffffffffffffffffffffffffff161480611d8557503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906124ad565b60405180910390fd5b8060078190555050565b600260005403611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90612be2565b60405180910390fd5b6002600081905550565b6001600081905550565b60008280549050905060005b81811015611ef45782848281548110611e4f57611e4e61294a565b5b906000526020600020015403611ee1578180611e6a90612a2d565b92505081811015611eb557838281548110611e8857611e8761294a565b5b9060005260206000200154848281548110611ea657611ea561294a565b5b90600052602060002001819055505b83805480611ec657611ec5612c02565b5b60019003818190600052602060002001600090559055611ef4565b8080611eec906129e5565b915050611e33565b50505050565b611f0261203e565b73ffffffffffffffffffffffffffffffffffffffff16611f20611542565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90612c7d565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b6000819050919050565b61206381612050565b811461206e57600080fd5b50565b6000813590506120808161205a565b92915050565b60006020828403121561209c5761209b612046565b5b60006120aa84828501612071565b91505092915050565b6120bc81612050565b82525050565b60006020820190506120d760008301846120b3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612108826120dd565b9050919050565b612118816120fd565b811461212357600080fd5b50565b6000813590506121358161210f565b92915050565b6000806040838503121561215257612151612046565b5b600061216085828601612126565b925050602061217185828601612071565b9150509250929050565b60006020828403121561219157612190612046565b5b600061219f84828501612126565b91505092915050565b6121b1816120fd565b82525050565b60006020820190506121cc60008301846121a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121f7576121f66121d2565b5b8235905067ffffffffffffffff811115612214576122136121d7565b5b6020830191508360208202830111156122305761222f6121dc565b5b9250929050565b6000806020838503121561224e5761224d612046565b5b600083013567ffffffffffffffff81111561226c5761226b61204b565b5b612278858286016121e1565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6122b981612050565b82525050565b60006122cb83836122b0565b60208301905092915050565b6000602082019050919050565b60006122ef82612284565b6122f9818561228f565b9350612304836122a0565b8060005b8381101561233557815161231c88826122bf565b9750612327836122d7565b925050600181019050612308565b5085935050505092915050565b6000602082019050818103600083015261235c81846122e4565b905092915050565b6000819050919050565b600061238961238461237f846120dd565b612364565b6120dd565b9050919050565b600061239b8261236e565b9050919050565b60006123ad82612390565b9050919050565b6123bd816123a2565b82525050565b60006020820190506123d860008301846123b4565b92915050565b60008115159050919050565b6123f3816123de565b82525050565b600060208201905061240e60008301846123ea565b92915050565b600061241f82612390565b9050919050565b61242f81612414565b82525050565b600060208201905061244a6000830184612426565b92915050565b600082825260208201905092915050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000612497600c83612450565b91506124a282612461565b602082019050919050565b600060208201905081810360008301526124c68161248a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061250782612050565b915061251283612050565b925082820190508082111561252a576125296124cd565b5b92915050565b600061253b82612050565b915061254683612050565b925082820390508181111561255e5761255d6124cd565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061259e82612050565b91506125a983612050565b9250826125b9576125b8612564565b5b828204905092915050565b60006125cf82612050565b91506125da83612050565b92508282026125e881612050565b915082820484148315176125ff576125fe6124cd565b5b5092915050565b7f596f752063616e277420636c61696d206d6f7265207468616e20796f7520686160008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b6000612662602283612450565b915061266d82612606565b604082019050919050565b6000602082019050818103600083015261269181612655565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006126f4602483612450565b91506126ff82612698565b604082019050919050565b60006020820190508181036000830152612723816126e7565b9050919050565b7f596f752068617665206e6f207265776172647320746f20636c61696d00000000600082015250565b6000612760601c83612450565b915061276b8261272a565b602082019050919050565b6000602082019050818103600083015261278f81612753565b9050919050565b60006060820190506127ab60008301866121a8565b6127b860208301856121a8565b6127c560408301846120b3565b949350505050565b6127d6816123de565b81146127e157600080fd5b50565b6000815190506127f3816127cd565b92915050565b60006020828403121561280f5761280e612046565b5b600061281d848285016127e4565b91505092915050565b7f537461727420636c61696d2074696d657374616d70206d75737420626520616660008201527f74657220656e6420726577617264732074696d657374616d7000000000000000602082015250565b6000612882603983612450565b915061288d82612826565b604082019050919050565b600060208201905081810360008301526128b181612875565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b6520796f7572204e60008201527f4654730000000000000000000000000000000000000000000000000000000000602082015250565b6000612914602383612450565b915061291f826128b8565b604082019050919050565b6000602082019050818103600083015261294381612907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520646f6e2774206f776e207468697320746f6b656e2100000000000000600082015250565b60006129af601983612450565b91506129ba82612979565b602082019050919050565b600060208201905081810360008301526129de816129a2565b9050919050565b60006129f082612050565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a2257612a216124cd565b5b600182019050919050565b6000612a3882612050565b915060008203612a4b57612a4a6124cd565b5b600182039050919050565b7f5374616b696e672069736e2774206c6976650000000000000000000000000000600082015250565b6000612a8c601283612450565b9150612a9782612a56565b602082019050919050565b60006020820190508181036000830152612abb81612a7f565b9050919050565b600081519050612ad18161210f565b92915050565b600060208284031215612aed57612aec612046565b5b6000612afb84828501612ac2565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b60602683612450565b9150612b6b82612b04565b604082019050919050565b60006020820190508181036000830152612b8f81612b53565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612bcc601f83612450565b9150612bd782612b96565b602082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c67602083612450565b9150612c7282612c31565b602082019050919050565b60006020820190508181036000830152612c9681612c5a565b905091905056fea2646970667358221220250fb5ab076efc0ff32a00608d516893776036bd76e6908607fa46f0934736be64736f6c6343000811003300000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b0
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061021c5760003560e01c8063873e31fa11610125578063d0ebdbe7116100ad578063d9ffad471161007c578063d9ffad471461062b578063f0f0b22814610647578063f1c9939014610677578063f2fde38b14610695578063fb5d82d0146106b15761021c565b8063d0ebdbe7146105b5578063d1af0c7d146105d1578063d1e5587e146105ef578063d780cbb21461060d5761021c565b8063a1993211116100f4578063a1993211146104fd578063b4b4ca771461051b578063bd87f57714610539578063c4c0e04c14610569578063cbeb09aa146105995761021c565b8063873e31fa146104895780638da5cb5b146104b9578063966d7e47146104d75780639903303f146104f35761021c565b8063481c6a75116101a857806363c28db11161017757806363c28db1146103d15780636588103b1461040157806370f8f9d91461041f578063715018a61461044f57806383c13db2146104595761021c565b8063481c6a751461034957806348aa193614610367578063515ec105146103835780635c1e645a146103b35761021c565b80632bcf161c116101ef5780632bcf161c146102a7578063308e401e146102d757806336ed62eb14610307578063372500ab146103235780634661c4041461032d5761021c565b806305880316146102215780630f4ae692146102515780631395e6401461026d57806326a73fc714610289575b600080fd5b61023b60048036038101906102369190612086565b6106cd565b60405161024891906120c2565b60405180910390f35b61026b6004803603810190610266919061213b565b6106e5565b005b6102876004803603810190610282919061213b565b61080c565b005b610291610933565b60405161029e91906120c2565b60405180910390f35b6102c160048036038101906102bc919061217b565b610939565b6040516102ce91906120c2565b60405180910390f35b6102f160048036038101906102ec919061217b565b610995565b6040516102fe91906120c2565b60405180910390f35b610321600480360381019061031c9190612086565b610a9f565b005b61032b610b76565b005b61034760048036038101906103429190612086565b610d1c565b005b610351610e38565b60405161035e91906121b7565b60405180910390f35b610381600480360381019061037c9190612237565b610e5e565b005b61039d60048036038101906103989190612086565b611121565b6040516103aa91906120c2565b60405180910390f35b6103bb6111fd565b6040516103c891906120c2565b60405180910390f35b6103eb60048036038101906103e6919061217b565b611203565b6040516103f89190612342565b60405180910390f35b61040961129a565b60405161041691906123c3565b60405180910390f35b61043960048036038101906104349190612086565b6112be565b60405161044691906121b7565b60405180910390f35b6104576112f1565b005b610473600480360381019061046e919061217b565b611305565b60405161048091906120c2565b60405180910390f35b6104a3600480360381019061049e919061217b565b611351565b6040516104b091906120c2565b60405180910390f35b6104c1611542565b6040516104ce91906121b7565b60405180910390f35b6104f160048036038101906104ec9190612086565b61156c565b005b6104fb611643565b005b61050561173c565b60405161051291906120c2565b60405180910390f35b610523611742565b60405161053091906123f9565b60405180910390f35b610553600480360381019061054e919061213b565b611755565b60405161056091906120c2565b60405180910390f35b610583600480360381019061057e919061217b565b611786565b60405161059091906120c2565b60405180910390f35b6105b360048036038101906105ae9190612086565b61179e565b005b6105cf60048036038101906105ca919061217b565b611875565b005b6105d96118c1565b6040516105e69190612435565b60405180910390f35b6105f76118e5565b60405161060491906120c2565b60405180910390f35b6106156118eb565b60405161062291906120c2565b60405180910390f35b61064560048036038101906106409190612237565b6118f1565b005b610661600480360381019061065c919061217b565b611c56565b60405161066e91906120c2565b60405180910390f35b61067f611c6e565b60405161068c91906120c2565b60405180910390f35b6106af60048036038101906106aa919061217b565b611c74565b005b6106cb60048036038101906106c69190612086565b611cf7565b005b600a6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff16610704611542565b73ffffffffffffffffffffffffffffffffffffffff16148061077357503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6107b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a9906124ad565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461080191906124fc565b925050819055505050565b3373ffffffffffffffffffffffffffffffffffffffff1661082b611542565b73ffffffffffffffffffffffffffffffffffffffff16148061089a57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6108d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d0906124ad565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109289190612530565b925050819055505050565b60085481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461098483611351565b61098e91906124fc565b9050919050565b60006003544210156109aa5760009050610a9a565b60006109b583610939565b90506000600354426109c79190612530565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546008548360075486610a1d9190612593565b610a2791906125c4565b610a3191906125c4565b610a3b9190612530565b905082811115610a5057829350505050610a9a565b82811115610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612678565b60405180910390fd5b8093505050505b919050565b3373ffffffffffffffffffffffffffffffffffffffff16610abe611542565b73ffffffffffffffffffffffffffffffffffffffff161480610b2d57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b63906124ad565b60405180910390fd5b8060048190555050565b600354421015610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb29061270a565b60405180910390fd5b610bc3611dce565b6000610bce33610995565b905060008111610c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a90612776565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c6291906124fc565b925050819055507f000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b073ffffffffffffffffffffffffffffffffffffffff166323b872dd610cad611542565b33846040518463ffffffff1660e01b8152600401610ccd93929190612796565b6020604051808303816000875af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1091906127f9565b5050610d1a611e1d565b565b3373ffffffffffffffffffffffffffffffffffffffff16610d3b611542565b73ffffffffffffffffffffffffffffffffffffffff161480610daa57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de0906124ad565b60405180910390fd5b600554811015610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590612898565b60405180910390fd5b8060038190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600454421015610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a9061292a565b60405180910390fd5b610eab611dce565b60005b82829050811015611114576000838383818110610ece57610ecd61294a565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6f906129c5565b60405180910390fd5b610f8181611121565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fcf91906124fc565b9250508190555061101e600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082611e27565b6000600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b81526004016110ce93929190612796565b600060405180830381600087803b1580156110e857600080fd5b505af11580156110fc573d6000803e3d6000fd5b5050505050808061110c906129e5565b915050610eae565b5061111d611e1d565b5050565b600080429050600073ffffffffffffffffffffffffffffffffffffffff16600b600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806111a95750600554600a600085815260200190815260200160002054115b156111b85760009150506111f8565b6005548111156111c85760055490505b600654600a600085815260200190815260200160002054826111ea9190612530565b6111f491906125c4565b9150505b919050565b60045481565b6060600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561128e57602002820191906000526020600020905b81548152602001906001019080831161127a575b50505050509050919050565b7f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a81565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112f9611efa565b6113036000611f78565b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080600090506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b600081111561143f576000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836113f79190612530565b815481106114085761140761294a565b5b9060005260206000200154905061141e81611121565b8361142991906124fc565b925050808061143790612a2d565b9150506113a0565b5060008114801561148f57506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1561149e57600091505061153d565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461152b91906124fc565b6115359190612530565b905080925050505b919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff1661158b611542565b73ffffffffffffffffffffffffffffffffffffffff1614806115fa57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611639576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611630906124ad565b60405180910390fd5b8060058190555050565b3373ffffffffffffffffffffffffffffffffffffffff16611662611542565b73ffffffffffffffffffffffffffffffffffffffff1614806116d157503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611707906124ad565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b60055481565b600960009054906101000a900460ff1681565b600c602052816000526040600020818154811061177157600080fd5b90600052602060002001600091509150505481565b600e6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff166117bd611542565b73ffffffffffffffffffffffffffffffffffffffff16148061182c57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61186b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611862906124ad565b60405180910390fd5b8060068190555050565b61187d611efa565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b081565b60035481565b60065481565b600960009054906101000a900460ff16611940576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193790612aa2565b60405180910390fd5b60005b82829050811015611c515760008383838181106119635761196261294a565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016119dc91906120c2565b602060405180830381865afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d9190612ad7565b73ffffffffffffffffffffffffffffffffffffffff16148015611a9f5750600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad5906129c5565b60405180910390fd5b7f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611b3b93929190612796565b600060405180830381600087803b158015611b5557600080fd5b505af1158015611b69573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600a60008381526020019081526020016000208190555033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611c49906129e5565b915050611943565b505050565b600d6020528060005260406000206000915090505481565b60075481565b611c7c611efa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce290612b76565b60405180910390fd5b611cf481611f78565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611d16611542565b73ffffffffffffffffffffffffffffffffffffffff161480611d8557503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbb906124ad565b60405180910390fd5b8060078190555050565b600260005403611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90612be2565b60405180910390fd5b6002600081905550565b6001600081905550565b60008280549050905060005b81811015611ef45782848281548110611e4f57611e4e61294a565b5b906000526020600020015403611ee1578180611e6a90612a2d565b92505081811015611eb557838281548110611e8857611e8761294a565b5b9060005260206000200154848281548110611ea657611ea561294a565b5b90600052602060002001819055505b83805480611ec657611ec5612c02565b5b60019003818190600052602060002001600090559055611ef4565b8080611eec906129e5565b915050611e33565b50505050565b611f0261203e565b73ffffffffffffffffffffffffffffffffffffffff16611f20611542565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90612c7d565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b6000819050919050565b61206381612050565b811461206e57600080fd5b50565b6000813590506120808161205a565b92915050565b60006020828403121561209c5761209b612046565b5b60006120aa84828501612071565b91505092915050565b6120bc81612050565b82525050565b60006020820190506120d760008301846120b3565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612108826120dd565b9050919050565b612118816120fd565b811461212357600080fd5b50565b6000813590506121358161210f565b92915050565b6000806040838503121561215257612151612046565b5b600061216085828601612126565b925050602061217185828601612071565b9150509250929050565b60006020828403121561219157612190612046565b5b600061219f84828501612126565b91505092915050565b6121b1816120fd565b82525050565b60006020820190506121cc60008301846121a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121f7576121f66121d2565b5b8235905067ffffffffffffffff811115612214576122136121d7565b5b6020830191508360208202830111156122305761222f6121dc565b5b9250929050565b6000806020838503121561224e5761224d612046565b5b600083013567ffffffffffffffff81111561226c5761226b61204b565b5b612278858286016121e1565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6122b981612050565b82525050565b60006122cb83836122b0565b60208301905092915050565b6000602082019050919050565b60006122ef82612284565b6122f9818561228f565b9350612304836122a0565b8060005b8381101561233557815161231c88826122bf565b9750612327836122d7565b925050600181019050612308565b5085935050505092915050565b6000602082019050818103600083015261235c81846122e4565b905092915050565b6000819050919050565b600061238961238461237f846120dd565b612364565b6120dd565b9050919050565b600061239b8261236e565b9050919050565b60006123ad82612390565b9050919050565b6123bd816123a2565b82525050565b60006020820190506123d860008301846123b4565b92915050565b60008115159050919050565b6123f3816123de565b82525050565b600060208201905061240e60008301846123ea565b92915050565b600061241f82612390565b9050919050565b61242f81612414565b82525050565b600060208201905061244a6000830184612426565b92915050565b600082825260208201905092915050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000612497600c83612450565b91506124a282612461565b602082019050919050565b600060208201905081810360008301526124c68161248a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061250782612050565b915061251283612050565b925082820190508082111561252a576125296124cd565b5b92915050565b600061253b82612050565b915061254683612050565b925082820390508181111561255e5761255d6124cd565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061259e82612050565b91506125a983612050565b9250826125b9576125b8612564565b5b828204905092915050565b60006125cf82612050565b91506125da83612050565b92508282026125e881612050565b915082820484148315176125ff576125fe6124cd565b5b5092915050565b7f596f752063616e277420636c61696d206d6f7265207468616e20796f7520686160008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b6000612662602283612450565b915061266d82612606565b604082019050919050565b6000602082019050818103600083015261269181612655565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006126f4602483612450565b91506126ff82612698565b604082019050919050565b60006020820190508181036000830152612723816126e7565b9050919050565b7f596f752068617665206e6f207265776172647320746f20636c61696d00000000600082015250565b6000612760601c83612450565b915061276b8261272a565b602082019050919050565b6000602082019050818103600083015261278f81612753565b9050919050565b60006060820190506127ab60008301866121a8565b6127b860208301856121a8565b6127c560408301846120b3565b949350505050565b6127d6816123de565b81146127e157600080fd5b50565b6000815190506127f3816127cd565b92915050565b60006020828403121561280f5761280e612046565b5b600061281d848285016127e4565b91505092915050565b7f537461727420636c61696d2074696d657374616d70206d75737420626520616660008201527f74657220656e6420726577617264732074696d657374616d7000000000000000602082015250565b6000612882603983612450565b915061288d82612826565b604082019050919050565b600060208201905081810360008301526128b181612875565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b6520796f7572204e60008201527f4654730000000000000000000000000000000000000000000000000000000000602082015250565b6000612914602383612450565b915061291f826128b8565b604082019050919050565b6000602082019050818103600083015261294381612907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520646f6e2774206f776e207468697320746f6b656e2100000000000000600082015250565b60006129af601983612450565b91506129ba82612979565b602082019050919050565b600060208201905081810360008301526129de816129a2565b9050919050565b60006129f082612050565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a2257612a216124cd565b5b600182019050919050565b6000612a3882612050565b915060008203612a4b57612a4a6124cd565b5b600182039050919050565b7f5374616b696e672069736e2774206c6976650000000000000000000000000000600082015250565b6000612a8c601283612450565b9150612a9782612a56565b602082019050919050565b60006020820190508181036000830152612abb81612a7f565b9050919050565b600081519050612ad18161210f565b92915050565b600060208284031215612aed57612aec612046565b5b6000612afb84828501612ac2565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612b60602683612450565b9150612b6b82612b04565b604082019050919050565b60006020820190508181036000830152612b8f81612b53565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612bcc601f83612450565b9150612bd782612b96565b602082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c67602083612450565b9150612c7282612c31565b602082019050919050565b60006020820190508181036000830152612c9681612c5a565b905091905056fea2646970667358221220250fb5ab076efc0ff32a00608d516893776036bd76e6908607fa46f0934736be64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b0
-----Decoded View---------------
Arg [0] : _nftCollection (address): 0x23F0512c871C1435F7B3a32dF5E1616Adc3eEB0A
Arg [1] : _rewardsToken (address): 0x506B8f75BDeF0Edac36B0A6f9CF313485E4341b0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a
Arg [1] : 000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b0
Deployed Bytecode Sourcemap
30745:6856:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31741:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33454:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33579:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31660:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33707:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36359:831;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33223:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37195:403;;;:::i;:::-;;32861:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31177:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34941:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35447:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31269:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33983:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30873:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31797:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29814:103;;;:::i;:::-;;33858:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35855:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29166:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33096:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33354:95;;;:::i;:::-;;31337:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31703:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31851:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31960:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32596:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32506:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30915:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31463:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34111:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31908:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31517:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30072:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32734:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31741:52;;;;;;;;;;;;;;;;;:::o;33454:120::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33563:6:::1;33536:13;:23;33550:8;33536:23;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;33454:120:::0;;:::o;33579:123::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33690:7:::1;33663:13;:23;33677:8;33663:23;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;33579:123:::0;;:::o;31660:39::-;;;;:::o;33707:146::-;33769:7;33820:20;:28;33841:6;33820:28;;;;;;;;;;;;;;;;33790:27;33810:6;33790:19;:27::i;:::-;:58;;;;:::i;:::-;33783:65;;33707:146;;;:::o;36359:831::-;36426:7;36568:19;;36550:15;:37;36546:63;;;36602:1;36595:8;;;;36546:63;36613:20;36636:24;36652:7;36636:15;:24::i;:::-;36613:47;;36665:29;36715:19;;36697:15;:37;;;;:::i;:::-;36665:69;;36739:23;36846:20;:29;36867:7;36846:29;;;;;;;;;;;;;;;;36824:18;;36800:21;36782:14;;36767:12;:29;;;;:::i;:::-;36766:55;;;;:::i;:::-;:76;;;;:::i;:::-;36765:110;;;;:::i;:::-;36739:136;;36991:12;36973:15;:30;36969:67;;;37018:12;37011:19;;;;;;;36969:67;37067:12;37048:15;:31;;37040:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37170:15;37163:22;;;;;36359:831;;;;:::o;33223:126::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33334:10:::1;33310:21;:34;;;;33223:126:::0;:::o;37195:403::-;32210:19;;32191:15;:38;;32183:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13263:21:::1;:19;:21::i;:::-;37255:23:::2;37281:31;37301:10;37281:19;:31::i;:::-;37255:57;;37397:1;37379:15;:19;37371:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37472:15;37436:20;:32;37457:10;37436:32;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;37530:12;:25;;;37556:7;:5;:7::i;:::-;37565:10;37577:15;37530:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37250:348;13307:20:::1;:18;:20::i;:::-;37195:403::o:0;32861:230::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32968:19:::1;;32954:10;:33;;32946:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33076:10;33054:19;:32;;;;32861:230:::0;:::o;31177:22::-;;;;;;;;;;;;;:::o;34941:501::-;32340:21;;32321:15;:40;;32313:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13263:21:::1;:19;:21::i;:::-;35033:9:::2;35028:410;35052:8;;:15;;35048:1;:19;35028:410;;;35080:15;35098:8;;35107:1;35098:11;;;;;;;:::i;:::-;;;;;;;;35080:29;;35151:10;35123:38;;:15;:24;35139:7;35123:24;;;;;;;;;;;;;;;;;;;;;:38;;;35115:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35226:28;35246:7;35226:19;:28::i;:::-;35197:13;:25;35211:10;35197:25;;;;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;;;;;35260:61;35283:16;:28;35300:10;35283:28;;;;;;;;;;;;;;;35313:7;35260:22;:61::i;:::-;35362:1;35327:15;:24;35343:7;35327:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35370:13;:26;;;35405:4;35412:10;35424:7;35370:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;35074:364;35069:3;;;;;:::i;:::-;;;;35028:410;;;;13307:20:::1;:18;:20::i;:::-;34941:501:::0;;:::o;35447:403::-;35515:7;35529:17;35549:15;35529:35;;35610:1;35573:39;;:15;:25;35589:8;35573:25;;;;;;;;;;;;;;;;;;;;;:39;;;:92;;;;35646:19;;35616:17;:27;35634:8;35616:27;;;;;;;;;;;;:49;35573:92;35569:118;;;35680:1;35673:8;;;;;35569:118;35707:19;;35695:9;:31;35691:80;;;35746:19;;35734:31;;35691:80;35827:17;;35796;:27;35814:8;35796:27;;;;;;;;;;;;35784:9;:39;;;;:::i;:::-;35783:61;;;;:::i;:::-;35775:70;;;35447:403;;;;:::o;31269:49::-;;;;:::o;33983:123::-;34047:16;34077;:24;34094:6;34077:24;;;;;;;;;;;;;;;34070:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33983:123;;;:::o;30873:38::-;;;:::o;31797:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;29814:103::-;29052:13;:11;:13::i;:::-;29879:30:::1;29906:1;29879:18;:30::i;:::-;29814:103::o:0;33858:120::-;33921:7;33942:16;:24;33959:6;33942:24;;;;;;;;;;;;;;;:31;;;;33935:38;;33858:120;;;:::o;35855:499::-;35922:7;35936:20;35959:1;35936:24;;35970:9;35982:16;:25;35999:7;35982:25;;;;;;;;;;;;;;;:32;;;;35970:44;;35965:178;36020:1;36016;:5;35965:178;;;36034:15;36052:16;:28;36069:10;36052:28;;;;;;;;;;;;;;;36085:1;36081;:5;;;;:::i;:::-;36052:35;;;;;;;;:::i;:::-;;;;;;;;;;36034:53;;36109:28;36129:7;36109:19;:28::i;:::-;36093:44;;;;;:::i;:::-;;;36028:115;36023:3;;;;;:::i;:::-;;;;35965:178;;;;36167:1;36151:12;:17;:48;;;;;36198:1;36172:13;:22;36186:7;36172:22;;;;;;;;;;;;;;;;:27;36151:48;36147:74;;;36214:1;36207:8;;;;;36147:74;36225:24;36292:20;:29;36313:7;36292:29;;;;;;;;;;;;;;;;36277:12;36252:13;:22;36266:7;36252:22;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:69;;;;:::i;:::-;36225:96;;36333:16;36326:23;;;;35855:499;;;;:::o;29166:87::-;29212:7;29239:6;;;;;;;;;;;29232:13;;29166:87;:::o;33096:122::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33203:10:::1;33181:19;:32;;;;33096:122:::0;:::o;33354:95::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33432:12:::1;;;;;;;;;;;33431:13;33416:12;;:28;;;;;;;;;;;;;;;;;;33354:95::o:0;31337:47::-;;;;:::o;31703:32::-;;;;;;;;;;;;;:::o;31851:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31960:55::-;;;;;;;;;;;;;;;;;:::o;32596:133::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32706:18:::1;32686:17;:38;;;;32596:133:::0;:::o;32506:85::-;29052:13;:11;:13::i;:::-;32578:8:::1;32568:7;;:18;;;;;;;;;;;;;;;;;;32506:85:::0;:::o;30915:36::-;;;:::o;31203:47::-;;;;:::o;31463:50::-;;;;:::o;34111:507::-;32455:12;;;;;;;;;;;32447:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;34193:9:::1;34188:426;34212:8;;:15;;34208:1;:19;34188:426;;;34240:15;34258:8;;34267:1;34258:11;;;;;;;:::i;:::-;;;;;;;;34240:29;;34317:10;34283:44;;:13;:21;;;34305:7;34283:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;:86;;;;;34367:1;34331:38;;:15;:24;34347:7;34331:24;;;;;;;;;;;;;;;;;;;;;:38;;;34283:86;34275:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;34405:13;:26;;;34432:10;34452:4;34459:7;34405:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34473:16;:28;34490:10;34473:28;;;;;;;;;;;;;;;34507:7;34473:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34550:15;34521:17;:26;34539:7;34521:26;;;;;;;;;;;:44;;;;34598:10;34571:15;:24;34587:7;34571:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34234:380;34229:3;;;;;:::i;:::-;;;;34188:426;;;;34111:507:::0;;:::o;31908:48::-;;;;;;;;;;;;;;;;;:::o;31517:38::-;;;;:::o;30072:201::-;29052:13;:11;:13::i;:::-;30181:1:::1;30161:22;;:8;:22;;::::0;30153:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:28;30256:8;30237:18;:28::i;:::-;30072:201:::0;:::o;32734:122::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32836:15:::1;32819:14;:32;;;;32734:122:::0;:::o;13343:293::-;12745:1;13477:7;;:19;13469:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12745:1;13610:7;:18;;;;13343:293::o;13644:213::-;12701:1;13827:7;:22;;;;13644:213::o;34623:313::-;34711:14;34728:5;:12;;;;34711:29;;34750:9;34745:187;34769:6;34765:1;:10;34745:187;;;34804:7;34792:5;34798:1;34792:8;;;;;;;;:::i;:::-;;;;;;;;;;:19;34788:139;;34820:8;;;;;:::i;:::-;;;;34843:6;34839:1;:10;34835:56;;;34870:5;34876:6;34870:13;;;;;;;;:::i;:::-;;;;;;;;;;34859:5;34865:1;34859:8;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;34835:56;34897:5;:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34915:5;;34788:139;34777:3;;;;;:::i;:::-;;;;34745:187;;;;34706:230;34623:313;;:::o;29331:132::-;29406:12;:10;:12::i;:::-;29395:23;;:7;:5;:7::i;:::-;:23;;;29387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29331:132::o;30433:191::-;30507:16;30526:6;;;;;;;;;;;30507:25;;30552:8;30543:6;;:17;;;;;;;;;;;;;;;;;;30607:8;30576:40;;30597:8;30576:40;;;;;;;;;;;;30496:128;30433:191;:::o;27717:98::-;27770:7;27797:10;27790:17;;27717:98;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::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:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:329::-;2423:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:119;;;2478:79;;:::i;:::-;2440:119;2598:1;2623:53;2668:7;2659:6;2648:9;2644:22;2623:53;:::i;:::-;2613:63;;2569:117;2364:329;;;;:::o;2699:118::-;2786:24;2804:5;2786:24;:::i;:::-;2781:3;2774:37;2699:118;;:::o;2823:222::-;2916:4;2954:2;2943:9;2939:18;2931:26;;2967:71;3035:1;3024:9;3020:17;3011:6;2967:71;:::i;:::-;2823:222;;;;:::o;3051:117::-;3160:1;3157;3150:12;3174:117;3283:1;3280;3273:12;3297:117;3406:1;3403;3396:12;3437:568;3510:8;3520:6;3570:3;3563:4;3555:6;3551:17;3547:27;3537:122;;3578:79;;:::i;:::-;3537:122;3691:6;3678:20;3668:30;;3721:18;3713:6;3710:30;3707:117;;;3743:79;;:::i;:::-;3707:117;3857:4;3849:6;3845:17;3833:29;;3911:3;3903:4;3895:6;3891:17;3881:8;3877:32;3874:41;3871:128;;;3918:79;;:::i;:::-;3871:128;3437:568;;;;;:::o;4011:559::-;4097:6;4105;4154:2;4142:9;4133:7;4129:23;4125:32;4122:119;;;4160:79;;:::i;:::-;4122:119;4308:1;4297:9;4293:17;4280:31;4338:18;4330:6;4327:30;4324:117;;;4360:79;;:::i;:::-;4324:117;4473:80;4545:7;4536:6;4525:9;4521:22;4473:80;:::i;:::-;4455:98;;;;4251:312;4011:559;;;;;:::o;4576:114::-;4643:6;4677:5;4671:12;4661:22;;4576:114;;;:::o;4696:184::-;4795:11;4829:6;4824:3;4817:19;4869:4;4864:3;4860:14;4845:29;;4696:184;;;;:::o;4886:132::-;4953:4;4976:3;4968:11;;5006:4;5001:3;4997:14;4989:22;;4886:132;;;:::o;5024:108::-;5101:24;5119:5;5101:24;:::i;:::-;5096:3;5089:37;5024:108;;:::o;5138:179::-;5207:10;5228:46;5270:3;5262:6;5228:46;:::i;:::-;5306:4;5301:3;5297:14;5283:28;;5138:179;;;;:::o;5323:113::-;5393:4;5425;5420:3;5416:14;5408:22;;5323:113;;;:::o;5472:732::-;5591:3;5620:54;5668:5;5620:54;:::i;:::-;5690:86;5769:6;5764:3;5690:86;:::i;:::-;5683:93;;5800:56;5850:5;5800:56;:::i;:::-;5879:7;5910:1;5895:284;5920:6;5917:1;5914:13;5895:284;;;5996:6;5990:13;6023:63;6082:3;6067:13;6023:63;:::i;:::-;6016:70;;6109:60;6162:6;6109:60;:::i;:::-;6099:70;;5955:224;5942:1;5939;5935:9;5930:14;;5895:284;;;5899:14;6195:3;6188:10;;5596:608;;;5472:732;;;;:::o;6210:373::-;6353:4;6391:2;6380:9;6376:18;6368:26;;6440:9;6434:4;6430:20;6426:1;6415:9;6411:17;6404:47;6468:108;6571:4;6562:6;6468:108;:::i;:::-;6460:116;;6210:373;;;;:::o;6589:60::-;6617:3;6638:5;6631:12;;6589:60;;;:::o;6655:142::-;6705:9;6738:53;6756:34;6765:24;6783:5;6765:24;:::i;:::-;6756:34;:::i;:::-;6738:53;:::i;:::-;6725:66;;6655:142;;;:::o;6803:126::-;6853:9;6886:37;6917:5;6886:37;:::i;:::-;6873:50;;6803:126;;;:::o;6935:141::-;7000:9;7033:37;7064:5;7033:37;:::i;:::-;7020:50;;6935:141;;;:::o;7082:161::-;7184:52;7230:5;7184:52;:::i;:::-;7179:3;7172:65;7082:161;;:::o;7249:252::-;7357:4;7395:2;7384:9;7380:18;7372:26;;7408:86;7491:1;7480:9;7476:17;7467:6;7408:86;:::i;:::-;7249:252;;;;:::o;7507:90::-;7541:7;7584:5;7577:13;7570:21;7559:32;;7507:90;;;:::o;7603:109::-;7684:21;7699:5;7684:21;:::i;:::-;7679:3;7672:34;7603:109;;:::o;7718:210::-;7805:4;7843:2;7832:9;7828:18;7820:26;;7856:65;7918:1;7907:9;7903:17;7894:6;7856:65;:::i;:::-;7718:210;;;;:::o;7934:140::-;7998:9;8031:37;8062:5;8031:37;:::i;:::-;8018:50;;7934:140;;;:::o;8080:159::-;8181:51;8226:5;8181:51;:::i;:::-;8176:3;8169:64;8080:159;;:::o;8245:250::-;8352:4;8390:2;8379:9;8375:18;8367:26;;8403:85;8485:1;8474:9;8470:17;8461:6;8403:85;:::i;:::-;8245:250;;;;:::o;8501:169::-;8585:11;8619:6;8614:3;8607:19;8659:4;8654:3;8650:14;8635:29;;8501:169;;;;:::o;8676:162::-;8816:14;8812:1;8804:6;8800:14;8793:38;8676:162;:::o;8844:366::-;8986:3;9007:67;9071:2;9066:3;9007:67;:::i;:::-;9000:74;;9083:93;9172:3;9083:93;:::i;:::-;9201:2;9196:3;9192:12;9185:19;;8844:366;;;:::o;9216:419::-;9382:4;9420:2;9409:9;9405:18;9397:26;;9469:9;9463:4;9459:20;9455:1;9444:9;9440:17;9433:47;9497:131;9623:4;9497:131;:::i;:::-;9489:139;;9216:419;;;:::o;9641:180::-;9689:77;9686:1;9679:88;9786:4;9783:1;9776:15;9810:4;9807:1;9800:15;9827:191;9867:3;9886:20;9904:1;9886:20;:::i;:::-;9881:25;;9920:20;9938:1;9920:20;:::i;:::-;9915:25;;9963:1;9960;9956:9;9949:16;;9984:3;9981:1;9978:10;9975:36;;;9991:18;;:::i;:::-;9975:36;9827:191;;;;:::o;10024:194::-;10064:4;10084:20;10102:1;10084:20;:::i;:::-;10079:25;;10118:20;10136:1;10118:20;:::i;:::-;10113:25;;10162:1;10159;10155:9;10147:17;;10186:1;10180:4;10177:11;10174:37;;;10191:18;;:::i;:::-;10174:37;10024:194;;;;:::o;10224:180::-;10272:77;10269:1;10262:88;10369:4;10366:1;10359:15;10393:4;10390:1;10383:15;10410:185;10450:1;10467:20;10485:1;10467:20;:::i;:::-;10462:25;;10501:20;10519:1;10501:20;:::i;:::-;10496:25;;10540:1;10530:35;;10545:18;;:::i;:::-;10530:35;10587:1;10584;10580:9;10575:14;;10410:185;;;;:::o;10601:410::-;10641:7;10664:20;10682:1;10664:20;:::i;:::-;10659:25;;10698:20;10716:1;10698:20;:::i;:::-;10693:25;;10753:1;10750;10746:9;10775:30;10793:11;10775:30;:::i;:::-;10764:41;;10954:1;10945:7;10941:15;10938:1;10935:22;10915:1;10908:9;10888:83;10865:139;;10984:18;;:::i;:::-;10865:139;10649:362;10601:410;;;;:::o;11017:221::-;11157:34;11153:1;11145:6;11141:14;11134:58;11226:4;11221:2;11213:6;11209:15;11202:29;11017:221;:::o;11244:366::-;11386:3;11407:67;11471:2;11466:3;11407:67;:::i;:::-;11400:74;;11483:93;11572:3;11483:93;:::i;:::-;11601:2;11596:3;11592:12;11585:19;;11244:366;;;:::o;11616:419::-;11782:4;11820:2;11809:9;11805:18;11797:26;;11869:9;11863:4;11859:20;11855:1;11844:9;11840:17;11833:47;11897:131;12023:4;11897:131;:::i;:::-;11889:139;;11616:419;;;:::o;12041:223::-;12181:34;12177:1;12169:6;12165:14;12158:58;12250:6;12245:2;12237:6;12233:15;12226:31;12041:223;:::o;12270:366::-;12412:3;12433:67;12497:2;12492:3;12433:67;:::i;:::-;12426:74;;12509:93;12598:3;12509:93;:::i;:::-;12627:2;12622:3;12618:12;12611:19;;12270:366;;;:::o;12642:419::-;12808:4;12846:2;12835:9;12831:18;12823:26;;12895:9;12889:4;12885:20;12881:1;12870:9;12866:17;12859:47;12923:131;13049:4;12923:131;:::i;:::-;12915:139;;12642:419;;;:::o;13067:178::-;13207:30;13203:1;13195:6;13191:14;13184:54;13067:178;:::o;13251:366::-;13393:3;13414:67;13478:2;13473:3;13414:67;:::i;:::-;13407:74;;13490:93;13579:3;13490:93;:::i;:::-;13608:2;13603:3;13599:12;13592:19;;13251:366;;;:::o;13623:419::-;13789:4;13827:2;13816:9;13812:18;13804:26;;13876:9;13870:4;13866:20;13862:1;13851:9;13847:17;13840:47;13904:131;14030:4;13904:131;:::i;:::-;13896:139;;13623:419;;;:::o;14048:442::-;14197:4;14235:2;14224:9;14220:18;14212:26;;14248:71;14316:1;14305:9;14301:17;14292:6;14248:71;:::i;:::-;14329:72;14397:2;14386:9;14382:18;14373:6;14329:72;:::i;:::-;14411;14479:2;14468:9;14464:18;14455:6;14411:72;:::i;:::-;14048:442;;;;;;:::o;14496:116::-;14566:21;14581:5;14566:21;:::i;:::-;14559:5;14556:32;14546:60;;14602:1;14599;14592:12;14546:60;14496:116;:::o;14618:137::-;14672:5;14703:6;14697:13;14688:22;;14719:30;14743:5;14719:30;:::i;:::-;14618:137;;;;:::o;14761:345::-;14828:6;14877:2;14865:9;14856:7;14852:23;14848:32;14845:119;;;14883:79;;:::i;:::-;14845:119;15003:1;15028:61;15081:7;15072:6;15061:9;15057:22;15028:61;:::i;:::-;15018:71;;14974:125;14761:345;;;;:::o;15112:244::-;15252:34;15248:1;15240:6;15236:14;15229:58;15321:27;15316:2;15308:6;15304:15;15297:52;15112:244;:::o;15362:366::-;15504:3;15525:67;15589:2;15584:3;15525:67;:::i;:::-;15518:74;;15601:93;15690:3;15601:93;:::i;:::-;15719:2;15714:3;15710:12;15703:19;;15362:366;;;:::o;15734:419::-;15900:4;15938:2;15927:9;15923:18;15915:26;;15987:9;15981:4;15977:20;15973:1;15962:9;15958:17;15951:47;16015:131;16141:4;16015:131;:::i;:::-;16007:139;;15734:419;;;:::o;16159:222::-;16299:34;16295:1;16287:6;16283:14;16276:58;16368:5;16363:2;16355:6;16351:15;16344:30;16159:222;:::o;16387:366::-;16529:3;16550:67;16614:2;16609:3;16550:67;:::i;:::-;16543:74;;16626:93;16715:3;16626:93;:::i;:::-;16744:2;16739:3;16735:12;16728:19;;16387:366;;;:::o;16759:419::-;16925:4;16963:2;16952:9;16948:18;16940:26;;17012:9;17006:4;17002:20;16998:1;16987:9;16983:17;16976:47;17040:131;17166:4;17040:131;:::i;:::-;17032:139;;16759:419;;;:::o;17184:180::-;17232:77;17229:1;17222:88;17329:4;17326:1;17319:15;17353:4;17350:1;17343:15;17370:175;17510:27;17506:1;17498:6;17494:14;17487:51;17370:175;:::o;17551:366::-;17693:3;17714:67;17778:2;17773:3;17714:67;:::i;:::-;17707:74;;17790:93;17879:3;17790:93;:::i;:::-;17908:2;17903:3;17899:12;17892:19;;17551:366;;;:::o;17923:419::-;18089:4;18127:2;18116:9;18112:18;18104:26;;18176:9;18170:4;18166:20;18162:1;18151:9;18147:17;18140:47;18204:131;18330:4;18204:131;:::i;:::-;18196:139;;17923:419;;;:::o;18348:233::-;18387:3;18410:24;18428:5;18410:24;:::i;:::-;18401:33;;18456:66;18449:5;18446:77;18443:103;;18526:18;;:::i;:::-;18443:103;18573:1;18566:5;18562:13;18555:20;;18348:233;;;:::o;18587:171::-;18626:3;18649:24;18667:5;18649:24;:::i;:::-;18640:33;;18695:4;18688:5;18685:15;18682:41;;18703:18;;:::i;:::-;18682:41;18750:1;18743:5;18739:13;18732:20;;18587:171;;;:::o;18764:168::-;18904:20;18900:1;18892:6;18888:14;18881:44;18764:168;:::o;18938:366::-;19080:3;19101:67;19165:2;19160:3;19101:67;:::i;:::-;19094:74;;19177:93;19266:3;19177:93;:::i;:::-;19295:2;19290:3;19286:12;19279:19;;18938:366;;;:::o;19310:419::-;19476:4;19514:2;19503:9;19499:18;19491:26;;19563:9;19557:4;19553:20;19549:1;19538:9;19534:17;19527:47;19591:131;19717:4;19591:131;:::i;:::-;19583:139;;19310:419;;;:::o;19735:143::-;19792:5;19823:6;19817:13;19808:22;;19839:33;19866:5;19839:33;:::i;:::-;19735:143;;;;:::o;19884:351::-;19954:6;20003:2;19991:9;19982:7;19978:23;19974:32;19971:119;;;20009:79;;:::i;:::-;19971:119;20129:1;20154:64;20210:7;20201:6;20190:9;20186:22;20154:64;:::i;:::-;20144:74;;20100:128;19884:351;;;;:::o;20241:225::-;20381:34;20377:1;20369:6;20365:14;20358:58;20450:8;20445:2;20437:6;20433:15;20426:33;20241:225;:::o;20472:366::-;20614:3;20635:67;20699:2;20694:3;20635:67;:::i;:::-;20628:74;;20711:93;20800:3;20711:93;:::i;:::-;20829:2;20824:3;20820:12;20813:19;;20472:366;;;:::o;20844:419::-;21010:4;21048:2;21037:9;21033:18;21025:26;;21097:9;21091:4;21087:20;21083:1;21072:9;21068:17;21061:47;21125:131;21251:4;21125:131;:::i;:::-;21117:139;;20844:419;;;:::o;21269:181::-;21409:33;21405:1;21397:6;21393:14;21386:57;21269:181;:::o;21456:366::-;21598:3;21619:67;21683:2;21678:3;21619:67;:::i;:::-;21612:74;;21695:93;21784:3;21695:93;:::i;:::-;21813:2;21808:3;21804:12;21797:19;;21456:366;;;:::o;21828:419::-;21994:4;22032:2;22021:9;22017:18;22009:26;;22081:9;22075:4;22071:20;22067:1;22056:9;22052:17;22045:47;22109:131;22235:4;22109:131;:::i;:::-;22101:139;;21828:419;;;:::o;22253:180::-;22301:77;22298:1;22291:88;22398:4;22395:1;22388:15;22422:4;22419:1;22412:15;22439:182;22579:34;22575:1;22567:6;22563:14;22556:58;22439:182;:::o;22627:366::-;22769:3;22790:67;22854:2;22849:3;22790:67;:::i;:::-;22783:74;;22866:93;22955:3;22866:93;:::i;:::-;22984:2;22979:3;22975:12;22968:19;;22627:366;;;:::o;22999:419::-;23165:4;23203:2;23192:9;23188:18;23180:26;;23252:9;23246:4;23242:20;23238:1;23227:9;23223:17;23216:47;23280:131;23406:4;23280:131;:::i;:::-;23272:139;;22999:419;;;:::o
Swarm Source
ipfs://250fb5ab076efc0ff32a00608d516893776036bd76e6908607fa46f0934736be
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.