ETH Price: $2,708.37 (-2.09%)

Token

SY ether.fi weETH (SY-weETH)
 

Overview

Max Total Supply

13,101.681563725668959867 SY-weETH

Holders

3,471 ( -0.086%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
cryptokucherov.eth
Balance
0.011400827445126598 SY-weETH

Value
$0.00
0x8C7DECa819F7f023AE9C2d486393525681d67aEd
Loading...
Loading
Loading...
Loading

OVERVIEW

Pendle is essentially a protocol for tokenizing yield and an AMM for trading tokenized yield and other time-decaying assets.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PendleWEEthSY

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
berlin EvmVersion
File 1 of 35 : PendleWEEthSY.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.23;
import "../../SYBase.sol";
import "../../../../interfaces/EtherFi/IEtherFiLiquidityPool.sol";
import "../../../../interfaces/EtherFi/IEtherFiWEEth.sol";
contract PendleWEEthSY is SYBase {
using PMath for int256;
address public immutable weETH;
address public immutable liquidityPool;
address public immutable eETH;
address public immutable referee;
constructor(address _weETH, address _referee) SYBase("SY ether.fi weETH", "SY-weETH", _weETH) {
weETH = _weETH;
liquidityPool = IEtherFiWEEth(_weETH).liquidityPool();
eETH = IEtherFiWEEth(_weETH).eETH();
referee = _referee;
_safeApproveInf(eETH, weETH);
}
/*///////////////////////////////////////////////////////////////
DEPOSIT/REDEEM USING BASE TOKENS
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 35 : Initializable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.2;
import "../../utils/AddressUpgradeable.sol";
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 35 : AddressUpgradeable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library AddressUpgradeable {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 35 : IERC5267.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (interfaces/IERC5267.sol)
pragma solidity ^0.8.0;
interface IERC5267 {
/**
* @dev MAY be emitted to signal that the domain could have changed.
*/
event EIP712DomainChanged();
/**
* @dev returns the fields and values that describe the domain separator used by this contract for EIP-712
* signature.
*/
function eip712Domain()
external
view
returns (
bytes1 fields,
string memory name,
string memory version,
uint256 chainId,
address verifyingContract,
bytes32 salt,
uint256[] memory extensions
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 35 : Pausable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 35 : ERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 35 : draft-ERC20Permit.sol
1
2
3
4
5
6
7
8
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/draft-ERC20Permit.sol)
pragma solidity ^0.8.0;
// EIP-2612 is Final as of 2022-11-01. This file is deprecated.
import "./ERC20Permit.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 35 : ERC20Permit.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/ERC20Permit.sol)
pragma solidity ^0.8.0;
import "./IERC20Permit.sol";
import "../ERC20.sol";
import "../../../utils/cryptography/ECDSA.sol";
import "../../../utils/cryptography/EIP712.sol";
import "../../../utils/Counters.sol";
/**
* @dev Implementation 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.
*
* _Available since v3.4._
*/
abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
using Counters for Counters.Counter;
mapping(address => Counters.Counter) private _nonces;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 35 : IERC20Metadata.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 35 : IERC20Permit.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/extensions/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.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 35 : IERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 35 : SafeERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.3) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/IERC20Permit.sol";
import "../../../utils/Address.sol";
/**
* @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;
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 35 : Address.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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
*
* Furthermore, `isContract` will also return true if the target contract within
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 35 : Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 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;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 35 : Counters.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 35 : draft-EIP712.sol
1
2
3
4
5
6
7
8
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/draft-EIP712.sol)
pragma solidity ^0.8.0;
// EIP-712 is Final as of 2022-08-11. This file is deprecated.
import "./EIP712.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 35 : ECDSA.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.0;
import "../Strings.sol";
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS,
InvalidSignatureV // Deprecated in v4.8
}
function _throwError(RecoverError error) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 35 : EIP712.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/EIP712.sol)
pragma solidity ^0.8.8;
import "./ECDSA.sol";
import "../ShortStrings.sol";
import "../../interfaces/IERC5267.sol";
/**
* @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
*
* The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
* thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
* they need in their contracts using a combination of `abi.encode` and `keccak256`.
*
* This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
* scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
* ({_hashTypedDataV4}).
*
* The implementation of the domain separator was designed to be as efficient as possible while still properly updating
* the chain id to protect against replay attacks on an eventual fork of the chain.
*
* NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
* https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 35 : Math.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 35 : SignedMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 35 : ShortStrings.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/ShortStrings.sol)
pragma solidity ^0.8.8;
import "./StorageSlot.sol";
// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
// | length | 0x BB |
type ShortString is bytes32;
/**
* @dev This library provides functions to convert short memory strings
* into a `ShortString` type that can be used as an immutable variable.
*
* Strings of arbitrary length can be optimized using this library if
* they are short enough (up to 31 bytes) by packing them with their
* length (1 byte) in a single EVM word (32 bytes). Additionally, a
* fallback mechanism can be used for every other case.
*
* Usage example:
*
* ```solidity
* contract Named {
* using ShortStrings for *;
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 35 : StorageSlot.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/StorageSlot.sol)
// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.
pragma solidity ^0.8.0;
/**
* @dev Library for reading and writing primitive types to specific storage slots.
*
* Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.
* This library helps with reading and writing to such slots without the need for inline assembly.
*
* The functions in this library return Slot structs that contain a `value` member that can be used to read or write.
*
* Example usage to set ERC1967 implementation slot:
* ```solidity
* contract ERC1967 {
* bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
*
* function _getImplementation() internal view returns (address) {
* return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;
* }
*
* function _setImplementation(address newImplementation) internal {
* require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract");
* StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 35 : Strings.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
import "./math/Math.sol";
import "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 35 : PendleERC20.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/Context.sol";
/**
* @dev Pendle's ERC20 implementation, modified from @openzeppelin implementation
* Changes are:
* - comes with built-in reentrancy protection, storage-packed with totalSupply variable
* - delete increaseAllowance / decreaseAllowance
* - add nonReentrancy protection to transfer / transferFrom functions
* - allow decimals to be passed in
* - block self-transfer by default
*/
// solhint-disable
contract PendleERC20 is Context, IERC20, IERC20Metadata {
uint8 private constant _NOT_ENTERED = 1;
uint8 private constant _ENTERED = 2;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 35 : PendleERC20Permit.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./PendleERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";
import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol";
import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
/// @dev forked from OZ's ERC20Permit
contract PendleERC20Permit is PendleERC20, IERC20Permit, EIP712 {
using Counters for Counters.Counter;
mapping(address => Counters.Counter) private _nonces;
// solhint-disable-next-line var-name-mixedcase
bytes32 private constant _PERMIT_TYPEHASH =
keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
constructor(
string memory name_,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 35 : ArrayLib.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
library ArrayLib {
function sum(uint256[] memory input) internal pure returns (uint256) {
uint256 value = 0;
for (uint256 i = 0; i < input.length; ) {
value += input[i];
unchecked {
i++;
}
}
return value;
}
/// @notice return index of the element if found, else return uint256.max
function find(address[] memory array, address element) internal pure returns (uint256 index) {
uint256 length = array.length;
for (uint256 i = 0; i < length; ) {
if (array[i] == element) return i;
unchecked {
i++;
}
}
return type(uint256).max;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 35 : BoringOwnableUpgradeable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
contract BoringOwnableUpgradeableData {
address public owner;
address public pendingOwner;
}
abstract contract BoringOwnableUpgradeable is BoringOwnableUpgradeableData, Initializable {
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
function __BoringOwnable_init() internal onlyInitializing {
owner = msg.sender;
}
/// @notice Transfers ownership to `newOwner`. Either directly or claimable by the new pending owner.
/// Can only be invoked by the current `owner`.
/// @param newOwner Address of the new owner.
/// @param direct True if `newOwner` should be set immediately. False if `newOwner` needs to use `claimOwnership`.
/// @param renounce Allows the `newOwner` to be `address(0)` if `direct` and `renounce` is True. Has no effect otherwise.
function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner {
if (direct) {
// Checks
require(newOwner != address(0) || renounce, "Ownable: zero address");
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 35 : Errors.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
library Errors {
// BulkSeller
error BulkInsufficientSyForTrade(uint256 currentAmount, uint256 requiredAmount);
error BulkInsufficientTokenForTrade(uint256 currentAmount, uint256 requiredAmount);
error BulkInSufficientSyOut(uint256 actualSyOut, uint256 requiredSyOut);
error BulkInSufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut);
error BulkInsufficientSyReceived(uint256 actualBalance, uint256 requiredBalance);
error BulkNotMaintainer();
error BulkNotAdmin();
error BulkSellerAlreadyExisted(address token, address SY, address bulk);
error BulkSellerInvalidToken(address token, address SY);
error BulkBadRateTokenToSy(uint256 actualRate, uint256 currentRate, uint256 eps);
error BulkBadRateSyToToken(uint256 actualRate, uint256 currentRate, uint256 eps);
// APPROX
error ApproxFail();
error ApproxParamsInvalid(uint256 guessMin, uint256 guessMax, uint256 eps);
error ApproxBinarySearchInputInvalid(
uint256 approxGuessMin,
uint256 approxGuessMax,
uint256 minGuessMin,
uint256 maxGuessMax
);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 29 of 35 : PMath.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pragma solidity ^0.8.0;
/* solhint-disable private-vars-leading-underscore, reason-string */
library PMath {
uint256 internal constant ONE = 1e18; // 18 decimal places
int256 internal constant IONE = 1e18; // 18 decimal places
function subMax0(uint256 a, uint256 b) internal pure returns (uint256) {
unchecked {
return (a >= b ? a - b : 0);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 30 of 35 : TokenHelper.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "../../interfaces/IWETH.sol";
abstract contract TokenHelper {
using SafeERC20 for IERC20;
address internal constant NATIVE = address(0);
uint256 internal constant LOWER_BOUND_APPROVAL = type(uint96).max / 2; // some tokens use 96 bits for approval
function _transferIn(address token, address from, uint256 amount) internal {
if (token == NATIVE) require(msg.value == amount, "eth mismatch");
else if (amount != 0) IERC20(token).safeTransferFrom(from, address(this), amount);
}
function _transferFrom(IERC20 token, address from, address to, uint256 amount) internal {
if (amount != 0) token.safeTransferFrom(from, to, amount);
}
function _transferOut(address token, address to, uint256 amount) internal {
if (amount == 0) return;
if (token == NATIVE) {
(bool success, ) = to.call{value: amount}("");
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 31 of 35 : SYBase.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
import "../../interfaces/IStandardizedYield.sol";
import "../erc20/PendleERC20Permit.sol";
import "../libraries/math/PMath.sol";
import "../libraries/TokenHelper.sol";
import "../libraries/ArrayLib.sol";
import "../libraries/Errors.sol";
import "../libraries/BoringOwnableUpgradeable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
abstract contract SYBase is IStandardizedYield, PendleERC20Permit, TokenHelper, BoringOwnableUpgradeable, Pausable {
using PMath for uint256;
address public immutable yieldToken;
constructor(
string memory _name,
string memory _symbol,
address _yieldToken
) PendleERC20Permit(_name, _symbol, IERC20Metadata(_yieldToken).decimals()) initializer {
yieldToken = _yieldToken;
__BoringOwnable_init();
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 32 of 35 : IEtherFiLiquidityPool.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IEtherFiLiquidityPool {
function totalValueOutOfLp() external view returns (uint128);
function totalValueInLp() external view returns (uint128);
function getTotalEtherClaimOf(address _user) external view returns (uint256);
function getTotalPooledEther() external view returns (uint256);
function sharesForAmount(uint256 _amount) external view returns (uint256);
function sharesForWithdrawalAmount(uint256 _amount) external view returns (uint256);
function amountForShare(uint256 _share) external view returns (uint256);
// function deposit() external payable returns (uint256);
function deposit(address _referral) external payable returns (uint256);
// function deposit(address _user, address _referral) external payable returns (uint256);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 33 of 35 : IEtherFiWEEth.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IEtherFiWEEth {
function wrap(uint256 _eETHAmount) external returns (uint256);
function unwrap(uint256 _weETHAmount) external returns (uint256);
function eETH() external view returns (address);
function liquidityPool() external view returns (address);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 34 of 35 : IStandardizedYield.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
/*
* MIT License
* ===========
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 35 of 35 : IWETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
/*
* MIT License
* ===========
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"optimizer": {
"enabled": true,
"runs": 1000000
},
"viaIR": true,
"evmVersion": "berlin",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_weETH","type":"address"},{"internalType":"address","name":"_referee","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"uint256","name":"actualSharesOut","type":"uint256"},{"internalType":"uint256","name":"requiredSharesOut","type":"uint256"}],"name":"SYInsufficientSharesOut","type":"error"},{"inputs":[{"internalType":"uint256","name":"actualTokenOut","type":"uint256"},{"internalType":"uint256","name":"requiredTokenOut","type":"uint256"}],"name":"SYInsufficientTokenOut","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SYInvalidTokenIn","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SYInvalidTokenOut","type":"error"},{"inputs":[],"name":"SYZeroDeposit","type":"error"},{"inputs":[],"name":"SYZeroRedeem","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address[]","name":"rewardTokens","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"rewardAmounts","type":"uint256[]"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountDeposited","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountSyOut","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountSyToRedeem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokenOut","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"accruedRewards","outputs":[{"internalType":"uint256[]","name":"rewardAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"assetInfo","outputs":[{"internalType":"enum IStandardizedYield.AssetType","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimRewards","outputs":[{"internalType":"uint256[]","name":"rewardAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountTokenToDeposit","type":"uint256"},{"internalType":"uint256","name":"minSharesOut","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"amountSharesOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"eETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exchangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardTokens","outputs":[{"internalType":"address[]","name":"rewardTokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensIn","outputs":[{"internalType":"address[]","name":"res","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensOut","outputs":[{"internalType":"address[]","name":"res","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isValidTokenIn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isValidTokenOut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountTokenToDeposit","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"amountSharesOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountSharesToRedeem","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"amountTokenOut","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amountSharesToRedeem","type":"uint256"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minTokenOut","type":"uint256"},{"internalType":"bool","name":"burnFromInternalBalance","type":"bool"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"amountTokenOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardIndexesCurrent","outputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardIndexesStored","outputs":[{"internalType":"uint256[]","name":"indexes","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6102208060405234620004c657604081620047f58038038091620000248285620008e0565b833981010312620004c657620000486020620000408362000904565b920162000904565b90604051916200005883620008a8565b6011835260208301700a6b240cae8d0cae45cccd240eeca8aa89607b1b8152604051906200008682620008a8565b60088252670a6b25aeeca8aa8960c31b60208084019190915260405163313ce56760e01b81529590866004816001600160a01b0389165afa958615620004d4576000966200085a575b5060405195620000df87620008a8565b60018752603160f81b60208801908152825190946001600160401b03821162000664576003805492600184811c941680156200084f575b60208510146200077057601f9384811162000805575b508060208582116001146200079d5760009162000791575b508160011b9160001990841b1c19161781555b8151926001600160401b038411620006645760045492600184811c9416801562000786575b60208510146200077057838286951162000714575b50602091841160011462000686576000936200067a575b50508260011b92600019911b1c1916176004555b608052600280546001600160f81b0316600160f81b179055620001df8162000bb1565b61014052620001ee8662000d75565b6101605251902093846101005251902080610120524660c052604051937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020860152604085015260608401524660808401523060a084015260a083528260c081011060018060401b0360c085011117620006645760c083016040528251602084012060a0523060e05260ff19603a5416603a5560095460ff8160a81c16159384809562000653575b801562000637575b15620005d7575060ff60a01b198116600160a01b1760095583620005be575b50610180928284526009549060ff8260a81c16156200056557600880546001600160a01b0319163317905562000527575b506101a082815260405163332d08e560e11b815290926020826004816001600160a01b0385165afa918215620004d457600092620004e0575b506101c09182526040516306f1b8f160e11b81529190602090839060049082906001600160a01b03165afa918215620004d4576000926200048b575b506101e0828152610200938452845190926200038d916001600160a01b03908116911662000935565b604051936138c7958662000f2e8739608051866114e7015260a05186612c0f015260c05186612cdb015260e05186612be001526101005186612c5e01526101205186612c8401526101405186610a6201526101605186610a8f01525185610ccb01525184818161064601528181610dea01528181611745015281816118c701528181612138015281816126ca01528181613125015261320f0152518381816110840152818161138901528181611c5701528181613186015261327001525182818161087d01528181611773015281816118f101528181611ebb015281816121660152818161269a015261271f0152518181816114500152611c290152f35b9091506020813d602011620004cb575b81620004aa60209383620008e0565b81010312620004c657620004be9062000904565b903862000364565b600080fd5b3d91506200049b565b6040513d6000823e3d90fd5b91506020823d6020116200051e575b81620004fe60209383620008e0565b81010312620004c65760206200051660049362000904565b925062000328565b3d9150620004ef565b60ff60a81b1916600955604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a138620002ef565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b61ffff60a01b191661010160a01b1760095538620002be565b60c060849162461bcd60e51b82820152602060c4820152602e60e48201527f496e697469616c697a61626c653a20636f6e747261637420697320616c7265616101048201526d191e481a5b9a5d1a585b1a5e995960921b61012482015201fd5b50303b1580156200029f5750600160ff8360a01c16146200029f565b50600160ff8360a01c161062000297565b634e487b7160e01b600052604160045260246000fd5b015191503880620001a8565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9450601f198616905b818110620006fb575090856001969594939210620006e0575b50505050811b01600455620001bc565b01519060f884600019921b161c1916905538808080620006d0565b92946020600181928886015181550196019301620006b7565b9091929350600460005260206000208380870160051c8201926020881062000766575b9487969594939291940160051c01905b81811062000756575062000191565b6000815586955060010162000747565b9250819262000737565b634e487b7160e01b600052602260045260246000fd5b93607f16936200017c565b90508601513862000144565b6000848152602081209250601f198416905b818110620007ec57509083600194939210620007d3575b5050811b01815562000157565b88015160001983861b60f8161c191690553880620007c6565b9192602060018192868d015181550194019201620007af565b8260005260206000208580840160051c8201926020851062000845575b0160051c01905b8181106200083857506200012c565b6000815560010162000829565b9250819262000822565b93607f169362000116565b6020969196813d6020116200089f575b816200087960209383620008e0565b810103126200089b57519060ff821682036200089857509438620000cf565b80fd5b5080fd5b3d91506200086a565b604081019081106001600160401b038211176200066457604052565b608081019081106001600160401b038211176200066457604052565b601f909101601f19168101906001600160401b038211908210176200066457604052565b51906001600160a01b0382168203620004c657565b6001600160401b0381116200066457601f01601f191660200190565b6001600160a01b03919082811690811562000bab57604091825180958195636eb1769f60e11b83523060048401521691826024830152602096879160449788915afa90811562000ba05760009162000b6d575b5060016001605f1b03116200099f575b5050505050565b82519060008087840163095ea7b360e01b948582528460248201528289820152888152620009cd81620008c4565b519082875af13d1562000b65573d620009e68162000919565b90620009f587519283620008e0565b81523d60008983013e5b8162000b27575b501562000af5579160009291838093865190898201938452602482015281198882015287815262000a3781620008c4565b51925af13d1562000aed573d62000a4e8162000919565b9062000a5d84519283620008e0565b81523d60008683013e5b8162000aaf575b501562000a7d57808062000998565b5162461bcd60e51b81526004810192909252600c60248301526b5361666520417070726f766560a01b90820152606490fd5b8091505184811591821562000aca575b505090503862000a6e565b8380929350010312620004c6578301518015158103620004c65780843862000abf565b606062000a67565b835162461bcd60e51b815260048101879052600c60248201526b5361666520417070726f766560a01b81870152606490fd5b8091505187811591821562000b42575b505090503862000a06565b8380929350010312620004c6578601518015158103620004c65780873862000b37565b6060620009ff565b90508581813d831162000b98575b62000b878183620008e0565b81010312620004c657513862000988565b503d62000b7b565b84513d6000823e3d90fd5b50505050565b8051602091908281101562000c50575090601f82511162000bef578082519201519080831062000be057501790565b82600019910360031b1b161790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b82851062000c36575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935062000c12565b6001600160401b03811162000664576005928354926001938481811c9116801562000d6a575b838210146200077057601f811162000d33575b5081601f841160011462000cc9575092829391839260009462000cbd575b50501b916000199060031b1c191617905560ff90565b01519250388062000ca7565b919083601f1981168760005284600020946000905b8883831062000d18575050501062000cfe575b505050811b01905560ff90565b015160001960f88460031b161c1916905538808062000cf1565b85870151885590960195948501948793509081019062000cde565b8560005284601f846000209201871c820191601f8601881c015b82811062000d5d57505062000c89565b6000815501859062000d4d565b90607f169062000c76565b80516020908181101562000e035750601f82511162000da2578082519201519080831062000be057501790565b90604051809263305a27a960e01b82528060048301528251908160248401526000935b82851062000de9575050604492506000838284010152601f80199101168101030190fd5b848101820151868601604401529381019385935062000dc5565b906001600160401b0382116200066457600654926001938481811c9116801562000f22575b838210146200077057601f811162000ee8575b5081601f841160011462000e7c575092829391839260009462000e70575b50501b916000199060031b1c19161760065560ff90565b01519250388062000e59565b919083601f198116600660005284600020946000905b8883831062000ecd575050501062000eb3575b505050811b0160065560ff90565b015160001960f88460031b161c1916905538808062000ea5565b85870151885590960195948501948793509081019062000e92565b600660005284601f84600020920160051c820191601f860160051c015b82811062000f1557505062000e3b565b6000815501859062000f05565b90607f169062000e2856fe6080604081815260049182361015610022575b505050361561002057600080fd5b005b600092833560e01c91826306fdde03146121be57508163071bc3c9146120b8578163078dfbe714611f2e578163095ea7b314611edf5781630de371e214611e70578163128fced11461023e57816318160ddd14611e1257816320e8c565146117df578163213cae63146116db57816323b872dd1461150b578163313ce567146114af5781633644e515146114745781633b1bebd1146114055781633ba0b9a9146113095781633f4ba83a146111f95781634e71e0c8146110ea5781635c975abb146110a8578163665a11ca1461103957816370a0823114610fd8578163769f8e5d14610cef57816376d5de8514610c80578163784367d614610c3c5781637ecebe0014610bda5781638456cb5914610b2857816384b0196e14610a265781638da5cb5b146109d357816395d89b41146108a7578163a40bee501461082b578163a9059cbb14610757578163b8f82b26146106bb578163c4f59f9b1461066a578163c72bf7a5146105fb578163cbe52ae314610555578163d505accf1461030857508063da88ecb414610239578063dd62ed3e14610295578063e30c397814610243578063ef5cfb8c1461023e578063f8b2f991146102395763fa5a4f06146101ea5780610012565b346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610227612382565b6126f0565b90519015158152f35b5080fd5b612460565b612401565b503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600954169051908152f35b503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557806020926102d0612382565b6102d86123aa565b73ffffffffffffffffffffffffffffffffffffffff91821683526001865283832091168252845220549051908152f35b839150346102355760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557610342612382565b61034a6123aa565b906044359260643560843560ff81168103610551578142116104f45773ffffffffffffffffffffffffffffffffffffffff90818516928389526007602052898920908154916001830190558a519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452868d840152858a1660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176104c8578b525190206104569161044e9161040d612bc9565b908c51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a435922061345c565b9190916134f8565b160361046b5750610468939450612795565b80f35b60649060208751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b60248b6041897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648360208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b8680fd5b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f8575061058f612382565b906105998261267f565b156105b4576020836105ad602435856131f5565b9051908152f35b73ffffffffffffffffffffffffffffffffffffffff60249351927f88a505610000000000000000000000000000000000000000000000000000000084521690820152fd5b80fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355790816106b79251916106ab8361253c565b82525191829182612330565b0390f35b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857506106f5612382565b906106ff826126f0565b15610713576020836105ad6024358561310b565b73ffffffffffffffffffffffffffffffffffffffff60249351927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907f01000000000000000000000000000000000000000000000000000000000000006107b3612382565b61081c600254916107ca60028460f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176002556024359033612946565b60025416176002555160018152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557906012826060935192835273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020840152820152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5780518381949084546108e98161249e565b918285526020966001928860018216918260001461098757505060011461092c575b85886106b78961091d848a0385612574565b519282849384528301906122d2565b815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061096f575050508201018161091d6106b73861090b565b8054848a018601528895508794909301928101610955565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168882015294151560051b8701909401945085935061091d92506106b7915038905061090b565b8280fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600854169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576106b7610afc92610a867f0000000000000000000000000000000000000000000000000000000000000000612f10565b92610b09610ab37f000000000000000000000000000000000000000000000000000000000000000061304b565b91805192610ac08461253c565b84845281519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e060208a015260e08901906122d2565b91878303908801526122d2565b9146606086015230608086015260a085015283820360c08501526123cd565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610b9f73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b610ba76133f2565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00603a541617603a5551338152a180f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff610c2c612382565b1681526007845220549051908152f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610c7b612382565b61267f565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b905082346105f85760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857610d29612382565b916024356044359173ffffffffffffffffffffffffffffffffffffffff9081841693848103610fd457606435906084359687151588036105f85760025497610d7760028a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617600255610dc88361267f565b15610fa5578615610f7d5789949392919015610f6e57610de88730612d01565b7f00000000000000000000000000000000000000000000000000000000000000008616888103610ec6575050610e219086998a91613302565b808810610e91576020888a7f01000000000000000000000000000000000000000000000000000000000000008a8a8a8a8a8651928352878984015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c863392a4600254161760025551908152f35b60449250878951927fbfee4ca00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b81929394955060209060248d51809481937fde0e9a3e0000000000000000000000000000000000000000000000000000000083528c8b8401525af1918215610f635790818b96959493610f23575b505090610e2191998a91613302565b915091929394506020823d602011610f5b575b81610f4360209383612574565b810103126105f85750518893929190610e218c610f14565b3d9150610f36565b8b51903d90823e3d90fd5b610f788733612d01565b610de8565b848b517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602485898d51917f88a50561000000000000000000000000000000000000000000000000000000008352820152fd5b8580fd5b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff61102a612382565b16815280845220549051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209060ff603a541690519015158152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf576009549073ffffffffffffffffffffffffffffffffffffffff928383169182330361119c575050806008549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809316176008551660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b9050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5761124c73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b603a549060ff8216156112ac57507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060209216603a5551338152a180f35b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57670de0b6b3a76400008151927f561bddf800000000000000000000000000000000000000000000000000000000845283015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156113fb5783926113c3575b6020838351908152f35b9091506020813d6020116113f3575b816113df60209383612574565b810103126109cf57602092505190386113b9565b3d91506113d2565b81513d85823e3d90fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020906105ad612bc9565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b839150346102355760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557611545612382565b61154d6123aa565b9060443592856002549561156760028860f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8098161760025573ffffffffffffffffffffffffffffffffffffffff8416815260016020528181203382526020522054907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611631575b6020877f01000000000000000000000000000000000000000000000000000000000000008861081c898989612946565b84821061167e575092602095949261081c92611671837f010000000000000000000000000000000000000000000000000000000000000097033383612795565b9250929495819450611601565b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191611717836124f1565b60038352606036602085013761172c83612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016905261177084612785565b907f00000000000000000000000000000000000000000000000000000000000000001690528251600210156117b3576106b7935060608301525191829182612330565b806032857f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b91905060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611814612382565b9261181d6123aa565b93604435936064359460029384549761183b868a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617865561188b816126f0565b15611dcc578215611da45773ffffffffffffffffffffffffffffffffffffffff9081169485158015611d1257843403611cb5575b611c01575b827f00000000000000000000000000000000000000000000000000000000000000008316878114611bf8577f0000000000000000000000000000000000000000000000000000000000000000841680611b5c57506020906024475b8c5194859384927fea598cb00000000000000000000000000000000000000000000000000000000084528c8401525af1908115611b52578491611b1c575b50985b808a10611ae7575016928315611a8a576119786133f2565b888811610235578554908989168a831601908a8211611a5e57509380927f01000000000000000000000000000000000000000000000000000000000000009694927fff000000000000000000000000000000000000000000000000000000000000008c60209d98169116178855818152808b528881206119f98b825461290a565b90557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b8a518c8152a3865190815287898201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59873392a482541617905551908152f35b8360116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b856044918b8b51927fbc71f2ba0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b90506020813d602011611b4a575b81611b3760209383612574565b81010312611b4657513861195d565b8380fd5b3d9150611b2a565b89513d86823e3d90fd5b60249192506020908b51928380927f70a08231000000000000000000000000000000000000000000000000000000008252308c8301525afa908115611bee57908592918391611bb2575b5090602460209261191f565b919250506020813d602011611be6575b81611bcf60209383612574565b81010312611be257518491906024611ba6565b8480fd5b3d9150611bc2565b8a513d87823e3d90fd5b50508398611960565b87517ff340fa01000000000000000000000000000000000000000000000000000000008152827f0000000000000000000000000000000000000000000000000000000000000000168682015260208160248188877f0000000000000000000000000000000000000000000000000000000000000000165af18015611b5257611c8a575b506118c4565b602090813d8311611cae575b611ca08183612574565b810103126109cf5738611c84565b503d611c96565b60648660208b51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b88517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528560648201526064815260a0810181811067ffffffffffffffff821117611d78578a52611d739088613691565b6118bf565b60248660418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8387517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b6024908473ffffffffffffffffffffffffffffffffffffffff8951927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557602090611f27611f1d612382565b6024359033612795565b5160018152f35b919050346109cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611f68612382565b91602435918215158303611be257604435928315158403610fd45773ffffffffffffffffffffffffffffffffffffffff948591611faa836008541633146125b5565b1561208657169283159081159161207e575b5015612021575050806008549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216176008556009541660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905038611fbc565b9350505050167fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095580f35b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191606083019083821067ffffffffffffffff83111761219257506106b793508152600282528036602084013761211f82612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016905261216383612785565b907f00000000000000000000000000000000000000000000000000000000000000001690525191829182612330565b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b84843461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355782826003546121fc8161249e565b908184526020956001918760018216918260001461228d575050600114612231575b5050506106b7929161091d910385612574565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410612275575050508201018161091d6106b761221e565b8054848a01860152889550879490930192810161225c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061091d91506106b7905061221e565b919082519283825260005b84811061231c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016122dd565b602090602060408183019282815285518094520193019160005b828110612358575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161234a565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b90815180825260208080930193019160005b8281106123ed575050505090565b8351855293810193928101926001016123df565b346123a55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a557612438612382565b506106b76040516124488161253c565b600081526040519182916020835260208301906123cd565b346123a55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a5576106b76040516124488161253c565b90600182811c921680156124e7575b60208310146124b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916124ad565b6080810190811067ffffffffffffffff82111761250d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761250d57604052565b6040810190811067ffffffffffffffff82111761250d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761250d57604052565b156125bc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561262157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f00000000000000000000000000000000000000000000000000000000000000001681149182156126c857505090565b7f00000000000000000000000000000000000000000000000000000000000000001614919050565b73ffffffffffffffffffffffffffffffffffffffff809116801591821561271d575b82156126c857505090565b7f0000000000000000000000000000000000000000000000000000000000000000811682149250612712565b8051156127565760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156127565760400190565b73ffffffffffffffffffffffffffffffffffffffff80911691821561288757169182156128035760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b9190820180921161291757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff809116918215612b455716918215612ac157828214612a635761297c6133f2565b6000828152806020526040812054918083106129df57604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9587602096528286520382822055868152206129d482825461290a565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612cd8575b15612c31577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff82111761250d5760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612c08565b73ffffffffffffffffffffffffffffffffffffffff168015612e8c57612d256133f2565b600091818352826020526040832054818110612e08578190838552846020520360408420557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808211611b46576002549080831681831603818111612ddb57917fff000000000000000000000000000000000000000000000000000000000000007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef949260209416911617600255604051908152a3565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b60ff8114612f665760ff811690601f8211612f3c5760405191612f3283612558565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b50604051600554816000612f798361249e565b808352926020906001908181169081156130085750600114612fa7575b5050612fa492500382612574565b90565b91509260056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000925b828410612ff05750612fa49450505081016020013880612f96565b85548785018301529485019486945092810192612fd5565b905060209350612fa49592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013880612f96565b60ff811461306d5760ff811690601f8211612f3c5760405191612f3283612558565b506040516006548160006130808361249e565b8083529260209060019081811690811561300857506001146130aa575050612fa492500382612574565b91509260066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000925b8284106130f35750612fa49450505081016020013880612f96565b855487850183015294850194869450928101926130d8565b73ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000000000000000000000000000000000000000000082160361314f575090565b906020906024604051809481937f3a53acb000000000000000000000000000000000000000000000000000000000835260048301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156131e9576000916131ba575090565b90506020813d6020116131e1575b816131d560209383612574565b810103126123a5575190565b3d91506131c8565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff9081167f0000000000000000000000000000000000000000000000000000000000000000821603613239575090565b906020906024604051809481937f561bddf800000000000000000000000000000000000000000000000000000000835260048301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156131e9576000916131ba575090565b3d156132fd573d9067ffffffffffffffff821161250d57604051916132f160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612574565b82523d6000602084013e565b606090565b82156133ed5773ffffffffffffffffffffffffffffffffffffffff908116908161339f575050600080809381935af16133396132a4565b501561334157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b926133eb93604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526133e6826124f1565b613691565b565b505050565b60ff603a54166133fe57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116134ec5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156134df57815173ffffffffffffffffffffffffffffffffffffffff8116156134d9579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b600581101561366257806135095750565b6001810361356f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036135d55760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146135de57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff16906136fe6040516136b781612558565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16136f86132a4565b916137c1565b80519182159184831561379d575b5050509050156137195750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b919381809450010312610235578201519081151582036105f857508038808461370c565b9192901561383c57508151156137d5575090565b3b156137de5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561384f5750805190602001fd5b61388d906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906122d2565b0390fdfea2646970667358221220c350fa4770636ed45e79b93376eb9f53b5f69dcea3dfcab38e6aa02de11bcd5664736f6c63430008170033000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1

Deployed Bytecode

0x6080604081815260049182361015610022575b505050361561002057600080fd5b005b600092833560e01c91826306fdde03146121be57508163071bc3c9146120b8578163078dfbe714611f2e578163095ea7b314611edf5781630de371e214611e70578163128fced11461023e57816318160ddd14611e1257816320e8c565146117df578163213cae63146116db57816323b872dd1461150b578163313ce567146114af5781633644e515146114745781633b1bebd1146114055781633ba0b9a9146113095781633f4ba83a146111f95781634e71e0c8146110ea5781635c975abb146110a8578163665a11ca1461103957816370a0823114610fd8578163769f8e5d14610cef57816376d5de8514610c80578163784367d614610c3c5781637ecebe0014610bda5781638456cb5914610b2857816384b0196e14610a265781638da5cb5b146109d357816395d89b41146108a7578163a40bee501461082b578163a9059cbb14610757578163b8f82b26146106bb578163c4f59f9b1461066a578163c72bf7a5146105fb578163cbe52ae314610555578163d505accf1461030857508063da88ecb414610239578063dd62ed3e14610295578063e30c397814610243578063ef5cfb8c1461023e578063f8b2f991146102395763fa5a4f06146101ea5780610012565b346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610227612382565b6126f0565b90519015158152f35b5080fd5b612460565b612401565b503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600954169051908152f35b503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557806020926102d0612382565b6102d86123aa565b73ffffffffffffffffffffffffffffffffffffffff91821683526001865283832091168252845220549051908152f35b839150346102355760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557610342612382565b61034a6123aa565b906044359260643560843560ff81168103610551578142116104f45773ffffffffffffffffffffffffffffffffffffffff90818516928389526007602052898920908154916001830190558a519060208201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452868d840152858a1660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff8211176104c8578b525190206104569161044e9161040d612bc9565b908c51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a435922061345c565b9190916134f8565b160361046b5750610468939450612795565b80f35b60649060208751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b60248b6041897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648360208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b8680fd5b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f8575061058f612382565b906105998261267f565b156105b4576020836105ad602435856131f5565b9051908152f35b73ffffffffffffffffffffffffffffffffffffffff60249351927f88a505610000000000000000000000000000000000000000000000000000000084521690820152fd5b80fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355790816106b79251916106ab8361253c565b82525191829182612330565b0390f35b905082346105f857827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857506106f5612382565b906106ff826126f0565b15610713576020836105ad6024358561310b565b73ffffffffffffffffffffffffffffffffffffffff60249351927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907f01000000000000000000000000000000000000000000000000000000000000006107b3612382565b61081c600254916107ca60028460f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176002556024359033612946565b60025416176002555160018152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557906012826060935192835273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2166020840152820152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5780518381949084546108e98161249e565b918285526020966001928860018216918260001461098757505060011461092c575b85886106b78961091d848a0385612574565b519282849384528301906122d2565b815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061096f575050508201018161091d6106b73861090b565b8054848a018601528895508794909301928101610955565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168882015294151560051b8701909401945085935061091d92506106b7915038905061090b565b8280fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209073ffffffffffffffffffffffffffffffffffffffff600854169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576106b7610afc92610a867f53592065746865722e6669207765455448000000000000000000000000000011612f10565b92610b09610ab37f310000000000000000000000000000000000000000000000000000000000000161304b565b91805192610ac08461253c565b84845281519788977f0f00000000000000000000000000000000000000000000000000000000000000895260e060208a015260e08901906122d2565b91878303908801526122d2565b9146606086015230608086015260a085015283820360c08501526123cd565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610b9f73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b610ba76133f2565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00603a541617603a5551338152a180f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff610c2c612382565b1681526007845220549051908152f35b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209061022c610c7b612382565b61267f565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee168152f35b905082346105f85760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105f857610d29612382565b916024356044359173ffffffffffffffffffffffffffffffffffffffff9081841693848103610fd457606435906084359687151588036105f85760025497610d7760028a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617600255610dc88361267f565b15610fa5578615610f7d5789949392919015610f6e57610de88730612d01565b7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee8616888103610ec6575050610e219086998a91613302565b808810610e91576020888a7f01000000000000000000000000000000000000000000000000000000000000008a8a8a8a8a8651928352878984015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c863392a4600254161760025551908152f35b60449250878951927fbfee4ca00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b81929394955060209060248d51809481937fde0e9a3e0000000000000000000000000000000000000000000000000000000083528c8b8401525af1918215610f635790818b96959493610f23575b505090610e2191998a91613302565b915091929394506020823d602011610f5b575b81610f4360209383612574565b810103126105f85750518893929190610e218c610f14565b3d9150610f36565b8b51903d90823e3d90fd5b610f788733612d01565b610de8565b848b517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602485898d51917f88a50561000000000000000000000000000000000000000000000000000000008352820152fd5b8580fd5b5050346102355760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235578060209273ffffffffffffffffffffffffffffffffffffffff61102a612382565b16815280845220549051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355760209060ff603a541690519015158152f35b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf576009549073ffffffffffffffffffffffffffffffffffffffff928383169182330361119c575050806008549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809316176008551660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b9050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf5761124c73ffffffffffffffffffffffffffffffffffffffff6008541633146125b5565b603a549060ff8216156112ac57507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060209216603a5551338152a180f35b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b919050346109cf57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57670de0b6b3a76400008151927f561bddf800000000000000000000000000000000000000000000000000000000845283015260208260248173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165afa9182156113fb5783926113c3575b6020838351908152f35b9091506020813d6020116113f3575b816113df60209383612574565b810103126109cf57602092505190386113b9565b3d91506113d2565b81513d85823e3d90fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1168152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020906105ad612bc9565b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905160ff7f0000000000000000000000000000000000000000000000000000000000000012168152f35b839150346102355760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557611545612382565b61154d6123aa565b9060443592856002549561156760028860f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8098161760025573ffffffffffffffffffffffffffffffffffffffff8416815260016020528181203382526020522054907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611631575b6020877f01000000000000000000000000000000000000000000000000000000000000008861081c898989612946565b84821061167e575092602095949261081c92611671837f010000000000000000000000000000000000000000000000000000000000000097033383612795565b9250929495819450611601565b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191611717836124f1565b60038352606036602085013761172c83612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee16905261177084612785565b907f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac21690528251600210156117b3576106b7935060608301525191829182612330565b806032857f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b91905060807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611814612382565b9261181d6123aa565b93604435936064359460029384549761183b868a60f81c141561261a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809a1617865561188b816126f0565b15611dcc578215611da45773ffffffffffffffffffffffffffffffffffffffff9081169485158015611d1257843403611cb5575b611c01575b827f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee8316878114611bf8577f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2841680611b5c57506020906024475b8c5194859384927fea598cb00000000000000000000000000000000000000000000000000000000084528c8401525af1908115611b52578491611b1c575b50985b808a10611ae7575016928315611a8a576119786133f2565b888811610235578554908989168a831601908a8211611a5e57509380927f01000000000000000000000000000000000000000000000000000000000000009694927fff000000000000000000000000000000000000000000000000000000000000008c60209d98169116178855818152808b528881206119f98b825461290a565b90557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b8a518c8152a3865190815287898201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59873392a482541617905551908152f35b8360116024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b856044918b8b51927fbc71f2ba0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b90506020813d602011611b4a575b81611b3760209383612574565b81010312611b4657513861195d565b8380fd5b3d9150611b2a565b89513d86823e3d90fd5b60249192506020908b51928380927f70a08231000000000000000000000000000000000000000000000000000000008252308c8301525afa908115611bee57908592918391611bb2575b5090602460209261191f565b919250506020813d602011611be6575b81611bcf60209383612574565b81010312611be257518491906024611ba6565b8480fd5b3d9150611bc2565b8a513d87823e3d90fd5b50508398611960565b87517ff340fa01000000000000000000000000000000000000000000000000000000008152827f0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1168682015260208160248188877f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165af18015611b5257611c8a575b506118c4565b602090813d8311611cae575b611ca08183612574565b810103126109cf5738611c84565b503d611c96565b60648660208b51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b88517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528560648201526064815260a0810181811067ffffffffffffffff821117611d78578a52611d739088613691565b6118bf565b60248660418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8387517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b6024908473ffffffffffffffffffffffffffffffffffffffff8951927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254169051908152f35b50503461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610235576020905173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2168152f35b50503461023557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557602090611f27611f1d612382565b6024359033612795565b5160018152f35b919050346109cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126109cf57611f68612382565b91602435918215158303611be257604435928315158403610fd45773ffffffffffffffffffffffffffffffffffffffff948591611faa836008541633146125b5565b1561208657169283159081159161207e575b5015612021575050806008549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216176008556009541660095580f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905038611fbc565b9350505050167fffffffffffffffffffffffff0000000000000000000000000000000000000000600954161760095580f35b83833461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261023557805191606083019083821067ffffffffffffffff83111761219257506106b793508152600282528036602084013761211f82612749565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee16905261216383612785565b907f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac21690525191829182612330565b806041867f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b84843461023557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102355782826003546121fc8161249e565b908184526020956001918760018216918260001461228d575050600114612231575b5050506106b7929161091d910385612574565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410612275575050508201018161091d6106b761221e565b8054848a01860152889550879490930192810161225c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061091d91506106b7905061221e565b919082519283825260005b84811061231c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b6020818301810151848301820152016122dd565b602090602060408183019282815285518094520193019160005b828110612358575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161234a565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036123a557565b90815180825260208080930193019160005b8281106123ed575050505090565b8351855293810193928101926001016123df565b346123a55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a557612438612382565b506106b76040516124488161253c565b600081526040519182916020835260208301906123cd565b346123a55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123a5576106b76040516124488161253c565b90600182811c921680156124e7575b60208310146124b857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916124ad565b6080810190811067ffffffffffffffff82111761250d57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6020810190811067ffffffffffffffff82111761250d57604052565b6040810190811067ffffffffffffffff82111761250d57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761250d57604052565b156125bc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b1561262157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac21681149182156126c857505090565b7f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee1614919050565b73ffffffffffffffffffffffffffffffffffffffff809116801591821561271d575b82156126c857505090565b7f00000000000000000000000035fa164735182de50811e8e2e824cfb9b6118ac2811682149250612712565b8051156127565760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156127565760400190565b73ffffffffffffffffffffffffffffffffffffffff80911691821561288757169182156128035760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b9190820180921161291757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff809116918215612b455716918215612ac157828214612a635761297c6133f2565b6000828152806020526040812054918083106129df57604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9587602096528286520382822055868152206129d482825461290a565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ac0047886a985071476a1186be89222659970d6516301480612cd8575b15612c31577f72077fa1efac6f4c5a6f4b35113d8fb1736ed5cdcea743a62ecb3d07d81253cc90565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f55a280d0796fe7cc7eb923679a23e99923e723b2c0f1e630bc8409759e07995960408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff82111761250d5760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000014614612c08565b73ffffffffffffffffffffffffffffffffffffffff168015612e8c57612d256133f2565b600091818352826020526040832054818110612e08578190838552846020520360408420557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808211611b46576002549080831681831603818111612ddb57917fff000000000000000000000000000000000000000000000000000000000000007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef949260209416911617600255604051908152a3565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b60ff8114612f665760ff811690601f8211612f3c5760405191612f3283612558565b8252602082015290565b60046040517fb3512b0c000000000000000000000000000000000000000000000000000000008152fd5b50604051600554816000612f798361249e565b808352926020906001908181169081156130085750600114612fa7575b5050612fa492500382612574565b90565b91509260056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0936000925b828410612ff05750612fa49450505081016020013880612f96565b85548785018301529485019486945092810192612fd5565b905060209350612fa49592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013880612f96565b60ff811461306d5760ff811690601f8211612f3c5760405191612f3283612558565b506040516006548160006130808361249e565b8083529260209060019081811690811561300857506001146130aa575050612fa492500382612574565b91509260066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f936000925b8284106130f35750612fa49450505081016020013880612f96565b855487850183015294850194869450928101926130d8565b73ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee82160361314f575090565b906020906024604051809481937f3a53acb000000000000000000000000000000000000000000000000000000000835260048301527f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165afa9081156131e9576000916131ba575090565b90506020813d6020116131e1575b816131d560209383612574565b810103126123a5575190565b3d91506131c8565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff9081167f000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee821603613239575090565b906020906024604051809481937f561bddf800000000000000000000000000000000000000000000000000000000835260048301527f000000000000000000000000308861a430be4cce5502d0a12724771fc6daf216165afa9081156131e9576000916131ba575090565b3d156132fd573d9067ffffffffffffffff821161250d57604051916132f160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612574565b82523d6000602084013e565b606090565b82156133ed5773ffffffffffffffffffffffffffffffffffffffff908116908161339f575050600080809381935af16133396132a4565b501561334157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b926133eb93604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526133e6826124f1565b613691565b565b505050565b60ff603a54166133fe57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083116134ec5791608094939160ff602094604051948552168484015260408301526060820152600093849182805260015afa156134df57815173ffffffffffffffffffffffffffffffffffffffff8116156134d9579190565b50600190565b50604051903d90823e3d90fd5b50505050600090600390565b600581101561366257806135095750565b6001810361356f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036135d55760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146135de57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff16906136fe6040516136b781612558565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16136f86132a4565b916137c1565b80519182159184831561379d575b5050509050156137195750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b919381809450010312610235578201519081151582036105f857508038808461370c565b9192901561383c57508151156137d5575090565b3b156137de5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561384f5750805190602001fd5b61388d906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906122d2565b0390fdfea2646970667358221220c350fa4770636ed45e79b93376eb9f53b5f69dcea3dfcab38e6aa02de11bcd5664736f6c63430008170033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1

-----Decoded View---------------
Arg [0] : _weETH (address): 0xCd5fE23C85820F7B72D0926FC9b05b43E359b7ee
Arg [1] : _referee (address): 0x8119EC16F0573B7dAc7C0CB94EB504FB32456ee1

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd5fe23c85820f7b72d0926fc9b05b43e359b7ee
Arg [1] : 0000000000000000000000008119ec16f0573b7dac7c0cb94eb504fb32456ee1


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.