Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 28 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 18660862 | 417 days ago | IN | 0.04154625 ETH | 0.00367282 | ||||
Redeem | 18659677 | 417 days ago | IN | 0.02391465 ETH | 0.00498874 | ||||
Redeem | 18652800 | 418 days ago | IN | 0.06558036 ETH | 0.00352823 | ||||
Redeem | 18652609 | 418 days ago | IN | 0.0259746 ETH | 0.00593388 | ||||
Redeem | 18645244 | 419 days ago | IN | 0.00751568 ETH | 0.00392942 | ||||
Redeem | 18645101 | 419 days ago | IN | 0.05444777 ETH | 0.00624963 | ||||
Redeem | 18638574 | 420 days ago | IN | 0.01084271 ETH | 0.00368646 | ||||
Redeem | 18624094 | 422 days ago | IN | 0.03052693 ETH | 0.00709148 | ||||
Redeem | 18598037 | 426 days ago | IN | 0.01031025 ETH | 0.00285473 | ||||
Redeem | 18596858 | 426 days ago | IN | 0.19486992 ETH | 0.00312229 | ||||
Redeem | 18590894 | 427 days ago | IN | 0.11536811 ETH | 0.00517648 | ||||
Redeem | 18590751 | 427 days ago | IN | 1.25803911 ETH | 0.00431465 | ||||
Redeem | 18589831 | 427 days ago | IN | 0.21092754 ETH | 0.00357777 | ||||
Redeem | 18589660 | 427 days ago | IN | 0.07708792 ETH | 0.00338089 | ||||
Redeem | 18588011 | 427 days ago | IN | 0.20108651 ETH | 0.00390716 | ||||
Redeem | 18585506 | 427 days ago | IN | 0.19966753 ETH | 0.00906913 | ||||
Redeem | 18584321 | 428 days ago | IN | 0.20493628 ETH | 0.00739592 | ||||
Redeem | 18583669 | 428 days ago | IN | 0.26976664 ETH | 0.00415699 | ||||
Redeem | 18582610 | 428 days ago | IN | 0.04311514 ETH | 0.00363647 | ||||
Redeem | 18569479 | 430 days ago | IN | 0.12744171 ETH | 0.00501179 | ||||
Redeem | 18568037 | 430 days ago | IN | 0.32575088 ETH | 0.00401049 | ||||
Redeem | 18567766 | 430 days ago | IN | 0.01581233 ETH | 0.00382193 | ||||
Redeem | 18564803 | 430 days ago | IN | 0.0001452 ETH | 0.00968156 | ||||
Redeem | 18562276 | 431 days ago | IN | 0.66902056 ETH | 0.00692442 | ||||
Redeem | 18523826 | 436 days ago | IN | 0.00218456 ETH | 0.00351563 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18660862 | 417 days ago | 0.04154625 ETH | ||||
18659677 | 417 days ago | 0.02391465 ETH | ||||
18652800 | 418 days ago | 0.06558036 ETH | ||||
18652609 | 418 days ago | 0.0259746 ETH | ||||
18645244 | 419 days ago | 0.00751568 ETH | ||||
18645101 | 419 days ago | 0.05444777 ETH | ||||
18638574 | 420 days ago | 0.01084271 ETH | ||||
18624094 | 422 days ago | 0.03052693 ETH | ||||
18598037 | 426 days ago | 0.01031025 ETH | ||||
18596858 | 426 days ago | 0.19486992 ETH | ||||
18590894 | 427 days ago | 0.11536811 ETH | ||||
18590751 | 427 days ago | 1.25803911 ETH | ||||
18589831 | 427 days ago | 0.21092754 ETH | ||||
18589660 | 427 days ago | 0.07708792 ETH | ||||
18588011 | 427 days ago | 0.20108651 ETH | ||||
18585506 | 427 days ago | 0.19966753 ETH | ||||
18584321 | 428 days ago | 0.20493628 ETH | ||||
18583669 | 428 days ago | 0.26976664 ETH | ||||
18582610 | 428 days ago | 0.04311514 ETH | ||||
18579712 | 428 days ago | 0.12186695 ETH | ||||
18579712 | 428 days ago | 0.12186695 ETH | ||||
18569479 | 430 days ago | 0.12744171 ETH | ||||
18568037 | 430 days ago | 0.32575088 ETH | ||||
18567766 | 430 days ago | 0.01581233 ETH | ||||
18564803 | 430 days ago | 0.0001452 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.7
Contract Source Code (Vyper language format)
# @version 0.3.7 from vyper.interfaces import ERC20 interface AggregatorV3Interface: def latestRoundData() -> (uint80, int256, uint256, uint256, uint80): view interface IDYFI: def burn(owner: address, amount: uint256): nonpayable interface CurvePoolInterface: def price_oracle() -> uint256: view UNIT: constant(uint256) = 10**18 SLIPPAGE_TOLERANCE: constant(uint256) = 3 SLIPPAGE_DENOMINATOR: constant(uint256) = 1000 DYFI: immutable(IDYFI) YFI: immutable(ERC20) VEYFI: immutable(ERC20) CURVE_POOL: immutable(CurvePoolInterface) PRICE_FEED: immutable(AggregatorV3Interface) # @dev Returns the address of the current owner. owner: public(address) # @dev Returns the address of the pending owner. pending_owner: public(address) # @dev when the contract is killed, redemptions aren't possible killed: public(bool) # @dev recipient of the ETH used for redemptions payee: public(address) # @dev scaling factor parameters packed into a single slot packed_scaling_factor: uint256 # @dev Emitted when contract is killed event Killed: yfi_recovered: uint256 event Sweep: token: indexed(address) amount: uint256 # @dev Emitted when the ownership transfer from # `previous_owner` to `pending_owner` is initiated. event PendingOwnershipTransfer: previous_owner: indexed(address) pending_owner: indexed(address) # @dev Emitted when the ownership is transferred # from `previous_owner` to `new_owner`. event OwnershipTransferred: previous_owner: indexed(address) new_owner: indexed(address) event SetPayee: payee: indexed(address) MASK: constant(uint256) = 2**64 - 1 # powers of 10 E3: constant(int256) = 1_000 E6: constant(int256) = E3 * E3 E9: constant(int256) = E3 * E6 E12: constant(int256) = E3 * E9 E15: constant(int256) = E3 * E12 E17: constant(int256) = 100 * E15 E18: constant(int256) = E3 * E15 E20: constant(int256) = 100 * E18 MIN_NAT_EXP: constant(int256) = -41 * E18 MAX_NAT_EXP: constant(int256) = 130 * E18 # x_n = 2^(7-n), a_n = exp(x_n) # in 20 decimals for n >= 2 X0: constant(int256) = 128 * E18 # 18 decimals A0: constant(int256) = 38_877_084_059_945_950_922_200 * E15 * E18 # no decimals X1: constant(int256) = X0 / 2 # 18 decimals A1: constant(int256) = 6_235_149_080_811_616_882_910 * E6 # no decimals X2: constant(int256) = X1 * 100 / 2 A2: constant(int256) = 7_896_296_018_268_069_516_100 * E12 X3: constant(int256) = X2 / 2 A3: constant(int256) = 888_611_052_050_787_263_676 * E6 X4: constant(int256) = X3 / 2 A4: constant(int256) = 298_095_798_704_172_827_474 * E3 X5: constant(int256) = X4 / 2 A5: constant(int256) = 5_459_815_003_314_423_907_810 X6: constant(int256) = X5 / 2 A6: constant(int256) = 738_905_609_893_065_022_723 X7: constant(int256) = X6 / 2 A7: constant(int256) = 271_828_182_845_904_523_536 X8: constant(int256) = X7 / 2 A8: constant(int256) = 164_872_127_070_012_814_685 X9: constant(int256) = X8 / 2 A9: constant(int256) = 128_402_541_668_774_148_407 X10: constant(int256) = X9 / 2 A10: constant(int256) = 11_331_4845_306_682_631_683 X11: constant(int256) = X10 / 2 A11: constant(int256) = 1_064_49_445_891_785_942_956 @external def __init__( yfi: address, d_yfi: address, ve_yfi: address, owner: address, price_feed: address, curve_pool: address, scaling_factor: uint256, ): assert scaling_factor >= UNIT and scaling_factor <= 12 * UNIT YFI = ERC20(yfi) DYFI = IDYFI(d_yfi) VEYFI = ERC20(ve_yfi) PRICE_FEED = AggregatorV3Interface(price_feed) CURVE_POOL = CurvePoolInterface(curve_pool) self._transfer_ownership(owner) self.payee = owner self.packed_scaling_factor = shift(scaling_factor, 128) | shift(scaling_factor, 192) @payable @external def redeem(amount: uint256, recipient: address = msg.sender) -> uint256: """ @notice Redeem your dYFI for YFI using ETH. @dev Redemption tolerates a 0.3% negative or positive slippage. @param amount amount of dYFI to spend @param recipient of the exercised YFI """ self._check_killed() assert YFI.balanceOf(self) >= amount, "not enough YFI" eth_required: uint256 = self._eth_required(amount) assert eth_required > 0 tolerance: uint256 = eth_required * SLIPPAGE_TOLERANCE / SLIPPAGE_DENOMINATOR if msg.value < (eth_required - tolerance) or msg.value > (eth_required + tolerance): raise "price out of tolerance" DYFI.burn(msg.sender, amount) raw_call(self.payee, b"", value=msg.value) YFI.transfer(recipient, amount) return amount @external @view def discount() -> uint256: """ @notice Get the current dYFI redemption discount @return Redemption discount (18 decimals) @dev Discount formula is `1/(1 + 10 e^(4.7(s*x - 1)))`, with `x = veyfi supply / yfi supply` """ return self._discount() @internal @view def _discount() -> uint256: yfi_supply: uint256 = YFI.totalSupply() veyfi_supply: uint256 = VEYFI.totalSupply() x: int256 = convert(veyfi_supply * UNIT / yfi_supply, int256) x = self._exp(47 * (self._scaling_factor()[0] * x / E18 - E18) / 10) return convert(E18 * E18 / (E18 + 10 * x), uint256) @external @view def eth_required(amount: uint256) -> uint256: """ @notice Estimate the required amount of ETH to redeem the amount of dYFI for YFI @param amount Amount of dYFI @return Amount of ETH required """ return self._eth_required(amount) @internal @view def _eth_required(amount: uint256) -> uint256: return amount * self._get_latest_price() / UNIT * (UNIT - self._discount()) / UNIT @external @view def get_latest_price() -> uint256: """ @notice Get the latest price of YFI in ETH @return Price of YFI in ETH (18 decimals) """ return self._get_latest_price() @internal @view def _get_latest_price() -> uint256: oracle_price: uint256 = convert(self._get_oracle_price(), uint256) pool_price: uint256 = CURVE_POOL.price_oracle() if pool_price < oracle_price: return oracle_price return pool_price @internal @view def _get_oracle_price() -> int256: round_id: uint80 = 0 price: int256 = 0 started_at: uint256 = 0 updated_at: uint256 = 0 answered_in_round: uint80 = 0 (round_id, price, started_at, updated_at, answered_in_round) = PRICE_FEED.latestRoundData() assert updated_at + 3600 > block.timestamp, "price too old" return price @external @view def scaling_factor() -> uint256: """ @notice Get the current discount curve scaling factor @return Scaling factor (18 decimals) """ return convert(self._scaling_factor()[0], uint256) @external @view def scaling_factor_ramp() -> (uint256, uint256, uint256, uint256): """ @notice Get the current discount curve scaling factor ramp parameters @return Tuple of ramp start timestamp, ramp end timestamp, ramp start scaling factor, ramp end scaling factor """ ramp_start: uint256 = 0 ramp_end: uint256 = 0 old: int256 = 0 new: int256 = 0 ramp_start, ramp_end, old, new = self._unpack_scaling_factor(self.packed_scaling_factor) return ramp_start, ramp_end, convert(old, uint256), convert(new, uint256) @internal @view def _scaling_factor() -> (int256, bool): ramp_start: uint256 = 0 ramp_end: uint256 = 0 old: int256 = 0 new: int256 = 0 ramp_start, ramp_end, old, new = self._unpack_scaling_factor(self.packed_scaling_factor) if ramp_end <= block.timestamp: return new, False if ramp_start > block.timestamp: return old, False duration: int256 = convert(ramp_end - ramp_start, int256) time: int256 = convert(block.timestamp - ramp_start, int256) return old + (new - old) * time / duration, True @external def set_payee(new_payee: address): """ @dev set the payee of the ETH used for redemptions @param new_payee the new payee """ self._check_owner() assert new_payee != empty(address) self.payee = new_payee log SetPayee(new_payee) @external def start_ramp(new: uint256, duration: uint256 = 604_800, start: uint256 = block.timestamp): """ @notice Start ramping of scaling factor @param new New scaling factor (18 decimals) @param duration Ramp duration (seconds) @param start Ramp start timestamp """ self._check_owner() assert new >= UNIT and new <= 12 * UNIT assert start >= block.timestamp scaling_factor: int256 = 0 active: bool = False scaling_factor, active = self._scaling_factor() assert not active self.packed_scaling_factor = self._pack_scaling_factor( start, start + duration, scaling_factor, convert(new, int256) ) @external def stop_ramp(): """ @notice Stop a currently active ramp """ self._check_owner() scaling_factor: int256 = 0 active: bool = False scaling_factor, active = self._scaling_factor() assert active self.packed_scaling_factor = self._pack_scaling_factor(0, 0, scaling_factor, scaling_factor) @external def kill(): """ @dev stop the contract from being used and reclaim YFI """ self._check_killed() self._check_owner() self.killed = True yfi_balance: uint256 = YFI.balanceOf(self) YFI.transfer(self.owner, yfi_balance) log Killed(yfi_balance) @internal def _check_killed(): """ @dev Throws if contract was killed """ assert self.killed == False, "killed" @external def sweep(token: address) -> uint256: assert self.killed or token != YFI.address, "protected token" self._check_owner() amount: uint256 = 0 if token == empty(address): amount = self.balance raw_call(self.owner, b"", value=amount) else: amount = ERC20(token).balanceOf(self) assert ERC20(token).transfer(self.owner, amount, default_return_value=True) log Sweep(token, amount) return amount ### Ownable2Step ### @external def transfer_ownership(new_owner: address): """ @dev Starts the ownership transfer of the contract to a new account `new_owner`. @notice Note that this function can only be called by the current `owner`. Also, there is no security risk in setting `new_owner` to the zero address as the default value of `pending_owner` is in fact already the zero address and the zero address cannot call `accept_ownership`. Eventually, the function replaces the pending transfer if there is one. @param new_owner The 20-byte address of the new owner. """ self._check_owner() self.pending_owner = new_owner log PendingOwnershipTransfer(self.owner, new_owner) @external def accept_ownership(): """ @dev The new owner accepts the ownership transfer. @notice Note that this function can only be called by the current `pending_owner`. """ assert self.pending_owner == msg.sender, "Ownable2Step: caller is not the new owner" self._transfer_ownership(msg.sender) @internal def _check_owner(): """ @dev Throws if the sender is not the owner. """ assert msg.sender == self.owner, "Ownable2Step: caller is not the owner" @internal def _transfer_ownership(new_owner: address): """ @dev Transfers the ownership of the contract to a new account `new_owner` and deletes any pending owner. @notice This is an `internal` function without access restriction. @param new_owner The 20-byte address of the new owner. """ self.pending_owner = empty(address) old_owner: address = self.owner self.owner = new_owner log OwnershipTransferred(old_owner, new_owner) @internal @pure def _pack_scaling_factor(_ramp_start: uint256, _ramp_end: uint256, _old: int256, _new: int256) -> uint256: assert _ramp_start <= MASK and _ramp_end <= MASK assert _old <= convert(MASK, int256) and _new > 0 and _new <= convert(MASK, int256) return _ramp_start | shift(_ramp_end, 64) | \ shift(convert(_old, uint256), 128) | shift(convert(_new, uint256), 192) @internal @pure def _unpack_scaling_factor(_packed: uint256) -> (uint256, uint256, int256, int256): return _packed & MASK, shift(_packed, -64) & MASK, \ convert(shift(_packed, -128) & MASK, int256), convert(shift(_packed, -192), int256) # From https://github.com/yearn/yETH/blob/main/contracts/Pool.vy, based on Balancer code @internal @pure def _exp(_x: int256) -> int256: """ @notice Calculate natural exponent `e^x` @param _x Exponent (18 decimals) @return Natural exponent in 18 decimals """ assert _x >= MIN_NAT_EXP and _x <= MAX_NAT_EXP if _x < 0: # exp(-x) = 1/exp(x) return unsafe_mul(E18, E18) / self.__exp(-_x) return self.__exp(_x) @internal @pure def __exp(_x: int256) -> int256: """ @notice Calculate natural exponent `e^x`, assuming exponent is positive @param _x Exponent (18 decimals) @return Natural exponent in 18 decimals @dev Caller should perform bounds checks before calling this function """ # e^x = e^(sum(k_n x_n) + rem) # = product(e^(k_n x_n)) * e^(rem) # = product(a_n^k_n) * e^(rem) # k_n = {0,1}, x_n = 2^(7-n), a_n = exp(x_n) x: int256 = _x # subtract out x_ns f: int256 = 1 if x >= X0: x = unsafe_sub(x, X0) f = A0 elif x >= X1: x = unsafe_sub(x, X1) f = A1 # other terms are in 20 decimals x = unsafe_mul(x, 100) p: int256 = E20 if x >= X2: x = unsafe_sub(x, X2) p = unsafe_div(unsafe_mul(p, A2), E20) # p * A2 / E20 if x >= X3: x = unsafe_sub(x, X3) p = unsafe_div(unsafe_mul(p, A3), E20) if x >= X4: x = unsafe_sub(x, X4) p = unsafe_div(unsafe_mul(p, A4), E20) if x >= X5: x = unsafe_sub(x, X5) p = unsafe_div(unsafe_mul(p, A5), E20) if x >= X6: x = unsafe_sub(x, X6) p = unsafe_div(unsafe_mul(p, A6), E20) if x >= X7: x = unsafe_sub(x, X7) p = unsafe_div(unsafe_mul(p, A7), E20) if x >= X8: x = unsafe_sub(x, X8) p = unsafe_div(unsafe_mul(p, A8), E20) if x >= X9: x = unsafe_sub(x, X9) p = unsafe_div(unsafe_mul(p, A9), E20) # x < X9 (0.25), taylor series for remainder # c = e^x = sum(x^n / n!) n: int256 = x c: int256 = unsafe_add(E20, x) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 2) # n * x / E20 / 2 c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 3) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 4) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 5) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 6) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 7) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 8) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 9) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 10) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 11) c = unsafe_add(c, n) n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 12) c = unsafe_add(c, n) # p * c / E20 * f / 100 return unsafe_div(unsafe_mul(unsafe_div(unsafe_mul(p, c), E20), f), 100)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Killed","inputs":[{"name":"yfi_recovered","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Sweep","inputs":[{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"PendingOwnershipTransfer","inputs":[{"name":"previous_owner","type":"address","indexed":true},{"name":"pending_owner","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"OwnershipTransferred","inputs":[{"name":"previous_owner","type":"address","indexed":true},{"name":"new_owner","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"SetPayee","inputs":[{"name":"payee","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"yfi","type":"address"},{"name":"d_yfi","type":"address"},{"name":"ve_yfi","type":"address"},{"name":"owner","type":"address"},{"name":"price_feed","type":"address"},{"name":"curve_pool","type":"address"},{"name":"scaling_factor","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"redeem","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"redeem","inputs":[{"name":"amount","type":"uint256"},{"name":"recipient","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"discount","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"eth_required","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_latest_price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"scaling_factor","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"scaling_factor_ramp","inputs":[],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"set_payee","inputs":[{"name":"new_payee","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"start_ramp","inputs":[{"name":"new","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"start_ramp","inputs":[{"name":"new","type":"uint256"},{"name":"duration","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"start_ramp","inputs":[{"name":"new","type":"uint256"},{"name":"duration","type":"uint256"},{"name":"start","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"stop_ramp","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"kill","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"transfer_ownership","inputs":[{"name":"new_owner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_ownership","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pending_owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"killed","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"payee","inputs":[],"outputs":[{"name":"","type":"address"}]}]
Contract Creation Code
602061184a6000396000518060a01c61184557608052602061186a6000396000518060a01c6118455760a052602061188a6000396000518060a01c6118455760c05260206118aa6000396000518060a01c6118455760e05260206118ca6000396000518060a01c611845576101005260206118ea6000396000518060a01c61184557610120523461184557670de0b6b3a7640000602061190a60003960005110156100ab5760006100c2565b67a688906bd8b00000602061190a60003960005111155b15611845576080516116ee5260a0516116ce5260c05161170e526101005161174e526101205161172e5260e0516040526100fa611806565b60e051600355602061190a6000396000518060c01b9050602061190a6000396000518060801b9050176004556116ce6101386100003961176e610000f36003361161000c57610a23565b60003560e01c63db006a75811861002f57602436106116bc573361032052610052565b637bde82f281186102d157604436106116bc576024358060a01c6116bc57610320525b61005a611526565b60043560206116ee6000396000516370a082316103405230610360526020610340602461035c845afa610092573d600060003e3d6000fd5b60203d106116bc57610340905051101561010c57600e610380527f6e6f7420656e6f756768205946490000000000000000000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b6004356102c05261011e6103606114a1565b610360516103405261034051156116bc5761034051600381028160038204186116bc5790506103e8810490506103605261034051610360518082038281116116bc579050905034106101875761034051610360518082018281106116bc5790509050341161018a565b60015b156101f5576016610380527f7072696365206f7574206f6620746f6c6572616e6365000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b60206116ce600039600051639dc29fac61038052336103a0526004356103c052803b156116bc576000610380604461039c6000855af161023a573d600060003e3d6000fd5b506000610380526103805060006000610380516103a0346003545af1610265573d600060003e3d6000fd5b60206116ee60003960005163a9059cbb61038052610320516103a0526004356103c0526020610380604461039c6000855af16102a6573d600060003e3d6000fd5b60203d106116bc57610380518060011c6116bc576103e0526103e05050600435610380526020610380f35b346116bc57636b6f4a9d81186102fb57600436106116bc5760206102f661024061115b565b610240f35b63d127fe60811861032757602436106116bc5760206004356102c0526103226103206114a1565b610320f35b631a67245a811861034c57600436106116bc5760206103476102c0611420565b6102c0f35b63e90354ca811861038157600436106116bc5761036a610160610ac8565b61016051600081126116bc576101a05260206101a0f35b63951b930181186103fb57600436106116bc576080366060376004546040526103aa60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c0525060605160e0526080516101005260a051600081126116bc576101205260c051600081126116bc5761014052608060e0f35b63ec9b28f1811861045d57602436106116bc576004358060a01c6116bc5760a05261042461158d565b60a051156116bc5760a05160035560a0517fb35cb534021632242cdd9c586df6a75869880552d76afbabb674b6bd1f1b4f9f600060c0a2005b63561e5d0a811861048257602436106116bc5762093a806101605242610180526104c2565b63ec070a9d81186104a657604436106116bc576024356101605242610180526104c2565b63151357fc811861057757606436106116bc5760406024610160375b6104ca61158d565b670de0b6b3a764000060043510156104e35760006104f2565b67a688906bd8b0000060043511155b156116bc574261018051106116bc576040366101a0376105136101e0610ac8565b6101e080516101a05260208101516101c052506101c0516116bc576101805160405261018051610160518082018281106116bc57905090506060526101a0516080526004358060ff1c6116bc5760a05261056e6101e061161a565b6101e051600455005b636a6f101c81186105e857600436106116bc5761059261158d565b604036610160376105a46101a0610ac8565b6101a08051610160526020810151610180525061018051156116bc57604036604037610160516080526101605160a0526105df6101a061161a565b6101a051600455005b6341c0e1b581186106d757600436106116bc57610603611526565b61060b61158d565b600160025560206116ee6000396000516370a0823160c0523060e052602060c0602460dc845afa610641573d600060003e3d6000fd5b60203d106116bc5760c090505160a05260206116ee60003960005163a9059cbb60c05260005460e05260a05161010052602060c0604460dc6000855af161068d573d600060003e3d6000fd5b60203d106116bc5760c0518060011c6116bc576101205261012050507ff4a991ad9e7f9711696f7bd41529beb4c470d75788573535d4ca3f0857c79ce860a05160c052602060c0a1005b6301681a62811861089c57602436106116bc576004358060a01c6116bc5760a0526002546107145760206116ee60003960005160a0511415610717565b60015b61077857600f60c0527f70726f74656374656420746f6b656e000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b61078061158d565b600060c05260a0516107bd574760c052600060e05260e0506000600060e05161010060c0516000545af1610867573d600060003e3d6000fd610867565b60a0516370a0823160e0523061010052602060e0602460fc845afa6107e7573d600060003e3d6000fd5b60203d106116bc5760e090505160c05260a05163a9059cbb60e0526000546101005260c05161012052602060e0604460fc6000855af161082c573d600060003e3d6000fd5b3d61084357803b156116bc5760016101405261085b565b60203d106116bc5760e0518060011c6116bc57610140525b610140905051156116bc575b60a0517fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c7760c05160e052602060e0a2602060c0f35b63f0350c0481186108f957602436106116bc576004358060a01c6116bc5760a0526108c561158d565b60a05160015560a0516000547f23e1f881d1e797ea57a7247e53536f0bfc37c42e6645b3bdc4b1c9a0e0d8a133600060c0a3005b63a67c2dcb81186109a557600436106116bc573360015418156109975760296080527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060a0527f6e6577206f776e6572000000000000000000000000000000000000000000000060c0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b336040526109a3610a29565b005b638da5cb5b81186109c457600436106116bc5760005460405260206040f35b637f4ec4c381186109e357600436106116bc5760015460405260206040f35b631f3a0e418118610a0257600436106116bc5760025460405260206040f35b63ae90b2138118610a2157600436106116bc5760035460405260206040f35b505b60006000fd5b60006001556000546060526040516000556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006080a3565b67ffffffffffffffff60405116815267ffffffffffffffff6040518060401c905016602082015267ffffffffffffffff6040518060801c9050168060ff1c6116bc5760408201526040518060c01c90508060ff1c6116bc57606082015250565b608036606037600454604052610ade60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c052504260805111610b195760c05181526000602082015250610bf6565b426060511115610b355760a05181526000602082015250610bf6565b6080516060518082038281116116bc57905090508060ff1c6116bc5760e052426060518082038281116116bc57905090508060ff1c6116bc576101005260a05160c05160a05180820382811360008312186116bc57905090506101005180820281191515600160ff1b84141517821584848405141716156116bc579050905060e05180156116bc57808205600160ff1b83141560001983141517156116bc579050905080820182811260008312186116bc5790509050815260016020820152505b565b60405160605260016080526806f05b59d3b20000006060511215610c4e576803782dace9d900000060605112610c7c576803782dace9d9000000606051036060526b1425982cf597cd205cef7380608052610c7c565b6806f05b59d3b200000060605103606052770195e54c5dd42177f53a27172fa9ec6302628270000000006080525b60646060510260605268056bc75e2d6310000060a05268ad78ebc5ac6200000060605112610cd85768ad78ebc5ac620000006060510360605268056bc75e2d631000006e01855144814a7ff805980ff008400060a051020560a0525b6856bc75e2d63100000060605112610d1b576856bc75e2d6310000006060510360605268056bc75e2d631000006b02df0ab5a80a22c61ab5a70060a051020560a0525b682b5e3af16b1880000060605112610d5c57682b5e3af16b188000006060510360605268056bc75e2d63100000693f1fce3da636ea5cf85060a051020560a0525b6815af1d78b58c40000060605112610d9d576815af1d78b58c4000006060510360605268056bc75e2d63100000690127fa27722cc06cc5e260a051020560a0525b680ad78ebc5ac620000060605112610ddd57680ad78ebc5ac62000006060510360605268056bc75e2d6310000068280e60114edb805d0360a051020560a0525b68056bc75e2d6310000060605112610e1d5768056bc75e2d631000006060510360605268056bc75e2d63100000680ebc5fb4174612111060a051020560a0525b6802b5e3af16b188000060605112610e5d576802b5e3af16b18800006060510360605268056bc75e2d631000006808f00f760a4b2db55d60a051020560a0525b68015af1d78b58c4000060605112610e9d5768015af1d78b58c400006060510360605268056bc75e2d631000006806f5f177578893793760a051020560a0525b60605160c05260605168056bc75e2d631000000160e052600268056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600368056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600468056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600568056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600668056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600768056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600868056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600968056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600a68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600b68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600c68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052606460805168056bc75e2d6310000060e05160a05102050205815250565b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000061010051121561107a57600061108b565b68070c1cc73b00c800006101005113155b156116bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100511361113f57610100517f800000000000000000000000000000000000000000000000000000000000000081146116bc576000036040526110f6610120610bf8565b6101205180156116bc57806ec097ce7bc90715b34b9f100000000005600160ff1b6ec097ce7bc90715b34b9f1000000000141560001983141517156116bc579050815250611159565b61010051604052611151610120610bf8565b610120518152505b565b60206116ee6000396000516318160ddd610180526020610180600461019c845afa61118b573d600060003e3d6000fd5b60203d106116bc5761018090505161016052602061170e6000396000516318160ddd6101a05260206101a060046101bc845afa6111cd573d600060003e3d6000fd5b60203d106116bc576101a09050516101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186116bc5790506101605180156116bc57808204905090508060ff1c6116bc576101a0526112296101c0610ac8565b6101c0516101a05180820281191515600160ff1b84141517821584848405141716156116bc5790509050670de0b6b3a764000081059050670de0b6b3a764000081038181136116bc579050602f810281602f8205186116bc579050600a810590506102205261022051610100526112a1610200611048565b610200516101a0526101a051600a810281600a8205186116bc57905080670de0b6b3a764000001670de0b6b3a7640000811260008312186116bc57905080156116bc57806ec097ce7bc90715b34b9f1000000000059050600081126116bc57815250565b60a036604037602061174e60003960005163feaf968c60e05260a060e0600460fc845afa611338573d600060003e3d6000fd5b60a03d106116bc5760e0518060501c6116bc576101a052610100516101c052610120516101e0526101405161020052610160518060501c6116bc57610220526101a09050805160405260208101516060526040810151608052606081015160a052608081015160c052504260a051610e1081018181106116bc5790501161141857600d60e0527f707269636520746f6f206f6c64000000000000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b606051815250565b61142b610260611305565b61026051600081126116bc5761024052602061172e6000396000516386fc88d3610280526020610280600461029c845afa61146b573d600060003e3d6000fd5b60203d106116bc576102809050516102605261024051610260511015611497576102405181525061149f565b610260518152505b565b6102c0516114b06102e0611420565b6102e0518082028115838383041417156116bc5790509050670de0b6b3a7640000810490506114e061030061115b565b6103005180670de0b6b3a764000003670de0b6b3a764000081116116bc5790508082028115838383041417156116bc5790509050670de0b6b3a764000081049050815250565b6002541561158b5760066040527f6b696c6c6564000000000000000000000000000000000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b6000543318156116185760256040527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206060527f6f776e657200000000000000000000000000000000000000000000000000000060805260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b67ffffffffffffffff6040511115611633576000611642565b67ffffffffffffffff60605111155b156116bc5767ffffffffffffffff6080511315611660576000611681565b600160a0511215611672576000611681565b67ffffffffffffffff60a05113155b156116bc5760a051600081126116bc578060c01b9050608051600081126116bc578060801b90506060518060401b9050604051171717815250565b600080fda165767970657283000307000b5b60006001556000546060526040516000556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006080a3565b600080fd0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e00000000000000000000000041252e8691e964f7de35156b68493bab6797a27500000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5000000000000000000000000dddddddd0005d49d9b508bf034b036aab5818bcf0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba0000000000000000000000000000000000000000000000008ac7230489e80000
Deployed Bytecode
0x6003361161000c57610a23565b60003560e01c63db006a75811861002f57602436106116bc573361032052610052565b637bde82f281186102d157604436106116bc576024358060a01c6116bc57610320525b61005a611526565b60043560206116ee6000396000516370a082316103405230610360526020610340602461035c845afa610092573d600060003e3d6000fd5b60203d106116bc57610340905051101561010c57600e610380527f6e6f7420656e6f756768205946490000000000000000000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b6004356102c05261011e6103606114a1565b610360516103405261034051156116bc5761034051600381028160038204186116bc5790506103e8810490506103605261034051610360518082038281116116bc579050905034106101875761034051610360518082018281106116bc5790509050341161018a565b60015b156101f5576016610380527f7072696365206f7574206f6620746f6c6572616e6365000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b60206116ce600039600051639dc29fac61038052336103a0526004356103c052803b156116bc576000610380604461039c6000855af161023a573d600060003e3d6000fd5b506000610380526103805060006000610380516103a0346003545af1610265573d600060003e3d6000fd5b60206116ee60003960005163a9059cbb61038052610320516103a0526004356103c0526020610380604461039c6000855af16102a6573d600060003e3d6000fd5b60203d106116bc57610380518060011c6116bc576103e0526103e05050600435610380526020610380f35b346116bc57636b6f4a9d81186102fb57600436106116bc5760206102f661024061115b565b610240f35b63d127fe60811861032757602436106116bc5760206004356102c0526103226103206114a1565b610320f35b631a67245a811861034c57600436106116bc5760206103476102c0611420565b6102c0f35b63e90354ca811861038157600436106116bc5761036a610160610ac8565b61016051600081126116bc576101a05260206101a0f35b63951b930181186103fb57600436106116bc576080366060376004546040526103aa60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c0525060605160e0526080516101005260a051600081126116bc576101205260c051600081126116bc5761014052608060e0f35b63ec9b28f1811861045d57602436106116bc576004358060a01c6116bc5760a05261042461158d565b60a051156116bc5760a05160035560a0517fb35cb534021632242cdd9c586df6a75869880552d76afbabb674b6bd1f1b4f9f600060c0a2005b63561e5d0a811861048257602436106116bc5762093a806101605242610180526104c2565b63ec070a9d81186104a657604436106116bc576024356101605242610180526104c2565b63151357fc811861057757606436106116bc5760406024610160375b6104ca61158d565b670de0b6b3a764000060043510156104e35760006104f2565b67a688906bd8b0000060043511155b156116bc574261018051106116bc576040366101a0376105136101e0610ac8565b6101e080516101a05260208101516101c052506101c0516116bc576101805160405261018051610160518082018281106116bc57905090506060526101a0516080526004358060ff1c6116bc5760a05261056e6101e061161a565b6101e051600455005b636a6f101c81186105e857600436106116bc5761059261158d565b604036610160376105a46101a0610ac8565b6101a08051610160526020810151610180525061018051156116bc57604036604037610160516080526101605160a0526105df6101a061161a565b6101a051600455005b6341c0e1b581186106d757600436106116bc57610603611526565b61060b61158d565b600160025560206116ee6000396000516370a0823160c0523060e052602060c0602460dc845afa610641573d600060003e3d6000fd5b60203d106116bc5760c090505160a05260206116ee60003960005163a9059cbb60c05260005460e05260a05161010052602060c0604460dc6000855af161068d573d600060003e3d6000fd5b60203d106116bc5760c0518060011c6116bc576101205261012050507ff4a991ad9e7f9711696f7bd41529beb4c470d75788573535d4ca3f0857c79ce860a05160c052602060c0a1005b6301681a62811861089c57602436106116bc576004358060a01c6116bc5760a0526002546107145760206116ee60003960005160a0511415610717565b60015b61077857600f60c0527f70726f74656374656420746f6b656e000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b61078061158d565b600060c05260a0516107bd574760c052600060e05260e0506000600060e05161010060c0516000545af1610867573d600060003e3d6000fd610867565b60a0516370a0823160e0523061010052602060e0602460fc845afa6107e7573d600060003e3d6000fd5b60203d106116bc5760e090505160c05260a05163a9059cbb60e0526000546101005260c05161012052602060e0604460fc6000855af161082c573d600060003e3d6000fd5b3d61084357803b156116bc5760016101405261085b565b60203d106116bc5760e0518060011c6116bc57610140525b610140905051156116bc575b60a0517fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c7760c05160e052602060e0a2602060c0f35b63f0350c0481186108f957602436106116bc576004358060a01c6116bc5760a0526108c561158d565b60a05160015560a0516000547f23e1f881d1e797ea57a7247e53536f0bfc37c42e6645b3bdc4b1c9a0e0d8a133600060c0a3005b63a67c2dcb81186109a557600436106116bc573360015418156109975760296080527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060a0527f6e6577206f776e6572000000000000000000000000000000000000000000000060c0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b336040526109a3610a29565b005b638da5cb5b81186109c457600436106116bc5760005460405260206040f35b637f4ec4c381186109e357600436106116bc5760015460405260206040f35b631f3a0e418118610a0257600436106116bc5760025460405260206040f35b63ae90b2138118610a2157600436106116bc5760035460405260206040f35b505b60006000fd5b60006001556000546060526040516000556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006080a3565b67ffffffffffffffff60405116815267ffffffffffffffff6040518060401c905016602082015267ffffffffffffffff6040518060801c9050168060ff1c6116bc5760408201526040518060c01c90508060ff1c6116bc57606082015250565b608036606037600454604052610ade60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c052504260805111610b195760c05181526000602082015250610bf6565b426060511115610b355760a05181526000602082015250610bf6565b6080516060518082038281116116bc57905090508060ff1c6116bc5760e052426060518082038281116116bc57905090508060ff1c6116bc576101005260a05160c05160a05180820382811360008312186116bc57905090506101005180820281191515600160ff1b84141517821584848405141716156116bc579050905060e05180156116bc57808205600160ff1b83141560001983141517156116bc579050905080820182811260008312186116bc5790509050815260016020820152505b565b60405160605260016080526806f05b59d3b20000006060511215610c4e576803782dace9d900000060605112610c7c576803782dace9d9000000606051036060526b1425982cf597cd205cef7380608052610c7c565b6806f05b59d3b200000060605103606052770195e54c5dd42177f53a27172fa9ec6302628270000000006080525b60646060510260605268056bc75e2d6310000060a05268ad78ebc5ac6200000060605112610cd85768ad78ebc5ac620000006060510360605268056bc75e2d631000006e01855144814a7ff805980ff008400060a051020560a0525b6856bc75e2d63100000060605112610d1b576856bc75e2d6310000006060510360605268056bc75e2d631000006b02df0ab5a80a22c61ab5a70060a051020560a0525b682b5e3af16b1880000060605112610d5c57682b5e3af16b188000006060510360605268056bc75e2d63100000693f1fce3da636ea5cf85060a051020560a0525b6815af1d78b58c40000060605112610d9d576815af1d78b58c4000006060510360605268056bc75e2d63100000690127fa27722cc06cc5e260a051020560a0525b680ad78ebc5ac620000060605112610ddd57680ad78ebc5ac62000006060510360605268056bc75e2d6310000068280e60114edb805d0360a051020560a0525b68056bc75e2d6310000060605112610e1d5768056bc75e2d631000006060510360605268056bc75e2d63100000680ebc5fb4174612111060a051020560a0525b6802b5e3af16b188000060605112610e5d576802b5e3af16b18800006060510360605268056bc75e2d631000006808f00f760a4b2db55d60a051020560a0525b68015af1d78b58c4000060605112610e9d5768015af1d78b58c400006060510360605268056bc75e2d631000006806f5f177578893793760a051020560a0525b60605160c05260605168056bc75e2d631000000160e052600268056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600368056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600468056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600568056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600668056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600768056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600868056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600968056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600a68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600b68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600c68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052606460805168056bc75e2d6310000060e05160a05102050205815250565b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000061010051121561107a57600061108b565b68070c1cc73b00c800006101005113155b156116bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100511361113f57610100517f800000000000000000000000000000000000000000000000000000000000000081146116bc576000036040526110f6610120610bf8565b6101205180156116bc57806ec097ce7bc90715b34b9f100000000005600160ff1b6ec097ce7bc90715b34b9f1000000000141560001983141517156116bc579050815250611159565b61010051604052611151610120610bf8565b610120518152505b565b60206116ee6000396000516318160ddd610180526020610180600461019c845afa61118b573d600060003e3d6000fd5b60203d106116bc5761018090505161016052602061170e6000396000516318160ddd6101a05260206101a060046101bc845afa6111cd573d600060003e3d6000fd5b60203d106116bc576101a09050516101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186116bc5790506101605180156116bc57808204905090508060ff1c6116bc576101a0526112296101c0610ac8565b6101c0516101a05180820281191515600160ff1b84141517821584848405141716156116bc5790509050670de0b6b3a764000081059050670de0b6b3a764000081038181136116bc579050602f810281602f8205186116bc579050600a810590506102205261022051610100526112a1610200611048565b610200516101a0526101a051600a810281600a8205186116bc57905080670de0b6b3a764000001670de0b6b3a7640000811260008312186116bc57905080156116bc57806ec097ce7bc90715b34b9f1000000000059050600081126116bc57815250565b60a036604037602061174e60003960005163feaf968c60e05260a060e0600460fc845afa611338573d600060003e3d6000fd5b60a03d106116bc5760e0518060501c6116bc576101a052610100516101c052610120516101e0526101405161020052610160518060501c6116bc57610220526101a09050805160405260208101516060526040810151608052606081015160a052608081015160c052504260a051610e1081018181106116bc5790501161141857600d60e0527f707269636520746f6f206f6c64000000000000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b606051815250565b61142b610260611305565b61026051600081126116bc5761024052602061172e6000396000516386fc88d3610280526020610280600461029c845afa61146b573d600060003e3d6000fd5b60203d106116bc576102809050516102605261024051610260511015611497576102405181525061149f565b610260518152505b565b6102c0516114b06102e0611420565b6102e0518082028115838383041417156116bc5790509050670de0b6b3a7640000810490506114e061030061115b565b6103005180670de0b6b3a764000003670de0b6b3a764000081116116bc5790508082028115838383041417156116bc5790509050670de0b6b3a764000081049050815250565b6002541561158b5760066040527f6b696c6c6564000000000000000000000000000000000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b6000543318156116185760256040527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206060527f6f776e657200000000000000000000000000000000000000000000000000000060805260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b67ffffffffffffffff6040511115611633576000611642565b67ffffffffffffffff60605111155b156116bc5767ffffffffffffffff6080511315611660576000611681565b600160a0511215611672576000611681565b67ffffffffffffffff60a05113155b156116bc5760a051600081126116bc578060c01b9050608051600081126116bc578060801b90506060518060401b9050604051171717815250565b600080fda165767970657283000307000b00000000000000000000000041252e8691e964f7de35156b68493bab6797a2750000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e00000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e00000000000000000000000041252e8691e964f7de35156b68493bab6797a27500000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5000000000000000000000000dddddddd0005d49d9b508bf034b036aab5818bcf0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba0000000000000000000000000000000000000000000000008ac7230489e80000
-----Decoded View---------------
Arg [0] : yfi (address): 0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e
Arg [1] : d_yfi (address): 0x41252E8691e964f7DE35156B68493bAb6797a275
Arg [2] : ve_yfi (address): 0x90c1f9220d90d3966FbeE24045EDd73E1d588aD5
Arg [3] : owner (address): 0xdDddddDD0005d49D9b508BF034B036aaB5818bCF
Arg [4] : price_feed (address): 0x3EbEACa272Ce4f60E800f6C5EE678f50D2882fd4
Arg [5] : curve_pool (address): 0xC26b89A667578ec7b3f11b2F98d6Fd15C07C54ba
Arg [6] : scaling_factor (uint256): 10000000000000000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [1] : 00000000000000000000000041252e8691e964f7de35156b68493bab6797a275
Arg [2] : 00000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5
Arg [3] : 000000000000000000000000dddddddd0005d49d9b508bf034b036aab5818bcf
Arg [4] : 0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4
Arg [5] : 000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba
Arg [6] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.