ETH Price: $2,377.85 (-3.79%)

Contract

0x45F783CCE6B7FF23B2ab2D70e416cdb7D6055f51
 
Transaction Hash
Method
Block
From
To
Remove_liquidity179203182023-08-15 12:43:35414 days ago1692103415IN
Curve.fi: y Swap
0 ETH0.005519625.98537125
Remove_liquidity179075882023-08-13 18:00:11416 days ago1691949611IN
Curve.fi: y Swap
0 ETH0.0032378415.23979659
Exchange178436772023-08-04 19:23:23425 days ago1691177003IN
Curve.fi: y Swap
0 ETH0.0089199317.30177565
Exchange178434902023-08-04 18:45:47425 days ago1691174747IN
Curve.fi: y Swap
0 ETH0.0120561824.18735344
Remove_liquidity178434512023-08-04 18:37:59425 days ago1691174279IN
Curve.fi: y Swap
0 ETH0.00490525.10442383
Remove_liquidity178089312023-07-30 22:50:47429 days ago1690757447IN
Curve.fi: y Swap
0 ETH0.0033423215.727122
Remove_liquidity177906012023-07-28 9:16:11432 days ago1690535771IN
Curve.fi: y Swap
0 ETH0.0039741918.70879911
Remove_liquidity177314772023-07-20 2:43:59440 days ago1689821039IN
Curve.fi: y Swap
0 ETH0.0035601416.76054773
Remove_liquidity176950542023-07-14 23:48:23445 days ago1689378503IN
Curve.fi: y Swap
0 ETH0.0081295438.27468245
Exchange175428702023-06-23 14:29:59467 days ago1687530599IN
Curve.fi: y Swap
0 ETH0.0118647823.68026103
Exchange175428592023-06-23 14:27:47467 days ago1687530467IN
Curve.fi: y Swap
0 ETH0.0105895721.13371334
Exchange175428522023-06-23 14:26:11467 days ago1687530371IN
Curve.fi: y Swap
0 ETH0.0108449321.64377545
Remove_liquidity175428432023-06-23 14:24:23467 days ago1687530263IN
Curve.fi: y Swap
0 ETH0.0055678326.20653019
Remove_liquidity175425782023-06-23 13:31:11467 days ago1687527071IN
Curve.fi: y Swap
0 ETH0.0068492332.237758
Remove_liquidity...175382782023-06-22 22:59:11467 days ago1687474751IN
Curve.fi: y Swap
0 ETH0.0089117214.4226465
Add_liquidity174834632023-06-15 6:18:47475 days ago1686809927IN
Curve.fi: y Swap
0 ETH0.0104050116.44314808
Remove_liquidity174834092023-06-15 6:07:47475 days ago1686809267IN
Curve.fi: y Swap
0 ETH0.0056167626.42784511
Remove_liquidity174735592023-06-13 20:51:11477 days ago1686689471IN
Curve.fi: y Swap
0 ETH0.0023139616.06382494
Remove_liquidity...174735412023-06-13 20:47:35477 days ago1686689255IN
Curve.fi: y Swap
0 ETH0.0107067715.65144215
Remove_liquidity170423242023-04-14 1:53:47537 days ago1681437227IN
Curve.fi: y Swap
0 ETH0.0068065232.05483086
Remove_liquidity170391802023-04-13 14:49:35538 days ago1681397375IN
Curve.fi: y Swap
0 ETH0.0069382537.1538234
Add_liquidity170377872023-04-13 9:39:47538 days ago1681378787IN
Curve.fi: y Swap
0 ETH0.0262292542.04720133
Add_liquidity170377592023-04-13 9:33:23538 days ago1681378403IN
Curve.fi: y Swap
0 ETH0.0286432745.91703292
Add_liquidity170377392023-04-13 9:28:59538 days ago1681378139IN
Curve.fi: y Swap
0 ETH0.0250097740.0923017
Add_liquidity170376862023-04-13 9:17:47538 days ago1681377467IN
Curve.fi: y Swap
0 ETH0.0338033152.74408723
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.1.0b16

Optimization Enabled:
N/A

Other Settings:
None license

Contract Source Code (Vyper language format)

# (c) Curve.Fi, 2020


# External Contracts
contract ERC20m:
    def totalSupply() -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def approve(_spender: address, _value: uint256) -> bool: modifying
    def mint(_to: address, _value: uint256): modifying
    def burn(_value: uint256): modifying
    def burnFrom(_to: address, _value: uint256): modifying
    def name() -> string[64]: constant
    def symbol() -> string[32]: constant
    def decimals() -> uint256: constant
    def balanceOf(arg0: address) -> uint256: constant
    def set_minter(_minter: address): modifying



# External Contracts
contract yERC20:
    def totalSupply() -> uint256: constant
    def allowance(_owner: address, _spender: address) -> uint256: constant
    def transfer(_to: address, _value: uint256) -> bool: modifying
    def transferFrom(_from: address, _to: address, _value: uint256) -> bool: modifying
    def approve(_spender: address, _value: uint256) -> bool: modifying
    def name() -> string[64]: constant
    def symbol() -> string[32]: constant
    def decimals() -> uint256: constant
    def balanceOf(arg0: address) -> uint256: constant
    def deposit(depositAmount: uint256): modifying
    def withdraw(withdrawTokens: uint256): modifying
    def getPricePerFullShare() -> uint256: constant


from vyper.interfaces import ERC20

# Tether transfer-only ABI
contract USDT:
    def transfer(_to: address, _value: uint256): modifying
    def transferFrom(_from: address, _to: address, _value: uint256): modifying

# This can (and needs to) be changed at compile time
N_COINS: constant(int128) = 4  # <- change

ZERO256: constant(uint256) = 0  # This hack is really bad XXX
ZEROS: constant(uint256[N_COINS]) = [ZERO256, ZERO256, ZERO256, ZERO256]  # <- change

TETHERED: constant(bool[N_COINS]) = [False, False, True, False]

FEE_DENOMINATOR: constant(uint256) = 10 ** 10
PRECISION: constant(uint256) = 10 ** 18  # The precision to convert to
PRECISION_MUL: constant(uint256[N_COINS]) = [convert(1, uint256), convert(1000000000000, uint256), convert(1000000000000, uint256), convert(1, uint256)]
# PRECISION_MUL: constant(uint256[N_COINS]) = [
#     PRECISION / convert(10 ** 18, uint256),  # DAI
#     PRECISION / convert(10 ** 6, uint256),   # USDC
#     PRECISION / convert(10 ** 6, uint256),   # USDT
#     PRECISION / convert(10 ** 18, uint256)]  # TUSD

admin_actions_delay: constant(uint256) = 3 * 86400

# Events
TokenExchange: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256})
TokenExchangeUnderlying: event({buyer: indexed(address), sold_id: int128, tokens_sold: uint256, bought_id: int128, tokens_bought: uint256})
AddLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256})
RemoveLiquidity: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], token_supply: uint256})
RemoveLiquidityImbalance: event({provider: indexed(address), token_amounts: uint256[N_COINS], fees: uint256[N_COINS], invariant: uint256, token_supply: uint256})
CommitNewAdmin: event({deadline: indexed(timestamp), admin: indexed(address)})
NewAdmin: event({admin: indexed(address)})
CommitNewParameters: event({deadline: indexed(timestamp), A: uint256, fee: uint256, admin_fee: uint256})
NewParameters: event({A: uint256, fee: uint256, admin_fee: uint256})

coins: public(address[N_COINS])
underlying_coins: public(address[N_COINS])
balances: public(uint256[N_COINS])
A: public(uint256)  # 2 x amplification coefficient
fee: public(uint256)  # fee * 1e10
admin_fee: public(uint256)  # admin_fee * 1e10
max_admin_fee: constant(uint256) = 5 * 10 ** 9

owner: public(address)
token: ERC20m

admin_actions_deadline: public(timestamp)
transfer_ownership_deadline: public(timestamp)
future_A: public(uint256)
future_fee: public(uint256)
future_admin_fee: public(uint256)
future_owner: public(address)

kill_deadline: timestamp
kill_deadline_dt: constant(uint256) = 2 * 30 * 86400
is_killed: bool


@public
def __init__(_coins: address[N_COINS], _underlying_coins: address[N_COINS],
             _pool_token: address,
             _A: uint256, _fee: uint256):
    """
    _coins: Addresses of ERC20 contracts of coins (y-tokens) involved
    _underlying_coins: Addresses of plain coins (ERC20)
    _pool_token: Address of the token representing LP share
    _A: Amplification coefficient multiplied by n * (n - 1)
    _fee: Fee to charge for exchanges
    """
    for i in range(N_COINS):
        assert _coins[i] != ZERO_ADDRESS
        assert _underlying_coins[i] != ZERO_ADDRESS
        self.balances[i] = 0
    self.coins = _coins
    self.underlying_coins = _underlying_coins
    self.A = _A
    self.fee = _fee
    self.admin_fee = 0
    self.owner = msg.sender
    self.kill_deadline = block.timestamp + kill_deadline_dt
    self.is_killed = False
    self.token = ERC20m(_pool_token)


@private
@constant
def _stored_rates() -> uint256[N_COINS]:
    result: uint256[N_COINS] = PRECISION_MUL
    for i in range(N_COINS):
        result[i] *= yERC20(self.coins[i]).getPricePerFullShare()
    return result


@private
@constant
def _xp(rates: uint256[N_COINS]) -> uint256[N_COINS]:
    result: uint256[N_COINS] = rates
    for i in range(N_COINS):
        result[i] = result[i] * self.balances[i] / PRECISION
    return result


@private
@constant
def _xp_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256[N_COINS]:
    result: uint256[N_COINS] = rates
    for i in range(N_COINS):
        result[i] = result[i] * _balances[i] / PRECISION
    return result


@private
@constant
def get_D(xp: uint256[N_COINS]) -> uint256:
    S: uint256 = 0
    for _x in xp:
        S += _x
    if S == 0:
        return 0

    Dprev: uint256 = 0
    D: uint256 = S
    Ann: uint256 = self.A * N_COINS
    for _i in range(255):
        D_P: uint256 = D
        for _x in xp:
            D_P = D_P * D / (_x * N_COINS + 1)  # +1 is to prevent /0
        Dprev = D
        D = (Ann * S + D_P * N_COINS) * D / ((Ann - 1) * D + (N_COINS + 1) * D_P)
        # Equality with the precision of 1
        if D > Dprev:
            if D - Dprev <= 1:
                break
        else:
            if Dprev - D <= 1:
                break
    return D


@private
@constant
def get_D_mem(rates: uint256[N_COINS], _balances: uint256[N_COINS]) -> uint256:
    return self.get_D(self._xp_mem(rates, _balances))


@public
@constant
def get_virtual_price() -> uint256:
    """
    Returns portfolio virtual price (for calculating profit)
    scaled up by 1e18
    """
    D: uint256 = self.get_D(self._xp(self._stored_rates()))
    # D is in the units similar to DAI (e.g. converted to precision 1e18)
    # When balanced, D = n * x_u - total virtual value of the portfolio
    token_supply: uint256 = self.token.totalSupply()
    return D * PRECISION / token_supply


@public
@constant
def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256:
    """
    Simplified method to calculate addition or reduction in token supply at
    deposit or withdrawal without taking fees into account (but looking at
    slippage).
    Needed to prevent front-running, not for precise calculations!
    """
    _balances: uint256[N_COINS] = self.balances
    rates: uint256[N_COINS] = self._stored_rates()
    D0: uint256 = self.get_D_mem(rates, _balances)
    for i in range(N_COINS):
        if deposit:
            _balances[i] += amounts[i]
        else:
            _balances[i] -= amounts[i]
    D1: uint256 = self.get_D_mem(rates, _balances)
    token_amount: uint256 = self.token.totalSupply()
    diff: uint256 = 0
    if deposit:
        diff = D1 - D0
    else:
        diff = D0 - D1
    return diff * token_amount / D0


@public
@nonreentrant('lock')
def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256):
    # Amounts is amounts of c-tokens
    assert not self.is_killed

    fees: uint256[N_COINS] = ZEROS
    _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1))
    _admin_fee: uint256 = self.admin_fee

    token_supply: uint256 = self.token.totalSupply()
    rates: uint256[N_COINS] = self._stored_rates()
    # Initial invariant
    D0: uint256 = 0
    old_balances: uint256[N_COINS] = self.balances
    if token_supply > 0:
        D0 = self.get_D_mem(rates, old_balances)
    new_balances: uint256[N_COINS] = old_balances

    for i in range(N_COINS):
        if token_supply == 0:
            assert amounts[i] > 0
        # balances store amounts of c-tokens
        new_balances[i] = old_balances[i] + amounts[i]

    # Invariant after change
    D1: uint256 = self.get_D_mem(rates, new_balances)
    assert D1 > D0

    # We need to recalculate the invariant accounting for fees
    # to calculate fair user's share
    D2: uint256 = D1
    if token_supply > 0:
        # Only account for fees if we are not the first to deposit
        for i in range(N_COINS):
            ideal_balance: uint256 = D1 * old_balances[i] / D0
            difference: uint256 = 0
            if ideal_balance > new_balances[i]:
                difference = ideal_balance - new_balances[i]
            else:
                difference = new_balances[i] - ideal_balance
            fees[i] = _fee * difference / FEE_DENOMINATOR
            self.balances[i] = new_balances[i] - fees[i] * _admin_fee / FEE_DENOMINATOR
            new_balances[i] -= fees[i]
        D2 = self.get_D_mem(rates, new_balances)
    else:
        self.balances = new_balances

    # Calculate, how much pool tokens to mint
    mint_amount: uint256 = 0
    if token_supply == 0:
        mint_amount = D1  # Take the dust if there was any
    else:
        mint_amount = token_supply * (D2 - D0) / D0

    assert mint_amount >= min_mint_amount, "Slippage screwed you"

    # Take coins from the sender
    for i in range(N_COINS):
        assert_modifiable(
            yERC20(self.coins[i]).transferFrom(msg.sender, self, amounts[i]))


    # Mint pool tokens
    self.token.mint(msg.sender, mint_amount)

    log.AddLiquidity(msg.sender, amounts, fees, D1, token_supply + mint_amount)


@private
@constant
def get_y(i: int128, j: int128, x: uint256, _xp: uint256[N_COINS]) -> uint256:
    # x in the input is converted to the same price/precision

    assert (i != j) and (i >= 0) and (j >= 0) and (i < N_COINS) and (j < N_COINS)

    D: uint256 = self.get_D(_xp)
    c: uint256 = D
    S_: uint256 = 0
    Ann: uint256 = self.A * N_COINS

    _x: uint256 = 0
    for _i in range(N_COINS):
        if _i == i:
            _x = x
        elif _i != j:
            _x = _xp[_i]
        else:
            continue
        S_ += _x
        c = c * D / (_x * N_COINS)
    c = c * D / (Ann * N_COINS)
    b: uint256 = S_ + D / Ann  # - D
    y_prev: uint256 = 0
    y: uint256 = D
    for _i in range(255):
        y_prev = y
        y = (y*y + c) / (2 * y + b - D)
        # Equality with the precision of 1
        if y > y_prev:
            if y - y_prev <= 1:
                break
        else:
            if y_prev - y <= 1:
                break
    return y


@public
@constant
def get_dy(i: int128, j: int128, dx: uint256) -> uint256:
    # dx and dy in c-units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)

    x: uint256 = xp[i] + dx * rates[i] / PRECISION
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = (xp[j] - y) * PRECISION / rates[j]
    _fee: uint256 = self.fee * dy / FEE_DENOMINATOR
    return dy - _fee


@public
@constant
def get_dx(i: int128, j: int128, dy: uint256) -> uint256:
    # dx and dy in c-units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)

    y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * rates[j] / PRECISION
    x: uint256 = self.get_y(j, i, y, xp)
    dx: uint256 = (x - xp[i]) * PRECISION / rates[i]
    return dx


@public
@constant
def get_dy_underlying(i: int128, j: int128, dx: uint256) -> uint256:
    # dx and dy in underlying units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)
    precisions: uint256[N_COINS] = PRECISION_MUL

    x: uint256 = xp[i] + dx * precisions[i]
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = (xp[j] - y) / precisions[j]
    _fee: uint256 = self.fee * dy / FEE_DENOMINATOR
    return dy - _fee


@public
@constant
def get_dx_underlying(i: int128, j: int128, dy: uint256) -> uint256:
    # dx and dy in underlying units
    rates: uint256[N_COINS] = self._stored_rates()
    xp: uint256[N_COINS] = self._xp(rates)
    precisions: uint256[N_COINS] = PRECISION_MUL

    y: uint256 = xp[j] - (dy * FEE_DENOMINATOR / (FEE_DENOMINATOR - self.fee)) * precisions[j]
    x: uint256 = self.get_y(j, i, y, xp)
    dx: uint256 = (x - xp[i]) / precisions[i]
    return dx


@private
def _exchange(i: int128, j: int128, dx: uint256, rates: uint256[N_COINS]) -> uint256:
    assert not self.is_killed
    # dx and dy are in c-tokens

    xp: uint256[N_COINS] = self._xp(rates)

    x: uint256 = xp[i] + dx * rates[i] / PRECISION
    y: uint256 = self.get_y(i, j, x, xp)
    dy: uint256 = xp[j] - y
    dy_fee: uint256 = dy * self.fee / FEE_DENOMINATOR
    dy_admin_fee: uint256 = dy_fee * self.admin_fee / FEE_DENOMINATOR
    self.balances[i] = x * PRECISION / rates[i]
    self.balances[j] = (y + (dy_fee - dy_admin_fee)) * PRECISION / rates[j]

    _dy: uint256 = (dy - dy_fee) * PRECISION / rates[j]

    return _dy


@public
@nonreentrant('lock')
def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256):
    rates: uint256[N_COINS] = self._stored_rates()
    dy: uint256 = self._exchange(i, j, dx, rates)
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"

    assert_modifiable(yERC20(self.coins[i]).transferFrom(msg.sender, self, dx))

    assert_modifiable(yERC20(self.coins[j]).transfer(msg.sender, dy))

    log.TokenExchange(msg.sender, i, dx, j, dy)


@public
@nonreentrant('lock')
def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256):
    rates: uint256[N_COINS] = self._stored_rates()
    precisions: uint256[N_COINS] = PRECISION_MUL
    rate_i: uint256 = rates[i] / precisions[i]
    rate_j: uint256 = rates[j] / precisions[j]
    dx_: uint256 = dx * PRECISION / rate_i

    dy_: uint256 = self._exchange(i, j, dx_, rates)
    dy: uint256 = dy_ * rate_j / PRECISION
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"
    tethered: bool[N_COINS] = TETHERED

    ok: uint256 = 0
    if tethered[i]:
        USDT(self.underlying_coins[i]).transferFrom(msg.sender, self, dx)
    else:
        assert_modifiable(ERC20(self.underlying_coins[i])\
            .transferFrom(msg.sender, self, dx))
    ERC20(self.underlying_coins[i]).approve(self.coins[i], dx)
    yERC20(self.coins[i]).deposit(dx)
    yERC20(self.coins[j]).withdraw(dy_)

    # y-tokens calculate imprecisely - use all available
    dy = ERC20(self.underlying_coins[j]).balanceOf(self)
    assert dy >= min_dy, "Exchange resulted in fewer coins than expected"

    if tethered[j]:
        USDT(self.underlying_coins[j]).transfer(msg.sender, dy)
    else:
        assert_modifiable(ERC20(self.underlying_coins[j])\
            .transfer(msg.sender, dy))


    log.TokenExchangeUnderlying(msg.sender, i, dx, j, dy)


@public
@nonreentrant('lock')
def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]):
    total_supply: uint256 = self.token.totalSupply()
    amounts: uint256[N_COINS] = ZEROS
    fees: uint256[N_COINS] = ZEROS

    for i in range(N_COINS):
        value: uint256 = self.balances[i] * _amount / total_supply
        assert value >= min_amounts[i], "Withdrawal resulted in fewer coins than expected"
        self.balances[i] -= value
        amounts[i] = value
        assert_modifiable(yERC20(self.coins[i]).transfer(
            msg.sender, value))

    self.token.burnFrom(msg.sender, _amount)  # Will raise if not enough

    log.RemoveLiquidity(msg.sender, amounts, fees, total_supply - _amount)


@public
@nonreentrant('lock')
def remove_liquidity_imbalance(amounts: uint256[N_COINS], max_burn_amount: uint256):
    assert not self.is_killed

    token_supply: uint256 = self.token.totalSupply()
    assert token_supply > 0
    _fee: uint256 = self.fee * N_COINS / (4 * (N_COINS - 1))
    _admin_fee: uint256 = self.admin_fee
    rates: uint256[N_COINS] = self._stored_rates()

    old_balances: uint256[N_COINS] = self.balances
    new_balances: uint256[N_COINS] = old_balances
    D0: uint256 = self.get_D_mem(rates, old_balances)
    for i in range(N_COINS):
        new_balances[i] -= amounts[i]
    D1: uint256 = self.get_D_mem(rates, new_balances)
    fees: uint256[N_COINS] = ZEROS
    for i in range(N_COINS):
        ideal_balance: uint256 = D1 * old_balances[i] / D0
        difference: uint256 = 0
        if ideal_balance > new_balances[i]:
            difference = ideal_balance - new_balances[i]
        else:
            difference = new_balances[i] - ideal_balance
        fees[i] = _fee * difference / FEE_DENOMINATOR
        self.balances[i] = new_balances[i] - fees[i] * _admin_fee / FEE_DENOMINATOR
        new_balances[i] -= fees[i]
    D2: uint256 = self.get_D_mem(rates, new_balances)

    token_amount: uint256 = (D0 - D2) * token_supply / D0
    assert token_amount > 0
    assert token_amount <= max_burn_amount, "Slippage screwed you"

    for i in range(N_COINS):
        assert_modifiable(yERC20(self.coins[i]).transfer(msg.sender, amounts[i]))
    self.token.burnFrom(msg.sender, token_amount)  # Will raise if not enough

    log.RemoveLiquidityImbalance(msg.sender, amounts, fees, D1, token_supply - token_amount)


### Admin functions ###
@public
def commit_new_parameters(amplification: uint256,
                          new_fee: uint256,
                          new_admin_fee: uint256):
    assert msg.sender == self.owner
    assert self.admin_actions_deadline == 0
    assert new_admin_fee <= max_admin_fee

    _deadline: timestamp = block.timestamp + admin_actions_delay
    self.admin_actions_deadline = _deadline
    self.future_A = amplification
    self.future_fee = new_fee
    self.future_admin_fee = new_admin_fee

    log.CommitNewParameters(_deadline, amplification, new_fee, new_admin_fee)


@public
def apply_new_parameters():
    assert msg.sender == self.owner
    assert self.admin_actions_deadline <= block.timestamp\
        and self.admin_actions_deadline > 0

    self.admin_actions_deadline = 0
    _A: uint256 = self.future_A
    _fee: uint256 = self.future_fee
    _admin_fee: uint256 = self.future_admin_fee
    self.A = _A
    self.fee = _fee
    self.admin_fee = _admin_fee

    log.NewParameters(_A, _fee, _admin_fee)


@public
def revert_new_parameters():
    assert msg.sender == self.owner

    self.admin_actions_deadline = 0


@public
def commit_transfer_ownership(_owner: address):
    assert msg.sender == self.owner
    assert self.transfer_ownership_deadline == 0

    _deadline: timestamp = block.timestamp + admin_actions_delay
    self.transfer_ownership_deadline = _deadline
    self.future_owner = _owner

    log.CommitNewAdmin(_deadline, _owner)


@public
def apply_transfer_ownership():
    assert msg.sender == self.owner
    assert block.timestamp >= self.transfer_ownership_deadline\
        and self.transfer_ownership_deadline > 0

    self.transfer_ownership_deadline = 0
    _owner: address = self.future_owner
    self.owner = _owner

    log.NewAdmin(_owner)


@public
def revert_transfer_ownership():
    assert msg.sender == self.owner

    self.transfer_ownership_deadline = 0


@public
def withdraw_admin_fees():
    assert msg.sender == self.owner
    _precisions: uint256[N_COINS] = PRECISION_MUL

    for i in range(N_COINS):
        c: address = self.coins[i]
        value: uint256 = yERC20(c).balanceOf(self) - self.balances[i]
        if value > 0:
            assert_modifiable(yERC20(c).transfer(msg.sender, value))


@public
def kill_me():
    assert msg.sender == self.owner
    assert self.kill_deadline > block.timestamp
    self.is_killed = True


@public
def unkill_me():
    assert msg.sender == self.owner
    self.is_killed = False

Contract Security Audit

Contract ABI

[{"name":"TokenExchange","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"TokenExchangeUnderlying","inputs":[{"type":"address","name":"buyer","indexed":true},{"type":"int128","name":"sold_id","indexed":false},{"type":"uint256","name":"tokens_sold","indexed":false},{"type":"int128","name":"bought_id","indexed":false},{"type":"uint256","name":"tokens_bought","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityImbalance","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256[4]","name":"token_amounts","indexed":false},{"type":"uint256[4]","name":"fees","indexed":false},{"type":"uint256","name":"invariant","indexed":false},{"type":"uint256","name":"token_supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"type":"address","name":"admin","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewParameters","inputs":[{"type":"uint256","name":"deadline","indexed":true,"unit":"sec"},{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"type":"uint256","name":"A","indexed":false},{"type":"uint256","name":"fee","indexed":false},{"type":"uint256","name":"admin_fee","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address[4]","name":"_coins"},{"type":"address[4]","name":"_underlying_coins"},{"type":"address","name":"_pool_token"},{"type":"uint256","name":"_A"},{"type":"uint256","name":"_fee"}],"constant":false,"payable":false,"type":"constructor"},{"name":"get_virtual_price","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":1535185},{"name":"calc_token_amount","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"bool","name":"deposit"}],"constant":true,"payable":false,"type":"function","gas":6067881},{"name":"add_liquidity","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"min_mint_amount"}],"constant":false,"payable":false,"type":"function","gas":9327083},{"name":"get_dy","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3454227},{"name":"get_dx","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3454232},{"name":"get_dy_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"}],"constant":true,"payable":false,"type":"function","gas":3454087},{"name":"get_dx_underlying","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dy"}],"constant":true,"payable":false,"type":"function","gas":3454093},{"name":"exchange","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7030208},{"name":"exchange_underlying","outputs":[],"inputs":[{"type":"int128","name":"i"},{"type":"int128","name":"j"},{"type":"uint256","name":"dx"},{"type":"uint256","name":"min_dy"}],"constant":false,"payable":false,"type":"function","gas":7050194},{"name":"remove_liquidity","outputs":[],"inputs":[{"type":"uint256","name":"_amount"},{"type":"uint256[4]","name":"min_amounts"}],"constant":false,"payable":false,"type":"function","gas":240409},{"name":"remove_liquidity_imbalance","outputs":[],"inputs":[{"type":"uint256[4]","name":"amounts"},{"type":"uint256","name":"max_burn_amount"}],"constant":false,"payable":false,"type":"function","gas":9326310},{"name":"commit_new_parameters","outputs":[],"inputs":[{"type":"uint256","name":"amplification"},{"type":"uint256","name":"new_fee"},{"type":"uint256","name":"new_admin_fee"}],"constant":false,"payable":false,"type":"function","gas":145867},{"name":"apply_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":133482},{"name":"revert_new_parameters","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21805},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"_owner"}],"constant":false,"payable":false,"type":"function","gas":74482},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":60538},{"name":"revert_transfer_ownership","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21895},{"name":"withdraw_admin_fees","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":22667},{"name":"kill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":37848},{"name":"unkill_me","outputs":[],"inputs":[],"constant":false,"payable":false,"type":"function","gas":21985},{"name":"coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2160},{"name":"underlying_coins","outputs":[{"type":"address","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2190},{"name":"balances","outputs":[{"type":"uint256","name":"out"}],"inputs":[{"type":"int128","name":"arg0"}],"constant":true,"payable":false,"type":"function","gas":2220},{"name":"A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2051},{"name":"fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2081},{"name":"admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2111},{"name":"owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2141},{"name":"admin_actions_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2171},{"name":"transfer_ownership_deadline","outputs":[{"type":"uint256","unit":"sec","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2201},{"name":"future_A","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2231},{"name":"future_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2261},{"name":"future_admin_fee","outputs":[{"type":"uint256","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2291},{"name":"future_owner","outputs":[{"type":"address","name":"out"}],"inputs":[],"constant":true,"payable":false,"type":"function","gas":2321}]

740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526101606157236101403934156100a257600080fd5b602061572360c03960c05160205181106100bb57600080fd5b50602060206157230160c03960c05160205181106100d857600080fd5b50602060406157230160c03960c05160205181106100f557600080fd5b50602060606157230160c03960c051602051811061011257600080fd5b50602060806157230160c03960c051602051811061012f57600080fd5b50602060a06157230160c03960c051602051811061014c57600080fd5b50602060c06157230160c03960c051602051811061016957600080fd5b50602060e06157230160c03960c051602051811061018657600080fd5b5060206101006157230160c03960c05160205181106101a457600080fd5b506102a060006004818352015b60006101406102a051600481106101c757600080fd5b6020020151186101d657600080fd5b60006101c06102a051600481106101ec57600080fd5b6020020151186101fb57600080fd5b60006102a0516004811061020e57600080fd5b600260c052602060c02001555b81516001018083528114156101b1575b5050600060c052602060c020610140805182558060200151600183015580604001516002830155806060015160038301555050600160c052602060c0206101c0805182558060200151600183015580604001516002830155806060015160038301555050610260516003556102805160045560006005553360065542624f1a008181830110156102ba57600080fd5b80820190509050600e556000600f556102405160075561570b56600436101561000d57615430565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156101f6575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e060006004818352015b6101606101e051600481106100f257600080fd5b6020020180516101e0516004811061010957600080fd5b600060c052602060c02001543b61011f57600080fd5b6101e0516004811061013057600080fd5b600060c052602060c0200154301861014757600080fd5b602061026060046377c7b8fc6102005261021c6101e0516004811061016b57600080fd5b600060c052602060c02001545afa61018257600080fd5b60005061026051808202821582848304141761019d57600080fd5b809050905090508152505b81516001018083528114156100de575b50506080610280525b6000610280511115156101d3576101ef565b60206102805103610160015160206102805103610280526101c1565b6101405156005b60001561031b575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061025c57600080fd5b6020020151610260516004811061027257600080fd5b600260c052602060c0200154808202821582848304141761029257600080fd5b80905090509050670de0b6b3a764000080806102ad57600080fd5b8204905090506101e061026051600481106102c757600080fd5b60200201525b8151600101808352811415610248575b50506080610280525b6000610280511115156102f857610314565b602061028051036101e0015160206102805103610280526102e6565b6101c05156005b60001561044c575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e0516004811061039157600080fd5b60200201516101c06102e051600481106103aa57600080fd5b602002015180820282158284830414176103c357600080fd5b80905090509050670de0b6b3a764000080806103de57600080fd5b8204905090506102606102e051600481106103f857600080fd5b60200201525b815160010180835281141561037d575b50506080610300525b60006103005111151561042957610445565b6020610300510361026001516020610300510361030052610417565b6102405156005b600015610751575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e08051610200518181830110156104a257600080fd5b808201905090508152505b815160010180835281141561047a575b50506101e05115156104d85760006000526000516101c05156505b6000610260526101e05161028052600354600480820282158284830414176104ff57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761055657600080fd5b80905090509050610300516004808202821582848304141761057757600080fd5b80905090509050600181818301101561058f57600080fd5b8082019050905080806105a157600080fd5b8204905090506102e0525b815160010180835281141561052a575b505061028051610260526102a0516101e05180820282158284830414176105e257600080fd5b809050905090506102e0516004808202821582848304141761060357600080fd5b8090509050905081818301101561061957600080fd5b8082019050905061028051808202821582848304141761063857600080fd5b809050905090506102a05160018082101561065257600080fd5b8082039050905061028051808202821582848304141761067157600080fd5b8090509050905060056102e051808202821582848304141761069257600080fd5b809050905090508181830110156106a857600080fd5b8082019050905080806106ba57600080fd5b82049050905061028052610260516102805111156107015760016102805161026051808210156106e957600080fd5b808203905090501115156106fc5761073d565b61072c565b600161026051610280518082101561071857600080fd5b8082039050905011151561072b5761073d565b5b5b8151600101808352811415610516575b5050610280516000526000516101c0515650005b60001561091f575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b610660515160206106605101610660526106606106605110156107a757610785565b6305eb8fa6610680526106a0610140610460525b610460515160206104605101610460526104606104605110156107dd576107bb565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610323565b6105e052610600526106205261064052610440610460525b610460515260206104605103610460526101406104605110151561089e5761087b565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610454565b61076052610640610660525b610660515260206106605103610660526101406106605110151561090d576108ea565b61076051600052600051610240515650005b63bb7b8b806000511415610b9357341561093857600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e051101561096257610940565b6305eb8fa661070052610720610140610560525b6105605151602061056051016105605261056061056051101561099857610976565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c05110156109ce576109ac565b600658016100a9565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610a12576109ef565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a051600658016101fe565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610a8d57610a6a565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610454565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610afc57610ad9565b6107e051610140526007543b610b1157600080fd5b6007543018610b1f57600080fd5b602061088060046318160ddd6108205261083c6007545afa610b4057600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610b6c57600080fd5b80905090509050610800518080610b8257600080fd5b82049050905060005260206000f350005b63cf701ff76000511415610ff6573415610bac57600080fd5b60843560028110610bbc57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b61030051516020610300510161030052610300610300511015610cb357610c91565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610759565b610480526102e0610300525b6103005152602061030051036103005261014061030051101515610d6857610d45565b610480516102e0526104a060006004818352015b60843515610dd4576101406104a05160048110610d9857600080fd5b60200201805160046104a05160048110610db157600080fd5b6020020135818183011015610dc557600080fd5b80820190509050815250610e1e565b6101406104a05160048110610de857600080fd5b60200201805160046104a05160048110610e0157600080fd5b602002013580821015610e1357600080fd5b808203905090508152505b5b8151600101808352811415610d7c575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610e5b57610e39565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610759565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610f1057610eed565b610660516104c0526007543b610f2557600080fd5b6007543018610f3357600080fd5b602061070060046318160ddd6106a0526106bc6007545afa610f5457600080fd5b600050610700516106805260006107205260843515610f92576104c0516102e05180821015610f8257600080fd5b8082039050905061072052610fb3565b6102e0516104c05180821015610fa757600080fd5b80820390509050610720525b61072051610680518082028215828483041417610fcf57600080fd5b809050905090506102e0518080610fe557600080fd5b82049050905060005260206000f350005b63029b2f346000511415611a785762ffffff541561101357600080fd5b600162ffffff55341561102557600080fd5b600f541561103257600080fd5b61014060008152600081602001526000816040015260008160600152506004546004808202821582848304141761106857600080fd5b80905090509050600c808061107c57600080fd5b8204905090506101c0526005546101e0526007543b61109a57600080fd5b60075430186110a857600080fd5b602061028060046318160ddd6102205261023c6007545afa6110c957600080fd5b60005061028051610200526102a0610140610320525b61032051516020610320510161032052610320610320511015611101576110df565b600658016100a9565b6103405261036052610380526103a052610300610320525b610320515260206103205103610320526101406103205110151561114557611122565b61034080518252806020015182602001528060400151826040015280606001518260600152505060006103c0526103e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102005111156112af57610140610460525b610460515160206104605101610460526104606104605110156111f1576111cf565b631f30ab74610480526104a06102a08051825280602001518260200152806040015182604001528060600151826060015250506105206103e080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156112a657611283565b6105e0516103c0525b6106006103e080518252806020015182602001528060400151826040015280606001518260600152505061068060006004818352015b6102005115156113145760006004610680516004811061130457600080fd5b60200201351161131357600080fd5b5b6103e0610680516004811061132857600080fd5b60200201516004610680516004811061134057600080fd5b602002013581818301101561135457600080fd5b80820190509050610600610680516004811061136f57600080fd5b60200201525b81516001018083528114156112e5575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c05110156113b15761138f565b631f30ab746106e0526107006102a08051825280602001518260200152806040015182604001528060600151826060015250506107806106008051825280602001518260200152806040015182604001528060600151826060015250506107e0516107c0516107a051610780516107605161074051610720516107005160065801610759565b610840526106a06106c0525b6106c0515260206106c051036106c0526101406106c05110151561146657611443565b610840516106a0526103c0516106a0511161148057600080fd5b6106a0516108605260006102005111156117bf5761088060006004818352015b6106a0516103e061088051600481106114b857600080fd5b602002015180820282158284830414176114d157600080fd5b809050905090506103c05180806114e757600080fd5b8204905090506108a05260006108c052610600610880516004811061150b57600080fd5b60200201516108a0511115611554576108a051610600610880516004811061153257600080fd5b60200201518082101561154457600080fd5b808203905090506108c05261158a565b610600610880516004811061156857600080fd5b60200201516108a0518082101561157e57600080fd5b808203905090506108c0525b6101c0516108c05180820282158284830414176115a657600080fd5b809050905090506402540be40080806115be57600080fd5b82049050905061014061088051600481106115d857600080fd5b602002015261060061088051600481106115f157600080fd5b6020020151610140610880516004811061160a57600080fd5b60200201516101e051808202821582848304141761162757600080fd5b809050905090506402540be400808061163f57600080fd5b8204905090508082101561165257600080fd5b80820390509050610880516004811061166a57600080fd5b600260c052602060c0200155610600610880516004811061168a57600080fd5b60200201805161014061088051600481106116a457600080fd5b6020020151808210156116b657600080fd5b808203905090508152505b81516001018083528114156114a0575b50506101406108e0525b6108e0515160206108e051016108e0526108806108e05110156116fd576116db565b631f30ab74610900526109206102a08051825280602001518260200152806040015182604001528060600151826060015250506109a0610600805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108606108e0525b6108e0515260206108e051036108e0526101406108e0511015156117b25761178f565b610a6051610860526117f1565b600260c052602060c0206106008051825580602001516001830155806040015160028301558060600151600383015550505b6000610a805261020051151561180e576106a051610a8052611863565b61020051610860516103c0518082101561182757600080fd5b80820390509050808202821582848304141761184257600080fd5b809050905090506103c051808061185857600080fd5b820490509050610a80525b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a805110156118b5576084610abcfd5b610b4060006004818352015b610b4051600481106118d257600080fd5b600060c052602060c02001543b6118e857600080fd5b610b4051600481106118f957600080fd5b600060c052602060c0200154301861191057600080fd5b6020610c2060646323b872dd610b605233610b805230610ba0526004610b40516004811061193d57600080fd5b6020020135610bc052610b7c6000610b40516004811061195c57600080fd5b600060c052602060c02001545af161197357600080fd5b600050610c205161198357600080fd5b5b81516001018083528114156118c1575b50506007543b6119a357600080fd5b60075430186119b157600080fd5b6000600060446340c10f19610c405233610c6052610a8051610c8052610c5c60006007545af16119e057600080fd5b600435610ce052602435610d0052604435610d2052606435610d405261014051610d605261016051610d805261018051610da0526101a051610dc0526106a051610de05261020051610a8051818183011015611a3b57600080fd5b80820190509050610e0052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ce0a2600062ffffff55005b600015611e7c575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611ad557600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610454565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a05260035460048082028215828483041417611b9c57600080fd5b809050905090506103c05260006103e05261040060006004818352015b61014051610400511415611bd457610180516103e052611c0a565b61016051610400511815611c04576101a06104005160048110611bf657600080fd5b60200201516103e052611c09565b611c86565b5b6103a080516103e051818183011015611c2257600080fd5b8082019050905081525061038051610240518082028215828483041417611c4857600080fd5b809050905090506103e05160048082028215828483041417611c6957600080fd5b809050905090508080611c7b57600080fd5b820490509050610380525b8151600101808352811415611bb9575b505061038051610240518082028215828483041417611cb457600080fd5b809050905090506103c05160048082028215828483041417611cd557600080fd5b809050905090508080611ce757600080fd5b820490509050610380526103a051610240516103c0518080611d0857600080fd5b820490509050818183011015611d1d57600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611d6657600080fd5b8090509050905061038051818183011015611d8057600080fd5b808201905090506002610460518082028215828483041417611da157600080fd5b8090509050905061042051818183011015611dbb57600080fd5b808201905090506102405180821015611dd357600080fd5b808203905090508080611de557600080fd5b8204905090506104605261044051610460511115611e2c576001610460516104405180821015611e1457600080fd5b80820390509050111515611e2757611e68565b611e57565b6001610440516104605180821015611e4357600080fd5b80820390509050111515611e5657611e68565b5b5b8151600101808352811415611d42575b505061046051600052600051610220515650005b635e0d443f6000511415612253573415611e9557600080fd5b60605160043580604051901315611eab57600080fd5b8091901215611eb957600080fd5b5060605160243580604051901315611ed057600080fd5b8091901215611ede57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611f6f57611f4d565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515611ff657611fd3565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061203057600080fd5b60200201516044356101406004356004811061204b57600080fd5b6020020151808202821582848304141761206457600080fd5b80905090509050670de0b6b3a7640000808061207f57600080fd5b82049050905081818301101561209457600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156120c9576120a7565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561216657612143565b61060051610480526102606024356004811061218157600080fd5b6020020151610480518082101561219757600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121bb57600080fd5b80905090509050610140602435600481106121d557600080fd5b602002015180806121e557600080fd5b8204905090506106205260045461062051808202821582848304141761220a57600080fd5b809050905090506402540be400808061222257600080fd5b8204905090506106405261062051610640518082101561224157600080fd5b8082039050905060005260206000f350005b6367df02ca600051141561262257341561226c57600080fd5b6060516004358060405190131561228257600080fd5b809190121561229057600080fd5b50606051602435806040519013156122a757600080fd5b80919012156122b557600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561234657612324565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156123cd576123aa565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606024356004811061240757600080fd5b60200201516044356402540be400808202821582848304141761242957600080fd5b809050905090506402540be4006004548082101561244657600080fd5b80820390509050808061245857600080fd5b8204905090506101406024356004811061247157600080fd5b6020020151808202821582848304141761248a57600080fd5b80905090509050670de0b6b3a764000080806124a557600080fd5b820490509050808210156124b857600080fd5b80820390509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156124ed576124cb565b631e8c3fd36104c0526024356104e0526004356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561258a57612567565b610600516104805261048051610260600435600481106125a957600080fd5b6020020151808210156125bb57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125df57600080fd5b80905090509050610140600435600481106125f957600080fd5b6020020151808061260957600080fd5b820490509050610620526106205160005260206000f350005b6307211ef760005114156129e057341561263b57600080fd5b6060516004358060405190131561265157600080fd5b809190121561265f57600080fd5b506060516024358060405190131561267657600080fd5b809190121561268457600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612715576126f3565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561279c57612779565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a5100081604001526001816060015250610260600435600481106127fb57600080fd5b60200201516044356104606004356004811061281657600080fd5b6020020151808202821582848304141761282f57600080fd5b8090509050905081818301101561284557600080fd5b808201905090506104e052610140610520525b6105205151602061052051016105205261052061052051101561287a57612858565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612917576128f4565b61068051610500526102606024356004811061293257600080fd5b6020020151610500518082101561294857600080fd5b808203905090506104606024356004811061296257600080fd5b6020020151808061297257600080fd5b8204905090506106a0526004546106a051808202821582848304141761299757600080fd5b809050905090506402540be40080806129af57600080fd5b8204905090506106c0526106a0516106c051808210156129ce57600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612d965734156129f957600080fd5b60605160043580604051901315612a0f57600080fd5b8091901215612a1d57600080fd5b5060605160243580604051901315612a3457600080fd5b8091901215612a4257600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612ad357612ab1565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515612b5a57612b37565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a510008160400152600181606001525061026060243560048110612bb957600080fd5b60200201516044356402540be4008082028215828483041417612bdb57600080fd5b809050905090506402540be40060045480821015612bf857600080fd5b808203905090508080612c0a57600080fd5b82049050905061046060243560048110612c2357600080fd5b60200201518082028215828483041417612c3c57600080fd5b8090509050905080821015612c5057600080fd5b808203905090506104e052610140610520525b61052051516020610520510161052052610520610520511015612c8557612c63565b631e8c3fd36105405260243561056052600435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612d2257612cff565b61068051610500526105005161026060043560048110612d4157600080fd5b602002015180821015612d5357600080fd5b8082039050905061046060043560048110612d6d57600080fd5b60200201518080612d7d57600080fd5b8204905090506106a0526106a05160005260206000f350005b60001561323b575b610220526101405261016052610180526101a0526101c0526101e05261020052600f5415612dcb57600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612df857612dd6565b631db7662b6102e0526103006101a080518252806020015182602001528060400151826040015280606001518260600152505061036051610340516103205161030051600658016101fe565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612e7f57612e5c565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612eba57600080fd5b6020020151610180516101a06101405160048110612ed757600080fd5b60200201518082028215828483041417612ef057600080fd5b80905090509050670de0b6b3a76400008080612f0b57600080fd5b820490509050818183011015612f2057600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612f5557612f33565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611a80565b6105e052610460610480525b6104805152602061048051036104805261014061048051101515612ff457612fd1565b6105e05161046052610240610160516004811061301057600080fd5b6020020151610460518082101561302657600080fd5b808203905090506106005261060051600454808202821582848304141761304c57600080fd5b809050905090506402540be400808061306457600080fd5b8204905090506106205261062051600554808202821582848304141761308957600080fd5b809050905090506402540be40080806130a157600080fd5b8204905090506106405261044051670de0b6b3a764000080820282158284830414176130cc57600080fd5b809050905090506101a061014051600481106130e757600080fd5b602002015180806130f757600080fd5b820490509050610140516004811061310e57600080fd5b600260c052602060c02001556104605161062051610640518082101561313357600080fd5b8082039050905081818301101561314957600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761316d57600080fd5b809050905090506101a0610160516004811061318857600080fd5b6020020151808061319857600080fd5b82049050905061016051600481106131af57600080fd5b600260c052602060c02001556106005161062051808210156131d057600080fd5b80820390509050670de0b6b3a764000080820282158284830414176131f457600080fd5b809050905090506101a0610160516004811061320f57600080fd5b6020020151808061321f57600080fd5b8204905090506106605261066051600052600051610220515650005b633df0212460005114156135f55762ffffff541561325857600080fd5b600162ffffff55341561326a57600080fd5b6060516004358060405190131561328057600080fd5b809190121561328e57600080fd5b50606051602435806040519013156132a557600080fd5b80919012156132b357600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612d9e565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156134575760a461041cfd5b6004356004811061346757600080fd5b600060c052602060c02001543b61347d57600080fd5b6004356004811061348d57600080fd5b600060c052602060c020015430186134a457600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc6000600435600481106134da57600080fd5b600060c052602060c02001545af16134f157600080fd5b6000506105805161350157600080fd5b6024356004811061351157600080fd5b600060c052602060c02001543b61352757600080fd5b6024356004811061353757600080fd5b600060c052602060c0200154301861354e57600080fd5b6020610640604463a9059cbb6105a052336105c052610260516105e0526105bc60006024356004811061358057600080fd5b600060c052602060c02001545af161359757600080fd5b600050610640516135a757600080fd5b60043561066052604435610680526024356106a052610260516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63a6417ed66000511415613f605762ffffff541561361257600080fd5b600162ffffff55341561362457600080fd5b6060516004358060405190131561363a57600080fd5b809190121561364857600080fd5b506060516024358060405190131561365f57600080fd5b809190121561366d57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101406004356004811061370957600080fd5b60200201516102606004356004811061372157600080fd5b6020020151808061373157600080fd5b8204905090506102e0526101406024356004811061374e57600080fd5b60200201516102606024356004811061376657600080fd5b6020020151808061377657600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176137a057600080fd5b809050905090506102e05180806137b657600080fd5b82049050905061032052610140610360525b610360515160206103605101610360526103606103605110156137ea576137c8565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612d9e565b6104c052610340610360525b610360515260206103605103610360526101406103605110151561388757613864565b6104c05161034052610340516103005180820282158284830414176138ab57600080fd5b80905090509050670de0b6b3a764000080806138c657600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e05110156139475760a461051cfd5b6105c060008152600081602001526001816040015260008160600152506000610640526105c06004356004811061397d57600080fd5b602002015115613a25576004356004811061399757600080fd5b600160c052602060c02001543b6139ad57600080fd5b600435600481106139bd57600080fd5b600160c052602060c020015430186139d457600080fd5b6000600060646323b872dd61074052336107605230610780526044356107a05261075c600060043560048110613a0957600080fd5b600160c052602060c02001545af1613a2057600080fd5b613ad0565b60043560048110613a3557600080fd5b600160c052602060c02001543b613a4b57600080fd5b60043560048110613a5b57600080fd5b600160c052602060c02001543018613a7257600080fd5b602061072060646323b872dd610660523361068052306106a0526044356106c05261067c600060043560048110613aa857600080fd5b600160c052602060c02001545af1613abf57600080fd5b60005061072051613acf57600080fd5b5b60043560048110613ae057600080fd5b600160c052602060c02001543b613af657600080fd5b60043560048110613b0657600080fd5b600160c052602060c02001543018613b1d57600080fd5b60206108a0604463095ea7b36108005260043560048110613b3d57600080fd5b600060c052602060c0200154610820526044356108405261081c600060043560048110613b6957600080fd5b600160c052602060c02001545af1613b8057600080fd5b6000506108a05060043560048110613b9757600080fd5b600060c052602060c02001543b613bad57600080fd5b60043560048110613bbd57600080fd5b600060c052602060c02001543018613bd457600080fd5b60006000602463b6b55f256108c0526044356108e0526108dc600060043560048110613bff57600080fd5b600060c052602060c02001545af1613c1657600080fd5b60243560048110613c2657600080fd5b600060c052602060c02001543b613c3c57600080fd5b60243560048110613c4c57600080fd5b600060c052602060c02001543018613c6357600080fd5b600060006024632e1a7d4d61094052610340516109605261095c600060243560048110613c8f57600080fd5b600060c052602060c02001545af1613ca657600080fd5b60243560048110613cb657600080fd5b600160c052602060c02001543b613ccc57600080fd5b60243560048110613cdc57600080fd5b600160c052602060c02001543018613cf357600080fd5b6020610a4060246370a082316109c052306109e0526109dc60243560048110613d1b57600080fd5b600160c052602060c02001545afa613d3257600080fd5b600050610a40516104e0526308c379a0610a60526020610a8052602e610aa0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610ac0527f207468616e206578706563746564000000000000000000000000000000000000610ae052610aa0506064356104e0511015613db45760a4610a7cfd5b6105c060243560048110613dc757600080fd5b602002015115613e6b5760243560048110613de157600080fd5b600160c052602060c02001543b613df757600080fd5b60243560048110613e0757600080fd5b600160c052602060c02001543018613e1e57600080fd5b60006000604463a9059cbb610be05233610c00526104e051610c2052610bfc600060243560048110613e4f57600080fd5b600160c052602060c02001545af1613e6657600080fd5b613f12565b60243560048110613e7b57600080fd5b600160c052602060c02001543b613e9157600080fd5b60243560048110613ea157600080fd5b600160c052602060c02001543018613eb857600080fd5b6020610bc0604463a9059cbb610b205233610b40526104e051610b6052610b3c600060243560048110613eea57600080fd5b600160c052602060c02001545af1613f0157600080fd5b600050610bc051613f1157600080fd5b5b600435610c8052604435610ca052602435610cc0526104e051610ce052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610c80a2600062ffffff55005b637d49d87560005114156142e85762ffffff5415613f7d57600080fd5b600162ffffff553415613f8f57600080fd5b6007543b613f9c57600080fd5b6007543018613faa57600080fd5b60206101c060046318160ddd6101605261017c6007545afa613fcb57600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e060006004818352015b6102e0516004811061402d57600080fd5b600260c052602060c0200154600435808202821582848304141761405057600080fd5b8090509050905061014051808061406657600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e051600481106140e657600080fd5b60200201356103005110156140fc5760a461033cfd5b6102e0516004811061410d57600080fd5b600260c052602060c020018054610300518082101561412b57600080fd5b80820390509050815550610300516101e06102e0516004811061414d57600080fd5b60200201526102e0516004811061416357600080fd5b600060c052602060c02001543b61417957600080fd5b6102e0516004811061418a57600080fd5b600060c052602060c020015430186141a157600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e051600481106141d457600080fd5b600060c052602060c02001545af16141eb57600080fd5b600050610480516141fb57600080fd5b5b815160010180835281141561401c575b50506007543b61421b57600080fd5b600754301861422957600080fd5b6000600060446379cc67906104a052336104c0526004356104e0526104bc60006007545af161425757600080fd5b6101e0516105405261020051610560526102205161058052610240516105a052610260516105c052610280516105e0526102a051610600526102c0516106205261014051600435808210156142ab57600080fd5b8082039050905061064052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d610120610540a2600062ffffff55005b6318a7bd766000511415614caf5762ffffff541561430557600080fd5b600162ffffff55341561431757600080fd5b600f541561432457600080fd5b6007543b61433157600080fd5b600754301861433f57600080fd5b60206101c060046318160ddd6101605261017c6007545afa61436057600080fd5b6000506101c051610140526000610140511161437b57600080fd5b6004546004808202821582848304141761439457600080fd5b80905090509050600c80806143a857600080fd5b8204905090506101e052600554610200526102206101406102a0525b6102a0515160206102a051016102a0526102a06102a05110156143e6576143c4565b600658016100a9565b6102c0526102e05261030052610320526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561442a57614407565b6102c080518252806020015182602001528060400151826040015280606001518260600152505061034060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506103c0610340805182528060200151826020015280604001518260400152806060015182606001525050610140610460525b610460515160206104605101610460526104606104605110156144ee576144cc565b631f30ab74610480526104a061022080518252806020015182602001528060400151826040015280606001518260600152505061052061034080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156145a357614580565b6105e0516104405261060060006004818352015b6103c061060051600481106145cb57600080fd5b602002018051600461060051600481106145e457600080fd5b6020020135808210156145f657600080fd5b808203905090508152505b81516001018083528114156145b7575b5050610140610640525b6106405151602061064051016106405261064061064051101561463d5761461b565b631f30ab74610660526106806102208051825280602001518260200152806040015182604001528060600151826060015250506107006103c0805182528060200151826020015280604001518260400152806060015182606001525050610760516107405161072051610700516106e0516106c0516106a0516106805160065801610759565b6107c052610620610640525b61064051526020610640510361064052610140610640511015156146f2576146cf565b6107c051610620526107e0600081526000816020015260008160400152600081606001525061086060006004818352015b61062051610340610860516004811061473b57600080fd5b6020020151808202821582848304141761475457600080fd5b8090509050905061044051808061476a57600080fd5b8204905090506108805260006108a0526103c0610860516004811061478e57600080fd5b60200201516108805111156147d757610880516103c061086051600481106147b557600080fd5b6020020151808210156147c757600080fd5b808203905090506108a05261480d565b6103c061086051600481106147eb57600080fd5b6020020151610880518082101561480157600080fd5b808203905090506108a0525b6101e0516108a051808202821582848304141761482957600080fd5b809050905090506402540be400808061484157600080fd5b8204905090506107e0610860516004811061485b57600080fd5b60200201526103c0610860516004811061487457600080fd5b60200201516107e0610860516004811061488d57600080fd5b60200201516102005180820282158284830414176148aa57600080fd5b809050905090506402540be40080806148c257600080fd5b820490509050808210156148d557600080fd5b8082039050905061086051600481106148ed57600080fd5b600260c052602060c02001556103c0610860516004811061490d57600080fd5b6020020180516107e0610860516004811061492757600080fd5b60200201518082101561493957600080fd5b808203905090508152505b8151600101808352811415614723575b50506101406108e0525b6108e0515160206108e051016108e0526108e06108e05110156149805761495e565b631f30ab74610900526109206102208051825280602001518260200152806040015182604001528060600151826060015250506109a06103c0805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108c06108e0525b6108e0515260206108e051036108e0526101406108e051101515614a3557614a12565b610a60516108c052610440516108c05180821015614a5257600080fd5b80820390509050610140518082028215828483041417614a7157600080fd5b80905090509050610440518080614a8757600080fd5b820490509050610a80526000610a805111614aa157600080fd5b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a80511115614af3576084610abcfd5b610b4060006004818352015b610b405160048110614b1057600080fd5b600060c052602060c02001543b614b2657600080fd5b610b405160048110614b3757600080fd5b600060c052602060c02001543018614b4e57600080fd5b6020610c00604463a9059cbb610b605233610b80526004610b405160048110614b7657600080fd5b6020020135610ba052610b7c6000610b405160048110614b9557600080fd5b600060c052602060c02001545af1614bac57600080fd5b600050610c0051614bbc57600080fd5b5b8151600101808352811415614aff575b50506007543b614bdc57600080fd5b6007543018614bea57600080fd5b6000600060446379cc6790610c205233610c4052610a8051610c6052610c3c60006007545af1614c1957600080fd5b600435610cc052602435610ce052604435610d0052606435610d20526107e051610d405261080051610d605261082051610d805261084051610da05261062051610dc05261014051610a805180821015614c7257600080fd5b80820390509050610de052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610cc0a2600062ffffff55005b63ee11f5b66000511415614d71573415614cc857600080fd5b6006543314614cd657600080fd5b60085415614ce357600080fd5b64012a05f2006044351115614cf757600080fd5b426203f480818183011015614d0b57600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614e1e573415614d8a57600080fd5b6006543314614d9857600080fd5b60006008541142600854111516614dae57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614e4c573415614e3757600080fd5b6006543314614e4557600080fd5b6000600855005b636b441a406000511415614eed573415614e6557600080fd5b6004356020518110614e7657600080fd5b506006543314614e8557600080fd5b60095415614e9257600080fd5b426203f480818183011015614ea657600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614f69573415614f0657600080fd5b6006543314614f1457600080fd5b60006009541160095442101516614f2a57600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614f97573415614f8257600080fd5b6006543314614f9057600080fd5b6000600955005b6330c540856000511415615110573415614fb057600080fd5b6006543314614fbe57600080fd5b6101406001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101c060006004818352015b6101c0516004811061500057600080fd5b600060c052602060c02001546101e0526101e0513b61501e57600080fd5b6101e051301861502d57600080fd5b60206102a060246370a0823161022052306102405261023c6101e0515afa61505457600080fd5b6000506102a0516101c0516004811061506c57600080fd5b600260c052602060c02001548082101561508557600080fd5b808203905090506102005260006102005111156150fb576101e0513b6150aa57600080fd5b6101e05130186150b957600080fd5b6020610360604463a9059cbb6102c052336102e05261020051610300526102dc60006101e0515af16150ea57600080fd5b600050610360516150fa57600080fd5b5b5b8151600101808352811415614fef575b5050005b63e3698853600051141561514c57341561512957600080fd5b600654331461513757600080fd5b42600e541161514557600080fd5b6001600f55005b633046f972600051141561517a57341561516557600080fd5b600654331461517357600080fd5b6000600f55005b6323746eb860005114156151df57341561519357600080fd5b606051600435806040519013156151a957600080fd5b80919012156151b757600080fd5b50600435600481106151c857600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156152445734156151f857600080fd5b6060516004358060405190131561520e57600080fd5b809190121561521c57600080fd5b506004356004811061522d57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156152a957341561525d57600080fd5b6060516004358060405190131561527357600080fd5b809190121561528157600080fd5b506004356004811061529257600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d060005114156152d05734156152c257600080fd5b60035460005260206000f350005b63ddca3f4360005114156152f75734156152e957600080fd5b60045460005260206000f350005b63fee3f7f9600051141561531e57341561531057600080fd5b60055460005260206000f350005b638da5cb5b600051141561534557341561533757600080fd5b60065460005260206000f350005b63405e28f8600051141561536c57341561535e57600080fd5b60085460005260206000f350005b63e0a0b586600051141561539357341561538557600080fd5b60095460005260206000f350005b63b4b577ad60005114156153ba5734156153ac57600080fd5b600a5460005260206000f350005b6358680d0b60005114156153e15734156153d357600080fd5b600b5460005260206000f350005b63e382446260005114156154085734156153fa57600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561542f57341561542157600080fd5b600d5460005260206000f350005b5b60006000fd5b6102d561570b036102d56000396102d561570b036000f300000000000000000000000016de59092dae5ccf4a1e6439d611fd0653f0bd01000000000000000000000000d6ad7a6750a7593e092a9b218d66c0a814a3436e00000000000000000000000083f798e925bcd4017eb265844fddabb448f1707d00000000000000000000000073a052500105205d34daf004eab301916da8190f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000085d4780b73119b644ae5ecd22b376000000000000000000000000df5e0e81dff6faf3a7e52ba697820c5e32d806a8000000000000000000000000000000000000000000000000000000000000070800000000000000000000000000000000000000000000000000000000003d0900

Deployed Bytecode

0x600436101561000d57615430565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526000156101f6575b610140526101606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101e060006004818352015b6101606101e051600481106100f257600080fd5b6020020180516101e0516004811061010957600080fd5b600060c052602060c02001543b61011f57600080fd5b6101e0516004811061013057600080fd5b600060c052602060c0200154301861014757600080fd5b602061026060046377c7b8fc6102005261021c6101e0516004811061016b57600080fd5b600060c052602060c02001545afa61018257600080fd5b60005061026051808202821582848304141761019d57600080fd5b809050905090508152505b81516001018083528114156100de575b50506080610280525b6000610280511115156101d3576101ef565b60206102805103610160015160206102805103610280526101c1565b6101405156005b60001561031b575b6101c0526101405261016052610180526101a0526101e061014080518252806020015182602001528060400151826040015280606001518260600152505061026060006004818352015b6101e0610260516004811061025c57600080fd5b6020020151610260516004811061027257600080fd5b600260c052602060c0200154808202821582848304141761029257600080fd5b80905090509050670de0b6b3a764000080806102ad57600080fd5b8204905090506101e061026051600481106102c757600080fd5b60200201525b8151600101808352811415610248575b50506080610280525b6000610280511115156102f857610314565b602061028051036101e0015160206102805103610280526102e6565b6101c05156005b60001561044c575b610240526101405261016052610180526101a0526101c0526101e05261020052610220526102606101408051825280602001518260200152806040015182604001528060600151826060015250506102e060006004818352015b6102606102e0516004811061039157600080fd5b60200201516101c06102e051600481106103aa57600080fd5b602002015180820282158284830414176103c357600080fd5b80905090509050670de0b6b3a764000080806103de57600080fd5b8204905090506102606102e051600481106103f857600080fd5b60200201525b815160010180835281141561037d575b50506080610300525b60006103005111151561042957610445565b6020610300510361026001516020610300510361030052610417565b6102405156005b600015610751575b6101c0526101405261016052610180526101a05260006101e05261022060006004818352015b602061022051026101400151610200526101e08051610200518181830110156104a257600080fd5b808201905090508152505b815160010180835281141561047a575b50506101e05115156104d85760006000526000516101c05156505b6000610260526101e05161028052600354600480820282158284830414176104ff57600080fd5b809050905090506102a0526102c0600060ff818352015b610280516102e05261032060006004818352015b602061032051026101400151610300526102e05161028051808202821582848304141761055657600080fd5b80905090509050610300516004808202821582848304141761057757600080fd5b80905090509050600181818301101561058f57600080fd5b8082019050905080806105a157600080fd5b8204905090506102e0525b815160010180835281141561052a575b505061028051610260526102a0516101e05180820282158284830414176105e257600080fd5b809050905090506102e0516004808202821582848304141761060357600080fd5b8090509050905081818301101561061957600080fd5b8082019050905061028051808202821582848304141761063857600080fd5b809050905090506102a05160018082101561065257600080fd5b8082039050905061028051808202821582848304141761067157600080fd5b8090509050905060056102e051808202821582848304141761069257600080fd5b809050905090508181830110156106a857600080fd5b8082019050905080806106ba57600080fd5b82049050905061028052610260516102805111156107015760016102805161026051808210156106e957600080fd5b808203905090501115156106fc5761073d565b61072c565b600161026051610280518082101561071857600080fd5b8082039050905011151561072b5761073d565b5b5b8151600101808352811415610516575b5050610280516000526000516101c0515650005b60001561091f575b610240526101405261016052610180526101a0526101c0526101e0526102005261022052610140610660525b610660515160206106605101610660526106606106605110156107a757610785565b6305eb8fa6610680526106a0610140610460525b610460515160206104605101610460526104606104605110156107dd576107bb565b6342d3b3c3610480526104a06101408051825280602001518260200152806040015182604001528060600151826060015250506105206101c080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610323565b6105e052610600526106205261064052610440610460525b610460515260206104605103610460526101406104605110151561089e5761087b565b6105e0805182528060200151826020015280604001518260400152806060015182606001525050610700516106e0516106c0516106a05160065801610454565b61076052610640610660525b610660515260206106605103610660526101406106605110151561090d576108ea565b61076051600052600051610240515650005b63bb7b8b806000511415610b9357341561093857600080fd5b6101406106e0525b6106e0515160206106e051016106e0526106e06106e051101561096257610940565b6305eb8fa661070052610720610140610560525b6105605151602061056051016105605261056061056051101561099857610976565b631db7662b610580526105a06101406104c0525b6104c0515160206104c051016104c0526104c06104c05110156109ce576109ac565b600658016100a9565b6104e0526105005261052052610540526104a06104c0525b6104c0515260206104c051036104c0526101406104c051101515610a12576109ef565b6104e0805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a051600658016101fe565b61066052610680526106a0526106c052610540610560525b6105605152602061056051036105605261014061056051101515610a8d57610a6a565b6106608051825280602001518260200152806040015182604001528060600151826060015250506107805161076051610740516107205160065801610454565b6107e0526106c06106e0525b6106e0515260206106e051036106e0526101406106e051101515610afc57610ad9565b6107e051610140526007543b610b1157600080fd5b6007543018610b1f57600080fd5b602061088060046318160ddd6108205261083c6007545afa610b4057600080fd5b600050610880516108005261014051670de0b6b3a76400008082028215828483041417610b6c57600080fd5b80905090509050610800518080610b8257600080fd5b82049050905060005260206000f350005b63cf701ff76000511415610ff6573415610bac57600080fd5b60843560028110610bbc57600080fd5b5061014060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101c06101405161016051610180516101a0516101c0516101e0516102005161022051600658016100a9565b61026052610280526102a0526102c05261022052610200526101e0526101c0526101a052610180526101605261014052610260805182528060200151826020015280604001518260400152806060015182606001525050610140610300525b61030051516020610300510161030052610300610300511015610cb357610c91565b631f30ab74610320526103406101c08051825280602001518260200152806040015182604001528060600151826060015250506103c061014080518252806020015182602001528060400151826040015280606001518260600152505061042051610400516103e0516103c0516103a05161038051610360516103405160065801610759565b610480526102e0610300525b6103005152602061030051036103005261014061030051101515610d6857610d45565b610480516102e0526104a060006004818352015b60843515610dd4576101406104a05160048110610d9857600080fd5b60200201805160046104a05160048110610db157600080fd5b6020020135818183011015610dc557600080fd5b80820190509050815250610e1e565b6101406104a05160048110610de857600080fd5b60200201805160046104a05160048110610e0157600080fd5b602002013580821015610e1357600080fd5b808203905090508152505b5b8151600101808352811415610d7c575b50506101406104e0525b6104e0515160206104e051016104e0526104e06104e0511015610e5b57610e39565b631f30ab74610500526105206101c08051825280602001518260200152806040015182604001528060600151826060015250506105a0610140805182528060200151826020015280604001518260400152806060015182606001525050610600516105e0516105c0516105a0516105805161056051610540516105205160065801610759565b610660526104c06104e0525b6104e0515260206104e051036104e0526101406104e051101515610f1057610eed565b610660516104c0526007543b610f2557600080fd5b6007543018610f3357600080fd5b602061070060046318160ddd6106a0526106bc6007545afa610f5457600080fd5b600050610700516106805260006107205260843515610f92576104c0516102e05180821015610f8257600080fd5b8082039050905061072052610fb3565b6102e0516104c05180821015610fa757600080fd5b80820390509050610720525b61072051610680518082028215828483041417610fcf57600080fd5b809050905090506102e0518080610fe557600080fd5b82049050905060005260206000f350005b63029b2f346000511415611a785762ffffff541561101357600080fd5b600162ffffff55341561102557600080fd5b600f541561103257600080fd5b61014060008152600081602001526000816040015260008160600152506004546004808202821582848304141761106857600080fd5b80905090509050600c808061107c57600080fd5b8204905090506101c0526005546101e0526007543b61109a57600080fd5b60075430186110a857600080fd5b602061028060046318160ddd6102205261023c6007545afa6110c957600080fd5b60005061028051610200526102a0610140610320525b61032051516020610320510161032052610320610320511015611101576110df565b600658016100a9565b6103405261036052610380526103a052610300610320525b610320515260206103205103610320526101406103205110151561114557611122565b61034080518252806020015182602001528060400151826040015280606001518260600152505060006103c0526103e060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102005111156112af57610140610460525b610460515160206104605101610460526104606104605110156111f1576111cf565b631f30ab74610480526104a06102a08051825280602001518260200152806040015182604001528060600151826060015250506105206103e080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156112a657611283565b6105e0516103c0525b6106006103e080518252806020015182602001528060400151826040015280606001518260600152505061068060006004818352015b6102005115156113145760006004610680516004811061130457600080fd5b60200201351161131357600080fd5b5b6103e0610680516004811061132857600080fd5b60200201516004610680516004811061134057600080fd5b602002013581818301101561135457600080fd5b80820190509050610600610680516004811061136f57600080fd5b60200201525b81516001018083528114156112e5575b50506101406106c0525b6106c0515160206106c051016106c0526106c06106c05110156113b15761138f565b631f30ab746106e0526107006102a08051825280602001518260200152806040015182604001528060600151826060015250506107806106008051825280602001518260200152806040015182604001528060600151826060015250506107e0516107c0516107a051610780516107605161074051610720516107005160065801610759565b610840526106a06106c0525b6106c0515260206106c051036106c0526101406106c05110151561146657611443565b610840516106a0526103c0516106a0511161148057600080fd5b6106a0516108605260006102005111156117bf5761088060006004818352015b6106a0516103e061088051600481106114b857600080fd5b602002015180820282158284830414176114d157600080fd5b809050905090506103c05180806114e757600080fd5b8204905090506108a05260006108c052610600610880516004811061150b57600080fd5b60200201516108a0511115611554576108a051610600610880516004811061153257600080fd5b60200201518082101561154457600080fd5b808203905090506108c05261158a565b610600610880516004811061156857600080fd5b60200201516108a0518082101561157e57600080fd5b808203905090506108c0525b6101c0516108c05180820282158284830414176115a657600080fd5b809050905090506402540be40080806115be57600080fd5b82049050905061014061088051600481106115d857600080fd5b602002015261060061088051600481106115f157600080fd5b6020020151610140610880516004811061160a57600080fd5b60200201516101e051808202821582848304141761162757600080fd5b809050905090506402540be400808061163f57600080fd5b8204905090508082101561165257600080fd5b80820390509050610880516004811061166a57600080fd5b600260c052602060c0200155610600610880516004811061168a57600080fd5b60200201805161014061088051600481106116a457600080fd5b6020020151808210156116b657600080fd5b808203905090508152505b81516001018083528114156114a0575b50506101406108e0525b6108e0515160206108e051016108e0526108806108e05110156116fd576116db565b631f30ab74610900526109206102a08051825280602001518260200152806040015182604001528060600151826060015250506109a0610600805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108606108e0525b6108e0515260206108e051036108e0526101406108e0511015156117b25761178f565b610a6051610860526117f1565b600260c052602060c0206106008051825580602001516001830155806040015160028301558060600151600383015550505b6000610a805261020051151561180e576106a051610a8052611863565b61020051610860516103c0518082101561182757600080fd5b80820390509050808202821582848304141761184257600080fd5b809050905090506103c051808061185857600080fd5b820490509050610a80525b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a805110156118b5576084610abcfd5b610b4060006004818352015b610b4051600481106118d257600080fd5b600060c052602060c02001543b6118e857600080fd5b610b4051600481106118f957600080fd5b600060c052602060c0200154301861191057600080fd5b6020610c2060646323b872dd610b605233610b805230610ba0526004610b40516004811061193d57600080fd5b6020020135610bc052610b7c6000610b40516004811061195c57600080fd5b600060c052602060c02001545af161197357600080fd5b600050610c205161198357600080fd5b5b81516001018083528114156118c1575b50506007543b6119a357600080fd5b60075430186119b157600080fd5b6000600060446340c10f19610c405233610c6052610a8051610c8052610c5c60006007545af16119e057600080fd5b600435610ce052602435610d0052604435610d2052606435610d405261014051610d605261016051610d805261018051610da0526101a051610dc0526106a051610de05261020051610a8051818183011015611a3b57600080fd5b80820190509050610e0052337f3f1915775e0c9a38a57a7bb7f1f9005f486fb904e1f84aa215364d567319a58d610140610ce0a2600062ffffff55005b600015611e7c575b610220526101405261016052610180526101a0526101c0526101e052610200526000610140511215610160516101405114151660006101605112151660046101405112166004610160511216611ad557600080fd5b6101405161016051610180516101a0516101c0516101e0516102005161022051610240516305eb8fa6610280526102a06101a0805182528060200151826020015280604001518260400152806060015182606001525050610300516102e0516102c0516102a05160065801610454565b610360526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103605161024052610240516103805260006103a05260035460048082028215828483041417611b9c57600080fd5b809050905090506103c05260006103e05261040060006004818352015b61014051610400511415611bd457610180516103e052611c0a565b61016051610400511815611c04576101a06104005160048110611bf657600080fd5b60200201516103e052611c09565b611c86565b5b6103a080516103e051818183011015611c2257600080fd5b8082019050905081525061038051610240518082028215828483041417611c4857600080fd5b809050905090506103e05160048082028215828483041417611c6957600080fd5b809050905090508080611c7b57600080fd5b820490509050610380525b8151600101808352811415611bb9575b505061038051610240518082028215828483041417611cb457600080fd5b809050905090506103c05160048082028215828483041417611cd557600080fd5b809050905090508080611ce757600080fd5b820490509050610380526103a051610240516103c0518080611d0857600080fd5b820490509050818183011015611d1d57600080fd5b80820190509050610420526000610440526102405161046052610480600060ff818352015b610460516104405261046051610460518082028215828483041417611d6657600080fd5b8090509050905061038051818183011015611d8057600080fd5b808201905090506002610460518082028215828483041417611da157600080fd5b8090509050905061042051818183011015611dbb57600080fd5b808201905090506102405180821015611dd357600080fd5b808203905090508080611de557600080fd5b8204905090506104605261044051610460511115611e2c576001610460516104405180821015611e1457600080fd5b80820390509050111515611e2757611e68565b611e57565b6001610440516104605180821015611e4357600080fd5b80820390509050111515611e5657611e68565b5b5b8151600101808352811415611d42575b505061046051600052600051610220515650005b635e0d443f6000511415612253573415611e9557600080fd5b60605160043580604051901315611eab57600080fd5b8091901215611eb957600080fd5b5060605160243580604051901315611ed057600080fd5b8091901215611ede57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015611f6f57611f4d565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515611ff657611fd3565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606004356004811061203057600080fd5b60200201516044356101406004356004811061204b57600080fd5b6020020151808202821582848304141761206457600080fd5b80905090509050670de0b6b3a7640000808061207f57600080fd5b82049050905081818301101561209457600080fd5b80820190509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156120c9576120a7565b631e8c3fd36104c0526004356104e0526024356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561216657612143565b61060051610480526102606024356004811061218157600080fd5b6020020151610480518082101561219757600080fd5b80820390509050670de0b6b3a764000080820282158284830414176121bb57600080fd5b80905090509050610140602435600481106121d557600080fd5b602002015180806121e557600080fd5b8204905090506106205260045461062051808202821582848304141761220a57600080fd5b809050905090506402540be400808061222257600080fd5b8204905090506106405261062051610640518082101561224157600080fd5b8082039050905060005260206000f350005b6367df02ca600051141561262257341561226c57600080fd5b6060516004358060405190131561228257600080fd5b809190121561229057600080fd5b50606051602435806040519013156122a757600080fd5b80919012156122b557600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e051101561234657612324565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e0511015156123cd576123aa565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506102606024356004811061240757600080fd5b60200201516044356402540be400808202821582848304141761242957600080fd5b809050905090506402540be4006004548082101561244657600080fd5b80820390509050808061245857600080fd5b8204905090506101406024356004811061247157600080fd5b6020020151808202821582848304141761248a57600080fd5b80905090509050670de0b6b3a764000080806124a557600080fd5b820490509050808210156124b857600080fd5b80820390509050610460526101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156124ed576124cb565b631e8c3fd36104c0526024356104e0526004356105005261046051610520526105406102608051825280602001518260200152806040015182604001528060600151826060015250506105a05161058051610560516105405161052051610500516104e05160065801611a80565b610600526104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561258a57612567565b610600516104805261048051610260600435600481106125a957600080fd5b6020020151808210156125bb57600080fd5b80820390509050670de0b6b3a764000080820282158284830414176125df57600080fd5b80905090509050610140600435600481106125f957600080fd5b6020020151808061260957600080fd5b820490509050610620526106205160005260206000f350005b6307211ef760005114156129e057341561263b57600080fd5b6060516004358060405190131561265157600080fd5b809190121561265f57600080fd5b506060516024358060405190131561267657600080fd5b809190121561268457600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612715576126f3565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e05110151561279c57612779565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a5100081604001526001816060015250610260600435600481106127fb57600080fd5b60200201516044356104606004356004811061281657600080fd5b6020020151808202821582848304141761282f57600080fd5b8090509050905081818301101561284557600080fd5b808201905090506104e052610140610520525b6105205151602061052051016105205261052061052051101561287a57612858565b631e8c3fd36105405260043561056052602435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612917576128f4565b61068051610500526102606024356004811061293257600080fd5b6020020151610500518082101561294857600080fd5b808203905090506104606024356004811061296257600080fd5b6020020151808061297257600080fd5b8204905090506106a0526004546106a051808202821582848304141761299757600080fd5b809050905090506402540be40080806129af57600080fd5b8204905090506106c0526106a0516106c051808210156129ce57600080fd5b8082039050905060005260206000f350005b630e71d1b96000511415612d965734156129f957600080fd5b60605160043580604051901315612a0f57600080fd5b8091901215612a1d57600080fd5b5060605160243580604051901315612a3457600080fd5b8091901215612a4257600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606101406102e0525b6102e0515160206102e051016102e0526102e06102e0511015612ad357612ab1565b631db7662b6103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051600658016101fe565b6103e0526104005261042052610440526102c06102e0525b6102e0515260206102e051036102e0526101406102e051101515612b5a57612b37565b6103e08051825280602001518260200152806040015182604001528060600151826060015250506104606001815264e8d4a51000816020015264e8d4a510008160400152600181606001525061026060243560048110612bb957600080fd5b60200201516044356402540be4008082028215828483041417612bdb57600080fd5b809050905090506402540be40060045480821015612bf857600080fd5b808203905090508080612c0a57600080fd5b82049050905061046060243560048110612c2357600080fd5b60200201518082028215828483041417612c3c57600080fd5b8090509050905080821015612c5057600080fd5b808203905090506104e052610140610520525b61052051516020610520510161052052610520610520511015612c8557612c63565b631e8c3fd36105405260243561056052600435610580526104e0516105a0526105c061026080518252806020015182602001528060400151826040015280606001518260600152505061062051610600516105e0516105c0516105a051610580516105605160065801611a80565b61068052610500610520525b6105205152602061052051036105205261014061052051101515612d2257612cff565b61068051610500526105005161026060043560048110612d4157600080fd5b602002015180821015612d5357600080fd5b8082039050905061046060043560048110612d6d57600080fd5b60200201518080612d7d57600080fd5b8204905090506106a0526106a05160005260206000f350005b60001561323b575b610220526101405261016052610180526101a0526101c0526101e05261020052600f5415612dcb57600080fd5b6102406101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015612df857612dd6565b631db7662b6102e0526103006101a080518252806020015182602001528060400151826040015280606001518260600152505061036051610340516103205161030051600658016101fe565b6103c0526103e05261040052610420526102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515612e7f57612e5c565b6103c08051825280602001518260200152806040015182604001528060600151826060015250506102406101405160048110612eba57600080fd5b6020020151610180516101a06101405160048110612ed757600080fd5b60200201518082028215828483041417612ef057600080fd5b80905090509050670de0b6b3a76400008080612f0b57600080fd5b820490509050818183011015612f2057600080fd5b8082019050905061044052610140610480525b61048051516020610480510161048052610480610480511015612f5557612f33565b631e8c3fd36104a052610140516104c052610160516104e052610440516105005261052061024080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c05160065801611a80565b6105e052610460610480525b6104805152602061048051036104805261014061048051101515612ff457612fd1565b6105e05161046052610240610160516004811061301057600080fd5b6020020151610460518082101561302657600080fd5b808203905090506106005261060051600454808202821582848304141761304c57600080fd5b809050905090506402540be400808061306457600080fd5b8204905090506106205261062051600554808202821582848304141761308957600080fd5b809050905090506402540be40080806130a157600080fd5b8204905090506106405261044051670de0b6b3a764000080820282158284830414176130cc57600080fd5b809050905090506101a061014051600481106130e757600080fd5b602002015180806130f757600080fd5b820490509050610140516004811061310e57600080fd5b600260c052602060c02001556104605161062051610640518082101561313357600080fd5b8082039050905081818301101561314957600080fd5b80820190509050670de0b6b3a7640000808202821582848304141761316d57600080fd5b809050905090506101a0610160516004811061318857600080fd5b6020020151808061319857600080fd5b82049050905061016051600481106131af57600080fd5b600260c052602060c02001556106005161062051808210156131d057600080fd5b80820390509050670de0b6b3a764000080820282158284830414176131f457600080fd5b809050905090506101a0610160516004811061320f57600080fd5b6020020151808061321f57600080fd5b8204905090506106605261066051600052600051610220515650005b633df0212460005114156135f55762ffffff541561325857600080fd5b600162ffffff55341561326a57600080fd5b6060516004358060405190131561328057600080fd5b809190121561328e57600080fd5b50606051602435806040519013156132a557600080fd5b80919012156132b357600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051632ce785a36102a0526004356102c0526024356102e0526044356103005261032061014080518252806020015182602001528060400151826040015280606001518260600152505061038051610360516103405161032051610300516102e0516102c05160065801612d9e565b6103e052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103e051610260526308c379a061040052602061042052602e610440527f45786368616e676520726573756c74656420696e20666577657220636f696e73610460527f207468616e20657870656374656400000000000000000000000000000000000061048052610440506064356102605110156134575760a461041cfd5b6004356004811061346757600080fd5b600060c052602060c02001543b61347d57600080fd5b6004356004811061348d57600080fd5b600060c052602060c020015430186134a457600080fd5b602061058060646323b872dd6104c052336104e0523061050052604435610520526104dc6000600435600481106134da57600080fd5b600060c052602060c02001545af16134f157600080fd5b6000506105805161350157600080fd5b6024356004811061351157600080fd5b600060c052602060c02001543b61352757600080fd5b6024356004811061353757600080fd5b600060c052602060c0200154301861354e57600080fd5b6020610640604463a9059cbb6105a052336105c052610260516105e0526105bc60006024356004811061358057600080fd5b600060c052602060c02001545af161359757600080fd5b600050610640516135a757600080fd5b60043561066052604435610680526024356106a052610260516106c052337f8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd971406080610660a2600062ffffff55005b63a6417ed66000511415613f605762ffffff541561361257600080fd5b600162ffffff55341561362457600080fd5b6060516004358060405190131561363a57600080fd5b809190121561364857600080fd5b506060516024358060405190131561365f57600080fd5b809190121561366d57600080fd5b506101406101405161016051610180516101a051600658016100a9565b6101e0526102005261022052610240526101a0526101805261016052610140526101e08051825280602001518260200152806040015182604001528060600151826060015250506102606001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101406004356004811061370957600080fd5b60200201516102606004356004811061372157600080fd5b6020020151808061373157600080fd5b8204905090506102e0526101406024356004811061374e57600080fd5b60200201516102606024356004811061376657600080fd5b6020020151808061377657600080fd5b82049050905061030052604435670de0b6b3a764000080820282158284830414176137a057600080fd5b809050905090506102e05180806137b657600080fd5b82049050905061032052610140610360525b610360515160206103605101610360526103606103605110156137ea576137c8565b632ce785a3610380526004356103a0526024356103c052610320516103e052610400610140805182528060200151826020015280604001518260400152806060015182606001525050610460516104405161042051610400516103e0516103c0516103a05160065801612d9e565b6104c052610340610360525b610360515260206103605103610360526101406103605110151561388757613864565b6104c05161034052610340516103005180820282158284830414176138ab57600080fd5b80905090509050670de0b6b3a764000080806138c657600080fd5b8204905090506104e0526308c379a061050052602061052052602e610540527f45786368616e676520726573756c74656420696e20666577657220636f696e73610560527f207468616e20657870656374656400000000000000000000000000000000000061058052610540506064356104e05110156139475760a461051cfd5b6105c060008152600081602001526001816040015260008160600152506000610640526105c06004356004811061397d57600080fd5b602002015115613a25576004356004811061399757600080fd5b600160c052602060c02001543b6139ad57600080fd5b600435600481106139bd57600080fd5b600160c052602060c020015430186139d457600080fd5b6000600060646323b872dd61074052336107605230610780526044356107a05261075c600060043560048110613a0957600080fd5b600160c052602060c02001545af1613a2057600080fd5b613ad0565b60043560048110613a3557600080fd5b600160c052602060c02001543b613a4b57600080fd5b60043560048110613a5b57600080fd5b600160c052602060c02001543018613a7257600080fd5b602061072060646323b872dd610660523361068052306106a0526044356106c05261067c600060043560048110613aa857600080fd5b600160c052602060c02001545af1613abf57600080fd5b60005061072051613acf57600080fd5b5b60043560048110613ae057600080fd5b600160c052602060c02001543b613af657600080fd5b60043560048110613b0657600080fd5b600160c052602060c02001543018613b1d57600080fd5b60206108a0604463095ea7b36108005260043560048110613b3d57600080fd5b600060c052602060c0200154610820526044356108405261081c600060043560048110613b6957600080fd5b600160c052602060c02001545af1613b8057600080fd5b6000506108a05060043560048110613b9757600080fd5b600060c052602060c02001543b613bad57600080fd5b60043560048110613bbd57600080fd5b600060c052602060c02001543018613bd457600080fd5b60006000602463b6b55f256108c0526044356108e0526108dc600060043560048110613bff57600080fd5b600060c052602060c02001545af1613c1657600080fd5b60243560048110613c2657600080fd5b600060c052602060c02001543b613c3c57600080fd5b60243560048110613c4c57600080fd5b600060c052602060c02001543018613c6357600080fd5b600060006024632e1a7d4d61094052610340516109605261095c600060243560048110613c8f57600080fd5b600060c052602060c02001545af1613ca657600080fd5b60243560048110613cb657600080fd5b600160c052602060c02001543b613ccc57600080fd5b60243560048110613cdc57600080fd5b600160c052602060c02001543018613cf357600080fd5b6020610a4060246370a082316109c052306109e0526109dc60243560048110613d1b57600080fd5b600160c052602060c02001545afa613d3257600080fd5b600050610a40516104e0526308c379a0610a60526020610a8052602e610aa0527f45786368616e676520726573756c74656420696e20666577657220636f696e73610ac0527f207468616e206578706563746564000000000000000000000000000000000000610ae052610aa0506064356104e0511015613db45760a4610a7cfd5b6105c060243560048110613dc757600080fd5b602002015115613e6b5760243560048110613de157600080fd5b600160c052602060c02001543b613df757600080fd5b60243560048110613e0757600080fd5b600160c052602060c02001543018613e1e57600080fd5b60006000604463a9059cbb610be05233610c00526104e051610c2052610bfc600060243560048110613e4f57600080fd5b600160c052602060c02001545af1613e6657600080fd5b613f12565b60243560048110613e7b57600080fd5b600160c052602060c02001543b613e9157600080fd5b60243560048110613ea157600080fd5b600160c052602060c02001543018613eb857600080fd5b6020610bc0604463a9059cbb610b205233610b40526104e051610b6052610b3c600060243560048110613eea57600080fd5b600160c052602060c02001545af1613f0157600080fd5b600050610bc051613f1157600080fd5b5b600435610c8052604435610ca052602435610cc0526104e051610ce052337fd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b6080610c80a2600062ffffff55005b637d49d87560005114156142e85762ffffff5415613f7d57600080fd5b600162ffffff553415613f8f57600080fd5b6007543b613f9c57600080fd5b6007543018613faa57600080fd5b60206101c060046318160ddd6101605261017c6007545afa613fcb57600080fd5b6000506101c051610140526101e0600081526000816020015260008160400152600081606001525061026060008152600081602001526000816040015260008160600152506102e060006004818352015b6102e0516004811061402d57600080fd5b600260c052602060c0200154600435808202821582848304141761405057600080fd5b8090509050905061014051808061406657600080fd5b820490509050610300526308c379a0610320526020610340526030610360527f5769746864726177616c20726573756c74656420696e20666577657220636f69610380527f6e73207468616e206578706563746564000000000000000000000000000000006103a0526103605060246102e051600481106140e657600080fd5b60200201356103005110156140fc5760a461033cfd5b6102e0516004811061410d57600080fd5b600260c052602060c020018054610300518082101561412b57600080fd5b80820390509050815550610300516101e06102e0516004811061414d57600080fd5b60200201526102e0516004811061416357600080fd5b600060c052602060c02001543b61417957600080fd5b6102e0516004811061418a57600080fd5b600060c052602060c020015430186141a157600080fd5b6020610480604463a9059cbb6103e052336104005261030051610420526103fc60006102e051600481106141d457600080fd5b600060c052602060c02001545af16141eb57600080fd5b600050610480516141fb57600080fd5b5b815160010180835281141561401c575b50506007543b61421b57600080fd5b600754301861422957600080fd5b6000600060446379cc67906104a052336104c0526004356104e0526104bc60006007545af161425757600080fd5b6101e0516105405261020051610560526102205161058052610240516105a052610260516105c052610280516105e0526102a051610600526102c0516106205261014051600435808210156142ab57600080fd5b8082039050905061064052337f9878ca375e106f2a43c3b599fc624568131c4c9a4ba66a14563715763be9d59d610120610540a2600062ffffff55005b6318a7bd766000511415614caf5762ffffff541561430557600080fd5b600162ffffff55341561431757600080fd5b600f541561432457600080fd5b6007543b61433157600080fd5b600754301861433f57600080fd5b60206101c060046318160ddd6101605261017c6007545afa61436057600080fd5b6000506101c051610140526000610140511161437b57600080fd5b6004546004808202821582848304141761439457600080fd5b80905090509050600c80806143a857600080fd5b8204905090506101e052600554610200526102206101406102a0525b6102a0515160206102a051016102a0526102a06102a05110156143e6576143c4565b600658016100a9565b6102c0526102e05261030052610320526102806102a0525b6102a0515260206102a051036102a0526101406102a05110151561442a57614407565b6102c080518252806020015182602001528060400151826040015280606001518260600152505061034060028060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506103c0610340805182528060200151826020015280604001518260400152806060015182606001525050610140610460525b610460515160206104605101610460526104606104605110156144ee576144cc565b631f30ab74610480526104a061022080518252806020015182602001528060400151826040015280606001518260600152505061052061034080518252806020015182602001528060400151826040015280606001518260600152505061058051610560516105405161052051610500516104e0516104c0516104a05160065801610759565b6105e052610440610460525b61046051526020610460510361046052610140610460511015156145a357614580565b6105e0516104405261060060006004818352015b6103c061060051600481106145cb57600080fd5b602002018051600461060051600481106145e457600080fd5b6020020135808210156145f657600080fd5b808203905090508152505b81516001018083528114156145b7575b5050610140610640525b6106405151602061064051016106405261064061064051101561463d5761461b565b631f30ab74610660526106806102208051825280602001518260200152806040015182604001528060600151826060015250506107006103c0805182528060200151826020015280604001518260400152806060015182606001525050610760516107405161072051610700516106e0516106c0516106a0516106805160065801610759565b6107c052610620610640525b61064051526020610640510361064052610140610640511015156146f2576146cf565b6107c051610620526107e0600081526000816020015260008160400152600081606001525061086060006004818352015b61062051610340610860516004811061473b57600080fd5b6020020151808202821582848304141761475457600080fd5b8090509050905061044051808061476a57600080fd5b8204905090506108805260006108a0526103c0610860516004811061478e57600080fd5b60200201516108805111156147d757610880516103c061086051600481106147b557600080fd5b6020020151808210156147c757600080fd5b808203905090506108a05261480d565b6103c061086051600481106147eb57600080fd5b6020020151610880518082101561480157600080fd5b808203905090506108a0525b6101e0516108a051808202821582848304141761482957600080fd5b809050905090506402540be400808061484157600080fd5b8204905090506107e0610860516004811061485b57600080fd5b60200201526103c0610860516004811061487457600080fd5b60200201516107e0610860516004811061488d57600080fd5b60200201516102005180820282158284830414176148aa57600080fd5b809050905090506402540be40080806148c257600080fd5b820490509050808210156148d557600080fd5b8082039050905061086051600481106148ed57600080fd5b600260c052602060c02001556103c0610860516004811061490d57600080fd5b6020020180516107e0610860516004811061492757600080fd5b60200201518082101561493957600080fd5b808203905090508152505b8151600101808352811415614723575b50506101406108e0525b6108e0515160206108e051016108e0526108e06108e05110156149805761495e565b631f30ab74610900526109206102208051825280602001518260200152806040015182604001528060600151826060015250506109a06103c0805182528060200151826020015280604001518260400152806060015182606001525050610a00516109e0516109c0516109a0516109805161096051610940516109205160065801610759565b610a60526108c06108e0525b6108e0515260206108e051036108e0526101406108e051101515614a3557614a12565b610a60516108c052610440516108c05180821015614a5257600080fd5b80820390509050610140518082028215828483041417614a7157600080fd5b80905090509050610440518080614a8757600080fd5b820490509050610a80526000610a805111614aa157600080fd5b6308c379a0610aa0526020610ac0526014610ae0527f536c697070616765207363726577656420796f75000000000000000000000000610b0052610ae050608435610a80511115614af3576084610abcfd5b610b4060006004818352015b610b405160048110614b1057600080fd5b600060c052602060c02001543b614b2657600080fd5b610b405160048110614b3757600080fd5b600060c052602060c02001543018614b4e57600080fd5b6020610c00604463a9059cbb610b605233610b80526004610b405160048110614b7657600080fd5b6020020135610ba052610b7c6000610b405160048110614b9557600080fd5b600060c052602060c02001545af1614bac57600080fd5b600050610c0051614bbc57600080fd5b5b8151600101808352811415614aff575b50506007543b614bdc57600080fd5b6007543018614bea57600080fd5b6000600060446379cc6790610c205233610c4052610a8051610c6052610c3c60006007545af1614c1957600080fd5b600435610cc052602435610ce052604435610d0052606435610d20526107e051610d405261080051610d605261082051610d805261084051610da05261062051610dc05261014051610a805180821015614c7257600080fd5b80820390509050610de052337fb964b72f73f5ef5bf0fdc559b2fab9a7b12a39e47817a547f1f0aee47febd602610140610cc0a2600062ffffff55005b63ee11f5b66000511415614d71573415614cc857600080fd5b6006543314614cd657600080fd5b60085415614ce357600080fd5b64012a05f2006044351115614cf757600080fd5b426203f480818183011015614d0b57600080fd5b808201905090506101405261014051600855600435600a55602435600b55604435600c5560043561016052602435610180526044356101a052610140517f6081daa3b61098baf24d9c69bcd53af932e0635c89c6fd0617534b9ba76a7f736060610160a2005b632a7dd7cd6000511415614e1e573415614d8a57600080fd5b6006543314614d9857600080fd5b60006008541142600854111516614dae57600080fd5b6000600855600a5461014052600b5461016052600c5461018052610140516003556101605160045561018051600555610140516101a052610160516101c052610180516101e0527f752a27d1853eb7af3ee4ff764f2c4a51619386af721573dd3809e929c39db99e60606101a0a1005b63226840fb6000511415614e4c573415614e3757600080fd5b6006543314614e4557600080fd5b6000600855005b636b441a406000511415614eed573415614e6557600080fd5b6004356020518110614e7657600080fd5b506006543314614e8557600080fd5b60095415614e9257600080fd5b426203f480818183011015614ea657600080fd5b808201905090506101405261014051600955600435600d55600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae6000511415614f69573415614f0657600080fd5b6006543314614f1457600080fd5b60006009541160095442101516614f2a57600080fd5b6000600955600d546101405261014051600655610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf1936000511415614f97573415614f8257600080fd5b6006543314614f9057600080fd5b6000600955005b6330c540856000511415615110573415614fb057600080fd5b6006543314614fbe57600080fd5b6101406001815264e8d4a51000816020015264e8d4a51000816040015260018160600152506101c060006004818352015b6101c0516004811061500057600080fd5b600060c052602060c02001546101e0526101e0513b61501e57600080fd5b6101e051301861502d57600080fd5b60206102a060246370a0823161022052306102405261023c6101e0515afa61505457600080fd5b6000506102a0516101c0516004811061506c57600080fd5b600260c052602060c02001548082101561508557600080fd5b808203905090506102005260006102005111156150fb576101e0513b6150aa57600080fd5b6101e05130186150b957600080fd5b6020610360604463a9059cbb6102c052336102e05261020051610300526102dc60006101e0515af16150ea57600080fd5b600050610360516150fa57600080fd5b5b5b8151600101808352811415614fef575b5050005b63e3698853600051141561514c57341561512957600080fd5b600654331461513757600080fd5b42600e541161514557600080fd5b6001600f55005b633046f972600051141561517a57341561516557600080fd5b600654331461517357600080fd5b6000600f55005b6323746eb860005114156151df57341561519357600080fd5b606051600435806040519013156151a957600080fd5b80919012156151b757600080fd5b50600435600481106151c857600080fd5b600060c052602060c020015460005260206000f350005b63b739953e60005114156152445734156151f857600080fd5b6060516004358060405190131561520e57600080fd5b809190121561521c57600080fd5b506004356004811061522d57600080fd5b600160c052602060c020015460005260206000f350005b63065a80d860005114156152a957341561525d57600080fd5b6060516004358060405190131561527357600080fd5b809190121561528157600080fd5b506004356004811061529257600080fd5b600260c052602060c020015460005260206000f350005b63f446c1d060005114156152d05734156152c257600080fd5b60035460005260206000f350005b63ddca3f4360005114156152f75734156152e957600080fd5b60045460005260206000f350005b63fee3f7f9600051141561531e57341561531057600080fd5b60055460005260206000f350005b638da5cb5b600051141561534557341561533757600080fd5b60065460005260206000f350005b63405e28f8600051141561536c57341561535e57600080fd5b60085460005260206000f350005b63e0a0b586600051141561539357341561538557600080fd5b60095460005260206000f350005b63b4b577ad60005114156153ba5734156153ac57600080fd5b600a5460005260206000f350005b6358680d0b60005114156153e15734156153d357600080fd5b600b5460005260206000f350005b63e382446260005114156154085734156153fa57600080fd5b600c5460005260206000f350005b631ec0cdc1600051141561542f57341561542157600080fd5b600d5460005260206000f350005b5b60006000fd

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

00000000000000000000000016de59092dae5ccf4a1e6439d611fd0653f0bd01000000000000000000000000d6ad7a6750a7593e092a9b218d66c0a814a3436e00000000000000000000000083f798e925bcd4017eb265844fddabb448f1707d00000000000000000000000073a052500105205d34daf004eab301916da8190f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec70000000000000000000000000000000000085d4780b73119b644ae5ecd22b376000000000000000000000000df5e0e81dff6faf3a7e52ba697820c5e32d806a8000000000000000000000000000000000000000000000000000000000000070800000000000000000000000000000000000000000000000000000000003d0900

-----Decoded View---------------
Arg [0] : _coins (address[4]): 0x16de59092dAE5CcF4A1E6439D611fd0653f0Bd01,0xd6aD7a6750A7593E092a9B218d66C0A814a3436e,0x83f798e925BcD4017Eb265844FDDAbb448f1707D,0x73a052500105205d34Daf004eAb301916DA8190f
Arg [1] : _underlying_coins (address[4]): 0x6B175474E89094C44Da98b954EedeAC495271d0F,0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48,0xdAC17F958D2ee523a2206206994597C13D831ec7,0x0000000000085d4780B73119b644AE5ecd22b376
Arg [2] : _pool_token (address): 0xdF5e0e81Dff6FAF3A7e52BA697820c5e32D806A8
Arg [3] : _A (uint256): 1800
Arg [4] : _fee (uint256): 4000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000016de59092dae5ccf4a1e6439d611fd0653f0bd01
Arg [1] : 000000000000000000000000d6ad7a6750a7593e092a9b218d66c0a814a3436e
Arg [2] : 00000000000000000000000083f798e925bcd4017eb265844fddabb448f1707d
Arg [3] : 00000000000000000000000073a052500105205d34daf004eab301916da8190f
Arg [4] : 0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f
Arg [5] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [6] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [7] : 0000000000000000000000000000000000085d4780b73119b644ae5ecd22b376
Arg [8] : 000000000000000000000000df5e0e81dff6faf3a7e52ba697820c5e32d806a8
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000708
Arg [10] : 00000000000000000000000000000000000000000000000000000000003d0900


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
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.