Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 338 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Receive Message | 24471692 | 7 days ago | IN | 0 ETH | 0.00000647 | ||||
| Receive Message | 24471573 | 7 days ago | IN | 0 ETH | 0.00000665 | ||||
| Deposit For Burn | 23819456 | 98 days ago | IN | 0.000051 ETH | 0.000081 | ||||
| Deposit For Burn | 23819456 | 98 days ago | IN | 0.000051 ETH | 0.00014933 | ||||
| Deposit For Burn | 23676558 | 118 days ago | IN | 0.000051 ETH | 0.0004123 | ||||
| Receive Message | 23432522 | 152 days ago | IN | 0 ETH | 0.00004904 | ||||
| Receive Message | 23432388 | 152 days ago | IN | 0 ETH | 0.00003878 | ||||
| Receive Message | 23376306 | 160 days ago | IN | 0 ETH | 0.00034084 | ||||
| Receive Message | 23216187 | 183 days ago | IN | 0 ETH | 0.00002524 | ||||
| Deposit For Burn | 23194153 | 186 days ago | IN | 0.00019 ETH | 0.00011716 | ||||
| Deposit For Burn | 23180217 | 188 days ago | IN | 0.00019 ETH | 0.00011136 | ||||
| Deposit For Burn | 23180070 | 188 days ago | IN | 0.00019 ETH | 0.00012572 | ||||
| Deposit For Burn | 23174352 | 189 days ago | IN | 0.00019 ETH | 0.00013276 | ||||
| Deposit For Burn | 23174279 | 189 days ago | IN | 0.00019 ETH | 0.00016395 | ||||
| Deposit For Burn | 23134044 | 194 days ago | IN | 0.00019 ETH | 0.00037092 | ||||
| Deposit For Burn | 23133680 | 194 days ago | IN | 0.00019 ETH | 0.00050702 | ||||
| Receive Message | 23095621 | 199 days ago | IN | 0 ETH | 0.00003562 | ||||
| Receive Message | 23045521 | 206 days ago | IN | 0 ETH | 0.00007427 | ||||
| Receive Message | 23045493 | 206 days ago | IN | 0 ETH | 0.00007547 | ||||
| Receive Message | 23017224 | 210 days ago | IN | 0 ETH | 0.0000401 | ||||
| Receive Message | 23017186 | 210 days ago | IN | 0 ETH | 0.00004347 | ||||
| Deposit For Burn | 22968675 | 217 days ago | IN | 0.0000038 ETH | 0.00084439 | ||||
| Receive Message | 22961732 | 218 days ago | IN | 0 ETH | 0.00135659 | ||||
| Deposit For Burn | 22961652 | 218 days ago | IN | 0.00019 ETH | 0.00077561 | ||||
| Deposit For Burn | 22944218 | 221 days ago | IN | 0.0000038 ETH | 0.00097242 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23819456 | 98 days ago | 0.000051 ETH | ||||
| Transfer | 23819456 | 98 days ago | 0.000051 ETH | ||||
| Transfer | 23676558 | 118 days ago | 0.000051 ETH | ||||
| Transfer | 23194153 | 186 days ago | 0.00019 ETH | ||||
| Transfer | 23180217 | 188 days ago | 0.00019 ETH | ||||
| Transfer | 23180070 | 188 days ago | 0.00019 ETH | ||||
| Transfer | 23174352 | 189 days ago | 0.00019 ETH | ||||
| Transfer | 23174279 | 189 days ago | 0.00019 ETH | ||||
| Transfer | 23134044 | 194 days ago | 0.00019 ETH | ||||
| Transfer | 23133680 | 194 days ago | 0.00019 ETH | ||||
| Transfer | 22968675 | 217 days ago | 0.0000038 ETH | ||||
| Transfer | 22961652 | 218 days ago | 0.00019 ETH | ||||
| Transfer | 22944218 | 221 days ago | 0.0000038 ETH | ||||
| Transfer | 22900100 | 227 days ago | 0.00019 ETH | ||||
| Transfer | 22899848 | 227 days ago | 0.00019 ETH | ||||
| Transfer | 22899746 | 227 days ago | 0.00019 ETH | ||||
| Transfer | 22858325 | 233 days ago | 0.00019 ETH | ||||
| Transfer | 22858192 | 233 days ago | 0.00019 ETH | ||||
| Transfer | 22858109 | 233 days ago | 0.00019 ETH | ||||
| Transfer | 22849737 | 234 days ago | 0.00019 ETH | ||||
| Transfer | 22694252 | 256 days ago | 0.0000038 ETH | ||||
| Transfer | 22692233 | 256 days ago | 0.00019 ETH | ||||
| Transfer | 22682404 | 257 days ago | 0.0000038 ETH | ||||
| Transfer | 22671340 | 259 days ago | 0.0000038 ETH | ||||
| Transfer | 22601121 | 269 days ago | 0.0000038 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Fee
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-05-15
*/
// SPDX-License-Identifier: MIT
// 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@v4.8.3
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol@v4.8.3
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.8.3
// 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/utils/Address.sol@v4.8.3
// OpenZeppelin Contracts (last updated v4.8.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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or 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 {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// 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/utils/SafeERC20.sol@v4.8.3
// 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/security/ReentrancyGuard.sol@v4.8.3
// 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 contracts/Fee.sol
pragma solidity 0.8.18;
struct GetFeesParam {
uint256 srcChainID;
uint256 destChainID;
}
struct GetFeesReturn {
uint256 contractFee;
uint256 agentFee;
}
interface IFeeReadSC {
function getFee(GetFeesParam memory param) external view returns(GetFeesReturn memory fee);
}
interface ICircleTokenMessenger {
function depositForBurn(
uint256 amount,
uint32 destinationDomain,
bytes32 mintRecipient,
address burnToken) external;
}
interface ICircleMessageTransmitter {
function receiveMessage(
bytes calldata message,
bytes calldata attestation) external;
}
contract Fee is Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
address public feeToAddress;
address public feeReadSC;
address public circleTokenMessengerSC;
address public circleMessageTransmitterSC;
uint256 public localChainId;
mapping(uint256 => uint256) public circlePathToBip44;
event DepositForBurnWithFee(
uint256 amount,
uint32 destinationDomain,
bytes32 mintRecipient,
address burnToken,
uint256 fee
);
event UpdateFeeTo(address to);
event MintToken(bytes32 mintRecipient, address token);
constructor(address _feeToAddress, address _feeReadSC, uint256 _localChainId, address _circleTokenMessengerSC, address _circleMessageTransmitterSC) {
feeToAddress = _feeToAddress;
feeReadSC = _feeReadSC;
localChainId = _localChainId;
circleTokenMessengerSC = _circleTokenMessengerSC;
circleMessageTransmitterSC = _circleMessageTransmitterSC;
}
function setFeeToAddress(address _feeToAddress) external onlyOwner {
feeToAddress = _feeToAddress;
emit UpdateFeeTo(_feeToAddress);
}
function setCirclePathToBip44(uint256 _circlePath, uint256 _bip44) external onlyOwner {
circlePathToBip44[_circlePath] = _bip44;
}
function setFeeReadSC(address _feeReadSC) external onlyOwner {
feeReadSC = _feeReadSC;
}
function estimateFee(uint32 destinationDomain) public view returns(uint256) {
require(circlePathToBip44[destinationDomain] != 0, "Fee: Invalid destination domain");
GetFeesReturn memory fee = IFeeReadSC(feeReadSC).getFee(GetFeesParam({
srcChainID: localChainId,
destChainID: circlePathToBip44[destinationDomain]
}));
return fee.contractFee;
}
function depositForBurn(
uint256 amount,
uint32 destinationDomain,
bytes32 mintRecipient,
address burnToken) external payable nonReentrant {
uint256 fee = estimateFee(destinationDomain);
require(msg.value >= fee, "Fee: Insufficient fee");
if (msg.value > fee) {
Address.sendValue(payable(msg.sender), msg.value - fee);
}
Address.sendValue(payable(feeToAddress), fee);
IERC20(burnToken).safeTransferFrom(msg.sender, address(this), amount);
IERC20(burnToken).safeApprove(circleTokenMessengerSC, amount);
ICircleTokenMessenger(circleTokenMessengerSC).depositForBurn(amount, destinationDomain, mintRecipient, burnToken);
emit DepositForBurnWithFee(amount, destinationDomain, mintRecipient, burnToken, fee);
}
function receiveMessage(bytes calldata message, bytes calldata attestation, bytes32 mintRecipient, address token) external nonReentrant {
ICircleMessageTransmitter(circleMessageTransmitterSC).receiveMessage(message, attestation);
emit MintToken(mintRecipient, token);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_feeToAddress","type":"address"},{"internalType":"address","name":"_feeReadSC","type":"address"},{"internalType":"uint256","name":"_localChainId","type":"uint256"},{"internalType":"address","name":"_circleTokenMessengerSC","type":"address"},{"internalType":"address","name":"_circleMessageTransmitterSC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"mintRecipient","type":"bytes32"},{"indexed":false,"internalType":"address","name":"burnToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"DepositForBurnWithFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"mintRecipient","type":"bytes32"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"MintToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"UpdateFeeTo","type":"event"},{"inputs":[],"name":"circleMessageTransmitterSC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"circlePathToBip44","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circleTokenMessengerSC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint32","name":"destinationDomain","type":"uint32"},{"internalType":"bytes32","name":"mintRecipient","type":"bytes32"},{"internalType":"address","name":"burnToken","type":"address"}],"name":"depositForBurn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint32","name":"destinationDomain","type":"uint32"}],"name":"estimateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReadSC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"localChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes","name":"attestation","type":"bytes"},{"internalType":"bytes32","name":"mintRecipient","type":"bytes32"},{"internalType":"address","name":"token","type":"address"}],"name":"receiveMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_circlePath","type":"uint256"},{"internalType":"uint256","name":"_bip44","type":"uint256"}],"name":"setCirclePathToBip44","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeReadSC","type":"address"}],"name":"setFeeReadSC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToAddress","type":"address"}],"name":"setFeeToAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162002345380380620023458339818101604052810190620000379190620002e5565b620000576200004b6200017460201b60201c565b6200017c60201b60201c565b6001808190555084600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260068190555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506200036d565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002728262000245565b9050919050565b620002848162000265565b81146200029057600080fd5b50565b600081519050620002a48162000279565b92915050565b6000819050919050565b620002bf81620002aa565b8114620002cb57600080fd5b50565b600081519050620002df81620002b4565b92915050565b600080600080600060a0868803121562000304576200030362000240565b5b6000620003148882890162000293565b9550506020620003278882890162000293565b94505060406200033a88828901620002ce565b93505060606200034d8882890162000293565b9250506080620003608882890162000293565b9150509295509295909350565b611fc8806200037d6000396000f3fe6080604052600436106100e85760003560e01c8063715018a61161008a5780638447fa5b116100595780638447fa5b146102ad578063874a5438146102ea5780638da5cb5b14610315578063f2fde38b14610340576100e8565b8063715018a614610207578063726855e41461021e578063745c5e351461025b5780637d68716314610284576100e8565b80634462417d116100c65780634462417d1461016c578063580bb9a5146101975780635b056da5146101c05780636fd3504e146101eb576100e8565b8063083d80f9146100ed5780631820e3a4146101185780632eeab12614610143575b600080fd5b3480156100f957600080fd5b50610102610369565b60405161010f919061112e565b60405180910390f35b34801561012457600080fd5b5061012d61038f565b60405161013a919061112e565b60405180910390f35b34801561014f57600080fd5b5061016a60048036038101906101659190611193565b6103b5565b005b34801561017857600080fd5b506101816103d9565b60405161018e919061112e565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b991906111ff565b6103ff565b005b3480156101cc57600080fd5b506101d5610482565b6040516101e2919061123b565b60405180910390f35b610205600480360381019061020091906112c8565b610488565b005b34801561021357600080fd5b5061021c610685565b005b34801561022a57600080fd5b506102456004803603810190610240919061132f565b610699565b604051610252919061123b565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906113c1565b6107d1565b005b34801561029057600080fd5b506102ab60048036038101906102a691906111ff565b6108b5565b005b3480156102b957600080fd5b506102d460048036038101906102cf9190611468565b610901565b6040516102e1919061123b565b60405180910390f35b3480156102f657600080fd5b506102ff610919565b60405161030c919061112e565b60405180910390f35b34801561032157600080fd5b5061032a61093f565b604051610337919061112e565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906111ff565b610968565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103bd6109eb565b8060076000848152602001908152602001600020819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104076109eb565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcb2efb9ac9d76fd38ee396f04826fab474b9d684a0131ed439d676632ad605f981604051610477919061112e565b60405180910390a150565b60065481565b610490610a69565b600061049b84610699565b9050803410156104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d7906114f2565b60405180910390fd5b803411156104fe576104fd3382346104f89190611541565b610ab8565b5b61052a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610ab8565b6105573330878573ffffffffffffffffffffffffffffffffffffffff16610bac909392919063ffffffff16565b6105a4600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868473ffffffffffffffffffffffffffffffffffffffff16610c359092919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fd3504e868686866040518563ffffffff1660e01b81526004016106059493929190611593565b600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b505050507f6dce5b2406630dbc3a2633f31a15505733a9ede5169532aaab88ac01c77ff1e4858585858560405161066e9594939291906115d8565b60405180910390a15061067f610d84565b50505050565b61068d6109eb565b6106976000610d8d565b565b600080600760008463ffffffff16815260200190815260200160002054036106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed90611677565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ec61b7960405180604001604052806006548152602001600760008863ffffffff168152602001908152602001600020548152506040518263ffffffff1660e01b815260040161078291906116d5565b6040805180830381865afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c291906117e6565b90508060000151915050919050565b6107d9610a69565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357ecfd28878787876040518563ffffffff1660e01b815260040161083a9493929190611860565b600060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050507fec50117ae0d541abe5a263b53198e6a8ff0cc737b952177c77a60b4c444366d7828260405161089d92919061189b565b60405180910390a16108ad610d84565b505050505050565b6108bd6109eb565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109706109eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611936565b60405180910390fd5b6109e881610d8d565b50565b6109f3610e51565b73ffffffffffffffffffffffffffffffffffffffff16610a1161093f565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e906119a2565b60405180910390fd5b565b600260015403610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590611a0e565b60405180910390fd5b6002600181905550565b80471015610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290611a7a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610b2190611acb565b60006040518083038185875af1925050503d8060008114610b5e576040519150601f19603f3d011682016040523d82523d6000602084013e610b63565b606091505b5050905080610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90611b52565b60405180910390fd5b505050565b610c2f846323b872dd60e01b858585604051602401610bcd93929190611b72565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e59565b50505050565b6000811480610cbf575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401610c7c929190611ba9565b602060405180830381865afa158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611bd2565b145b610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590611c71565b60405180910390fd5b610d7f8363095ea7b360e01b8484604051602401610d1d929190611c91565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e59565b505050565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000610ebb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610f209092919063ffffffff16565b9050600081511115610f1b5780806020019051810190610edb9190611cf2565b610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190611d91565b60405180910390fd5b5b505050565b6060610f2f8484600085610f38565b90509392505050565b606082471015610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490611e23565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610fa69190611ea9565b60006040518083038185875af1925050503d8060008114610fe3576040519150601f19603f3d011682016040523d82523d6000602084013e610fe8565b606091505b5091509150610ff987838387611005565b92505050949350505050565b6060831561106757600083510361105f5761101f8561107a565b61105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590611f0c565b60405180910390fd5b5b829050611072565b611071838361109d565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156110b05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e49190611f70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611118826110ed565b9050919050565b6111288161110d565b82525050565b6000602082019050611143600083018461111f565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6111708161115d565b811461117b57600080fd5b50565b60008135905061118d81611167565b92915050565b600080604083850312156111aa576111a9611153565b5b60006111b88582860161117e565b92505060206111c98582860161117e565b9150509250929050565b6111dc8161110d565b81146111e757600080fd5b50565b6000813590506111f9816111d3565b92915050565b60006020828403121561121557611214611153565b5b6000611223848285016111ea565b91505092915050565b6112358161115d565b82525050565b6000602082019050611250600083018461122c565b92915050565b600063ffffffff82169050919050565b61126f81611256565b811461127a57600080fd5b50565b60008135905061128c81611266565b92915050565b6000819050919050565b6112a581611292565b81146112b057600080fd5b50565b6000813590506112c28161129c565b92915050565b600080600080608085870312156112e2576112e1611153565b5b60006112f08782880161117e565b94505060206113018782880161127d565b9350506040611312878288016112b3565b9250506060611323878288016111ea565b91505092959194509250565b60006020828403121561134557611344611153565b5b60006113538482850161127d565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126113815761138061135c565b5b8235905067ffffffffffffffff81111561139e5761139d611361565b5b6020830191508360018202830111156113ba576113b9611366565b5b9250929050565b600080600080600080608087890312156113de576113dd611153565b5b600087013567ffffffffffffffff8111156113fc576113fb611158565b5b61140889828a0161136b565b9650965050602087013567ffffffffffffffff81111561142b5761142a611158565b5b61143789828a0161136b565b9450945050604061144a89828a016112b3565b925050606061145b89828a016111ea565b9150509295509295509295565b60006020828403121561147e5761147d611153565b5b600061148c8482850161117e565b91505092915050565b600082825260208201905092915050565b7f4665653a20496e73756666696369656e74206665650000000000000000000000600082015250565b60006114dc601583611495565b91506114e7826114a6565b602082019050919050565b6000602082019050818103600083015261150b816114cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061154c8261115d565b91506115578361115d565b925082820390508181111561156f5761156e611512565b5b92915050565b61157e81611256565b82525050565b61158d81611292565b82525050565b60006080820190506115a8600083018761122c565b6115b56020830186611575565b6115c26040830185611584565b6115cf606083018461111f565b95945050505050565b600060a0820190506115ed600083018861122c565b6115fa6020830187611575565b6116076040830186611584565b611614606083018561111f565b611621608083018461122c565b9695505050505050565b7f4665653a20496e76616c69642064657374696e6174696f6e20646f6d61696e00600082015250565b6000611661601f83611495565b915061166c8261162b565b602082019050919050565b6000602082019050818103600083015261169081611654565b9050919050565b6116a08161115d565b82525050565b6040820160008201516116bc6000850182611697565b5060208201516116cf6020850182611697565b50505050565b60006040820190506116ea60008301846116a6565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61173e826116f5565b810181811067ffffffffffffffff8211171561175d5761175c611706565b5b80604052505050565b6000611770611149565b905061177c8282611735565b919050565b60008151905061179081611167565b92915050565b6000604082840312156117ac576117ab6116f0565b5b6117b66040611766565b905060006117c684828501611781565b60008301525060206117da84828501611781565b60208301525092915050565b6000604082840312156117fc576117fb611153565b5b600061180a84828501611796565b91505092915050565b600082825260208201905092915050565b82818337600083830152505050565b600061183f8385611813565b935061184c838584611824565b611855836116f5565b840190509392505050565b6000604082019050818103600083015261187b818688611833565b90508181036020830152611890818486611833565b905095945050505050565b60006040820190506118b06000830185611584565b6118bd602083018461111f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611920602683611495565b915061192b826118c4565b604082019050919050565b6000602082019050818103600083015261194f81611913565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061198c602083611495565b915061199782611956565b602082019050919050565b600060208201905081810360008301526119bb8161197f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006119f8601f83611495565b9150611a03826119c2565b602082019050919050565b60006020820190508181036000830152611a27816119eb565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000611a64601d83611495565b9150611a6f82611a2e565b602082019050919050565b60006020820190508181036000830152611a9381611a57565b9050919050565b600081905092915050565b50565b6000611ab5600083611a9a565b9150611ac082611aa5565b600082019050919050565b6000611ad682611aa8565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000611b3c603a83611495565b9150611b4782611ae0565b604082019050919050565b60006020820190508181036000830152611b6b81611b2f565b9050919050565b6000606082019050611b87600083018661111f565b611b94602083018561111f565b611ba1604083018461122c565b949350505050565b6000604082019050611bbe600083018561111f565b611bcb602083018461111f565b9392505050565b600060208284031215611be857611be7611153565b5b6000611bf684828501611781565b91505092915050565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b6000611c5b603683611495565b9150611c6682611bff565b604082019050919050565b60006020820190508181036000830152611c8a81611c4e565b9050919050565b6000604082019050611ca6600083018561111f565b611cb3602083018461122c565b9392505050565b60008115159050919050565b611ccf81611cba565b8114611cda57600080fd5b50565b600081519050611cec81611cc6565b92915050565b600060208284031215611d0857611d07611153565b5b6000611d1684828501611cdd565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000611d7b602a83611495565b9150611d8682611d1f565b604082019050919050565b60006020820190508181036000830152611daa81611d6e565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000611e0d602683611495565b9150611e1882611db1565b604082019050919050565b60006020820190508181036000830152611e3c81611e00565b9050919050565b600081519050919050565b60005b83811015611e6c578082015181840152602081019050611e51565b60008484015250505050565b6000611e8382611e43565b611e8d8185611a9a565b9350611e9d818560208601611e4e565b80840191505092915050565b6000611eb58284611e78565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611ef6601d83611495565b9150611f0182611ec0565b602082019050919050565b60006020820190508181036000830152611f2581611ee9565b9050919050565b600081519050919050565b6000611f4282611f2c565b611f4c8185611495565b9350611f5c818560208601611e4e565b611f65816116f5565b840191505092915050565b60006020820190508181036000830152611f8a8184611f37565b90509291505056fea26469706673582212205dc88860835dccf4347fc8607d399256b43dea54499cd55ea52b15aa56db50b564736f6c634300081200330000000000000000000000007ded6550b8ebefa202b648a086732b3724064318000000000000000000000000fceaaaeb8d564a9d0e71ef36f027b9d162bc334e000000000000000000000000000000000000000000000000000000008000003c000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af31550000000000000000000000000a992d191deec32afe36203ad87d7d289a738f81
Deployed Bytecode
0x6080604052600436106100e85760003560e01c8063715018a61161008a5780638447fa5b116100595780638447fa5b146102ad578063874a5438146102ea5780638da5cb5b14610315578063f2fde38b14610340576100e8565b8063715018a614610207578063726855e41461021e578063745c5e351461025b5780637d68716314610284576100e8565b80634462417d116100c65780634462417d1461016c578063580bb9a5146101975780635b056da5146101c05780636fd3504e146101eb576100e8565b8063083d80f9146100ed5780631820e3a4146101185780632eeab12614610143575b600080fd5b3480156100f957600080fd5b50610102610369565b60405161010f919061112e565b60405180910390f35b34801561012457600080fd5b5061012d61038f565b60405161013a919061112e565b60405180910390f35b34801561014f57600080fd5b5061016a60048036038101906101659190611193565b6103b5565b005b34801561017857600080fd5b506101816103d9565b60405161018e919061112e565b60405180910390f35b3480156101a357600080fd5b506101be60048036038101906101b991906111ff565b6103ff565b005b3480156101cc57600080fd5b506101d5610482565b6040516101e2919061123b565b60405180910390f35b610205600480360381019061020091906112c8565b610488565b005b34801561021357600080fd5b5061021c610685565b005b34801561022a57600080fd5b506102456004803603810190610240919061132f565b610699565b604051610252919061123b565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906113c1565b6107d1565b005b34801561029057600080fd5b506102ab60048036038101906102a691906111ff565b6108b5565b005b3480156102b957600080fd5b506102d460048036038101906102cf9190611468565b610901565b6040516102e1919061123b565b60405180910390f35b3480156102f657600080fd5b506102ff610919565b60405161030c919061112e565b60405180910390f35b34801561032157600080fd5b5061032a61093f565b604051610337919061112e565b60405180910390f35b34801561034c57600080fd5b50610367600480360381019061036291906111ff565b610968565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103bd6109eb565b8060076000848152602001908152602001600020819055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104076109eb565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcb2efb9ac9d76fd38ee396f04826fab474b9d684a0131ed439d676632ad605f981604051610477919061112e565b60405180910390a150565b60065481565b610490610a69565b600061049b84610699565b9050803410156104e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d7906114f2565b60405180910390fd5b803411156104fe576104fd3382346104f89190611541565b610ab8565b5b61052a600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610ab8565b6105573330878573ffffffffffffffffffffffffffffffffffffffff16610bac909392919063ffffffff16565b6105a4600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868473ffffffffffffffffffffffffffffffffffffffff16610c359092919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636fd3504e868686866040518563ffffffff1660e01b81526004016106059493929190611593565b600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b505050507f6dce5b2406630dbc3a2633f31a15505733a9ede5169532aaab88ac01c77ff1e4858585858560405161066e9594939291906115d8565b60405180910390a15061067f610d84565b50505050565b61068d6109eb565b6106976000610d8d565b565b600080600760008463ffffffff16815260200190815260200160002054036106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed90611677565b60405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ec61b7960405180604001604052806006548152602001600760008863ffffffff168152602001908152602001600020548152506040518263ffffffff1660e01b815260040161078291906116d5565b6040805180830381865afa15801561079e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c291906117e6565b90508060000151915050919050565b6107d9610a69565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357ecfd28878787876040518563ffffffff1660e01b815260040161083a9493929190611860565b600060405180830381600087803b15801561085457600080fd5b505af1158015610868573d6000803e3d6000fd5b505050507fec50117ae0d541abe5a263b53198e6a8ff0cc737b952177c77a60b4c444366d7828260405161089d92919061189b565b60405180910390a16108ad610d84565b505050505050565b6108bd6109eb565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60076020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6109706109eb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611936565b60405180910390fd5b6109e881610d8d565b50565b6109f3610e51565b73ffffffffffffffffffffffffffffffffffffffff16610a1161093f565b73ffffffffffffffffffffffffffffffffffffffff1614610a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5e906119a2565b60405180910390fd5b565b600260015403610aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa590611a0e565b60405180910390fd5b6002600181905550565b80471015610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290611a7a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610b2190611acb565b60006040518083038185875af1925050503d8060008114610b5e576040519150601f19603f3d011682016040523d82523d6000602084013e610b63565b606091505b5050905080610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90611b52565b60405180910390fd5b505050565b610c2f846323b872dd60e01b858585604051602401610bcd93929190611b72565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e59565b50505050565b6000811480610cbf575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401610c7c929190611ba9565b602060405180830381865afa158015610c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbd9190611bd2565b145b610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590611c71565b60405180910390fd5b610d7f8363095ea7b360e01b8484604051602401610d1d929190611c91565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610e59565b505050565b60018081905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000610ebb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16610f209092919063ffffffff16565b9050600081511115610f1b5780806020019051810190610edb9190611cf2565b610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190611d91565b60405180910390fd5b5b505050565b6060610f2f8484600085610f38565b90509392505050565b606082471015610f7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7490611e23565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610fa69190611ea9565b60006040518083038185875af1925050503d8060008114610fe3576040519150601f19603f3d011682016040523d82523d6000602084013e610fe8565b606091505b5091509150610ff987838387611005565b92505050949350505050565b6060831561106757600083510361105f5761101f8561107a565b61105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590611f0c565b60405180910390fd5b5b829050611072565b611071838361109d565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156110b05781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e49190611f70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611118826110ed565b9050919050565b6111288161110d565b82525050565b6000602082019050611143600083018461111f565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6111708161115d565b811461117b57600080fd5b50565b60008135905061118d81611167565b92915050565b600080604083850312156111aa576111a9611153565b5b60006111b88582860161117e565b92505060206111c98582860161117e565b9150509250929050565b6111dc8161110d565b81146111e757600080fd5b50565b6000813590506111f9816111d3565b92915050565b60006020828403121561121557611214611153565b5b6000611223848285016111ea565b91505092915050565b6112358161115d565b82525050565b6000602082019050611250600083018461122c565b92915050565b600063ffffffff82169050919050565b61126f81611256565b811461127a57600080fd5b50565b60008135905061128c81611266565b92915050565b6000819050919050565b6112a581611292565b81146112b057600080fd5b50565b6000813590506112c28161129c565b92915050565b600080600080608085870312156112e2576112e1611153565b5b60006112f08782880161117e565b94505060206113018782880161127d565b9350506040611312878288016112b3565b9250506060611323878288016111ea565b91505092959194509250565b60006020828403121561134557611344611153565b5b60006113538482850161127d565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126113815761138061135c565b5b8235905067ffffffffffffffff81111561139e5761139d611361565b5b6020830191508360018202830111156113ba576113b9611366565b5b9250929050565b600080600080600080608087890312156113de576113dd611153565b5b600087013567ffffffffffffffff8111156113fc576113fb611158565b5b61140889828a0161136b565b9650965050602087013567ffffffffffffffff81111561142b5761142a611158565b5b61143789828a0161136b565b9450945050604061144a89828a016112b3565b925050606061145b89828a016111ea565b9150509295509295509295565b60006020828403121561147e5761147d611153565b5b600061148c8482850161117e565b91505092915050565b600082825260208201905092915050565b7f4665653a20496e73756666696369656e74206665650000000000000000000000600082015250565b60006114dc601583611495565b91506114e7826114a6565b602082019050919050565b6000602082019050818103600083015261150b816114cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061154c8261115d565b91506115578361115d565b925082820390508181111561156f5761156e611512565b5b92915050565b61157e81611256565b82525050565b61158d81611292565b82525050565b60006080820190506115a8600083018761122c565b6115b56020830186611575565b6115c26040830185611584565b6115cf606083018461111f565b95945050505050565b600060a0820190506115ed600083018861122c565b6115fa6020830187611575565b6116076040830186611584565b611614606083018561111f565b611621608083018461122c565b9695505050505050565b7f4665653a20496e76616c69642064657374696e6174696f6e20646f6d61696e00600082015250565b6000611661601f83611495565b915061166c8261162b565b602082019050919050565b6000602082019050818103600083015261169081611654565b9050919050565b6116a08161115d565b82525050565b6040820160008201516116bc6000850182611697565b5060208201516116cf6020850182611697565b50505050565b60006040820190506116ea60008301846116a6565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61173e826116f5565b810181811067ffffffffffffffff8211171561175d5761175c611706565b5b80604052505050565b6000611770611149565b905061177c8282611735565b919050565b60008151905061179081611167565b92915050565b6000604082840312156117ac576117ab6116f0565b5b6117b66040611766565b905060006117c684828501611781565b60008301525060206117da84828501611781565b60208301525092915050565b6000604082840312156117fc576117fb611153565b5b600061180a84828501611796565b91505092915050565b600082825260208201905092915050565b82818337600083830152505050565b600061183f8385611813565b935061184c838584611824565b611855836116f5565b840190509392505050565b6000604082019050818103600083015261187b818688611833565b90508181036020830152611890818486611833565b905095945050505050565b60006040820190506118b06000830185611584565b6118bd602083018461111f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611920602683611495565b915061192b826118c4565b604082019050919050565b6000602082019050818103600083015261194f81611913565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061198c602083611495565b915061199782611956565b602082019050919050565b600060208201905081810360008301526119bb8161197f565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006119f8601f83611495565b9150611a03826119c2565b602082019050919050565b60006020820190508181036000830152611a27816119eb565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000611a64601d83611495565b9150611a6f82611a2e565b602082019050919050565b60006020820190508181036000830152611a9381611a57565b9050919050565b600081905092915050565b50565b6000611ab5600083611a9a565b9150611ac082611aa5565b600082019050919050565b6000611ad682611aa8565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000611b3c603a83611495565b9150611b4782611ae0565b604082019050919050565b60006020820190508181036000830152611b6b81611b2f565b9050919050565b6000606082019050611b87600083018661111f565b611b94602083018561111f565b611ba1604083018461122c565b949350505050565b6000604082019050611bbe600083018561111f565b611bcb602083018461111f565b9392505050565b600060208284031215611be857611be7611153565b5b6000611bf684828501611781565b91505092915050565b7f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000602082015250565b6000611c5b603683611495565b9150611c6682611bff565b604082019050919050565b60006020820190508181036000830152611c8a81611c4e565b9050919050565b6000604082019050611ca6600083018561111f565b611cb3602083018461122c565b9392505050565b60008115159050919050565b611ccf81611cba565b8114611cda57600080fd5b50565b600081519050611cec81611cc6565b92915050565b600060208284031215611d0857611d07611153565b5b6000611d1684828501611cdd565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000611d7b602a83611495565b9150611d8682611d1f565b604082019050919050565b60006020820190508181036000830152611daa81611d6e565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000611e0d602683611495565b9150611e1882611db1565b604082019050919050565b60006020820190508181036000830152611e3c81611e00565b9050919050565b600081519050919050565b60005b83811015611e6c578082015181840152602081019050611e51565b60008484015250505050565b6000611e8382611e43565b611e8d8185611a9a565b9350611e9d818560208601611e4e565b80840191505092915050565b6000611eb58284611e78565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000611ef6601d83611495565b9150611f0182611ec0565b602082019050919050565b60006020820190508181036000830152611f2581611ee9565b9050919050565b600081519050919050565b6000611f4282611f2c565b611f4c8185611495565b9350611f5c818560208601611e4e565b611f65816116f5565b840191505092915050565b60006020820190508181036000830152611f8a8184611f37565b90509291505056fea26469706673582212205dc88860835dccf4347fc8607d399256b43dea54499cd55ea52b15aa56db50b564736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007ded6550b8ebefa202b648a086732b3724064318000000000000000000000000fceaaaeb8d564a9d0e71ef36f027b9d162bc334e000000000000000000000000000000000000000000000000000000008000003c000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af31550000000000000000000000000a992d191deec32afe36203ad87d7d289a738f81
-----Decoded View---------------
Arg [0] : _feeToAddress (address): 0x7Ded6550B8EBEFA202B648a086732b3724064318
Arg [1] : _feeReadSC (address): 0xfCeAAaEB8D564a9D0e71Ef36f027b9D162bC334e
Arg [2] : _localChainId (uint256): 2147483708
Arg [3] : _circleTokenMessengerSC (address): 0xBd3fa81B58Ba92a82136038B25aDec7066af3155
Arg [4] : _circleMessageTransmitterSC (address): 0x0a992d191DEeC32aFe36203Ad87D7d289a738F81
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000007ded6550b8ebefa202b648a086732b3724064318
Arg [1] : 000000000000000000000000fceaaaeb8d564a9d0e71ef36f027b9d162bc334e
Arg [2] : 000000000000000000000000000000000000000000000000000000008000003c
Arg [3] : 000000000000000000000000bd3fa81b58ba92a82136038b25adec7066af3155
Arg [4] : 0000000000000000000000000a992d191deec32afe36203ad87d7d289a738f81
Deployed Bytecode Sourcemap
26443:3028:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26526:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26560:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27637:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26635:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27473:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26683:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28326:842;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2759:103;;;;;;;;;;;;;:::i;:::-;;27899:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29176:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27789:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26719:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26591:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2111:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3017:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26526:27;;;;;;;;;;;;;:::o;26560:24::-;;;;;;;;;;;;;:::o;27637:144::-;1997:13;:11;:13::i;:::-;27767:6:::1;27734:17;:30;27752:11;27734:30;;;;;;;;;;;:39;;;;27637:144:::0;;:::o;26635:41::-;;;;;;;;;;;;;:::o;27473:156::-;1997:13;:11;:13::i;:::-;27566::::1;27551:12;;:28;;;;;;;;;;;;;;;;;;27595:26;27607:13;27595:26;;;;;;:::i;:::-;;;;;;;;27473:156:::0;:::o;26683:27::-;;;;:::o;28326:842::-;25135:21;:19;:21::i;:::-;28515:11:::1;28529:30;28541:17;28529:11;:30::i;:::-;28515:44;;28591:3;28578:9;:16;;28570:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;28647:3;28635:9;:15;28631:103;;;28667:55;28693:10;28718:3;28706:9;:15;;;;:::i;:::-;28667:17;:55::i;:::-;28631:103;28744:45;28770:12;;;;;;;;;;;28785:3;28744:17;:45::i;:::-;28800:69;28835:10;28855:4;28862:6;28807:9;28800:34;;;;:69;;;;;;:::i;:::-;28880:61;28910:22;;;;;;;;;;;28934:6;28887:9;28880:29;;;;:61;;;;;:::i;:::-;28974:22;;;;;;;;;;;28952:60;;;29013:6;29021:17;29040:13;29055:9;28952:113;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29081:79;29103:6;29111:17;29130:13;29145:9;29156:3;29081:79;;;;;;;;;;:::i;:::-;;;;;;;;28504:664;25179:20:::0;:18;:20::i;:::-;28326:842;;;;:::o;2759:103::-;1997:13;:11;:13::i;:::-;2824:30:::1;2851:1;2824:18;:30::i;:::-;2759:103::o:0;27899:419::-;27966:7;28034:1;27994:17;:36;28012:17;27994:36;;;;;;;;;;;;;;:41;27986:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28082:24;28120:9;;;;;;;;;;;28109:28;;;28138:128;;;;;;;;28178:12;;28138:128;;;;28218:17;:36;28236:17;28218:36;;;;;;;;;;;;;;28138:128;;;28109:158;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28082:185;;28295:3;:15;;;28288:22;;;27899:419;;;:::o;29176:292::-;25135:21;:19;:21::i;:::-;29349:26:::1;;;;;;;;;;;29323:68;;;29392:7;;29401:11;;29323:90;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29429:31;29439:13;29454:5;29429:31;;;;;;;:::i;:::-;;;;;;;;25179:20:::0;:18;:20::i;:::-;29176:292;;;;;;:::o;27789:102::-;1997:13;:11;:13::i;:::-;27873:10:::1;27861:9;;:22;;;;;;;;;;;;;;;;;;27789:102:::0;:::o;26719:52::-;;;;;;;;;;;;;;;;;:::o;26591:37::-;;;;;;;;;;;;;:::o;2111:87::-;2157:7;2184:6;;;;;;;;;;;2177:13;;2111:87;:::o;3017:201::-;1997:13;:11;:13::i;:::-;3126:1:::1;3106:22;;:8;:22;;::::0;3098:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3182:28;3201:8;3182:18;:28::i;:::-;3017:201:::0;:::o;2276:132::-;2351:12;:10;:12::i;:::-;2340:23;;:7;:5;:7::i;:::-;:23;;;2332:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2276:132::o;25215:293::-;24617:1;25349:7;;:19;25341:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:1;25482:7;:18;;;;25215:293::o;11338:317::-;11453:6;11428:21;:31;;11420:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11507:12;11525:9;:14;;11547:6;11525:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11506:52;;;11577:7;11569:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;11409:246;11338:317;;:::o;19211:248::-;19355:96;19375:5;19405:27;;;19434:4;19440:2;19444:5;19382:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19355:19;:96::i;:::-;19211:248;;;;:::o;19728:616::-;20101:1;20092:5;:10;20091:62;;;;20151:1;20108:5;:15;;;20132:4;20139:7;20108:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;20091:62;20069:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;20246:90;20266:5;20296:22;;;20320:7;20329:5;20273:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20246:19;:90::i;:::-;19728:616;;;:::o;25516:213::-;24573:1;25699:7;:22;;;;25516:213::o;3378:191::-;3452:16;3471:6;;;;;;;;;;;3452:25;;3497:8;3488:6;;:17;;;;;;;;;;;;;;;;;;3552:8;3521:40;;3542:8;3521:40;;;;;;;;;;;;3441:128;3378:191;:::o;656:98::-;709:7;736:10;729:17;;656:98;:::o;22059:716::-;22483:23;22509:69;22537:4;22509:69;;;;;;;;;;;;;;;;;22517:5;22509:27;;;;:69;;;;;:::i;:::-;22483:95;;22613:1;22593:10;:17;:21;22589:179;;;22690:10;22679:30;;;;;;;;;;;;:::i;:::-;22671:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22589:179;22129:646;22059:716;;:::o;12834:229::-;12971:12;13003:52;13025:6;13033:4;13039:1;13042:12;13003:21;:52::i;:::-;12996:59;;12834:229;;;;;:::o;13954:455::-;14124:12;14182:5;14157:21;:30;;14149:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;14242:12;14256:23;14283:6;:11;;14302:5;14309:4;14283:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14241:73;;;;14332:69;14359:6;14367:7;14376:10;14388:12;14332:26;:69::i;:::-;14325:76;;;;13954:455;;;;;;:::o;16527:644::-;16712:12;16741:7;16737:427;;;16790:1;16769:10;:17;:22;16765:290;;16987:18;16998:6;16987:10;:18::i;:::-;16979:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;16765:290;17076:10;17069:17;;;;16737:427;17119:33;17127:10;17139:12;17119:7;:33::i;:::-;16527:644;;;;;;;:::o;10077:326::-;10137:4;10394:1;10372:7;:19;;;:23;10365:30;;10077:326;;;:::o;17713:552::-;17894:1;17874:10;:17;:21;17870:388;;;18106:10;18100:17;18163:15;18150:10;18146:2;18142:19;18135:44;17870:388;18233:12;18226:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:126:1;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:75::-;626:6;659:2;653:9;643:19;;593:75;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:474::-;1344:6;1352;1401:2;1389:9;1380:7;1376:23;1372:32;1369:119;;;1407:79;;:::i;:::-;1369:119;1527:1;1552:53;1597:7;1588:6;1577:9;1573:22;1552:53;:::i;:::-;1542:63;;1498:117;1654:2;1680:53;1725:7;1716:6;1705:9;1701:22;1680:53;:::i;:::-;1670:63;;1625:118;1276:474;;;;;:::o;1756:122::-;1829:24;1847:5;1829:24;:::i;:::-;1822:5;1819:35;1809:63;;1868:1;1865;1858:12;1809:63;1756:122;:::o;1884:139::-;1930:5;1968:6;1955:20;1946:29;;1984:33;2011:5;1984:33;:::i;:::-;1884:139;;;;:::o;2029:329::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:119;;;2143:79;;:::i;:::-;2105:119;2263:1;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2234:117;2029:329;;;;:::o;2364:118::-;2451:24;2469:5;2451:24;:::i;:::-;2446:3;2439:37;2364:118;;:::o;2488:222::-;2581:4;2619:2;2608:9;2604:18;2596:26;;2632:71;2700:1;2689:9;2685:17;2676:6;2632:71;:::i;:::-;2488:222;;;;:::o;2716:93::-;2752:7;2792:10;2785:5;2781:22;2770:33;;2716:93;;;:::o;2815:120::-;2887:23;2904:5;2887:23;:::i;:::-;2880:5;2877:34;2867:62;;2925:1;2922;2915:12;2867:62;2815:120;:::o;2941:137::-;2986:5;3024:6;3011:20;3002:29;;3040:32;3066:5;3040:32;:::i;:::-;2941:137;;;;:::o;3084:77::-;3121:7;3150:5;3139:16;;3084:77;;;:::o;3167:122::-;3240:24;3258:5;3240:24;:::i;:::-;3233:5;3230:35;3220:63;;3279:1;3276;3269:12;3220:63;3167:122;:::o;3295:139::-;3341:5;3379:6;3366:20;3357:29;;3395:33;3422:5;3395:33;:::i;:::-;3295:139;;;;:::o;3440:763::-;3525:6;3533;3541;3549;3598:3;3586:9;3577:7;3573:23;3569:33;3566:120;;;3605:79;;:::i;:::-;3566:120;3725:1;3750:53;3795:7;3786:6;3775:9;3771:22;3750:53;:::i;:::-;3740:63;;3696:117;3852:2;3878:52;3922:7;3913:6;3902:9;3898:22;3878:52;:::i;:::-;3868:62;;3823:117;3979:2;4005:53;4050:7;4041:6;4030:9;4026:22;4005:53;:::i;:::-;3995:63;;3950:118;4107:2;4133:53;4178:7;4169:6;4158:9;4154:22;4133:53;:::i;:::-;4123:63;;4078:118;3440:763;;;;;;;:::o;4209:327::-;4267:6;4316:2;4304:9;4295:7;4291:23;4287:32;4284:119;;;4322:79;;:::i;:::-;4284:119;4442:1;4467:52;4511:7;4502:6;4491:9;4487:22;4467:52;:::i;:::-;4457:62;;4413:116;4209:327;;;;:::o;4542:117::-;4651:1;4648;4641:12;4665:117;4774:1;4771;4764:12;4788:117;4897:1;4894;4887:12;4924:552;4981:8;4991:6;5041:3;5034:4;5026:6;5022:17;5018:27;5008:122;;5049:79;;:::i;:::-;5008:122;5162:6;5149:20;5139:30;;5192:18;5184:6;5181:30;5178:117;;;5214:79;;:::i;:::-;5178:117;5328:4;5320:6;5316:17;5304:29;;5382:3;5374:4;5366:6;5362:17;5352:8;5348:32;5345:41;5342:128;;;5389:79;;:::i;:::-;5342:128;4924:552;;;;;:::o;5482:1161::-;5590:6;5598;5606;5614;5622;5630;5679:3;5667:9;5658:7;5654:23;5650:33;5647:120;;;5686:79;;:::i;:::-;5647:120;5834:1;5823:9;5819:17;5806:31;5864:18;5856:6;5853:30;5850:117;;;5886:79;;:::i;:::-;5850:117;5999:64;6055:7;6046:6;6035:9;6031:22;5999:64;:::i;:::-;5981:82;;;;5777:296;6140:2;6129:9;6125:18;6112:32;6171:18;6163:6;6160:30;6157:117;;;6193:79;;:::i;:::-;6157:117;6306:64;6362:7;6353:6;6342:9;6338:22;6306:64;:::i;:::-;6288:82;;;;6083:297;6419:2;6445:53;6490:7;6481:6;6470:9;6466:22;6445:53;:::i;:::-;6435:63;;6390:118;6547:2;6573:53;6618:7;6609:6;6598:9;6594:22;6573:53;:::i;:::-;6563:63;;6518:118;5482:1161;;;;;;;;:::o;6649:329::-;6708:6;6757:2;6745:9;6736:7;6732:23;6728:32;6725:119;;;6763:79;;:::i;:::-;6725:119;6883:1;6908:53;6953:7;6944:6;6933:9;6929:22;6908:53;:::i;:::-;6898:63;;6854:117;6649:329;;;;:::o;6984:169::-;7068:11;7102:6;7097:3;7090:19;7142:4;7137:3;7133:14;7118:29;;6984:169;;;;:::o;7159:171::-;7299:23;7295:1;7287:6;7283:14;7276:47;7159:171;:::o;7336:366::-;7478:3;7499:67;7563:2;7558:3;7499:67;:::i;:::-;7492:74;;7575:93;7664:3;7575:93;:::i;:::-;7693:2;7688:3;7684:12;7677:19;;7336:366;;;:::o;7708:419::-;7874:4;7912:2;7901:9;7897:18;7889:26;;7961:9;7955:4;7951:20;7947:1;7936:9;7932:17;7925:47;7989:131;8115:4;7989:131;:::i;:::-;7981:139;;7708:419;;;:::o;8133:180::-;8181:77;8178:1;8171:88;8278:4;8275:1;8268:15;8302:4;8299:1;8292:15;8319:194;8359:4;8379:20;8397:1;8379:20;:::i;:::-;8374:25;;8413:20;8431:1;8413:20;:::i;:::-;8408:25;;8457:1;8454;8450:9;8442:17;;8481:1;8475:4;8472:11;8469:37;;;8486:18;;:::i;:::-;8469:37;8319:194;;;;:::o;8519:115::-;8604:23;8621:5;8604:23;:::i;:::-;8599:3;8592:36;8519:115;;:::o;8640:118::-;8727:24;8745:5;8727:24;:::i;:::-;8722:3;8715:37;8640:118;;:::o;8764:549::-;8939:4;8977:3;8966:9;8962:19;8954:27;;8991:71;9059:1;9048:9;9044:17;9035:6;8991:71;:::i;:::-;9072:70;9138:2;9127:9;9123:18;9114:6;9072:70;:::i;:::-;9152:72;9220:2;9209:9;9205:18;9196:6;9152:72;:::i;:::-;9234;9302:2;9291:9;9287:18;9278:6;9234:72;:::i;:::-;8764:549;;;;;;;:::o;9319:660::-;9522:4;9560:3;9549:9;9545:19;9537:27;;9574:71;9642:1;9631:9;9627:17;9618:6;9574:71;:::i;:::-;9655:70;9721:2;9710:9;9706:18;9697:6;9655:70;:::i;:::-;9735:72;9803:2;9792:9;9788:18;9779:6;9735:72;:::i;:::-;9817;9885:2;9874:9;9870:18;9861:6;9817:72;:::i;:::-;9899:73;9967:3;9956:9;9952:19;9943:6;9899:73;:::i;:::-;9319:660;;;;;;;;:::o;9985:181::-;10125:33;10121:1;10113:6;10109:14;10102:57;9985:181;:::o;10172:366::-;10314:3;10335:67;10399:2;10394:3;10335:67;:::i;:::-;10328:74;;10411:93;10500:3;10411:93;:::i;:::-;10529:2;10524:3;10520:12;10513:19;;10172:366;;;:::o;10544:419::-;10710:4;10748:2;10737:9;10733:18;10725:26;;10797:9;10791:4;10787:20;10783:1;10772:9;10768:17;10761:47;10825:131;10951:4;10825:131;:::i;:::-;10817:139;;10544:419;;;:::o;10969:108::-;11046:24;11064:5;11046:24;:::i;:::-;11041:3;11034:37;10969:108;;:::o;11133:528::-;11288:4;11283:3;11279:14;11381:4;11374:5;11370:16;11364:23;11400:63;11457:4;11452:3;11448:14;11434:12;11400:63;:::i;:::-;11303:170;11562:4;11555:5;11551:16;11545:23;11581:63;11638:4;11633:3;11629:14;11615:12;11581:63;:::i;:::-;11483:171;11257:404;11133:528;;:::o;11667:338::-;11818:4;11856:2;11845:9;11841:18;11833:26;;11869:129;11995:1;11984:9;11980:17;11971:6;11869:129;:::i;:::-;11667:338;;;;:::o;12011:117::-;12120:1;12117;12110:12;12134:102;12175:6;12226:2;12222:7;12217:2;12210:5;12206:14;12202:28;12192:38;;12134:102;;;:::o;12242:180::-;12290:77;12287:1;12280:88;12387:4;12384:1;12377:15;12411:4;12408:1;12401:15;12428:281;12511:27;12533:4;12511:27;:::i;:::-;12503:6;12499:40;12641:6;12629:10;12626:22;12605:18;12593:10;12590:34;12587:62;12584:88;;;12652:18;;:::i;:::-;12584:88;12692:10;12688:2;12681:22;12471:238;12428:281;;:::o;12715:129::-;12749:6;12776:20;;:::i;:::-;12766:30;;12805:33;12833:4;12825:6;12805:33;:::i;:::-;12715:129;;;:::o;12973:143::-;13030:5;13061:6;13055:13;13046:22;;13077:33;13104:5;13077:33;:::i;:::-;12973:143;;;;:::o;13150:623::-;13240:5;13284:4;13272:9;13267:3;13263:19;13259:30;13256:117;;;13292:79;;:::i;:::-;13256:117;13391:21;13407:4;13391:21;:::i;:::-;13382:30;;13478:1;13518:60;13574:3;13565:6;13554:9;13550:22;13518:60;:::i;:::-;13511:4;13504:5;13500:16;13493:86;13422:168;13653:2;13694:60;13750:3;13741:6;13730:9;13726:22;13694:60;:::i;:::-;13687:4;13680:5;13676:16;13669:86;13600:166;13150:623;;;;:::o;13779:411::-;13879:6;13928:2;13916:9;13907:7;13903:23;13899:32;13896:119;;;13934:79;;:::i;:::-;13896:119;14054:1;14079:94;14165:7;14156:6;14145:9;14141:22;14079:94;:::i;:::-;14069:104;;14025:158;13779:411;;;;:::o;14196:168::-;14279:11;14313:6;14308:3;14301:19;14353:4;14348:3;14344:14;14329:29;;14196:168;;;;:::o;14370:146::-;14467:6;14462:3;14457;14444:30;14508:1;14499:6;14494:3;14490:16;14483:27;14370:146;;;:::o;14544:314::-;14640:3;14661:70;14724:6;14719:3;14661:70;:::i;:::-;14654:77;;14741:56;14790:6;14785:3;14778:5;14741:56;:::i;:::-;14822:29;14844:6;14822:29;:::i;:::-;14817:3;14813:39;14806:46;;14544:314;;;;;:::o;14864:546::-;15041:4;15079:2;15068:9;15064:18;15056:26;;15128:9;15122:4;15118:20;15114:1;15103:9;15099:17;15092:47;15156:86;15237:4;15228:6;15220;15156:86;:::i;:::-;15148:94;;15289:9;15283:4;15279:20;15274:2;15263:9;15259:18;15252:48;15317:86;15398:4;15389:6;15381;15317:86;:::i;:::-;15309:94;;14864:546;;;;;;;:::o;15416:332::-;15537:4;15575:2;15564:9;15560:18;15552:26;;15588:71;15656:1;15645:9;15641:17;15632:6;15588:71;:::i;:::-;15669:72;15737:2;15726:9;15722:18;15713:6;15669:72;:::i;:::-;15416:332;;;;;:::o;15754:225::-;15894:34;15890:1;15882:6;15878:14;15871:58;15963:8;15958:2;15950:6;15946:15;15939:33;15754:225;:::o;15985:366::-;16127:3;16148:67;16212:2;16207:3;16148:67;:::i;:::-;16141:74;;16224:93;16313:3;16224:93;:::i;:::-;16342:2;16337:3;16333:12;16326:19;;15985:366;;;:::o;16357:419::-;16523:4;16561:2;16550:9;16546:18;16538:26;;16610:9;16604:4;16600:20;16596:1;16585:9;16581:17;16574:47;16638:131;16764:4;16638:131;:::i;:::-;16630:139;;16357:419;;;:::o;16782:182::-;16922:34;16918:1;16910:6;16906:14;16899:58;16782:182;:::o;16970:366::-;17112:3;17133:67;17197:2;17192:3;17133:67;:::i;:::-;17126:74;;17209:93;17298:3;17209:93;:::i;:::-;17327:2;17322:3;17318:12;17311:19;;16970:366;;;:::o;17342:419::-;17508:4;17546:2;17535:9;17531:18;17523:26;;17595:9;17589:4;17585:20;17581:1;17570:9;17566:17;17559:47;17623:131;17749:4;17623:131;:::i;:::-;17615:139;;17342:419;;;:::o;17767:181::-;17907:33;17903:1;17895:6;17891:14;17884:57;17767:181;:::o;17954:366::-;18096:3;18117:67;18181:2;18176:3;18117:67;:::i;:::-;18110:74;;18193:93;18282:3;18193:93;:::i;:::-;18311:2;18306:3;18302:12;18295:19;;17954:366;;;:::o;18326:419::-;18492:4;18530:2;18519:9;18515:18;18507:26;;18579:9;18573:4;18569:20;18565:1;18554:9;18550:17;18543:47;18607:131;18733:4;18607:131;:::i;:::-;18599:139;;18326:419;;;:::o;18751:179::-;18891:31;18887:1;18879:6;18875:14;18868:55;18751:179;:::o;18936:366::-;19078:3;19099:67;19163:2;19158:3;19099:67;:::i;:::-;19092:74;;19175:93;19264:3;19175:93;:::i;:::-;19293:2;19288:3;19284:12;19277:19;;18936:366;;;:::o;19308:419::-;19474:4;19512:2;19501:9;19497:18;19489:26;;19561:9;19555:4;19551:20;19547:1;19536:9;19532:17;19525:47;19589:131;19715:4;19589:131;:::i;:::-;19581:139;;19308:419;;;:::o;19733:147::-;19834:11;19871:3;19856:18;;19733:147;;;;:::o;19886:114::-;;:::o;20006:398::-;20165:3;20186:83;20267:1;20262:3;20186:83;:::i;:::-;20179:90;;20278:93;20367:3;20278:93;:::i;:::-;20396:1;20391:3;20387:11;20380:18;;20006:398;;;:::o;20410:379::-;20594:3;20616:147;20759:3;20616:147;:::i;:::-;20609:154;;20780:3;20773:10;;20410:379;;;:::o;20795:245::-;20935:34;20931:1;20923:6;20919:14;20912:58;21004:28;20999:2;20991:6;20987:15;20980:53;20795:245;:::o;21046:366::-;21188:3;21209:67;21273:2;21268:3;21209:67;:::i;:::-;21202:74;;21285:93;21374:3;21285:93;:::i;:::-;21403:2;21398:3;21394:12;21387:19;;21046:366;;;:::o;21418:419::-;21584:4;21622:2;21611:9;21607:18;21599:26;;21671:9;21665:4;21661:20;21657:1;21646:9;21642:17;21635:47;21699:131;21825:4;21699:131;:::i;:::-;21691:139;;21418:419;;;:::o;21843:442::-;21992:4;22030:2;22019:9;22015:18;22007:26;;22043:71;22111:1;22100:9;22096:17;22087:6;22043:71;:::i;:::-;22124:72;22192:2;22181:9;22177:18;22168:6;22124:72;:::i;:::-;22206;22274:2;22263:9;22259:18;22250:6;22206:72;:::i;:::-;21843:442;;;;;;:::o;22291:332::-;22412:4;22450:2;22439:9;22435:18;22427:26;;22463:71;22531:1;22520:9;22516:17;22507:6;22463:71;:::i;:::-;22544:72;22612:2;22601:9;22597:18;22588:6;22544:72;:::i;:::-;22291:332;;;;;:::o;22629:351::-;22699:6;22748:2;22736:9;22727:7;22723:23;22719:32;22716:119;;;22754:79;;:::i;:::-;22716:119;22874:1;22899:64;22955:7;22946:6;22935:9;22931:22;22899:64;:::i;:::-;22889:74;;22845:128;22629:351;;;;:::o;22986:241::-;23126:34;23122:1;23114:6;23110:14;23103:58;23195:24;23190:2;23182:6;23178:15;23171:49;22986:241;:::o;23233:366::-;23375:3;23396:67;23460:2;23455:3;23396:67;:::i;:::-;23389:74;;23472:93;23561:3;23472:93;:::i;:::-;23590:2;23585:3;23581:12;23574:19;;23233:366;;;:::o;23605:419::-;23771:4;23809:2;23798:9;23794:18;23786:26;;23858:9;23852:4;23848:20;23844:1;23833:9;23829:17;23822:47;23886:131;24012:4;23886:131;:::i;:::-;23878:139;;23605:419;;;:::o;24030:332::-;24151:4;24189:2;24178:9;24174:18;24166:26;;24202:71;24270:1;24259:9;24255:17;24246:6;24202:71;:::i;:::-;24283:72;24351:2;24340:9;24336:18;24327:6;24283:72;:::i;:::-;24030:332;;;;;:::o;24368:90::-;24402:7;24445:5;24438:13;24431:21;24420:32;;24368:90;;;:::o;24464:116::-;24534:21;24549:5;24534:21;:::i;:::-;24527:5;24524:32;24514:60;;24570:1;24567;24560:12;24514:60;24464:116;:::o;24586:137::-;24640:5;24671:6;24665:13;24656:22;;24687:30;24711:5;24687:30;:::i;:::-;24586:137;;;;:::o;24729:345::-;24796:6;24845:2;24833:9;24824:7;24820:23;24816:32;24813:119;;;24851:79;;:::i;:::-;24813:119;24971:1;24996:61;25049:7;25040:6;25029:9;25025:22;24996:61;:::i;:::-;24986:71;;24942:125;24729:345;;;;:::o;25080:229::-;25220:34;25216:1;25208:6;25204:14;25197:58;25289:12;25284:2;25276:6;25272:15;25265:37;25080:229;:::o;25315:366::-;25457:3;25478:67;25542:2;25537:3;25478:67;:::i;:::-;25471:74;;25554:93;25643:3;25554:93;:::i;:::-;25672:2;25667:3;25663:12;25656:19;;25315:366;;;:::o;25687:419::-;25853:4;25891:2;25880:9;25876:18;25868:26;;25940:9;25934:4;25930:20;25926:1;25915:9;25911:17;25904:47;25968:131;26094:4;25968:131;:::i;:::-;25960:139;;25687:419;;;:::o;26112:225::-;26252:34;26248:1;26240:6;26236:14;26229:58;26321:8;26316:2;26308:6;26304:15;26297:33;26112:225;:::o;26343:366::-;26485:3;26506:67;26570:2;26565:3;26506:67;:::i;:::-;26499:74;;26582:93;26671:3;26582:93;:::i;:::-;26700:2;26695:3;26691:12;26684:19;;26343:366;;;:::o;26715:419::-;26881:4;26919:2;26908:9;26904:18;26896:26;;26968:9;26962:4;26958:20;26954:1;26943:9;26939:17;26932:47;26996:131;27122:4;26996:131;:::i;:::-;26988:139;;26715:419;;;:::o;27140:98::-;27191:6;27225:5;27219:12;27209:22;;27140:98;;;:::o;27244:246::-;27325:1;27335:113;27349:6;27346:1;27343:13;27335:113;;;27434:1;27429:3;27425:11;27419:18;27415:1;27410:3;27406:11;27399:39;27371:2;27368:1;27364:10;27359:15;;27335:113;;;27482:1;27473:6;27468:3;27464:16;27457:27;27306:184;27244:246;;;:::o;27496:386::-;27600:3;27628:38;27660:5;27628:38;:::i;:::-;27682:88;27763:6;27758:3;27682:88;:::i;:::-;27675:95;;27779:65;27837:6;27832:3;27825:4;27818:5;27814:16;27779:65;:::i;:::-;27869:6;27864:3;27860:16;27853:23;;27604:278;27496:386;;;;:::o;27888:271::-;28018:3;28040:93;28129:3;28120:6;28040:93;:::i;:::-;28033:100;;28150:3;28143:10;;27888:271;;;;:::o;28165:179::-;28305:31;28301:1;28293:6;28289:14;28282:55;28165:179;:::o;28350:366::-;28492:3;28513:67;28577:2;28572:3;28513:67;:::i;:::-;28506:74;;28589:93;28678:3;28589:93;:::i;:::-;28707:2;28702:3;28698:12;28691:19;;28350:366;;;:::o;28722:419::-;28888:4;28926:2;28915:9;28911:18;28903:26;;28975:9;28969:4;28965:20;28961:1;28950:9;28946:17;28939:47;29003:131;29129:4;29003:131;:::i;:::-;28995:139;;28722:419;;;:::o;29147:99::-;29199:6;29233:5;29227:12;29217:22;;29147:99;;;:::o;29252:377::-;29340:3;29368:39;29401:5;29368:39;:::i;:::-;29423:71;29487:6;29482:3;29423:71;:::i;:::-;29416:78;;29503:65;29561:6;29556:3;29549:4;29542:5;29538:16;29503:65;:::i;:::-;29593:29;29615:6;29593:29;:::i;:::-;29588:3;29584:39;29577:46;;29344:285;29252:377;;;;:::o;29635:313::-;29748:4;29786:2;29775:9;29771:18;29763:26;;29835:9;29829:4;29825:20;29821:1;29810:9;29806:17;29799:47;29863:78;29936:4;29927:6;29863:78;:::i;:::-;29855:86;;29635:313;;;;:::o
Swarm Source
ipfs://5dc88860835dccf4347fc8607d399256b43dea54499cd55ea52b15aa56db50b5
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.