Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 12,061 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint | 16591022 | 1114 days ago | IN | 0 ETH | 0.00260883 | ||||
| Mint | 16506236 | 1126 days ago | IN | 0 ETH | 0.0048684 | ||||
| Mint | 16499508 | 1127 days ago | IN | 0 ETH | 0.01054201 | ||||
| Mint | 16464373 | 1132 days ago | IN | 0 ETH | 0.00677081 | ||||
| Mint | 16397286 | 1141 days ago | IN | 0 ETH | 0.00244479 | ||||
| Mint | 16397271 | 1141 days ago | IN | 0 ETH | 0.00234687 | ||||
| Mint | 16397260 | 1141 days ago | IN | 0 ETH | 0.00250749 | ||||
| Mint | 16394361 | 1142 days ago | IN | 0 ETH | 0.00297467 | ||||
| Mint | 16393768 | 1142 days ago | IN | 0 ETH | 0.00386017 | ||||
| Mint | 16393284 | 1142 days ago | IN | 0 ETH | 0.00527572 | ||||
| Mint | 16392660 | 1142 days ago | IN | 0 ETH | 0.00572005 | ||||
| Mint | 16392651 | 1142 days ago | IN | 0 ETH | 0.00510166 | ||||
| Mint | 16392641 | 1142 days ago | IN | 0 ETH | 0.00541086 | ||||
| Mint | 16392621 | 1142 days ago | IN | 0 ETH | 0.00504828 | ||||
| Mint | 16297542 | 1155 days ago | IN | 0 ETH | 0.00392531 | ||||
| Mint | 16249395 | 1162 days ago | IN | 0 ETH | 0.00536942 | ||||
| Mint | 16247981 | 1162 days ago | IN | 0 ETH | 0.00312993 | ||||
| Mint | 16235523 | 1164 days ago | IN | 0 ETH | 0.00352404 | ||||
| Mint | 16226143 | 1165 days ago | IN | 0 ETH | 0.00424738 | ||||
| Mint | 16188713 | 1170 days ago | IN | 0 ETH | 0.00398619 | ||||
| Mint | 16140341 | 1177 days ago | IN | 0 ETH | 0.00200588 | ||||
| Mint | 16140319 | 1177 days ago | IN | 0 ETH | 0.00320715 | ||||
| Mint | 16027674 | 1193 days ago | IN | 0 ETH | 0.00429191 | ||||
| Mint | 15996376 | 1197 days ago | IN | 0 ETH | 0.00408742 | ||||
| Mint | 15979540 | 1199 days ago | IN | 0 ETH | 0.00259518 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
UserProxy
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 7500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "./interfaces/IERC20.sol";
import "./interfaces/IERC20Permit.sol";
import "./interfaces/ITranche.sol";
import "./interfaces/IWETH.sol";
import "./interfaces/IWrappedPosition.sol";
import "./libraries/Authorizable.sol";
/// @author Element Finance
/// @title User Proxy
contract UserProxy is Authorizable {
// This contract is a convenience library to consolidate
// the actions needed to create interest or principal tokens to one call.
// It will hold user allowances, and can be disabled by authorized addresses
// for security.
// If frozen users still control their own tokens so can manually redeem them.
// Store the accessibility state of the contract
bool public isFrozen = false;
// Constant wrapped ether address
IWETH public immutable weth;
// Tranche factory address for Tranche contract address derivation
address internal immutable _trancheFactory;
// Tranche bytecode hash for Tranche contract address derivation.
// This is constant as long as Tranche does not implement non-constant constructor arguments.
bytes32 internal immutable _trancheBytecodeHash;
// A constant which represents ether
address internal constant _ETH_CONSTANT = address(
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
);
/// @dev Marks the msg.sender as authorized and sets them
/// as the owner in authorization library
/// @param _weth The constant weth contract address
/// @param __trancheFactory Address of the TrancheFactory contract
/// @param __trancheBytecodeHash Hash of the Tranche bytecode.
constructor(
IWETH _weth,
address __trancheFactory,
bytes32 __trancheBytecodeHash
) Authorizable() {
_authorize(msg.sender);
weth = _weth;
_trancheFactory = __trancheFactory;
_trancheBytecodeHash = __trancheBytecodeHash;
}
/// @dev Requires that the contract is not frozen
modifier notFrozen() {
require(!isFrozen, "Contract frozen");
_;
}
/// @dev Allows an authorized address to freeze or unfreeze this contract
/// @param _newState True for frozen and false for unfrozen
function setIsFrozen(bool _newState) external onlyAuthorized() {
isFrozen = _newState;
}
// Memory encoding of the permit data
struct PermitData {
IERC20Permit tokenContract;
address who;
uint256 amount;
uint256 expiration;
bytes32 r;
bytes32 s;
uint8 v;
}
/// @dev Takes the input permit calls and executes them
/// @param data The array which encodes the set of permit calls to make
modifier preApproval(PermitData[] memory data) {
// If permit calls are provided we make try to make them
if (data.length != 0) {
// We make permit calls for each indicated call
for (uint256 i = 0; i < data.length; i++) {
_permitCall(data[i]);
}
}
_;
}
/// @dev Makes permit calls indicated by a struct
/// @param data the struct which has the permit calldata
function _permitCall(PermitData memory data) internal {
// Make the permit call to the token in the data field using
// the fields provided.
// Security note - This fairly open call is safe because it cannot
// call 'transferFrom' or other sensitive methods despite the open
// scope. Do not make more general without security review.
data.tokenContract.permit(
msg.sender,
data.who,
data.amount,
data.expiration,
data.v,
data.r,
data.s
);
}
/// @notice Mints a Principal/Interest token pair from either underlying token or Eth
/// then returns the tokens to the caller.
/// @dev This function assumes that it already has an allowance for the token in question.
/// @param _amount The amount of underlying to turn into tokens
/// @param _underlying Either (1) The underlying ERC20 token contract
/// or (2) the _ETH_CONSTANT to indicate the user has sent eth.
/// This token should revert in the event of a transfer failure.
/// @param _expiration The expiration time of the Tranche contract
/// @param _position The contract which manages pooled deposits
/// @param _permitCallData Encoded array of permit calls to make prior to minting
/// the data should be encoded with abi.encode(data, "PermitData[]")
/// each PermitData struct provided will be executed as a call.
/// An example use of this is if using a token with permit like USDC
/// to encode a permit which gives this contract allowance before minting.
/// @return returns the minted amounts of PT and YT
// NOTE - It is critical that the notFrozen modifier is listed first so it gets called first.
function mint(
uint256 _amount,
IERC20 _underlying,
uint256 _expiration,
address _position,
PermitData[] calldata _permitCallData
)
external
payable
notFrozen()
preApproval(_permitCallData)
returns (uint256, uint256)
{
// If the underlying token matches this predefined 'ETH token'
// then we create weth for the user and go from there
if (address(_underlying) == _ETH_CONSTANT) {
// Check that the amount matches the amount provided
require(msg.value == _amount, "Incorrect amount provided");
// Create weth from the provided eth
weth.deposit{ value: msg.value }();
weth.transfer(address(_position), _amount);
} else {
// Check for the fact that this branch should not be payable
require(msg.value == 0, "Non payable");
// Move the user's funds to the wrapped position contract
_underlying.transferFrom(msg.sender, address(_position), _amount);
}
// Proceed to internal minting steps
(uint256 ptMinted, uint256 ytMinted) = _mint(_expiration, _position);
// This sanity check ensure that at least as much was minted as was transferred
require(ytMinted >= _amount, "Not enough minted");
return (ptMinted, ytMinted);
}
/// @dev Allows a user to withdraw and unwrap weth in the same transaction
/// likely quite a bit more expensive than direct unwrapping but useful
/// for those who want to do one tx instead of two
/// @param _expiration The tranche expiration time
/// @param _position The contract which interacts with the yield bearing strategy
/// @param _amountPT The amount of principal token to withdraw
/// @param _amountYT The amount of yield token to withdraw.
/// @param _permitCallData Encoded array of permit calls to make prior to withdrawing,
/// should be used to get allowances for PT and YT
// NOTE - It is critical that the notFrozen modifier is listed first so it gets called first.
function withdrawWeth(
uint256 _expiration,
address _position,
uint256 _amountPT,
uint256 _amountYT,
PermitData[] calldata _permitCallData
) external notFrozen() preApproval(_permitCallData) {
// Post the Berlin hardfork this call warms the address so only cost ~100 gas overall
require(IWrappedPosition(_position).token() == weth, "Non weth token");
// Only allow access if the user is actually attempting to withdraw
require(((_amountPT != 0) || (_amountYT != 0)), "Invalid withdraw");
// Because of create2 we know this code is exactly what is expected.
ITranche derivedTranche = _deriveTranche(_position, _expiration);
uint256 wethReceivedPt = 0;
uint256 wethReceivedYt = 0;
// Check if we need to withdraw principal token
if (_amountPT != 0) {
// If we have to withdraw PT first transfer it to this contract
derivedTranche.transferFrom(msg.sender, address(this), _amountPT);
// Then we withdraw that PT with the resulting weth going to this address
wethReceivedPt = derivedTranche.withdrawPrincipal(
_amountPT,
address(this)
);
}
// Check if we need to withdraw yield token
if (_amountYT != 0) {
// Post Berlin this lookup only costs 100 gas overall as well
IERC20Permit yieldToken = derivedTranche.interestToken();
// Transfer the YT to this contract
yieldToken.transferFrom(msg.sender, address(this), _amountYT);
// Withdraw that YT
wethReceivedYt = derivedTranche.withdrawInterest(
_amountYT,
address(this)
);
}
// A sanity check that some value was withdrawn
if (_amountPT != 0) {
require((wethReceivedPt != 0), "Rugged");
}
if (_amountYT != 0) {
require((wethReceivedYt != 0), "No yield accrued");
}
// Withdraw the ether from weth
weth.withdraw(wethReceivedPt + wethReceivedYt);
// Send the withdrawn eth to the caller
payable(msg.sender).transfer(wethReceivedPt + wethReceivedYt);
}
/// @dev The receive function allows WETH and only WETH to send
/// eth directly to this contract. Note - It Cannot be assumed
/// that this will prevent this contract from having an ETH balance
receive() external payable {
require(msg.sender == address(weth));
}
/// @dev This internal mint function performs the core minting logic after
/// the contract has already transferred to WrappedPosition contract
/// @param _expiration The tranche expiration time
/// @param _position The contract which interacts with the yield bearing strategy
/// @return the principal token yield token returned
function _mint(uint256 _expiration, address _position)
internal
returns (uint256, uint256)
{
// Use create2 to derive the tranche contract
ITranche tranche = _deriveTranche(address(_position), _expiration);
// Move funds into the Tranche contract
// it will credit the msg.sender with the new tokens
return tranche.prefundedDeposit(msg.sender);
}
/// @dev This internal function produces the deterministic create2
/// address of the Tranche contract from a wrapped position contract and expiration
/// @param _position The wrapped position contract address
/// @param _expiration The expiration time of the tranche
/// @return The derived Tranche contract
function _deriveTranche(address _position, uint256 _expiration)
internal
virtual
view
returns (ITranche)
{
bytes32 salt = keccak256(abi.encodePacked(_position, _expiration));
bytes32 addressBytes = keccak256(
abi.encodePacked(
bytes1(0xff),
_trancheFactory,
salt,
_trancheBytecodeHash
)
);
return ITranche(address(uint160(uint256(addressBytes))));
}
/// @dev This contract holds a number of allowances for addresses so if it is deprecated
/// it should be removed so that users do not have to remove allowances.
/// Note - onlyOwner is a stronger check than onlyAuthorized, many addresses can be
/// authorized to freeze or unfreeze the contract but only the owner address can kill
function deprecate() external onlyOwner() {
selfdestruct(payable(msg.sender));
}
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
interface IERC20 {
function symbol() external view returns (string memory);
function balanceOf(address account) external view returns (uint256);
// Note this is non standard but nearly all ERC20 have exposed decimal functions
function decimals() external view returns (uint8);
function transfer(address recipient, uint256 amount)
external
returns (bool);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}// Forked from openzepplin
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20.sol";
/**
* @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 is IERC20 {
/**
* @dev Sets `value` as the allowance of `spender` over `owner`'s tokens,
* given `owner`'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `deadline` must be a timestamp in the future.
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
* over the EIP712-formatted function arguments.
* - the signature must use ``owner``'s current nonce (see {nonces}).
*
* For more information on the signature format, see the
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
* section].
*/
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
/**
* @dev Returns the current nonce for `owner`. This value must be
* included whenever a signature is generated for {permit}.
*
* Every successful call to {permit} increases ``owner``'s nonce by one. This
* prevents a signature from being used multiple times.
*/
function nonces(address owner) external view returns (uint256);
/**
* @dev Returns the domain separator used in the encoding of the signature for `permit`, as defined by {EIP712}.
*/
// solhint-disable-next-line func-name-mixedcase
function DOMAIN_SEPARATOR() external view returns (bytes32);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "./IERC20Permit.sol";
import "./IInterestToken.sol";
interface ITranche is IERC20Permit {
function deposit(uint256 _shares, address destination)
external
returns (uint256, uint256);
function prefundedDeposit(address _destination)
external
returns (uint256, uint256);
function withdrawPrincipal(uint256 _amount, address _destination)
external
returns (uint256);
function withdrawInterest(uint256 _amount, address _destination)
external
returns (uint256);
function interestToken() external view returns (IInterestToken);
function interestSupply() external view returns (uint128);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "./IERC20.sol";
interface IWETH is IERC20 {
function deposit() external payable;
function withdraw(uint256 wad) external;
event Deposit(address indexed dst, uint256 wad);
event Withdrawal(address indexed src, uint256 wad);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "./IERC20Permit.sol";
import "./IERC20.sol";
interface IWrappedPosition is IERC20Permit {
function token() external view returns (IERC20);
function balanceOfUnderlying(address who) external view returns (uint256);
function getSharesToUnderlying(uint256 shares)
external
view
returns (uint256);
function deposit(address sender, uint256 amount) external returns (uint256);
function withdraw(
address sender,
uint256 _shares,
uint256 _minUnderlying
) external returns (uint256);
function withdrawUnderlying(
address _destination,
uint256 _amount,
uint256 _minUnderlying
) external returns (uint256, uint256);
function prefundedDeposit(address _destination)
external
returns (
uint256,
uint256,
uint256
);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.7.0;
contract Authorizable {
// This contract allows a flexible authorization scheme
// The owner who can change authorization status
address public owner;
// A mapping from an address to its authorization status
mapping(address => bool) public authorized;
/// @dev We set the deployer to the owner
constructor() {
owner = msg.sender;
}
/// @dev This modifier checks if the msg.sender is the owner
modifier onlyOwner() {
require(msg.sender == owner, "Sender not owner");
_;
}
/// @dev This modifier checks if an address is authorized
modifier onlyAuthorized() {
require(isAuthorized(msg.sender), "Sender not Authorized");
_;
}
/// @dev Returns true if an address is authorized
/// @param who the address to check
/// @return true if authorized false if not
function isAuthorized(address who) public view returns (bool) {
return authorized[who];
}
/// @dev Privileged function authorize an address
/// @param who the address to authorize
function authorize(address who) external onlyOwner() {
_authorize(who);
}
/// @dev Privileged function to de authorize an address
/// @param who The address to remove authorization from
function deauthorize(address who) external onlyOwner() {
authorized[who] = false;
}
/// @dev Function to change owner
/// @param who The new owner address
function setOwner(address who) public onlyOwner() {
owner = who;
}
/// @dev Inheritable function which authorizes someone
/// @param who the address to authorize
function _authorize(address who) internal {
authorized[who] = true;
}
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "./IERC20Permit.sol";
interface IInterestToken is IERC20Permit {
function mint(address _account, uint256 _amount) external;
function burn(address _account, uint256 _amount) external;
}{
"optimizer": {
"enabled": true,
"runs": 7500
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IWETH","name":"_weth","type":"address"},{"internalType":"address","name":"__trancheFactory","type":"address"},{"internalType":"bytes32","name":"__trancheBytecodeHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deprecate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"contract IERC20","name":"_underlying","type":"address"},{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_position","type":"address"},{"components":[{"internalType":"contract IERC20Permit","name":"tokenContract","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct UserProxy.PermitData[]","name":"_permitCallData","type":"tuple[]"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_newState","type":"bool"}],"name":"setIsFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_expiration","type":"uint256"},{"internalType":"address","name":"_position","type":"address"},{"internalType":"uint256","name":"_amountPT","type":"uint256"},{"internalType":"uint256","name":"_amountYT","type":"uint256"},{"components":[{"internalType":"contract IERC20Permit","name":"tokenContract","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"internalType":"struct UserProxy.PermitData[]","name":"_permitCallData","type":"tuple[]"}],"name":"withdrawWeth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e06040526002805460ff191690553480156200001b57600080fd5b5060405162001a3538038062001a358339810160408190526200003e91620000a9565b600080546001600160a01b031916339081179091556200005e9062000082565b6001600160601b0319606093841b81166080529190921b1660a05260c05262000109565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b600080600060608486031215620000be578283fd5b8351620000cb81620000f0565b6020850151909350620000de81620000f0565b80925050604084015190509250925092565b6001600160a01b03811681146200010657600080fd5b50565b60805160601c60a05160601c60c0516118d462000161600039600061101401526000610ff001526000818160e8015281816103e001528181610542015281816109f301528181610c480152610d0101526118d46000f3fe6080604052600436106100cb5760003560e01c80636f1ea24c11610074578063b841d2d21161004e578063b841d2d214610230578063b918161114610251578063fe9fbb801461027157610114565b80636f1ea24c146101db5780638da5cb5b146101fb578063b6a5d7de1461021057610114565b806333eeb147116100a557806333eeb1471461016e5780633fc8cef31461019957806364eda74b146101bb57610114565b80630fcc0c281461011957806313af40351461012e57806327c97fa51461014e57610114565b36610114573373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461011257600080fd5b005b600080fd5b34801561012557600080fd5b50610112610291565b34801561013a57600080fd5b506101126101493660046111ec565b6102d4565b34801561015a57600080fd5b506101126101693660046111ec565b610352565b34801561017a57600080fd5b506101836103d5565b6040516101909190611582565b60405180910390f35b3480156101a557600080fd5b506101ae6103de565b60405161019091906114bc565b3480156101c757600080fd5b506101126101d636600461120f565b610402565b3480156101e757600080fd5b506101126101f6366004611333565b610458565b34801561020757600080fd5b506101ae610ab6565b34801561021c57600080fd5b5061011261022b3660046111ec565b610ad2565b61024361023e3660046113a4565b610b15565b6040516101909291906117e0565b34801561025d57600080fd5b5061018361026c3660046111ec565b610e9c565b34801561027d57600080fd5b5061018361028c3660046111ec565b610eb1565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d15760405162461bcd60e51b81526004016102c8906115c4565b60405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461030b5760405162461bcd60e51b81526004016102c8906115c4565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103895760405162461bcd60e51b81526004016102c8906115c4565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61040b33610eb1565b6104275760405162461bcd60e51b81526004016102c8906115fb565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60025460ff161561047b5760405162461bcd60e51b81526004016102c89061177c565b8181808060200260200160405190810160405280939291908181526020016000905b828210156104c9576104ba60e08302860136819003810190611263565b8152602001906001019061049d565b505050505080516000146105405760005b815181101561053e5761052c82828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ee0565b8061053681611806565b9150506104da565b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190611247565b73ffffffffffffffffffffffffffffffffffffffff16146106285760405162461bcd60e51b81526004016102c890611669565b8415158061063557508315155b6106515760405162461bcd60e51b81526004016102c890611632565b600061065d8789610f76565b905060008087156107ba576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906106be90339030908d906004016114dd565b602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610710919061122b565b506040517f884e17f300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063884e17f390610765908b9030906004016117bc565b602060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061131b565b91505b86156109965760008373ffffffffffffffffffffffffffffffffffffffff1663764b666c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190611247565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd9061089990339030908d906004016114dd565b602060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb919061122b565b506040517f1210aac200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690631210aac290610940908b9030906004016117bc565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061131b565b9150505b87156109b957816109b95760405162461bcd60e51b81526004016102c8906116a0565b86156109dc57806109dc5760405162461bcd60e51b81526004016102c8906116d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632e1a7d4d610a2283856117ee565b6040518263ffffffff1660e01b8152600401610a3e91906117b3565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b503392506108fc9150610a81905083856117ee565b6040518115909202916000818181858888f19350505050158015610aa9573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b095760405162461bcd60e51b81526004016102c8906115c4565b610b1281611079565b50565b600254600090819060ff1615610b3d5760405162461bcd60e51b81526004016102c89061177c565b8383808060200260200160405190810160405280939291908181526020016000905b82821015610b8b57610b7c60e08302860136819003810190611263565b81526020019060010190610b5f565b50505050508051600014610bf55760005b8151811015610bf357610be182828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80610beb81611806565b915050610b9c565b505b73ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610d9357883414610c465760405162461bcd60e51b81526004016102c890611745565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250610d3b915089908d9060040161155c565b602060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061122b565b50610e5b565b3415610db15760405162461bcd60e51b81526004016102c89061158d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916906323b872dd90610e079033908a908e906004016114dd565b602060405180830381600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061122b565b505b600080610e6889896110cb565b915091508a811015610e8c5760405162461bcd60e51b81526004016102c89061170e565b909a909950975050505050505050565b60016020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff165b919050565b806000015173ffffffffffffffffffffffffffffffffffffffff1663d505accf338360200151846040015185606001518660c0015187608001518860a001516040518863ffffffff1660e01b8152600401610f41979695949392919061150e565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505050565b6000808383604051602001610f8c929190611423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290528051602091820120925060009161103a917fff00000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000000000000000000000000000000000000000000009186917f00000000000000000000000000000000000000000000000000000000000000009101611458565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60008060006110da8486610f76565b6040517f85f45c8800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906385f45c889061112f9033906004016114bc565b6040805180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611400565b92509250505b9250929050565b8035610edb8161186e565b60008083601f8401126111a9578182fd5b50813567ffffffffffffffff8111156111c0578182fd5b60208301915083602060e08302850101111561118657600080fd5b803560ff81168114610edb57600080fd5b6000602082840312156111fd578081fd5b81356112088161186e565b9392505050565b600060208284031215611220578081fd5b813561120881611890565b60006020828403121561123c578081fd5b815161120881611890565b600060208284031215611258578081fd5b81516112088161186e565b600060e08284031215611274578081fd5b60405160e0810181811067ffffffffffffffff821117156112bc577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b6040526112c88361118d565b81526112d66020840161118d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261130f60c084016111db565b60c08201529392505050565b60006020828403121561132c578081fd5b5051919050565b60008060008060008060a0878903121561134b578182fd5b86359550602087013561135d8161186e565b94506040870135935060608701359250608087013567ffffffffffffffff811115611386578283fd5b61139289828a01611198565b979a9699509497509295939492505050565b60008060008060008060a087890312156113bc578182fd5b8635955060208701356113ce8161186e565b94506040870135935060608701356113e58161186e565b9250608087013567ffffffffffffffff811115611386578283fd5b60008060408385031215611412578182fd5b505080516020909101519092909150565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6020808252600b908201527f4e6f6e2070617961626c65000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420776974686472617700000000000000000000000000000000604082015260600190565b6020808252600e908201527f4e6f6e207765746820746f6b656e000000000000000000000000000000000000604082015260600190565b60208082526006908201527f5275676765640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4e6f207969656c64206163637275656400000000000000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206d696e746564000000000000000000000000000000604082015260600190565b60208082526019908201527f496e636f727265637420616d6f756e742070726f766964656400000000000000604082015260600190565b6020808252600f908201527f436f6e74726163742066726f7a656e0000000000000000000000000000000000604082015260600190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b918252602082015260400190565b600082198211156118015761180161183f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118385761183861183f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b1257600080fd5b8015158114610b1257600080fdfea26469706673582212202a6013595f1f2bbde4be22920ab5b117ec00eb896d90b285f906d6e72567e74064736f6c63430008000033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
Deployed Bytecode
0x6080604052600436106100cb5760003560e01c80636f1ea24c11610074578063b841d2d21161004e578063b841d2d214610230578063b918161114610251578063fe9fbb801461027157610114565b80636f1ea24c146101db5780638da5cb5b146101fb578063b6a5d7de1461021057610114565b806333eeb147116100a557806333eeb1471461016e5780633fc8cef31461019957806364eda74b146101bb57610114565b80630fcc0c281461011957806313af40351461012e57806327c97fa51461014e57610114565b36610114573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2161461011257600080fd5b005b600080fd5b34801561012557600080fd5b50610112610291565b34801561013a57600080fd5b506101126101493660046111ec565b6102d4565b34801561015a57600080fd5b506101126101693660046111ec565b610352565b34801561017a57600080fd5b506101836103d5565b6040516101909190611582565b60405180910390f35b3480156101a557600080fd5b506101ae6103de565b60405161019091906114bc565b3480156101c757600080fd5b506101126101d636600461120f565b610402565b3480156101e757600080fd5b506101126101f6366004611333565b610458565b34801561020757600080fd5b506101ae610ab6565b34801561021c57600080fd5b5061011261022b3660046111ec565b610ad2565b61024361023e3660046113a4565b610b15565b6040516101909291906117e0565b34801561025d57600080fd5b5061018361026c3660046111ec565b610e9c565b34801561027d57600080fd5b5061018361028c3660046111ec565b610eb1565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d15760405162461bcd60e51b81526004016102c8906115c4565b60405180910390fd5b33ff5b60005473ffffffffffffffffffffffffffffffffffffffff16331461030b5760405162461bcd60e51b81526004016102c8906115c4565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103895760405162461bcd60e51b81526004016102c8906115c4565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60025460ff1681565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b61040b33610eb1565b6104275760405162461bcd60e51b81526004016102c8906115fb565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60025460ff161561047b5760405162461bcd60e51b81526004016102c89061177c565b8181808060200260200160405190810160405280939291908181526020016000905b828210156104c9576104ba60e08302860136819003810190611263565b8152602001906001019061049d565b505050505080516000146105405760005b815181101561053e5761052c82828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151610ee0565b8061053681611806565b9150506104da565b505b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105bd57600080fd5b505afa1580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190611247565b73ffffffffffffffffffffffffffffffffffffffff16146106285760405162461bcd60e51b81526004016102c890611669565b8415158061063557508315155b6106515760405162461bcd60e51b81526004016102c890611632565b600061065d8789610f76565b905060008087156107ba576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906106be90339030908d906004016114dd565b602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610710919061122b565b506040517f884e17f300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063884e17f390610765908b9030906004016117bc565b602060405180830381600087803b15801561077f57600080fd5b505af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061131b565b91505b86156109965760008373ffffffffffffffffffffffffffffffffffffffff1663764b666c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190611247565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906323b872dd9061089990339030908d906004016114dd565b602060405180830381600087803b1580156108b357600080fd5b505af11580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb919061122b565b506040517f1210aac200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690631210aac290610940908b9030906004016117bc565b602060405180830381600087803b15801561095a57600080fd5b505af115801561096e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610992919061131b565b9150505b87156109b957816109b95760405162461bcd60e51b81526004016102c8906116a0565b86156109dc57806109dc5760405162461bcd60e51b81526004016102c8906116d7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216632e1a7d4d610a2283856117ee565b6040518263ffffffff1660e01b8152600401610a3e91906117b3565b600060405180830381600087803b158015610a5857600080fd5b505af1158015610a6c573d6000803e3d6000fd5b503392506108fc9150610a81905083856117ee565b6040518115909202916000818181858888f19350505050158015610aa9573d6000803e3d6000fd5b5050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff163314610b095760405162461bcd60e51b81526004016102c8906115c4565b610b1281611079565b50565b600254600090819060ff1615610b3d5760405162461bcd60e51b81526004016102c89061177c565b8383808060200260200160405190810160405280939291908181526020016000905b82821015610b8b57610b7c60e08302860136819003810190611263565b81526020019060010190610b5f565b50505050508051600014610bf55760005b8151811015610bf357610be182828151811061051f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80610beb81611806565b915050610b9c565b505b73ffffffffffffffffffffffffffffffffffffffff881673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610d9357883414610c465760405162461bcd60e51b81526004016102c890611745565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610cae57600080fd5b505af1158015610cc2573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216935063a9059cbb9250610d3b915089908d9060040161155c565b602060405180830381600087803b158015610d5557600080fd5b505af1158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d919061122b565b50610e5b565b3415610db15760405162461bcd60e51b81526004016102c89061158d565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8916906323b872dd90610e079033908a908e906004016114dd565b602060405180830381600087803b158015610e2157600080fd5b505af1158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061122b565b505b600080610e6889896110cb565b915091508a811015610e8c5760405162461bcd60e51b81526004016102c89061170e565b909a909950975050505050505050565b60016020526000908152604090205460ff1681565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff165b919050565b806000015173ffffffffffffffffffffffffffffffffffffffff1663d505accf338360200151846040015185606001518660c0015187608001518860a001516040518863ffffffff1660e01b8152600401610f41979695949392919061150e565b600060405180830381600087803b158015610f5b57600080fd5b505af1158015610f6f573d6000803e3d6000fd5b5050505050565b6000808383604051602001610f8c929190611423565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290528051602091820120925060009161103a917fff00000000000000000000000000000000000000000000000000000000000000917f00000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c09186917ff481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d9101611458565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052805160209091012095945050505050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b60008060006110da8486610f76565b6040517f85f45c8800000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff8216906385f45c889061112f9033906004016114bc565b6040805180830381600087803b15801561114857600080fd5b505af115801561115c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111809190611400565b92509250505b9250929050565b8035610edb8161186e565b60008083601f8401126111a9578182fd5b50813567ffffffffffffffff8111156111c0578182fd5b60208301915083602060e08302850101111561118657600080fd5b803560ff81168114610edb57600080fd5b6000602082840312156111fd578081fd5b81356112088161186e565b9392505050565b600060208284031215611220578081fd5b813561120881611890565b60006020828403121561123c578081fd5b815161120881611890565b600060208284031215611258578081fd5b81516112088161186e565b600060e08284031215611274578081fd5b60405160e0810181811067ffffffffffffffff821117156112bc577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b6040526112c88361118d565b81526112d66020840161118d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261130f60c084016111db565b60c08201529392505050565b60006020828403121561132c578081fd5b5051919050565b60008060008060008060a0878903121561134b578182fd5b86359550602087013561135d8161186e565b94506040870135935060608701359250608087013567ffffffffffffffff811115611386578283fd5b61139289828a01611198565b979a9699509497509295939492505050565b60008060008060008060a087890312156113bc578182fd5b8635955060208701356113ce8161186e565b94506040870135935060608701356113e58161186e565b9250608087013567ffffffffffffffff811115611386578283fd5b60008060408385031215611412578182fd5b505080516020909101519092909150565b60609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168252601482015260340190565b7fff0000000000000000000000000000000000000000000000000000000000000094909416845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830152603582015260550190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff97881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b901515815260200190565b6020808252600b908201527f4e6f6e2070617961626c65000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f53656e646572206e6f74206f776e657200000000000000000000000000000000604082015260600190565b60208082526015908201527f53656e646572206e6f7420417574686f72697a65640000000000000000000000604082015260600190565b60208082526010908201527f496e76616c696420776974686472617700000000000000000000000000000000604082015260600190565b6020808252600e908201527f4e6f6e207765746820746f6b656e000000000000000000000000000000000000604082015260600190565b60208082526006908201527f5275676765640000000000000000000000000000000000000000000000000000604082015260600190565b60208082526010908201527f4e6f207969656c64206163637275656400000000000000000000000000000000604082015260600190565b60208082526011908201527f4e6f7420656e6f756768206d696e746564000000000000000000000000000000604082015260600190565b60208082526019908201527f496e636f727265637420616d6f756e742070726f766964656400000000000000604082015260600190565b6020808252600f908201527f436f6e74726163742066726f7a656e0000000000000000000000000000000000604082015260600190565b90815260200190565b91825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b918252602082015260400190565b600082198211156118015761180161183f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118385761183861183f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610b1257600080fd5b8015158114610b1257600080fdfea26469706673582212202a6013595f1f2bbde4be22920ab5b117ec00eb896d90b285f906d6e72567e74064736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
-----Decoded View---------------
Arg [0] : _weth (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : __trancheFactory (address): 0x62F161BF3692E4015BefB05A03a94A40f520d1c0
Arg [2] : __trancheBytecodeHash (bytes32): 0xf481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 00000000000000000000000062f161bf3692e4015befb05a03a94a40f520d1c0
Arg [2] : f481a073666136ab1f5e93b296e84df58092065256d0db23b2d22b62c68e978d
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.