frxETH Price: $2,605.56 (-1.86%)

Contract

0x9f2Fa7709B30c75047980a0d70A106728f0Ef2db
Transaction Hash
Method
Block
From
To
Exchange162495882025-02-11 21:38:0716 mins ago1739309887IN
Curve.fi: Router
0 frxETH0.000000190.00100025
Exchange162495672025-02-11 21:37:2517 mins ago1739309845IN
Curve.fi: Router
0 frxETH0.000000220.00110025
Exchange162495422025-02-11 21:36:3518 mins ago1739309795IN
Curve.fi: Router
0 frxETH0.000000480.00100025
Exchange162494052025-02-11 21:32:0122 mins ago1739309521IN
Curve.fi: Router
0.00409981 frxETH0.00000040.00100025
Exchange162493792025-02-11 21:31:0923 mins ago1739309469IN
Curve.fi: Router
0 frxETH0.000000220.00110025
Exchange162455552025-02-11 19:23:412 hrs ago1739301821IN
Curve.fi: Router
0 frxETH0.000000240.00110025
Exchange162449192025-02-11 19:02:292 hrs ago1739300549IN
Curve.fi: Router
0 frxETH0.000000420.00120025
Exchange162447972025-02-11 18:58:252 hrs ago1739300305IN
Curve.fi: Router
0 frxETH0.000000420.00120025
Exchange162447202025-02-11 18:55:512 hrs ago1739300151IN
Curve.fi: Router
0 frxETH0.000000420.00120025
Exchange162444982025-02-11 18:48:273 hrs ago1739299707IN
Curve.fi: Router
0 frxETH0.000000570.00120025
Exchange162444642025-02-11 18:47:193 hrs ago1739299639IN
Curve.fi: Router
0 frxETH0.000000460.00120025
Exchange162441682025-02-11 18:37:273 hrs ago1739299047IN
Curve.fi: Router
0 frxETH0.000000410.00110025
Exchange162407852025-02-11 16:44:415 hrs ago1739292281IN
Curve.fi: Router
0 frxETH0.000000460.00100025
Exchange162407772025-02-11 16:44:255 hrs ago1739292265IN
Curve.fi: Router
0 frxETH0.000000350.00100025
Exchange162407582025-02-11 16:43:475 hrs ago1739292227IN
Curve.fi: Router
0 frxETH0.000000350.00100025
Exchange162405382025-02-11 16:36:275 hrs ago1739291787IN
Curve.fi: Router
0 frxETH0.000000350.00100025
Exchange162403722025-02-11 16:30:555 hrs ago1739291455IN
Curve.fi: Router
0 frxETH0.000000350.00100025
Exchange162402132025-02-11 16:25:375 hrs ago1739291137IN
Curve.fi: Router
0 frxETH0.000000350.00100025
Exchange162401022025-02-11 16:21:555 hrs ago1739290915IN
Curve.fi: Router
0 frxETH0.000000030.00010025
Exchange162400682025-02-11 16:20:475 hrs ago1739290847IN
Curve.fi: Router
0 frxETH0.000000330.00100025
Exchange162398482025-02-11 16:13:275 hrs ago1739290407IN
Curve.fi: Router
0 frxETH0.000000350.00100025
Exchange162398322025-02-11 16:12:555 hrs ago1739290375IN
Curve.fi: Router
0 frxETH0.000000480.00100025
Exchange162378262025-02-11 15:06:036 hrs ago1739286363IN
Curve.fi: Router
0 frxETH0.000000250.00110025
Exchange162372582025-02-11 14:47:077 hrs ago1739285227IN
Curve.fi: Router
0 frxETH0.000000240.00110025
Exchange162371872025-02-11 14:44:457 hrs ago1739285085IN
Curve.fi: Router
0 frxETH0.000000220.00110025
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
162494052025-02-11 21:32:0122 mins ago1739309521
Curve.fi: Router
0.00409981 frxETH
162441682025-02-11 18:37:273 hrs ago1739299047
Curve.fi: Router
0.00660165 frxETH
162441682025-02-11 18:37:273 hrs ago1739299047
Curve.fi: Router
0.00660165 frxETH
162401022025-02-11 16:21:555 hrs ago1739290915
Curve.fi: Router
0.00060921 frxETH
162401022025-02-11 16:21:555 hrs ago1739290915
Curve.fi: Router
0.00060921 frxETH
162287952025-02-11 10:05:0111 hrs ago1739268301
Curve.fi: Router
0.00312372 frxETH
162245822025-02-11 7:44:3514 hrs ago1739259875
Curve.fi: Router
0.01834466 frxETH
162245822025-02-11 7:44:3514 hrs ago1739259875
Curve.fi: Router
0.01834466 frxETH
162235902025-02-11 7:11:3114 hrs ago1739257891
Curve.fi: Router
0.18073786 frxETH
162235902025-02-11 7:11:3114 hrs ago1739257891
Curve.fi: Router
0.18073786 frxETH
162235602025-02-11 7:10:3114 hrs ago1739257831
Curve.fi: Router
0.25146293 frxETH
162235602025-02-11 7:10:3114 hrs ago1739257831
Curve.fi: Router
0.25146293 frxETH
162232032025-02-11 6:58:3714 hrs ago1739257117
Curve.fi: Router
0.00160094 frxETH
162192932025-02-11 4:48:1717 hrs ago1739249297
Curve.fi: Router
0.00022564 frxETH
162192932025-02-11 4:48:1717 hrs ago1739249297
Curve.fi: Router
0.00022564 frxETH
162191642025-02-11 4:43:5917 hrs ago1739249039
Curve.fi: Router
0.0015 frxETH
162142812025-02-11 2:01:1319 hrs ago1739239273
Curve.fi: Router
0.01840569 frxETH
162142812025-02-11 2:01:1319 hrs ago1739239273
Curve.fi: Router
0.01840569 frxETH
162131292025-02-11 1:22:4920 hrs ago1739236969
Curve.fi: Router
0.004 frxETH
162131292025-02-11 1:22:4920 hrs ago1739236969
Curve.fi: Router
0.004 frxETH
162128932025-02-11 1:14:5720 hrs ago1739236497
Curve.fi: Router
0.004 frxETH
162100662025-02-10 23:40:4322 hrs ago1739230843
Curve.fi: Router
0.01 frxETH
162075562025-02-10 22:17:0323 hrs ago1739225823
Curve.fi: Router
0.00154 frxETH
162054922025-02-10 21:08:1524 hrs ago1739221695
Curve.fi: Router
0.001 frxETH
162054382025-02-10 21:06:2724 hrs ago1739221587
Curve.fi: Router
0.00763201 frxETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CurveRouterNgPoolsOnly v1.1

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

Contract Source Code (Vyper language format)

# @version 0.3.10

"""
@title CurveRouterNgPoolsOnly v1.1
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved
@notice Performs up to 5 swaps in a single transaction, can do estimations with get_dy and get_dx
"""

version: public(constant(String[8])) = "1.1.0"  # ng pools


from vyper.interfaces import ERC20

interface StableNgPool:
    def get_dy(i: int128, j: int128, in_amount: uint256) -> uint256: view
    def get_dx(i: int128, j: int128, out_amount: uint256) -> uint256: view
    def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable
    def calc_token_amount(_amounts: DynArray[uint256, 8], _is_deposit: bool) -> uint256: view
    def add_liquidity(_amounts: DynArray[uint256, 8], _min_mint_amount: uint256) -> uint256: nonpayable
    def calc_withdraw_one_coin(token_amount: uint256, i: int128) -> uint256: view
    def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256): nonpayable

interface StableNgMetaPool:
    def BASE_POOL() -> address: view
    def get_dy_underlying(i: int128, j: int128, amount: uint256) -> uint256: view
    def get_dx_underlying(i: int128, j: int128, amount: uint256) -> uint256: view
    def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable

interface CryptoNgPool:
    def get_dy(i: uint256, j: uint256, in_amount: uint256) -> uint256: view
    def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view
    def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256): nonpayable
    def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view
    def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): nonpayable

interface TwoCryptoNgPool:
    def calc_token_amount(amounts: uint256[2], is_deposit: bool) -> uint256: view
    def add_liquidity(amounts: uint256[2], min_mint_amount: uint256) -> uint256: nonpayable

interface TriCryptoNgPool:
    def calc_token_amount(amounts: uint256[3], is_deposit: bool) -> uint256: view
    def add_liquidity(amounts: uint256[3], min_mint_amount: uint256) -> uint256: nonpayable

interface WETH:
    def deposit(): payable
    def withdraw(_amount: uint256): nonpayable


event Exchange:
    sender: indexed(address)
    receiver: indexed(address)
    route: address[11]
    swap_params: uint256[4][5]
    in_amount: uint256
    out_amount: uint256


ETH_ADDRESS: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
WETH_ADDRESS: immutable(address)

is_approved: HashMap[address, HashMap[address, bool]]


@external
@payable
def __default__():
    pass


@external
def __init__( _weth: address):
    WETH_ADDRESS = _weth


@external
@payable
@nonreentrant('lock')
def exchange(
    _route: address[11],
    _swap_params: uint256[4][5],
    _amount: uint256,
    _min_dy: uint256,
    _receiver: address=msg.sender
) -> uint256:
    """
    @notice Performs up to 5 swaps in a single transaction.
    @dev Routing and swap params must be determined off-chain. This
         functionality is designed for gas efficiency over ease-of-use.
    @param _route Array of [initial token, pool, token, pool, token, ...]
                  The array is iterated until a pool address of 0x00, then the last
                  given token is transferred to `_receiver`
    @param _swap_params Multidimensional array of [i, j, swap_type, pool_type] where
                        i is the index of input token
                        j is the index of output token

                        The swap_type should be:
                        1. for `exchange`,
                        2. for `exchange_underlying` (stable-ng metapools),
                        3. -- legacy --
                        4. for coin -> LP token "exchange" (actually `add_liquidity`),
                        5. -- legacy --
                        6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
                        7. -- legacy --
                        8. for ETH <-> WETH

                        pool_type: 10 - stable-ng, 20 - twocrypto-ng, 30 - tricrypto-ng, 4 - llamma

    @param _amount The amount of input token (`_route[0]`) to be sent.
    @param _min_dy The minimum amount received after the final swap.
    @param _receiver Address to transfer the final output token to.
    @return Received amount of the final output token.
    """
    input_token: address = _route[0]
    output_token: address = empty(address)
    amount: uint256 = _amount

    # validate / transfer initial token
    if input_token == ETH_ADDRESS:
        assert msg.value == amount
    else:
        assert msg.value == 0
        assert ERC20(input_token).transferFrom(msg.sender, self, amount, default_return_value=True)

    for i in range(5):
        # 5 rounds of iteration to perform up to 5 swaps
        swap: address = _route[i * 2 + 1]
        output_token = _route[(i + 1) * 2]
        params: uint256[4] = _swap_params[i]  # i, j, swap_type, pool_type

        # store the initial balance of the output_token
        output_token_initial_balance: uint256 = self.balance
        if output_token != ETH_ADDRESS:
            output_token_initial_balance = ERC20(output_token).balanceOf(self)

        if not self.is_approved[input_token][swap]:
            assert ERC20(input_token).approve(swap, max_value(uint256), default_return_value=True, skip_contract_check=True)
            self.is_approved[input_token][swap] = True

        # perform the swap according to the swap type
        if params[2] == 1:
            if params[3] == 10:  # stable-ng
                StableNgPool(swap).exchange(convert(params[0], int128), convert(params[1], int128), amount, 0)
            else:  # twocrypto-ng, tricrypto-ng, llamma
                CryptoNgPool(swap).exchange(params[0], params[1], amount, 0)
        elif params[2] == 2:  # stable-ng metapools
            StableNgMetaPool(swap).exchange_underlying(convert(params[0], int128), convert(params[1], int128), amount, 0)
        elif params[2] == 4:
            if params[3] == 10:  # stable-ng
                amounts: DynArray[uint256, 8] = [0, 0, 0, 0, 0, 0, 0, 0]
                amounts[params[0]] = amount
                StableNgPool(swap).add_liquidity(amounts, 0)
            elif params[3] == 20:  # twocrypto-ng
                amounts: uint256[2] = [0, 0]
                amounts[params[0]] = amount
                TwoCryptoNgPool(swap).add_liquidity(amounts, 0)
            elif params[3] == 30:  # tricrypto-ng
                amounts: uint256[3] = [0, 0, 0]
                amounts[params[0]] = amount
                TriCryptoNgPool(swap).add_liquidity(amounts, 0)
        elif params[2] == 6:
            if params[3] == 10:  # stable-ng
                StableNgPool(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0)
            else:  # twocrypto-ng, tricrypto-ng
                CryptoNgPool(swap).remove_liquidity_one_coin(amount, params[1], 0)
        elif params[2] == 8:
            if input_token == ETH_ADDRESS and output_token == WETH_ADDRESS:
                WETH(swap).deposit(value=amount)
            elif input_token == WETH_ADDRESS and output_token == ETH_ADDRESS:
                WETH(swap).withdraw(amount)
            else:
                raise "Swap type 8 is only for ETH <-> WETH"
        else:
            raise "Bad swap type"

        # update the amount received
        if output_token == ETH_ADDRESS:
            amount = self.balance
        else:
            amount = ERC20(output_token).balanceOf(self)

        # sanity check, if the routing data is incorrect we will have a 0 balance change and that is bad
        assert amount - output_token_initial_balance != 0, "Received nothing"

        # check if this was the last swap
        if i == 4 or _route[i * 2 + 3] == empty(address):
            break
        # if there is another swap, the output token becomes the input for the next round
        input_token = output_token

    amount -= 1  # Change non-zero -> non-zero costs less gas than zero -> non-zero
    assert amount >= _min_dy, "Slippage"

    # transfer the final token to the receiver
    if output_token == ETH_ADDRESS:
        raw_call(_receiver, b"", value=amount)
    else:
        assert ERC20(output_token).transfer(_receiver, amount, default_return_value=True)

    log Exchange(msg.sender, _receiver, _route, _swap_params, _amount, amount)

    return amount


@view
@external
def get_dy(
    _route: address[11],
    _swap_params: uint256[4][5],
    _amount: uint256,
) -> uint256:
    """
    @notice Get amount of the final output token received in an exchange
    @dev Routing and swap params must be determined off-chain. This
         functionality is designed for gas efficiency over ease-of-use.
    @param _route Array of [initial token, pool, token, pool, token, ...]
                  The array is iterated until a pool address of 0x00, then the last
                  given token is transferred to `_receiver`
    @param _swap_params Multidimensional array of [i, j, swap_type, pool_type] where
                        i is the index of input token
                        j is the index of output token

                        The swap_type should be:
                        1. for `exchange`,
                        2. for `exchange_underlying` (stable-ng metapools),
                        3. -- legacy --
                        4. for coin -> LP token "exchange" (actually `add_liquidity`),
                        5. -- legacy --
                        6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
                        7. -- legacy --
                        8. for ETH <-> WETH

                        pool_type: 10 - stable-ng, 20 - twocrypto-ng, 30 - tricrypto-ng, 4 - llamma

    @param _amount The amount of input token (`_route[0]`) to be sent.
    @return Expected amount of the final output token.
    """
    amount: uint256 = _amount

    for i in range(5):
        # 5 rounds of iteration to perform up to 5 swaps
        swap: address = _route[i * 2 + 1]
        params: uint256[4] = _swap_params[i]  # i, j, swap_type, pool_type

        # Calc output amount according to the swap type
        if params[2] == 1:
            if params[3] == 10:  # stable_ng
                amount = StableNgPool(swap).get_dy(convert(params[0], int128), convert(params[1], int128), amount)
            else:  # twocrypto-ng, tricrypto-ng, llamma
                amount = CryptoNgPool(swap).get_dy(params[0], params[1], amount)
        elif params[2] == 2:  # stable-ng metapools
                amount = StableNgMetaPool(swap).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount)
        elif params[2] == 4:
            if params[3] == 10:  # stable-ng
                amounts: DynArray[uint256, 8] = [0, 0, 0, 0, 0, 0, 0, 0]
                amounts[params[0]] = amount
                amount = StableNgPool(swap).calc_token_amount(amounts, True)
            elif params[3] == 20:  # twocrypto-ng
                amounts: uint256[2] = [0, 0]
                amounts[params[0]] = amount
                amount = TwoCryptoNgPool(swap).calc_token_amount(amounts, True)
            elif params[3] == 30:  # tricrypto-ng
                amounts: uint256[3] = [0, 0, 0]
                amounts[params[0]] = amount
                amount = TriCryptoNgPool(swap).calc_token_amount(amounts, True)
        elif params[2] == 6:
            if params[3] == 10:  # stable-ng
                amount = StableNgPool(swap).calc_withdraw_one_coin(amount, convert(params[1], int128))
            else:  # twocrypto-ng, tricrypto-ng
                amount = CryptoNgPool(swap).calc_withdraw_one_coin(amount, params[1])
        elif params[2] == 8:
            # ETH <--> WETH rate is 1:1
            pass
        else:
            raise "Bad swap type"

        # check if this was the last swap
        if i == 4 or _route[i * 2 + 3] == empty(address):
            break

    return amount - 1


@view
@external
def get_dx(
    _route: address[11],
    _swap_params: uint256[4][5],
    _out_amount: uint256,
) -> uint256:
    """
    @notice Calculate the input amount required to receive the desired output amount.
            This method is NOT PRECISE for swap_type = 4 and 6.
    @dev Routing and swap params must be determined off-chain. This
         functionality is designed for gas efficiency over ease-of-use.
    @param _route Array of [initial token, pool, token, pool, token, ...]
                  The array is iterated until a pool address of 0x00, then the last
                  given token is transferred to `_receiver`
    @param _swap_params Multidimensional array of [i, j, swap_type, pool_type] where
                        i is the index of input token
                        j is the index of output token

                        The swap_type should be:
                        1. for `exchange`,
                        2. for `exchange_underlying` (stable-ng metapools),
                        3. -- legacy --
                        4. for coin -> LP token "exchange" (actually `add_liquidity`),
                        5. -- legacy --
                        6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`)
                        7. -- legacy --
                        8. for ETH <-> WETH

                        pool_type: 10 - stable-ng, 20 - twocrypto-ng, 30 - tricrypto-ng, 4 - llamma

    @param _out_amount The desired amount of output coin to receive.
    @return Required amount of input token to send.
    """
    amount: uint256 = _out_amount

    for _i in range(5):
        # 5 rounds of iteration to perform up to 5 swaps
        i: uint256 = 4 - _i
        swap: address = _route[i * 2 + 1]
        if swap == empty(address):
            continue
        params: uint256[4] = _swap_params[i]  # i, j, swap_type, pool_type

        # Calc a required input amount according to the swap type
        if params[2] == 1:
            if params[3] == 10:  # stable-ng
                amount = StableNgPool(swap).get_dx(convert(params[0], int128), convert(params[1], int128), amount)
            else:  # twocrypto-ng, tricrypto-ng, llamma
                amount = CryptoNgPool(swap).get_dx(params[0], params[1], amount)
        elif params[2] == 2:  # stable-ng metapool
            _n: int128 = convert(params[0], int128)
            _k: int128 = convert(params[1], int128)
            if _n > 0 and _k > 0:
                base_pool: address = StableNgMetaPool(swap).BASE_POOL()
                amount = StableNgPool(base_pool).get_dx(_n - 1, _k - 1, amount)
            else:
                amount = StableNgMetaPool(swap).get_dx_underlying(_n, _k, amount)
        elif params[2] == 4:
            # This is not correct. Should be something like calc_add_one_coin. But tests say that it's precise enough.
            if params[3] == 10:  # stable_ng
                amount = StableNgPool(swap).calc_withdraw_one_coin(amount, convert(params[0], int128))
            else:  # twocrypto-ng, tricrypto-ng
                amount = CryptoNgPool(swap).calc_withdraw_one_coin(amount, params[0])
        elif params[2] == 6:
            if params[3] == 10:  # stable-ng
                amounts: DynArray[uint256, 8] = [0, 0, 0, 0, 0, 0, 0, 0]
                amounts[params[1]] = amount
                amount = StableNgPool(swap).calc_token_amount(amounts, False)
            elif params[3] == 20:  # twocrypto-ng
                amounts: uint256[2] = [0, 0]
                amounts[params[1]] = amount
                amount = TwoCryptoNgPool(swap).calc_token_amount(amounts, False)
            elif params[3] == 30:  # tricrypto-ng
                amounts: uint256[3] = [0, 0, 0]
                amounts[params[1]] = amount
                amount = TriCryptoNgPool(swap).calc_token_amount(amounts, False)
        elif params[2] == 8:
            # ETH <--> WETH rate is 1:1
            pass
        else:
            raise "Bad swap type"

    return amount

Contract Security Audit

Contract ABI

[{"name":"Exchange","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"route","type":"address[11]","indexed":false},{"name":"swap_params","type":"uint256[4][5]","indexed":false},{"name":"in_amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_weth","type":"address"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_amount","type":"uint256"},{"name":"_min_dy","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_amount","type":"uint256"},{"name":"_min_dy","type":"uint256"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[4][5]"},{"name":"_out_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]}]

61196d5150346100365760206119bc5f395f518060a01c6100365760405260405161196d5261196d61003a6100003961198d610000f35b5f80fd5f3560e01c60026003821660011b61196501601e395f51565b6354fd4d50811861009657346119615760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b63fd44959c811861195f5761044336111561196157610424358060a01c611961576101a0525b6004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180525f546002146119615760025f556040516101c0525f6101e0526103e4356102005273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186101ac5761020051341861196157610226565b34611961576101c0516323b872dd610220523361024052306102605261020051610280526020610220606461023c5f855af16101ea573d5f5f3e3d5ffd5b3d61020157803b156119615760016102a05261021a565b60203d1061196157610220518060011c611961576102a0525b6102a090505115611961575b5f6005905b8061022052610220518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516102405261022051600181018181106119615790508060011b818160011c18611961579050600a81116119615760051b604001516101e05261022051600481116119615760071b6101640180356102605260208101356102805260408101356102a05260608101356102c05250476102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e0511461032e576101e0516370a082316103005230610320526020610300602461031c845afa61031b573d5f5f3e3d5ffd5b60203d10611961576103009050516102e0525b60016101c0516020525f5260405f2080610240516020525f5260405f209050546103f5576101c05163095ea7b36103005261024051610320527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610340526020610300604461031c5f855af16103a6573d5f5f3e3d5ffd5b3d6103b6576001610360526103c7565b610300518060011c61196157610360525b6103609050511561196157600160016101c0516020525f5260405f2080610240516020525f5260405f209050555b60016102a051186104bb57600a6102c0511861046b5761024051633df02124610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610465573d5f5f3e3d5ffd5b50610982565b61024051635b41b908610300526102605161032052610280516103405261020051610360525f61038052803b15611961575f610300608461031c5f855af16104b5573d5f5f3e3d5ffd5b50610982565b60026102a05118610526576102405163a6417ed6610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610520573d5f5f3e3d5ffd5b50610982565b60046102a051186106f557600a6102c051186105fd5761010036610320376008610300526102005161026051610300518110156119615760051b61032001526102405163b72df5de610420526040806104405280610440015f610300518083528060051b5f82600881116119615780156105ba57905b8060051b61032001518160051b60208801015260010181811861059c575b505082016020019150509050810190505f6104605250602061042061016461043c5f855af16105eb573d5f5f3e3d5ffd5b60203d10611961576104205050610982565b60146102c0511861067557604036610300376102005161026051600181116119615760051b610300015261024051630b4c7e4d61034052610300516103605261032051610380525f6103a0526020610340606461035c5f855af1610663573d5f5f3e3d5ffd5b60203d10611961576103405050610982565b601e6102c0511861098257606036610300376102005161026051600281116119615760051b610300015261024051634515cef3610360526103005161038052610320516103a052610340516103c0525f6103e0526020610360608461037c5f855af16106e3573d5f5f3e3d5ffd5b60203d10611961576103605050610982565b60066102a051186107a357600a6102c0511861075b5761024051631a4d01d26103005261020051610320526102805180607f1c61196157610340525f61036052803b15611961575f610300606461031c5f855af1610755573d5f5f3e3d5ffd5b50610982565b6102405163f1dc3cc961030052610200516103205261028051610340525f61036052803b15611961575f610300606461031c5f855af161079d573d5f5f3e3d5ffd5b50610982565b60086102a0511861091d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186107e057602061196d5f395f516101e05118156107e2565b5f5b6108e757602061196d5f395f516101c051186108185773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051181561081a565b5f5b6108ac576024610300527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610320527f57455448000000000000000000000000000000000000000000000000000000006103405261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd610982565b61024051632e1a7d4d610300526102005161032052803b15611961575f610300602461031c5f855af16108e1573d5f5f3e3d5ffd5b50610982565b6102405163d0e30db061030052803b15611961575f610300600461031c61020051855af1610917573d5f5f3e3d5ffd5b50610982565b600d610300527f42616420737761702074797065000000000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051186109aa5747610200526109e8565b6101e0516370a082316103005230610320526020610300602461031c845afa6109d5573d5f5f3e3d5ffd5b60203d1061196157610300905051610200525b610200516102e0518082038281116119615790509050610a67576010610300527f5265636569766564206e6f7468696e67000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b60046102205118610a79576001610aab565b610220518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b15610ab557610ac8565b6101e0516101c05260010181811861022b575b505061020051600181038181116119615790506102005261040435610200511015610b52576008610220527f536c6970706167650000000000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e05118610ba5576101a051610200515a5f61022052610220505f5f61022051610240858786f1905090509050610c18573d5f5f3e3d5ffd610c18565b6101e05163a9059cbb610220526101a0516102405261020051610260526020610220604461023c5f855af1610bdc573d5f5f3e3d5ffd5b3d610bf357803b1561196157600161028052610c0c565b60203d1061196157610220518060011c61196157610280525b61028090505115611961575b6101a051337f6324485a21bc5138ec352d4949d0adc75d8e1382a687e1aa1ce6863f40c9e463610160610220610160604060045afa5060806101646103803760806101e46104003760806102646104803760806102e4610500376080610364610580376103e435610600526102005161062052610420610220a3602061020060035f55f361195f565b63aad348a28118610cc05761042336111561196157336101a0526100bc565b6311e21386811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516101e0526101c051600481116119615760071b610164018035610200526020810135610220526040810135610240526060810135610260525060016102405118610ec357600a6102605118610e6e576101e051635e0d443f610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610e57573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e05163556d6e9f61028052610200516102a052610220516102c0526101a0516102e0526020610280606461029c845afa610eac573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b60026102405118610f33576101e0516307211ef7610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610f1c573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6004610240511861111157600a610260511861100f57610100366102a0376008610280526101a05161020051610280518110156119615760051b6102a001526101e051633db06dd86103a0526040806103c052806103c0015f610280518083528060051b5f8260088111611961578015610fc757905b8060051b6102a001518160051b602088010152600101818118610fa9575b5050820160200191505090508101905060016103e0525060206103a06101646103bc845afa610ff8573d5f5f3e3d5ffd5b60203d10611961576103a09050516101a05261123e565b6014610260511861108c57604036610280376101a05161020051600181116119615760051b61028001526101e05163ed8e84f36102c052610280516102e0526102a0516103005260016103205260206102c060646102dc845afa611075573d5f5f3e3d5ffd5b60203d10611961576102c09050516101a05261123e565b601e610260511861123e57606036610280376101a05161020051600281116119615760051b61028001526101e051633883e1196102e05261028051610300526102a051610320526102c0516103405260016103605260206102e060846102fc845afa6110fa573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a05261123e565b600661024051186111c957600a610260511861117c576101e05163cc2b27d7610280526101a0516102a0526102205180607f1c611961576102c0526020610280604461029c845afa611165573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e051634fb08c5e610280526101a0516102a052610220516102c0526020610280604461029c845afa6111b2573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b600861024051186111d95761123e565b600d610280527f42616420737761702074797065000000000000000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b60046101c05118611250576001611282565b6101c0518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b1561128c57611297565b600101818118610d85575b50506101a051600181038181116119615790506101c05260206101c0f361195f565b637b5e2c7b811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c05180600403600481116119615790506101e0526101e0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b6040015161020052610200516113da57611943565b6101e051600481116119615760071b6101640180356102205260208101356102405260408101356102605260608101356102805250600161026051186114df57600a610280511861148a57610200516367df02ca6102a0526102205180607f1c611961576102c0526102405180607f1c611961576102e0526101a0516103005260206102a060646102bc845afa611473573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b610200516337ed3a7a6102a052610220516102c052610240516102e0526101a0516103005260206102a060646102bc845afa6114c8573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b6002610260511861163b576102205180607f1c611961576102a0526102405180607f1c611961576102c05260016102a051121561151c575f611525565b60016102c05112155b61157e5761020051630e71d1b96102e0526102a051610300526102c051610320526101a0516103405260206102e060646102fc845afa611567573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b610200516371511a5e610300526020610300600461031c845afa6115a4573d5f5f3e3d5ffd5b60203d1061196157610300518060a01c61196157610340526103409050516102e0526102e0516367df02ca610300526102a0516001810380600f0b8118611961579050610320526102c0516001810380600f0b8118611961579050610340526101a051610360526020610300606461031c845afa611624573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600461026051186116f357600a61028051186116a6576102005163cc2b27d76102a0526101a0516102c0526102205180607f1c611961576102e05260206102a060446102bc845afa61168f573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b61020051634fb08c5e6102a0526101a0516102c052610220516102e05260206102a060446102bc845afa6116dc573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b600661026051186118ce57600a61028051186117ce57610100366102c03760086102a0526101a051610240516102a0518110156119615760051b6102c0015261020051633db06dd86103c0526040806103e052806103e0015f6102a0518083528060051b5f826008811161196157801561178757905b8060051b6102c001518160051b602088010152600101818118611769575b505082016020019150509050810190505f610400525060206103c06101646103dc845afa6117b7573d5f5f3e3d5ffd5b60203d10611961576103c09050516101a052611943565b6014610280511861184a576040366102a0376101a05161024051600181116119615760051b6102a001526102005163ed8e84f36102e0526102a051610300526102c051610320525f6103405260206102e060646102fc845afa611833573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b601e6102805118611943576060366102a0376101a05161024051600281116119615760051b6102a0015261020051633883e119610300526102a051610320526102c051610340526102e051610360525f610380526020610300608461031c845afa6118b7573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600861026051186118de57611943565b600d6102a0527f42616420737761702074797065000000000000000000000000000000000000006102c0526102a0506102a051806102c001601f825f031636823750506308c379a061026052602061028052601f19601f6102a051011660440161027cfd5b60010181811861137e57505060206101a0f361195f5661195f565b5b005b5f80fd0018195e0ca112b98419196d81081820a16576797065728300030a0015000000000000000000000000fc00000000000000000000000000000000000006

Deployed Bytecode

0x5f3560e01c60026003821660011b61196501601e395f51565b6354fd4d50811861009657346119615760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506080f35b63fd44959c811861195f5761044336111561196157610424358060a01c611961576101a0525b6004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180525f546002146119615760025f556040516101c0525f6101e0526103e4356102005273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186101ac5761020051341861196157610226565b34611961576101c0516323b872dd610220523361024052306102605261020051610280526020610220606461023c5f855af16101ea573d5f5f3e3d5ffd5b3d61020157803b156119615760016102a05261021a565b60203d1061196157610220518060011c611961576102a0525b6102a090505115611961575b5f6005905b8061022052610220518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516102405261022051600181018181106119615790508060011b818160011c18611961579050600a81116119615760051b604001516101e05261022051600481116119615760071b6101640180356102605260208101356102805260408101356102a05260608101356102c05250476102e05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e0511461032e576101e0516370a082316103005230610320526020610300602461031c845afa61031b573d5f5f3e3d5ffd5b60203d10611961576103009050516102e0525b60016101c0516020525f5260405f2080610240516020525f5260405f209050546103f5576101c05163095ea7b36103005261024051610320527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610340526020610300604461031c5f855af16103a6573d5f5f3e3d5ffd5b3d6103b6576001610360526103c7565b610300518060011c61196157610360525b6103609050511561196157600160016101c0516020525f5260405f2080610240516020525f5260405f209050555b60016102a051186104bb57600a6102c0511861046b5761024051633df02124610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610465573d5f5f3e3d5ffd5b50610982565b61024051635b41b908610300526102605161032052610280516103405261020051610360525f61038052803b15611961575f610300608461031c5f855af16104b5573d5f5f3e3d5ffd5b50610982565b60026102a05118610526576102405163a6417ed6610300526102605180607f1c61196157610320526102805180607f1c611961576103405261020051610360525f61038052803b15611961575f610300608461031c5f855af1610520573d5f5f3e3d5ffd5b50610982565b60046102a051186106f557600a6102c051186105fd5761010036610320376008610300526102005161026051610300518110156119615760051b61032001526102405163b72df5de610420526040806104405280610440015f610300518083528060051b5f82600881116119615780156105ba57905b8060051b61032001518160051b60208801015260010181811861059c575b505082016020019150509050810190505f6104605250602061042061016461043c5f855af16105eb573d5f5f3e3d5ffd5b60203d10611961576104205050610982565b60146102c0511861067557604036610300376102005161026051600181116119615760051b610300015261024051630b4c7e4d61034052610300516103605261032051610380525f6103a0526020610340606461035c5f855af1610663573d5f5f3e3d5ffd5b60203d10611961576103405050610982565b601e6102c0511861098257606036610300376102005161026051600281116119615760051b610300015261024051634515cef3610360526103005161038052610320516103a052610340516103c0525f6103e0526020610360608461037c5f855af16106e3573d5f5f3e3d5ffd5b60203d10611961576103605050610982565b60066102a051186107a357600a6102c0511861075b5761024051631a4d01d26103005261020051610320526102805180607f1c61196157610340525f61036052803b15611961575f610300606461031c5f855af1610755573d5f5f3e3d5ffd5b50610982565b6102405163f1dc3cc961030052610200516103205261028051610340525f61036052803b15611961575f610300606461031c5f855af161079d573d5f5f3e3d5ffd5b50610982565b60086102a0511861091d5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101c051186107e057602061196d5f395f516101e05118156107e2565b5f5b6108e757602061196d5f395f516101c051186108185773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051181561081a565b5f5b6108ac576024610300527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610320527f57455448000000000000000000000000000000000000000000000000000000006103405261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd610982565b61024051632e1a7d4d610300526102005161032052803b15611961575f610300602461031c5f855af16108e1573d5f5f3e3d5ffd5b50610982565b6102405163d0e30db061030052803b15611961575f610300600461031c61020051855af1610917573d5f5f3e3d5ffd5b50610982565b600d610300527f42616420737761702074797065000000000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e051186109aa5747610200526109e8565b6101e0516370a082316103005230610320526020610300602461031c845afa6109d5573d5f5f3e3d5ffd5b60203d1061196157610300905051610200525b610200516102e0518082038281116119615790509050610a67576010610300527f5265636569766564206e6f7468696e67000000000000000000000000000000006103205261030050610300518061032001601f825f031636823750506308c379a06102c05260206102e052601f19601f6103005101166044016102dcfd5b60046102205118610a79576001610aab565b610220518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b15610ab557610ac8565b6101e0516101c05260010181811861022b575b505061020051600181038181116119615790506102005261040435610200511015610b52576008610220527f536c6970706167650000000000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6101e05118610ba5576101a051610200515a5f61022052610220505f5f61022051610240858786f1905090509050610c18573d5f5f3e3d5ffd610c18565b6101e05163a9059cbb610220526101a0516102405261020051610260526020610220604461023c5f855af1610bdc573d5f5f3e3d5ffd5b3d610bf357803b1561196157600161028052610c0c565b60203d1061196157610220518060011c61196157610280525b61028090505115611961575b6101a051337f6324485a21bc5138ec352d4949d0adc75d8e1382a687e1aa1ce6863f40c9e463610160610220610160604060045afa5060806101646103803760806101e46104003760806102646104803760806102e4610500376080610364610580376103e435610600526102005161062052610420610220a3602061020060035f55f361195f565b63aad348a28118610cc05761042336111561196157336101a0526100bc565b6311e21386811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b604001516101e0526101c051600481116119615760071b610164018035610200526020810135610220526040810135610240526060810135610260525060016102405118610ec357600a6102605118610e6e576101e051635e0d443f610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610e57573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e05163556d6e9f61028052610200516102a052610220516102c0526101a0516102e0526020610280606461029c845afa610eac573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b60026102405118610f33576101e0516307211ef7610280526102005180607f1c611961576102a0526102205180607f1c611961576102c0526101a0516102e0526020610280606461029c845afa610f1c573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6004610240511861111157600a610260511861100f57610100366102a0376008610280526101a05161020051610280518110156119615760051b6102a001526101e051633db06dd86103a0526040806103c052806103c0015f610280518083528060051b5f8260088111611961578015610fc757905b8060051b6102a001518160051b602088010152600101818118610fa9575b5050820160200191505090508101905060016103e0525060206103a06101646103bc845afa610ff8573d5f5f3e3d5ffd5b60203d10611961576103a09050516101a05261123e565b6014610260511861108c57604036610280376101a05161020051600181116119615760051b61028001526101e05163ed8e84f36102c052610280516102e0526102a0516103005260016103205260206102c060646102dc845afa611075573d5f5f3e3d5ffd5b60203d10611961576102c09050516101a05261123e565b601e610260511861123e57606036610280376101a05161020051600281116119615760051b61028001526101e051633883e1196102e05261028051610300526102a051610320526102c0516103405260016103605260206102e060846102fc845afa6110fa573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a05261123e565b600661024051186111c957600a610260511861117c576101e05163cc2b27d7610280526101a0516102a0526102205180607f1c611961576102c0526020610280604461029c845afa611165573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b6101e051634fb08c5e610280526101a0516102a052610220516102c0526020610280604461029c845afa6111b2573d5f5f3e3d5ffd5b60203d10611961576102809050516101a05261123e565b600861024051186111d95761123e565b600d610280527f42616420737761702074797065000000000000000000000000000000000000006102a0526102805061028051806102a001601f825f031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b60046101c05118611250576001611282565b6101c0518060011b818160011c1861196157905060038101818110611961579050600a81116119615760051b60400151155b1561128c57611297565b600101818118610d85575b50506101a051600181038181116119615790506101c05260206101c0f361195f565b637b5e2c7b811861195f5761040436103417611961576004358060a01c611961576040526024358060a01c611961576060526044358060a01c611961576080526064358060a01c6119615760a0526084358060a01c6119615760c05260a4358060a01c6119615760e05260c4358060a01c611961576101005260e4358060a01c6119615761012052610104358060a01c6119615761014052610124358060a01c6119615761016052610144358060a01c61196157610180526103e4356101a0525f6005905b806101c0526101c05180600403600481116119615790506101e0526101e0518060011b818160011c1861196157905060018101818110611961579050600a81116119615760051b6040015161020052610200516113da57611943565b6101e051600481116119615760071b6101640180356102205260208101356102405260408101356102605260608101356102805250600161026051186114df57600a610280511861148a57610200516367df02ca6102a0526102205180607f1c611961576102c0526102405180607f1c611961576102e0526101a0516103005260206102a060646102bc845afa611473573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b610200516337ed3a7a6102a052610220516102c052610240516102e0526101a0516103005260206102a060646102bc845afa6114c8573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b6002610260511861163b576102205180607f1c611961576102a0526102405180607f1c611961576102c05260016102a051121561151c575f611525565b60016102c05112155b61157e5761020051630e71d1b96102e0526102a051610300526102c051610320526101a0516103405260206102e060646102fc845afa611567573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b610200516371511a5e610300526020610300600461031c845afa6115a4573d5f5f3e3d5ffd5b60203d1061196157610300518060a01c61196157610340526103409050516102e0526102e0516367df02ca610300526102a0516001810380600f0b8118611961579050610320526102c0516001810380600f0b8118611961579050610340526101a051610360526020610300606461031c845afa611624573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600461026051186116f357600a61028051186116a6576102005163cc2b27d76102a0526101a0516102c0526102205180607f1c611961576102e05260206102a060446102bc845afa61168f573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b61020051634fb08c5e6102a0526101a0516102c052610220516102e05260206102a060446102bc845afa6116dc573d5f5f3e3d5ffd5b60203d10611961576102a09050516101a052611943565b600661026051186118ce57600a61028051186117ce57610100366102c03760086102a0526101a051610240516102a0518110156119615760051b6102c0015261020051633db06dd86103c0526040806103e052806103e0015f6102a0518083528060051b5f826008811161196157801561178757905b8060051b6102c001518160051b602088010152600101818118611769575b505082016020019150509050810190505f610400525060206103c06101646103dc845afa6117b7573d5f5f3e3d5ffd5b60203d10611961576103c09050516101a052611943565b6014610280511861184a576040366102a0376101a05161024051600181116119615760051b6102a001526102005163ed8e84f36102e0526102a051610300526102c051610320525f6103405260206102e060646102fc845afa611833573d5f5f3e3d5ffd5b60203d10611961576102e09050516101a052611943565b601e6102805118611943576060366102a0376101a05161024051600281116119615760051b6102a0015261020051633883e119610300526102a051610320526102c051610340526102e051610360525f610380526020610300608461031c845afa6118b7573d5f5f3e3d5ffd5b60203d10611961576103009050516101a052611943565b600861026051186118de57611943565b600d6102a0527f42616420737761702074797065000000000000000000000000000000000000006102c0526102a0506102a051806102c001601f825f031636823750506308c379a061026052602061028052601f19601f6102a051011660440161027cfd5b60010181811861137e57505060206101a0f361195f5661195f565b5b005b5f80fd0018195e0ca112b9000000000000000000000000fc00000000000000000000000000000000000006

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

000000000000000000000000fc00000000000000000000000000000000000006

-----Decoded View---------------
Arg [0] : _weth (address): 0xFC00000000000000000000000000000000000006

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000fc00000000000000000000000000000000000006


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.