20M+ users trust MoonPay worldwide. Checkout with your preferred payment method.
Ready to onboard to Ethereum? With MetaMask Portfolio, you're in control.
Don’t invest unless you’re prepared to lose all the money you invest.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Slots, Roulette, Poker & more - Proud sponsors of UFC, Everton & StakeF1 team!
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
100s of games, generous bonuses, 20+ years of trusted gaming. Join CryptoWins & start winning today!
Overview
ETH Balance
Eth Value
$278.46 (@ $3,320.05/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (34)0.5 BZRBAZAARS (BZR)$3.29@6.571,000 MTVMultiVAC (MTV)$1.01@0.0016,687,601.396897 USDTTether USD (USDT)$6,700,976.60@1.00268.07999505 WBTCWrapped BTC (WBTC)$6,708,738.87@98,542.002,007.15937362 WETHWrapped Ethe... (WETH)$6,663,878.74@3,320.05462,500 $ Evmosia.com$ Evmosia.c... ($ Evm...)4.75ERC20 ***7.244817 auroom.financeauroom.finan... (auroom...)984.85436419 BGBGBigMouthFrog50.00292838 BlueSparrowBlueSparrowToken$1.43@0.02852.53751725 COLONColon$0.00@0.00158,244.69543 LEAXLeaxcoin334,232.66712854 MEANMean Protoco... (MEAN)82,758.1005343 LETSOkLetsPlay (LETS)67.314 REKTRektGAME (REKT)40 VBITVALOBIT$0.25@0.00620.155555 HQG环球股 (HQG)1.2 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]0.7 TokenERC-20 TOKEN*[Suspicious]400 TokenERC-20 TOKEN*[Suspicious]800 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]1,000,000 TokenERC-20 TOKEN*[Suspicious]509,850,377.934442 TokenERC-20 TOKEN*[Suspicious]1,000,000,000 TokenERC-20 TOKEN*[Suspicious]1.4 TokenERC-20 TOKEN*[Spam]1.4 TokenERC-20 TOKEN*[Spam]50,000 TokenERC-20 TOKEN*[Spam]100,000 TokenERC-20 TOKEN*[Spam]126,466,169.43459 TokenERC-20 TOKEN*[Spam]50,000 TokenERC-20 TOKEN*[Spam]NFT Tokens (18)claim rewards on apy-usd.comapy-usd.comERC-1155Reward Club [QEfkfA1G]Reward Club [w7cIVAag]ERC-1155NWBTCwbtc-nft.org or OS/collection/nwbtc to Redeem and Swap your NFT for WBTCERC-1155claim rewards on wbtcnetwork.netwbtcnetwork.netERC-1155Let's Go!🎁ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]
More Info
Private Name Tags
ContractCreator
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
- Cards New
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 44,397 transactions
Transaction Hash MethodBlockFromToRemove_liquidity 21243655 2024-11-22 13:45:35 9 hrs ago 1732283135 IN 0 ETH$0.00 0.00275448 19.54837746 Exchange 21243337 2024-11-22 12:41:23 10 hrs ago 1732279283 IN 0 ETH$0.00 0.00352689 14.56806251 Exchange 21243316 2024-11-22 12:37:11 10 hrs ago 1732279031 IN 0 ETH$0.00 0.00475392 13.75025081 Exchange 21243270 2024-11-22 12:27:59 10 hrs ago 1732278479 IN 0 ETH$0.00 0.00383304 13.01958613 Remove_liquidity... 21234039 2024-11-21 5:32:35 41 hrs ago 1732167155 IN 0 ETH$0.00 0.00350508 11.93691615 Remove_liquidity... 21210884 2024-11-18 0:01:59 4 days ago 1731888119 IN 0 ETH$0.00 0.0019172 8.65911822 Remove_liquidity 21193604 2024-11-15 14:11:23 7 days ago 1731679883 IN 0 ETH$0.00 0.00534003 30.4834981 Remove_liquidity... 21185578 2024-11-14 11:16:23 8 days ago 1731582983 IN 0 ETH$0.00 0.00908108 28.45291724 Remove_liquidity... 21180788 2024-11-13 19:13:47 9 days ago 1731525227 IN 0 ETH$0.00 0.02961378 91.56845759 Exchange 21008628 2024-10-20 18:37:47 33 days ago 1729449467 IN 1.92 ETH$6,374.50 0.00310306 10.60545565 Exchange 20964400 2024-10-14 14:28:23 39 days ago 1728916103 IN 0 ETH$0.00 0.01718801 44.67379105 Remove_liquidity... 20860370 2024-09-30 2:06:47 53 days ago 1727662007 IN 0 ETH$0.00 0.00160908 5.37706078 Remove_liquidity... 20840872 2024-09-27 8:50:11 56 days ago 1727427011 IN 0 ETH$0.00 0.0031424 13.89520666 Exchange 20808976 2024-09-22 22:02:23 61 days ago 1727042543 IN 0 ETH$0.00 0.00445195 12.17911171 Remove_liquidity... 20748333 2024-09-14 10:44:59 69 days ago 1726310699 IN 0 ETH$0.00 0.00024591 1.19644848 Exchange 20670031 2024-09-03 12:24:23 80 days ago 1725366263 IN 0 ETH$0.00 0.00154085 4.32461154 Exchange 20579391 2024-08-21 20:30:59 93 days ago 1724272259 IN 0 ETH$0.00 0.00106896 3.77422197 Remove_liquidity 20578262 2024-08-21 16:43:11 93 days ago 1724258591 IN 0 ETH$0.00 0.00040928 3.30427919 Remove_liquidity 20578244 2024-08-21 16:39:35 93 days ago 1724258375 IN 0 ETH$0.00 0.00044256 3.57329341 Remove_liquidity 20578201 2024-08-21 16:30:35 93 days ago 1724257835 IN 0 ETH$0.00 0.00052859 3.01851149 Remove_liquidity 20578003 2024-08-21 15:50:47 93 days ago 1724255447 IN 0 ETH$0.00 0.00066267 5.34993735 Exchange 20567745 2024-08-20 5:27:23 94 days ago 1724131643 IN 0 ETH$0.00 0.00041299 1.13485239 Remove_liquidity 20550102 2024-08-17 18:22:35 97 days ago 1723918955 IN 0 ETH$0.00 0.00020539 1.3 Exchange 20523842 2024-08-14 2:19:47 100 days ago 1723601987 IN 0 ETH$0.00 0.00038879 1.08268111 Remove_liquidity 20508337 2024-08-11 22:24:47 103 days ago 1723415087 IN 0 ETH$0.00 0.00010079 0.81383275 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To 21245687 2024-11-22 20:34:35 2 hrs ago 1732307675 0.00845024 ETH$28.06 21245687 2024-11-22 20:34:35 2 hrs ago 1732307675 0.00845024 ETH$28.06 21245410 2024-11-22 19:38:59 3 hrs ago 1732304339 3.90326938 ETH$12,959.07 21245410 2024-11-22 19:38:59 3 hrs ago 1732304339 3.90326938 ETH$12,959.07 21244985 2024-11-22 18:13:59 5 hrs ago 1732299239 2.3928 ETH$7,944.23 21244985 2024-11-22 18:13:59 5 hrs ago 1732299239 2.3928 ETH$7,944.23 21244919 2024-11-22 18:00:47 5 hrs ago 1732298447 0.77766 ETH$2,581.87 21244919 2024-11-22 18:00:47 5 hrs ago 1732298447 0.77766 ETH$2,581.87 21244833 2024-11-22 17:43:35 5 hrs ago 1732297415 0.8973 ETH$2,979.09 21244833 2024-11-22 17:43:35 5 hrs ago 1732297415 0.8973 ETH$2,979.09 21244781 2024-11-22 17:32:35 5 hrs ago 1732296755 0.97882648 ETH$3,249.76 21244781 2024-11-22 17:32:35 5 hrs ago 1732296755 0.97882648 ETH$3,249.76 21244685 2024-11-22 17:12:59 6 hrs ago 1732295579 2.48713104 ETH$8,257.41 21244685 2024-11-22 17:12:59 6 hrs ago 1732295579 2.48713104 ETH$8,257.41 21244566 2024-11-22 16:48:59 6 hrs ago 1732294139 3.2 ETH$10,624.17 21244566 2024-11-22 16:48:59 6 hrs ago 1732294139 3.2 ETH$10,624.17 21244555 2024-11-22 16:46:47 6 hrs ago 1732294007 6 ETH$19,920.33 21244555 2024-11-22 16:46:47 6 hrs ago 1732294007 6 ETH$19,920.33 21244123 2024-11-22 15:19:23 8 hrs ago 1732288763 0.01455464 ETH$48.32 21244123 2024-11-22 15:19:23 8 hrs ago 1732288763 0.01455464 ETH$48.32 21243540 2024-11-22 13:22:11 9 hrs ago 1732281731 0.3763675 ETH$1,249.56 21243540 2024-11-22 13:22:11 9 hrs ago 1732281731 0.3763675 ETH$1,249.56 21243472 2024-11-22 13:08:35 10 hrs ago 1732280915 1.7946 ETH$5,958.17 21243472 2024-11-22 13:08:35 10 hrs ago 1732280915 1.7946 ETH$5,958.17 21243433 2024-11-22 13:00:47 10 hrs ago 1732280447 4.31620497 ETH$14,330.04 Loading...LoadingContract Source Code Verified (Exact Match)
Contract Name:Vyper_contract
Compiler Versionvyper:0.2.12
Contract Source Code (Vyper language format)
# @version 0.2.12 # (c) Curve.Fi, 2021 # Pool for USDT/BTC/ETH or similar interface ERC20: # Custom ERC20 which works for USDT, WETH and WBTC def transfer(_to: address, _amount: uint256): nonpayable def transferFrom(_from: address, _to: address, _amount: uint256): nonpayable def balanceOf(_user: address) -> uint256: view interface CurveToken: def totalSupply() -> uint256: view def mint(_to: address, _value: uint256) -> bool: nonpayable def mint_relative(_to: address, frac: uint256) -> uint256: nonpayable def burnFrom(_to: address, _value: uint256) -> bool: nonpayable interface Math: def geometric_mean(unsorted_x: uint256[N_COINS]) -> uint256: view def reduction_coefficient(x: uint256[N_COINS], fee_gamma: uint256) -> uint256: view def newton_D(ANN: uint256, gamma: uint256, x_unsorted: uint256[N_COINS]) -> uint256: view def newton_y(ANN: uint256, gamma: uint256, x: uint256[N_COINS], D: uint256, i: uint256) -> uint256: view def halfpow(power: uint256, precision: uint256) -> uint256: view def sqrt_int(x: uint256) -> uint256: view interface Views: def get_dy(i: uint256, j: uint256, dx: uint256) -> uint256: view def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: view interface WETH: def deposit(): payable def withdraw(_amount: uint256): nonpayable # Events event TokenExchange: buyer: indexed(address) sold_id: uint256 tokens_sold: uint256 bought_id: uint256 tokens_bought: uint256 event AddLiquidity: provider: indexed(address) token_amounts: uint256[N_COINS] fee: uint256 token_supply: uint256 event RemoveLiquidity: provider: indexed(address) token_amounts: uint256[N_COINS] token_supply: uint256 event RemoveLiquidityOne: provider: indexed(address) token_amount: uint256 coin_index: uint256 coin_amount: uint256 event CommitNewAdmin: deadline: indexed(uint256) admin: indexed(address) event NewAdmin: admin: indexed(address) event CommitNewParameters: deadline: indexed(uint256) admin_fee: uint256 mid_fee: uint256 out_fee: uint256 fee_gamma: uint256 allowed_extra_profit: uint256 adjustment_step: uint256 ma_half_time: uint256 event NewParameters: admin_fee: uint256 mid_fee: uint256 out_fee: uint256 fee_gamma: uint256 allowed_extra_profit: uint256 adjustment_step: uint256 ma_half_time: uint256 event RampAgamma: initial_A: uint256 future_A: uint256 initial_gamma: uint256 future_gamma: uint256 initial_time: uint256 future_time: uint256 event StopRampA: current_A: uint256 current_gamma: uint256 time: uint256 event ClaimAdminFee: admin: indexed(address) tokens: uint256 N_COINS: constant(int128) = 3 # <- change PRECISION: constant(uint256) = 10 ** 18 # The precision to convert to A_MULTIPLIER: constant(uint256) = 10000 # These addresses are replaced by the deployer math: constant(address) = 0x8F68f4810CcE3194B6cB6F3d50fa58c2c9bDD1d5 token: constant(address) = 0xc4AD29ba4B3c580e6D59105FFf484999997675Ff views: constant(address) = 0x40745803C2faA8E8402E2Ae935933D07cA8f355c coins: constant(address[N_COINS]) = [ 0xdAC17F958D2ee523a2206206994597C13D831ec7, 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, ] price_scale_packed: uint256 # Internal price scale price_oracle_packed: uint256 # Price target given by MA last_prices_packed: uint256 last_prices_timestamp: public(uint256) initial_A_gamma: public(uint256) future_A_gamma: public(uint256) initial_A_gamma_time: public(uint256) future_A_gamma_time: public(uint256) allowed_extra_profit: public(uint256) # 2 * 10**12 - recommended value future_allowed_extra_profit: public(uint256) fee_gamma: public(uint256) future_fee_gamma: public(uint256) adjustment_step: public(uint256) future_adjustment_step: public(uint256) ma_half_time: public(uint256) future_ma_half_time: public(uint256) mid_fee: public(uint256) out_fee: public(uint256) admin_fee: public(uint256) future_mid_fee: public(uint256) future_out_fee: public(uint256) future_admin_fee: public(uint256) balances: public(uint256[N_COINS]) D: public(uint256) owner: public(address) future_owner: public(address) xcp_profit: public(uint256) xcp_profit_a: public(uint256) # Full profit at last claim of admin fees virtual_price: public(uint256) # Cached (fast to read) virtual price also used internally not_adjusted: bool is_killed: public(bool) kill_deadline: public(uint256) transfer_ownership_deadline: public(uint256) admin_actions_deadline: public(uint256) admin_fee_receiver: public(address) KILL_DEADLINE_DT: constant(uint256) = 2 * 30 * 86400 ADMIN_ACTIONS_DELAY: constant(uint256) = 3 * 86400 MIN_RAMP_TIME: constant(uint256) = 86400 MAX_ADMIN_FEE: constant(uint256) = 10 * 10 ** 9 MIN_FEE: constant(uint256) = 5 * 10 ** 5 # 0.5 bps MAX_FEE: constant(uint256) = 10 * 10 ** 9 MAX_A: constant(uint256) = 10000 * A_MULTIPLIER * N_COINS**N_COINS MAX_A_CHANGE: constant(uint256) = 10 MIN_GAMMA: constant(uint256) = 10**10 MAX_GAMMA: constant(uint256) = 10**16 NOISE_FEE: constant(uint256) = 10**5 # 0.1 bps PRICE_SIZE: constant(int128) = 256 / (N_COINS-1) PRICE_MASK: constant(uint256) = 2**PRICE_SIZE - 1 # This must be changed for different N_COINS # For example: # N_COINS = 3 -> 1 (10**18 -> 10**18) # N_COINS = 4 -> 10**8 (10**18 -> 10**10) # PRICE_PRECISION_MUL: constant(uint256) = 1 PRECISIONS: constant(uint256[N_COINS]) = [ 1000000000000, 10000000000, 1, ] INF_COINS: constant(uint256) = 15 @external def __init__( owner: address, admin_fee_receiver: address, A: uint256, gamma: uint256, mid_fee: uint256, out_fee: uint256, allowed_extra_profit: uint256, fee_gamma: uint256, adjustment_step: uint256, admin_fee: uint256, ma_half_time: uint256, initial_prices: uint256[N_COINS-1] ): self.owner = owner # Pack A and gamma: # shifted A + gamma A_gamma: uint256 = shift(A, 128) A_gamma = bitwise_or(A_gamma, gamma) self.initial_A_gamma = A_gamma self.future_A_gamma = A_gamma self.mid_fee = mid_fee self.out_fee = out_fee self.allowed_extra_profit = allowed_extra_profit self.fee_gamma = fee_gamma self.adjustment_step = adjustment_step self.admin_fee = admin_fee # Packing prices packed_prices: uint256 = 0 for k in range(N_COINS-1): packed_prices = shift(packed_prices, PRICE_SIZE) p: uint256 = initial_prices[N_COINS-2 - k] # / PRICE_PRECISION_MUL assert p < PRICE_MASK packed_prices = bitwise_or(p, packed_prices) self.price_scale_packed = packed_prices self.price_oracle_packed = packed_prices self.last_prices_packed = packed_prices self.last_prices_timestamp = block.timestamp self.ma_half_time = ma_half_time self.xcp_profit_a = 10**18 self.kill_deadline = block.timestamp + KILL_DEADLINE_DT self.admin_fee_receiver = admin_fee_receiver @payable @external def __default__(): pass @internal @view def _packed_view(k: uint256, p: uint256) -> uint256: assert k < N_COINS-1 return bitwise_and( shift(p, -PRICE_SIZE * convert(k, int256)), PRICE_MASK ) # * PRICE_PRECISION_MUL @external @view def price_oracle(k: uint256) -> uint256: return self._packed_view(k, self.price_oracle_packed) @external @view def price_scale(k: uint256) -> uint256: return self._packed_view(k, self.price_scale_packed) @external @view def last_prices(k: uint256) -> uint256: return self._packed_view(k, self.last_prices_packed) @external @view def token() -> address: return token @external @view def coins(i: uint256) -> address: _coins: address[N_COINS] = coins return _coins[i] @internal @view def xp() -> uint256[N_COINS]: result: uint256[N_COINS] = self.balances packed_prices: uint256 = self.price_scale_packed precisions: uint256[N_COINS] = PRECISIONS result[0] *= PRECISIONS[0] for i in range(1, N_COINS): p: uint256 = bitwise_and(packed_prices, PRICE_MASK) * precisions[i] # * PRICE_PRECISION_MUL result[i] = result[i] * p / PRECISION packed_prices = shift(packed_prices, -PRICE_SIZE) return result @view @internal def _A_gamma() -> uint256[2]: t1: uint256 = self.future_A_gamma_time A_gamma_1: uint256 = self.future_A_gamma gamma1: uint256 = bitwise_and(A_gamma_1, 2**128-1) A1: uint256 = shift(A_gamma_1, -128) if block.timestamp < t1: # handle ramping up and down of A A_gamma_0: uint256 = self.initial_A_gamma t0: uint256 = self.initial_A_gamma_time # Less readable but more compact way of writing and converting to uint256 # gamma0: uint256 = bitwise_and(A_gamma_0, 2**128-1) # A0: uint256 = shift(A_gamma_0, -128) # A1 = A0 + (A1 - A0) * (block.timestamp - t0) / (t1 - t0) # gamma1 = gamma0 + (gamma1 - gamma0) * (block.timestamp - t0) / (t1 - t0) t1 -= t0 t0 = block.timestamp - t0 t2: uint256 = t1 - t0 A1 = (shift(A_gamma_0, -128) * t2 + A1 * t0) / t1 gamma1 = (bitwise_and(A_gamma_0, 2**128-1) * t2 + gamma1 * t0) / t1 return [A1, gamma1] @view @external def A() -> uint256: return self._A_gamma()[0] @view @external def gamma() -> uint256: return self._A_gamma()[1] @internal @view def _fee(xp: uint256[N_COINS]) -> uint256: f: uint256 = Math(math).reduction_coefficient(xp, self.fee_gamma) return (self.mid_fee * f + self.out_fee * (10**18 - f)) / 10**18 @external @view def fee() -> uint256: return self._fee(self.xp()) @external @view def fee_calc(xp: uint256[N_COINS]) -> uint256: return self._fee(xp) @internal @view def get_xcp(D: uint256) -> uint256: x: uint256[N_COINS] = empty(uint256[N_COINS]) x[0] = D / N_COINS packed_prices: uint256 = self.price_scale_packed # No precisions here because we don't switch to "real" units for i in range(1, N_COINS): x[i] = D * 10**18 / (N_COINS * bitwise_and(packed_prices, PRICE_MASK)) # ... * PRICE_PRECISION_MUL) packed_prices = shift(packed_prices, -PRICE_SIZE) return Math(math).geometric_mean(x) @external @view def get_virtual_price() -> uint256: return 10**18 * self.get_xcp(self.D) / CurveToken(token).totalSupply() @internal def _claim_admin_fees(): A_gamma: uint256[2] = self._A_gamma() xcp_profit: uint256 = self.xcp_profit xcp_profit_a: uint256 = self.xcp_profit_a # Gulp here _coins: address[N_COINS] = coins for i in range(N_COINS): self.balances[i] = ERC20(_coins[i]).balanceOf(self) vprice: uint256 = self.virtual_price if xcp_profit > xcp_profit_a: fees: uint256 = (xcp_profit - xcp_profit_a) * self.admin_fee / (2 * 10**10) if fees > 0: receiver: address = self.admin_fee_receiver frac: uint256 = vprice * 10**18 / (vprice - fees) - 10**18 claimed: uint256 = CurveToken(token).mint_relative(receiver, frac) xcp_profit -= fees*2 self.xcp_profit = xcp_profit log ClaimAdminFee(receiver, claimed) total_supply: uint256 = CurveToken(token).totalSupply() # Recalculate D b/c we gulped D: uint256 = Math(math).newton_D(A_gamma[0], A_gamma[1], self.xp()) self.D = D self.virtual_price = 10**18 * self.get_xcp(D) / total_supply if xcp_profit > xcp_profit_a: self.xcp_profit_a = xcp_profit @internal def tweak_price(A_gamma: uint256[2], _xp: uint256[N_COINS], i: uint256, p_i: uint256, new_D: uint256): price_oracle: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) last_prices: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) price_scale: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) xp: uint256[N_COINS] = empty(uint256[N_COINS]) p_new: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) # Update MA if needed packed_prices: uint256 = self.price_oracle_packed for k in range(N_COINS-1): price_oracle[k] = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL packed_prices = shift(packed_prices, -PRICE_SIZE) last_prices_timestamp: uint256 = self.last_prices_timestamp packed_prices = self.last_prices_packed for k in range(N_COINS-1): last_prices[k] = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL packed_prices = shift(packed_prices, -PRICE_SIZE) if last_prices_timestamp < block.timestamp: # MA update required ma_half_time: uint256 = self.ma_half_time alpha: uint256 = Math(math).halfpow((block.timestamp - last_prices_timestamp) * 10**18 / ma_half_time, 10**10) packed_prices = 0 for k in range(N_COINS-1): price_oracle[k] = (last_prices[k] * (10**18 - alpha) + price_oracle[k] * alpha) / 10**18 for k in range(N_COINS-1): packed_prices = shift(packed_prices, PRICE_SIZE) p: uint256 = price_oracle[N_COINS-2 - k] # / PRICE_PRECISION_MUL assert p < PRICE_MASK packed_prices = bitwise_or(p, packed_prices) self.price_oracle_packed = packed_prices self.last_prices_timestamp = block.timestamp D_unadjusted: uint256 = new_D # Withdrawal methods know new D already if new_D == 0: # We will need this a few times (35k gas) D_unadjusted = Math(math).newton_D(A_gamma[0], A_gamma[1], _xp) packed_prices = self.price_scale_packed for k in range(N_COINS-1): price_scale[k] = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL packed_prices = shift(packed_prices, -PRICE_SIZE) if p_i > 0: # Save the last price if i > 0: last_prices[i-1] = p_i else: # If 0th price changed - change all prices instead for k in range(N_COINS-1): last_prices[k] = last_prices[k] * 10**18 / p_i else: # calculate real prices # it would cost 70k gas for a 3-token pool. Sad. How do we do better? __xp: uint256[N_COINS] = _xp dx_price: uint256 = __xp[0] / 10**6 __xp[0] += dx_price for k in range(N_COINS-1): last_prices[k] = price_scale[k] * dx_price / (_xp[k+1] - Math(math).newton_y(A_gamma[0], A_gamma[1], __xp, D_unadjusted, k+1)) packed_prices = 0 for k in range(N_COINS-1): packed_prices = shift(packed_prices, PRICE_SIZE) p: uint256 = last_prices[N_COINS-2 - k] # / PRICE_PRECISION_MUL assert p < PRICE_MASK packed_prices = bitwise_or(p, packed_prices) self.last_prices_packed = packed_prices total_supply: uint256 = CurveToken(token).totalSupply() old_xcp_profit: uint256 = self.xcp_profit old_virtual_price: uint256 = self.virtual_price # Update profit numbers without price adjustment first xp[0] = D_unadjusted / N_COINS for k in range(N_COINS-1): xp[k+1] = D_unadjusted * 10**18 / (N_COINS * price_scale[k]) xcp_profit: uint256 = 10**18 virtual_price: uint256 = 10**18 if old_virtual_price > 0: xcp: uint256 = Math(math).geometric_mean(xp) virtual_price = 10**18 * xcp / total_supply xcp_profit = old_xcp_profit * virtual_price / old_virtual_price t: uint256 = self.future_A_gamma_time if virtual_price < old_virtual_price and t == 0: raise "Loss" if t == 1: self.future_A_gamma_time = 0 self.xcp_profit = xcp_profit needs_adjustment: bool = self.not_adjusted # if not needs_adjustment and (virtual_price-10**18 > (xcp_profit-10**18)/2 + self.allowed_extra_profit): # (re-arrange for gas efficiency) if not needs_adjustment and (virtual_price * 2 - 10**18 > xcp_profit + 2*self.allowed_extra_profit): needs_adjustment = True self.not_adjusted = True if needs_adjustment: adjustment_step: uint256 = self.adjustment_step norm: uint256 = 0 for k in range(N_COINS-1): ratio: uint256 = price_oracle[k] * 10**18 / price_scale[k] if ratio > 10**18: ratio -= 10**18 else: ratio = 10**18 - ratio norm += ratio**2 if norm > adjustment_step ** 2 and old_virtual_price > 0: norm = Math(math).sqrt_int(norm / 10**18) # Need to convert to 1e18 units! for k in range(N_COINS-1): p_new[k] = (price_scale[k] * (norm - adjustment_step) + adjustment_step * price_oracle[k]) / norm # Calculate balances*prices xp = _xp for k in range(N_COINS-1): xp[k+1] = _xp[k+1] * p_new[k] / price_scale[k] # Calculate "extended constant product" invariant xCP and virtual price D: uint256 = Math(math).newton_D(A_gamma[0], A_gamma[1], xp) xp[0] = D / N_COINS for k in range(N_COINS-1): xp[k+1] = D * 10**18 / (N_COINS * p_new[k]) # We reuse old_virtual_price here but it's not old anymore old_virtual_price = 10**18 * Math(math).geometric_mean(xp) / total_supply # Proceed if we've got enough profit # if (old_virtual_price > 10**18) and (2 * (old_virtual_price - 10**18) > xcp_profit - 10**18): if (old_virtual_price > 10**18) and (2 * old_virtual_price - 10**18 > xcp_profit): packed_prices = 0 for k in range(N_COINS-1): packed_prices = shift(packed_prices, PRICE_SIZE) p: uint256 = p_new[N_COINS-2 - k] # / PRICE_PRECISION_MUL assert p < PRICE_MASK packed_prices = bitwise_or(p, packed_prices) self.price_scale_packed = packed_prices self.D = D self.virtual_price = old_virtual_price return else: self.not_adjusted = False # If we are here, the price_scale adjustment did not happen # Still need to update the profit counter and D self.D = D_unadjusted self.virtual_price = virtual_price @payable @external @nonreentrant('lock') def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool = False): assert not self.is_killed # dev: the pool is killed assert i != j # dev: coin index out of range assert i < N_COINS # dev: coin index out of range assert j < N_COINS # dev: coin index out of range assert dx > 0 # dev: do not exchange 0 coins A_gamma: uint256[2] = self._A_gamma() xp: uint256[N_COINS] = self.balances ix: uint256 = j p: uint256 = 0 dy: uint256 = 0 if True: # scope to reduce size of memory when making internal calls later _coins: address[N_COINS] = coins if i == 2 and use_eth: assert msg.value == dx # dev: incorrect eth amount WETH(coins[2]).deposit(value=msg.value) else: assert msg.value == 0 # dev: nonzero eth amount # assert might be needed for some tokens - removed one to save bytespace ERC20(_coins[i]).transferFrom(msg.sender, self, dx) y: uint256 = xp[j] x0: uint256 = xp[i] xp[i] = x0 + dx self.balances[i] = xp[i] price_scale: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) packed_prices: uint256 = self.price_scale_packed for k in range(N_COINS-1): price_scale[k] = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL packed_prices = shift(packed_prices, -PRICE_SIZE) precisions: uint256[N_COINS] = PRECISIONS xp[0] *= PRECISIONS[0] for k in range(1, N_COINS): xp[k] = xp[k] * price_scale[k-1] * precisions[k] / PRECISION prec_i: uint256 = precisions[i] # In case ramp is happening if True: t: uint256 = self.future_A_gamma_time if t > 0: x0 *= prec_i if i > 0: x0 = x0 * price_scale[i-1] / PRECISION x1: uint256 = xp[i] # Back up old value in xp xp[i] = x0 self.D = Math(math).newton_D(A_gamma[0], A_gamma[1], xp) xp[i] = x1 # And restore if block.timestamp >= t: self.future_A_gamma_time = 1 prec_j: uint256 = precisions[j] dy = xp[j] - Math(math).newton_y(A_gamma[0], A_gamma[1], xp, self.D, j) # Not defining new "y" here to have less variables / make subsequent calls cheaper xp[j] -= dy dy -= 1 if j > 0: dy = dy * PRECISION / price_scale[j-1] dy /= prec_j dy -= self._fee(xp) * dy / 10**10 assert dy >= min_dy, "Slippage" y -= dy self.balances[j] = y # assert might be needed for some tokens - removed one to save bytespace if j == 2 and use_eth: WETH(coins[2]).withdraw(dy) raw_call(msg.sender, b"", value=dy) else: ERC20(_coins[j]).transfer(msg.sender, dy) y *= prec_j if j > 0: y = y * price_scale[j-1] / PRECISION xp[j] = y # Calculate price if dx > 10**5 and dy > 10**5: _dx: uint256 = dx * prec_i _dy: uint256 = dy * prec_j if i != 0 and j != 0: p = bitwise_and( shift(self.last_prices_packed, -PRICE_SIZE * convert(i-1, int256)), PRICE_MASK ) * _dx / _dy # * PRICE_PRECISION_MUL elif i == 0: p = _dx * 10**18 / _dy else: # j == 0 p = _dy * 10**18 / _dx ix = i self.tweak_price(A_gamma, xp, ix, p, 0) log TokenExchange(msg.sender, i, dx, j, dy) @external @view def get_dy(i: uint256, j: uint256, dx: uint256) -> uint256: return Views(views).get_dy(i, j, dx) @view @internal def _calc_token_fee(amounts: uint256[N_COINS], xp: uint256[N_COINS]) -> uint256: # fee = sum(amounts_i - avg(amounts)) * fee' / sum(amounts) fee: uint256 = self._fee(xp) * N_COINS / (4 * (N_COINS-1)) S: uint256 = 0 for _x in amounts: S += _x avg: uint256 = S / N_COINS Sdiff: uint256 = 0 for _x in amounts: if _x > avg: Sdiff += _x - avg else: Sdiff += avg - _x return fee * Sdiff / S + NOISE_FEE @external @view def calc_token_fee(amounts: uint256[N_COINS], xp: uint256[N_COINS]) -> uint256: return self._calc_token_fee(amounts, xp) @external @nonreentrant('lock') def add_liquidity(amounts: uint256[N_COINS], min_mint_amount: uint256): assert not self.is_killed # dev: the pool is killed A_gamma: uint256[2] = self._A_gamma() _coins: address[N_COINS] = coins xp: uint256[N_COINS] = self.balances amountsp: uint256[N_COINS] = empty(uint256[N_COINS]) xx: uint256[N_COINS] = empty(uint256[N_COINS]) d_token: uint256 = 0 d_token_fee: uint256 = 0 old_D: uint256 = 0 ix: uint256 = INF_COINS if True: # Scope to avoid having extra variables in memory later xp_old: uint256[N_COINS] = xp for i in range(N_COINS): bal: uint256 = xp[i] + amounts[i] xp[i] = bal self.balances[i] = bal xx = xp precisions: uint256[N_COINS] = PRECISIONS packed_prices: uint256 = self.price_scale_packed xp[0] *= PRECISIONS[0] xp_old[0] *= PRECISIONS[0] for i in range(1, N_COINS): price_scale: uint256 = bitwise_and(packed_prices, PRICE_MASK) * precisions[i] # * PRICE_PRECISION_MUL xp[i] = xp[i] * price_scale / PRECISION xp_old[i] = xp_old[i] * price_scale / PRECISION packed_prices = shift(packed_prices, -PRICE_SIZE) for i in range(N_COINS): if amounts[i] > 0: # assert might be needed for some tokens - removed one to save bytespace ERC20(_coins[i]).transferFrom(msg.sender, self, amounts[i]) amountsp[i] = xp[i] - xp_old[i] if ix == INF_COINS: ix = i else: ix = INF_COINS-1 assert ix != INF_COINS # dev: no coins to add t: uint256 = self.future_A_gamma_time if t > 0: old_D = Math(math).newton_D(A_gamma[0], A_gamma[1], xp_old) if block.timestamp >= t: self.future_A_gamma_time = 1 else: old_D = self.D D: uint256 = Math(math).newton_D(A_gamma[0], A_gamma[1], xp) token_supply: uint256 = CurveToken(token).totalSupply() if old_D > 0: d_token = token_supply * D / old_D - token_supply else: d_token = self.get_xcp(D) # making initial virtual price equal to 1 assert d_token > 0 # dev: nothing minted if old_D > 0: d_token_fee = self._calc_token_fee(amountsp, xp) * d_token / 10**10 + 1 d_token -= d_token_fee token_supply += d_token CurveToken(token).mint(msg.sender, d_token) # Calculate price # p_i * (dx_i - dtoken / token_supply * xx_i) = sum{k!=i}(p_k * (dtoken / token_supply * xx_k - dx_k)) # Only ix is nonzero p: uint256 = 0 if d_token > 10**5: if ix < N_COINS: S: uint256 = 0 last_prices: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) packed_prices: uint256 = self.last_prices_packed precisions: uint256[N_COINS] = PRECISIONS for k in range(N_COINS-1): last_prices[k] = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL packed_prices = shift(packed_prices, -PRICE_SIZE) for i in range(N_COINS): if i != ix: if i == 0: S += xx[0] * PRECISIONS[0] else: S += xx[i] * last_prices[i-1] * precisions[i] / PRECISION S = S * d_token / token_supply p = S * PRECISION / (amounts[ix] * precisions[ix] - d_token * xx[ix] * precisions[ix] / token_supply) self.tweak_price(A_gamma, xp, ix, p, D) else: self.D = D self.virtual_price = 10**18 self.xcp_profit = 10**18 CurveToken(token).mint(msg.sender, d_token) assert d_token >= min_mint_amount, "Slippage" log AddLiquidity(msg.sender, amounts, d_token_fee, token_supply) @external @nonreentrant('lock') def remove_liquidity(_amount: uint256, min_amounts: uint256[N_COINS]): """ This withdrawal method is very safe, does no complex math """ _coins: address[N_COINS] = coins total_supply: uint256 = CurveToken(token).totalSupply() CurveToken(token).burnFrom(msg.sender, _amount) balances: uint256[N_COINS] = self.balances amount: uint256 = _amount - 1 # Make rounding errors favoring other LPs a tiny bit for i in range(N_COINS): d_balance: uint256 = balances[i] * amount / total_supply assert d_balance >= min_amounts[i] self.balances[i] = balances[i] - d_balance balances[i] = d_balance # now it's the amounts going out # assert might be needed for some tokens - removed one to save bytespace ERC20(_coins[i]).transfer(msg.sender, d_balance) D: uint256 = self.D self.D = D - D * amount / total_supply log RemoveLiquidity(msg.sender, balances, total_supply - _amount) @view @external def calc_token_amount(amounts: uint256[N_COINS], deposit: bool) -> uint256: return Views(views).calc_token_amount(amounts, deposit) @internal @view def _calc_withdraw_one_coin(A_gamma: uint256[2], token_amount: uint256, i: uint256, update_D: bool, calc_price: bool) -> (uint256, uint256, uint256, uint256[N_COINS]): token_supply: uint256 = CurveToken(token).totalSupply() assert token_amount <= token_supply # dev: token amount more than supply assert i < N_COINS # dev: coin out of range xx: uint256[N_COINS] = self.balances xp: uint256[N_COINS] = PRECISIONS D0: uint256 = 0 price_scale_i: uint256 = PRECISION * PRECISIONS[0] if True: # To remove packed_prices from memory packed_prices: uint256 = self.price_scale_packed xp[0] *= xx[0] for k in range(1, N_COINS): p: uint256 = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL if i == k: price_scale_i = p * xp[i] xp[k] = xp[k] * xx[k] * p / PRECISION packed_prices = shift(packed_prices, -PRICE_SIZE) if update_D: D0 = Math(math).newton_D(A_gamma[0], A_gamma[1], xp) else: D0 = self.D D: uint256 = D0 # Charge the fee on D, not on y, e.g. reducing invariant LESS than charging the user fee: uint256 = self._fee(xp) dD: uint256 = token_amount * D / token_supply D -= (dD - (fee * dD / (2 * 10**10) + 1)) y: uint256 = Math(math).newton_y(A_gamma[0], A_gamma[1], xp, D, i) dy: uint256 = (xp[i] - y) * PRECISION / price_scale_i xp[i] = y # Price calc p: uint256 = 0 if calc_price and dy > 10**5 and token_amount > 10**5: # p_i = dD / D0 * sum'(p_k * x_k) / (dy - dD / D0 * y0) S: uint256 = 0 precisions: uint256[N_COINS] = PRECISIONS last_prices: uint256[N_COINS-1] = empty(uint256[N_COINS-1]) packed_prices: uint256 = self.last_prices_packed for k in range(N_COINS-1): last_prices[k] = bitwise_and(packed_prices, PRICE_MASK) # * PRICE_PRECISION_MUL packed_prices = shift(packed_prices, -PRICE_SIZE) for k in range(N_COINS): if k != i: if k == 0: S += xx[0] * PRECISIONS[0] else: S += xx[k] * last_prices[k-1] * precisions[k] / PRECISION S = S * dD / D0 p = S * PRECISION / (dy * precisions[i] - dD * xx[i] * precisions[i] / D0) return dy, p, D, xp @view @external def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: return self._calc_withdraw_one_coin(self._A_gamma(), token_amount, i, True, False)[0] @external @nonreentrant('lock') def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): assert not self.is_killed # dev: the pool is killed A_gamma: uint256[2] = self._A_gamma() dy: uint256 = 0 D: uint256 = 0 p: uint256 = 0 xp: uint256[N_COINS] = empty(uint256[N_COINS]) future_A_gamma_time: uint256 = self.future_A_gamma_time dy, p, D, xp = self._calc_withdraw_one_coin(A_gamma, token_amount, i, (future_A_gamma_time > 0), True) assert dy >= min_amount, "Slippage" if block.timestamp >= future_A_gamma_time: self.future_A_gamma_time = 1 self.balances[i] -= dy CurveToken(token).burnFrom(msg.sender, token_amount) self.tweak_price(A_gamma, xp, i, p, D) _coins: address[N_COINS] = coins # assert might be needed for some tokens - removed one to save bytespace ERC20(_coins[i]).transfer(msg.sender, dy) log RemoveLiquidityOne(msg.sender, token_amount, i, dy) @external @nonreentrant('lock') def claim_admin_fees(): self._claim_admin_fees() # Admin parameters @external def ramp_A_gamma(future_A: uint256, future_gamma: uint256, future_time: uint256): assert msg.sender == self.owner # dev: only owner assert block.timestamp > self.initial_A_gamma_time + (MIN_RAMP_TIME-1) assert future_time > block.timestamp + (MIN_RAMP_TIME-1) # dev: insufficient time A_gamma: uint256[2] = self._A_gamma() initial_A_gamma: uint256 = shift(A_gamma[0], 128) initial_A_gamma = bitwise_or(initial_A_gamma, A_gamma[1]) assert future_A > 0 assert future_A < MAX_A+1 assert future_gamma > MIN_GAMMA-1 assert future_gamma < MAX_GAMMA+1 ratio: uint256 = 10**18 * future_A / A_gamma[0] assert ratio < 10**18 * MAX_A_CHANGE + 1 assert ratio > 10**18 / MAX_A_CHANGE - 1 ratio = 10**18 * future_gamma / A_gamma[1] assert ratio < 10**18 * MAX_A_CHANGE + 1 assert ratio > 10**18 / MAX_A_CHANGE - 1 self.initial_A_gamma = initial_A_gamma self.initial_A_gamma_time = block.timestamp future_A_gamma: uint256 = shift(future_A, 128) future_A_gamma = bitwise_or(future_A_gamma, future_gamma) self.future_A_gamma_time = future_time self.future_A_gamma = future_A_gamma log RampAgamma(A_gamma[0], future_A, A_gamma[1], future_gamma, block.timestamp, future_time) @external def stop_ramp_A_gamma(): assert msg.sender == self.owner # dev: only owner A_gamma: uint256[2] = self._A_gamma() current_A_gamma: uint256 = shift(A_gamma[0], 128) current_A_gamma = bitwise_or(current_A_gamma, A_gamma[1]) self.initial_A_gamma = current_A_gamma self.future_A_gamma = current_A_gamma self.initial_A_gamma_time = block.timestamp self.future_A_gamma_time = block.timestamp # now (block.timestamp < t1) is always False, so we return saved A log StopRampA(A_gamma[0], A_gamma[1], block.timestamp) @external def commit_new_parameters( _new_mid_fee: uint256, _new_out_fee: uint256, _new_admin_fee: uint256, _new_fee_gamma: uint256, _new_allowed_extra_profit: uint256, _new_adjustment_step: uint256, _new_ma_half_time: uint256, ): assert msg.sender == self.owner # dev: only owner assert self.admin_actions_deadline == 0 # dev: active action new_mid_fee: uint256 = _new_mid_fee new_out_fee: uint256 = _new_out_fee new_admin_fee: uint256 = _new_admin_fee new_fee_gamma: uint256 = _new_fee_gamma new_allowed_extra_profit: uint256 = _new_allowed_extra_profit new_adjustment_step: uint256 = _new_adjustment_step new_ma_half_time: uint256 = _new_ma_half_time # Fees if new_out_fee < MAX_FEE+1: assert new_out_fee > MIN_FEE-1 # dev: fee is out of range else: new_out_fee = self.out_fee if new_mid_fee > MAX_FEE: new_mid_fee = self.mid_fee assert new_mid_fee <= new_out_fee # dev: mid-fee is too high if new_admin_fee > MAX_ADMIN_FEE: new_admin_fee = self.admin_fee # AMM parameters if new_fee_gamma < 10**18: assert new_fee_gamma > 0 # dev: fee_gamma out of range [1 .. 10**18] else: new_fee_gamma = self.fee_gamma if new_allowed_extra_profit > 10**18: new_allowed_extra_profit = self.allowed_extra_profit if new_adjustment_step > 10**18: new_adjustment_step = self.adjustment_step # MA if new_ma_half_time < 7*86400: assert new_ma_half_time > 0 # dev: MA time should be longer than 1 second else: new_ma_half_time = self.ma_half_time _deadline: uint256 = block.timestamp + ADMIN_ACTIONS_DELAY self.admin_actions_deadline = _deadline self.future_admin_fee = new_admin_fee self.future_mid_fee = new_mid_fee self.future_out_fee = new_out_fee self.future_fee_gamma = new_fee_gamma self.future_allowed_extra_profit = new_allowed_extra_profit self.future_adjustment_step = new_adjustment_step self.future_ma_half_time = new_ma_half_time log CommitNewParameters(_deadline, new_admin_fee, new_mid_fee, new_out_fee, new_fee_gamma, new_allowed_extra_profit, new_adjustment_step, new_ma_half_time) @external @nonreentrant('lock') def apply_new_parameters(): assert msg.sender == self.owner # dev: only owner assert block.timestamp >= self.admin_actions_deadline # dev: insufficient time assert self.admin_actions_deadline != 0 # dev: no active action self.admin_actions_deadline = 0 admin_fee: uint256 = self.future_admin_fee if self.admin_fee != admin_fee: self._claim_admin_fees() self.admin_fee = admin_fee mid_fee: uint256 = self.future_mid_fee self.mid_fee = mid_fee out_fee: uint256 = self.future_out_fee self.out_fee = out_fee fee_gamma: uint256 = self.future_fee_gamma self.fee_gamma = fee_gamma allowed_extra_profit: uint256 = self.future_allowed_extra_profit self.allowed_extra_profit = allowed_extra_profit adjustment_step: uint256 = self.future_adjustment_step self.adjustment_step = adjustment_step ma_half_time: uint256 = self.future_ma_half_time self.ma_half_time = ma_half_time log NewParameters(admin_fee, mid_fee, out_fee, fee_gamma, allowed_extra_profit, adjustment_step, ma_half_time) @external def revert_new_parameters(): assert msg.sender == self.owner # dev: only owner self.admin_actions_deadline = 0 @external def commit_transfer_ownership(_owner: address): assert msg.sender == self.owner # dev: only owner assert self.transfer_ownership_deadline == 0 # dev: active transfer _deadline: uint256 = block.timestamp + ADMIN_ACTIONS_DELAY self.transfer_ownership_deadline = _deadline self.future_owner = _owner log CommitNewAdmin(_deadline, _owner) @external def apply_transfer_ownership(): assert msg.sender == self.owner # dev: only owner assert block.timestamp >= self.transfer_ownership_deadline # dev: insufficient time assert self.transfer_ownership_deadline != 0 # dev: no active transfer self.transfer_ownership_deadline = 0 _owner: address = self.future_owner self.owner = _owner log NewAdmin(_owner) @external def revert_transfer_ownership(): assert msg.sender == self.owner # dev: only owner self.transfer_ownership_deadline = 0 @external def kill_me(): assert msg.sender == self.owner # dev: only owner assert self.kill_deadline > block.timestamp # dev: deadline has passed self.is_killed = True @external def unkill_me(): assert msg.sender == self.owner # dev: only owner self.is_killed = False @external def set_admin_fee_receiver(_admin_fee_receiver: address): assert msg.sender == self.owner # dev: only owner self.admin_fee_receiver = _admin_fee_receiver
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"name":"TokenExchange","inputs":[{"name":"buyer","type":"address","indexed":true},{"name":"sold_id","type":"uint256","indexed":false},{"name":"tokens_sold","type":"uint256","indexed":false},{"name":"bought_id","type":"uint256","indexed":false},{"name":"tokens_bought","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddLiquidity","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amounts","type":"uint256[3]","indexed":false},{"name":"fee","type":"uint256","indexed":false},{"name":"token_supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidity","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amounts","type":"uint256[3]","indexed":false},{"name":"token_supply","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RemoveLiquidityOne","inputs":[{"name":"provider","type":"address","indexed":true},{"name":"token_amount","type":"uint256","indexed":false},{"name":"coin_index","type":"uint256","indexed":false},{"name":"coin_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"CommitNewAdmin","inputs":[{"name":"deadline","type":"uint256","indexed":true},{"name":"admin","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"NewAdmin","inputs":[{"name":"admin","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"CommitNewParameters","inputs":[{"name":"deadline","type":"uint256","indexed":true},{"name":"admin_fee","type":"uint256","indexed":false},{"name":"mid_fee","type":"uint256","indexed":false},{"name":"out_fee","type":"uint256","indexed":false},{"name":"fee_gamma","type":"uint256","indexed":false},{"name":"allowed_extra_profit","type":"uint256","indexed":false},{"name":"adjustment_step","type":"uint256","indexed":false},{"name":"ma_half_time","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewParameters","inputs":[{"name":"admin_fee","type":"uint256","indexed":false},{"name":"mid_fee","type":"uint256","indexed":false},{"name":"out_fee","type":"uint256","indexed":false},{"name":"fee_gamma","type":"uint256","indexed":false},{"name":"allowed_extra_profit","type":"uint256","indexed":false},{"name":"adjustment_step","type":"uint256","indexed":false},{"name":"ma_half_time","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"RampAgamma","inputs":[{"name":"initial_A","type":"uint256","indexed":false},{"name":"future_A","type":"uint256","indexed":false},{"name":"initial_gamma","type":"uint256","indexed":false},{"name":"future_gamma","type":"uint256","indexed":false},{"name":"initial_time","type":"uint256","indexed":false},{"name":"future_time","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"StopRampA","inputs":[{"name":"current_A","type":"uint256","indexed":false},{"name":"current_gamma","type":"uint256","indexed":false},{"name":"time","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"ClaimAdminFee","inputs":[{"name":"admin","type":"address","indexed":true},{"name":"tokens","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"owner","type":"address"},{"name":"admin_fee_receiver","type":"address"},{"name":"A","type":"uint256"},{"name":"gamma","type":"uint256"},{"name":"mid_fee","type":"uint256"},{"name":"out_fee","type":"uint256"},{"name":"allowed_extra_profit","type":"uint256"},{"name":"fee_gamma","type":"uint256"},{"name":"adjustment_step","type":"uint256"},{"name":"admin_fee","type":"uint256"},{"name":"ma_half_time","type":"uint256"},{"name":"initial_prices","type":"uint256[2]"}],"outputs":[]},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"view","type":"function","name":"price_oracle","inputs":[{"name":"k","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3361},{"stateMutability":"view","type":"function","name":"price_scale","inputs":[{"name":"k","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3391},{"stateMutability":"view","type":"function","name":"last_prices","inputs":[{"name":"k","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3421},{"stateMutability":"view","type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":468},{"stateMutability":"view","type":"function","name":"coins","inputs":[{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"address"}],"gas":582},{"stateMutability":"view","type":"function","name":"A","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":597},{"stateMutability":"view","type":"function","name":"gamma","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":11991},{"stateMutability":"view","type":"function","name":"fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":21673},{"stateMutability":"view","type":"function","name":"fee_calc","inputs":[{"name":"xp","type":"uint256[3]"}],"outputs":[{"name":"","type":"uint256"}],"gas":11096},{"stateMutability":"view","type":"function","name":"get_virtual_price","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":11582},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dx","type":"uint256"},{"name":"min_dy","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dx","type":"uint256"},{"name":"min_dy","type":"uint256"},{"name":"use_eth","type":"bool"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dx","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":3122},{"stateMutability":"view","type":"function","name":"calc_token_fee","inputs":[{"name":"amounts","type":"uint256[3]"},{"name":"xp","type":"uint256[3]"}],"outputs":[{"name":"","type":"uint256"}],"gas":26582},{"stateMutability":"nonpayable","type":"function","name":"add_liquidity","inputs":[{"name":"amounts","type":"uint256[3]"},{"name":"min_mint_amount","type":"uint256"}],"outputs":[],"gas":738687},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity","inputs":[{"name":"_amount","type":"uint256"},{"name":"min_amounts","type":"uint256[3]"}],"outputs":[],"gas":233981},{"stateMutability":"view","type":"function","name":"calc_token_amount","inputs":[{"name":"amounts","type":"uint256[3]"},{"name":"deposit","type":"bool"}],"outputs":[{"name":"","type":"uint256"}],"gas":3429},{"stateMutability":"view","type":"function","name":"calc_withdraw_one_coin","inputs":[{"name":"token_amount","type":"uint256"},{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":13432},{"stateMutability":"nonpayable","type":"function","name":"remove_liquidity_one_coin","inputs":[{"name":"token_amount","type":"uint256"},{"name":"i","type":"uint256"},{"name":"min_amount","type":"uint256"}],"outputs":[],"gas":648579},{"stateMutability":"nonpayable","type":"function","name":"claim_admin_fees","inputs":[],"outputs":[],"gas":389808},{"stateMutability":"nonpayable","type":"function","name":"ramp_A_gamma","inputs":[{"name":"future_A","type":"uint256"},{"name":"future_gamma","type":"uint256"},{"name":"future_time","type":"uint256"}],"outputs":[],"gas":163102},{"stateMutability":"nonpayable","type":"function","name":"stop_ramp_A_gamma","inputs":[],"outputs":[],"gas":157247},{"stateMutability":"nonpayable","type":"function","name":"commit_new_parameters","inputs":[{"name":"_new_mid_fee","type":"uint256"},{"name":"_new_out_fee","type":"uint256"},{"name":"_new_admin_fee","type":"uint256"},{"name":"_new_fee_gamma","type":"uint256"},{"name":"_new_allowed_extra_profit","type":"uint256"},{"name":"_new_adjustment_step","type":"uint256"},{"name":"_new_ma_half_time","type":"uint256"}],"outputs":[],"gas":306190},{"stateMutability":"nonpayable","type":"function","name":"apply_new_parameters","inputs":[],"outputs":[],"gas":683438},{"stateMutability":"nonpayable","type":"function","name":"revert_new_parameters","inputs":[],"outputs":[],"gas":23222},{"stateMutability":"nonpayable","type":"function","name":"commit_transfer_ownership","inputs":[{"name":"_owner","type":"address"}],"outputs":[],"gas":77260},{"stateMutability":"nonpayable","type":"function","name":"apply_transfer_ownership","inputs":[],"outputs":[],"gas":65937},{"stateMutability":"nonpayable","type":"function","name":"revert_transfer_ownership","inputs":[],"outputs":[],"gas":23312},{"stateMutability":"nonpayable","type":"function","name":"kill_me","inputs":[],"outputs":[],"gas":40535},{"stateMutability":"nonpayable","type":"function","name":"unkill_me","inputs":[],"outputs":[],"gas":23372},{"stateMutability":"nonpayable","type":"function","name":"set_admin_fee_receiver","inputs":[{"name":"_admin_fee_receiver","type":"address"}],"outputs":[],"gas":38505},{"stateMutability":"view","type":"function","name":"last_prices_timestamp","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3378},{"stateMutability":"view","type":"function","name":"initial_A_gamma","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3408},{"stateMutability":"view","type":"function","name":"future_A_gamma","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3438},{"stateMutability":"view","type":"function","name":"initial_A_gamma_time","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3468},{"stateMutability":"view","type":"function","name":"future_A_gamma_time","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3498},{"stateMutability":"view","type":"function","name":"allowed_extra_profit","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3528},{"stateMutability":"view","type":"function","name":"future_allowed_extra_profit","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3558},{"stateMutability":"view","type":"function","name":"fee_gamma","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3588},{"stateMutability":"view","type":"function","name":"future_fee_gamma","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3618},{"stateMutability":"view","type":"function","name":"adjustment_step","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3648},{"stateMutability":"view","type":"function","name":"future_adjustment_step","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3678},{"stateMutability":"view","type":"function","name":"ma_half_time","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3708},{"stateMutability":"view","type":"function","name":"future_ma_half_time","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3738},{"stateMutability":"view","type":"function","name":"mid_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3768},{"stateMutability":"view","type":"function","name":"out_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3798},{"stateMutability":"view","type":"function","name":"admin_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3828},{"stateMutability":"view","type":"function","name":"future_mid_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3858},{"stateMutability":"view","type":"function","name":"future_out_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3888},{"stateMutability":"view","type":"function","name":"future_admin_fee","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3918},{"stateMutability":"view","type":"function","name":"balances","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}],"gas":4057},{"stateMutability":"view","type":"function","name":"D","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":3978},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":4008},{"stateMutability":"view","type":"function","name":"future_owner","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":4038},{"stateMutability":"view","type":"function","name":"xcp_profit","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4068},{"stateMutability":"view","type":"function","name":"xcp_profit_a","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4098},{"stateMutability":"view","type":"function","name":"virtual_price","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4128},{"stateMutability":"view","type":"function","name":"is_killed","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":4158},{"stateMutability":"view","type":"function","name":"kill_deadline","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4188},{"stateMutability":"view","type":"function","name":"transfer_ownership_deadline","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4218},{"stateMutability":"view","type":"function","name":"admin_actions_deadline","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":4248},{"stateMutability":"view","type":"function","name":"admin_fee_receiver","inputs":[],"outputs":[{"name":"","type":"address"}],"gas":4278}]
Contract Creation Code
6101a06160fb6101403960206160fb60c03960c05160a01c1561002157600080fd5b602060206160fb0160c03960c05160a01c1561003c57600080fd5b610140516018556101805160801b6102e0526101a0516102e051176102e0526102e0516004556102e0516005556101c0516010556101e0516011556102005160085561022051600a5561024051600c556102605160125560006103005261032060006002818352015b6103005160801b610300526102a0600161032051808210156100c657600080fd5b80820390509050600281106100da57600080fd5b6020020151610340526fffffffffffffffffffffffffffffffff610340511061010257600080fd5b610300516103405117610300525b81516001018083528114156100a5575b50506103005160005561030051600155610300516002554260035561028051600e55670de0b6b3a7640000601b5542624f1a0081818301101561016257600080fd5b80820190509050601f55610160516022556160e356600436101561000d57613762565b600035601c52600051635b41b90881141561002d5760006101405261005e565b63394747c58114156100595760843560011c1561004957600080fd5b602060846101403760005061005e565b610e29565b6023541561006b57600080fd5b6001602355601e541561007d57600080fd5b6024356004351861008d57600080fd5b60036004351061009c57600080fd5b6003602435106100ab57600080fd5b6000604435116100ba57600080fd5b610140516101605161018051600658016139a3565b6101a0526101c0526101805261016052610140526101a08051610160528060200151610180525060168060c052602060c020546101a05260018160c052602060c02001546101c05260028160c052602060c02001546101e052506024356102005260403661022037600115610d2b5773dac17f958d2ee523a2206206994597c13d831ec761026052732260fac5e5542a773aa44fbcfedf7c193bc2c5996102805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102a0526002600435141561019d57610140516101a0565b60005b1561020a5760443534146101b357600080fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b6101d257600080fd5b60006000600463d0e30db06102c0526102dc3473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af161020557600080fd5b61027f565b341561021557600080fd5b6102606004356003811061022857600080fd5b60200201513b61023757600080fd5b6000600060646323b872dd6102c052336102e0523061030052604435610320526102dc60006102606004356003811061026f57600080fd5b60200201515af161027f57600080fd5b6101a06024356003811061029257600080fd5b60200201516102c0526101a0600435600381106102ae57600080fd5b60200201516102e0526102e0516044358181830110156102cd57600080fd5b808201905090506101a0600435600381106102e757600080fd5b60200201526101a0600435600381106102ff57600080fd5b60200201516004356003811061031457600080fd5b601660c052602060c0200155604036610300376000546103405261036060006002818352015b6fffffffffffffffffffffffffffffffff6103405116610300610360516002811061036457600080fd5b60200201526103405160801c610340525b815160010180835281141561033a575b505064e8d4a51000610360526402540be4006103805260016103a0526101a0805164e8d4a5100080820282158284830414176103c057600080fd5b809050905090508152506103c060016002818352015b6101a06103c051600381106103ea57600080fd5b60200201516103006103c05160018082101561040557600080fd5b808203905090506002811061041957600080fd5b6020020151808202821582848304141761043257600080fd5b809050905090506103606103c0516003811061044d57600080fd5b6020020151808202821582848304141761046657600080fd5b80905090509050670de0b6b3a7640000808204905090506101a06103c0516003811061049157600080fd5b60200201525b81516001018083528114156103d6575b5050610360600435600381106104bc57600080fd5b60200201516103c05260011561064b576007546103e05260006103e051111561064b576102e080516103c05180820282158284830414176104fc57600080fd5b8090509050905081525060006004351115610573576102e05161030060043560018082101561052a57600080fd5b808203905090506002811061053e57600080fd5b6020020151808202821582848304141761055757600080fd5b80905090509050670de0b6b3a7640000808204905090506102e0525b6101a06004356003811061058657600080fd5b6020020151610400526102e0516101a0600435600381106105a657600080fd5b6020020152602061052060a463c7fab70861042052610160516104405261018051610460526101a051610480526101c0516104a0526101e0516104c05261043c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61060657600080fd5b601f3d1161061357600080fd5b60005061052051601755610400516101a06004356003811061063457600080fd5b60200201526103e0514210151561064b5760016007555b6103606024356003811061065e57600080fd5b60200201516103e0526101a06024356003811061067a57600080fd5b6020020151602061054060e46336bc885561040052610160516104205261018051610440526101a051610460526101c051610480526101e0516104a0526017546104c0526024356104e05261041c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6106e857600080fd5b601f3d116106f557600080fd5b600050610540518082101561070957600080fd5b80820390509050610240526101a06024356003811061072757600080fd5b602002018051610240518082101561073e57600080fd5b80820390509050815250610240805160018082101561075c57600080fd5b80820390509050815250600060243511156107dd5761024051670de0b6b3a7640000808202821582848304141761079257600080fd5b809050905090506103006024356001808210156107ae57600080fd5b80820390509050600281106107c257600080fd5b602002015180806107d257600080fd5b820490509050610240525b61024080516103e05180806107f157600080fd5b8204905090508152506102408051610140610400525b6104005151602061040051016104005261040061040051101561082957610807565b6101a051610420526101c051610440526101e0516104605261046051610440516104205160065801613b9b565b6104c0526103e0610400525b610400515260206104005103610400526101406104005110151561088557610862565b6104c0516102405180820282158284830414176108a157600080fd5b809050905090506402540be40080820490509050808210156108c257600080fd5b808203905090508152506064356102405110151515610920576308c379a0610400526020610420526008610440527f536c6970706167650000000000000000000000000000000000000000000000006104605261044050606461041cfd5b6102c08051610240518082101561093657600080fd5b808203905090508152506102c0516024356003811061095457600080fd5b601660c052602060c0200155600260243514156109745761014051610977565b60005b15610a1c5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b61099b57600080fd5b600060006024632e1a7d4d61040052610240516104205261041c600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af16109d757600080fd5b6000610400526104008051602001806104408284600060045af16109fa57600080fd5b5050600060006104405161046061024051335af1610a1757600080fd5b610a82565b61026060243560038110610a2f57600080fd5b60200201513b610a3e57600080fd5b60006000604463a9059cbb610400523361042052610240516104405261041c600061026060243560038110610a7257600080fd5b60200201515af1610a8257600080fd5b6102c080516103e0518082028215828483041417610a9f57600080fd5b8090509050905081525060006024351115610b16576102c051610300602435600180821015610acd57600080fd5b8082039050905060028110610ae157600080fd5b60200201518082028215828483041417610afa57600080fd5b80905090509050670de0b6b3a7640000808204905090506102c0525b6102c0516101a060243560038110610b2d57600080fd5b6020020152620186a06044351115610b4d57620186a06102405111610b50565b60005b15610d2b576044356103c0518082028215828483041417610b7057600080fd5b8090509050905061040052610240516103e0518082028215828483041417610b9757600080fd5b809050905090506104205260006004351815610bb95760006024351415610bbc565b60005b15610c93576fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600435600180821015610c0557600080fd5b80820390509050600160ff1b8110610c1c57600080fd5b8082028215828483051417610c3057600080fd5b809050905090506000811215610c4d57600254816000031c610c53565b600254811b5b905016610400518082028215828483041417610c6e57600080fd5b80905090509050610420518080610c8457600080fd5b82049050905061022052610d2b565b6004351515610ce25761040051670de0b6b3a76400008082028215828483041417610cbd57600080fd5b80905090509050610420518080610cd357600080fd5b82049050905061022052610d2b565b61042051670de0b6b3a76400008082028215828483041417610d0357600080fd5b80905090509050610400518080610d1957600080fd5b82049050905061022052600435610200525b6101405161016051610180516101a0516101c0516101e051610200516102205161024051610160516102605261018051610280526101a0516102a0526101c0516102c0526101e0516102e052610200516103005261022051610320526000610340526103405161032051610300516102e0516102c0516102a0516102805161026051600658016142cf565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405260005060043561026052604435610280526024356102a052610240516102c052337fb2e76ae99761dc136e598d4a629bb347eccb9532a5f8bbd72e18467c3c34cc986080610260a26000602355005b6368727653811415610e70573415610e4057600080fd5b6004356101405260015461016052610160516101405160065801613764565b6101c0526101c05160005260206000f35b63a3f7cdd5811415610eb7573415610e8757600080fd5b6004356101405260005461016052610160516101405160065801613764565b6101c0526101c05160005260206000f35b6359189017811415610efe573415610ece57600080fd5b6004356101405260025461016052610160516101405160065801613764565b6101c0526101c05160005260206000f35b63fc0c546a811415610f33573415610f1557600080fd5b73c4ad29ba4b3c580e6d59105fff484999997675ff60005260206000f35b63c6610657811415610fb6573415610f4a57600080fd5b73dac17f958d2ee523a2206206994597c13d831ec761014052732260fac5e5542a773aa44fbcfedf7c193bc2c5996101605273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26101805261014060043560038110610fa857600080fd5b602002015160005260206000f35b63f446c1d0811415610feb573415610fcd57600080fd5b600658016139a3565b61014052610160526101405160005260206000f35b63b137392981141561102357341561100257600080fd5b600658016139a3565b61014052610160526101406020015160005260206000f35b63ddca3f438114156110d957341561103a57600080fd5b6006580161380e565b61014052610160526101805261014080516101a05280602001516101c05280604001516101e052506101405161016051610180516101a0516101c0516101e0516101a051610200526101c051610220526101e0516102405261024051610220516102005160065801613b9b565b6102a0526101e0526101c0526101a0526101805261016052610140526102a05160005260206000f35b63572e56258114156111315734156110f057600080fd5b60048035610140528060200135610160528060400135610180525061018051610160516101405160065801613b9b565b6101e0526101e05160005260206000f35b63bb7b8b808114156111e957341561114857600080fd5b670de0b6b3a7640000601754610140526101405160065801613ca8565b6101a0526101a051808202821582848304141761118157600080fd5b80905090509050602061022060046318160ddd6101c0526101dc73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6111bb57600080fd5b601f3d116111c857600080fd5b6000506102205180806111da57600080fd5b82049050905060005260206000f35b63556d6e9f81141561125857341561120057600080fd5b6020610200606463556d6e9f61014052606060046101603761015c7340745803c2faa8e8402e2ae935933d07ca8f355c5afa61123b57600080fd5b601f3d1161124857600080fd5b6000506102005160005260206000f35b63cde699fa8114156112d757341561126f57600080fd5b600480356101405280602001356101605280604001356101805250606480356101a05280602001356101c05280604001356101e052506101e0516101c0516101a0516101805161016051610140516006580161543f565b610240526102405160005260206000f35b634515cef38114156120a757602354156112f057600080fd5b6001602355341561130057600080fd5b601e541561130d57600080fd5b6101405161016051600658016139a3565b610180526101a05261016052610140526101808051610140528060200151610160525073dac17f958d2ee523a2206206994597c13d831ec761018052732260fac5e5542a773aa44fbcfedf7c193bc2c5996101a05273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26101c05260168060c052602060c020546101e05260018160c052602060c02001546102005260028160c052602060c020015461022052506101203661024037600f6103605260011561184c576101e05161038052610200516103a052610220516103c0526103e060006003818352015b6101e06103e0516003811061140c57600080fd5b602002015160046103e0516003811061142457600080fd5b602002013581818301101561143857600080fd5b8082019050905061040052610400516101e06103e0516003811061145b57600080fd5b6020020152610400516103e0516003811061147557600080fd5b601660c052602060c02001555b81516001018083528114156113f8575b50506101e0516102a052610200516102c052610220516102e05264e8d4a510006103e0526402540be40061040052600161042052600054610440526101e0805164e8d4a5100080820282158284830414176114ec57600080fd5b80905090509050815250610380805164e8d4a51000808202821582848304141761151557600080fd5b8090509050905081525061046060016002818352015b6fffffffffffffffffffffffffffffffff61044051166103e0610460516003811061155557600080fd5b6020020151808202821582848304141761156e57600080fd5b80905090509050610480526101e0610460516003811061158d57600080fd5b60200201516104805180820282158284830414176115aa57600080fd5b80905090509050670de0b6b3a7640000808204905090506101e061046051600381106115d557600080fd5b602002015261038061046051600381106115ee57600080fd5b602002015161048051808202821582848304141761160b57600080fd5b80905090509050670de0b6b3a764000080820490509050610380610460516003811061163657600080fd5b60200201526104405160801c610440525b815160010180835281141561152b575b505061046060006003818352015b60006004610460516003811061167a57600080fd5b6020020135111561178557610180610460516003811061169957600080fd5b60200201513b6116a857600080fd5b6000600060646323b872dd61048052336104a052306104c052600461046051600381106116d457600080fd5b60200201356104e05261049c600061018061046051600381106116f657600080fd5b60200201515af161170657600080fd5b6101e0610460516003811061171a57600080fd5b6020020151610380610460516003811061173357600080fd5b60200201518082101561174557600080fd5b80820390509050610240610460516003811061176057600080fd5b6020020152600f61036051141561177e576104605161036052611785565b600e610360525b8151600101808352811415611665575b5050600f61036051186117a757600080fd5b60075461046052600061046051111561184457602061058060a463c7fab70861048052610140516104a052610160516104c052610380516104e0526103a051610500526103c0516105205261049c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61181557600080fd5b601f3d1161182257600080fd5b6000506105805161034052610460514210151561183f5760016007555b61184c565b601754610340525b60206104a060a463c7fab7086103a052610140516103c052610160516103e0526101e05161040052610200516104205261022051610440526103bc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6118a757600080fd5b601f3d116118b457600080fd5b6000506104a05161038052602061042060046318160ddd6103c0526103dc73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6118f257600080fd5b601f3d116118ff57600080fd5b600050610420516103a052600061034051111561196f576103a05161038051808202821582848304141761193257600080fd5b8090509050905061034051808061194857600080fd5b8204905090506103a0518082101561195f57600080fd5b80820390509050610300526119e6565b6101406103c0525b6103c0515160206103c051016103c0526103c06103c051101561199957611977565b610380516103e0526103e05160065801613ca8565b610440526103a06103c0525b6103c0515260206103c051036103c0526101406103c0511015156119dd576119ba565b61044051610300525b600061030051116119f657600080fd5b6000610340511115611f96576101406103c0525b6103c0515160206103c051016103c0526103c06103c0511015611a2c57611a0a565b610240516103e052610260516104005261028051610420526101e051610440526102005161046052610220516104805261048051610460516104405161042051610400516103e0516006580161543f565b6104e0526103a06103c0525b6103c0515260206103c051036103c0526101406103c051101515611aac57611a89565b6104e051610300518082028215828483041417611ac857600080fd5b809050905090506402540be400808204905090506001818183011015611aed57600080fd5b808201905090506103205261030080516103205180821015611b0e57600080fd5b808203905090508152506103a0805161030051818183011015611b3057600080fd5b80820190509050815250602061046060446340c10f196103c052336103e05261030051610400526103dc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af1611b7c57600080fd5b601f3d11611b8957600080fd5b6000506104605060006103c052620186a0610300511115611ed0576003610360511015611ed0576060366103e0376002546104405264e8d4a51000610460526402540be4006104805260016104a0526104c060006002818352015b6fffffffffffffffffffffffffffffffff61044051166104006104c05160028110611c0e57600080fd5b60200201526104405160801c610440525b8151600101808352811415611be4575b50506104c060006003818352015b610360516104c0511815611d63576104c0511515611c9d576103e080516102a05164e8d4a510008082028215828483041417611c7857600080fd5b80905090509050818183011015611c8e57600080fd5b80820190509050815250611d63565b6103e080516102a06104c05160038110611cb657600080fd5b60200201516104006104c051600180821015611cd157600080fd5b8082039050905060028110611ce557600080fd5b60200201518082028215828483041417611cfe57600080fd5b809050905090506104606104c05160038110611d1957600080fd5b60200201518082028215828483041417611d3257600080fd5b80905090509050670de0b6b3a764000080820490509050818183011015611d5857600080fd5b808201905090508152505b8151600101808352811415611c3d575b50506103e051610300518082028215828483041417611d9157600080fd5b809050905090506103a0518080611da757600080fd5b8204905090506103e0526103e051670de0b6b3a76400008082028215828483041417611dd257600080fd5b8090509050905060046103605160038110611dec57600080fd5b60200201356104606103605160038110611e0557600080fd5b60200201518082028215828483041417611e1e57600080fd5b80905090509050610300516102a06103605160038110611e3d57600080fd5b60200201518082028215828483041417611e5657600080fd5b809050905090506104606103605160038110611e7157600080fd5b60200201518082028215828483041417611e8a57600080fd5b809050905090506103a0518080611ea057600080fd5b82049050905080821015611eb357600080fd5b808203905090508080611ec557600080fd5b8204905090506103c0525b6101406103e0525b6103e0515160206103e051016103e0526103e06103e0511015611efa57611ed8565b610140516104005261016051610420526101e0516104405261020051610460526102205161048052610360516104a0526103c0516104c052610380516104e0526104e0516104c0516104a0516104805161046051610440516104205161040051600658016142cf565b6103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515611f8e57611f6b565b60005061200c565b61038051601755670de0b6b3a7640000601c55670de0b6b3a7640000601a55602061046060446340c10f196103c052336103e05261030051610400526103dc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af1611ff757600080fd5b601f3d1161200457600080fd5b600050610460505b6064356103005110151515612060576308c379a06103c05260206103e0526008610400527f536c697070616765000000000000000000000000000000000000000000000000610420526104005060646103dcfd5b606060046103c03761032051610420526103a05161044052337f96b486485420b963edd3fdec0b0195730035600feb7de6f544383d7950fa97ee60a06103c0a26000602355005b63ecb586a581141561243457602354156120c057600080fd5b600160235534156120d057600080fd5b73dac17f958d2ee523a2206206994597c13d831ec761014052732260fac5e5542a773aa44fbcfedf7c193bc2c5996101605273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261018052602061022060046318160ddd6101c0526101dc73c4ad29ba4b3c580e6d59105fff484999997675ff5afa61214e57600080fd5b601f3d1161215b57600080fd5b600050610220516101a052602061026060446379cc67906101c052336101e052600435610200526101dc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af16121a757600080fd5b601f3d116121b457600080fd5b6000506102605060168060c052602060c020546101c05260018160c052602060c02001546101e05260028160c052602060c0200154610200525060043560018082101561220057600080fd5b808203905090506102205261024060006003818352015b6101c0610240516003811061222b57600080fd5b602002015161022051808202821582848304141761224857600080fd5b809050905090506101a051808061225e57600080fd5b820490509050610260526024610240516003811061227b57600080fd5b602002013561026051101561228f57600080fd5b6101c061024051600381106122a357600080fd5b602002015161026051808210156122b957600080fd5b8082039050905061024051600381106122d157600080fd5b601660c052602060c0200155610260516101c061024051600381106122f557600080fd5b6020020152610140610240516003811061230e57600080fd5b60200201513b61231d57600080fd5b60006000604463a9059cbb61028052336102a052610260516102c05261029c6000610140610240516003811061235257600080fd5b60200201515af161236257600080fd5b8151600101808352811415612217575b505060175461024052610240516102405161022051808202821582848304141761239b57600080fd5b809050905090506101a05180806123b157600080fd5b820490509050808210156123c457600080fd5b808203905090506017556101c051610260526101e05161028052610200516102a0526101a051600435808210156123fa57600080fd5b808203905090506102c052337fd6cc314a0b1e3b2579f8e64248e82434072e8271290eef8ad0886709304195f56080610260a26000602355005b633883e1198114156124cd57341561244b57600080fd5b60643560011c1561245b57600080fd5b60206102206084633883e11961014052600480356101605280602001356101805280604001356101a052506064356101c05261015c7340745803c2faa8e8402e2ae935933d07ca8f355c5afa6124b057600080fd5b601f3d116124bd57600080fd5b6000506102205160005260206000f35b634fb08c5e8114156125f65734156124e457600080fd5b600658016139a3565b610140526101605261014080516101805280602001516101a052506101405161016051610180516101a051610180516101c0526101a0516101e0526040600461020037600161024052600061026052610260516102405161022051610200516101e0516101c0516006580161567c565b6102c0526102e052610300526103205261034052610360526101a0526101805261016052610140526102c08080808051610380525050602081019050808080516103a0525050602081019050808080516103c05250506020810190508080808080516103e05250506020810190508080805161040052505060208101905080808051610420525050505050506103805160005260206000f35b63f1dc3cc9811415612a4b576023541561260f57600080fd5b6001602355341561261f57600080fd5b601e541561262c57600080fd5b6101405161016051600658016139a3565b610180526101a05261016052610140526101808051610140528060200151610160525060c03661018037600754610240526101405161016051610180516101a0516101c0516101e05161020051610220516102405161014051610260526101605161028052604060046102a037600061024051116102e052600161030052610300516102e0516102c0516102a05161028051610260516006580161567c565b61036052610380526103a0526103c0526103e052610400526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080808080516104205250506020810190508080805161044052505060208101905080808051610460525050602081019050808080808051610480525050602081019050808080516104a0525050602081019050808080516104c05250505050505061042080516101805280602001516101c05280604001516101a0528060600180516101e05280602001516102005280604001516102205250506044356101805110151515612809576308c379a06102605260206102805260086102a0527f536c6970706167650000000000000000000000000000000000000000000000006102c0526102a050606461027cfd5b610240514210151561281b5760016007555b6024356003811061282b57600080fd5b601660c052602060c020018054610180518082101561284957600080fd5b80820390509050815550602061030060446379cc67906102605233610280526004356102a05261027c600073c4ad29ba4b3c580e6d59105fff484999997675ff5af161289457600080fd5b601f3d116128a157600080fd5b600050610300506101405161016051610180516101a0516101c0516101e051610200516102205161024051610140516102605261016051610280526101e0516102a052610200516102c052610220516102e052602435610300526101c051610320526101a051610340526103405161032051610300516102e0516102c0516102a0516102805161026051600658016142cf565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405260005073dac17f958d2ee523a2206206994597c13d831ec761026052732260fac5e5542a773aa44fbcfedf7c193bc2c5996102805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102a052610260602435600381106129b957600080fd5b60200201513b6129c857600080fd5b60006000604463a9059cbb6102c052336102e05261018051610300526102dc6000610260602435600381106129fc57600080fd5b60200201515af1612a0c57600080fd5b604060046102c0376101805161030052337f5ad056f2e28a8cec232015406b843668c1e36cda598127ec3b8c59b8c72773a060606102c0a26000602355005b63c93f49e8811415612a875760235415612a6457600080fd5b60016023553415612a7457600080fd5b60065801613de9565b6000506000602355005b635e248072811415612cee573415612a9e57600080fd5b6018543314612aac57600080fd5b6006546201517f818183011015612ac257600080fd5b808201905090504211612ad457600080fd5b426201517f818183011015612ae857600080fd5b8082019050905060443511612afc57600080fd5b6101405161016051600658016139a3565b610180526101a0526101605261014052610180805161014052806020015161016052506101405160801b6101805261016051610180511761018052600060043511612b5757600080fd5b63a0eebb0160043510612b6957600080fd5b6402540be3ff60243511612b7c57600080fd5b662386f26fc1000160243510612b9157600080fd5b670de0b6b3a76400006004358082028215828483041417612bb157600080fd5b80905090509050610140518080612bc757600080fd5b8204905090506101a052678ac7230489e800016101a05110612be857600080fd5b67016345785d89ffff6101a05111612bff57600080fd5b670de0b6b3a76400006024358082028215828483041417612c1f57600080fd5b80905090509050610160518080612c3557600080fd5b8204905090506101a052678ac7230489e800016101a05110612c5657600080fd5b67016345785d89ffff6101a05111612c6d57600080fd5b610180516004554260065560043560801b6101c0526024356101c051176101c0526044356007556101c051600555610140516101e052600435610200526101605161022052602435610240524261026052604435610280527fe35f0559b0642164e286b30df2077ec3a05426617a25db7578fd20ba39a6cd0560c06101e0a1005b63244c7c2e811415612db3573415612d0557600080fd5b6018543314612d1357600080fd5b6101405161016051600658016139a3565b610180526101a0526101605261014052610180805161014052806020015161016052506101405160801b610180526101605161018051176101805261018051600455610180516005554260065542600755610140516101a052610160516101c052426101e0527f5f0e7fba3d100c9e19446e1c92fe436f0a9a22fe99669360e4fdd6d3de2fc28460606101a0a1005b63a43c3351811415612fac573415612dca57600080fd5b6018543314612dd857600080fd5b60215415612de557600080fd5b60e06004610140376402540be401610160511015612e14576207a11f6101605111612e0f57600080fd5b612e1c565b601154610160525b6402540be400610140511115612e3457601054610140525b61016051610140511115612e4757600080fd5b6402540be400610180511115612e5f57601254610180525b670de0b6b3a76400006101a0511015612e875760006101a05111612e8257600080fd5b612e8f565b600a546101a0525b670de0b6b3a76400006101c0511115612eaa576008546101c0525b670de0b6b3a76400006101e0511115612ec557600c546101e0525b62093a80610200511015612ee85760006102005111612ee357600080fd5b612ef0565b600e54610200525b426203f480818183011015612f0457600080fd5b8082019050905061022052610220516021556101805160155561014051601355610160516014556101a051600b556101c0516009556101e051600d5561020051600f556101805161024052610140516102605261016051610280526101a0516102a0526101c0516102c0526101e0516102e0526102005161030052610220517f913fde9a37e1f8ab67876a4d0ce80790d764fcfc5692f4529526df9c6bdde55360e0610240a2005b632a7dd7cd8114156130f05760235415612fc557600080fd5b60016023553415612fd557600080fd5b6018543314612fe357600080fd5b602154421015612ff257600080fd5b60006021541861300157600080fd5b600060215560155461014052610140516012541815613036576101405160065801613de9565b61014052600050610140516012555b60135461016052610160516010556014546101805261018051601155600b546101a0526101a051600a556009546101c0526101c051600855600d546101e0526101e051600c55600f546102005261020051600e556101405161022052610160516102405261018051610260526101a051610280526101c0516102a0526101e0516102c052610200516102e0527f1c65bbdc939f346e5d6f0bde1f072819947438d4fc7b182cc59c2f6dc550408760e0610220a16000602355005b63226840fb81141561311c57341561310757600080fd5b601854331461311557600080fd5b6000602155005b636b441a408114156131b957341561313357600080fd5b60043560a01c1561314357600080fd5b601854331461315157600080fd5b6020541561315e57600080fd5b426203f48081818301101561317257600080fd5b808201905090506101405261014051602055600435601955600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae81141561323b5734156131d057600080fd5b60185433146131de57600080fd5b6020544210156131ed57600080fd5b6000602054186131fc57600080fd5b60006020556019546101405261014051601855610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf19381141561326757341561325257600080fd5b601854331461326057600080fd5b6000602055005b63e36988538114156132a157341561327e57600080fd5b601854331461328c57600080fd5b42601f541161329a57600080fd5b6001601e55005b633046f9728114156132cd5734156132b857600080fd5b60185433146132c657600080fd5b6000601e55005b637242e52481141561330a5734156132e457600080fd5b60043560a01c156132f457600080fd5b601854331461330257600080fd5b600435602255005b636112c74781141561332d57341561332157600080fd5b60035460005260206000f35b63204fe3d581141561335057341561334457600080fd5b60045460005260206000f35b63f30cfad581141561337357341561336757600080fd5b60055460005260206000f35b63e89876ff81141561339657341561338a57600080fd5b60065460005260206000f35b63f9ed95978114156133b95734156133ad57600080fd5b60075460005260206000f35b6349fe9e778114156133dc5734156133d057600080fd5b60085460005260206000f35b63727ced578114156133ff5734156133f357600080fd5b60095460005260206000f35b6372d4f0e281141561342257341561341657600080fd5b600a5460005260206000f35b63d7c3dcbe81141561344557341561343957600080fd5b600b5460005260206000f35b63083812e581141561346857341561345c57600080fd5b600c5460005260206000f35b634ea12c7d81141561348b57341561347f57600080fd5b600d5460005260206000f35b63662b62748114156134ae5734156134a257600080fd5b600e5460005260206000f35b630c5e23d48114156134d15734156134c557600080fd5b600f5460005260206000f35b6392526c0c8114156134f45734156134e857600080fd5b60105460005260206000f35b63ee8de67581141561351757341561350b57600080fd5b60115460005260206000f35b63fee3f7f981141561353a57341561352e57600080fd5b60125460005260206000f35b637cf9aedc81141561355d57341561355157600080fd5b60135460005260206000f35b637d1b060c81141561358057341561357457600080fd5b60145460005260206000f35b63e38244628114156135a357341561359757600080fd5b60155460005260206000f35b634903b0d18114156135df5734156135ba57600080fd5b600435600381106135ca57600080fd5b601660c052602060c020015460005260206000f35b630f529ba28114156136025734156135f657600080fd5b60175460005260206000f35b638da5cb5b81141561362557341561361957600080fd5b60185460005260206000f35b631ec0cdc181141561364857341561363c57600080fd5b60195460005260206000f35b637ba1a74d81141561366b57341561365f57600080fd5b601a5460005260206000f35b630b7b594b81141561368e57341561368257600080fd5b601b5460005260206000f35b630c46b72a8114156136b15734156136a557600080fd5b601c5460005260206000f35b639c868ac08114156136d45734156136c857600080fd5b601e5460005260206000f35b632a4268968114156136f75734156136eb57600080fd5b601f5460005260206000f35b63e0a0b58681141561371a57341561370e57600080fd5b60205460005260206000f35b63405e28f881141561373d57341561373157600080fd5b60215460005260206000f35b636e42e4d281141561376057341561375457600080fd5b60225460005260206000f35b505b005b6101805261014052610160526002610140511061378057600080fd5b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8061014051600160ff1b81106137c657600080fd5b80820282158284830514176137da57600080fd5b8090509050905060008112156137f85761016051816000031c6137ff565b61016051811b5b90501660005260005161018051565b6101405260168060c052602060c020546101605260018160c052602060c02001546101805260028160c052602060c02001546101a052506000546101c05264e8d4a510006101e0526402540be40061020052600161022052610160805164e8d4a51000808202821582848304141761388557600080fd5b8090509050905081525061024060016002818352015b6fffffffffffffffffffffffffffffffff6101c051166101e061024051600381106138c557600080fd5b602002015180820282158284830414176138de57600080fd5b809050905090506102605261016061024051600381106138fd57600080fd5b602002015161026051808202821582848304141761391a57600080fd5b80905090509050670de0b6b3a764000080820490509050610160610240516003811061394557600080fd5b60200201526101c05160801c6101c0525b815160010180835281141561389b575b50506060610240525b6000610240511115156139815761399d565b602061024051036101600151602061024051036102405261396f565b61014051565b6101405260075461016052600554610180526fffffffffffffffffffffffffffffffff61018051166101a0526101805160801c6101c05261016051421015613b50576004546101e0526006546102005261016080516102005180821015613a0957600080fd5b80820390509050815250426102005180821015613a2557600080fd5b8082039050905061020052610160516102005180821015613a4557600080fd5b80820390509050610220526101e05160801c610220518082028215828483041417613a6f57600080fd5b809050905090506101c051610200518082028215828483041417613a9257600080fd5b80905090509050818183011015613aa857600080fd5b80820190509050610160518080613abe57600080fd5b8204905090506101c0526fffffffffffffffffffffffffffffffff6101e05116610220518082028215828483041417613af657600080fd5b809050905090506101a051610200518082028215828483041417613b1957600080fd5b80905090509050818183011015613b2f57600080fd5b80820190509050610160518080613b4557600080fd5b8204905090506101a0525b6101c051610200526101a0516102205260406101e0525b60006101e051111515613b7957613b95565b60206101e05103610200015160206101e051036101e052613b67565b61014051565b6101a05261014052610160526101805260206102c0608463fa18042d6101e052610140516102005261016051610220526101805161024052600a54610260526101fc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa613bfd57600080fd5b601f3d11613c0a57600080fd5b6000506102c0516101c0526010546101c0518082028215828483041417613c3057600080fd5b80905090509050601154670de0b6b3a76400006101c05180821015613c5457600080fd5b808203905090508082028215828483041417613c6f57600080fd5b80905090509050818183011015613c8557600080fd5b80820190509050670de0b6b3a7640000808204905090506000526000516101a051565b61016052610140526060366101803761014051600380820490509050610180526000546101e05261020060016002818352015b61014051670de0b6b3a76400008082028215828483041417613cfc57600080fd5b8090509050905060036fffffffffffffffffffffffffffffffff6101e051168082028215828483041417613d2f57600080fd5b809050905090508080613d4157600080fd5b8204905090506101806102005160038110613d5b57600080fd5b60200201526101e05160801c6101e0525b8151600101808352811415613cdb575b505060206102c0606463bad1dc266102005261018051610220526101a051610240526101c0516102605261021c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa613dc957600080fd5b601f3d11613dd657600080fd5b6000506102c05160005260005161016051565b61014052610140516101605161018051600658016139a3565b6101a0526101c0526101805261016052610140526101a080516101605280602001516101805250601a546101a052601b546101c05273dac17f958d2ee523a2206206994597c13d831ec76101e052732260fac5e5542a773aa44fbcfedf7c193bc2c5996102005273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102205261024060006003818352015b60206102e060246370a0823161026052306102805261027c6101e06102405160038110613eba57600080fd5b60200201515afa613eca57600080fd5b601f3d11613ed757600080fd5b6000506102e0516102405160038110613eef57600080fd5b601660c052602060c02001555b8151600101808352811415613e8e575b5050601c54610240526101c0516101a05111156140cc576101a0516101c05180821015613f3857600080fd5b808203905090506012548082028215828483041417613f5657600080fd5b809050905090506404a817c800808204905090506102605260006102605111156140cc576022546102805261024051670de0b6b3a76400008082028215828483041417613fa257600080fd5b80905090509050610240516102605180821015613fbe57600080fd5b808203905090508080613fd057600080fd5b820490509050670de0b6b3a764000080821015613fec57600080fd5b808203905090506102a05260206103806044636962f8456102e05261028051610300526102a051610320526102fc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af161403c57600080fd5b601f3d1161404957600080fd5b600050610380516102c0526101a08051610260516002808202821582848304141761407357600080fd5b809050905090508082101561408757600080fd5b808203905090508152506101a051601a556102c0516102e052610280517f6059a38198b1dc42b3791087d1ff0fbd72b3179553c25f678cd246f52ffaaf5960206102e0a25b60206102e060046318160ddd6102805261029c73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6140ff57600080fd5b601f3d1161410c57600080fd5b6000506102e05161026052602061040060a463c7fab70861030052610160516103205261018051610340526101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516006580161380e565b6102a0526102c0526102e05261028052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526102a080516103605280602001516103805280604001516103a0525061031c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6141e357600080fd5b601f3d116141f057600080fd5b600050610400516102805261028051601755670de0b6b3a76400006101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605161028051610280516102a0526102a05160065801613ca8565b6103005261028052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261030051808202821582848304141761429457600080fd5b809050905090506102605180806142aa57600080fd5b820490509050601c556101c0516101a05111156142c9576101a051601b555b61014051565b610240526101405261016052610180526101a0526101c0526101e052610200526102205261016036610260376001546103c0526103e060006002818352015b6fffffffffffffffffffffffffffffffff6103c051166102606103e0516002811061433857600080fd5b60200201526103c05160801c6103c0525b815160010180835281141561430e575b50506003546103e0526002546103c05261040060006002818352015b6fffffffffffffffffffffffffffffffff6103c051166102a0610400516002811061439f57600080fd5b60200201526103c05160801c6103c0525b8151600101808352811415614375575b5050426103e051101561460557600e546104005260206104e0604463571bae3f61044052426103e051808210156143f657600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761441a57600080fd5b8090509050905061040051808061443057600080fd5b820490509050610460526402540be4006104805261045c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61446757600080fd5b601f3d1161447457600080fd5b6000506104e0516104205260006103c05261044060006002818352015b6102a061044051600281106144a557600080fd5b6020020151670de0b6b3a764000061042051808210156144c457600080fd5b8082039050905080820282158284830414176144df57600080fd5b8090509050905061026061044051600281106144fa57600080fd5b602002015161042051808202821582848304141761451757600080fd5b8090509050905081818301101561452d57600080fd5b80820190509050670de0b6b3a764000080820490509050610260610440516002811061455857600080fd5b60200201525b8151600101808352811415614491575b505061044060006002818352015b6103c05160801b6103c0526102606001610440518082101561459d57600080fd5b80820390509050600281106145b157600080fd5b6020020151610460526fffffffffffffffffffffffffffffffff61046051106145d957600080fd5b6103c05161046051176103c0525b815160010180835281141561457c575b50506103c051600155426003555b610220516104005261022051151561468b57602061052060a463c7fab708610420526101405161044052610160516104605261018051610480526101a0516104a0526101c0516104c05261043c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61467257600080fd5b601f3d1161467f57600080fd5b60005061052051610400525b6000546103c05261042060006002818352015b6fffffffffffffffffffffffffffffffff6103c051166102e061042051600281106146c857600080fd5b60200201526103c05160801c6103c0525b815160010180835281141561469e575b505060006102005111156147cb5760006101e051111561473b57610200516102a06101e05160018082101561471d57600080fd5b808203905090506002811061473157600080fd5b60200201526147c6565b61042060006002818352015b6102a0610420516002811061475b57600080fd5b6020020151670de0b6b3a7640000808202821582848304141761477d57600080fd5b8090509050905061020051808061479357600080fd5b8204905090506102a061042051600281106147ad57600080fd5b60200201525b8151600101808352811415614747575b50505b614976565b61018051610420526101a051610440526101c0516104605261042051620f4240808204905090506104805261042080516104805181818301101561480e57600080fd5b808201905090508152506104a060006002818352015b6102e06104a0516002811061483857600080fd5b602002015161048051808202821582848304141761485557600080fd5b809050905090506101806104a051600181818301101561487457600080fd5b808201905090506003811061488857600080fd5b6020020151602061060060e46336bc88556104c052610140516104e052610160516105005261042051610520526104405161054052610460516105605261040051610580526104a05160018181830110156148e257600080fd5b808201905090506105a0526104dc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61491057600080fd5b601f3d1161491d57600080fd5b600050610600518082101561493157600080fd5b80820390509050808061494357600080fd5b8204905090506102a06104a0516002811061495d57600080fd5b60200201525b8151600101808352811415614824575b50505b60006103c05261042060006002818352015b6103c05160801b6103c0526102a0600161042051808210156149a957600080fd5b80820390509050600281106149bd57600080fd5b6020020151610440526fffffffffffffffffffffffffffffffff61044051106149e557600080fd5b6103c05161044051176103c0525b8151600101808352811415614988575b50506103c05160025560206104a060046318160ddd6104405261045c73c4ad29ba4b3c580e6d59105fff484999997675ff5afa614a3f57600080fd5b601f3d11614a4c57600080fd5b6000506104a05161042052601a5461044052601c5461046052610400516003808204905090506103205261048060006002818352015b61040051670de0b6b3a76400008082028215828483041417614aa357600080fd5b8090509050905060036102e06104805160028110614ac057600080fd5b60200201518082028215828483041417614ad957600080fd5b809050905090508080614aeb57600080fd5b820490509050610320610480516001818183011015614b0957600080fd5b8082019050905060038110614b1d57600080fd5b60200201525b8151600101808352811415614a82575b5050670de0b6b3a764000061048052670de0b6b3a76400006104a0526000610460511115614cb95760206105a0606463bad1dc266104e0526103205161050052610340516105205261036051610540526104fc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa614ba657600080fd5b601f3d11614bb357600080fd5b6000506105a0516104c052670de0b6b3a76400006104c0518082028215828483041417614bdf57600080fd5b80905090509050610420518080614bf557600080fd5b8204905090506104a052610440516104a0518082028215828483041417614c1b57600080fd5b80905090509050610460518080614c3157600080fd5b820490509050610480526007546104e052610460516104a0511015614c5a576104e05115614c5d565b60005b15614ca7576308c379a0610500526020610520526004610540527f4c6f7373000000000000000000000000000000000000000000000000000000006105605261054050606461051cfd5b60016104e0511415614cb95760006007555b61048051601a55601d546104c0526104c0511515614d4f576104805160026008548082028215828483041417614cee57600080fd5b80905090509050818183011015614d0457600080fd5b808201905090506104a05160028082028215828483041417614d2557600080fd5b80905090509050670de0b6b3a764000080821015614d4257600080fd5b8082039050905011614d52565b60005b15614d635760016104c0526001601d555b6104c0511561542b57600c546104e05260006105005261052060006002818352015b6102606105205160028110614d9957600080fd5b6020020151670de0b6b3a76400008082028215828483041417614dbb57600080fd5b809050905090506102e06105205160028110614dd657600080fd5b60200201518080614de657600080fd5b82049050905061054052670de0b6b3a7640000610540511115614e2d576105408051670de0b6b3a764000080821015614e1e57600080fd5b80820390509050815250614e53565b670de0b6b3a76400006105405180821015614e4757600080fd5b80820390509050610540525b61050080517001000000000000000000000000000000006105405110614e7857600080fd5b6002610540510a818183011015614e8e57600080fd5b808201905090508152505b8151600101808352811415614d85575b50507001000000000000000000000000000000006104e05110614ecb57600080fd5b60026104e0510a610500511115614ee85760006104605111614eeb565b60005b1561542b5760206105a06024634e60b1416105205261050051670de0b6b3a7640000808204905090506105405261053c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa614f3b57600080fd5b601f3d11614f4857600080fd5b6000506105a0516105005261052060006002818352015b6102e06105205160028110614f7357600080fd5b6020020151610500516104e05180821015614f8d57600080fd5b808203905090508082028215828483041417614fa857600080fd5b809050905090506104e0516102606105205160028110614fc757600080fd5b60200201518082028215828483041417614fe057600080fd5b80905090509050818183011015614ff657600080fd5b8082019050905061050051808061500c57600080fd5b820490509050610380610520516002811061502657600080fd5b60200201525b8151600101808352811415614f5f575b505061018051610320526101a051610340526101c0516103605261052060006002818352015b61018061052051600181818301101561507a57600080fd5b808201905090506003811061508e57600080fd5b602002015161038061052051600281106150a757600080fd5b602002015180820282158284830414176150c057600080fd5b809050905090506102e061052051600281106150db57600080fd5b602002015180806150eb57600080fd5b82049050905061032061052051600181818301101561510957600080fd5b808201905090506003811061511d57600080fd5b60200201525b8151600101808352811415615062575b5050602061064060a463c7fab7086105405261014051610560526101605161058052610320516105a052610340516105c052610360516105e05261055c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61519057600080fd5b601f3d1161519d57600080fd5b6000506106405161052052610520516003808204905090506103205261054060006002818352015b61052051670de0b6b3a764000080820282158284830414176151e657600080fd5b809050905090506003610380610540516002811061520357600080fd5b6020020151808202821582848304141761521c57600080fd5b80905090509050808061522e57600080fd5b82049050905061032061054051600181818301101561524c57600080fd5b808201905090506003811061526057600080fd5b60200201525b81516001018083528114156151c5575b5050670de0b6b3a76400006020610600606463bad1dc266105405261032051610560526103405161058052610360516105a05261055c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6152cc57600080fd5b601f3d116152d957600080fd5b6000506106005180820282158284830414176152f457600080fd5b8090509050905061042051808061530a57600080fd5b82049050905061046052670de0b6b3a764000061046051111561536f5761048051600261046051808202821582848304141761534557600080fd5b80905090509050670de0b6b3a76400008082101561536257600080fd5b8082039050905011615372565b60005b156154255760006103c05261054060006002818352015b6103c05160801b6103c052610380600161054051808210156153aa57600080fd5b80820390509050600281106153be57600080fd5b6020020151610560526fffffffffffffffffffffffffffffffff61056051106153e657600080fd5b6103c05161056051176103c0525b8151600101808352811415615389575b50506103c0516000556105205160175561046051601c55610240515661542b565b6000601d555b610400516017556104a051601c5561024051565b610200526101405261016052610180526101a0526101c0526101e0526101405161016051610180516101a0516101c0516101e05161020051610220516101a051610240526101c051610260526101e0516102805261028051610260516102405160065801613b9b565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051600380820282158284830414176154e657600080fd5b809050905090506008808204905090506102205260006102405261028060006003818352015b6020610280510261014001516102605261024080516102605181818301101561553457600080fd5b808201905090508152505b815160010180835281141561550c575b505061024051600380820490509050610260526000610280526102c060006003818352015b60206102c0510261014001516102a052610260516102a05111156155d15761028080516102a05161026051808210156155ac57600080fd5b808203905090508181830110156155c257600080fd5b8082019050905081525061560c565b6102808051610260516102a051808210156155eb57600080fd5b8082039050905081818301101561560157600080fd5b808201905090508152505b8151600101808352811415615574575b50506102205161028051808202821582848304141761563a57600080fd5b8090509050905061024051808061565057600080fd5b820490509050620186a081818301101561566957600080fd5b8082019050905060005260005161020051565b610200526101405261016052610180526101a0526101c0526101e05260206102a060046318160ddd6102405261025c73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6156cb57600080fd5b601f3d116156d857600080fd5b6000506102a05161022052610220516101805111156156f657600080fd5b60036101a0511061570657600080fd5b60168060c052602060c020546102405260018160c052602060c02001546102605260028160c052602060c0200154610280525064e8d4a510006102a0526402540be4006102c05260016102e0526000610300526c0c9f2c9cd04674edea40000000610320526001156158c557600054610340526102a0805161024051808202821582848304141761579657600080fd5b8090509050905081525061036060016002818352015b6fffffffffffffffffffffffffffffffff610340511661038052610360516101a051141561581157610380516102a06101a051600381106157ec57600080fd5b6020020151808202821582848304141761580557600080fd5b80905090509050610320525b6102a0610360516003811061582557600080fd5b6020020151610240610360516003811061583e57600080fd5b6020020151808202821582848304141761585757600080fd5b8090509050905061038051808202821582848304141761587657600080fd5b80905090509050670de0b6b3a7640000808204905090506102a061036051600381106158a157600080fd5b60200201526103405160801c610340525b81516001018083528114156157ac575b50505b6101c0511561594657602061044060a463c7fab70861034052610140516103605261016051610380526102a0516103a0526102c0516103c0526102e0516103e05261035c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61592957600080fd5b601f3d1161593657600080fd5b600050610440516103005261594e565b601754610300525b6103005161034052610140610380525b610380515160206103805101610380526103806103805110156159805761595e565b6102a0516103a0526102c0516103c0526102e0516103e0526103e0516103c0516103a05160065801613b9b565b61044052610360610380525b61038051526020610380510361038052610140610380511015156159dc576159b9565b610440516103605261018051610340518082028215828483041417615a0057600080fd5b80905090509050610220518080615a1657600080fd5b8204905090506103805261034080516103805161036051610380518082028215828483041417615a4557600080fd5b809050905090506404a817c800808204905090506001818183011015615a6a57600080fd5b8082019050905080821015615a7e57600080fd5b8082039050905080821015615a9257600080fd5b80820390509050815250602061050060e46336bc88556103c052610140516103e05261016051610400526102a051610420526102c051610440526102e0516104605261034051610480526101a0516104a0526103dc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa615b0757600080fd5b601f3d11615b1457600080fd5b600050610500516103a0526102a06101a05160038110615b3357600080fd5b60200201516103a05180821015615b4957600080fd5b80820390509050670de0b6b3a76400008082028215828483041417615b6d57600080fd5b80905090509050610320518080615b8357600080fd5b8204905090506103c0526103a0516102a06101a05160038110615ba557600080fd5b602002015260006103e0526101e05115615bdd57620186a06103c0511115615bd557620186a06101805111615bd8565b60005b615be0565b60005b15615ef75760006104005264e8d4a51000610420526402540be40061044052600161046052604036610480376002546104c0526104e060006002818352015b6fffffffffffffffffffffffffffffffff6104c051166104806104e05160028110615c4957600080fd5b60200201526104c05160801c6104c0525b8151600101808352811415615c1f575b50506104e060006003818352015b6101a0516104e0511815615d9e576104e0511515615cd85761040080516102405164e8d4a510008082028215828483041417615cb357600080fd5b80905090509050818183011015615cc957600080fd5b80820190509050815250615d9e565b61040080516102406104e05160038110615cf157600080fd5b60200201516104806104e051600180821015615d0c57600080fd5b8082039050905060028110615d2057600080fd5b60200201518082028215828483041417615d3957600080fd5b809050905090506104206104e05160038110615d5457600080fd5b60200201518082028215828483041417615d6d57600080fd5b80905090509050670de0b6b3a764000080820490509050818183011015615d9357600080fd5b808201905090508152505b8151600101808352811415615c78575b505061040051610380518082028215828483041417615dcc57600080fd5b80905090509050610300518080615de257600080fd5b8204905090506104005261040051670de0b6b3a76400008082028215828483041417615e0d57600080fd5b809050905090506103c0516104206101a05160038110615e2c57600080fd5b60200201518082028215828483041417615e4557600080fd5b80905090509050610380516102406101a05160038110615e6457600080fd5b60200201518082028215828483041417615e7d57600080fd5b809050905090506104206101a05160038110615e9857600080fd5b60200201518082028215828483041417615eb157600080fd5b80905090509050610300518080615ec757600080fd5b82049050905080821015615eda57600080fd5b808203905090508080615eec57600080fd5b8204905090506103e0525b6104c06103c05181526103e0518160200152610340518160400152806060016102a05181526102c05181602001526102e0518160400152505060c0610580525b600061058051111515615f4957615f65565b602061058051036104c001516020610580510361058052615f37565b61020051565b6101786160e3036101786000396101786160e3036000f3000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67000000000000000000000000ecb456ea5365865ebab8a2661b0c503410e9b347000000000000000000000000000000000000000000000000000000000000d2f0000000000000000000000000000000000000000000000000000c6f3b40b6c0000000000000000000000000000000000000000000000000000000000000a7d8c00000000000000000000000000000000000000000000000000000000002aea540000000000000000000000000000000000000000000000000000001d1a94a20000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000001bda703f0a000000000000000000000000000000000000000000000000000000000012a05f20000000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000006e514c561b9fec00000000000000000000000000000000000000000000000000069eff91234645c0000Deployed Bytecode
0x600436101561000d57613762565b600035601c52600051635b41b90881141561002d5760006101405261005e565b63394747c58114156100595760843560011c1561004957600080fd5b602060846101403760005061005e565b610e29565b6023541561006b57600080fd5b6001602355601e541561007d57600080fd5b6024356004351861008d57600080fd5b60036004351061009c57600080fd5b6003602435106100ab57600080fd5b6000604435116100ba57600080fd5b610140516101605161018051600658016139a3565b6101a0526101c0526101805261016052610140526101a08051610160528060200151610180525060168060c052602060c020546101a05260018160c052602060c02001546101c05260028160c052602060c02001546101e052506024356102005260403661022037600115610d2b5773dac17f958d2ee523a2206206994597c13d831ec761026052732260fac5e5542a773aa44fbcfedf7c193bc2c5996102805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102a0526002600435141561019d57610140516101a0565b60005b1561020a5760443534146101b357600080fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b6101d257600080fd5b60006000600463d0e30db06102c0526102dc3473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af161020557600080fd5b61027f565b341561021557600080fd5b6102606004356003811061022857600080fd5b60200201513b61023757600080fd5b6000600060646323b872dd6102c052336102e0523061030052604435610320526102dc60006102606004356003811061026f57600080fd5b60200201515af161027f57600080fd5b6101a06024356003811061029257600080fd5b60200201516102c0526101a0600435600381106102ae57600080fd5b60200201516102e0526102e0516044358181830110156102cd57600080fd5b808201905090506101a0600435600381106102e757600080fd5b60200201526101a0600435600381106102ff57600080fd5b60200201516004356003811061031457600080fd5b601660c052602060c0200155604036610300376000546103405261036060006002818352015b6fffffffffffffffffffffffffffffffff6103405116610300610360516002811061036457600080fd5b60200201526103405160801c610340525b815160010180835281141561033a575b505064e8d4a51000610360526402540be4006103805260016103a0526101a0805164e8d4a5100080820282158284830414176103c057600080fd5b809050905090508152506103c060016002818352015b6101a06103c051600381106103ea57600080fd5b60200201516103006103c05160018082101561040557600080fd5b808203905090506002811061041957600080fd5b6020020151808202821582848304141761043257600080fd5b809050905090506103606103c0516003811061044d57600080fd5b6020020151808202821582848304141761046657600080fd5b80905090509050670de0b6b3a7640000808204905090506101a06103c0516003811061049157600080fd5b60200201525b81516001018083528114156103d6575b5050610360600435600381106104bc57600080fd5b60200201516103c05260011561064b576007546103e05260006103e051111561064b576102e080516103c05180820282158284830414176104fc57600080fd5b8090509050905081525060006004351115610573576102e05161030060043560018082101561052a57600080fd5b808203905090506002811061053e57600080fd5b6020020151808202821582848304141761055757600080fd5b80905090509050670de0b6b3a7640000808204905090506102e0525b6101a06004356003811061058657600080fd5b6020020151610400526102e0516101a0600435600381106105a657600080fd5b6020020152602061052060a463c7fab70861042052610160516104405261018051610460526101a051610480526101c0516104a0526101e0516104c05261043c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61060657600080fd5b601f3d1161061357600080fd5b60005061052051601755610400516101a06004356003811061063457600080fd5b60200201526103e0514210151561064b5760016007555b6103606024356003811061065e57600080fd5b60200201516103e0526101a06024356003811061067a57600080fd5b6020020151602061054060e46336bc885561040052610160516104205261018051610440526101a051610460526101c051610480526101e0516104a0526017546104c0526024356104e05261041c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6106e857600080fd5b601f3d116106f557600080fd5b600050610540518082101561070957600080fd5b80820390509050610240526101a06024356003811061072757600080fd5b602002018051610240518082101561073e57600080fd5b80820390509050815250610240805160018082101561075c57600080fd5b80820390509050815250600060243511156107dd5761024051670de0b6b3a7640000808202821582848304141761079257600080fd5b809050905090506103006024356001808210156107ae57600080fd5b80820390509050600281106107c257600080fd5b602002015180806107d257600080fd5b820490509050610240525b61024080516103e05180806107f157600080fd5b8204905090508152506102408051610140610400525b6104005151602061040051016104005261040061040051101561082957610807565b6101a051610420526101c051610440526101e0516104605261046051610440516104205160065801613b9b565b6104c0526103e0610400525b610400515260206104005103610400526101406104005110151561088557610862565b6104c0516102405180820282158284830414176108a157600080fd5b809050905090506402540be40080820490509050808210156108c257600080fd5b808203905090508152506064356102405110151515610920576308c379a0610400526020610420526008610440527f536c6970706167650000000000000000000000000000000000000000000000006104605261044050606461041cfd5b6102c08051610240518082101561093657600080fd5b808203905090508152506102c0516024356003811061095457600080fd5b601660c052602060c0200155600260243514156109745761014051610977565b60005b15610a1c5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc23b61099b57600080fd5b600060006024632e1a7d4d61040052610240516104205261041c600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af16109d757600080fd5b6000610400526104008051602001806104408284600060045af16109fa57600080fd5b5050600060006104405161046061024051335af1610a1757600080fd5b610a82565b61026060243560038110610a2f57600080fd5b60200201513b610a3e57600080fd5b60006000604463a9059cbb610400523361042052610240516104405261041c600061026060243560038110610a7257600080fd5b60200201515af1610a8257600080fd5b6102c080516103e0518082028215828483041417610a9f57600080fd5b8090509050905081525060006024351115610b16576102c051610300602435600180821015610acd57600080fd5b8082039050905060028110610ae157600080fd5b60200201518082028215828483041417610afa57600080fd5b80905090509050670de0b6b3a7640000808204905090506102c0525b6102c0516101a060243560038110610b2d57600080fd5b6020020152620186a06044351115610b4d57620186a06102405111610b50565b60005b15610d2b576044356103c0518082028215828483041417610b7057600080fd5b8090509050905061040052610240516103e0518082028215828483041417610b9757600080fd5b809050905090506104205260006004351815610bb95760006024351415610bbc565b60005b15610c93576fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600435600180821015610c0557600080fd5b80820390509050600160ff1b8110610c1c57600080fd5b8082028215828483051417610c3057600080fd5b809050905090506000811215610c4d57600254816000031c610c53565b600254811b5b905016610400518082028215828483041417610c6e57600080fd5b80905090509050610420518080610c8457600080fd5b82049050905061022052610d2b565b6004351515610ce25761040051670de0b6b3a76400008082028215828483041417610cbd57600080fd5b80905090509050610420518080610cd357600080fd5b82049050905061022052610d2b565b61042051670de0b6b3a76400008082028215828483041417610d0357600080fd5b80905090509050610400518080610d1957600080fd5b82049050905061022052600435610200525b6101405161016051610180516101a0516101c0516101e051610200516102205161024051610160516102605261018051610280526101a0516102a0526101c0516102c0526101e0516102e052610200516103005261022051610320526000610340526103405161032051610300516102e0516102c0516102a0516102805161026051600658016142cf565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405260005060043561026052604435610280526024356102a052610240516102c052337fb2e76ae99761dc136e598d4a629bb347eccb9532a5f8bbd72e18467c3c34cc986080610260a26000602355005b6368727653811415610e70573415610e4057600080fd5b6004356101405260015461016052610160516101405160065801613764565b6101c0526101c05160005260206000f35b63a3f7cdd5811415610eb7573415610e8757600080fd5b6004356101405260005461016052610160516101405160065801613764565b6101c0526101c05160005260206000f35b6359189017811415610efe573415610ece57600080fd5b6004356101405260025461016052610160516101405160065801613764565b6101c0526101c05160005260206000f35b63fc0c546a811415610f33573415610f1557600080fd5b73c4ad29ba4b3c580e6d59105fff484999997675ff60005260206000f35b63c6610657811415610fb6573415610f4a57600080fd5b73dac17f958d2ee523a2206206994597c13d831ec761014052732260fac5e5542a773aa44fbcfedf7c193bc2c5996101605273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26101805261014060043560038110610fa857600080fd5b602002015160005260206000f35b63f446c1d0811415610feb573415610fcd57600080fd5b600658016139a3565b61014052610160526101405160005260206000f35b63b137392981141561102357341561100257600080fd5b600658016139a3565b61014052610160526101406020015160005260206000f35b63ddca3f438114156110d957341561103a57600080fd5b6006580161380e565b61014052610160526101805261014080516101a05280602001516101c05280604001516101e052506101405161016051610180516101a0516101c0516101e0516101a051610200526101c051610220526101e0516102405261024051610220516102005160065801613b9b565b6102a0526101e0526101c0526101a0526101805261016052610140526102a05160005260206000f35b63572e56258114156111315734156110f057600080fd5b60048035610140528060200135610160528060400135610180525061018051610160516101405160065801613b9b565b6101e0526101e05160005260206000f35b63bb7b8b808114156111e957341561114857600080fd5b670de0b6b3a7640000601754610140526101405160065801613ca8565b6101a0526101a051808202821582848304141761118157600080fd5b80905090509050602061022060046318160ddd6101c0526101dc73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6111bb57600080fd5b601f3d116111c857600080fd5b6000506102205180806111da57600080fd5b82049050905060005260206000f35b63556d6e9f81141561125857341561120057600080fd5b6020610200606463556d6e9f61014052606060046101603761015c7340745803c2faa8e8402e2ae935933d07ca8f355c5afa61123b57600080fd5b601f3d1161124857600080fd5b6000506102005160005260206000f35b63cde699fa8114156112d757341561126f57600080fd5b600480356101405280602001356101605280604001356101805250606480356101a05280602001356101c05280604001356101e052506101e0516101c0516101a0516101805161016051610140516006580161543f565b610240526102405160005260206000f35b634515cef38114156120a757602354156112f057600080fd5b6001602355341561130057600080fd5b601e541561130d57600080fd5b6101405161016051600658016139a3565b610180526101a05261016052610140526101808051610140528060200151610160525073dac17f958d2ee523a2206206994597c13d831ec761018052732260fac5e5542a773aa44fbcfedf7c193bc2c5996101a05273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26101c05260168060c052602060c020546101e05260018160c052602060c02001546102005260028160c052602060c020015461022052506101203661024037600f6103605260011561184c576101e05161038052610200516103a052610220516103c0526103e060006003818352015b6101e06103e0516003811061140c57600080fd5b602002015160046103e0516003811061142457600080fd5b602002013581818301101561143857600080fd5b8082019050905061040052610400516101e06103e0516003811061145b57600080fd5b6020020152610400516103e0516003811061147557600080fd5b601660c052602060c02001555b81516001018083528114156113f8575b50506101e0516102a052610200516102c052610220516102e05264e8d4a510006103e0526402540be40061040052600161042052600054610440526101e0805164e8d4a5100080820282158284830414176114ec57600080fd5b80905090509050815250610380805164e8d4a51000808202821582848304141761151557600080fd5b8090509050905081525061046060016002818352015b6fffffffffffffffffffffffffffffffff61044051166103e0610460516003811061155557600080fd5b6020020151808202821582848304141761156e57600080fd5b80905090509050610480526101e0610460516003811061158d57600080fd5b60200201516104805180820282158284830414176115aa57600080fd5b80905090509050670de0b6b3a7640000808204905090506101e061046051600381106115d557600080fd5b602002015261038061046051600381106115ee57600080fd5b602002015161048051808202821582848304141761160b57600080fd5b80905090509050670de0b6b3a764000080820490509050610380610460516003811061163657600080fd5b60200201526104405160801c610440525b815160010180835281141561152b575b505061046060006003818352015b60006004610460516003811061167a57600080fd5b6020020135111561178557610180610460516003811061169957600080fd5b60200201513b6116a857600080fd5b6000600060646323b872dd61048052336104a052306104c052600461046051600381106116d457600080fd5b60200201356104e05261049c600061018061046051600381106116f657600080fd5b60200201515af161170657600080fd5b6101e0610460516003811061171a57600080fd5b6020020151610380610460516003811061173357600080fd5b60200201518082101561174557600080fd5b80820390509050610240610460516003811061176057600080fd5b6020020152600f61036051141561177e576104605161036052611785565b600e610360525b8151600101808352811415611665575b5050600f61036051186117a757600080fd5b60075461046052600061046051111561184457602061058060a463c7fab70861048052610140516104a052610160516104c052610380516104e0526103a051610500526103c0516105205261049c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61181557600080fd5b601f3d1161182257600080fd5b6000506105805161034052610460514210151561183f5760016007555b61184c565b601754610340525b60206104a060a463c7fab7086103a052610140516103c052610160516103e0526101e05161040052610200516104205261022051610440526103bc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6118a757600080fd5b601f3d116118b457600080fd5b6000506104a05161038052602061042060046318160ddd6103c0526103dc73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6118f257600080fd5b601f3d116118ff57600080fd5b600050610420516103a052600061034051111561196f576103a05161038051808202821582848304141761193257600080fd5b8090509050905061034051808061194857600080fd5b8204905090506103a0518082101561195f57600080fd5b80820390509050610300526119e6565b6101406103c0525b6103c0515160206103c051016103c0526103c06103c051101561199957611977565b610380516103e0526103e05160065801613ca8565b610440526103a06103c0525b6103c0515260206103c051036103c0526101406103c0511015156119dd576119ba565b61044051610300525b600061030051116119f657600080fd5b6000610340511115611f96576101406103c0525b6103c0515160206103c051016103c0526103c06103c0511015611a2c57611a0a565b610240516103e052610260516104005261028051610420526101e051610440526102005161046052610220516104805261048051610460516104405161042051610400516103e0516006580161543f565b6104e0526103a06103c0525b6103c0515260206103c051036103c0526101406103c051101515611aac57611a89565b6104e051610300518082028215828483041417611ac857600080fd5b809050905090506402540be400808204905090506001818183011015611aed57600080fd5b808201905090506103205261030080516103205180821015611b0e57600080fd5b808203905090508152506103a0805161030051818183011015611b3057600080fd5b80820190509050815250602061046060446340c10f196103c052336103e05261030051610400526103dc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af1611b7c57600080fd5b601f3d11611b8957600080fd5b6000506104605060006103c052620186a0610300511115611ed0576003610360511015611ed0576060366103e0376002546104405264e8d4a51000610460526402540be4006104805260016104a0526104c060006002818352015b6fffffffffffffffffffffffffffffffff61044051166104006104c05160028110611c0e57600080fd5b60200201526104405160801c610440525b8151600101808352811415611be4575b50506104c060006003818352015b610360516104c0511815611d63576104c0511515611c9d576103e080516102a05164e8d4a510008082028215828483041417611c7857600080fd5b80905090509050818183011015611c8e57600080fd5b80820190509050815250611d63565b6103e080516102a06104c05160038110611cb657600080fd5b60200201516104006104c051600180821015611cd157600080fd5b8082039050905060028110611ce557600080fd5b60200201518082028215828483041417611cfe57600080fd5b809050905090506104606104c05160038110611d1957600080fd5b60200201518082028215828483041417611d3257600080fd5b80905090509050670de0b6b3a764000080820490509050818183011015611d5857600080fd5b808201905090508152505b8151600101808352811415611c3d575b50506103e051610300518082028215828483041417611d9157600080fd5b809050905090506103a0518080611da757600080fd5b8204905090506103e0526103e051670de0b6b3a76400008082028215828483041417611dd257600080fd5b8090509050905060046103605160038110611dec57600080fd5b60200201356104606103605160038110611e0557600080fd5b60200201518082028215828483041417611e1e57600080fd5b80905090509050610300516102a06103605160038110611e3d57600080fd5b60200201518082028215828483041417611e5657600080fd5b809050905090506104606103605160038110611e7157600080fd5b60200201518082028215828483041417611e8a57600080fd5b809050905090506103a0518080611ea057600080fd5b82049050905080821015611eb357600080fd5b808203905090508080611ec557600080fd5b8204905090506103c0525b6101406103e0525b6103e0515160206103e051016103e0526103e06103e0511015611efa57611ed8565b610140516104005261016051610420526101e0516104405261020051610460526102205161048052610360516104a0526103c0516104c052610380516104e0526104e0516104c0516104a0516104805161046051610440516104205161040051600658016142cf565b6103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515611f8e57611f6b565b60005061200c565b61038051601755670de0b6b3a7640000601c55670de0b6b3a7640000601a55602061046060446340c10f196103c052336103e05261030051610400526103dc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af1611ff757600080fd5b601f3d1161200457600080fd5b600050610460505b6064356103005110151515612060576308c379a06103c05260206103e0526008610400527f536c697070616765000000000000000000000000000000000000000000000000610420526104005060646103dcfd5b606060046103c03761032051610420526103a05161044052337f96b486485420b963edd3fdec0b0195730035600feb7de6f544383d7950fa97ee60a06103c0a26000602355005b63ecb586a581141561243457602354156120c057600080fd5b600160235534156120d057600080fd5b73dac17f958d2ee523a2206206994597c13d831ec761014052732260fac5e5542a773aa44fbcfedf7c193bc2c5996101605273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261018052602061022060046318160ddd6101c0526101dc73c4ad29ba4b3c580e6d59105fff484999997675ff5afa61214e57600080fd5b601f3d1161215b57600080fd5b600050610220516101a052602061026060446379cc67906101c052336101e052600435610200526101dc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af16121a757600080fd5b601f3d116121b457600080fd5b6000506102605060168060c052602060c020546101c05260018160c052602060c02001546101e05260028160c052602060c0200154610200525060043560018082101561220057600080fd5b808203905090506102205261024060006003818352015b6101c0610240516003811061222b57600080fd5b602002015161022051808202821582848304141761224857600080fd5b809050905090506101a051808061225e57600080fd5b820490509050610260526024610240516003811061227b57600080fd5b602002013561026051101561228f57600080fd5b6101c061024051600381106122a357600080fd5b602002015161026051808210156122b957600080fd5b8082039050905061024051600381106122d157600080fd5b601660c052602060c0200155610260516101c061024051600381106122f557600080fd5b6020020152610140610240516003811061230e57600080fd5b60200201513b61231d57600080fd5b60006000604463a9059cbb61028052336102a052610260516102c05261029c6000610140610240516003811061235257600080fd5b60200201515af161236257600080fd5b8151600101808352811415612217575b505060175461024052610240516102405161022051808202821582848304141761239b57600080fd5b809050905090506101a05180806123b157600080fd5b820490509050808210156123c457600080fd5b808203905090506017556101c051610260526101e05161028052610200516102a0526101a051600435808210156123fa57600080fd5b808203905090506102c052337fd6cc314a0b1e3b2579f8e64248e82434072e8271290eef8ad0886709304195f56080610260a26000602355005b633883e1198114156124cd57341561244b57600080fd5b60643560011c1561245b57600080fd5b60206102206084633883e11961014052600480356101605280602001356101805280604001356101a052506064356101c05261015c7340745803c2faa8e8402e2ae935933d07ca8f355c5afa6124b057600080fd5b601f3d116124bd57600080fd5b6000506102205160005260206000f35b634fb08c5e8114156125f65734156124e457600080fd5b600658016139a3565b610140526101605261014080516101805280602001516101a052506101405161016051610180516101a051610180516101c0526101a0516101e0526040600461020037600161024052600061026052610260516102405161022051610200516101e0516101c0516006580161567c565b6102c0526102e052610300526103205261034052610360526101a0526101805261016052610140526102c08080808051610380525050602081019050808080516103a0525050602081019050808080516103c05250506020810190508080808080516103e05250506020810190508080805161040052505060208101905080808051610420525050505050506103805160005260206000f35b63f1dc3cc9811415612a4b576023541561260f57600080fd5b6001602355341561261f57600080fd5b601e541561262c57600080fd5b6101405161016051600658016139a3565b610180526101a05261016052610140526101808051610140528060200151610160525060c03661018037600754610240526101405161016051610180516101a0516101c0516101e05161020051610220516102405161014051610260526101605161028052604060046102a037600061024051116102e052600161030052610300516102e0516102c0516102a05161028051610260516006580161567c565b61036052610380526103a0526103c0526103e052610400526102405261022052610200526101e0526101c0526101a05261018052610160526101405261036080808080516104205250506020810190508080805161044052505060208101905080808051610460525050602081019050808080808051610480525050602081019050808080516104a0525050602081019050808080516104c05250505050505061042080516101805280602001516101c05280604001516101a0528060600180516101e05280602001516102005280604001516102205250506044356101805110151515612809576308c379a06102605260206102805260086102a0527f536c6970706167650000000000000000000000000000000000000000000000006102c0526102a050606461027cfd5b610240514210151561281b5760016007555b6024356003811061282b57600080fd5b601660c052602060c020018054610180518082101561284957600080fd5b80820390509050815550602061030060446379cc67906102605233610280526004356102a05261027c600073c4ad29ba4b3c580e6d59105fff484999997675ff5af161289457600080fd5b601f3d116128a157600080fd5b600050610300506101405161016051610180516101a0516101c0516101e051610200516102205161024051610140516102605261016051610280526101e0516102a052610200516102c052610220516102e052602435610300526101c051610320526101a051610340526103405161032051610300516102e0516102c0516102a0516102805161026051600658016142cf565b6102405261022052610200526101e0526101c0526101a05261018052610160526101405260005073dac17f958d2ee523a2206206994597c13d831ec761026052732260fac5e5542a773aa44fbcfedf7c193bc2c5996102805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102a052610260602435600381106129b957600080fd5b60200201513b6129c857600080fd5b60006000604463a9059cbb6102c052336102e05261018051610300526102dc6000610260602435600381106129fc57600080fd5b60200201515af1612a0c57600080fd5b604060046102c0376101805161030052337f5ad056f2e28a8cec232015406b843668c1e36cda598127ec3b8c59b8c72773a060606102c0a26000602355005b63c93f49e8811415612a875760235415612a6457600080fd5b60016023553415612a7457600080fd5b60065801613de9565b6000506000602355005b635e248072811415612cee573415612a9e57600080fd5b6018543314612aac57600080fd5b6006546201517f818183011015612ac257600080fd5b808201905090504211612ad457600080fd5b426201517f818183011015612ae857600080fd5b8082019050905060443511612afc57600080fd5b6101405161016051600658016139a3565b610180526101a0526101605261014052610180805161014052806020015161016052506101405160801b6101805261016051610180511761018052600060043511612b5757600080fd5b63a0eebb0160043510612b6957600080fd5b6402540be3ff60243511612b7c57600080fd5b662386f26fc1000160243510612b9157600080fd5b670de0b6b3a76400006004358082028215828483041417612bb157600080fd5b80905090509050610140518080612bc757600080fd5b8204905090506101a052678ac7230489e800016101a05110612be857600080fd5b67016345785d89ffff6101a05111612bff57600080fd5b670de0b6b3a76400006024358082028215828483041417612c1f57600080fd5b80905090509050610160518080612c3557600080fd5b8204905090506101a052678ac7230489e800016101a05110612c5657600080fd5b67016345785d89ffff6101a05111612c6d57600080fd5b610180516004554260065560043560801b6101c0526024356101c051176101c0526044356007556101c051600555610140516101e052600435610200526101605161022052602435610240524261026052604435610280527fe35f0559b0642164e286b30df2077ec3a05426617a25db7578fd20ba39a6cd0560c06101e0a1005b63244c7c2e811415612db3573415612d0557600080fd5b6018543314612d1357600080fd5b6101405161016051600658016139a3565b610180526101a0526101605261014052610180805161014052806020015161016052506101405160801b610180526101605161018051176101805261018051600455610180516005554260065542600755610140516101a052610160516101c052426101e0527f5f0e7fba3d100c9e19446e1c92fe436f0a9a22fe99669360e4fdd6d3de2fc28460606101a0a1005b63a43c3351811415612fac573415612dca57600080fd5b6018543314612dd857600080fd5b60215415612de557600080fd5b60e06004610140376402540be401610160511015612e14576207a11f6101605111612e0f57600080fd5b612e1c565b601154610160525b6402540be400610140511115612e3457601054610140525b61016051610140511115612e4757600080fd5b6402540be400610180511115612e5f57601254610180525b670de0b6b3a76400006101a0511015612e875760006101a05111612e8257600080fd5b612e8f565b600a546101a0525b670de0b6b3a76400006101c0511115612eaa576008546101c0525b670de0b6b3a76400006101e0511115612ec557600c546101e0525b62093a80610200511015612ee85760006102005111612ee357600080fd5b612ef0565b600e54610200525b426203f480818183011015612f0457600080fd5b8082019050905061022052610220516021556101805160155561014051601355610160516014556101a051600b556101c0516009556101e051600d5561020051600f556101805161024052610140516102605261016051610280526101a0516102a0526101c0516102c0526101e0516102e0526102005161030052610220517f913fde9a37e1f8ab67876a4d0ce80790d764fcfc5692f4529526df9c6bdde55360e0610240a2005b632a7dd7cd8114156130f05760235415612fc557600080fd5b60016023553415612fd557600080fd5b6018543314612fe357600080fd5b602154421015612ff257600080fd5b60006021541861300157600080fd5b600060215560155461014052610140516012541815613036576101405160065801613de9565b61014052600050610140516012555b60135461016052610160516010556014546101805261018051601155600b546101a0526101a051600a556009546101c0526101c051600855600d546101e0526101e051600c55600f546102005261020051600e556101405161022052610160516102405261018051610260526101a051610280526101c0516102a0526101e0516102c052610200516102e0527f1c65bbdc939f346e5d6f0bde1f072819947438d4fc7b182cc59c2f6dc550408760e0610220a16000602355005b63226840fb81141561311c57341561310757600080fd5b601854331461311557600080fd5b6000602155005b636b441a408114156131b957341561313357600080fd5b60043560a01c1561314357600080fd5b601854331461315157600080fd5b6020541561315e57600080fd5b426203f48081818301101561317257600080fd5b808201905090506101405261014051602055600435601955600435610140517f181aa3aa17d4cbf99265dd4443eba009433d3cde79d60164fde1d1a192beb93560006000a3005b636a1c05ae81141561323b5734156131d057600080fd5b60185433146131de57600080fd5b6020544210156131ed57600080fd5b6000602054186131fc57600080fd5b60006020556019546101405261014051601855610140517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c60006000a2005b6386fbf19381141561326757341561325257600080fd5b601854331461326057600080fd5b6000602055005b63e36988538114156132a157341561327e57600080fd5b601854331461328c57600080fd5b42601f541161329a57600080fd5b6001601e55005b633046f9728114156132cd5734156132b857600080fd5b60185433146132c657600080fd5b6000601e55005b637242e52481141561330a5734156132e457600080fd5b60043560a01c156132f457600080fd5b601854331461330257600080fd5b600435602255005b636112c74781141561332d57341561332157600080fd5b60035460005260206000f35b63204fe3d581141561335057341561334457600080fd5b60045460005260206000f35b63f30cfad581141561337357341561336757600080fd5b60055460005260206000f35b63e89876ff81141561339657341561338a57600080fd5b60065460005260206000f35b63f9ed95978114156133b95734156133ad57600080fd5b60075460005260206000f35b6349fe9e778114156133dc5734156133d057600080fd5b60085460005260206000f35b63727ced578114156133ff5734156133f357600080fd5b60095460005260206000f35b6372d4f0e281141561342257341561341657600080fd5b600a5460005260206000f35b63d7c3dcbe81141561344557341561343957600080fd5b600b5460005260206000f35b63083812e581141561346857341561345c57600080fd5b600c5460005260206000f35b634ea12c7d81141561348b57341561347f57600080fd5b600d5460005260206000f35b63662b62748114156134ae5734156134a257600080fd5b600e5460005260206000f35b630c5e23d48114156134d15734156134c557600080fd5b600f5460005260206000f35b6392526c0c8114156134f45734156134e857600080fd5b60105460005260206000f35b63ee8de67581141561351757341561350b57600080fd5b60115460005260206000f35b63fee3f7f981141561353a57341561352e57600080fd5b60125460005260206000f35b637cf9aedc81141561355d57341561355157600080fd5b60135460005260206000f35b637d1b060c81141561358057341561357457600080fd5b60145460005260206000f35b63e38244628114156135a357341561359757600080fd5b60155460005260206000f35b634903b0d18114156135df5734156135ba57600080fd5b600435600381106135ca57600080fd5b601660c052602060c020015460005260206000f35b630f529ba28114156136025734156135f657600080fd5b60175460005260206000f35b638da5cb5b81141561362557341561361957600080fd5b60185460005260206000f35b631ec0cdc181141561364857341561363c57600080fd5b60195460005260206000f35b637ba1a74d81141561366b57341561365f57600080fd5b601a5460005260206000f35b630b7b594b81141561368e57341561368257600080fd5b601b5460005260206000f35b630c46b72a8114156136b15734156136a557600080fd5b601c5460005260206000f35b639c868ac08114156136d45734156136c857600080fd5b601e5460005260206000f35b632a4268968114156136f75734156136eb57600080fd5b601f5460005260206000f35b63e0a0b58681141561371a57341561370e57600080fd5b60205460005260206000f35b63405e28f881141561373d57341561373157600080fd5b60215460005260206000f35b636e42e4d281141561376057341561375457600080fd5b60225460005260206000f35b505b005b6101805261014052610160526002610140511061378057600080fd5b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8061014051600160ff1b81106137c657600080fd5b80820282158284830514176137da57600080fd5b8090509050905060008112156137f85761016051816000031c6137ff565b61016051811b5b90501660005260005161018051565b6101405260168060c052602060c020546101605260018160c052602060c02001546101805260028160c052602060c02001546101a052506000546101c05264e8d4a510006101e0526402540be40061020052600161022052610160805164e8d4a51000808202821582848304141761388557600080fd5b8090509050905081525061024060016002818352015b6fffffffffffffffffffffffffffffffff6101c051166101e061024051600381106138c557600080fd5b602002015180820282158284830414176138de57600080fd5b809050905090506102605261016061024051600381106138fd57600080fd5b602002015161026051808202821582848304141761391a57600080fd5b80905090509050670de0b6b3a764000080820490509050610160610240516003811061394557600080fd5b60200201526101c05160801c6101c0525b815160010180835281141561389b575b50506060610240525b6000610240511115156139815761399d565b602061024051036101600151602061024051036102405261396f565b61014051565b6101405260075461016052600554610180526fffffffffffffffffffffffffffffffff61018051166101a0526101805160801c6101c05261016051421015613b50576004546101e0526006546102005261016080516102005180821015613a0957600080fd5b80820390509050815250426102005180821015613a2557600080fd5b8082039050905061020052610160516102005180821015613a4557600080fd5b80820390509050610220526101e05160801c610220518082028215828483041417613a6f57600080fd5b809050905090506101c051610200518082028215828483041417613a9257600080fd5b80905090509050818183011015613aa857600080fd5b80820190509050610160518080613abe57600080fd5b8204905090506101c0526fffffffffffffffffffffffffffffffff6101e05116610220518082028215828483041417613af657600080fd5b809050905090506101a051610200518082028215828483041417613b1957600080fd5b80905090509050818183011015613b2f57600080fd5b80820190509050610160518080613b4557600080fd5b8204905090506101a0525b6101c051610200526101a0516102205260406101e0525b60006101e051111515613b7957613b95565b60206101e05103610200015160206101e051036101e052613b67565b61014051565b6101a05261014052610160526101805260206102c0608463fa18042d6101e052610140516102005261016051610220526101805161024052600a54610260526101fc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa613bfd57600080fd5b601f3d11613c0a57600080fd5b6000506102c0516101c0526010546101c0518082028215828483041417613c3057600080fd5b80905090509050601154670de0b6b3a76400006101c05180821015613c5457600080fd5b808203905090508082028215828483041417613c6f57600080fd5b80905090509050818183011015613c8557600080fd5b80820190509050670de0b6b3a7640000808204905090506000526000516101a051565b61016052610140526060366101803761014051600380820490509050610180526000546101e05261020060016002818352015b61014051670de0b6b3a76400008082028215828483041417613cfc57600080fd5b8090509050905060036fffffffffffffffffffffffffffffffff6101e051168082028215828483041417613d2f57600080fd5b809050905090508080613d4157600080fd5b8204905090506101806102005160038110613d5b57600080fd5b60200201526101e05160801c6101e0525b8151600101808352811415613cdb575b505060206102c0606463bad1dc266102005261018051610220526101a051610240526101c0516102605261021c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa613dc957600080fd5b601f3d11613dd657600080fd5b6000506102c05160005260005161016051565b61014052610140516101605161018051600658016139a3565b6101a0526101c0526101805261016052610140526101a080516101605280602001516101805250601a546101a052601b546101c05273dac17f958d2ee523a2206206994597c13d831ec76101e052732260fac5e5542a773aa44fbcfedf7c193bc2c5996102005273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26102205261024060006003818352015b60206102e060246370a0823161026052306102805261027c6101e06102405160038110613eba57600080fd5b60200201515afa613eca57600080fd5b601f3d11613ed757600080fd5b6000506102e0516102405160038110613eef57600080fd5b601660c052602060c02001555b8151600101808352811415613e8e575b5050601c54610240526101c0516101a05111156140cc576101a0516101c05180821015613f3857600080fd5b808203905090506012548082028215828483041417613f5657600080fd5b809050905090506404a817c800808204905090506102605260006102605111156140cc576022546102805261024051670de0b6b3a76400008082028215828483041417613fa257600080fd5b80905090509050610240516102605180821015613fbe57600080fd5b808203905090508080613fd057600080fd5b820490509050670de0b6b3a764000080821015613fec57600080fd5b808203905090506102a05260206103806044636962f8456102e05261028051610300526102a051610320526102fc600073c4ad29ba4b3c580e6d59105fff484999997675ff5af161403c57600080fd5b601f3d1161404957600080fd5b600050610380516102c0526101a08051610260516002808202821582848304141761407357600080fd5b809050905090508082101561408757600080fd5b808203905090508152506101a051601a556102c0516102e052610280517f6059a38198b1dc42b3791087d1ff0fbd72b3179553c25f678cd246f52ffaaf5960206102e0a25b60206102e060046318160ddd6102805261029c73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6140ff57600080fd5b601f3d1161410c57600080fd5b6000506102e05161026052602061040060a463c7fab70861030052610160516103205261018051610340526101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516006580161380e565b6102a0526102c0526102e05261028052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526102a080516103605280602001516103805280604001516103a0525061031c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6141e357600080fd5b601f3d116141f057600080fd5b600050610400516102805261028051601755670de0b6b3a76400006101405161016051610180516101a0516101c0516101e0516102005161022051610240516102605161028051610280516102a0526102a05160065801613ca8565b6103005261028052610260526102405261022052610200526101e0526101c0526101a05261018052610160526101405261030051808202821582848304141761429457600080fd5b809050905090506102605180806142aa57600080fd5b820490509050601c556101c0516101a05111156142c9576101a051601b555b61014051565b610240526101405261016052610180526101a0526101c0526101e052610200526102205261016036610260376001546103c0526103e060006002818352015b6fffffffffffffffffffffffffffffffff6103c051166102606103e0516002811061433857600080fd5b60200201526103c05160801c6103c0525b815160010180835281141561430e575b50506003546103e0526002546103c05261040060006002818352015b6fffffffffffffffffffffffffffffffff6103c051166102a0610400516002811061439f57600080fd5b60200201526103c05160801c6103c0525b8151600101808352811415614375575b5050426103e051101561460557600e546104005260206104e0604463571bae3f61044052426103e051808210156143f657600080fd5b80820390509050670de0b6b3a7640000808202821582848304141761441a57600080fd5b8090509050905061040051808061443057600080fd5b820490509050610460526402540be4006104805261045c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61446757600080fd5b601f3d1161447457600080fd5b6000506104e0516104205260006103c05261044060006002818352015b6102a061044051600281106144a557600080fd5b6020020151670de0b6b3a764000061042051808210156144c457600080fd5b8082039050905080820282158284830414176144df57600080fd5b8090509050905061026061044051600281106144fa57600080fd5b602002015161042051808202821582848304141761451757600080fd5b8090509050905081818301101561452d57600080fd5b80820190509050670de0b6b3a764000080820490509050610260610440516002811061455857600080fd5b60200201525b8151600101808352811415614491575b505061044060006002818352015b6103c05160801b6103c0526102606001610440518082101561459d57600080fd5b80820390509050600281106145b157600080fd5b6020020151610460526fffffffffffffffffffffffffffffffff61046051106145d957600080fd5b6103c05161046051176103c0525b815160010180835281141561457c575b50506103c051600155426003555b610220516104005261022051151561468b57602061052060a463c7fab708610420526101405161044052610160516104605261018051610480526101a0516104a0526101c0516104c05261043c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61467257600080fd5b601f3d1161467f57600080fd5b60005061052051610400525b6000546103c05261042060006002818352015b6fffffffffffffffffffffffffffffffff6103c051166102e061042051600281106146c857600080fd5b60200201526103c05160801c6103c0525b815160010180835281141561469e575b505060006102005111156147cb5760006101e051111561473b57610200516102a06101e05160018082101561471d57600080fd5b808203905090506002811061473157600080fd5b60200201526147c6565b61042060006002818352015b6102a0610420516002811061475b57600080fd5b6020020151670de0b6b3a7640000808202821582848304141761477d57600080fd5b8090509050905061020051808061479357600080fd5b8204905090506102a061042051600281106147ad57600080fd5b60200201525b8151600101808352811415614747575b50505b614976565b61018051610420526101a051610440526101c0516104605261042051620f4240808204905090506104805261042080516104805181818301101561480e57600080fd5b808201905090508152506104a060006002818352015b6102e06104a0516002811061483857600080fd5b602002015161048051808202821582848304141761485557600080fd5b809050905090506101806104a051600181818301101561487457600080fd5b808201905090506003811061488857600080fd5b6020020151602061060060e46336bc88556104c052610140516104e052610160516105005261042051610520526104405161054052610460516105605261040051610580526104a05160018181830110156148e257600080fd5b808201905090506105a0526104dc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61491057600080fd5b601f3d1161491d57600080fd5b600050610600518082101561493157600080fd5b80820390509050808061494357600080fd5b8204905090506102a06104a0516002811061495d57600080fd5b60200201525b8151600101808352811415614824575b50505b60006103c05261042060006002818352015b6103c05160801b6103c0526102a0600161042051808210156149a957600080fd5b80820390509050600281106149bd57600080fd5b6020020151610440526fffffffffffffffffffffffffffffffff61044051106149e557600080fd5b6103c05161044051176103c0525b8151600101808352811415614988575b50506103c05160025560206104a060046318160ddd6104405261045c73c4ad29ba4b3c580e6d59105fff484999997675ff5afa614a3f57600080fd5b601f3d11614a4c57600080fd5b6000506104a05161042052601a5461044052601c5461046052610400516003808204905090506103205261048060006002818352015b61040051670de0b6b3a76400008082028215828483041417614aa357600080fd5b8090509050905060036102e06104805160028110614ac057600080fd5b60200201518082028215828483041417614ad957600080fd5b809050905090508080614aeb57600080fd5b820490509050610320610480516001818183011015614b0957600080fd5b8082019050905060038110614b1d57600080fd5b60200201525b8151600101808352811415614a82575b5050670de0b6b3a764000061048052670de0b6b3a76400006104a0526000610460511115614cb95760206105a0606463bad1dc266104e0526103205161050052610340516105205261036051610540526104fc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa614ba657600080fd5b601f3d11614bb357600080fd5b6000506105a0516104c052670de0b6b3a76400006104c0518082028215828483041417614bdf57600080fd5b80905090509050610420518080614bf557600080fd5b8204905090506104a052610440516104a0518082028215828483041417614c1b57600080fd5b80905090509050610460518080614c3157600080fd5b820490509050610480526007546104e052610460516104a0511015614c5a576104e05115614c5d565b60005b15614ca7576308c379a0610500526020610520526004610540527f4c6f7373000000000000000000000000000000000000000000000000000000006105605261054050606461051cfd5b60016104e0511415614cb95760006007555b61048051601a55601d546104c0526104c0511515614d4f576104805160026008548082028215828483041417614cee57600080fd5b80905090509050818183011015614d0457600080fd5b808201905090506104a05160028082028215828483041417614d2557600080fd5b80905090509050670de0b6b3a764000080821015614d4257600080fd5b8082039050905011614d52565b60005b15614d635760016104c0526001601d555b6104c0511561542b57600c546104e05260006105005261052060006002818352015b6102606105205160028110614d9957600080fd5b6020020151670de0b6b3a76400008082028215828483041417614dbb57600080fd5b809050905090506102e06105205160028110614dd657600080fd5b60200201518080614de657600080fd5b82049050905061054052670de0b6b3a7640000610540511115614e2d576105408051670de0b6b3a764000080821015614e1e57600080fd5b80820390509050815250614e53565b670de0b6b3a76400006105405180821015614e4757600080fd5b80820390509050610540525b61050080517001000000000000000000000000000000006105405110614e7857600080fd5b6002610540510a818183011015614e8e57600080fd5b808201905090508152505b8151600101808352811415614d85575b50507001000000000000000000000000000000006104e05110614ecb57600080fd5b60026104e0510a610500511115614ee85760006104605111614eeb565b60005b1561542b5760206105a06024634e60b1416105205261050051670de0b6b3a7640000808204905090506105405261053c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa614f3b57600080fd5b601f3d11614f4857600080fd5b6000506105a0516105005261052060006002818352015b6102e06105205160028110614f7357600080fd5b6020020151610500516104e05180821015614f8d57600080fd5b808203905090508082028215828483041417614fa857600080fd5b809050905090506104e0516102606105205160028110614fc757600080fd5b60200201518082028215828483041417614fe057600080fd5b80905090509050818183011015614ff657600080fd5b8082019050905061050051808061500c57600080fd5b820490509050610380610520516002811061502657600080fd5b60200201525b8151600101808352811415614f5f575b505061018051610320526101a051610340526101c0516103605261052060006002818352015b61018061052051600181818301101561507a57600080fd5b808201905090506003811061508e57600080fd5b602002015161038061052051600281106150a757600080fd5b602002015180820282158284830414176150c057600080fd5b809050905090506102e061052051600281106150db57600080fd5b602002015180806150eb57600080fd5b82049050905061032061052051600181818301101561510957600080fd5b808201905090506003811061511d57600080fd5b60200201525b8151600101808352811415615062575b5050602061064060a463c7fab7086105405261014051610560526101605161058052610320516105a052610340516105c052610360516105e05261055c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61519057600080fd5b601f3d1161519d57600080fd5b6000506106405161052052610520516003808204905090506103205261054060006002818352015b61052051670de0b6b3a764000080820282158284830414176151e657600080fd5b809050905090506003610380610540516002811061520357600080fd5b6020020151808202821582848304141761521c57600080fd5b80905090509050808061522e57600080fd5b82049050905061032061054051600181818301101561524c57600080fd5b808201905090506003811061526057600080fd5b60200201525b81516001018083528114156151c5575b5050670de0b6b3a76400006020610600606463bad1dc266105405261032051610560526103405161058052610360516105a05261055c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa6152cc57600080fd5b601f3d116152d957600080fd5b6000506106005180820282158284830414176152f457600080fd5b8090509050905061042051808061530a57600080fd5b82049050905061046052670de0b6b3a764000061046051111561536f5761048051600261046051808202821582848304141761534557600080fd5b80905090509050670de0b6b3a76400008082101561536257600080fd5b8082039050905011615372565b60005b156154255760006103c05261054060006002818352015b6103c05160801b6103c052610380600161054051808210156153aa57600080fd5b80820390509050600281106153be57600080fd5b6020020151610560526fffffffffffffffffffffffffffffffff61056051106153e657600080fd5b6103c05161056051176103c0525b8151600101808352811415615389575b50506103c0516000556105205160175561046051601c55610240515661542b565b6000601d555b610400516017556104a051601c5561024051565b610200526101405261016052610180526101a0526101c0526101e0526101405161016051610180516101a0516101c0516101e05161020051610220516101a051610240526101c051610260526101e0516102805261028051610260516102405160065801613b9b565b6102e05261022052610200526101e0526101c0526101a0526101805261016052610140526102e051600380820282158284830414176154e657600080fd5b809050905090506008808204905090506102205260006102405261028060006003818352015b6020610280510261014001516102605261024080516102605181818301101561553457600080fd5b808201905090508152505b815160010180835281141561550c575b505061024051600380820490509050610260526000610280526102c060006003818352015b60206102c0510261014001516102a052610260516102a05111156155d15761028080516102a05161026051808210156155ac57600080fd5b808203905090508181830110156155c257600080fd5b8082019050905081525061560c565b6102808051610260516102a051808210156155eb57600080fd5b8082039050905081818301101561560157600080fd5b808201905090508152505b8151600101808352811415615574575b50506102205161028051808202821582848304141761563a57600080fd5b8090509050905061024051808061565057600080fd5b820490509050620186a081818301101561566957600080fd5b8082019050905060005260005161020051565b610200526101405261016052610180526101a0526101c0526101e05260206102a060046318160ddd6102405261025c73c4ad29ba4b3c580e6d59105fff484999997675ff5afa6156cb57600080fd5b601f3d116156d857600080fd5b6000506102a05161022052610220516101805111156156f657600080fd5b60036101a0511061570657600080fd5b60168060c052602060c020546102405260018160c052602060c02001546102605260028160c052602060c0200154610280525064e8d4a510006102a0526402540be4006102c05260016102e0526000610300526c0c9f2c9cd04674edea40000000610320526001156158c557600054610340526102a0805161024051808202821582848304141761579657600080fd5b8090509050905081525061036060016002818352015b6fffffffffffffffffffffffffffffffff610340511661038052610360516101a051141561581157610380516102a06101a051600381106157ec57600080fd5b6020020151808202821582848304141761580557600080fd5b80905090509050610320525b6102a0610360516003811061582557600080fd5b6020020151610240610360516003811061583e57600080fd5b6020020151808202821582848304141761585757600080fd5b8090509050905061038051808202821582848304141761587657600080fd5b80905090509050670de0b6b3a7640000808204905090506102a061036051600381106158a157600080fd5b60200201526103405160801c610340525b81516001018083528114156157ac575b50505b6101c0511561594657602061044060a463c7fab70861034052610140516103605261016051610380526102a0516103a0526102c0516103c0526102e0516103e05261035c738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa61592957600080fd5b601f3d1161593657600080fd5b600050610440516103005261594e565b601754610300525b6103005161034052610140610380525b610380515160206103805101610380526103806103805110156159805761595e565b6102a0516103a0526102c0516103c0526102e0516103e0526103e0516103c0516103a05160065801613b9b565b61044052610360610380525b61038051526020610380510361038052610140610380511015156159dc576159b9565b610440516103605261018051610340518082028215828483041417615a0057600080fd5b80905090509050610220518080615a1657600080fd5b8204905090506103805261034080516103805161036051610380518082028215828483041417615a4557600080fd5b809050905090506404a817c800808204905090506001818183011015615a6a57600080fd5b8082019050905080821015615a7e57600080fd5b8082039050905080821015615a9257600080fd5b80820390509050815250602061050060e46336bc88556103c052610140516103e05261016051610400526102a051610420526102c051610440526102e0516104605261034051610480526101a0516104a0526103dc738f68f4810cce3194b6cb6f3d50fa58c2c9bdd1d55afa615b0757600080fd5b601f3d11615b1457600080fd5b600050610500516103a0526102a06101a05160038110615b3357600080fd5b60200201516103a05180821015615b4957600080fd5b80820390509050670de0b6b3a76400008082028215828483041417615b6d57600080fd5b80905090509050610320518080615b8357600080fd5b8204905090506103c0526103a0516102a06101a05160038110615ba557600080fd5b602002015260006103e0526101e05115615bdd57620186a06103c0511115615bd557620186a06101805111615bd8565b60005b615be0565b60005b15615ef75760006104005264e8d4a51000610420526402540be40061044052600161046052604036610480376002546104c0526104e060006002818352015b6fffffffffffffffffffffffffffffffff6104c051166104806104e05160028110615c4957600080fd5b60200201526104c05160801c6104c0525b8151600101808352811415615c1f575b50506104e060006003818352015b6101a0516104e0511815615d9e576104e0511515615cd85761040080516102405164e8d4a510008082028215828483041417615cb357600080fd5b80905090509050818183011015615cc957600080fd5b80820190509050815250615d9e565b61040080516102406104e05160038110615cf157600080fd5b60200201516104806104e051600180821015615d0c57600080fd5b8082039050905060028110615d2057600080fd5b60200201518082028215828483041417615d3957600080fd5b809050905090506104206104e05160038110615d5457600080fd5b60200201518082028215828483041417615d6d57600080fd5b80905090509050670de0b6b3a764000080820490509050818183011015615d9357600080fd5b808201905090508152505b8151600101808352811415615c78575b505061040051610380518082028215828483041417615dcc57600080fd5b80905090509050610300518080615de257600080fd5b8204905090506104005261040051670de0b6b3a76400008082028215828483041417615e0d57600080fd5b809050905090506103c0516104206101a05160038110615e2c57600080fd5b60200201518082028215828483041417615e4557600080fd5b80905090509050610380516102406101a05160038110615e6457600080fd5b60200201518082028215828483041417615e7d57600080fd5b809050905090506104206101a05160038110615e9857600080fd5b60200201518082028215828483041417615eb157600080fd5b80905090509050610300518080615ec757600080fd5b82049050905080821015615eda57600080fd5b808203905090508080615eec57600080fd5b8204905090506103e0525b6104c06103c05181526103e0518160200152610340518160400152806060016102a05181526102c05181602001526102e0518160400152505060c0610580525b600061058051111515615f4957615f65565b602061058051036104c001516020610580510361058052615f37565b6102005156
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67000000000000000000000000ecb456ea5365865ebab8a2661b0c503410e9b347000000000000000000000000000000000000000000000000000000000000d2f0000000000000000000000000000000000000000000000000000c6f3b40b6c0000000000000000000000000000000000000000000000000000000000000a7d8c00000000000000000000000000000000000000000000000000000000002aea540000000000000000000000000000000000000000000000000000001d1a94a20000000000000000000000000000000000000000000000000000001c6bf526340000000000000000000000000000000000000000000000000000001bda703f0a000000000000000000000000000000000000000000000000000000000012a05f20000000000000000000000000000000000000000000000000000000000000002580000000000000000000000000000000000000000000006e514c561b9fec00000000000000000000000000000000000000000000000000069eff91234645c0000
-----Decoded View---------------
Arg [0] : owner (address): 0xbabe61887f1de2713c6f97e567623453d3C79f67
Arg [1] : admin_fee_receiver (address): 0xeCb456EA5365865EbAb8a2661B0c503410e9B347
Arg [2] : A (uint256): 54000
Arg [3] : gamma (uint256): 3500000000000000
Arg [4] : mid_fee (uint256): 11000000
Arg [5] : out_fee (uint256): 45000000
Arg [6] : allowed_extra_profit (uint256): 2000000000000
Arg [7] : fee_gamma (uint256): 500000000000000
Arg [8] : adjustment_step (uint256): 490000000000000
Arg [9] : admin_fee (uint256): 5000000000
Arg [10] : ma_half_time (uint256): 600
Arg [11] : initial_prices (uint256[2]): 32560000000000000000000,1954200000000000000000
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 000000000000000000000000babe61887f1de2713c6f97e567623453d3c79f67
Arg [1] : 000000000000000000000000ecb456ea5365865ebab8a2661b0c503410e9b347
Arg [2] : 000000000000000000000000000000000000000000000000000000000000d2f0
Arg [3] : 000000000000000000000000000000000000000000000000000c6f3b40b6c000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000a7d8c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000002aea540
Arg [6] : 000000000000000000000000000000000000000000000000000001d1a94a2000
Arg [7] : 0000000000000000000000000000000000000000000000000001c6bf52634000
Arg [8] : 0000000000000000000000000000000000000000000000000001bda703f0a000
Arg [9] : 000000000000000000000000000000000000000000000000000000012a05f200
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000258
Arg [11] : 0000000000000000000000000000000000000000000006e514c561b9fec00000
Arg [12] : 000000000000000000000000000000000000000000000069eff91234645c0000Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ETH 33.42% $98,542 68.08 $6,708,738.87 ETH 33.38% $1 6,687,601.3969 $6,700,976.6 ETH 33.20% $3,320.05 2,007.1594 $6,663,878.74 ETH Ether (ETH)<0.01% $3,320.05 0.0839 $278.46 ETH <0.01% $6.57 0.5 $3.29 ETH <0.01% $0.028521 50.0029 $1.43 ETH <0.01% $0.001008 1,000 $1.01 ETH <0.01% $0.006154 40 $0.2461 POL <0.01% $0.48385 0.0017 $0.000823 Loading...Loading[ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.SignIn
Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.