From eb25c32fa7d1010909a333dc24b1264030b0b700 Mon Sep 17 00:00:00 2001 From: Benjamin Scholtz Date: Fri, 16 Jul 2021 12:22:53 +0200 Subject: [PATCH] Ben/notebook viz generation (#103) * Update viz * Cherrypick text updates * Update notebooks --- ..._validator_revenue_and_profit_yields.ipynb | 26 +- ..._network_issuance_and_inflation_rate.ipynb | 40 +- .../notebooks/visualizations/__init__.py | 1216 ++++++++++------- ...h_simulator.py => eth_supply_simulator.py} | 14 +- .../notebooks/visualizations/plotly_theme.py | 8 +- .../validator_environment_yield_contour.png | Bin 80840 -> 81040 bytes ...h_simulation.py => eth_supply_analysis.py} | 0 7 files changed, 781 insertions(+), 523 deletions(-) rename experiments/notebooks/visualizations/{peak_eth_simulator.py => eth_supply_simulator.py} (94%) rename experiments/templates/{peak_eth_simulation.py => eth_supply_analysis.py} (100%) diff --git a/experiments/notebooks/2_validator_revenue_and_profit_yields.ipynb b/experiments/notebooks/2_validator_revenue_and_profit_yields.ipynb index b3147352..717003a7 100644 --- a/experiments/notebooks/2_validator_revenue_and_profit_yields.ipynb +++ b/experiments/notebooks/2_validator_revenue_and_profit_yields.ipynb @@ -78,6 +78,22 @@ "from model.state_variables import eth_staked, eth_supply" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "31f4b5c9-07cb-44ea-8bb0-15cd478df178", + "metadata": {}, + "outputs": [], + "source": [ + "%%html\n", + "" + ] + }, { "cell_type": "code", "execution_count": null, @@ -140,7 +156,7 @@ "\n", "The third chart (\"Revenue or Profit Yields Over Time\") depicts revenue yields or profit yields (choose using button selector) over the chosen time frame and across the three adoption scenarios (i.e. implied ETH staked over time), and ETH price range. In simple terms, this chart depicts how validators can expect the yield dynamics to change over different adoption and price scenarios. The higher the adoption, the lower both revenue and profit yields. The higher the price, the higher the profit yields.\n", "\n", - "The fourth chart (\"Cumulative Average Revenue or Profit Yields Over Time\") depicts the cumulative average revenue yields or profit yields (choose via button selector) over the chosen time frame, and across the three adoption scenarios (i.e. implied ETH staked over time) and ETH price range. In simple terms, this chart depicts the effective yields a validator can expect over the respective time horizons if they start validating today. The higher the adoption, the lower both revenue and profit yields. The higher the price, the higher the profit yields." + "The fourth chart (\"Cumulative Revenue or Profit Yields Over Time\") depicts the cumulative revenue yields or profit yields (choose via button selector) over the chosen time frame, and across the three adoption scenarios (i.e. implied ETH staked over time) and ETH price range. In simple terms, this chart depicts the effective yields a validator can expect over the respective time horizons if they start validating today. The higher the adoption, the lower both revenue and profit yields. The higher the price, the higher the profit yields." ] }, { @@ -195,7 +211,7 @@ "metadata": {}, "outputs": [], "source": [ - "visualizations.plot_revenue_profit_yields_over_time_foreach_subset_subplots(\n", + "visualizations.plot_yields_per_subset_subplots(\n", " df_1,\n", " subplot_titles=['Normal Adoption', 'Low Adoption', 'High Adoption']\n", ")" @@ -208,17 +224,17 @@ "metadata": {}, "outputs": [], "source": [ - "visualizations.plot_revenue_profit_yields_over_time_foreach_subset(df_1)" + "visualizations.plot_yields_per_subset(df_1)" ] }, { "cell_type": "code", "execution_count": null, - "id": "f7caa5b3", + "id": "9dd21cde-b26b-4985-9047-74c09d0b5587", "metadata": {}, "outputs": [], "source": [ - "visualizations.plot_expanding_mean_revenue_profit_yields_over_time_foreach_subset(df_1)" + "visualizations.plot_cumulative_yields_per_subset(df_1)" ] }, { diff --git a/experiments/notebooks/3_network_issuance_and_inflation_rate.ipynb b/experiments/notebooks/3_network_issuance_and_inflation_rate.ipynb index c62e2f9f..e570eccf 100644 --- a/experiments/notebooks/3_network_issuance_and_inflation_rate.ipynb +++ b/experiments/notebooks/3_network_issuance_and_inflation_rate.ipynb @@ -70,12 +70,28 @@ "from datetime import datetime\n", "\n", "import experiments.notebooks.visualizations as visualizations\n", - "from experiments.notebooks.visualizations.peak_eth_simulator import run_peak_eth_simulator\n", + "from experiments.notebooks.visualizations.eth_supply_simulator import run_eth_supply_simulator\n", "from experiments.run import run\n", "from model.types import Stage\n", "from data.historical_values import df_ether_supply" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "ca8de2a7-46be-4c8f-ba91-3663428c1db8", + "metadata": {}, + "outputs": [], + "source": [ + "%%html\n", + "" + ] + }, { "cell_type": "code", "execution_count": null, @@ -206,10 +222,10 @@ " * High adoption: assumes an average of 4.5 new validators per epoch, i.e. a 50% higher rate compared to the base scenario\n", "* Proof-of-Stake Activation Date\n", " * Four scenarios starting from 1 Decemeber 2021 in quarterly increments \n", - "* EIP1559 Base Fee and Average Priority Fee (Gwei per gas). \n", - " * Steady State: base fee = 100 and priority fee = 1 to indicate the expected steady state at current gas prices\n", - " * MEV: base fee = 70 and tip = 30 to indicate the expected influence of MEV on the resulting blockspace auction\n", - " * EIP1559 disabled: base fee = 0 and priority fee = 0 to indicate EIP1559 being disabled\n", + "* EIP1559 Base Fee and Average Priority Fee (Gwei per gas)\n", + " * EIP1559 Enabled / No MEV: Base Fee 100, Priority Fee 1 (steady state at current gas prices)\n", + " * EIP1559 Enabled / MEV: Base Fee 70, Priority Fee 30 (models potential influence of MEV on blockspace auction)\n", + " * EIP1559 Disabled: Base Fee 0, Priority Fee 0\n", "\n", "The first chart (\"Inflation Rate and ETH Supply Analysis Scenarios\") depicts the ETH supply for default scenarios of the Validator Adoption, Proof-of-Stake Activation Date, and EIP1559 scenario categories, side by side (choose via button selector). This allows comparative analysis for each category.\n", "\n", @@ -239,15 +255,23 @@ "outputs": [], "source": [ "logger.disabled = True\n", - "run_peak_eth_simulator(execution_mode='inline')\n", + "run_eth_supply_simulator(execution_mode='inline')\n", "\n", "# To display in new browser tab at http://127.0.0.1:8050/:\n", - "# run_peak_eth_simulator(execution_mode='external')\n", + "# run_eth_supply_simulator(execution_mode='external')\n", "\n", "# To display either in \"inline\" mode when using Jupyter Notebook,\n", "# or \"jupyterlab\" mode when using Jupyter Lab:\n", - "# run_peak_eth_simulator()" + "# run_eth_supply_simulator()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a8c4f60f-3091-450b-8b8d-4929369ac816", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/experiments/notebooks/visualizations/__init__.py b/experiments/notebooks/visualizations/__init__.py index 5c0d0bf8..a41bcaa3 100644 --- a/experiments/notebooks/visualizations/__init__.py +++ b/experiments/notebooks/visualizations/__init__.py @@ -8,77 +8,91 @@ from ipywidgets import widgets from plotly.subplots import make_subplots -from experiments.notebooks.visualizations.plotly_theme import cadlabs_colors, cadlabs_colorway_sequence +from experiments.notebooks.visualizations.plotly_theme import ( + cadlabs_colors, + cadlabs_colorway_sequence, +) from model.system_parameters import parameters, validator_environments # Set plotly as the default plotting backend for pandas pd.options.plotting.backend = "plotly" validator_environment_name_mapping = { - 'custom': 'Custom', - 'diy_hardware': 'DIY Hardware', - 'diy_cloud': 'DIY Cloud', - 'pool_staas': 'Pool StaaS', - 'pool_hardware': 'Pool Hardware', - 'pool_cloud': 'Pool Cloud', - 'staas_full': 'StaaS Full', - 'staas_self_custodied': 'StaaS Self-custodied', + "custom": "Custom", + "diy_hardware": "DIY Hardware", + "diy_cloud": "DIY Cloud", + "pool_staas": "Pool StaaS", + "pool_hardware": "Pool Hardware", + "pool_cloud": "Pool Cloud", + "staas_full": "StaaS Full", + "staas_self_custodied": "StaaS Self-custodied", } legend_state_variable_name_mapping = { - 'timestamp': 'Date', - 'eth_price': 'ETH Price', - 'eth_staked': 'ETH Staked', - 'eth_supply': 'ETH Supply', - 'source_reward_eth': 'Source Reward', - 'target_reward_eth': 'Target Reward', - 'head_reward_eth': 'Head Reward', - 'block_proposer_reward_eth': 'Block Proposer Reward', - 'sync_reward_eth': 'Sync Reward', - 'total_priority_fee_to_validators_eth': 'Priority Fees', - 'supply_inflation_pct': 'ETH Supply inflation', - 'total_revenue_yields_pct': 'Total Revenue Yields', - 'total_profit_yields_pct': 'Total Profit Yields', - 'revenue_profit_yield_spread_pct': 'Revenue/Profit Yield Spread', - **dict([(validator.type + '_profit_yields_pct', validator_environment_name_mapping[validator.type]) for validator in - validator_environments]) + "timestamp": "Date", + "eth_price": "ETH Price", + "eth_staked": "ETH Staked", + "eth_supply": "ETH Supply", + "source_reward_eth": "Source Reward", + "target_reward_eth": "Target Reward", + "head_reward_eth": "Head Reward", + "block_proposer_reward_eth": "Block Proposer Reward", + "sync_reward_eth": "Sync Reward", + "total_priority_fee_to_validators_eth": "Priority Fees", + "supply_inflation_pct": "ETH Supply inflation", + "total_revenue_yields_pct": "Total Revenue Yields", + "total_profit_yields_pct": "Total Profit Yields", + "revenue_profit_yield_spread_pct": "Revenue/Profit Yield Spread", + **dict( + [ + ( + validator.type + "_profit_yields_pct", + validator_environment_name_mapping[validator.type], + ) + for validator in validator_environments + ] + ), } axis_state_variable_name_mapping = { **legend_state_variable_name_mapping, - 'eth_price': 'ETH Price (USD/ETH)', - 'eth_staked': 'ETH Staked (ETH)', - 'eth_supply': 'ETH Supply (ETH)', + "eth_price": "ETH Price (USD/ETH)", + "eth_staked": "ETH Staked (ETH)", + "eth_supply": "ETH Supply (ETH)", } -millnames = ['', ' k', ' m', ' bn', ' tn'] +millnames = ["", " k", " m", " bn", " tn"] def millify(n): n = float(n) - millidx = max(0, min(len(millnames) - 1, - int(math.floor(0 if n == 0 else math.log10(abs(n)) / 3)))) + millidx = max( + 0, + min( + len(millnames) - 1, int(math.floor(0 if n == 0 else math.log10(abs(n)) / 3)) + ), + ) - return '{:.0f}{}'.format(n / 10 ** (3 * millidx), millnames[millidx]) + return "{:.0f}{}".format(n / 10 ** (3 * millidx), millnames[millidx]) def update_legend_names(fig, name_mapping=legend_state_variable_name_mapping): for i, dat in enumerate(fig.data): for elem in dat: - if elem == 'name': + if elem == "name": try: fig.data[i].name = name_mapping[fig.data[i].name] except KeyError: continue - return (fig) + return fig def update_axis_names(fig, name_mapping=axis_state_variable_name_mapping): def update_axis_name(axis): - title = axis['title'] - text = title['text'] + title = axis["title"] + text = title["text"] updated_text = name_mapping.get(text, text) - title.update({'text': updated_text}) + title.update({"text": updated_text}) fig.for_each_xaxis(lambda ax: update_axis_name(ax)) fig.for_each_yaxis(lambda ax: update_axis_name(ax)) @@ -86,21 +100,27 @@ def update_axis_name(axis): def apply_plotly_standards( - fig, - title=None, - xaxis_title=None, - yaxis_title=None, - legend_title=None, - axis_state_variable_name_mapping_override={}, - legend_state_variable_name_mapping_override={}, + fig, + title=None, + xaxis_title=None, + yaxis_title=None, + legend_title=None, + axis_state_variable_name_mapping_override={}, + legend_state_variable_name_mapping_override={}, ): update_axis_names( fig, - {**axis_state_variable_name_mapping, **axis_state_variable_name_mapping_override}, + { + **axis_state_variable_name_mapping, + **axis_state_variable_name_mapping_override, + }, ) update_legend_names( fig, - {**legend_state_variable_name_mapping, **legend_state_variable_name_mapping_override}, + { + **legend_state_variable_name_mapping, + **legend_state_variable_name_mapping_override, + }, ) if title: @@ -117,29 +137,36 @@ def apply_plotly_standards( def plot_validating_rewards(df, subplot_titles=[]): validating_rewards = [ - 'source_reward_eth', - 'target_reward_eth', - 'head_reward_eth', - 'block_proposer_reward_eth', - 'sync_reward_eth', + "source_reward_eth", + "target_reward_eth", + "head_reward_eth", + "block_proposer_reward_eth", + "sync_reward_eth", ] - fig = make_subplots(rows=1, cols=len(df.subset.unique()), shared_yaxes=True, subplot_titles=subplot_titles) + fig = make_subplots( + rows=1, + cols=len(df.subset.unique()), + shared_yaxes=True, + subplot_titles=subplot_titles, + ) for subset in df.subset.unique(): color_cycle = itertools.cycle(cadlabs_colorway_sequence) - df_subset = df.query(f'subset == {subset}') + df_subset = df.query(f"subset == {subset}") for reward_index, reward_key in enumerate(validating_rewards): color = next(color_cycle) fig.add_trace( go.Scatter( - x=df_subset.timestamp, y=df_subset[reward_key], - stackgroup='one', + x=df_subset.timestamp, + y=df_subset[reward_key], + stackgroup="one", showlegend=(True if subset == 0 else False), line=dict(color=color), - name=validating_rewards[reward_index] + name=validating_rewards[reward_index], ), - row=1, col=subset + 1 + row=1, + col=subset + 1, ) update_legend_names(fig) @@ -156,25 +183,51 @@ def plot_validating_rewards(df, subplot_titles=[]): def plot_validating_rewards_pie_chart(df, with_priority_fee=False): if with_priority_fee: - title = 'Validating Rewards with Priority Fees' + title = "Validating Rewards with Priority Fees" validator_rewards = df.iloc[-1][ - ['total_priority_fee_to_validators_eth', 'source_reward_eth', 'target_reward_eth', 'head_reward_eth', - 'block_proposer_reward_eth', 'sync_reward_eth']].to_dict() - names = ["Priority Fees}", "Source Reward", "Target Reward", "Head Reward", "Block Proposer Reward", "Sync Reward"] + [ + "total_priority_fee_to_validators_eth", + "source_reward_eth", + "target_reward_eth", + "head_reward_eth", + "block_proposer_reward_eth", + "sync_reward_eth", + ] + ].to_dict() + names = [ + "Priority Fees}", + "Source Reward", + "Target Reward", + "Head Reward", + "Block Proposer Reward", + "Sync Reward", + ] else: - title = 'Validating Rewards' + title = "Validating Rewards" validator_rewards = df.iloc[-1][ - ['source_reward_eth', 'target_reward_eth', 'head_reward_eth', 'block_proposer_reward_eth', - 'sync_reward_eth']].to_dict() - names = ["Source Reward", "Target Reward", "Head Reward", "Block Proposer Reward", "Sync Reward"] + [ + "source_reward_eth", + "target_reward_eth", + "head_reward_eth", + "block_proposer_reward_eth", + "sync_reward_eth", + ] + ].to_dict() + names = [ + "Source Reward", + "Target Reward", + "Head Reward", + "Block Proposer Reward", + "Sync Reward", + ] fig = px.pie(df, values=validator_rewards.values(), names=names) fig.for_each_trace( lambda trace: trace.update( - textinfo='label+percent', - insidetextorientation='radial', - marker=dict(line=dict(color='#000000', width=2)) + textinfo="label+percent", + insidetextorientation="radial", + marker=dict(line=dict(color="#000000", width=2)), ), ) @@ -198,24 +251,28 @@ def plot_revenue_profit_yields_over_eth_staked(df): # Add traces fig.add_trace( go.Scatter( - x=df_subset_0.eth_staked, y=df_subset_0.total_revenue_yields_pct, name='Revenue Yields', - line=dict(color=cadlabs_colorway_sequence[3]) + x=df_subset_0.eth_staked, + y=df_subset_0.total_revenue_yields_pct, + name="Revenue Yields", + line=dict(color=cadlabs_colorway_sequence[3]), ), ) fig.add_trace( go.Scatter( - x=df_subset_0.eth_staked, y=df_subset_0.total_profit_yields_pct, + x=df_subset_0.eth_staked, + y=df_subset_0.total_profit_yields_pct, name=f"Profit Yields @ {df_subset_0.eth_price.iloc[0]:.0f} USD/ETH", - line=dict(color=cadlabs_colorway_sequence[4], dash='dash') + line=dict(color=cadlabs_colorway_sequence[4], dash="dash"), ), ) fig.add_trace( go.Scatter( - x=df_subset_1.eth_staked, y=df_subset_1.total_profit_yields_pct, + x=df_subset_1.eth_staked, + y=df_subset_1.total_profit_yields_pct, name=f"Profit Yields @ {df_subset_1.eth_price.iloc[0]:.0f} USD/ETH", - line=dict(color=cadlabs_colorway_sequence[5], dash='dash') + line=dict(color=cadlabs_colorway_sequence[5], dash="dash"), ), ) @@ -230,7 +287,7 @@ def plot_revenue_profit_yields_over_eth_staked(df): # Set secondary y-axes titles fig.update_yaxes(title_text="Yields (%/year)") - fig.update_layout(hovermode='x unified') + fig.update_layout(hovermode="x unified") return fig @@ -241,17 +298,19 @@ def plot_revenue_profit_yields_over_eth_price(df): # Add traces fig.add_trace( go.Scatter( - x=df.eth_price, y=df.total_revenue_yields_pct, + x=df.eth_price, + y=df.total_revenue_yields_pct, name=f"Revenue Yields @ ({millify(df.eth_staked.iloc[0])} ETH Staked)", - line=dict(color=cadlabs_colorway_sequence[3]) + line=dict(color=cadlabs_colorway_sequence[3]), ) ) fig.add_trace( go.Scatter( - x=df.eth_price, y=df.total_profit_yields_pct, + x=df.eth_price, + y=df.total_profit_yields_pct, name=f"Profit Yields @ ({millify(df.eth_staked.iloc[0])} ETH Staked)", - line=dict(color=cadlabs_colorway_sequence[4], dash='dash') + line=dict(color=cadlabs_colorway_sequence[4], dash="dash"), ), ) @@ -266,33 +325,38 @@ def plot_revenue_profit_yields_over_eth_price(df): # Set secondary y-axes titles fig.update_yaxes(title_text="Yields (%/year)") - fig.update_layout(hovermode='x unified') + fig.update_layout(hovermode="x unified") return fig def plot_validator_environment_yields(df): - validator_profit_yields_pct = [validator.type + '_profit_yields_pct' for validator in validator_environments] + validator_profit_yields_pct = [ + validator.type + "_profit_yields_pct" for validator in validator_environments + ] fig = df.plot( - x='eth_price', - y=(validator_profit_yields_pct + ['total_profit_yields_pct']), - facet_col='subset', + x="eth_price", + y=(validator_profit_yields_pct + ["total_profit_yields_pct"]), + facet_col="subset", facet_col_wrap=2, - facet_col_spacing=0.05 + facet_col_spacing=0.05, ) - fig.for_each_annotation(lambda a: a.update( - text=f"ETH Staked = {df.query(f'subset == {a.text.split(chr(61))[1]}').eth_staked.iloc[0]:.0f} ETH")) + fig.for_each_annotation( + lambda a: a.update( + text=f"ETH Staked = {df.query(f'subset == {a.text.split(chr(61))[1]}').eth_staked.iloc[0]:.0f} ETH" + ) + ) fig.update_layout( - title=f'Profit Yields of Validator Environments', + title=f"Profit Yields of Validator Environments", xaxis_title="ETH Price (USD/ETH)", yaxis_title="Profit Yields (%/year)", legend_title="", ) - fig.for_each_xaxis(lambda x: x['title'].update({'text': "ETH Price (USD/ETH)"})) + fig.for_each_xaxis(lambda x: x["title"].update({"text": "ETH Price (USD/ETH)"})) fig.update_yaxes(matches=None) fig.update_yaxes(showticklabels=True) @@ -303,29 +367,32 @@ def plot_validator_environment_yields(df): def plot_three_region_yield_analysis(fig_df): fig = fig_df.plot( - x='eth_price', - y=['total_revenue_yields_pct', 'total_profit_yields_pct'], + x="eth_price", + y=["total_revenue_yields_pct", "total_profit_yields_pct"], ) fig.add_annotation( - x=fig_df['eth_price'].min() + 100, y=fig_df['total_revenue_yields_pct'].max(), + x=fig_df["eth_price"].min() + 100, + y=fig_df["total_revenue_yields_pct"].max(), text="Cliff", showarrow=False, - yshift=10 + yshift=10, ) fig.add_annotation( - x=fig_df['eth_price'].median(), y=fig_df['total_revenue_yields_pct'].max(), + x=fig_df["eth_price"].median(), + y=fig_df["total_revenue_yields_pct"].max(), text="Economics of Scale", showarrow=False, - yshift=10 + yshift=10, ) fig.add_annotation( - x=fig_df['eth_price'].max() - 100, y=fig_df['total_revenue_yields_pct'].max(), + x=fig_df["eth_price"].max() - 100, + y=fig_df["total_revenue_yields_pct"].max(), text="Stability", showarrow=False, - yshift=10 + yshift=10, ) update_legend_names(fig) @@ -349,24 +416,38 @@ def plot_revenue_yields_vs_network_inflation(df): # Add traces fig.add_trace( - go.Scatter(x=df_subset_0.eth_staked, y=df_subset_0.total_revenue_yields_pct, name='Revenue Yields'), + go.Scatter( + x=df_subset_0.eth_staked, + y=df_subset_0.total_revenue_yields_pct, + name="Revenue Yields", + ), secondary_y=False, ) fig.add_trace( - go.Scatter(x=df_subset_0.eth_staked, y=df_subset_0.total_profit_yields_pct, - name=f"Profit Yields @ {df_subset_0.eth_price.iloc[0]} USD/ETH"), + go.Scatter( + x=df_subset_0.eth_staked, + y=df_subset_0.total_profit_yields_pct, + name=f"Profit Yields @ {df_subset_0.eth_price.iloc[0]} USD/ETH", + ), secondary_y=False, ) fig.add_trace( - go.Scatter(x=df_subset_1.eth_staked, y=df_subset_1.total_profit_yields_pct, - name=f"Profit Yields @ {df_subset_1.eth_price.iloc[0]} USD/ETH"), + go.Scatter( + x=df_subset_1.eth_staked, + y=df_subset_1.total_profit_yields_pct, + name=f"Profit Yields @ {df_subset_1.eth_price.iloc[0]} USD/ETH", + ), secondary_y=False, ) fig.add_trace( - go.Scatter(x=df_subset_0.eth_staked, y=df_subset_0.supply_inflation_pct, name='Network Inflation Rate'), + go.Scatter( + x=df_subset_0.eth_staked, + y=df_subset_0.supply_inflation_pct, + name="Network Inflation Rate", + ), secondary_y=True, ) @@ -400,18 +481,22 @@ def plot_validator_environment_yield_contour(df): row.append(z_value) z.append(row) - fig = go.Figure(data=[ - go.Contour( - x=x, y=y, z=z, - line_smoothing=0.85, - colorscale=cadlabs_colors, - colorbar=dict( - title='Profit Yields (%/year)', - titleside='right', - titlefont=dict(size=14) + fig = go.Figure( + data=[ + go.Contour( + x=x, + y=y, + z=z, + line_smoothing=0.85, + colorscale=cadlabs_colors, + colorbar=dict( + title="Profit Yields (%/year)", + titleside="right", + titlefont=dict(size=14), + ), ) - ) - ]) + ] + ) update_legend_names(fig) @@ -428,7 +513,9 @@ def plot_validator_environment_yield_contour(df): def plot_revenue_profit_yield_spread(df): - grouped = df.groupby(["eth_price", "eth_staked"]).last()["revenue_profit_yield_spread_pct"] + grouped = df.groupby(["eth_price", "eth_staked"]).last()[ + "revenue_profit_yield_spread_pct" + ] x = df.groupby(["run"]).first()["eth_price"].unique() y = df.groupby(["run"]).first()["eth_staked"].unique() @@ -441,25 +528,27 @@ def plot_revenue_profit_yield_spread(df): row.append(z_value) z.append(row) - fig = go.Figure(data=[ - go.Contour( - x=x, y=y, z=z, - line_smoothing=0.85, - contours=dict( - showlabels=True, # show labels on contours - labelfont=dict( # label font properties - size=12, - color='white', - ) - ), - colorbar=dict( - title='Spread (%/year)', - titleside='right', - titlefont=dict(size=14) - ), - colorscale=cadlabs_colors - ) - ]) + fig = go.Figure( + data=[ + go.Contour( + x=x, + y=y, + z=z, + line_smoothing=0.85, + contours=dict( + showlabels=True, # show labels on contours + labelfont=dict( # label font properties + size=12, + color="white", + ), + ), + colorbar=dict( + title="Spread (%/year)", titleside="right", titlefont=dict(size=14) + ), + colorscale=cadlabs_colors, + ) + ] + ) update_legend_names(fig) @@ -489,35 +578,39 @@ def plot_validator_environment_yield_surface(df): row.append(z_value) z.append(row) - fig = go.Figure(data=[go.Surface( - x=x, y=y, z=z, - colorbar=dict( - title='Profit Yields (%/year)', - titleside='right', - titlefont=dict(size=14) - ), - colorscale=cadlabs_colors - )]) + fig = go.Figure( + data=[ + go.Surface( + x=x, + y=y, + z=z, + colorbar=dict( + title="Profit Yields (%/year)", + titleside="right", + titlefont=dict(size=14), + ), + colorscale=cadlabs_colors, + ) + ] + ) - fig.update_traces(contours_z=dict( - show=True, - usecolormap=True, - project_z=True - )) + fig.update_traces(contours_z=dict(show=True, usecolormap=True, project_z=True)) update_legend_names(fig) fig.update_layout( title="Profit Yields Over ETH Price vs. ETH Staked", autosize=False, - width=1000, legend_title="", margin=dict(l=65, r=50, b=65, t=90), scene={ - "xaxis": {"title": {"text": "ETH Price (USD/ETH)"}, "type": "log", }, + "xaxis": { + "title": {"text": "ETH Price (USD/ETH)"}, + "type": "log", + }, "yaxis": {"title": {"text": "ETH Staked (ETH)"}}, "zaxis": {"title": {"text": "Profit Yields (%/year)"}}, - } + }, ) return fig @@ -529,13 +622,27 @@ def fig_add_stage_vrects(df, fig, parameters=parameters): date_pos = parameters["date_pos"][0] date_end = df.index[-1] - fig.add_vrect(x0=date_eip1559, x1=date_pos, row="all", col=1, - layer="below", - fillcolor="gray", opacity=0.25, line_width=0) + fig.add_vrect( + x0=date_eip1559, + x1=date_pos, + row="all", + col=1, + layer="below", + fillcolor="gray", + opacity=0.25, + line_width=0, + ) - fig.add_vrect(x0=date_pos, x1=date_end, row="all", col=1, - layer="below", - fillcolor="gray", opacity=0.1, line_width=0) + fig.add_vrect( + x0=date_pos, + x1=date_end, + row="all", + col=1, + layer="below", + fillcolor="gray", + opacity=0.1, + line_width=0, + ) return fig @@ -554,17 +661,17 @@ def fig_add_stage_markers(df, column, fig, secondary_y=None, parameters=paramete # Beacon Chain genesis Dec-01-2020 12:00:35 PM +UTC historical_dates = [ - ("Frontier", datetime.strptime("Jul-30-2015", '%b-%d-%Y'), (-20, 45)), - ("Frontier thawing", datetime.strptime("Sep-07-2015", '%b-%d-%Y'), (35, 50)), - ("Homestead", datetime.strptime("Mar-14-2016", '%b-%d-%Y'), (-30, 0)), - ("Byzantium", datetime.strptime("Oct-16-2017", '%b-%d-%Y'), (30, 40)), - ("Constantinople", datetime.strptime("Feb-28-2019", '%b-%d-%Y'), (30, -15)), - ("Istanbul", datetime.strptime("Dec-08-2019", '%b-%d-%Y'), (30, -10)), - ("Muir Glacier", datetime.strptime("Jan-02-2020", '%b-%d-%Y'), (-30, 0)), + ("Frontier", datetime.strptime("Jul-30-2015", "%b-%d-%Y"), (-20, 45)), + ("Frontier thawing", datetime.strptime("Sep-07-2015", "%b-%d-%Y"), (35, 50)), + ("Homestead", datetime.strptime("Mar-14-2016", "%b-%d-%Y"), (-30, 0)), + ("Byzantium", datetime.strptime("Oct-16-2017", "%b-%d-%Y"), (30, 40)), + ("Constantinople", datetime.strptime("Feb-28-2019", "%b-%d-%Y"), (30, -15)), + ("Istanbul", datetime.strptime("Dec-08-2019", "%b-%d-%Y"), (30, -10)), + ("Muir Glacier", datetime.strptime("Jan-02-2020", "%b-%d-%Y"), (-35, 0)), ] system_dates = [ - ("Beacon Chain", datetime.strptime("Dec-01-2020", '%b-%d-%Y')), + ("Beacon Chain", datetime.strptime("Dec-01-2020", "%b-%d-%Y")), # ("Today", parameters["date_start"][0]), ("EIP1559", parameters["date_eip1559"][0]), ("Proof of Stake", parameters["date_pos"][0]), @@ -572,104 +679,77 @@ def fig_add_stage_markers(df, column, fig, secondary_y=None, parameters=paramete for (name, date, (ay, ax)) in historical_dates: nearest_row = df.iloc[ - df.index.get_loc(date.strftime("%Y-%m-%d"), method='nearest') + df.index.get_loc(date.strftime("%Y-%m-%d"), method="nearest") ] - x_datetime = nearest_row['timestamp'][0] + x_datetime = nearest_row["timestamp"][0] y_value = nearest_row[column][0] - fig.add_annotation(x=x_datetime, y=y_value, - text=name, - ay=ay, - ax=ax, - showarrow=True, - arrowhead=2, - arrowsize=1.5) - - date_pos = parameters['date_pos'][0] - peak_eth_supply = df.loc[date_pos.strftime("%Y-%m-%d")]['eth_supply'][0] - if peak_eth_supply > df['eth_supply'].iloc[-1]: - fig.add_annotation(x=date_pos, y=df.loc[date_pos.strftime("%Y-%m-%d")]['eth_supply'][0], - text='Peak ETH Supply', - yref='y2', - showarrow=True, - arrowhead=2, - arrowsize=1.5) - - date_annotation = datetime.strptime("Dec-01-2024", '%b-%d-%Y') - fig.add_annotation(x=date_annotation, y=-1.75, - text='Deflationary', - showarrow=True, - ay=-30, - ax=0, - arrowhead=2, - arrowsize=1.5) - - fig.add_annotation(x=date_annotation, y=1.75, - text='Inflationary', - showarrow=True, - ay=30, - ax=0, - arrowhead=2, - arrowsize=1.5) + fig.add_annotation( + x=x_datetime, + y=y_value, + text=name, + ay=ay, + ax=ax, + showarrow=True, + arrowhead=2, + arrowsize=1.25, + ) for idx, (name, date) in enumerate(system_dates): fig.add_trace( go.Scatter( mode="markers+text", - x=[date], y=[df.loc[date.strftime("%Y-%m-%d")][column][0]], + x=[date], + y=[df.loc[date.strftime("%Y-%m-%d")][column][0]], marker_symbol=["diamond"], - marker_line_width=2, marker_size=10, + marker_line_width=2, + marker_size=10, hovertemplate=name, name=name, - #textfont_size=11, + # textfont_size=11, text=name, textposition="top center", - legendgroup='markers', + legendgroup="markers", showlegend=False, ), - *(secondary_y, secondary_y) if secondary_y else () + *(secondary_y, secondary_y) if secondary_y else (), ) fig.add_trace( go.Scatter( mode="markers", - x=[date], y=[df.loc[date.strftime("%Y-%m-%d")][column][0]], + x=[date], + y=[df.loc[date.strftime("%Y-%m-%d")][column][0]], marker_symbol=["diamond"], marker_line_color="black", - marker_color=cadlabs_colorway_sequence[idx+1], - marker_line_width=2, marker_size=10, + marker_color=cadlabs_colorway_sequence[idx + 1], + marker_line_width=2, + marker_size=10, hovertemplate=name, name=name, textfont_size=11, textposition="top center", - legendgroup='markers', + legendgroup="markers", showlegend=True, ), - *(secondary_y, secondary_y) if secondary_y else () - ) + *(secondary_y, secondary_y) if secondary_y else (), + ) return fig def plot_eth_supply_over_all_stages(df): - df = df.set_index('timestamp', drop=False) + df = df.set_index("timestamp", drop=False) fig = go.Figure() fig.add_trace( - go.Scatter(x=df.timestamp, y=df.eth_supply, name='ETH Supply'), + go.Scatter(x=df.timestamp, y=df.eth_supply, name="ETH Supply"), ) - fig_add_stage_markers(df, 'eth_supply', fig) + fig_add_stage_markers(df, "eth_supply", fig) fig_add_stage_vrects(df, fig) # Add range slider - fig.update_layout( - xaxis=dict( - rangeslider=dict( - visible=True - ), - type="date" - ) - ) + fig.update_layout(xaxis=dict(rangeslider=dict(visible=True), type="date")) update_legend_names(fig) @@ -683,30 +763,36 @@ def plot_eth_supply_over_all_stages(df): return fig -def plot_eth_supply_and_inflation_over_all_stages(df_historical, df_simulated, parameters=parameters): - df_historical = df_historical.set_index('timestamp', drop=False) - df_simulated = df_simulated.set_index('timestamp', drop=False) - - df_historical['supply_inflation_pct'] = df_historical['supply_inflation_pct_rolling'] - df_historical = df_historical.drop(df_historical.tail(1).index) +def plot_eth_supply_and_inflation(df_historical, df_simulated, parameters=parameters): + df_historical = df_historical.set_index("timestamp", drop=False) + df_simulated = df_simulated.set_index("timestamp", drop=False) + + df_historical["supply_inflation_pct"] = df_historical[ + "supply_inflation_pct_rolling" + ] + df_historical = df_historical.drop(df_historical.tail(1).index) df_historical.loc[df_simulated.index[0]] = df_simulated.iloc[0] - + fig = make_subplots(specs=[[{"secondary_y": True}]]) fig.add_trace( go.Scatter( - x=df_historical.timestamp, y=df_historical.supply_inflation_pct, name='Historical Network Inflation Rate', - line=dict(color='#FC1CBF'), - legendgroup='historical' + x=df_historical.timestamp, + y=df_historical.supply_inflation_pct, + name="Historical Network Inflation Rate", + line=dict(color="#FC1CBF"), + legendgroup="historical", ), secondary_y=False, ) fig.add_trace( go.Scatter( - x=df_historical.timestamp, y=df_historical.eth_supply, name='Historical ETH Supply', - line=dict(color='#3283FE'), - legendgroup='historical' + x=df_historical.timestamp, + y=df_historical.eth_supply, + name="Historical ETH Supply", + line=dict(color="#3283FE"), + legendgroup="historical", ), secondary_y=True, ) @@ -715,20 +801,24 @@ def plot_eth_supply_and_inflation_over_all_stages(df_historical, df_simulated, p df_subset = df_simulated.query(f"subset == {subset}") fig.add_trace( go.Scatter( - x=df_subset.timestamp, y=df_subset.supply_inflation_pct, name='Simulated Network Inflation Rate', - line=dict(color='#FC1CBF', dash='dot'), + x=df_subset.timestamp, + y=df_subset.supply_inflation_pct, + name="Simulated Network Inflation Rate", + line=dict(color="#FC1CBF", dash="dot"), showlegend=(True if subset == 0 else False), - legendgroup='simulated' + legendgroup="simulated", ), secondary_y=False, ) fig.add_trace( go.Scatter( - x=df_subset.timestamp, y=df_subset.eth_supply, name='Simulated ETH Supply', - line=dict(color='#3283FE', dash='dot'), + x=df_subset.timestamp, + y=df_subset.eth_supply, + name="Simulated ETH Supply", + line=dict(color="#3283FE", dash="dot"), showlegend=(True if subset == 0 else False), - legendgroup='simulated' + legendgroup="simulated", ), secondary_y=True, ) @@ -736,17 +826,42 @@ def plot_eth_supply_and_inflation_over_all_stages(df_historical, df_simulated, p df = df_historical.append(df_simulated) - fig_add_stage_markers(df, 'supply_inflation_pct', fig, secondary_y=False, parameters=parameters) + fig_add_stage_markers( + df, "supply_inflation_pct", fig, secondary_y=False, parameters=parameters + ) fig_add_stage_vrects(df, fig, parameters=parameters) + date_inflation_annotation = datetime.strptime("Dec-01-2024", "%b-%d-%Y") + fig.add_annotation( + x=date_inflation_annotation, + y=-2.75, + text="Deflationary", + showarrow=True, + ay=-35, + ax=0, + arrowhead=2, + arrowsize=1.25, + ) + + fig.add_annotation( + x=date_inflation_annotation, + y=2.75, + text="Inflationary", + showarrow=True, + ay=35, + ax=0, + arrowhead=2, + arrowsize=1.25, + ) + # Add range slider fig.update_layout( - height=800, xaxis=dict( rangeslider=dict( - visible=True + visible=True, ), - type="date" + rangeslider_thickness=0.15, + type="date", ) ) @@ -754,28 +869,31 @@ def plot_eth_supply_and_inflation_over_all_stages(df_historical, df_simulated, p fig.update_layout( xaxis_title="Date", - title="Peak ETH Simulator", + title="ETH Supply Simulator", legend_title="", - height=1000, + height=675, + width=1200, legend=dict( title=dict( text="", ), orientation="h", yanchor="top", - y=-0.7, + y=-0.425, xanchor="center", x=0.5, - traceorder='grouped', + traceorder="grouped", itemclick=False, - ) + ), ) - fig.add_hline(y=0, - line_color="#808080", - line_width=0.75, - annotation_text="", - annotation_position="bottom right") + fig.add_hline( + y=0, + line_color="#808080", + line_width=0.75, + annotation_text="", + annotation_position="bottom right", + ) # Set secondary y-axes titles fig.update_yaxes(title_text="Network Inflation Rate (%/year)", secondary_y=False) @@ -785,7 +903,7 @@ def plot_eth_supply_and_inflation_over_all_stages(df_historical, df_simulated, p def plot_network_inflation_over_all_stages(df): - df = df.set_index('timestamp', drop=False) + df = df.set_index("timestamp", drop=False) fig = go.Figure() @@ -793,21 +911,14 @@ def plot_network_inflation_over_all_stages(df): go.Scatter(x=df.timestamp, y=df.supply_inflation_pct) # , fill='tozeroy' ) - fig.add_hline(y=0, - annotation_text="Ultra-sound barrier", - annotation_position="bottom right") + fig.add_hline( + y=0, annotation_text="Ultra-sound barrier", annotation_position="bottom right" + ) - fig_add_stage_markers(df, 'supply_inflation_pct', fig) + fig_add_stage_markers(df, "supply_inflation_pct", fig) fig_add_stage_vrects(df, fig) - fig.update_layout( - xaxis=dict( - rangeslider=dict( - visible=True - ), - type="date" - ) - ) + fig.update_layout(xaxis=dict(rangeslider=dict(visible=True), type="date")) update_legend_names(fig) @@ -822,20 +933,13 @@ def plot_network_inflation_over_all_stages(df): def plot_eth_staked_over_all_stages(df): - df = df.set_index('timestamp', drop=False) + df = df.set_index("timestamp", drop=False) - fig = df.plot(x='timestamp', y='eth_staked') + fig = df.plot(x="timestamp", y="eth_staked") - fig_add_stage_markers(df, 'eth_staked', fig) + fig_add_stage_markers(df, "eth_staked", fig) - fig.update_layout( - xaxis=dict( - rangeslider=dict( - visible=True - ), - type="date" - ) - ) + fig.update_layout(xaxis=dict(rangeslider=dict(visible=True), type="date")) update_legend_names(fig) @@ -850,15 +954,15 @@ def plot_eth_staked_over_all_stages(df): def plot_number_of_validators_over_time_foreach_subset(df): - scenario_names = {0: 'Normal Adoption', 1: 'Low Adoption', 2: 'High Adoption'} + scenario_names = {0: "Normal Adoption", 1: "Low Adoption", 2: "High Adoption"} fig = go.Figure() for subset in df.subset.unique(): fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df[df.subset == subset]['number_of_validators'], + x=df["timestamp"], + y=df[df.subset == subset]["number_of_validators"], name=scenario_names[subset], ) ) @@ -868,13 +972,9 @@ def plot_number_of_validators_over_time_foreach_subset(df): xaxis_title="Date", yaxis_title="Active Validators", legend_title="", - xaxis=dict( - rangeslider=dict( - visible=True - ) - ) + xaxis=dict(rangeslider=dict(visible=True)), ) - fig.update_layout(hovermode='x unified') + fig.update_layout(hovermode="x unified") return fig @@ -882,22 +982,24 @@ def plot_number_of_validators_over_time_foreach_subset(df): def plot_number_of_validators_in_activation_queue_over_time(df): fig = make_subplots(specs=[[{"secondary_y": True}]]) - fig_df = df.query('subset == 2') + fig_df = df.query("subset == 2") fig.add_trace( go.Scatter( - x=fig_df['timestamp'], y=fig_df['number_of_validators'], - name='Number of validators' + x=fig_df["timestamp"], + y=fig_df["number_of_validators"], + name="Number of validators", ), - secondary_y=False + secondary_y=False, ) fig.add_trace( go.Scatter( - x=fig_df['timestamp'], y=fig_df['number_of_validators_in_activation_queue'], - name='Activation queue' + x=fig_df["timestamp"], + y=fig_df["number_of_validators_in_activation_queue"], + name="Activation queue", ), - secondary_y=True + secondary_y=True, ) fig.update_layout( @@ -913,51 +1015,55 @@ def plot_number_of_validators_in_activation_queue_over_time(df): return fig -def plot_revenue_profit_yields_over_time_foreach_subset_subplots(df, subplot_titles=[]): +def plot_yields_per_subset_subplots(df, subplot_titles=[]): color_cycle = itertools.cycle(cadlabs_colorway_sequence) - fig = make_subplots(rows=1, cols=3, shared_yaxes=True, subplot_titles=subplot_titles) + fig = make_subplots( + rows=1, cols=3, shared_yaxes=True, subplot_titles=subplot_titles + ) for subset in df.subset.unique(): color = next(color_cycle) fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df[df.subset == subset]['total_revenue_yields_pct'], + x=df["timestamp"], + y=df[df.subset == subset]["total_revenue_yields_pct"], name="Revenue Yields", line=dict(color=color), - showlegend=False + showlegend=False, ), - row=1, col=subset + 1 + row=1, + col=subset + 1, ) fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df[df.subset == subset]['total_profit_yields_pct'], + x=df["timestamp"], + y=df[df.subset == subset]["total_profit_yields_pct"], name="Profit Yields", - line=dict(color=color, dash='dash'), - showlegend=False + line=dict(color=color, dash="dash"), + showlegend=False, ), - row=1, col=subset + 1 + row=1, + col=subset + 1, ) # Add uncoloured legend for traces fig.add_trace( go.Scatter( - x=df['timestamp'], + x=df["timestamp"], y=[None], - mode='lines', - line=dict(color='black'), - name='Revenue Yields', + mode="lines", + line=dict(color="black"), + name="Revenue Yields", ) ) fig.add_trace( go.Scatter( - x=df['timestamp'], + x=df["timestamp"], y=[None], - mode='lines', - line=dict(color='black', dash='dash'), - name='Profit Yields', + mode="lines", + line=dict(color="black", dash="dash"), + name="Profit Yields", ) ) @@ -969,7 +1075,7 @@ def plot_revenue_profit_yields_over_time_foreach_subset_subplots(df, subplot_tit hovermode="x", ) - fig.for_each_xaxis(lambda x: x.update(dict(title=dict(text='Date')))) + fig.for_each_xaxis(lambda x: x.update(dict(title=dict(text="Date")))) # Removes the 'subset=' from the facet_col title fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1])) @@ -979,31 +1085,31 @@ def plot_revenue_profit_yields_over_time_foreach_subset_subplots(df, subplot_tit return fig -def plot_revenue_profit_yields_over_time_foreach_subset(df): - scenario_names = {0: 'Normal Adoption', 1: 'Low Adoption', 2: 'High Adoption'} +def plot_yields_per_subset(df): + scenario_names = {0: "Normal Adoption", 1: "Low Adoption", 2: "High Adoption"} color_cycle = itertools.cycle(cadlabs_colorway_sequence) fig = go.Figure() for subset in df.subset.unique(): - df_subset = df.query(f'subset == {subset}').copy() + df_subset = df.query(f"subset == {subset}").copy() color = next(color_cycle) fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df_subset['total_revenue_yields_pct'], + x=df["timestamp"], + y=df_subset["total_revenue_yields_pct"], name=f"{scenario_names[subset]} Revenue Yields", line=dict(color=color), ), ) fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df_subset['total_profit_yields_pct'], + x=df["timestamp"], + y=df_subset["total_profit_yields_pct"], name=f"{scenario_names[subset]} Profit Yields", - line=dict(color=color, dash='dash'), - visible=False + line=dict(color=color, dash="dash"), + visible=False, ), ) @@ -1011,132 +1117,228 @@ def plot_revenue_profit_yields_over_time_foreach_subset(df): title="Revenue or Profit Yields Over Time", xaxis_title="Date", yaxis_title="Yields (%/year)", - legend_title="" + legend_title="", ) - fig.update_layout( - xaxis=dict( - rangeslider=dict( - visible=True - ), - type="date" - ) - ) + fig.update_layout(xaxis=dict(rangeslider=dict(visible=True), type="date")) - fig.update_layout(updatemenus=[dict( - type="buttons", - buttons=[ - dict( - label='Revenue Yields', - method='update', - args=[{'visible': [True, 'legendonly']}, {'showlegend': True}] - ), + fig.update_layout( + updatemenus=[ dict( - label='Profit Yields', - method='update', - args=[{'visible': ['legendonly', True]}, {'showlegend': True}] + type="buttons", + buttons=[ + dict( + label="Revenue Yields", + method="update", + args=[{"visible": [True, "legendonly"]}, {"showlegend": True}], + ), + dict( + label="Profit Yields", + method="update", + args=[{"visible": ["legendonly", True]}, {"showlegend": True}], + ), + ], + direction="right", + showactive=True, + pad={"t": 10}, + x=0, + xanchor="left", + y=1.15, + yanchor="top", ) - ], - direction='right', - showactive=True, - pad={"t": 10}, - x=0, - xanchor="left", - y=1.1, - yanchor="top" - )]) - - fig.update_layout(hovermode='x unified') + ] + ) + + fig.update_layout(hovermode="x unified") return fig -def plot_expanding_mean_revenue_profit_yields_over_time_foreach_subset(df): - scenario_names = {0: 'Normal Adoption', 1: 'Low Adoption', 2: 'High Adoption'} +def plot_cumulative_yields_per_subset(df): + scenario_names = {0: "Normal Adoption", 1: "Low Adoption", 2: "High Adoption"} color_cycle = itertools.cycle(cadlabs_colorway_sequence) fig = go.Figure() for subset in df.subset.unique(): - df_subset = df.query(f'subset == {subset}').copy() + df_subset = df.query(f"subset == {subset}").copy() + + df_subset["daily_revenue_yields_pct"] = ( + df_subset["total_revenue_yields_pct"] / 365 + ) + df_subset["daily_profit_yields_pct"] = ( + df_subset["total_profit_yields_pct"] / 365 + ) - df_subset['avg_revenue_yields_pct'] = df_subset['total_revenue_yields_pct'].expanding().mean() - df_subset['avg_profit_yields_pct'] = df_subset['total_profit_yields_pct'].expanding().mean() + df_subset["cumulative_revenue_yields_pct"] = ( + df_subset["daily_revenue_yields_pct"].expanding().sum() + ) + df_subset["cumulative_profit_yields_pct"] = ( + df_subset["daily_profit_yields_pct"].expanding().sum() + ) color = next(color_cycle) fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df_subset['avg_revenue_yields_pct'], + x=df["timestamp"], + y=df_subset["cumulative_revenue_yields_pct"], name=f"{scenario_names[subset]} Revenue Yields", line=dict(color=color), ), ) fig.add_trace( go.Scatter( - x=df['timestamp'], - y=df_subset['avg_profit_yields_pct'], + x=df["timestamp"], + y=df_subset["cumulative_profit_yields_pct"], name=f"{scenario_names[subset]} Profit Yields", - line=dict(color=color, dash='dash'), - visible=False + line=dict(color=color, dash="dash"), + visible=False, ), ) fig.update_layout( - title="Cumulative Average Revenue or Profit Yields Over Time", + title="Cumulative Revenue or Profit Yields Over Time", xaxis_title="Date", - yaxis_title="Yields (%/year)", - legend_title="" + yaxis_title="Cumulative Yields (%)", + legend_title="", ) + fig.update_layout(xaxis=dict(rangeslider=dict(visible=True), type="date")) + fig.update_layout( - xaxis=dict( - rangeslider=dict( - visible=True + updatemenus=[ + dict( + type="buttons", + buttons=[ + dict( + label="Revenue Yields", + method="update", + args=[{"visible": [True, "legendonly"]}, {"showlegend": True}], + ), + dict( + label="Profit Yields", + method="update", + args=[{"visible": ["legendonly", True]}, {"showlegend": True}], + ), + ], + direction="right", + showactive=True, + pad={"t": 10}, + x=0, + xanchor="left", + y=1.1, + yanchor="top", + ) + ] + ) + + fig.update_layout(hovermode="x unified") + + return fig + + +def plot_cumulative_returns_per_subset(df): + scenario_names = {0: "Normal Adoption", 1: "Low Adoption", 2: "High Adoption"} + color_cycle = itertools.cycle(cadlabs_colorway_sequence) + + fig = go.Figure() + + for subset in df.subset.unique(): + df_subset = df.query(f"subset == {subset}").copy() + + df_subset["daily_revenue_yields_pct"] = ( + df_subset["total_revenue_yields_pct"] / 365 + ) + df_subset["daily_profit_yields_pct"] = ( + df_subset["total_profit_yields_pct"] / 365 + ) + + df_subset["cumulative_revenue_yields_pct"] = ( + df_subset["daily_revenue_yields_pct"].expanding().sum() + ) + df_subset["cumulative_profit_yields_pct"] = ( + df_subset["daily_profit_yields_pct"].expanding().sum() + ) + + df_subset["cumulative_revenue"] = ( + 1 + df_subset["cumulative_revenue_yields_pct"] / 100 + ) + df_subset["cumulative_profit"] = ( + 1 + df_subset["cumulative_revenue_yields_pct"] / 100 + ) + + color = next(color_cycle) + fig.add_trace( + go.Scatter( + x=df["timestamp"], + y=df_subset["cumulative_revenue"], + name=f"{scenario_names[subset]} Revenue Yields", + line=dict(color=color), + ), + ) + fig.add_trace( + go.Scatter( + x=df["timestamp"], + y=df_subset["cumulative_profit"], + name=f"{scenario_names[subset]} Profit Yields", + line=dict(color=color, dash="dash"), + visible=False, ), - type="date" ) + + fig.update_layout( + title="Cumulative Revenue or Profit Returns Over Time", + xaxis_title="Date", + yaxis_title="Cumulative Returns (USD)", + legend_title="", ) - fig.update_layout(updatemenus=[dict( - type="buttons", - buttons=[ - dict( - label='Revenue Yields', - method='update', - args=[{'visible': [True, 'legendonly']}, {'showlegend': True}] - ), + fig.update_layout(xaxis=dict(rangeslider=dict(visible=True), type="date")) + + fig.update_layout( + updatemenus=[ dict( - label='Profit Yields', - method='update', - args=[{'visible': ['legendonly', True]}, {'showlegend': True}] + type="buttons", + buttons=[ + dict( + label="Revenue Yields", + method="update", + args=[{"visible": [True, "legendonly"]}, {"showlegend": True}], + ), + dict( + label="Profit Yields", + method="update", + args=[{"visible": ["legendonly", True]}, {"showlegend": True}], + ), + ], + direction="right", + showactive=True, + pad={"t": 10}, + x=0, + xanchor="left", + y=1.1, + yanchor="top", ) - ], - direction='right', - showactive=True, - pad={"t": 10}, - x=0, - xanchor="left", - y=1.1, - yanchor="top" - )]) - - fig.update_layout(hovermode='x unified') + ] + ) + + fig.update_layout(hovermode="x unified") return fig def plot_figure_widget_revenue_yields_over_time_foreach_subset(df): subset = widgets.Dropdown( - options=list(df['subset'].unique()), + options=list(df["subset"].unique()), value=0, - description='Scenario:', + description="Scenario:", ) - fig_df = df.query('subset == 0') + fig_df = df.query("subset == 0") trace1 = go.Scatter( - x=fig_df['timestamp'], y=fig_df['total_revenue_yields_pct'], + x=fig_df["timestamp"], + y=fig_df["total_revenue_yields_pct"], ) fig = go.FigureWidget(data=[trace1]) @@ -1145,28 +1347,31 @@ def plot_figure_widget_revenue_yields_over_time_foreach_subset(df): title="Revenue Yields Over Time", xaxis_title="Date", yaxis_title="Revenue Yields (%/year)", - yaxis=dict( - tickmode='linear', - dtick=0.5 - ) + yaxis=dict(tickmode="linear", dtick=0.5), ) - max_y = fig_df['total_revenue_yields_pct'].max() - min_y = fig_df['total_revenue_yields_pct'].min() - fig.add_hline(y=max_y, line_dash="dot", - annotation_text=f"Default scenario max={max_y:.2f}%/year", - annotation_position="bottom right") - fig.add_hline(y=min_y, line_dash="dot", - annotation_text=f"Default scenario min={min_y:.2f}%/year", - annotation_position="bottom right") + max_y = fig_df["total_revenue_yields_pct"].max() + min_y = fig_df["total_revenue_yields_pct"].min() + fig.add_hline( + y=max_y, + line_dash="dot", + annotation_text=f"Default scenario max={max_y:.2f}%/year", + annotation_position="bottom right", + ) + fig.add_hline( + y=min_y, + line_dash="dot", + annotation_text=f"Default scenario min={min_y:.2f}%/year", + annotation_position="bottom right", + ) def response(change): _subset = subset.value - fig_df = df.query(f'subset == {_subset}') + fig_df = df.query(f"subset == {_subset}") with fig.batch_update(): - fig.data[0].x = fig_df['timestamp'] - fig.data[0].y = fig_df['total_revenue_yields_pct'] + fig.data[0].x = fig_df["timestamp"] + fig.data[0].y = fig_df["total_revenue_yields_pct"] subset.observe(response, names="value") @@ -1174,45 +1379,46 @@ def response(change): update_legend_names(fig) - return widgets.VBox([container, - fig]) + return widgets.VBox([container, fig]) def plot_revenue_yields_rolling_mean(df_rolling): - fig = go.Figure([ - go.Scatter( - name='Mean', - x=df_rolling['timestamp'], - y=df_rolling['rolling_mean'], - mode='lines', - line=dict(color='rgb(31, 119, 180)'), - ), - go.Scatter( - name='Upper Bound (max)', - x=df_rolling['timestamp'], - y=df_rolling['max'], - mode='lines', - marker=dict(color="#444"), - line=dict(width=0), - showlegend=False - ), - go.Scatter( - name='Lower Bound (min)', - x=df_rolling['timestamp'], - y=df_rolling['min'], - marker=dict(color="#444"), - line=dict(width=0), - mode='lines', - fillcolor='rgba(68, 68, 68, 0.3)', - fill='tonexty', - showlegend=False - ) - ]) + fig = go.Figure( + [ + go.Scatter( + name="Mean", + x=df_rolling["timestamp"], + y=df_rolling["rolling_mean"], + mode="lines", + line=dict(color="rgb(31, 119, 180)"), + ), + go.Scatter( + name="Upper Bound (max)", + x=df_rolling["timestamp"], + y=df_rolling["max"], + mode="lines", + marker=dict(color="#444"), + line=dict(width=0), + showlegend=False, + ), + go.Scatter( + name="Lower Bound (min)", + x=df_rolling["timestamp"], + y=df_rolling["min"], + marker=dict(color="#444"), + line=dict(width=0), + mode="lines", + fillcolor="rgba(68, 68, 68, 0.3)", + fill="tonexty", + showlegend=False, + ), + ] + ) fig.update_layout( - yaxis_title='Revenue Yields (%/year)', - xaxis_title='Date', - title='Revenue Yields Rolling Mean Over Time', - hovermode="x" + yaxis_title="Revenue Yields (%/year)", + xaxis_title="Date", + title="Revenue Yields Rolling Mean Over Time", + hovermode="x", ) update_legend_names(fig) @@ -1221,16 +1427,18 @@ def plot_revenue_yields_rolling_mean(df_rolling): def plot_profit_yields_by_environment_over_time(df): - validator_profit_yields = [validator.type + '_profit_yields_pct' for validator in validator_environments] + validator_profit_yields = [ + validator.type + "_profit_yields_pct" for validator in validator_environments + ] fig = go.Figure() for key in validator_profit_yields: fig.add_trace( go.Scatter( - x=df['timestamp'], + x=df["timestamp"], y=df[key], - name=legend_state_variable_name_mapping[key] + name=legend_state_variable_name_mapping[key], ) ) @@ -1238,33 +1446,30 @@ def plot_profit_yields_by_environment_over_time(df): title="Profit Yields by Environment Over Time", xaxis_title="Date", yaxis_title="Profit Yields (%/year)", - legend_title='', - xaxis=dict( - rangeslider=dict( - visible=True - ), - type="date" - ), - hovermode='x unified' + legend_title="", + xaxis=dict(rangeslider=dict(visible=True), type="date"), + hovermode="x unified", ) return fig def plot_network_issuance_scenarios(df, simulation_names): - df = df.set_index('timestamp', drop=False) + df = df.set_index("timestamp", drop=False) fig = go.Figure() initial_simulation = 0 - for subset in df.query(f'simulation == {initial_simulation}').subset.unique(): + for subset in df.query(f"simulation == {initial_simulation}").subset.unique(): simulation_key = list(simulation_names.keys())[initial_simulation] fig.add_trace( go.Scatter( x=df.index, - y=df.query(f'subset == {subset} and simulation == {initial_simulation}').eth_supply, + y=df.query( + f"subset == {subset} and simulation == {initial_simulation}" + ).eth_supply, name=simulation_names[simulation_key][subset], - visible=True + visible=True, ) ) @@ -1272,47 +1477,56 @@ def plot_network_issuance_scenarios(df, simulation_names): for simulation_index in df.simulation.unique(): simulation_key = list(simulation_names.keys())[simulation_index] - simulation_df = df.query(f'simulation == {simulation_index}') + simulation_df = df.query(f"simulation == {simulation_index}") subset_len = len(simulation_df.subset.unique()) visible_traces = [False for i in range(4)] visible_traces[:subset_len] = [True for i in range(subset_len)] - buttons.append(dict(method='update', - label=str(simulation_key), - visible=True, - args=[ - { - "visible": visible_traces, - 'y': [ - simulation_df.query(f'subset == {subset}').eth_supply \ - for subset in simulation_df.subset.unique() - ], - 'x': [df.index], - 'name': list([ - simulation_names[simulation_key][subset] for subset in - simulation_df.subset.unique() - ]), - 'type': 'scatter' - } - ], - )) - - fig.update_layout(updatemenus=[dict( - type='buttons', - buttons=buttons, - direction='right', - showactive=True, - pad={"t": 25}, - x=0, - xanchor="left", - y=1.1, - yanchor="top" - )]) + buttons.append( + dict( + method="update", + label=str(simulation_key), + visible=True, + args=[ + { + "visible": visible_traces, + "y": [ + simulation_df.query(f"subset == {subset}").eth_supply + for subset in simulation_df.subset.unique() + ], + "x": [df.index], + "name": list( + [ + simulation_names[simulation_key][subset] + for subset in simulation_df.subset.unique() + ] + ), + "type": "scatter", + } + ], + ) + ) + + fig.update_layout( + updatemenus=[ + dict( + type="buttons", + buttons=buttons, + direction="right", + showactive=True, + pad={"t": 25}, + x=0, + xanchor="left", + y=1.1, + yanchor="top", + ) + ] + ) fig.update_layout( - yaxis_title='ETH Supply (ETH)', - xaxis_title='Date', - title='Inflation Rate and ETH Supply Analysis Scenarios', - hovermode="x unified" + yaxis_title="ETH Supply (ETH)", + xaxis_title="Date", + title="Inflation Rate and ETH Supply Analysis Scenarios", + hovermode="x unified", ) return fig diff --git a/experiments/notebooks/visualizations/peak_eth_simulator.py b/experiments/notebooks/visualizations/eth_supply_simulator.py similarity index 94% rename from experiments/notebooks/visualizations/peak_eth_simulator.py rename to experiments/notebooks/visualizations/eth_supply_simulator.py index 64586a1a..43d91419 100644 --- a/experiments/notebooks/visualizations/peak_eth_simulator.py +++ b/experiments/notebooks/visualizations/eth_supply_simulator.py @@ -9,13 +9,13 @@ import experiments.notebooks.visualizations as visualizations import experiments.notebooks.visualizations.plotly_theme -import experiments.templates.peak_eth_simulation as peak_eth_simulation +import experiments.templates.eth_supply_analysis as eth_supply_analysis from experiments.run import run from data.historical_values import df_ether_supply -# Fetch the Peak ETH Simulation experiment -experiment = peak_eth_simulation.experiment +# Fetch the ETH Supply Analysis experiment +experiment = eth_supply_analysis.experiment # Create a copy of the experiment simulation simulation = copy.deepcopy(experiment.simulations[0]) @@ -187,7 +187,7 @@ def update_output_graph(validator_adoption, pos_launch_date, eip1559_base_fee): return ( validator_dropdown, eip1559_dropdown, - visualizations.plot_eth_supply_and_inflation_over_all_stages(df_ether_supply, df, parameters=parameters) + visualizations.plot_eth_supply_and_inflation(df_ether_supply, df, parameters=parameters) ) @@ -209,16 +209,16 @@ def run_simulation(validators_per_epoch, pos_launch_date, eip1559_base_fee): return df, simulation.model.params -def run_peak_eth_simulator(execution_mode=None): +def run_eth_supply_simulator(execution_mode=None): ''' Run app and display result in the notebook: To display in new browser tab at http://127.0.0.1:8050/: - `run_peak_eth_simulator(execution_mode='external')` + `run_eth_supply_simulator(execution_mode='external')` To display either in "inline" mode when using Jupyter Notebook, or "jupyterlab" mode when using Jupyter Lab: - `run_peak_eth_simulator()` + `run_eth_supply_simulator()` ''' processes = psutil.Process().parent().cmdline() is_jupyter_lab = any('lab' in p for p in processes) diff --git a/experiments/notebooks/visualizations/plotly_theme.py b/experiments/notebooks/visualizations/plotly_theme.py index db41cf54..3155a4d9 100644 --- a/experiments/notebooks/visualizations/plotly_theme.py +++ b/experiments/notebooks/visualizations/plotly_theme.py @@ -10,7 +10,8 @@ layout_font={'color': '#2a3f5f'}, layout_plot_bgcolor='white', layout_paper_bgcolor='white', - layout_height=800, + layout_width=1200, + layout_height=675, layout_colorway=cadlabs_colorway_sequence, layout_xaxis={ 'automargin': True, @@ -139,7 +140,8 @@ layout_font={'color': '#f2f5fa'}, layout_plot_bgcolor='rgb(17,17,17)', layout_paper_bgcolor='rgb(17,17,17)', - layout_height=800, + layout_width=1200, + layout_height=675, layout_colorway = cadlabs_colorway_sequence, layout_xaxis={ @@ -173,6 +175,8 @@ ) pio.templates["cadlabs_frontend"] = go.layout.Template( + layout_width=1200, + layout_height=675, layout_font={'color': '#ffffff'}, layout_plot_bgcolor='#272838', layout_paper_bgcolor='#272838', diff --git a/experiments/outputs/validator_environment_yield_contour.png b/experiments/outputs/validator_environment_yield_contour.png index 3967f6a4ebf63cded5f17b3443b30858b610ed6f..9df3945a38f6837ec003a3e4b79a7309e7d8c037 100644 GIT binary patch literal 81040 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 Qbp{~tboFyt=akR{0HL~1*8l(j literal 80840 zcmeFZXIRr|*DoqX5fo8r3JR!0Z%UOO3!q4^QUZz~(v?u8gNP`IC`j)e0wmIfkRT|i z2n4Cp1tfGLgoK{#J3h}SGkfoI&bRaB{V-m0<(gUl)z@#8+h_W^n#@dGO#AljW4?av zs^PwUbhF?ezJmwAFKW<=<|f0cIO=uIw+KtlOx2}P2asxOL~?l`S^9} zVrr@-*+D!pC2e;(Flc)OwVK9dc=P5>ArAVZkbN|J|0psDJxc2rz15>Ydyp?=-=05S z?4wCPP4kcc82rDyNBOe0-~Dx-elHO!&4aUxbpN7oa3f?N%_xIF=$U^~KF9}wIPm_9 z5y(3RKtuIBo#9<}uu9{l-v1p|1XZ z`#UY-L}y#Fxxx_Ir*U#BCqC`Oj4o?`u?9^grNF_?*OeF1s>ArH+k8-AYxCXhKBhxP zmjhg?1F;QT{oC-w*sR-hD6^6~UO~0S3-5$qfaowb2nn%PznF3+B!t4~$?cshB~|%? zMOmcc#Za}|{A1k2%tLZado_3MT#6EpDveWHPjG*Jqp$vHUB~QNvQHxc)yEr*sOGMj z>n31Lc3*$+xV^rlRvOAVA|Xv`>7nGlO{y0x%}mHBzMVLhU%F@&c%FEy%$kzCyg5Ut zU+#XjHR?4bD(k4%sBDQv%b7{rY@`m=I-0r-Pb7|(-Ell=p)gadMKl;|`=T~f8j;~^ zG){Sof2@GIWv4dk*Rk2hq3j}etF^&?YathzVBSohqDCQkjBd>cj?UlhzT#7Kd)F=+ zGpVQOzA@PC(sqM?-O+r<-X*Dmx0=RH zFBE37IJOLRbRHP-Bl^}qn7kL`)*j!uU8_2_7EWMrsqI`!t9*fTA=yv}@D%xCB+9++ z+Z=xIGmO|STABXN?UBEFlye|!(ehUHlah{Liab_s%N8ZZmvkRP9J)8%}2F& zoUCMCm^q{+o+@{-SP2HP|4^qw#4WZ6?znYsm!wg6m8!6eYK;Lqw`R0wlS-Dog4SdF z5h}$v{~P^tEG)`}YNOuC?HK6TB$rLC^iZ)*l!hYk1wFOlGpzMG`k7mcHfh0$wWlt6 zUR_t&Sq19$LiKwF+GGx7vh3s>OB|m%6{1{u$C9`-X0W+`|Io@(j78nD^vsOAs(+?p z`cPYT!%ly&)0Bga<3dFRi-3upE(Ce)>G(O2DNR`UvdlW7O%L*YkDwLE8hCb4Z9)w1 zV6)h(E>G?lOz|RQ!X&OB+ifM*nHd>{tDnu`Uz_Tzwf3whSXNZfj9RU#Os=BrI|~{K z^J=|t-*biJS`^8t_k$YTr1FX1c0L1}wP<^pj<7Sg2-9rKuAcy&k(B|5w2~ukbsnW|7>`oR;n}iyt4qt7!40~1o~(JJhPz2RW>ZL? zWzs{4q^c^6`va6^M-QhRV1lT+?|<$_>CG{RLbz;6Njeg{0Ai=T`bqO`Q$>+WeMVF=98Yo?4Rx_aB_i=*{DxJ-AT?F+cN(9>bClxJd8F zdVtsOE}S)p7lS{5M%|BA9o)%(k?$~z8P_q^GHlR>1d;j_EGnGBU~&UiWY^|z`7_Lh z_wGG~jjxxjtInmR%b%%qE;KroI6;SUo(-w=91he|aHwcMxt&Z%SO^y;q)8{?N}U5- zsw$V&?;L>JV0G>NB&^8K+!`r!tP&T{WR@7kCSu=5{40ekP6$rqUiGsv*VX&g!GL&pje1c?yTv1CbUiVhk1MV`-^&hWM=j3XnC(Ebv_Z7p)_%1 zW`?)J-_+pMvHD#}J<$r?$2?mEX2H|vH)rCE*4}4i5;M2mz58XqRLG{T4LxVEJJOYu z|1o*VYet7t!2t)op}u{|F>Y$%5~6e^khm1Xd+hFhRKn@&iSIK)+5S63s01`p^k_{35Xu0Lj$k3 z>NZ@qYdcMZ5G7aJD~}d*LgDKiNUtLnEmt)aGrxWf^LM;Psf4eco?ak0x%pohHy6FD zW2z1N&5Pm(VQkFv114tB zi;Itk^3yL-R#SP`HV#Rr59^V=XG|hDiA;&^nDJae>$EwmvfEB6_`y`fiQKVK#kBLh z%bjAN0MzsZB5$7!2|+{5X?FD}ewScsH_HYxcH-*O#!NZKe#!@ur*&sM zUcSet;J@$~yH90R+TG#va(T4%; zynz)a17n+?7!%cal>>}9t%4f~4Cu|N;ZtJg9md-|i0bc&+uVW|DNqZD4P}nAex4Mp z)aY|s|9o(Jsv4i~?H}V)PT_YD4ZB(D!imUKISkK_Hm=MCc=&Sq@WS-R<^DD=OV6oMiWdnw5ad$h z-uvCUp7KIe?^{F%HVSWqV>$xMy3^B-OyAw=Y(?6NHl`sil{Vcu_2@}+r7x;dXAu_bk7&Cgdz3zGLARW0yY zI&v>;EwWMEq$s=Njbo(+(euUlZ8cBv9rXssI%!lYl?mAK;$Wn78pV4Zm9NEm?Hqvr z?_vO850WuI%uYkUNUwEhwgo?GrLyigbA1AF>+Yi`zHcldyv6M^o?EH$Hz`Cp(1z4W z4y75$JG6J4B&IHJB4LfbE8EH)yl-$UhJ=rB=L-uQEVHHaGk;ZJ&xDJw{+b=PjCCLtx`;~5_moOinjN~yj@wiZ}m=5b; zyxmwuY)`g;aZtvC>&F8cKkK}*t|hT-HEC_C!}_ShFxkKB zhV>)&PQMg7bp)LZBE)Up+W+&xnYNhTAN12da0+I=uSX)F*&DS38OQ}m?&;@+Sy}oZ z7N_YIr8SqAee46LTb)0G6}PiCgIQb0Ggp7E$a5xPHVDGeLO zw+zhmohp)MSZudF@*=6kzMby8p6l@9hWPoGT2zC7R|ie9oH#cx%j8|2VE^$ri~232 zj=*VNr_r3*gp^5|Ks+X_^Sxw;&r5}OcaG#GSp9#N1}7hcu<-SUT!{y5cx!8hEGS}$M^axL0V&B%S`*Q zcupUZW6VyPVpImF&uj3c}Mrj^Why=p0FPmDQ_~r}6Gk z(i2r~NU%;PV_=NPy0%;Q%D<%dNJ;fM_lgUi(ie7D6LQw{+^@iTl)GPPQzZ1m;}bJ& z&tjvLXhvP)dX-}CD7BC9C*ce5IPPBhk&Hrjs|qrhHWQ2Rg}AZeX)}_$YUGTa*kE& z7&XWv0P;{(RyfQ|L$55VzbfmDm>2k#s3Hifznb_XZp)}`Zi@T(~ z+qu28a$`UTHLn^5Ot`+5a?7!~FU2QQVXo;uKb_yocI}t$z}Ycw0K2hqv|BmsnX^8@ zzC(4ABVI?FO>*rZ^0y}>V;UBBhSI(+cx(xCb)hN`tSRQUN6aUCb>#m{XRtAwnEoV* zQLu?oQM&?MtYf9H2i2K?>V&)RxI{=a5_vn#jbL*~bE`z!#OkFM$uJ3EuM#xUh6%c( zeSgLEJXUODn-}3B@jxz0G>bA#dM1b-#@Io|cYA1KFUgF*ydaP25#7kHc6GVW>tUZ$(=}R_M2n1(I68$FXAA5oHqDwvvG13 zw(;8>y)&$u)mENZ$EjzGRfhD^2)n1 z#aj17))P?o6GB+;uT`4W#1i}n*-aS9(Rc+62xu>bgzy}!{3Hh;p(QOsdRA|DN^WMg zW2^XCry4(YBc8Keo0-s69J^jo|ER+E)=*wVQ1A}RH>xQVMevKxAciFLkD z`WlVpVWbiI>e$4$sLMVp`imm^Lq;PyE@q`Y^GjfJ!$PPTx9USod&K9u zWhHMF`FGFXv(xH)lVNF-#-EdS7>csFi?65jH<)76geB^d=uW@K&Mog;d`VYdCpe<~ zu481%J)=Z_)tb^qzvhk^F8gXWW{LA3ing~Wp;lGfgM$}kXHJjBWp3nh_21~uidyzO zB9I)Wg=k6pD!-nU8XP&U=3X;sbxc3L#fH}Jv#T@%D`m5nZHDYQ&?j&=y#ip0?dE_Z zK``RQ^f636SD)Sko~N7Nr;wR!T~X@}8BMn_+>woa&0hIY3J}{22K^yhRd;~Ve2&c4 zZI2qpE95bQSSG4%czE680p(9^VkJ0LujbuF`B6d=VQt4;Qsujq zl;!HaXTDoxX=LZu8i7wMc6^v*eIv#a!z#Rg>ghM8ow5P$}08*;^7e z^6Q-_x6eXl=>)6CUY2S1=SJp#E=x<{bC8RZ3pAsrUJEVt(^jSWj(*h1X zUzlbQmUr7PX~5omt$yn!Ddc-#lzuajOkhyiS(KTngzh-8_w;)$U^~p7e-$^27L7y0 z$Hn8*HTyMzQ|JxsQ6B?oWt zJ#%~7t<=iIPYqk2l-27*kfCspAg4S|+a;}aot_`wU1N3W;2p#*`WjwdyzbBiO_WMy z@JMDzuj6@rH^`00)NDuA8P{z}a4ML@+sdo9&gs=c=Nmf9N?V9Ol?Wdx&U)mP$2a11 zPBg5KOI}2_h@L#4jm|HTQ`D=JU%!&-Z`*;!;XacPEe)of%9`&Ue>UT3oO!&Ge7@Fq zLB6x3wf!=Lf*h&)FnTlDtO~#ks9v9sZ)zb5PbRWI0>zg-@LLBvAMSZW9kyW>vl)^8 zWwgWg@>^eZtCjnXK|!E`#tLQtIgS+F;E_UUXeM)i=^&gykU%V)R9}sKPf+@jneV8u{5IrrtR-J zf)!#5Zn*ir^ZoQgrLpd6VhrzMl}f;mq^;+5eaV6_{;0a}57kNABZ+03#&p|h#cct# z##O;T{i!*89OQ7aYS?pL8u}5ApI0IBp;LkVlT&1+1qhTo5k!M81ZJb+80u-Sk8*N zqcZ$_6A14VE3Gcx&4M8pnyzT34KyVmy|wI|xiw;=tH|vnF}EbUCEpoF(H1(750}H+ zNnl3&@T{Gz#T^03VPamnXNfHX;|sei10}GJavymo@3MAvpt0g9y=soEQ?|KY>*Ac5 zYcL<4<1>EIHlJG&+X144mlyRiF3C?_a6kWc)khsUF70rm<5GrXcJ0B3v(I9)d+_F5sf=tkWG-u?Xy!=QEUodIPVt4jCTYJY6Niw=b(sZ#1CO zG@$A_PL389;@rzec*5{`B+l&!CMmx(#4V_HrjV}wXKSMZ!*!lIe8E(0q;_)kHA;X- zB*9l^JJh!&$2W3&HAYUst5(9luXt(M2Q;z_jlTjC3IY-@{b>UPq-$u!GOwh0R?e-v z=`5es1EPAe^Gu9$84#ETAHnZEWl z1g49yy0;5+6Phmy7D(HfsuLIwLf2d0C^f~2313`k`XCSMYiJZB3$D)-A>GTaGXmsT z$aWa>qUM13^my=doZmW|5UxC~?s-KwkG$8EBrB zbVP<&w74m2K8Xq}-$a~+7oa249ky?I^yw}$o-XXE5}W$Y?1=s49r@l^(CNp-x|h7j#;{Mzy#Lu zF*@FeH$s@Cz)qJNaZe}|V;{4k!1d~21%_8`mH~m*9il(REGtMG+bvPu@(y}wVeIM26aA!O^QhEn=V;XW4@JL1L=2NfFBVD8!gfqx9?&)T4lkAQQ%&5(@#^Xf5YDulFyX!roWtrUkwKgwHpOf%-hH<+L;DsKt*_)J{4p>f59S05 zneD?;LG(w9F3=Euc*AgY24Sz`cq&ZdFD0wl=|Ex-+~zp{<`To&204M!WzavqI#wMY zd&&kESjz95w62x<#Vl36IJgxY zXXWtB*x7O&neA3A!x5!%cO2g>$4q-4jHR+1AJZ8y6I2xf>z}6Ux3B$c{nI1}fv{i{ z9HOYI*|VYw&<7zA7T5gpUu&92dH_%bz&bgogT_6yHnOOjE5YzH)Q|1?oj!9Pjmict zO`<_L{tq&I-@~Yzpft88)alEfHPO)kTKcu` zsj!+8d$|WGoPi3%FA5)K{O9j{8=wbolAm$8@DDOziNyq#SoaN29RKI zslY@pai)zJ2niv{P8!orAH82>$ZENXeRop$cOHP`gH#ePKtLU!_xvJU$uxUNUR0ns z)v30M#dK3MMhG@$A$x*k`9(aZuJNE<@I^CmABQ4K!fmpYT`TB}{+kDGodHt5Bg7Q| zBF`$AX7O&uE`%T^_mOWNY=&c@yKS5IQ|HtD!>Ih!Ksv|V*`?f{Y~`&Ph5hixsNB?u z_)Y2i1&}&F3I*02r5W{ba-sFZJts!uWwfge4S{IW%VT9bL{xlta1NCe0z#VK??fWf zr1#k-UB2SHxePgZ@^79(LOue~cm#=ckEo)RGtIh}nqJ1QFh#}Go(g|W7}cF4+|im> zX#%9gO#K=Q5{v>1lC6I@m1Q9Do4$dYR-D2&MwzkO5%T5%P z5orSg_M6$j`#bgd(`4JIv~KV@kDiqss=1+(5~Kg{;puU%Q@NLZ7lNNDpq4oI%Jv_l z8I2ti$x^E|{ygQbe@%S*M!a-w5aMa3ExQly7FFTMgFkr21UoVj2rpfus4a)Bwl^mj zev1cT2Fcs`;8@h?@h&7S_9x84a-uPrVx_bDEvt>=7S~;pEdOam}C35Su#Paxat+T%94NH}~oK{)(Ew zoVT(iUfyx9;Fj{Ax9PGp{}iE2j-MKk;HBz;wYld5eHWxYlyGD^u+KkVNpzn4@I6SB z9XL&Gi4z1nPKjC_qgX#XCs}dok^!MA{LAaETUqlmZVQ0@l?=%3pbQTV?H)(XJH6SC zYIrYgy+0K#i2r+8NQOL~85%n~8lpzWi)O2i+r#{!`UA@__?L7M2-? z;ST%dzty#_gVU(252Kj|U+2H2c`vT1-@7wAj2EsZRW(?IjMj2 z&*M>t>+$(e+`=2AP0(?jreSt&*NapgMSkO*P=0`zN;kz^oq?yrtbm}Eo7~})*G03H zepE-;eDztn@BVB$QyKIl5YnL}s zU0#%MbyW@oXDb4y?Az3)`Y2_3Q@-!VqelNc4s~V8mzl|kolST6jUZUHQ*Q_1wEnT* z4$Ai(#4?Rq%UO`{9su|3hnGbfDye7OrC3xwN;{R0UO{k0qXs;j?^&Ow9kg*bSd5IH z@45fdHpi$W_mI=s-?)uF6hOA0f?!Ic@X>^MHaV(RNT8!jz#Yet(O#kM@!P(9#a0AeEVTx-EuOHcMoolf1K=0&$e(M%_Gf!x%^g%I99f?jtYH=o(}`#=tW@A{`40#_6<2gSKVJ6{?l%7qbRC5BeJrp6khrtlng8 z@m{0`^#dC|=S?L=FTGG*_wMmsjnY5WDFng}(whl{P$>XpV=U2vNVb1A!9|tCd#var zpgCprY*5x0!k0{Hq4LxuzeSOeK{QUz_rq!#7xr`yw?LfL zP7(EeKZ4)7bZrx5$GHbt*$@HJC4?o{cfLvyE&Uw-x|NF<&ZuzKP&&(5DPJ8u>9XaPvLq%xm&ktKX z#hS0W_gBavO%suoy#>~sPyghiqd)5bGYdbg@h?N%u3N{4WNc5fFzreimj`027tuwV zUyETTNGuV~p8g#$qhQWA^WC}y8*CP4sT;!ZN6DdF$M~`a4x-GIfR;VX__JmLNM+5z z&y74|RDZD};gG9uzCq?W$S1tR(Biy4V~ zAzm5h^d%!I#ldCgsuyfXc_0jE-3+J;s%q-}bbn=89ygWCn&G{e)3A;)nJl^?<}cxtQFAZ(_&keodMii|lHVfj zmbWhJm<7VebRzZ-7gVDEcHVuoL7-BtS2C6~-)95~P;@M>f=0!Corb+sIqUJ6DJrcX zm$A$I)hA1y8gKi+{p}z@#(%AMsq&*Kp$FtnFKOo9E&4;PNral$lYiAcdpf^md4INg z1HM#gT=>KSg7USe~D^65aY1g=a9=a;gB z892v7V_iqR47If5z7O83Vf$@2K0Yd$3(?bV^#3IzofuRwTc2)RxFnpQa%2C=xwa&< z74wtv+fdOHOm?NvBJ1rteahL;^DYv@Pk(2fqqjif+Lzj8C>KF3q4CVK<^*|>0t5Fx zxBig|2Y@jy*-H+UZiTtmAlPU3cdJ1Wo#WH9y|3LuF~u&tf7BB~1z?`GQLY?+^D}OZ zd~3uY+7LwdB_n?X?f<&gJJE34#t|y|@{nCXwSlV~-mvyShVOYBKFe~~Kc>fs0!JFH zTj~7-vPNwDky)dDAcZiQ=`7x;-8x1gf>hwPR%HHeA9d1M`p1M>nE z&_7fzouxX^GXW}a0uHnl_2sqlB2&1Ax;aVAKCm2G?cHa3x%OCpHElU$c_J_}UFpUZ z3!76D92OPu%5}rn>ItPR@v8VOBWKmF2=w`UO zQ6lay4noy7dNQY82p+$y)TbiF$15BwyQ>hbbpl@hicwYS?32A{2Mu|%f9*=+DWmc7 z+6?;j|Ez!XROV*lq2oas$~K`PZjKhoAsNBnpRRH&8c$xsj)DM)P12+`ya_>u`G_7KPdm|G+a^MdU%O? zhMdn;M_Z3t*q%gafI&+<*eR!#jTiT?8$`|xVk-u6aGGOD`3LCSjc(diY0hstziLOS znhfhT8YODb?Rc@Ckl({NJJUnaEZ#ICT;uAD*+m{b#7}FBq~lnWA*-OSvbCJJijiK! zMI&4+30yFzpl{{JvQDk_=WUyyNS|545Q|$Gry2{LK;GvUW$mhz56XWU#%x@>V4i>` zb9LFI6=>YS6F!L!D@$c@3B^{=aQE4eUv0^sG^a!N@bBSbjP<7}#Adr$ySgKCb?nLY zAp^lHqe$-H%MeM0kaTdX`s0I|(|qOn+?tW4$wf>X!shlR$x?tPuOf^gHfWt!o33nw zE1qAh^Qn0&UD+}ki^A3?G;(}WY0xW&IXGT(#wvSaZBFlz9diF5RrFMh#+`E({_I}5 zB>BkXuF8>+jEqGpFqvCF$xOtrcQjIA1u_A{k%4|)?406wGJR``4av}xSdHdXk+AGY2 z@!vr<9LoXOu!8#03Y&myQ^QteZ{Eb=RaQPO-EQ9#_{M)7b)gCT8mYHd7>q7@-Yym) za6wfgX2d7X&r{gXx#t{Kw+HNx=BDSq@o}) z{rF_+M$em*f2J(dvxKG-U1eW)N+J66o-j6knZJy)vjurvFQ|M5Fy6Z?XSO1?u6@)K~TFqqB^WC)H zF|4(ho`ODnZ{xLVpG!T}nK~$`om>d+jeK_~5o`E@ZTwrq2j%LLXx@iSOGCAkH>Mqd zT8s}abYd$iV7)$zuAM4JGsOd27%6Isp&lV(LP}##s#TT%HRxh7mi_Q-2pL>QueDX}KeBaYeeC{aNah9i`PjmoPPgmF++!+kf~(yFY4 z6UQcBrSnZq5#gylre6z5Kd-6SNW|982YPK6zewp*d!HEb`P-g8r^pm^%GIk|S64!g z%r>67Ze*(aLZWVyX7s`CV^&(f>$}@LLFTCSWuLKP2M*YQ-4P5_#=l8K+<*H)-?O4J z>Klk46>QgQ^C*$iU5C1*<9Bg|T0FtgngXhU(_AeY8O24Wp{Fefsup{Y6 z3`|~(5zSgxEeX@G@{aK!tgbcnYF6L=k_cLyy7Aq-m(k{t+~?cR`S+C%;zjFv_~Gd< z!7vkJ{FlRknNzt(T)iy!;*IyVVtdj>Z_z#)w8kd7+qdh$+M`F8cOAMdQ^?CwIzf{> z;4XiY@jD`94Cx?PM&5w2v#}MqulH1YPu0Np|DM4;#6AD{Req+3JSZ<*>Xv5a&F1c9 z_%bfvLQ*aN>uChRG;wWDj~8MCpz*G4O6h@*p!ekc6}-f6dU4QX_%&U zG6E!JgL@BMQ>9b~+rYQpRn z^!U=(hZ=ix9O;r7KJLEtpi(8?3E+4A=cNUM9RkQ4cpZY*^6&$ zd!18+>!L_*Wj144`;(KkGBMYfHNk22mqaEuRUZq zF1XiG&>>sb(rs<0vZW6}kBM7Ykc6fwt5Fpk0i|14+^Z4OqWeAMkOu2ZC!PA=mLLy5 zd+>j4Df>o4G8AT5TWWZ+hN8JF0U`2ErH5HSzTb?MGxUoY6I;X2ryA9DRuk3p8*MN5 zOz1(I48}a`#dAdoO`uISA7!3B+0!qQ{pDJpmTvi?LEGl-L?$(rtRI-fn**!iw8`V{ zJ&wFV1wEE5E8!F85Bv!>`T#@FR>t*Ae!T?Xg#sXyj6@hWheWY)a61p?zTPDs319wX zW*bx9UmcJQA*X#-6l{o^oLWRm{0v{ZeRz-7jU#|dD;fuu2mqj`I&x$di8Pwbiel$F zb{h~Pw#cdPyw3WjOIPaL=SiLNv#EGhJgI5SDTugC*+XWd3K*}j@Z-5KfP1Ctxx0EY zZ|3zrt2HN?_A1|*I-s5}Yoz^Am8aM&PF<>|)D&L^G@WOub0iG&r&&Jw(-(}LuzIhE z`xs{v9xv0cHJ6^UN7w6q=CpPnv@{^B$u6+5_FwWE_FlP$P7#aU#z}L%lDcg0YDHGz z@YbHK`#(G8de*K(FY<(EmX@@*{hdfPpV#*8 zU;x$OYxDWEK#{lMm6+a=;vfio-@xd0iSC25xDr5$h{N$ZtAI+`(#gBH7 zC3D0`cGuHuzet?S6f?mi5A~K_NUR-rtQPoZjJ^RbA4Vy-(u#8eS!SlCAGUz)7Kt`R zx)w(2UZi%TfnZ;AtVO&gUM<--R$l4HThWU(yIS zIJ8zNlp635&5|6+nSCtH{+4pk6h%eEFhI+c2flBQdbJ7ly1vm>BJ6 zDj@5L2v@&K*pFf|R`6Skgk4tP2}V5?62YmJcG z2EyFeuR&_r zd<3%`cHEO=TdnfDo+<)Gn-ABB1o%`uLWMz zn66mM0K6y_zQ#VvI6J2&W<394+=67>t31^c9jVxV^}^|Gzq}0jC_74(QS`VCVyx_= zU!~>No_m;o&q|nP_YW$x1?{r(X9h>x>#2A23?R(3KRLpO`zaE~^lW7HW|s8~(65b@ zZ7)$z(f`)dqwCb&N2LyE{-&7dwqD6hw+|KMm7Cq9aK?nGT)V#SzDjSyN4lKEx?d|&vgj$#ayXS)=VHJj!8||Xh$JexqG*K@X+g# zm9u@iPGAB)CK9V~CsyMlv*~EjRd=uJYJ1E@{~7?Dtb(`@>(f0UDRb<9-vXE$K(M>E ziOt@*o+p@l5pDxi2%bX;+wyGb7&nhNY_h z(K)R#5HX9@(xvj(mJqN+zL$CyW+A+~CN1V4%S0e}t;Huh1(0|9s~b$R_ylj9iOcMM zOB(R~m)7~HTRnv`K^M0FYTf*Xe2H7{NjOYP=}Si5qvxLajc8+LO>$FxLM@YBK#c`d zjiTjZZu(m`#@URtejpfWQXHN-a^+Y@in&j!&&ErS#Nh1SAT!H>RnyQNN38SJ zw)=h0p8mfO!L@ruE}S=>AkJI*q@o;RRtI*oUX!UKA!3M#&`aW!nNyt|y3NZM%%x7FG8Jv2wHO%MJh_xvpMfS=hP!;xH$<)^OZdp*N`k}DJCg5e4@!h8U} zOzW%3BJ9`7#;h{EI=>vbwbzltsnfE;Ukgw6{cCH293ozm?&AK!P8ln62h@3-;on{a zsu&^_qwInjj2(hG5gN>jrVjGGd#WqnJs)1GImR(!rcFhftfpD4JlXD^AXjXJs9#Y%t#L^23X&wQfGhD`_~%K3?^?}GLJvW za38z@*8H1M@!vf1&d$rPUqjD}#P0UPxRTFb^~yb7QgUeiPxazE>iMfIdr-?Vc!~jQ z94&dNGZ@MJJvpNObn0e?VP}K(1Y>bRE&_ua-1aV>Xttjpw)G@>UAEs7>5sq}AYGgD%n$<5ATK5&i*&%L%4o6MEgZzX)atRz=ib`Rn> zXhGe(>Zwr8{N>Q>AUDSN!-NKWI6sxD-C*AbaIP4X&6(_M5R`LgH&1>v-tOR(g^!wK zNa(2SWe1!BfGsd6slVu$i`I&Wz%nPe( zmmkS=$NOY;_bTUm3>7G(RkuYahgd5h9ff3h{#ufs{BI}}s-cX9IY+Wy zT2zbqzmifL&Uw1~IdVa{t3ILdkeyg&ZfL}ONsyM3USa{yo(yqt=hr3$3WjJ3AMN+A zHSf^cV|HE{w%RxkUICkJW^VTM9t*GG^yycA86u!xEK_vH6it*#5{<9V@99)RAi`7) zkBk4x!=@0)YhR2>y*gl)P;JiwBGatYz{Qvo?3;d2>BM4u^XuJj7%d2>sF=hm?ol!L z>r+_T0z&{dOMsglI?dPXW4in=>c3S)0PK7yQ8>Fv0p9bC9Pi3=vJ0v1VY7>Dl|kLC zet%BIJi%fwA^poC(zBtBH-L&~-j;@B)Gj!%BUExWE@k)@Sq`PKy!IS=*r)4er(lbf z#qI>5h9t)GB*Y_p5km3*P_ywbHJ|vUX3?yfAY$0%+6WQSB23(0$SKHk2n8Qlu;`1t z4n{S4Y@d_WOs-s36qcyT7Hl)1+hcP2Hn2)&ATNV4f7(<9h|vUhHjJRb*HM3S5;#5z z_A1~yj55luUU-<7;reRiy_#qcNsQUa|COuo&>x%%-dFwO5FvpbT(Y>D*=Zb7&-gl6 z!B7kyv1?i<6$o(dbO6JH#ZHjkE~yo6uzMs!;vtLw=jIV0; zISz~gDtyvLb3L5J6SJsNXWtxfql96yet2`n=j~_K>7qTAd>^eFXmm#*s{|8Zch;Mx z-~e#7&NjBb*t-&!pmNPOf<@G4P%fX;*jk?;$dngceF-YR+yh4UuuY6$>s97G4AFwu z0X(zPVxX=3Wv@-r$4KX3L^Jm{HHi3nA-c_ykZ#CeWv^g?mBA*jR%!Hc=YLXskRg1H zeGiqRMIaSgpLsQoq+UBV14XxTm&A811oUaW37+>Ob*3{7rWE9jao&8)M?=|~7R}kgH#zCmFKtJM)5c=Q9{(QAbq!qeTB?8lGW0y=ebM(R9{ zc}YFk8ic(OpXBaS+wq_q;0WQ3@DPQ2IK9&3u&3TjRYpsGedKb8heRCyD#4joRgHR426nQ_W_cH1sj;iaH2S*iTV;fWsiafT;wZnCf>%Q`>w<5dwMpcUj!gKO zY$zLRoJBmYY7a`;M{@&Mj6aK428^aeI~!ctoMQ_h zMuj?Pb_`aP2r_S&St3eGPcQ5VvG2lwP~l&JwMT&I-N5^C1#X`rQm7w%xC~`aw4vL& z;a>bT$)EkWsq}h~L+L|Jx+8f-mz?}#Tv*iqRt{B7S*su;wxw=b9s>2^c{~R=*l;&8 z4&qk#RvxXWH%>|{yc6e8^3``8)IqJ#M-hB*bJ9@hk^SwdqQ_W|3*+E-Mxmv~ww(JIHi(Fwx>g)oMp& z(2iDFLaAA;={eEyB#u8;2j@ZtK+Bp6ffXl!mMwsmPa+Y9lOc!LIh?_sdlBg)EWFwR1_7eOBd7JpzJ^66Uog3%Th~4+Q2OWA7u<{WftMRd4J%$@YX9~$mInPM z3vv=0P}KV+=#F_^k#DOYw~2g7U5?%YsD#TLpSSFix0Vl^kP7K?v^U5Yr2*y|xTvnSb;mL*dhRx6FU? zM89@xi~-11X(RQY!;4KNFdn!4(gq4DhlJVXFq;3A!sR1EQzgubcXlPxhel9|eJCZ> zz5MW<*ncq$bf&-HVJwXb{^PEQmDjbEE6N1@+A1Fo;o{MoeY%de3Wn>cGZ@+H?^zEN zyBWuBN8j9wS?J;5w$Hk(LDhh|?`Gx)R~G{)_ATE~+im8WQY)}PUE72Y>}vHz5_NBO zl6@1oI&4Z+T{{V%HiY+#M)%QXfQa{R{hC+;)Z4ZyMzb)E3_}35wa9JFLOu5dUMSC-q>Z+YJ7a1@nbQeLD+j zbuZPP3J(LqIc#HbE9cJWxoQ!S*vxpu5K^bR$Vi0{f{NUlTK|VLVnApFiUvdDfM_tm z{cF>fCh|MReU8C!d;4NO(HnC;s`~FQ_*f2j6hc}H;^#3c(6W@Z`wm`v*HrsxBtc3< zKZRa_f+99?~p?@kLA%WR(lHw~g)A0#)wUwB)o zxUe_KLO7{AN#3pLq^%cd;$IVqWdB6JG{@k}y-`Lp-e&ZkwZ&RC<8xH)PDaA0|x;%^R?2CJf#6e>y-%Yx$cVp@7oZMwK;@r;d zU8<2$yX+t@snWiYn}5t%FXcF%_Mt!Vb~XeJ_Tc&^7Jjs0TCnw2j85p zmDFWk@G9yL68dKe;sk5%aTWXG15fV<;xy z{vPR3yq50s9?Q68v!$U4lZdqmY8w13%+qxU<`KU+$(3&vkZa$UgPU_65G{Cvp08QJ zz4FUv7jDOzO%Pb-8eYhoS@N>&X=wM+_|v%WUt`xp>JxH178$IbF^zu=LSh;fwjYOB zS8R4d{bfBSd1Z-%+n!s+Wg-Tn!KUCAvD0KF#QOeUPz85)lkT^oVkI21dfWHoC#U>` zD%6STgSz7wU8vl$5$djkzg;`q-Z~jNe~c>b`n(=jtlC>Yxt!1r%XrOn#jn0qNq0K(dly!mx)ZIe&XY~9Km+j{GzX*HFs4BPaeOS6nq`Q<3k*-Z6 zNJ^)Gba%t1V-p4fN`pvucY_Gh9h;KwZg_7zM-R{c!~6T-7<_QtYt2}5Uh|rBt&J8( zpT5C9W-&SJ7;C~aka8I*l^v=2Ho3-fE3ob1(R#yn-{-!NPW<#KxsY5>;kA1qyU=ah zOuxx4B>V2!n>}%?2yjY#YVqJZrQnc|q~lzAW@c4iQGZLdgOr0M7$LU_;b7}NCEe!5 z(^O$6L?0+MT_s8J^vkiMjWAwp`M|c~4-yofOZZ(*Kz@Ah zb5sJJR67P9waS%_Z}CQ|o9Y5%tpiWp)$NBgZ(jCFS^P>%dFG=H)vJ+;X=E3dGZS=e z+e6g1uRjIen^SX2RT0yTJgP6)COskZN-Pibt~$nhwx5bU*gTmvNLKk|W{ot)n=wWq zIn&d}R<&^5J!X_ii`MCugg8$@Hq1(e<%A*PVeCr5z3<2W>gyQ~42|Xw%k4QpMd7>n zn!grg)uaMKI+lLcn05cUPb@{^IUSwW_RNi(8o;g1N-)>Eju6K87C3{ z*GUHO9MEuMx?X!L=_YUi0;zqw{LVBoX5S%%iczfhX?3Nl2bjD#a9TB2N<}wRH|Xmr8pk^kKri?HUUxwfsh;BzT;1{|$}^y^PrKTZPNQA7`MU9ZwLt~$veu^_ zI1y^vr>Dz#xXL>1Z1p-fo+Ob8N*xPC(0~FY%d)-MvVs<`-hsU=sk-+^Tbqj>& zaRXy5;wP#iS$dVD+4K(&y1P0+4r?hI6yO7GM+D(tOCsyz`2$QRkIxX~CN|!$eFHvy z=XizZdHHFISg0nRnCI2l^1#3#g*s`p?6YqsRGPW^TFKQ3KXfjDio2sTbFHS z(Qf8JLKqmR)F);S?13empopE^8~M}nJM%;dZu@Cv1a`_dtvnvyelHE0m3*49G)54U z|6lzo2?0Q5)8Qlw7??$c_1r7xH}5bxqvv5$qb&mn{c1to82iKY$wk%{>mq%OXeESym~pksA-MiwRysQz_>??p+Sav*_{fPF{?_OEk;2P`{M;_~J7W-Mt3W zoj@K6Wf}AD2WRPt69u2;X5~R_O|c|{2Abc#Dr+zSgZG}c^BNAZmu%NOp!2>~~&KDD!y{d(mK_>O9V6JBHG0==se=44AvWAk5l1`8 zpFRfMj-({2O5U}O;d`I@sTDAIn@+zl!@6NL&iHiOdCbP^n@#TWPPtj**F|L?Jly2X z(l1XQbQ2!I>;WZlhhzhoLw^{iVfOB^#FidzBY-8wfX~0Sax;b3(!n$iOZd0A=r5EXHlZVB2Ef8v*qF z`n?r%&Gf(R!w=|2ryNZ$6OWiTP*Z0JJr|DnA4K8?7y^1y6b=Ql!DbO~8D~czcqdZT zy7)E@4;Ym7Fs>p-KaT>ctAec+(%H;dw^a*JBFcCr{okt?_n+ee)LcyDW_KzJ3_A*w z{~eM|G=s9;_CiKR-M4*EQP9ds)19}E#`v#}oVl#Ld+euO{&!3=7A9GQ+S(uPUb)2R2LR-M9^XICCr!e@RaMdUPMgU{*H$SxM^iB{xR+BgR?yf>vc~5|0@F2~YsD}}cQi&6Y3tt@0Op5^% z?JUFiTxxf^5U1~}US$`pJ?PPqCdbD6st$2xn*(E{z%=`VS{w%666hN0JDox|0eYQb z2X&q3qXt9i9ei+SmzH{LSu-?!kPNso!!cf`4otJkCUEMkRn>k6rt=^AO4=$wuHSV- zeZU&ZD>je(>=gH?fNo`dQ-0 z=|RN9cEF<*PH2@L!RT0vn? z(@1G-);0yj)3d-k$8^IT5y&a;q-4{oAEnqr>+lxG`NPbI^&N$J!vk~bjYw?sMid=c z@E?BV5dxzk7^d-X`)2GpT%CjkRa*T|?#XYql5P7)boZapu7^<$A;DHJ&iduKN>e}R zJ)-=ga7gR_{>)*-qOLumL*Q4t&8N=YHE;0%B8<913NE}6?iEs1+DX-jc|t#!mFVMt zA_3AVg~Ot+e+t{n{zf!NCx!+y=dmeRl1n(GcO_S_Dl~UI^Soo61YW$7_`?>_S&?*o zGD1!wRP_JcjR0n9kYx&2lqEj@*JyTG?ca=$@3Y zULjP+eofaF^U>NYMgCv)^4+Us#e3m$~*aI#5Q{vcr&F|G;vNHUai3m>*{UjS>?Hk)T5!tl&bRKwU!Y{e0lm0(nX z-~~Be5^JJ+lRc{-xOW-b%B%f=j;gkzO0Ix~)Znsd2BSt#DSvbj6ou^bWE&H0R4M#! zJm-ax0Q8J&Fh|yJ4+r{MJbzehMOhTB@|>bD@3?-y+&&U%Pz)|vhlQNRdt;7qw)94! z6A28X=dfhO-2!GEGC*Gc#ui6;P{g5>tNJ(}CXP%1TSb>l`KN#!;6(P`H<%$@9=dT& zJ;PM^>HmqBE!)UBHLPSSbU&JH6Ay5_5RI|YTh7sCpfjdtCo7bNi zLe8HfWVHE-^en`firv7qfJYU=p>@sL zP<(*64QXyx$~<;steo#Iy~rbZV)qdc)(Fv=F8pH^A+>AW#KeGUH+ZatoZ(K!@FbWjP-BaX}@bIUdMT^JVH!48O zI03~x3n4jT9bjfD%}QP*W?!taptfa4F}A){)NZd)nX~bI*@6u6+qaYbPm$#^DvkE> z;v@t})z>@U72vcxBRgY{8{gWksxu+#G|D0s>L4_-2W~6VjMAu{^zZAR59c~(mA7TJ zYU)ZA25KiUoQABSmAAGHc&o|7ARg!O*{*DG!FhUA6xmxJ4l6F`e}p9Hi_@wfrs$Ww zL0Q_u2%uuna}=7XU6#4mMq6&n)tgr zC+=pU?W$DZZj7jXuLD91bW6BV+nDnvQS|R^ZpmjUMjVu0F?eQ?ovDpy1O~(*Y#77W zkCZ?WkKpQ_H0C+5!qs&+$X=f4<($=EPi0ki$U;XTW~`t}?#y&ZT+>$F$~ny2g4t-2 zt>cebc7G#U%L&y&GK*`=&f~Tc_WEsbugl_9FoS+0^yi7zN? z0+Rz|C1}ZO^OS=bl0LNp%He;auETLWDE7?P0y{SxJYqv&=F1kM%^|bZK{x9eqpoXd z1IDLnV=g27P?@zjDIm9v(M`;eW01htq_ox6*gerrf5;f942BURls-AMG6Kc(c8&S^ zl1+ac3ahEj{4K+`J}Jv$vovm*c^qhLEnFdYDk#(0gFETt3anPpADq$y+t#IH0Ezmw&E*=AjiWLu9%9*X^LCu_b@u6zzNJ#N4Jj7h=-JZFn<79aeM zsgDqiieDG^sqH3RA2}M8);a1CA!{N7K3v%}NdjAt$zpxUwRS>O)3%#s@>?YQw3d^n zEnxC%8URx`MB@6L^N78w#GWpwz2C2#Z&J*t??A6g@A(?B^Q@Iv;TM~SDK=KIWurn5 zKZ7l3Lk_O;Jd8dcJ7otfm*7w(zH-`P!2@Z=4J_Xmh}ZFs{KyW+(nn8{CK~(nv4WwQ z^&+`RB|d*8Ce;@uhnH2nBh1X*A^3*mjWwKA*fqh%E=FParr%D``&UR*$mRWI@ql!v z>f8JR*yVdZ-&vvpGFt!kcZ$xtM_}2|SSfL;=li+7KDe&fHe?RJm)8g;^ zH#Ye{!o!X?N8=o1H9WoWn-89{Ty$IFd{=170cvLrGEJ;;p0Q=}pRphiuh^%veZKl6 z&U2>o5p$m~nm@lRE>*uKn!nb0GCM9ABlDQLhgo{CJxf1#zRQva^s{*~5KNnoLhNn# z@zN+LT_Lc(*l$2*aE^35t$<1&Es1y%zt1I0Q;cuQO)RIRsFDXV@bdY!%^SwCb>=*$SYiB^`XUW;euE^sG(H_&y53o;aq5&Wp=vM+@zi5YRv>585 zdHS3R?eI^JwxB|TsnJr-TPYu`!eMUeu{dgWg$6Ce{~|wZL0Iw_Y4i!qY&@|VS6%cO z^%l$EAGZEo8v*S`PvQdvcGPQvjFX`zOXT$!hJ%pAm|*cxO$jjsEc7qfKqr*#Ya2iJmdU<^4qsotU)C@l6;T{HJtqqWY!e40X@ zWHwsIZ?c+WOenZm`mm2($sT9}N?=r--4U406#v@&$k0?9c`E&j(w@S6+pv8lkGt3W za$hBNU{A(9@cse#KGtmvG7!KyqVLw0!zlQ*jqvt1zKw0+;EfX-y6DIhtvx58`PCi1 zJ};Bf^l}&bpV|TR8P+uvyNt!2SGG9`pEnuPy-zB~2EV2=%_d}gBcxNCHpD)P1X+y; zI}?Hv9|b9&Hd^PV6kEZV6sy5EEf0P}mVt=_SH0hP??*7Gsx0?8kxL(Mg9Xl0a+H}1p;fI`OFSJudF!W zAgeYU#=f`hVC2PKV-RUuIu5r8u4xe$6wKls&N)R4 z7atMtXYP)8@6(J-Krv(z+P@afnFibhSb_U^dxQwgD1Ow;dXYAu6L9{tJuOD@z3zbL zCh{;rv1q*~`uYbBt@~Q_(E{*zbVH=IE$pQs zN^M+}KphrVl9*%U@=2&YSrH1ZSxILJ3$)w@JO1O5mheDFRtt?-r<6|_L-C{zV0F0%~s>s zRIg;{?MbVmTrv70rUF44Vz7B$7EJWdajqR$vLT-tU`c>3!4u-`pY?Ub(6=U>vH7Kk9dooaMg0O`PM z?TFy4;ef+@#6z7mFG73z-K)-K%x?VyLCh~pj6dNl_Axd&f@yi;oAUS;3mh@G@bi^2 z!o`Z%uz@A+FHSg1LsYVK@Vo3CG%86Or--}u4j#27tzY)-3bij8X|swxxiI{LS5<(O zv)0w3obIF7M_u4j*C}(76=tUP8Pe~Sm#b3;=jPxYN;m!pjE7@in_My_`=*@8uo4f# zxqvB$BKXb7oD5SlqF>a^jk*gr!hKN=k52gUt4RrYWGK$G{Xx?nyA9zBMtRA)7N>u? z7Eu}iSiBJT7(+9>$3lS6SEZRPMMfQNq*SHSSuj3b?#EHP5n=lh|JK|7OepSwZsELF zHkJ4gs@aXQcC`ew>Rdw0dNPhYd)nM3?A;;Cak3EeO6&%j4k9}M$^`Nm{Hgb2S%7m^ zrK~0r0F=bYKkx<%kxs?k1mQVsE@ijhpE<96Rb71Uy`&>fGl$0x0)~p{4fm`b&pM8)J2~w&6DXs?Hy2izoc@6EFW}^%+d6(bWh$% z163h;H>ju$Nb}CWP}k%1>an$xLcTxUp}RNf<<$TOy>Tpa<$c~nR`BnIbLU_lH#*Ro zFKTnL{}QoKMTk=v4I-s}mlh$GBmiHUhb&=EgTvr$L7k?O8-N?C@$b<^1_80`5$Ti9 z^&MbV997^^eeHUb_m`{41Lh2+(%2MKZxar=5MRWt`MUlC=+lPbfohi--w?3@8{Y~? zurt`61a0vJe%PG>P8OzgB)M3Ne1HQ>V z1oj%PFb(PO@`W)$oUmajDp?W+U$aM8*QF*{|N3P-kh+lW*8Blu5%%H(KV~87ok=zL z?Ayz2oHqg=qbfwy)5RNg=zfzzl=kpJk8HUKT3*{@?k;)r${iZ=tWvcVidP6cLD@9# zSPv@Jl(3}1E{qCMC`3y_d!zW*NVGuB9$qY))CU+T0WebMh_9qdcW7Ev*r!RF7DsD} zF9iZ&t6cRjfAfT3KZKyGHu+V-1eS}E&yd9*B5)eYtlOPy${6ouq+zLFEQXDDQmPZs z0C2Bkb)Lh>>L2g(|8dX9Fniop_5u`vb`e8j^f-VApvUt zs!UA^pd5dos|5@E0P7p_?}a-8?Bz)KhaM+opY>+C(=M+%iy2hsAI|Bf(^3DN=CmbP z+iEmZC*fCdf;FfEkn%;wk3`=xUdyO-Qxhr6jCN5e5QGxyMV|kgH}6@dnh(EI1?zpP zC?$oNQ`1H7y*`oIIIHM@x+_)}e2ytvTYC3lR3gsvzVwP^S#X~2ke?1(*|-c4n?&tz zF%`th&VnCvc`0KbLfPc}R8XA+LMRmIK9wgJ@NbdhFLxh`?~VZLI7F@>uSYwXEl#_` zh9~dFO_Jsfc>SotN$&=&lIrlVlobq zvi!Xm{#(kR1PmTxCqpJaEVCiL$q2`Ew;G(qaY|9Vz_*Go9*-)A4NKB!lXON+7j>ajDE;w|M3-{7BZ3_MZcS3=151O2UrktpA)uoI!c337Q{+j}1?> zWw$XF%D$xCELx%49)s^05dS>pH3uu@ugm@qb_SfO@$CU>N7gY&MmwYf`Ut>YVV?yEggAfIrt1C18@|{jnh+%; z!O+LcS~Z9LE&A?=L#|xILI*iT5z-A*FyWW*K^AS-gCyLde`(BEoHrniF0OZZ&(q{c zG5BCT4`xN)O*+FLALKsvg40wa6OGEU8cOe{?5PA0jXyn**E%Wntp#a99HgNP9efxv zlIX*#P|B1v#f5J+{=Dwnxc}%L4Eq5{o^%Hn&SmY39i>U-_PohCYBUJxRGz8*AGatG zox?wr!5^otQr8|C4+hB@SXv2}p+${TNc3t8(diQ@W`kDHYGxIl#3$j$=Lrm?!lU+! z8&^h@FL9}%$c)obE2n;E*S`?&B>zM1E+7H!Wb#fig)at0|0^ZQ(bSaaIj}#>p=(L7bvNy=lr&S|`zI%qg75q$UKH@v_if!WC`xLJNS2trC z>@Y2+N^$+6BLzU(Hu{mQ(kC)pqYY22Ip7rk>r_QlKxo?QUY;B9>zJ!P0sY*3DU8R;$g#Mi zn7xoWL4LGx9zogx*2k%o>wix?NcK#zt@48QaeefMNn9X)89d93Kb7i`P>atZhXBMD zxFlW2cabCZS1NdCTUkP&(mW^Ezi!w4E3t~lUd&l?i5t>j8P=4ZcyC3wSMC(zoaA7s%#Zidq%p%7zUEmJKFpY+NMEK5mb zFtm}((w9C1&lrYUE@cxA|HAowR5fr*rey({&=EYO4TTb;o^+&z=OJ#=pu9w!-VHgw~LO0HLq5G8LxV#6O?rzFp74~QyZtX3%Fn#;CK|%TGKFioEz1@9mHb@r$Xe$`k zPind)K7Cl$;Hfo#34#rGs@M&`9<4r}VzWMc2L|*oy3N~&B7>Ryh57_Y+(w=@l-7U^ zzCqz{0#-5sg6Ag+#>^gA$k=Ih$m6Aqbd}sEdtf6NJ@+uL@uAneNy%`bBf)hWxj8ya zc;N@Fm4fQBz>^rH^tX!|Uoku+r-`-q1ghiuk6v1VEGQnDh zsN1$ao9_elZ|IhW*CfcSJ8L5oFgFB|Y^8d>p_jtkz$}!?JV#)h1IL1Q85sjks^w*N zuVR_!DvA;yw!u9zvextfX@^1%WB9SUd=0DB>5^BafWJaQeiSV?P)Xi=UzfJ{FQtnL zUwiL1aM!EPK9)M4s0%tzJo09@CB8jsgA0p_eo}7ZSjijdwMVpG@ncP63bqdW`#g~V zUOvxlc=`>$@tc8D^P#V-=$?DSHrc(weKdUMK2uL$rB;(#Frc_^U0e+nD3h(k-Y99w zg4~k$FeWZDWwu>YnT0CZ&T)i>&`UYE?$xKJ(_+m4g68_Llg|XJn!(#DO^CG*qOXr# z=J^SHZV^z23Cw`ka$k~nM%y7^T!2(M5&52mtXs@%Q+{sE2v|cmcyreP;Mmd!ADjF>%iW2IgIh(TM zQI4DDb%F_!MMDPwr@qf)u)p=zqTn>_JYh$qy3n>kT5^=8KMcngZ3 zPSy0YzjluNRboB58^%uhxg_HhU|HL#dZZ9ejxbxg82{z^yY_c=XJYwW^d3D0WMEkC zdXzOM*Vcquj40i3bG&K7G4Z0C(6UDj=&s>^1Dw(V@%^TJ1f_&;xwW}-L;Zv}9uG8e zU#K{mUN!-%Lo4tWi_j%r)M-7B>E3ws z)H{+&p5hZwBIHGb!VgFzFl~d@MmZ|RxFtS*?`kM+*hHuBlKq>ae$W90FKdw_+4Y56 zxdZzad{^Vui`&`wU;zrhtEG#^`l{Avc7n=9o_Io&n`>l_2I9~yC0m$C|0oTU#!WAf`YjT6EU->qJnVM&x z?yF6T|2^T@vw-NgB=ddSq}H=lSQwk*5{V?l=PNi?ZDT$7gVlTe9YV&?gO_~gq{!e7s*I<}Ak!7RO>GUzn>oTh=gJPK~Fst=-mGw>)w>cmSwLX#WZ80YZw+N)Q*4X!FIYP8gH z-<+&|P4H$qDGPhE;qI`Va57(r+-K34qu%$nN-(C2bqkkT2Xtp8KI2N(mXi(b+~iB8 z5$4V-@Kv2U%K|{%%kp>AXM8y)!_`|nWU~?6iH=Im3KNW0J<)f13&*8}^wZ6lJYJT| z-@??9M?&5|bVYu=8hyArd%N>F#U{A&&Il{uN@;+RGx_0@rrU+o9IeLbPQ{m%L6gsU zI1OrjpQX58a2~v0Omy4s{&F!I+UopJ& zjIbKA6RV0Py2UZSW>>xkpnz&oOV2h2J+zvfY%I$DwJMWveS>3YVBzcEsD_kl!%Oc|~{e0Uh^MIRm~tQAUH-kH&!ws_T< zjCnivLZltJHc0yKd+!X@;C747sqLTkrhC#lZZ@-oV~>eHeVcW0hy5E+(m?j8x^^&n zH3Z(rB2e+{#Kh&EtI)84XJ>S2^TX+M8JX08?uil4Hp14w?>`s8u15DmjF}T4Y)5i# zGy>hZ9ME4ws`aG*q%#Nx8Trk?0r@{ zv!im0B~$A~JIUgAD1>!-)ttx&&gBmR2QnA^J`ao^!f^pg=n!3S_0!jQ4p$} zDHXm`H%BgbHtyG%8mv^Lo)5qbsgDT8&-wyNzBYE4cO?Z|y~8GmN^SOS>=PPH@!bKg zf|76?d?e_&>SyaqLyIxES`EFJY;qSw_nnlMuLApC|I&JuRJFfEnIdEW9wWKy0H^F= zTe9nN*RTnCn0-Ebbbc~InO+)!=zKL~{YDXGNg(pw;N_h{<-j@OO-4NpweDqzQ<-y^ z&?uAMH~4+?%W<)#oNo-9B)SD5>ChR z&7tShF?9I5P863d`7(-fkK1oBk(tel9=}ZV(E-rFaiL&Yp=6| zPOjeL+|F#vPQF(xRDt-pTx`j;5I|$1qK|X;{Dg7(*kGs zHPRK{#$>L+P_6Xny`;!IE~g)QFWFt&tQ}z8K{2jNWoKpjPs{OmPQ0Griul0rR9mZ# zFJg<;u^Tsebi+7^^Baa=>xp|skaX)Y$i-=uz#@Ie9}K2Lb`6E2Li9nXOP^(E^FgZ? zIYcCH@=D`PAkc?BN4vW~?48)b_M^L&T!GvP(y{tu>$eFZn>nGCxIzgC+Uv(mrL%QX zA0t_v9qx6C=9z}Dd^omeEecjzycgvhay<{Kc3@~Q8DL==ltGV_z3x0IywbK+3P zr^q-%`FErr3SJo({1=qzv14H;UW1y4AKjjiAHU?hZ7JiLIcO(fgM^~R7?n?3o6ppR zpQ9fEco{#wmM!_9RPij`VEWs;Qq{a>#eK$`)(RYnjs&&o_AblA0fjcppU6%-)s~h~T+hdR-Zu8Q>45*4QDFH&0wm zWKJ~~c3Dv zA^i#XC~9JARou-r{Sv+h#(V=H?`H3hHCWAGqKS?)jC$LOI~VoJJeh#9G=Mjqv0=%G z`d~3XCf#PMjAz*QV9u_SRKVzs#%Mu`ss%-S8s<6x12lJBXD`lYma4Af`_r(z)?E&o zg3-<%Gi%op4Ky9#ofe$yU(1EF2SPJnTLG0dK9iZ>(<1bBw==Z$;a$Y*^WMijFmpBL z2u35GRJ144XJY4vJtb?&QrE@J8D3pGO{D$C*Oc~*W=I8Eei$!ZIb`ZHScPRM z4@JSRfdUO*W2V`rq<8~na%~o>t~ITF3#a(Sk9MXJi~2PKH~myXgGDa5%`7&}_BNtq zgKWBQ0jy=*cO%Y*w%&FacGs}q()knNl#D-O5v$qZ0OnW>`1yj*UI!~@PV6}vUSG4+ z+s)?tJLHUa+X4rC==sv(ugkE*S){}Wp80$(Klx?&m2C#>>VkNA_<4l`6$QC>a)4|m zWJx@6NMY_#VOt`#EJ2o%74x5B7>FPCjlj4jlfY8j&JaYyrWMHU#(t|D4(&C{?Ou?x z2I-(HGrWRrn48XLdlITd1E06tdVdaXRQ%Y~SGg$$B716@MfKJGnAd==_jjN1p^tAphC9^kMK^`TM76;U+@}5lC|nmzl{z65dCgAl z?D{7INtL+rJa5xI3U_@uO~mhTOQz(%3sjI7WnK-5&OBks_yS3MeE2VA|4-!O17P&Z zXoG8^-c{MYpMiXLw9w}ze=#M3xMs9!Nv4YrLTOjSQzu8=pRS(z7;NhAB;@~0Yd%^E zTpwGJI;dd!nT7__*e)+Wbhk^eXwP42J}o_2wFQ*ljrP}yGW9$1sqwnHTbFXK#gd_V zojD(&`lz@Ah2WNO@%)9J*ML#jtqpsDI-yurY63U_9aH%OA?D@gyYGd+o=y zy{xwM(E2TT&2o$Qn(M|r79PleiN+?K7bsO|k;NhILYr-I)yr=;%qG93A*8_c;1P}IdIu&MHflC$jDnf z1qvnxorPcFHuRH~q&F2j878WbGQ|a)KP{a5lJ^}wK)m4W6KA7c#sAc4z!bSDd%~CP z^gixG7+`Wk(7@@^ud;oK;^1B$!-KrS^S!G9`f;2oI8Vx*C01+f1qZK=&=C=S%XjX3 zEx}nQ_l3F^ntFJBO=vLj{yJLfwGF`;8qAG~4jmy9oBK#b-AZ-Suja^b$nl1=3~|S6doS z&>suTv-Cde6E=J7Nn$JI99woK{(X3gQTNx|e%G2)>$c={A?)Iq;x>)8qQB4z=yCtv zgOt2`if5oFSI6h0AKn1!<}7!j6b#*M2Pmqon-!IV2-#Qmyh(Vzu3k4T@pmvS@wb!D zu|z*2bU+2a$G7(ib{#Co6TW+aolZ4mLf#9<_|)G0igfm!8R#sm3XiF!{7(kIcWFvs zx=D|E!9XE(f5Z-o(I!wKW*(*wUBWAPssj>9)S)cuY4+J?S?Wyg`Pog;%VTg|J=i>A zc2r`%f*(mbOorH46rhJ$Fv1AT+zYr-e`QBdW~uw`$PsNf-)@6J5u#mqk1DSfTg>@m zjJJH-^rl$>vO@GhdIhBZ0#wos$89zPsZpuHC4<2KSD+O2XDzv`b0kB~mr`TJ_A? z&lC=N-|->xcxVCzP>t@wY>%GO&UB=*GF+MlQkTIfuhauaohSzOacyj1{ld5>uQ1_Y z3w4_>AqwC!YL>@$*S&h>!=mDDWwsAb6JQz}jQseTfHweYobinETqMn-5FhIxC3Sj) zec`}pB>v$fQvVAR;iW&WSA5#bXtKGCX@nlUgXa%4pH~MgRz^cVTXnOQagrcxchM=G zhp{n(!c%PtU)Uv*58TZG`udW<@5eSs%9uNo9EV!~OIVvlXIxS+4VFT&0hX(U$=hAka z4b$U6NcK;0m2T;@sQq0+wiOe;Isy!hJ<(qN#;n-I+DFWBVx-zfLgYhdk{{BEp@JWo^lE!KL|u`@slsckA-Pt<)o>`$w= z;U@IEBpb8y=^@B_9>Za$6`~*wCLYVOAn2uE!z4;Fx_O0O{!w@?o=(8bKOEh z7PB454G+Jq&K~W+U&kzJ&fb9 z+Q4DFSiJa^NTgY3O5*8a5x8H1y*=wiIMuDVTulKDmCaIVfGb0A?(`x~!-(Zc6HrJE za9T!D-SRAE)_8m8!suzKP09UbV4an1z4hnFU^Xq;&-U}~sKe<4_y3Rs%pDq#f$e;I z_s#ZKozBune*Wz2N@69L#&Cyy-RzBkvB{WP3kcWdG^oSXOCPT(+0UQ>=gV8u05f+# zvvtGWQ3()0dr2eBQu8(X$XJk%S5fD)75D zz$p)OXI^8*Boz)xNuB`}p7uvKUtOps0kI{y`V{2uPVc(g)3G*x6X0^x1lBM9SPiF< z0|X+9qaT{IPdk=srR}6Oa~8jl5!|A3xQssreqt2)o{zfcen1{@btY%FgpSMDb7l3+ zbB?}eRJMfzsMDVr4e-yWJ@+6*)?n)CAaJ@>(;>kkc(@yJd}BU~dNH76brxY;d=` zNVp1Jii-^ES z13wsr!dPZR`cqv)T3%wR7vU}o(>`e1M$|>Gf$%?@`EQ8>&T;F&%Ke4I<@9mnl`p0? z_s^CQER6Oj7UG4DTqh%AE|r_Ba}$7T9Q4TS2`GO0v-8(yNC(6MTEm+6>=~$dWNCCt za9hazi75o{o=ZYgoDKilp?MK}qgx7?w!(-kBhyaGeCOK-ugw?ult!0W>m&BDzwUpQ z;_TeDV@D_`oue_}M#aPD!8s8H`T<3=EvShpib=NuO{q=TWYaG?MaW4*o?=)sOf0A| z_7V@WRXFT=Q#~(tvZvpI$0X;2sh^_~W-IbdeleP_N5+-^?BYi3lVu68iSrr9j`59{ zcfXu_^vc#&DLq<^ocrJX9)v(0gyp-6%kYTCO{TU(9V9Q)d9aNq^g2K*-I^v>8u={M z@2K6o@7yJrxAeNhM_h?VNX=3!bwGnQ?P}H&n^Y4D)_=atLko3ga~?wZPz-gve)L@3 zx;x6{>SYmL0YX{zZ2&6*ia8OLPp4Q3@j=~#n3orFpCguOXY+2lBYtW&9w^dwNE#~@ zW7e3tvn2`o=P+QkjDoT$Q zeu|iFpk~%ABfs-l6m_g4{mEwmi3EQMnYMDOKCs z7#~9$q~pP7cq#ujmjGQd0-{J`_w$t?krxsW*x7X-7e6?HVAzcN7(o&A(X2mnf^1;1 zU4ue==SvT7szDIjvwqPDOrC{O<-ir2zHUqObz!j{oI$d+{?^({>^v7gC8K=k$WF7O zxSIw|NB5O8iv=$Q}fgSo$3SXEaHYJ{3 zb+#qXRJC}q2?ZsrBVUjlrBnaYK>I4lxqfOa?XTAvw#O@WzYtk@SEix_frQlg*_3yg zv;Hb|b{S8`_@dJ~$&m8u4`%7VobLTd&3(7Wl(Y|@Bzh%Dw2+tq8DofPBrHaaXwWC9 zZrX4K<@b<5FN%0yln-r{Hu2yyzYtNbkoGjJ_$+-jmJf|o%j~J?L&3clLlzG|;qT zx7e2Z)a2ZfjdQekznkSvmoUtF97C5zol`lFT4t&BZ@v)GsNHy#Z$DCWl$>GtNKBVn z2YqG6ox=S-k;%9w{THWO?&mX7bG`ZP`W9tWZ?a&(rztlj6489)WMea4!? zN3T;iHGWY7TFHuydadb8tV$kSu^C^nCZ7Zhju#cfKkjWhAV{l<&T3gfHwc%~|#okT97?cs1*&-Sm%q7t4v;e6rFiQ-8ii2?}FL)Tv) zEF<8L6{@3K!$jxUS8vnfU9Jb;lcLw&%_jh*+KU2>*QJm{v&BRB;|~VD(nb)0bckHs ztmIZMO-`*d#`HvOlPmMUEI;lJn$e(eM&(=a|GCu&QUk`AG)ybviszzZnr?}@9s46N zkmaD_=={G3;==BtA>kd%nRcD~{(9+S=CK*n7L?1qfWp{C6y{dGEU{(ZM~|l0Xs9>wQdX?TYl=GCSS2P_;u!ZosbT zRQEl&=?cWX>wYX>iUlMrQ6T%eZu3R%)MKTajG(_FzRFng^Vr7&Z8`u)D0taVY}&?7 zEKB934Stso$)Ky3@aEViWvzM|0q^HVl%da|4jOOgL3@l>4^JmdCy@8?GBFa`BH*1D zH!)3UG1%huIDUxFeenl%-NK-@EUXEVR?$iwer|%2NiXr z|1%8XuTAUJOLtatG~rWqH{hp@NHIno zG9QbrnX!>5Ju{Aa~icWEh$)zH1W-{z>j0WSYi(xz(07bd-;%>IHcFcL_Gfylg zaAV%!UeYkXkc#v4SADxiL9uwUzIAl5>;D3C`@dd%8t4r`4k3-Z(+`mVewcs9gCj{N z73pJzPJS`by>#>|2%O?`{Q@!46Qxgm&QA!n3R2G?O+;&Cy z<>1i^;$%R+tna&7smsBGGwH99CR`9A*slH?Gon{=0r;H!-N}n-C!liNCp|VJCyxf& zv&)NXB6Wm=!9SOR&P=2HUJr%VUwIxllCD{Scx+~aWL}862a?e7Y`IRRr<^m`+8l=c z()L$fSm>hQ_%V&z6Y>?biT_ZE_gxd<7}^rv_wwlStCw2e-{9bq`FG}5Ern`9aB#>Y z;=5+Uzl_~{RDOc8jwO6XwPc*R-^vuD3%pgrJOw6zULcYXcn5zEV_$K;(VSWXH+geq zEb~*nXng+*$|r}4&0)-V`JzVJu@J;y|J)1ii&BCoibc+|9it3XwBCbRuU8f~CYm~u#p{em zPH)zyZxK5>B^KN76uJw2_?MCiD2{tOFEViq;5>T*I>QEP@IoxP=zw3h@`CL_!_Rc; zviV?zAO-_)F9=M&UB(>ku;~KZa1R40tO~HBT0+dWp_0)hO#dO7htFsZsS{7@AEO|1eS3~#7%v5CzIlQ;QIH4sn0VLVEyBx zVj0^r?ECQv5w$quD`meig^D6v()vX++r;1*$a5u{ijcP?{~ISufZaWz zDd;pATQd*&6=#fLf5%;mb!oc%yfpjG*2GYOq0I`vlD1YUn02&zhU`0^lRo-}MNjyW zwr_kdMx{2wC)uoXKp!xvaF=JC@22l0b6ke+HjVge@NBqO(tOE)yJ1J6BV*IwdqpCG z3THUz%Qg+g#6%MZahzcV+uL0x$23RL zjfjX@ItDnBDLqe9Os&?{{c$@XojbLS*>JpD?S7M*8EA?>7Z2Wb;8zy(z#I-~V(bNf zdC=|CH^JvCv3*YNTqWHg-1NM@wd!Hw$KJn>&lp4Duh;DNM4-5P;soRbtbHkHOwGYM z)owcjZNsS|IM2R(@@04q3}xh}wp&&%AKeMMaC}YdQ@>uWWGgY;(zm|cXZQ|B|0!MF;7+RnaKnv17(aLk;~vbozL8Ol`LPK*ll1_kfj-?& z1G?q};VonjtYk`ARzeKDCz_Zgq$MeZ3Q_l#d;!?I>w8F6VVmM#YA1pK>3k}Tk_a)3*s+m)*G_&LwbVUB$#Y@PilfCexgeZ5EBTmlbF$q~4Wy!NR( z&vSmq23%iv!*Vvuz#hqqXO3S@I7UItjtSD&aIwSXExC}6*`7jm&)3e=E;?)nURr{;X$ zfN@X|9eNpLqYs2UA-D{YZTN?AATI!bnvR*Yvl(+u@~;Jb_ZE7IamXodJKf4ly;rmE zdjKwJ6=l|(>ugO|EOCWXyRSpze_q2Y;}{B)k*p(KJRX$KpP*uF`2Xno%CIQAu5Ib= zlx~nlx>2MB1f)wE>8_!>krHVT73uEoP+$P*27#fa8@_A23!nG+{>`szcC5YfT<5~* z+~!H~7G!tkdhVMMeitLHP^zwtfVuY}W)5xpqq*hK{}nMHgRW`UFSHx-M_J;w zweyD;mhbHw&z8d?Lol7}g94#POQ9BPp+tW&MrmU|A{^3fNR*@78{Qt;Ab$YBAvw!Z zqryIN+%IbmL>cA(AxJWSAgz~E0_Xvox#S3-G$sY)GmIq-71N>|6E}<(&ku3{ybW}p z0Cw+%aW?GL?o#~pksZXiNX`bMe1q)y-ny=XbLL%wwYqcw9@6_vlYjcHHM*%*oD+p>CNY|2jhDT^L{eoFJwYk z=IRq*ZtKiQ56kM>q_r%OzY`W+ymAjRKr*`Z)q6=tcz59!j$GC#{LWD5sTl%5>Jjwu za9qWt{=AG!)v#AwGjB}{&1#}v+v-VMc6MeBNoJ*QSMWuF&H4CHh*js27+U&eIl1xPdm>i(UIiwTt zBVc5}N$Pz~Ti&-+rcVs~$)B^tqsR=-Fzy~Rj8rY(&e+#JtPcf90A@bL9X~c(Bno$J zNz>b~fWRn7AV!+a9;x(|V!Zz%=;yHqq!fmDwv0P%!HLrMYFoY9QcpAE8IfDNF6X-F zkJ8kSQ1cN`3EOz=&A!WWMqAL=Rq4`K>mcMMKtd&^^t(Xc-$%n3Yuk%~bTrDf%|JP_ zZ1nK(bJ{;c<62*e-sY!-K;`&X0p#j(4V%2+=BYd2Rpo#Td*8KYIxLaA3}b7-)bMENtm#Cpew*!KTO# zAL))FJKrC_usRZf=ChDhT{+b^n} zRUMJe&kcQv;XpNEzr0;q48lg1eB~Q@ISPtpB}Q17LY4BRUU%P9uxz-2-na`;HK(NE zVVRGg~eeH&`V;7n|9lX9-YOOPM$ zfZHE;ko4Pv?*NH^>SB1JGnKh!6Y;EO`*30~QQ2&yg~2_p`W1!CiurXfhSds?SmD4E z$?(AqIshRk_}vjdkvkmRx~g!}2C5v!qQvJ!0EkXe%InH zLcxz7Y*2EpnP>xaBmY$>g}%UNPoSB>a#ZehUe%(NWWV{KuH3v;@8j(Mas$;bLUE7R@bgb^9*ejgyg{b~pGLym z0m=R}ipFJdnUWM%-5^NHAbb63ngNTaT6s~Z43IBxHH7H5b~a*VuF)5C%; z!g8DJlM4tptz33sfy-j=#rUbVr9o5EPaSz8hbDc2`d{45#O~Q+iWOpi2q79&96~Pv zFZzX11rDCL=dpXFY31V3zwA%-R;idFcdFKXIl?P}9!!+`CR0z^uAdZCk z%X?MuJzN2_mx)8+>*@jJccFk>tmep*YPuxiq551oQ2~9s;>8QbEMH4vibiXRo~V?y zm)dYwA#V5f^E^M4lyOp!;IDUdfVh{hgU4D>6-kT(Ey!%|0OG`eS}<_0n@Xi%lp3XF z+taTvMxfj~Pwi~>XNv64>y!PljA2}DJdLhc>LznS4J^=nDIo1`jUE==9Jh+(Z!x z&`dSby)S&lXb0YpG6L{kUtGtrg&3|-Y|?t7X*Mr~4{amW(~oJar%6nzdQOB{6KzJX z=S$?1EEFG_7`?jR%C6gd~@8mFC-OF`?dCH{5`ZCH&NoZa)&GVi~+zPy4D8kc!qh6dOhT&Y;w z)R>jtP+64tR_hkrTa!Qj`?WeCT%I!fomC@#*;g>VN*_X`SnBj@0+`RqPI%MZqM8=i zG7nKy3wt7n&Hzi>8+j@WknyX!!kVaS0MYjA0IRhti(tu6kAiA;k)rF6c3CqKunI0@kCRPJv_{N7C6vAS4} zqx;x5Y^~BxKvO3CVpj(9JplJ6tTSOfO_xv2UqS5_(Wiwo9jU>)J+kA;b;yVHXTQ4& z7&URix+3!w+IpP1+`p+O{DH=l2w(v!<1FVD4h{1kYTnQXP291k`msY~9fWY-3S9@%zi2__2ex+CuiaVo3T?s_{wF67Rj72m~uFsIRhOpLK<| zZ>Q)@^$9(E4#@aWoiDw5F;L|J0Ozr@lqM_RB9fTtwH91f#m&cpv0I$TnM!~j*7yr6 zpo4pZM{g&V`jF7mP2c@{dSKS9MtFo$;*;KxXs4m@`m zDLxow+#n1Ng&(H<9&48#wbJug7DFz6o#a2-n%|;S4+SbTXU778?pmvb7__}&9!Qa7 zHTyArr0rU_{gg2QH0q$7O?3g*o2|*c>m6wrAe*Oyd^?>4?{-SdDuMfON+SfbxWHII#pT$XZV;8w{6ka#$0D#8% zKxAdfV166g3WRpsDhd8A1$3LEcRzKU2n5Pkbw$4H#W3xyr!)4eXaCQAe}gKf+ZS5J zZV;C=e~-J%5Ec_?Ynvt-peZUm&>(4&(f1 zj;;%m;9v!m_u;?rYB>lv6D(Qv8*HH1TF%zeV|5%sOC$0lf32|d8Sq{DV?yfOLrw@@ zp+YMD?NMR?r`cLlLN97RG2@UbE;*5KSH| z0jQU3uX5kJdil1?#r)VS2k->Y3>kO)Zhl?Gvh%b3w)yZC-q4iU$G4djVkfdQl1dZ? zQJ6A%mN+vnXF|0yAATIa{w2U4jb0pJ z2Rp>Kfj?+dwViWC&dc&5D%$jpy_o)*liaKdL{&qaLwcb zK6%xD)=*!QgJ>0o(2E&Xxm@`NSzlo|aNJICr{nik?v%?a>Yn%Q00wD{0RdT#N&=$z z4Er<67(Prz34x<)$3odM}9$C65mv% z(enGhF++5bTUA4Fv3KN}Kjx=(J|Rz-nAlj<9_O4NM_?N}<|!ajim$AMD`(a9w;t~e z8_%$PC^!-@a)4ftYv<-^+Z^HeC^L0dZ+$dy?MslHWOR}2*S=|g3#WfH`@-%KI%IY_ zi#ez1=s0)obx3r8rsbI2^6@$6ARqRC92+n6Z-Tywb=2&)_LrLm|9}1l5z(b=B+P!Z zq@7l|HCBq-;6;?nB|_ojiO-fS+P~7@5uKdm=H-`aTiy8hlV1H+XrSh8%(ew$`{0f8j1eclvJW z2ix*7jM`nuH_$yF3FT&zk4^e1?7ngXCWFuT^mN%M)eP6ecSr~180dci^RSP#6_yWYfidu>7SNpGaW=8GFKV<6XQ2rg~nkLvp1is+Ao=cHbL3g`ijy2#u&?nDXi z&4A5RyH%UWy!wYYKJHCphZL62*1XmJbNVqy2-(Y%Ns0XOmX_oc%Ks@GK=<^c@c>zW z%S+{pJ=&4AiTwSp@&Jo(Ca_FTO4@7nF9(@DRpg#97m?+c%$2CIqa(I3+-4Poo5T3* z^=8%|W-)$rJM`{0+n(ttfc5IBE{hk0Xb>lkZ)>lggbAM6N}o%mgY)zFrmFZ&B|wvY z5fSu){R)=N3u~lL4JaOnKMco~Uz`6GVv^Z`yb52UzC6^P!-D9C3l}e#kHJ*aQhMIv&dttIu zR&IhZhZHu30P`!-g zQY!;}_h%NUt_liE1^2$Y?)4L#Ap4Xkv$H5!b3#sKYZyZ&mPX(jm)4(8^i{=kuXL1e z-!`iZ6&`Tew4n%U&t~+hEIqR|yb`lJ#eC5y*wU)#LH1D4n6RG(Y!HHbHf-DOZqU6~`h26JtMS(_!wnb00zazW{90F# ztzu*;6V$guZ`n0i{}CB;yaXucE?^_)S}1zXQ+cPvwzVtn-*55rtY-7fq#0A==5lJo zuu5d|hmbghJRO2&58wQGj!v+ns1WB?!SL_VXtd|glvEmWOksMXt%C*X>5No~qR;02^3 z94*aYLP`6tSW=mN_2$hX6}26*a>K>PT5OoVE?cJguIWY6yb=l5|Fn?!U|A|1nA?yU zYX?^DMwWps1l?a@QCH+xkdPj;`d@|O%Y}zs?<}jB0}qt4V^)H$mdCh)sP`4wuP&ok zuo2w#a@S*LWl}HzC+YNP53asj<9*zE-LlD5F*H&Bfwql0fY{;geM9|E2WBA#w;!fA z|D#+j0p=5bF|#nV*yFNMbMR@gvF;^`-GL3jjoqXDjnbR%{L>^y>*3?xIEwJYJVfUF zmTzK%EJcSu6eyYV>!wb_CuyoSV0=cSiKt;cSj7tq$p!4^^*#0s{kp-&UM!LX>2P|U zJBAe($M;P40ngx1+7{jM41BMh^@Pl^XHDxm(bT@I#e?kHORz+IX8rds-iqQD3R4wa zdyc^eNIY7+7mYAH9oulZY(#wRWW#~0S=P?`WORwEwY1{!Z-S)196KKOfDL@GGVhd5 z_A148*ZSFVX;_wIKBi#(O5|w%OZ*B<4QHjVV5_9cEA-zG^x^dDkq^m7ckH_=v5)Gc1Gpc6t($NtK0q^x;oB z;Jl3HKZPZqTPXV=TJzb6n@E)1n6p1UVrU<0Y}v(LVHXP5Sn>{A$t+DMRo4vgnIn4B z{S3{E(WPkTRqLNRo+nVk84D86u+(zTX>jkrP;0XkR!D+$G;6jNSwXbCiiY&U>{QQN zYzVe-`p|pwCb`~x6?wYYoQzE<^kAb*=uXeY?NbhX6;WxgYf9W}KJ%#0eQf8qXb~tH z%_rRl$wm=s^HLI&e7|g1^;=MU+YB3qje2I;EYKkYVcdcWRPZ-v4@9~WaO&Z_i>RSM<+7@=DA_1XCC=Ax_*y!8Za-rQ%&)-jq~ zrVRmJLByOLah&)(;iZ(CBHYz%jIiUHs4|rc##I`IFz4kWV_f!Ab|KvcJC+yNv6BdA z7HRN~;4AnNvwT$a0(v#IP-=dY$eq4LTj~&5rvKfYx?yk|O zW=s8X0x)}kyHrzk<|n@Q?V?)$x1q@SM}f)dwh~kF zwQdsbo13)dt;B4A)sgc&kLGu*utio);N~qjKc;CSYzt~SHF?9UMf?B%qb+WtRr`_V zAV=B}&C+MeRg5O5SGE^c!>Xnhwe8hYcZGU1qM^}0@NK3WNzd>1)L&*F z@vnD9^vx;?A1*H$MnzbIYXVEif2&iM_Q)T1vo^IGo|~R8zqcToI|piXi5gfe#Uj*G zE%~=bwD6P-1^#*HXFyysn;yy>xii$G-)i7-JDw=?n5&-S?f@$>en!<7@7Gnd!Lh$V zwvvfaV*OQgl~~^oObGAJBrO0M`eX;UJ$@412Y=&xaet0qy6aQtQj$&d^((7CXr}H$ zaqz{Ebrsb^#lnRB7^pe**GCqvmYTBHk+N}*IY4A_GVJ&(bM5|nct-;DgZnv_LAHrS&u8fvZC&IA<}jl3Fx{Z0MA)k-=XZ?)!b}b)tkd3$x1nuMkhl^IzF&3Fo9JrbhB< z-YO<8+!ofBcE5A|Y?)oOAb;LERK>O7@U)T9HSy+$&7aEX1&~D$by_X+6HuF>Dpk}_ zaM}BDMnrylJUaK;ZbW}6o;znsbDO6x1h%p53!-{9o5b*ixV*;ebm8~Io#nK0{dNnw ziC(<1PhSsbht7?cO@0EnQT|xt+t#7&Ni3W<#&HF_c+)^Z>_5NYLnpgZ!$ zc#-Zyw8oa#CDPQJ_6^mH6sK61|DB9L0wu-+olh-ZqjI$Hu6^oM7IPwHFyPU;9^O`o zhiRdZJw<`=T2E3BOc6w6u1l6Lt%cqVZ8~a~3De2s^DR}lA(lS*CRwU@cV?f49xnAq zNF0C&bR+P8*p0@pB2&r`K2y?j96<2cjpOfFJ6svL_l8r@uxrOMY=w`S`D7b*`n4Cj znJf5{!iK1KX@X?6wfgiduvvi4^u6Mec5ivs_@1fUXc)~y;85tp$>@FH+ank#U*CUq zDSSW$*BS=ugRqQNhx~fKpJzP}n`ixek#$4+f%7t6x@my~uJI>Xn37}J&5dw1#0TU1 zL0NkoNu}yK@3F=Q>FcS@ivRD`C<9lcd;Lnn?By7O+hufok;OyAtSYf@Wuq7tKmZ(7Ua0wGXHq>{BO!_sDX6roiRV8|vOvBf~M%)|^6;J_V) zqk?VR>^Hj5Ad~pE!Y`+xmJVw5qRd10d1o%}C@)nXa=u>Ho-;%sz+dB6Pd^>|$4!UB z0E(FSLohNHz=ejZ1@AIdn#s9~O10Ol09|4WWpkioNne+Fjl$GilQjUpFrB0$VmhM0m=gIY|NZHDoZ2HYx^pr*Z8l=CAqZCUq#4aC)1YxNfED;q&S zaozr&L6rCpkl7=IPAD64I=dYSKy0Rz3=C&dcu(6iNrXavEvo_N9m}k>lpW|OY8PKh zkGgAckHF6HHVPAkoag^coq)b}{#XzX2$+HKgAk_0YSQ~t9Vwc^dv9d76f)@|4hv(C zlp=bWFMLZ4#>{pO86m7iH@7pqkN#sHa=e1Ou0doxd}%=%5G1+X46 zB=?-Tj~I|SyCfGjl{fd5Z$Ipk`@dEz{9heb!McofL4Ai)_gv!+cLdJ&B56wLG)rI@ z7^Jyfv0CPTgzkGNJT2{`Z(G)Euv3RAwBa$+_74`o19ow(tl+k&=Ecx#Uu5m-irUo) z>|m4Fx`%6b>zZx1^E%`70p8p_p5xW|A_z;(t$tbHJ}vxQy$Nn^P}u=w!OftYMK@diKX^Rf!D$MJ`g<(Yl8 zUx2Uw9Em6u{h$=#E;06ZnIzLW{zq2D2wpJ zpNFU}if^?nJ7)sGWE_}G!%J4gmajPe(~5&sjZ;M?Ps689U_OU_eR72o!~5f4;B=xQ zxR=`3{eGJR=YAhB2^kmBnwVFNH)aGF%nuE&3Qb`j%X^>lTdUFBt6~Ad*u8>a$qZS~)m#5Q!v*%2@f}^-t zQ3))%sv`nlu3&gf)WWpkQb@^Sl%PjNnzx|vwvv2~L9V*eZ8yvPGXGmWpZ%Vg>=jU=V z$Ksqv6B@mSSE->)WG4;{dZvZaPg6YU<@>Qr=UIb>Rw=oTq#tRZ3EoKh5$$Fb63yKq zF_>2AyFZ28YI9j@2ZA@ zAxVYrEeXS4Jw}RJYbC3$EJK*9E^2_$vgofYs6V}<*;T9@tW#0RqT$qoS~6S$uSMBi z(7(OaZ-tTV)cnlCUjbgnBbm}Mdgu*M#@z4_Ahd4cYk7>BO-pR*3Pyq}5t!UL&ql5g z5@q$mG4$z^EW`CZg`o>KNfw*HE(~5=Mzysx)AT6~<07`3a3~H^v48c2#>IQ@5t&Y^ zx@OcVc87ZKogx29 z3`gsnMdhUL(_nkB6rSjMmQdQJv}mNuEsx- ze&4%JZXY;m8Bg}uVHr$vGUI?Rsfr~3K!sNmA(s#q<#S{sx31d9X>DP&GCVKwiY7_x zaX!rQsE0G|(IndmnbwM!`Synlg3HFSoP9#Tqx7l?%_k!Oz3$s#L%MRsoXND z32$04lRRxHFFK(OZ{nCSD=ms4gdg7H+Lk+>C$+56RZUWS3Aj+JfF~&GyTLpk|1>9z zg~%r5wk|(@^6I(PoJ)K$yoWs6ySvLx;+b`wEuD|;cNj}=j8*t%>8r>8+XsoHM8=2aZFyPe!u3 zNg{q1+eyC{E)OD1hx>&ZP+Zk)$=O|yC z^PL z>PEMALS4fs5Rm#{8QZo`aguk9DSKL9xTmqtl3^wPT4|h*g$3;O0ev;i49?~15v$kf z58Eh;^2gm@^g7hvu2~d$O#enGS`z6O+5}$Tr#otr8cw+tM4m31AEx_>4 z4>H$~eC^p;73-%soI3!3>3b*w$=Gb2l>!7!vzocVc87WyN10YifXNJ;$w7RJ6KFd) zSncIiC*V3)tm$VXead6&xL1YyNism_LInS#XPVoZH-KgZ-0~a1jZ44F0GzmC$8^wr z$agMxISrNcrVZanoQXYfrIf{%m%6$XGHZ5}oLn z>EB$pI3N}VKAVNnY|q_o*WYK;R6-)^nElAlTvvo!SB{(S7B$q}%~nv1NHt*dTH{L( zmpp{94WoDYc-gwce_?+2((`xbX!!(Kl;Zu|Z-te4x0GL=ou`O=)_RK0;PwGNQSQ#` zEGTR$@BGSJ?;YQZBfLsMAPW+3fsdUZ5T$N&NUH?newFDExhZyfVqXzeM@t1;qg7EF zICtRx>_8^9POst1tQBW_A%DAFEsRiErD{pDIsTMNdeV5SR5>Bbga*zRR|ePQ^bR4h zHcm1qX<&c=phV+>@NVZUlta zZ502S`WDcO>u{AJ->=bGgFGXa@1$7MWr$H{*vtr93#Zg3sh!Mzp45&}@sZrW=PSU< zNjRk%buAU;&z7YdjYyXkJ&3tz)y~&JqSr&{7e(FzRfEs~wi}?W@G2e(KU)J{CC?sz z)$_{0*?BdM;OdbtCaZ>K)I$_R;#@J#!A^nebsfH#e75w$M7oyD&Ptq!-# zqU8|0iB@KMo2X^BSh+en>PK~z*L6c*B?IN+OcU$(-Xkx3SypB;EgF%6OmdrAbD0(Y z)xpFC5TR2@CgSAg0{&g66;R0ybEmc6M@5GSC^@~bI$lr^Z>MwjtF9b094Q^}hsMB` zPOz)*^=WLPz~rclt91gI&9jCuDNDJ@=#7tJJ>}oM;psI0LEG_FvTz1HuOse7 zqCn>Srwl$j?lhx`B0t?2^L74z`-#5(mXCCR-bJua2jOI!+N^Eq?@w$28< zEhs5n=H+jH>!N@SYO2z?(!&X+fTrHEJGXGP!CO0kNVa3EOqEZ@`J!+o1T8|k!l^{& z404o+Gj39o>%{h+cC%D z#_FCsuZtem_Pn8Y4$mPcnHRyUMH6Llz??QA+H0C^Ti!ik^yAHjynE2)%-^mrb|P@8 zT!L(An2|9032H_D`ye3E+W$Mz`ZL^LQpWfBi0d_1^tnVzttkxZi{}y3D~|REa+`3~ zTjd3O*psd!U+r;(U@3hH|7FWZ(`BsT#-q$dnyfaQsHm~tSIo~>tVW>-oX+oCOaxl1 z?2ps{vf=^3NtzrGi~O5=Q)X%RbUHzjn#;RWZbvys78m*5PjaHr=un9eTR1&R{XpJ6 z1h+kzz`^fHp*Q{4qZFD68H+vWBb0~1 zHIOzCX-3-HWbL@jWRQ=QwrvG%h1GXBV?Jd&nyRvfMxzpBsIR@4Rrc9rLXcNlRbP83 zEKBo7&LeO>hLuNF=1qNP#oJ{Uirc-%K&twkkJ#l(;HI1G=|6v0!44>d9d0^tF#uvB z$p-5+l!XDQv*Bp0rDT9^F6+{M)oq-Zjs%YvnozJTgf%`tMpZ_T7yZn1PA-{ThP}Rs zn*{m>9!!HT8i?X4qSzwjRvki-<)sHS^po?8jsL((zf-NVtD^^TF#2P9z}7AtVGs|F zsOuE{21XyP)+z{_i-m>h%+u%tLnXlY@ZF&{W?4^@K!YmGzM#0=PR(#sL!9r@;*~ah zbm;*uMRF)B0J>6Cvm?Fp?N_CKs1j~0NH=`eMi z0{kPV!D?iP&LZ4x|L72;!Hy&J3ueNNsf|)VF9CK_9_4Y;>IYptQiD+A1DGTb+B?&+ z+>oK*-4|%8FE!|c^HcGRct4Q1x9|Q3?Ro)xT(q;D>s1!;aa>cl#(E^L<ZT+0jE!u*qTKmV#*9x#Z{RnNBG}x(p-pvb^a&+*rP?$qAW=oUDak zzxsu)KodQm!zP5+W$;g?He3*RrXSLAhme4YC34K9;2u%1+85=X52ds7a6Sj2_MD~V z2ttf*?|*NlA31z{JgyP-6=X4v#$L?orl(&~UOG)G?EU16>T-s>5c&w=&oZIe|BS)F z4>timFOb#jg_#M{lJzQI_$6OX6ewqNSU>O?c})Y-)$lr{Q9>1#j_!JyMam~5XH+Iw zgi_e`&95MF`DUayybYs#qk(*KDE*b6ne)H?tF!?#@v06Gq6O(gUw9y?i#~{Wvb`Xl zJ2L14Ni7-@1-r9*k-Bfm98y3Mjt4hZP{QX@2^yka?Ft4PkHFx2V1BfHj#`NuW0{^5 zoe|74?NQ?4QE&54%a24ARGC~E06@($s0;GS6ZID`VC+X|xaQ)PJ)4SJSIkUswP5aML1Ga4&$^*>trCux? zxY8?AIIp435w1!e(p0u4`B-=dfp0364kY`v_wrCLFsIgky1xXhPmI2H$#g~$Ji7es z%TTlpPA?vAyqRJ^YSG%w>fa9v@Sws0odom)nxg_vuu_PPguCw{W^dX^kSM)^6P?6c zZLyauDa)Zr6+n6*#}h4FH$7tFkY?l=zSmLil<+%a6e{7-=;C10>e??<1E#i%vNtFH zBurjW4FZ-!1<^iu9|*8U&EOiZZ;80LuI05@+pW zv^L0KR|<;{I?oY$g`C$B!WW@o%E-W+UtnSR>oyt<9rJHn4|TW7fqO((j+K@K(3`@tOItgFOF$@cbFXk281 z{=q)mlF>Z1a3jOOU;Y%GIXtEi=4y^LWvpjU$uK4@{}Y@&HC9U#1xXfN`R~z*a1RK% z1X_UAkKeliuG(zn)P?pYq4 zOfKJ2jL zx{b7fs)F4%A?0|V%D)^o0f>Oq@rSdpLx*K$@TK}2R9#p{GYw1ZXo%9uzzFCkGkv%h z+gEJS00g?bwmmCNwBLQVUF=-hGTY{v1&CRQu`Y1PGIlS(+2vnx^M_Rhso!7$SY7>9sqylJ&6yvx$;^0@{KeYIUk+WSx? zIX0soq{jB;WH|qrP{7T50l0azog`{f0RLLPBts5J%=_^gH)A_cBZ!3+&;i=Gr|dfD z&(MJKh=dLDZoy)NAJSB=#OyH9PpJA{3 z?gI=@?=pWP|Jb<3EbeYsG$VfJRSIO)KRE)&d0jrzLI@&D2lMjc=Ce7GUHCi|+pPBtABn>wb`H;~k{NcOXrTIjv~Zr`^b+>ax)c3h{X zc@O{;UemXKAcc~Gtv0{WDg&^x_{M{|dW)pM^vwaP_XZJ-0A`h^i6WNtDf2ZgwupQw>yHJt@jkH&@=P2jyV6U9k0A+Ts3pZuX5Bii9xPSS065nHWv+kDRZ9r1 zE0&JB$<=-U=MlR*Z>;w{pKrEX3sAfQOXvJhD-1p&kL9&Yv3XYZV-nIov{>C?M(~eA z!32H@+<5w3_wPhQJoa~3+R4kI(1|w*EQ6B|7Ki`n_j5#qK1VV;iSw7Y9P9)2$Pp-8z~@k-+^MWjm5H;3 zRDs9Cqn9(Q8&ksjtzx19SAQ2pK)3|M33rUdAe`-iePMDygsP4EQ=nTlW33$SD#>p( z(yp#ECuONd_`cohWJxPJ;O(ZIFA1N0xI{%0ae5(99=MGFPN!P>pqlIh?}w4l=zzX| z-!}~ELpPpGN#eZ8>W$Z?`b&ssk?DcevCrIwk!kDWmIRO$px=gBUqP6=X9p>ldG~ug z*{Z-pi)p40w;K+fD%c%C+5!g{)+fk}IZX<&IqNBgYn|+x3TLH&n42S(GL1+I>p~yR z&mXXu*>Eg_gtfjyCzxuup*wq?vx8b;9Qx zg!ayE!*wLhKkH-vb|t~|mQJLKU@9bQkl@MC1cq@i}t)Cgj5Wz6KdcHF;320)lk0n1ay zuRc%F4@A+fEATFTM>E7;?STNAhz^7#LcxgnJvH!pj1h=p0}>J5zh{^D>`TjTJ%tk? zjpq6APQlP8-1l@@fym>Qw znUMX-lfUe6a=9sCWHc{?G>ChS&mP^^>)-bTtO*}j)4ic-{;%|F`$h}}<7 za91V%Iq!YzPqgX^O{3SbH@=UIFal#9Ud1bAC|sD|W+tYI(g&t*keMJCKAj+L5d_Ch zDSVP-yjq`|vTz)AzUaOGEW=MJ&Wo9U-)M+0hX_A;m6D@5jKI2%nHyZ9R{C^iLAXvW zEAC>#2fOcoA;ICV+8poZz&oy%082gDbS!(6@AI}Z6Q0ydXzFKZF+g@r6ioWFp}|;` zPhfNT=#2bbV*7O;KXM$>gU7)WDdCI;5x1R*$pm2om7jH-z6+BI?fxBAZH;i3c{Ivh>ZiYYVa4LUE^$wFiN7Gh60>&D3^z&`OeUY*xqr>M}B0YKEOp~33Em=QNBxcAOn$#R=AHT%J{&WS+bneuNn@51!vwRrNrc-~)p(G#OL zM&uN6Cf8rg*uijGEdfklhQVMU0)O`N7rTXBbeVD$2ISaJD++XXAWkfJLbgs4ns1mH zs$1FuuNgz>CX#c1+M53BXfAsVz%+vyng|R&JSC5tcZRd`S>7s#YqXwx9ev~`Bdr74 zx-9)Fg1R(z@XPx8Gq7MQ7{B(o_4Q-NA59drPL-oiF1riZ6;HX3ogX*>JcARDY#k-;=um)(%9l_OzF#gTZgX`PrzOY1vHp z;Tev~Z3?4-kgjG0u5hLTCnpP>&zQ$fwMQy{Y~p{~b@>Mr?>_R~Fuap*^!7emmt4dj zNg7?;Oakj|c=E}>xmd)3*cJb*`BclVTK;?FUS(f+HN#u9;q6f__ErtxMH)Kytr7Em zjdSv8xF}Rj@E7xt;D}B?;S@38F#ikxn}P za+IZ7Lio+^J0^(BbBQR@V%>8APdX93CjnG~^d7 zIc+Y>*n?qlKTN-$vKbo+P@Y#0iJ3@nh-t(cY2Hv!Hs4qPfYgTJu?b!!^!lGl&8Ih# z0%i8+LUC~+aB08}6@Mt)*K5w;yb|HFUkWQaxFBuyxTb{6=MEkEi`gvC45BtI9rS^Z zhdU!{bUQI2Vlo7*2g)566m^zQ&#!BTdmwOpC$h0|x`>uXxg)RWmg3_mi&~{h7lMpZ zGvDy??1AW{XA@5!gbl_DISmLdj**S^zRgQB`ngkEzixK2S9b)zar#|350>s9cps5( zuxUq~8+yG?{VMg%FK~Rl^YYeutiq5#t+R=rPp{uKWls2 z?hcgbwAegWPL(U(%m{g(?k6&qNK~u7(|A%ZbvTqx3t=T%$;38~^pQ zt8V4ScN_New9HGgDz8cF!Q+M~zwSKcmfU$lU6C=h#KRNAeIZ|O5$~EbTZyGcXYsr1 z#gsumM;!j<13x#-b(izSg$Z5z5GBW{r#VwU?IjQBb-_)Ud{fZ}_eRWiN7-0S0~Ah`rO)~-`Yc(fyY9Q4S83XiH1p17jm*`z5Hg_Z z_BYNENNaooLaWags~@?5Obib%T@I-A>QNrL1?>>K-?zZZqaaR>^tc_>J_X;v3(Ngq zg5|}lXdl>QxEPvPaHBUahy`RGGTgw#0AJ$`j9z&Pcm#>#@BH^~m+7NN(vXYjr7AU- zWjoA&mdrp~*FIbKcm*gX7gY=hA`#VX`Ns~pE*)@AievRX>`o4F06y2H5>>_reC~Jx z_#Ei;p#G>BLt`hnNR=^8g_T&@iHXZgXA{{kjh>YMCbOZjiDfC^ zhAH}O08ZFueJjj@u6pFpf`he>`-$`*bi@;krPb9y7Z?T>o$Gr- zw8GT9lc9Zw4`V&5ZQxrfjB#FJz@mPh0uyrbK=H!XIEZeoFDqq$l!O`OikBv3b#3kB zCj(XjZ5=+M0Ths<5ufIe$y);f!UqmiFMwRN*Soho0SIXe^p=1K+?xD~eIaO{Tt@!v zE8mjXx%$np+Y?-Ll(ZjF$uvup>9M73g`TKe)Iflu^D*#K&y1u0s)N8NE~4vkgIxKtSoU3(&KEsgk|4z4Kua3I=%rw zf;Jou8iU$tKdg&sCKj!{)y{DDwer=1UPc58(}5Eh}sC%82P|9=2t&r zGymQmqFVP zjTYGt3>1F2Fc3i2r&l6k0c7|cri}bwm4O(%5_Yrf$@6?nNqUf4x_#=Y2!(6|1w)Hm zqSq+9>RL(1ZsnANb=`&7|6}W`)p${@cF&}!iV9zyEC&hXV1*M5T3Hwz8fw%Ln*-5=SI+U^a9=vjIm)o zi$dTnaFseitQJK7_}!JlaccP#-?S`5xFw3qqg>X6a;N3Liymrs%)jmK+i$xQf|=z% zqz*$q5_3`G@0s&D2%#Qg`5Z2}5&vq!Bn-AL*D*s*m;`6a!88o=lkPvA1OyjlpaT|J zg>!I5AT1lq!GNBg`yLzfdqEhkJk3(>1>;5K@>}Z%%&+R?YL)eIold*itFw$OKOF^h zuBW))$%*A2LVIE?J8W(WS|J{}C`iH|soX{|4Ax4N(p8*$H}qN0RlZ6}B=)SLRadLM zXFhrgx^I(6Gycg|?w5ojK7(9PO7cX752S!z^gv>FA%narZd=m4(Q}zm!;S+_Gp5$$ z4U5`~5RDga*RBXB?0@C#46_*t-#IgBDIn;5|5}a^+HYBSLz)t&RF30RsM~Iz4P?QC zai37@aiNg0xp{$PgE8J`ha;t#$qJ@7uPcr1dpz#=@yA0@PoDV0F6E#N3TRqu!Za98 z@EvJZBF!F(zdHHCHGguQSKa0Ew>uI4u<}(Z>T~6TwMt`>aL6Rm-3?Fp0&FEFX*@;< z_wUcj^Gpg%uk)Ts@`x6M5lTg>Gi(Y&8nuWn#4CV;{`vN=+rG#MW{%NZ{^12;K#FJ? zJ=*J4xKch278h!yXYd|h&A{#>q_VaazVY4sV&@ltYiB4e^kr~c+poQTL{u=m8GU`% z(l$Q zF?yHE?`R;{`S~}5+zyb8o;AZi+Wg7ggG!l)g}ze=DS-I|+Y%>99fVW5J_al%hh%x* zbl=!p8mN|m>h&C|T~ZIM)1yt4GDIUZF_W0KDk9S}C!!$|3x_wM>>%I^ zt(apt$#A^Hif+j6=N@!LI8|l#?Z>P;#lHQv&aN>u9(W?Tk>F-{mu?Gg6vf{dl=N>5 ziXGvox8ji1%t$0gJ>S{gVmslGp8QoZBkxi-r?zGz>Jv%ODKqAjKQf7p;f|x_0G-hR z{Cx=gzOCCgFG$kieQ{ns6PwVA-rVQa9%qP6C9)q$tql@(9k<)Gb|WPkJhcvY&9Ppw6sh9;!sD8k2avL;3Z>@BzXc5 zT!FP0S5NlUJ{{3YZ}#9n0RvGoZTSizlS-Ai(|3*vSlKa9<|3pwNfc0in0MBL^@y(^ z%YKPns(u=`4P#Z4XKg$;UCnarvZ1DiiwqCzblEMupH((6mO*NI*GT_Ak|0I%UB>Pd zUw*Fa-q%v|xc6-()XMi7yJy&B)J=S`?$f9EFy(PvbCl9Q1}8n1%L1E}EN1NqNUxKv2^hU$IDU`l}mAtr-6J6t|SY<-8cD z!~b8H2JroduYpQGU0lj00-t1%OrPfZn^cJ!wr!JaU=LzG&eY|Q(i7v>Q&AU*2;?SL|EW91LJ)J$&Cth^$kTVKTWVi2q}p;ZqJ7>hmL1z&%N#0 zG&$S}oognm{Qxa1`|%*Fn(n&*D zT7p7mgY*il(DGvS{T1&ucft>ptZoATT^+YTT!X3VCmK8+X8+CL2A2pExH>B2!gh#( zIvv{f;vFHR>Wiszv8ngYQ`dLOhaC8iS{rRDMN^{{okx%GcAHwm8+~2zQ}HUedjpBU zNCP>Xx?vksK+dRbt`{Wn9IKP?lA1Rs*1$gPY?Ay-p++!+0!wt^*br zGLor}U4LpNF^D}(QHgz50NP2n@-eZ!;YLz?nSh3$Hj8N358luWi( z!!2TVvJenmUEtma3cl6dw7;Nwy=lu6`R8tD0GlI6_$3bU0U$H12l zI|v?=0WG9XPq=msJvKj|Yrbh+bH;=)7+%ze_IQ(?ipzg1O5Uq%v}}{_7!R*8Pw})Pkx5t73+hdvL1H93(Fhvvo4YpcsaPPTaP2|dYn=6qlROYw)tCIbH zRtF}6k-yj$-vksR?3*>1*~1;huswSybk)-<^5PxLm9U#{;v1G2XuEwM7>l?_q)j}~f`z8ZN094yYsqo=$$W>N-ezbmlV%x$z5=MBvi}C# z`^`!swbi!)Nvxa#|L*87P?rN9@-gO_wbVde&Vb^M7v%I(*X0!N^?H8)la0$$=C%d% zvGsW3pR+%NS=>nCSAW(#N&4mJ-Tz0Z4qCe$z1-{+HwP}jIh$-qaHZpA;ti{~eciLt z+$py~S?$G<3^Tje-$%d9<%HxjrUuT0wXMhYN-t6cd~dybnGA^lq6l0&Aq$jw`K$u2 zcDdQXF6EZ`!jY6tRmr?jzo)LcLl~K86;&EEvgjVq4bNs}YWtKFft53uaaT~9mjk%m zrc^skXuwB(&LJDht7PnI1{KvM*E&79CWq2xDQ#^hB)UUH962g=FF)kn%Oj=GW8?N8 zor(Jshqw=2U3RCkG!S$SR%aUL5&Gc4n-62Tfd)#=8~I{AJ~?ORn@S@U9$L)=drQk1 zM%J>C-CEOy=gq27cMYW<%7)pH6@uPy6X@#@mbs1>tG2qbJ#qOcqzrw5<{f$(rcGkC z}iw>|~JXR01fG2WRT06+yXz%~|SD=blr1t!8JGxZ3Py!NzY*8XXtS+tTj zl&2O6cxnRXL3RaG2trI(EQOFy;T%#K-|SVx?tTt#P(H9*19$y&KJZ11ez3K_+4#3Q zdXdvK47vTM5RIS@u6FCmBcM1mqua4VfwepwrUpbbV+NFex^Cz+>tSn)?^?i>9E-xt zYT6L~oF8b5LdSUo1UVL+qpHL@iWM@c#JHF;5M+LJ=f3z-HTEAj{%;TWyUMiCQU3^( z>*bK6taG|@XLLoIug7q!m1a!2UHVK|XX$dhdHrPMIJaT!?Ay`1nX%-=R!RNRJ5Qwd z5Qw3f!-s{;NhUy+b$FbnQlRaZuC8f3;oxQP;vpuo&SBNy(%?qb%L#1gyOLO7nEQJ2 z9Q1|v?sE{>Xl=037pudN4=|c<1aOCv=RE_klxhG8tIXg<+LS!X+7gSkR4)LU#k?aU z8vWF3S15Ow+&;hicK=-W52cmbe?on?{AgTUfPy1>(Amesqe>GTPbM+~q?=mjmj!ekw3 z<=!I|AgT_SD8-~MBO3b3stW$}zo;f0_@B9;Gx^N~;D6NM?X>L?qJ@$JLix0qR6$1V z*{2c4XDk}|i+to5pFGhYQV=pk&8ZG0+x#hp4v29&8Q%O1HU@~97;fnP+<+{~r$q}D z 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 diff --git a/experiments/templates/peak_eth_simulation.py b/experiments/templates/eth_supply_analysis.py similarity index 100% rename from experiments/templates/peak_eth_simulation.py rename to experiments/templates/eth_supply_analysis.py