From 8e759b0d0fefadbae3bfeb02c5a037457847cc67 Mon Sep 17 00:00:00 2001 From: ramseshk <45832522+ramseshk@users.noreply.github.com> Date: Tue, 11 Aug 2026 16:20:45 +0800 Subject: [PATCH] Project Al-Cihred: ML auction strategy with exact 500cr spend MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LightGBM trained on 11,300 per-matchday votes (R²=0.147, RMSE=1.19) - MILP with exact 499-500cr budget: 3GK+8DEF+8MID+6FWD - Practical constraints: 2 starting GKs, 21/25 reliable (>15g) - Realistic prices: Lautaro 229cr, Malen 220cr, Douvikas 56cr - Squad: Svilar(21)+Carnesecchi(18)+Christensen(1)=40GK · 8DEF 128cr · 8MID 152cr · 6FWD 180cr - Every player has 2-3 alternatives - Updated dashboard auction page to load the plan --- dashboard/pages/03_auction.py | 413 +++++++++++------------------ data/auction_plan_al_cihred.xlsx | Bin 0 -> 7501 bytes data/player_projections_26_27.xlsx | Bin 0 -> 44553 bytes 3 files changed, 157 insertions(+), 256 deletions(-) create mode 100644 data/auction_plan_al_cihred.xlsx create mode 100644 data/player_projections_26_27.xlsx diff --git a/dashboard/pages/03_auction.py b/dashboard/pages/03_auction.py index 9278445..04f9078 100644 --- a/dashboard/pages/03_auction.py +++ b/dashboard/pages/03_auction.py @@ -1,7 +1,7 @@ import sys; from pathlib import Path; _p = Path(__file__).resolve().parent.parent.parent; str(_p) not in sys.path and sys.path.insert(0, str(_p)) """Page 3 — Auction War Room. -Multiple squad-building strategies, realistic valuations, comparison dataviz. +Loads the ML-optimized Project Al-Cihred auction plan with alternatives. """ import numpy as np @@ -18,316 +18,217 @@ from dashboard.viz.template import ( WHITE, FANTABETO_TEMPLATE, HEATMAP_COLORS, ROLE_COLORS, ROLE_ICONS, ) +AUCTION_PLAN = Path(__file__).resolve().parent.parent.parent / "data" / "auction_plan_al_cihred.xlsx" +PROJECTIONS = Path(__file__).resolve().parent.parent.parent / "data" / "player_projections_26_27.xlsx" + @st.cache_data(ttl=3600) def _get_data(): - return load_players(), load_predictions() + players = load_players() + preds = load_predictions() + # Load the precomputed auction plan + plan = None + if AUCTION_PLAN.exists(): + plan = pd.read_excel(AUCTION_PLAN) + proj = None + if PROJECTIONS.exists(): + proj = pd.read_excel(PROJECTIONS) + return players, preds, plan, proj -# ─── Realistic price model ───────────────────────────────────────── -def _estimate_price(qi: float, fvm: float, games: float, role: str) -> float: - """Estimate final auction price based on market value and games played. - Top players (FVM > 200) go for 5-8x QI. Budget players at ~1.2x QI minimum. - """ - if games < 5: - fvm = fvm * 0.6 # small-sample penalty - multiplier = max(1.2, fvm / 65.0) - if role == "A": - multiplier *= 1.15 # forwards carry a premium - elif role == "C" and fvm > 150: - multiplier *= 1.08 - return round(qi * multiplier, 0) - - -# ─── Strategy engines ────────────────────────────────────────────── - -def _solve_strategy(players, budget, quotas, strategy, rng_seed=42): - """Generic knapsack solver with different scoring functions.""" - df = players.copy() - df["price"] = df.apply(lambda r: _estimate_price( - r["qi"], r.get("fvm", r["fv_avg"] * 30), r.get("games_season", 30), r["role"] - ), axis=1) - df["value_ratio"] = df["fv_avg"] / df["price"].clip(lower=1) - df["stability"] = df["games_season"].clip(0, 38) / 38.0 - - rng = np.random.RandomState(rng_seed + hash(strategy) % 1000) - - if strategy == "value": - score = df["value_ratio"] * df["fv_avg"] - elif strategy == "stars": - score = df["fv_avg"] * df["fvm"] / 50.0 * df["stability"] - elif strategy == "balanced": - score = df["fv_avg"] * df["value_ratio"] * np.sqrt(df["stability"]) - elif strategy == "safe": - df["risk_adj"] = np.where(df["games_season"] < 10, 0.4, - np.where(df["games_season"] < 20, 0.7, 1.0)) - score = df["fv_avg"] * df["value_ratio"] * df["risk_adj"] - elif strategy == "milp_lite": - df["quality"] = df["fv_avg"] / df["fv_avg"].max() - df["efficiency"] = df["fv_avg"] / df["price"].clip(lower=1) - score = df["quality"] * 0.6 + df["efficiency"] * 0.4 - else: - score = df["fv_avg"] - - scored = [(score.iloc[i], i) for i in range(len(df)) - if df.iloc[i]["role"] in quotas] - scored.sort(key=lambda x: -x[0]) - - filled = {k: 0 for k in quotas} - remaining = budget - selected = [] - - for _, idx in scored: - p = df.iloc[idx] - role = p["role"] - if filled[role] >= quotas[role]: - continue - price = p["price"] - if price > remaining: - continue - selected.append({ - "player": p["player"], "role": role, "team": p["team"], - "fv_avg": p["fv_avg"], "qi": p["qi"], "price": price, - "games": p.get("games_season", 30), - "fvm": p.get("fvm", 0), - }) - remaining -= price - filled[role] += 1 - - total = budget - remaining - total_fv = sum(s["fv_avg"] for s in selected) - avg_games = np.mean([s["games"] for s in selected]) if selected else 0 - return selected, total, total_fv, remaining, avg_games - - -# ─── Charts ───────────────────────────────────────────────────────── - -def _price_distribution_chart(players): - """Histogram of estimated prices by role.""" - df = players.copy() - df["price"] = df.apply(lambda r: _estimate_price( - r["qi"], r.get("fvm", 100), r.get("games_season", 30), r["role"] - ), axis=1) - +def _price_dist_chart(proj): + if proj is None: + return go.Figure() + df = proj.copy() + df["price"] = df["price"].fillna(0) fig = go.Figure() for role, color in ROLE_COLORS.items(): rdf = df[df["role"] == role]["price"] if rdf.empty: continue fig.add_trace(go.Histogram( - x=rdf, name=role, marker_color=color, opacity=0.7, - nbinsx=40, hovertemplate=f"{role} price: %{{x:.0f}} cr", + x=rdf, name=role, marker_color=color, opacity=0.7, nbinsx=50, + hovertemplate=f"{role} %{{x:.0f}} cr", )) fig.update_layout( template=FANTABETO_TEMPLATE, height=300, barmode="overlay", - xaxis_title="Estimated Auction Price (cr)", yaxis_title="Players", - bargap=0.05, + xaxis_title="Estimated Auction Price (cr)", yaxis_title="Players", bargap=0.05, ) return fig -def _strategy_comparison_chart(results: dict): - """Radar-like comparison of strategies.""" - strategies = list(results.keys()) - metrics = ["Total FV", "Efficiency", "Stars (FVM>150)", "Avg Games", "Budget Used %"] - - rows = [] - for name, (selected, cost, fv, rem, avg_g) in results.items(): - stars = sum(1 for s in selected if s.get("fvm", 0) > 150) - rows.append({ - "Strategy": name, "total_fv": fv, - "efficiency": fv / max(cost, 1), - "stars": stars, "avg_games": avg_g, - "budget_pct": cost / max(cost + rem, 1) * 100, - }) - cdf = pd.DataFrame(rows) - - fig = make_subplots(rows=2, cols=3, subplot_titles=metrics, - specs=[[{"type": "bar"}, {"type": "bar"}, {"type": "bar"}], - [{"type": "bar"}, {"type": "indicator"}, {"type": "bar"}]]) - colors = [SKY, PITCH_GREEN, GOLD, VIOLET, "#FB923C"] - - for i, metric in enumerate(["total_fv", "efficiency", "stars"]): - row, col = 1, i + 1 - fig.add_trace(go.Bar( - x=cdf["Strategy"], y=cdf[metric], - marker_color=colors[:len(cdf)], text=[f"{v:.1f}" for v in cdf[metric]], - textposition="outside", showlegend=False, - ), row=row, col=col) - - fig.add_trace(go.Bar( - x=cdf["Strategy"], y=cdf["avg_games"], - marker_color=colors[:len(cdf)], text=[f"{v:.1f}" for v in cdf["avg_games"]], - textposition="outside", showlegend=False, - ), row=2, col=1) - - best = cdf.nlargest(1, "efficiency").iloc[0] - fig.add_trace(go.Indicator( - mode="number+delta", value=best["efficiency"], - title={"text": f"Best: {best['Strategy']}"}, - delta={"reference": cdf["efficiency"].mean()}, - number={"font": {"color": PITCH_GREEN, "size": 32}}, - ), row=2, col=2) - - fig.add_trace(go.Bar( - x=cdf["Strategy"], y=cdf["budget_pct"], - marker_color=colors[:len(cdf)], text=[f"{v:.0f}%" for v in cdf["budget_pct"]], - textposition="outside", showlegend=False, - ), row=2, col=3) +def _role_radar(squad): + """Radar showing squad balance: avg FV, games, stability per role.""" + roles = ["P", "D", "C", "A"] + avg_fv, avg_g, avg_s = [], [], [] + for r in roles: + rs = [s for s in squad if s.get("role") == r] + avg_fv.append(np.mean([s.get("fv_proj", 0) for s in rs]) if rs else 0) + avg_g.append(np.mean([s.get("games", 0) for s in rs]) if rs else 0) + avg_s.append(np.mean([s.get("stability", 0) for s in rs]) if rs else 0) + fig = go.Figure() + fig.add_trace(go.Scatterpolar( + r=avg_fv + [avg_fv[0]], theta=roles + [roles[0]], + fill="toself", fillcolor=f"rgba(56,189,248,0.2)", + line=dict(color=SKY, width=2), name="Avg FV", + )) + fig.add_trace(go.Scatterpolar( + r=avg_g + [avg_g[0]], theta=roles + [roles[0]], + fill="toself", fillcolor=f"rgba(0,208,132,0.15)", + line=dict(color=PITCH_GREEN, width=2), name="Avg Games", + )) fig.update_layout( - template=FANTABETO_TEMPLATE, height=480, - showlegend=False, + template=FANTABETO_TEMPLATE, height=280, + polar=dict( + radialaxis=dict(showticklabels=False, gridcolor=GRIDLINE), + angularaxis=dict(gridcolor=GRIDLINE), + bgcolor=BG, + ), + showlegend=True, legend=dict(orientation="h", yanchor="bottom", y=-0.2), + margin=dict(l=30, r=30, t=30, b=60), ) - return fig, cdf + return fig -# ─── Main ────────────────────────────────────────────────────────── - def run(): inject_css() - players, preds = _get_data() + players, preds, plan, proj = _get_data() st.markdown("## 💰 Auction War Room") - st.caption("Project Al-Cihred — Multi-Strategy Draft for 2026/27 Classic Auction") + st.caption("Project Al-Cihred — ML-Optimized Auction Strategy for 2026/27") - # ── Controls ── - c_budget, c_gk, c_def, c_mid, c_fwd = st.columns(5) - with c_budget: - budget = st.slider("Budget (cr)", 300, 700, 500, 10) - with c_gk: - n_gk = st.number_input("GK", 1, 5, 3) - with c_def: - n_def = st.number_input("DEF", 3, 12, 8) - with c_mid: - n_mid = st.number_input("MID", 3, 12, 8) - with c_fwd: - n_fwd = st.number_input("FWD", 1, 8, 6) - - quotas = {"P": n_gk, "D": n_def, "C": n_mid, "A": n_fwd} - - # ── Run all strategies ── - strategies = { - "⚖️ Balanced": "balanced", - "💎 Value": "value", - "⭐ Stars": "stars", - "🛡 Safe": "safe", - "🧮 MILP-Lite": "milp_lite", - } - - all_results = {} - for label, key in strategies.items(): - sel, cost, fv, rem, avg_g = _solve_strategy(players, budget, quotas, key) - all_results[label] = (sel, cost, fv, rem, avg_g) - - # Default display = Balanced - selected_label = st.selectbox("Active strategy", list(strategies.keys()), index=0, - help="Switch between squad-building philosophies") - selected, total_cost, total_fv, remaining, avg_games = all_results[selected_label] + # Load plan data into squad list + squad = [] + total_cost = 0 + total_fv = 0 + if plan is not None and len(plan) > 0: + for _, p in plan.iterrows(): + s = { + "player": p.get("player", ""), "role": p.get("role", ""), + "team": p.get("team", ""), "price": p.get("bid_cap", 0), + "qi": p.get("qi", 0), "fvm": p.get("fvm", 0), + "fv_proj": p.get("fv_proj", 0), "mv_proj": p.get("mv_proj", 0), + "goals": p.get("goals", 0), "assists": p.get("assists", 0), + "games": p.get("games", 0), "starter_pct": p.get("starter%", 0), + "stability": p.get("stability", 0), + } + s["alts"] = [] + for j in range(1, 3): + if f"alt{j}" in plan.columns and pd.notna(p.get(f"alt{j}")): + s["alts"].append({ + "player": p.get(f"alt{j}"), "price": p.get(f"alt{j}_price"), + "fv": p.get(f"alt{j}_fv"), + }) + squad.append(s) + total_cost += s["price"] + total_fv += s["fv_proj"] + else: + st.warning("⚠️ No auction plan found. Run `python -c '...'` to generate one.") + return # ── KPI Row ── k1, k2, k3, k4, k5 = st.columns(5) with k1: - st.markdown(kpi_card("DRAFTED", str(len(selected)), - f"{sum(quotas.values())} target", SKY), unsafe_allow_html=True) + st.markdown(kpi_card("BUDGET USED", f"{total_cost} cr", + "500 cr ceiling", PITCH_GREEN if total_cost >= 499 else GOLD), + unsafe_allow_html=True) with k2: - st.markdown(kpi_card("SPENT", f"{total_cost:.0f} cr", - f"{remaining:.0f} cr left", PITCH_GREEN), unsafe_allow_html=True) - with k3: st.markdown(kpi_card("PROJ FV", f"{total_fv:.1f}", - f"{total_fv/max(total_cost,1):.2f} cr/FV", GOLD), unsafe_allow_html=True) + f"{total_fv/total_cost:.3f} cr/FV", GOLD), unsafe_allow_html=True) + with k3: + stable = sum(1 for s in squad if s["games"] >= 15) + st.markdown(kpi_card("RELIABLE", f"{stable}/25", + "players >15 games", PITCH_GREEN), unsafe_allow_html=True) with k4: - st.markdown(kpi_card("AVG GAMES", f"{avg_games:.0f}", - "25/26 reliability", VIOLET), unsafe_allow_html=True) + avg_g = np.mean([s["games"] for s in squad]) + st.markdown(kpi_card("AVG GAMES", f"{avg_g:.0f}", + "25/26 experience", SKY), unsafe_allow_html=True) with k5: - stars = sum(1 for s in selected if s.get("fvm", 0) > 150) - st.markdown(kpi_card("STARS", str(stars), - "FVM > 150", GOLD), unsafe_allow_html=True) + stars = sum(1 for s in squad if s["fvm"] > 100) + st.markdown(kpi_card("PREMIUM", str(stars), + "FVM > 100", GOLD), unsafe_allow_html=True) st.divider() - # ── Strategy Comparison + Squad ── - c_left, c_right = st.columns([3, 2]) + # ── Squad Table + Radar ── + c1, c2 = st.columns([3, 2]) - with c_left: - section("📊 Strategy Comparison") - fig, cdf = _strategy_comparison_chart(all_results) - st.plotly_chart(fig, width="stretch") - insight("Each strategy optimizes differently. Balanced blends stars + value. Safe avoids injury-prone players. Stars goes all-in on top talent.") + with c1: + section("🎯 Project Al-Cihred — Final Squad") + role_groups = {"P": "🧤 Goalkeepers", "D": "🛡 Defenders", + "C": "⚙ Midfielders", "A": "⚡ Forwards"} - # Comparison table - st.markdown("", unsafe_allow_html=True) - show_df = cdf.rename(columns={ - "Strategy": "", "total_fv": "Total FV", "efficiency": "cr/FV", - "stars": "Stars", "avg_games": "Avg Games", "budget_pct": "Budget%", - }) - st.dataframe(show_df, use_container_width=True, hide_index=True, - column_config={"": "Strategy"}) - - with c_right: - section("💧 Budget by Role") - allocations = {} - for r in ["P", "D", "C", "A"]: - allocations[r] = sum(s["price"] for s in selected if s["role"] == r) - fig = budget_waterfall(allocations) - st.plotly_chart(fig, width="stretch") - - # Top value picks - section("💎 Top Value Picks") - df = players.copy() - df["price"] = df.apply(lambda r: _estimate_price( - r["qi"], r.get("fvm", 100), r.get("games_season", 30), r["role"] - ), axis=1) - df["cr_per_fv"] = df["price"] / df["fv_avg"].clip(lower=1) - steals = df.nlargest(8, "fv_avg").nsmallest(6, "cr_per_fv") - for _, s in steals.iterrows(): - st.markdown( - f'{role_chip(s["role"])} **{s["player"]}** — ' - f'FV {s["fv_avg"]:.2f} · ~{s["price"]:.0f} cr ' - f'({s["cr_per_fv"]:.1f} cr/FV)', - unsafe_allow_html=True, - ) - - st.divider() - - # ── Recommended Squad (rendered with chips) ── - section("🎯 Selected Squad", f"{selected_label} — {len(selected)} players, {total_cost:.0f} cr") - if selected: - squad_df = pd.DataFrame(selected) - for role in ["P", "D", "C", "A"]: - rdf = squad_df[squad_df["role"] == role] - if rdf.empty: + for role, label in role_groups.items(): + rs = [s for s in squad if s["role"] == role] + if not rs: continue - role_name = {"P": "Goalkeepers", "D": "Defenders", "C": "Midfielders", "A": "Forwards"}[role] - st.markdown(f"**{role_name} ({len(rdf)})**", unsafe_allow_html=False) - for _, p in rdf.iterrows(): - chip_html = role_chip(p["role"]) - fvm_str = f" · FVM {p.get('fvm', 0):.0f}" if p.get("fvm", 0) > 0 else "" - price_color = GOLD if p["price"] >= 100 else (SKY if p["price"] >= 50 else PITCH_GREEN) + cost = sum(s["price"] for s in rs) + st.markdown(f"**{label}** ({len(rs)}) — *{cost} cr*", unsafe_allow_html=False) + + for s in rs: + chip = role_chip(s["role"]) + pc = GOLD if s["price"] >= 30 else (SKY if s["price"] >= 15 else PITCH_GREEN) + risk_warn = " ⚠️" if s["starter_pct"] < 0.5 else "" st.markdown( - f'{chip_html} **{p["player"]}** ({p["team"]}) — ' - f'FV: {p["fv_avg"]:.2f} | ' - f'Max bid: {p["price"]:.0f} cr | ' - f'Games: {p["games"]:.0f}{fvm_str}', + f'{chip} **{s["player"]}** ({s["team"]}) — ' + f'FV: {s["fv_proj"]:.2f} · ' + f'{s["price"]:.0f} cr · ' + f'{int(s["goals"])}G {int(s["assists"])}A · {int(s["games"])}gms ' + f'· FVM {int(s["fvm"])}{risk_warn}', unsafe_allow_html=True, ) - else: - st.warning("No valid squad found with these constraints. Try increasing budget or reducing quotas.") + + if s["alts"]: + alt_text = " · ".join( + f'⟳ [{a["player"]} · {int(a["price"])}cr]' + for a in s["alts"] + ) + st.markdown(f'{alt_text}', + unsafe_allow_html=True) + + with c2: + section("📊 Squad Balance Radar") + fig = _role_radar(squad) + st.plotly_chart(fig, width="stretch") + insight("Balanced squad across roles: defenders with high reliability, forwards with high FV ceiling.") + + # Budget allocations + allocations = {} + for r in ["P", "D", "C", "A"]: + allocations[r] = sum(s["price"] for s in squad if s["role"] == r) + fig = budget_waterfall(allocations) + st.plotly_chart(fig, width="stretch") st.divider() # ── Market Analysis ── section("📈 Market Overview") - c1, c2 = st.columns([1, 1]) - with c1: - fig = _price_distribution_chart(players) + c3, c4 = st.columns([1, 1]) + with c3: + fig = _price_dist_chart(proj) st.plotly_chart(fig, width="stretch") - insight("Estimated auction prices by role. Forwards and elite midfielders command a premium.") - with c2: + insight("Price distribution by role. Forwards and elite midfielders at premium.") + with c4: section("🔍 Value Scatter") fig = value_scatter(players) st.plotly_chart(fig, width="stretch") + # ── Methodology ── + st.divider() + with st.expander("⚙️ Methodology — How this squad was computed"): + st.markdown(""" + **Model**: LightGBM trained on 11,300 per-matchday votes from 2025/26. + **Features**: role, vote_avg, fv_avg, goals/game, assists/game, yellow/game, red/game, games_played. + **Solver**: MILP (Mixed Integer Linear Programming) via PuLP with constraints: + - Budget: exactly 499–500 crediti + - At least 2 goalkeepers with >15 games played + - At least 17/25 players with >15 games (reliability) + - GK budget: 35–80 cr (prevent 1cr scrubs) + - Price model: QI × (FVM/65) with forward premium and small-sample penalty + **Alternatives**: Top 2 nearest players by role + price (±20% range) ranked by FV. + """, unsafe_allow_html=False) + if __name__ == "__main__": run() diff --git a/data/auction_plan_al_cihred.xlsx b/data/auction_plan_al_cihred.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..39d97c73f57c8c41337028c0cadc5d9e747950ed GIT binary patch literal 7501 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 YrJ;=SSVaQ>&>nBe$M}8qM~ngdA3uG0zW@LL literal 0 HcmV?d00001 diff --git a/data/player_projections_26_27.xlsx b/data/player_projections_26_27.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ab62c00ffe208edfa15ec6abf0e30b2a813dbe26 GIT binary patch literal 44553 zcmY(qbyQSuv_A|;cXvoPNSAaEJs{GEbT>#2C=G%%L)Q>WNrwW`T>_HQDIwkPp7DF{ zZ@u@Ak;PIr&wlpapV;T9t@aF=7y$tR9YOv*mZ?&|hDs{%-6-(E2R>G=mf9Y!Zl1gr zZf-p9oSihrHL$u~V56>ffPI>vF|@_F3X(Co-^O{o!yDP1!)}ick)>Vy{068Bd7>Fu z8Z#76cs88{`1^5WW*Kj#hKCAb3N{0(_?AQCzEa{9)6qWbE_D7C63&M$I%A392U;tc z_Wwy?x$K_r2skrq4&5)XBh9U^a|bl(k(0NlzWzl0KqBlT z(72G<3#k!GYJW(o(4bg+c3`)+qm?I984r#O8)sKgx8hs*SaoH%-)zlV$c9)eRiN9F zO&IJzE9VhYVk<7EcPmdrz%l0NrZU6^e(@}}nb7bTCAYVnBE9KfrRwWz=q-wk;F|hz&E(jPzGEv^i!mo3@e&3%1D7q%0r&znACNwH3w& zd8&RNe^xs&=Pds|Kr&_CQ*=9n**V zzBTp;>;GO3)Fhh`9~A*1n-u|p2)LYgPP|@r*3Q=d{mBQvoIx^M!6k4}D8iD8fqWnui`G@QdEjn=G}$Xt7OV~WZ?f?|E*Gj2OFnS?w zVST7_EZ!rvlT+IG<4;J^uqE^JIf8+k&+N$5votgITkjOgd78FmS(Cp8M`F)wKhwWgBBwyOO3%KFyA^H)vC$XAXp3D8HxgU8;V#NN*b~ z7Vysr5+8F+f!KdREIn+?8c)9W+}+G8P5z}JH|F+@3*+RD(byuA)kT8HL!8=HE^z$v zG7-kiKYo0J`A74mEuDT^jp_LKW^SAZW83njLC~d^vJ2y{^3FPjUnxpVig^Rvt(yd* z4XQZ&MAGOv5g88J)JVk`d}##{*Y$lB1gk_rP3`CdD<7k-zPM&ezAi9OT?o6zSE5|c z_T2WIbh<->DNSC!`nFV*Za{*VPQD`eS%|B5_FZb{NoDp+8Y05c6f9KPh;$|v!g8@- z4HcqCPT0a@_D`9=DZEU#pu`0GI>u5jmeE}S${$MARNj$xQ!o7=QEsw@FsT!%Xpn5F z>Xhii?A!j*Rx`zCR(26^%1OPY5T^8KAPsGFFAsZTMA$d^PIIcB;NGx8C|T;wz`h@e86AWg23957T$Z`y44KRYuE?iE`3HE4AhS4pStp@0)hj`vAnJ$pw+FFW2uo z#UMOE3gX>aVTp z7PjV>#+!T91zu8I<2NtOcj`y61mv4M)b<-w+8bCzLFZpb+%##2u_bI@Cebwd=F zU7GrAGQwWyrpq@|%C$dpZp~Q|7tPH`Y{C2q{^Z(yv)B8Ma$Rg5xg{v$we!y0IK^GJopclPjme~q#S-fVmuhxj3TFneSeJbUk?ohE-_~D$ zyrLO@WqexG?jTuDqB;I(SUHe~O`u7NMW|w#LRJDQJfqNU-{Dm4c_rGRD9}ilPX29U zyWd??x0%qV5f6#KrA@5d-dPDT4}sk=|RC zP={pPVtqfwZeb@GtCSLhC~|#>&@`K3CM1rj!A7Ac^Vm2(PImB(`*q6|>KvxWZ#6?U zBp>}lQouugPLKJlYJmkSd~scGw2iWz<&9dmze^4`>(ipyv}8S*q|#Xtbd|O)(lg7y zxl6I)$zYcDhJQuOZBhL9GqY_XF8Si%A3-rOAp~FEwzpPm-7sfM)CZh|KF_+JT`ay_ zUd0Za{$d2P;v|q(Lkpx!LbZ%DJ{L4kAbwj}^0l&Wfe+g+#NZ6Oz(#Z>QZbWKU?#Rg z>?5YD?2OEo^x`y*-6f77bs~xxAGA@pXj2pO<%2;~0}h_9=Mqox;aMSl?ugIdd$gHf#zju2!O;3l?kAinU zf0|b`(Mc~uo?@k+E_lsv6SDGzubysT5-%S+q@VbPE-r061DcjsXlaBy9{clxGajnF zeUczo*O7y~i=(c-AEfDmo_Odk@5Wc2#&0el_j{WGDp||h`;T|z4;xQ`%lFOmhwXS5 z_v`dIp*KW|8y#?&?Vkk04o&x331 zsC0+UrE-Yt-Q8m~MCX)47rDw={ugh?#yZ|63p-;bC-}$E`UZ_b!-BtRh1m;@kASEy09x z`}A%@I`+XeR9UU1DZ1Uef8_Y+4sUV!^6{#34=hS^Bog^_x3w?jW~|%v(7iTv-+g_y zA>A$g$UXLS-6YB?UqLH{V@j?3^c=c~H`$?N6Bryo_vi_^lg3>ko34gv)OOt8 z{P}C1hvbM5OQbL!Vdoc^#Q2T8i?zQFbM1^io37L|EPdA*DF81N+RPKNS|Q_xLKkZw z&;#xVq{#7VzG;3LUHvY+P4*iH3;>KIBwCL=@ILjCL$$RA8_m1e< zy{198h>?UF%}}9`7U)eKvPwFoJ~v@TOub;ST8LLTvnhkBh=Q%nCKkfzYa<-lGpI(_ z;3Ug?FLKA+40qn%W=CPDu4?+DY->u~xzF9TzE4Afow6yz0-t5;98CT)V`Vc3=?}fA z?>DN#-jfj?pYm-}%x?l?!+KM=?}b-U!mJHMdJe?rI?Ez_%JXUZj9@JJ!+I0(8rymc z){qGvMn><4rXrTW9{vP6##x<>2MvY2Cg?lr@49a!k$0d$T{be}!*jj(!JZz0Z~vZQ z8>EwCatWxmsZY9~kB#(KMdZ6XAp_nAjOBY&eF9{f0Av>jypdqjg)UD5x1sY z6G)@@*~>#$+y4@Cg}nx~rvBS-sBgGmHn&GcT+7Y(anF2H2mN$w9{bY5cJlWE0!Nrq zvlF;VLiNKahc9NQ+P|1=zxQzxE}g2n{@{ZWP}g?r2dVphSfnw*?ukkE(q`%0{IbpN z*JC3B62(673tlu#bB6e*A;!|*2Mr1^iSmX7M7x`lCI!d~@-doY|A0pOzj6x}LfKI< zMnAHsn2Elj`FGKIx-G9Ce|%4htDk!cx^kmBoY#V?HE;7-j(r33X#oWczZo3^y~$m! z<^g5Ix2%o%Vf55FuGgmYaFU!v$?`(DO zRe8rUWJywCsmP4rDuXZRx4z7Cc}bL6goUQgI?OWPw=5ny^nOk(Fro*X|2Nb zjKql1f1O-3jPBQqwhe^)lRZb@*1nbP!t}lsp7#ig>GxPN%U|dU)58BYaAVoVgp<2l zLnhTOS{%i{C%^8t)v)XXPao5jd(`{yV$hj0IcWdc>i#u)_#j^_^*v{lnI4GmV7@bk zfSabEvUkU<n-4kc zSXQ%q)5HhAgu&~Iun_~FyC)~#UyH8vWKgwlg8Ys*R;Z?oU%m9~K9)gVDd_Z6#+DH` zlPMNO&mpg=$1(_%#~|#R6R#C1~k6G@1R zA@LgtB7bEODk8O%tIV-OD+Z}Q%mQhT!EKQ1)`ul!wOMxWnAeIN)%elxPzgh4qL_i? zhcSm0rqxZh{Ubo{C8CAoCwpj}4ae#oklfbINa%e6Uf8fG#M!V+CjyNY-8^&{%>{3Q zrsVQ#uDlTgx%<*Dk0l+gF^wdp)9fV-4eiHt>AiRFc92v9Ice1Dm8N;)*ow28P2wlz zDgs|}D({vx5Qms5QCa#X*wH%+iq^o22=&x^q^c{Wd^L7_`DyYLQz?d%@-DCNBHyJ4 zfO6I&1siNQEt$*9CMb0R5VoBnrlOXSd2QH4uQdd3+m!3m^bs1{s<5aR3Ek0I(xT+# z>`CUJA+dor(PhM>;&r;wqL4I$Z7!Y1#;4Zr68>~_$-#*|a+ObKwdQ}+hmtO)mfj(~w0zvr$4;|PT$gARTY66IaerCyLBUaBS=c{5M%6mKuSLh? zKzHGK@!8km7JUmOKqsFlD0NxyAJ*;>l2x12IDL z+)7gl>xE~U^wZuSM#rwC*ZWi96;`tq3--AnFh@P=^h^#yCQa#4!=xR~k=V!m*yVMu z9it#bQTJ?O{y|XaM4uesVr41eEydG6xCC#sGcxh;J> zIdB_n(WmtO4 zCrxpp8nWWlt4z&fD}E^~Ue7d%Cu2z4N2muVXx&%Qrt)&CWwTJuQRd+f1Bmrf=HRVM zF`4m4+xv&iG8kD1cLFcMC>IIJ9D;!n$7g;LA~*Z-M)R@Mb2(P{tisa8Qq6>wk43Js zOgqFBoWx-9C+jMeGcJ@#kC(`mK-~{-y6VJ0Y>%S^DA7c(u@fGv0^d|IlZQw$A~wWv z5i>^SFLtt_^dVEf0JFdF@@Ew|H4KG%`Y{y`vU^9pRXiD*xc^Fj*P)!P)2C{hjL6Nfb*CO|zI(4(vR-$~Z;Np* zz3_qS%6&actgkJd>{r7G=b#c0(5T=7d*WcupLe@VrP;r|MO!t^v$A8=)|dq|#|qY| z6k3TSLFD>&rGR$_6kPCAyyewE-F;Hc=8ZjM?!afQRVAp)JJCp&kcBlSjIa`syAnGi z-)ns;76X$&6IJk0Sg20D{v4_13y;h+K7mY~ix9#B{}%;zUY0lJCZE{0!ZqR0#L0^> z46UyE?dsy%wARMp9RnSxm_h8bVi^P`ePW3=LFQbvf%7dt!#8q>F=~f;{a>US)}l}P z`qzVLab0y9DMxRS#&qvKXT zH_k=bu?lufoG8MWPH-UNyaRhe*&4z%kF3O{zHnnW&ow;Vu3e4O6G7FMjN%Prji#AW z6@ZB@Gbhog<_V~hkp0n<+Lqq|E6_K7;j)O1q6j)zRddukZBv;GzJHUtYJw!>4U8}c3kAAARWqd%!;xlt z!6}o)EG?8xRCH#(`HrSe-vGf!RYAsCK3idz2`5B2ukxh?QH>S@3&^72-?=c=x&Rw| z)P8W>cy(8F+l*BgH7yX#A>cUHCs(TjoUgIxoJ-cPryYx%P>;%KGSA)D-@I@pRpB#d z$O370^e3}S1(oN{h0`QdZhNO9O0FKp+rKcm2J1SLYOrrs+J7|##CYn|@S#<1NLDsVUBy&&yRpAdOLYpUkw6>}~@S(gnN{f@D-&5~= zqz*eZ`&phd(qkLMTrk5OIjRvzg5({YH!)&VLP%fks&)p@4Kk7f^-?rKzxTm@2V z!Ql`j39+nPHU<#ThXe#VS0SdwWg>GVS1*N-VjVwKqL7A|Ub2vY20)=WA(!4dem*R3 z^1iF4cFL9d@Dt>rq@^(Tueii(;^B3yL||fFVA73GXNsJt+a|?gRuXupaFqZxAOM6MNmcDN;M%B55AD9PrZ+7y#g~y#XAtR>7}n{!o|> zZ*lQql4Ge|d))1=OS)9LM@~&VJq2EOdvgliX^>O9ZDQg1s%9i&F3sYHt6@DyZiKrn z0uE0u#?;v)j!H$~w5xCY^o+1_76!cnXN|zYjzfned-Wr`B3{+^&r6T zTMzNxMs{DiyPh0B32SXXNfd9y_K-SM4q;B|fx$pC`7{Nj6)wDW-83vNlWzWuwBeei z%B{=YjBt>yVmUhdR9jny zOEFiW^Gsm2Ii%Eh*@yG;E`6^8PE&#tFXbw46m>uSZ4$|bqfgp-4va0gIarh3fuO1` zjb#QSjs?pXsSvni0Xda`DMzzZ)5 zT}VJjhr}(t=IM*-Ym_8Ithf3}8JLxbqo%(JT;0F^jwSBJ$lKy`h+8yu6hf76vh4@M z`ikXr?ZNcW`k}fy#I`z1hh3qZ#la>;sV{sKhr*Y4ky2GY1w8Zw&qj1+`FQ@bw_pcX|FgVU86B3Zg|#<^m*20pPS!)7_q~@G~ix^{*mh#spoiB(=q1N z2W=V(`#ZJToR$Vk9jwRpwuj(z4o$S=jP%;-uvk)DnEOb!OoX)dknQt3=I#w{C&d5> zdy`RGvGq5jcoffPxHmC>8CL(o2i3ED;W6AJ#%la5zY=vMg);eLIUf{kxjU`7y;et= ztW#OsaW`cy?ZI5U9xER2?x=H>6pH)iSl|=D3d_QI^!vj&{3&cp-;?`RW-P3Yk`oKe z5gZbdt>vif`RUv0F%O(Nk1BP7jxxuNtc0Z;`6<*&p4_J{OEvC41t&7dS3(Y?j~asp zZknKuy(t>c6oc`0#Q4CIV}_% zWHrlJtasJhkqksUOb$-N;Im9DFta$D*$F{o?G)giKsZQ|qh8`CG~s4^<*v@6mpX=g z5H7d%y(C!znmC@R-beW7_-+GlxAE#kQ5?IWMBKY%I>s01YVVIs{3$w4l|L8+gcw{@ zd*ZEAjR_mDpVe^2AWk2e>*=Voq@)4%>!GWPjYXFqJ7=N%*@ILa^JH# z0N|Mos8L;*Z*bu|HlV`3F{~ouG2HS4I%#egt{cZ=$y-K|h;t;B3=Z!yurP`dC#oV_ zrYr!kWiGp263Uq$d>NQ#=8-0TOe;bta@YT$FwjG$$_w0L-KcHSN1(GC6nSmMhIlV= ze<)VXM0ip!9~*jbcOV?#{zY(5!}lnt5ky!Z>oq|a0rnAet2)0O#oLnSuesVcxk4X* z1~*~2YQShuG6yOYkB0+Tt9K$2q~5|+H$mP^diK`Xifg-zYeMh=UR%&RZw~Lc*Gj*C$L+LvvUjQgNSnj@ zOt3D@aCHK{E*Ylojq9o<7&3Aq`(`rmzoKjl%+rd!?b4|z{PkCs`Ca7l_qS_x`$@Vp zTmGKcx!QpN)N~*7R5&GJaqUa)s+QdaU(@UTOc%wF- zxR3<}O`d%nO6p&PI^{epZ&u>}8^ulQ6GM-|8$~XWhqYVdK&kisy-vm60x=(Epr+T&t1A(ZghIz} z)yDXD{ybb*+?}ii$ln+gl;rYBlndE^Oy5a@Vpe)GyJjO&ewU&=?9Fu%d<@Q+Ucl`>fIULCtb?+FraR8RLelW0MQ=`19e>{R;vAiQ*|%Ly5JK zA3eO$wHGl?uqRe~2_i0eimR3dkNOJRcJ#OPu+{l2P!10m?x+RTA4Eh$Wn%8lePy2y3HrWV&q2nQiw@>8_eyXC1x@wB@+MWWTQVq95i|l?BGRwUtca zVfnS#KHj4sGv#*{MfSEIK==*UaHCf(wH|@$8bOY1OCO9`}+Js|F7yy^-kByNkS$|#d3@!X1 z5pQ|#oMvZemx}UcarC4R-)Qi&HV0P7r4@Ofm7kp+>6f==q#$cJE<}!VsL2W?A5QjO z$%n0Uu?qNNwG34FNjmVQTfs%x{(#+(Nd=XZo>-KMrqN7_%QC2Az)*GW-~M4DE>7WdR@^-tcTiibJzcTH zK0}rAa}w!)K8gg4-->PHDkCr4KxB8#1tT^A-EbdxDbu`toJ6&`kNJW$^(dew1^2dm zHx)7jJ&EINsKOSOOUpkE)Y!sPv@z+!Dv0NZKRkPaW>9hie;I#csdk0ot91~drXkd|s6SPn$b8=htjdzhXcCh$^Gj17_m~@I5{K^SCKsp45A6O<`6o zCqECDm$x~-rKR77CD=GyT*jM86Y$A=#;?^SBj zR`1iSv=lTUxcTAwZ?ka34sDs^b(Kmb3O$jk3UJD4eGsv7#n9`*=~Ya$xVE5W<1{1V z9|O+9XxfY3jl`77MV*a$3o#g?P4CCyaRFCGm)DS*#5@4`ElvHXyd~jJhRFpuTuZCj z^Uq)SQ{fA`vcvWuR6AO(1o``qBBH$ECSSQ=CMWI0%=BaqtEvB^ioQiZpm~%tm;v$} zP?bcUGxT78vtq~T&U4rIlLNY=Q&1O87B@=L{XGY=;{o%=!FU3*-K*)X2Pm{UHX z^uk7%DM*ac!S0BHSOcOx9V_v{-2;;<*W1}{YU5( zbtzny?T^2)7_8P~9rVkDh>V8hrr=A5D*w+41-+&^+L)&6OX6)PI#}HNwXt9fZjOo) zy)Ip2%*tW`f;&smp#Y5?Z+^7A)U+h#;kMB=nIoejsgvArBLUL1q;R-~4%cPIWNsY% zQ>d`~BPU7dQ7Wq_oD_SEBRI;4;eD`Gv?#LLuskyy_=Hkmghsm~a2-7XuGPC)e7M+% zXZ|?O>{0zGdc-KNmz{G^87OgzF~Vp(XH&Q^S(8Ca?`@lHU7GO=(SBv-rWBA1;shoH zmShYF4Z74NxgB2)x-YgZu(uRv9nK;N5XIlb<*%Fh!H$_bRhq;kz*4{=iz)XNTXVD8 zEXOq6LDo{siSO2EDya#A52YZkOPK+N2JDAB4hbi7b4JK_R8#gJ@P!wL6c!K3aK_X9 z-rB^dNo2Cr;%C=wA{8JgSCcWj!WTP36x2tGMk9L!yM zpfH^`#_R-up_33?HKhxtDRCebEm7%1j;W z@W>BZcWbG1FR!P3R%7bK%RwJlF)`x-F6T=HTdH^3uZfm_37++;W&L?-_^JHbo98O; z%3R*2y{sqP$kT=eE-E-*DSM#qG72oe73*0+9?GZa6gDu^H;P7_%S|l{d;32^ASYTR zXK~pZ7Dg`KknDHO)uVSmb~ozc`O{U(71zR(aGzZIJ5;Drp%M(=K&DPxa7C`T zP!xcMg}WdOJ}(zm-4ny8as$eT^)*jAk%&^BlV_QRSPUQnB{;9`YKBvST<{VRr65a= zMhv*_0h)zVNb1bfaabr-9Iy_yaeZLz@tf$5cVmjOnXLC0=*3JOvhG*C+qa(0^DDia z>#+*t4x=#zoa|k2QF??q&M~cXUq$%}!?z&y#Fy2Fqq6&r+mRxH9;KQh{gfbrep<}u z)m~&1y>M7zlEr@=jSUZY_i!kUcTlk|I38P1?w~Qq)<7N&Xdulz5(jotb3I0*xD(%| zhgU|iz^)#j2fx9JSWctp-!!M4Q9PGXDGul#r_2?y`)|)}6QRXn`;O<2@pcJ#%O^e?@B}G_XC@Ur>s&U=a zV`q;TJJJ&$)68wiIEKV4ODsP%;xIcL5w>%Cc=qjdQKqkoH*B z@jDD$;1)vxdiC5t@g^B>t5nYp-v@0NKR7UCu}M`BeMoEV--U0Uw5w0n;`qa8dPe?8BL2B~^WoND zG`}9EFnXJ^c$X|hTkvnMu@6F99M>U2ZaxUyDl<2$Pi3pD4V%vBq?YA#dU8rHs=m?F zVzuLc&ZgGvo3-q6cH-`R_nVD(>A}ssYck!3CEzq4Ikgq1>nLBeDVutgCcdwK!vuWf}7BV}jsAVcJ0oH^=PV=iVp>qC7YY>%&a6@U z;$s{el2`r8$A)!2B#%oB(kixe8Tn^)d4~0r_Ld=3IS`-M^_|CCY7*cf<&4`HKJG7V zVo9g*BwHQ^vY*Lk`v2f1AfYO&hzJ!etdsJ>nNBmd+MLD#Bvm#%f;_YAteA58eFn=e%O z;}7e;*k#`c3T1Y4SC*%QT#c85D!RLGBca8jeQ%&-zvkK^aE}sv2TMoXyp@W7-$5$H z1tr+gm|)98QqEOR?Je^WrBTgPgYWszZfiOgfA?+4xaKX9E2025iphk3xeOw>Is_@- zr$^mIz@pmXVSURdy57pkcAS%A5zbn~ibP_?+a1AcBL~HlpOTnwAbZD;cNS;dC7ZDz zpJp*<(8XrgE*tQ8@)tI`#frUaDC*i7wX)my!$b7o-V{X%^hF{X8@GOy85WIOA7Ll+ z7Dh(nGr!z#CS$1YC*yvz)JcjIQ|1{o_ji#6j& z7)Yi*Wolh``QQ>4QE>0?b+~lTwk0EI^V!@?n1rGZMR@Ro(#sz01a zz?RX7VD(2A27$Q4=R(@E$@ok#XRXCf_`c3jFl!TUp{{h!=Vym@eM$E#BF91B*bAjL zDW2BBd8}kgdO*Ni9D+`0fE4e<>c=KgWvs>Bp?pLQ#lw+s>Hy|RrNT-D395!;U*-+7 zGu7O&p-=Usg|o02o?G`i_44dz6nFM@EKex+Ni&T zrkMU_Jc=0~y^gN}b9WWcm@3+9+jjFTeb;0(cN%345LZTPos8SMecIU{r^Apge?6jQ z)YCIQJYMWk474yL#U-Lu>+h@>7zipA&|1&<&gU~auXZe(6&*6Bg+{GI~tKb7*hgQ7FP6rFmOQ^L!eOAnk+vhhzh63+Xy8N0vD ztRC~@H&IT4ziKB1}SXX?)H>UJzbcBN?^sH=0P z`SjzjcRr<6YSG4JgN2Z$Nh%qsouU!&8Wk2G(eG-QyZ*iuP-LF~75+~xu2k^0-3HWz zyNMbV&O-GBZRhWM(>CMF&hCThqz zcAF7QuqrhwM%F9ADbQS0%%zSIhpiKHs&3=S!(ecPVv8qwr zm_-k2qR32OQ}nDP9t}sX{~=)VDpB6TWX+?>4zx?acn?L_jr+c4=!nh>4B-Pd zVwB^2MsG#_E-ZoejgqosdnPz&neQ48#Pa4{? zX-j_tkH>3?MD6uk;RBJaTRf^xqo))DjYXKIIMQ54D6Wq0lywkyGx0MNYU%LbKUG$Mbg!c=SQ}sO!S3u|N}F?&j-tJt%-*_u?cTe|e)XI;yWTm6 zgEIGZQZ`a0!G+v5HH^XBN>IdKWq*LZI2-1DH4^rBiNY_8MnExD>qD8jSUAuxJO?<~ z=~Ix=9Y22VoYjf4PWxJ+W(c*tmoj}z6N49d`f?0Uz6S6bU{e9q;+DV7F@rHur} zr3t92!J!$=|2;#3v&J`>4r1$6P%*GkN)%=e*2ZBJyETK52PdH78jc$ext7kd zHLuRYJ@d(#xq8j7=$hPZFLjTIT_dk;wW|W^9427rC=)*g?$!V>^Q#c=naJZBJK^e-u@=9!mz~v z9M0dFXmy&;F%;ExDbX*4aZ8e7GVX;`Q-D@jZC#R`WrWX2N@gO?VxFu%pewnwO1ESL zK)Z)Bcij(YCfCji7H~(Mh`hF7TpOCrQl%nA@K3R=Gv8dIiw90VVPR zb5TXL7Lvl?wJ=TJ_}ngFa__R<6hCE-pLzM?0!OsIhRjPz1xsHjbInCt8$b7*uMSqWlq|&9JYch3`rB`>Ui)MZ23Y=Z&%Y3a04vLu0_!pcd73{SZiw*Yx^WNpZ9#-6w z;Q<*&JoS&d+=&&lct@`YmbW;Sr+{GaT-*6XI@>cnLQ#Kse{ezWAJhBHb4+kW;#$tO zYzVEkoiCrzk6)Uv`4A&=_fynoYCd;tEYu~X7W=99@pH%1?-~}H-C>s(h1;10U_m(Z zRu3YJio;SUCkOK68|9l1{lyC@Euvi7axwR8!^=v`%32*X-ozIc;q2*IIZFNdc_TIv z2d<(xtTNa@*(WYdEE79^mIP|~R|YyfH&SYC&_|QauuI|#hQ%NL_R4=pkO%uE7jz5u zE0`8Cc#kvKFBoK&Elmp?rTTvw0wfMjTL3KGRhEQ*WAbexnuN1^)AGe6UviTcPh19= z4b-5WLRl~%JyY;x;w8?m2pcfJON&=g47qdm=h)0mrC8$AB_(4A3PR)bQ4H4L?NAN_cr>@4@IhQU~v<~==NMZ*JBgmj28Zn zbxnUuX7tdr&l78jW~ShV<)?fW#JgGqwmhx9x+1mu{AVRkgu_Lyd4c4NFmmLwmHbk+ z?YUf9fY`v9Z}4e8Xen<#kDI7YtqlW&(2bokh#hUd#(Ck;V>7lAa9-xzXz#U$POqec z=6_$Vv>*DO7+UTtU#ohv{?IB%gX@Do`|SI&mo)Bx2XTcy8pbms8=n(MqPsy37)dh6 zK!rGkJWbJnReC%3<13!fZKl>aKp*G%Df_Zn-Tk>sS_(M>b=go(2apgv;mhqjfv_`6 zM?m}Sx-ba54>C7cAb2UHcuy8}o2q-6`)v9cQcS+t-XyVZ!S#M~^2Aj0~gQ-a^eOG7wLOZY{<>WH6bgVle#f- zF>+porJkP8F=6)+g*1PDXau1PKwI9Fq=XS0F;c#q{FuLy`MgBw zid=%-7VR8kj36Ayv)h=%D?9b3F~0P)9RO$B?y7^~J7%MIx$Q=@L#U_PeN#8bS9mLJ zy;pgID6Z3dES$gqo7;k)!y8)qFQQwGIoiv)YR4z$^&i2e5xy2n+yW$kzf85W?e_U& z`y%q0*%U=?jrllglD1MqPWRLqZTe`d^4107)1Rps>c40eAYl()6#xFv%0M!FXiq?|XN6$CUq~-Ss&nrKU`R}jD$DbOIHpyEH zWrLgAR(b~>L-wubKs40qbVd(tVFomN;Q9zS8>mxM#r~h79|xLwQZ=`0D3m&7k}B*H zkI7QObbv7%g0yFmtx6AXj&?`6w2y9lRBMIj<_xs%d_PT66lMSS905GHV$>dqqkoBc zaO?Bp97G{2zn7ekHv|c;V)j&AnZX)w>k0<6ML}@Mc*Tc0XAWzX`B0Pam8NSeqL$zU z&CNV17bDt+c@lMUdJ-HX&2qrtnU1l~+qhjP`B3Tc{K=|bvvlR9OYfk^4gXDKreiQ^ zQXX8PKu55*sLao@DCm3alWmamT1S+SpLaf-tf`lYaw?c&iG??^yinHC#no$7Qh`pC z%m#igP4)!haaowV;?mI_9mr@M1R5&h3%!2Ws0Am%jeYx&i2Ow#ivp<~e(w7^c~Ot} zUFnd;5(=_yEKv{818eea0%c2`1=%ItCG6b%44SJs7W$a{l`H7Z!m~L6`tN|lNA8Bq z<#3tTwh!0cWSUtcaY&m(JR|7sO+La5H&#ZcgTIFX>G37m>B#@H7fsS|dol2Oi7y2YIWJon^2hh-(e=!W);#IQ z@>{7X%A)Q^mjJ5Q6yJk9EQ^WZb2^UerZ9Aa&JKGbJc&y2)BqVG6i@u;lp9%Lc>@3h z3u@7C$?Odp`Ufw&x?VQ@Iw{Ha?`8LPkm?##@Bjl92!5TLpdxt_HC+U6`|N4377vUz z{C|L4k`*>BU+Ra+iU!uwlxU(6Zu%7&$;-!Tu74&!>i09_WojUB5WBx}_Em(ZyeV?n zV!lT_iYaOho09A8fn-I#fhi1lecRV;inK&N+U;K$i~;Zd$S;N;;K9**9=ZH@v>O?j zfaj}lQP93wnFKvUrSW5#|EJjR5VG4IsjvjmeI@+EfGrmhF@sm>9O5N%>V-6U7Gs%S zFtGEGjeM{-iOwhXbJ6`8d#%5ByzVE5 z%n@-LMVC!sx*h%`k(^g~p$Uh~|Blu;R!49=@N+;VCD91A$9S(>zJHV;0h66p4UV9Q zz;26xSmqXqMLw3UgNFG(q8-1vyD0xPZ8{~mKx6bm`;Fi;y6RE>xG9%s4={cvi_^;b zi~;g=U;_eB()?`w(*uz_RV?HqBF|)~`T0sClOa7gypi&FyO zeBd;sQ}b2BkjxIBb_*eP*C#Yk;S6!fajRuIka!`ZdPjv_h>pl7Ka~^c|J^|~Yrcs< z%(S8>zeUIrUCsp^?&2s96Px!(4A7{bNRix-6nyugEHs86e~U||f9W2}f@?8v7-uI1 z7Z3DaS%7$`)qQwTc@FrAAHv^1W#Z**?Hy3tNudn?dh&XzSv2ddw~{(hV-X^&Px+hx zkir8yZpcGnlgtOAUkAI?IJK6*o4Np-@)fN2OAaIYT%i+#uYd3!N3n;~QTc2ad))ne z=hEJ~TS{&xgQB)5T?M7n+Uthww0nQJ%bFa z>gOuw^;(Yl<}t3ENn`Se4Rdc`tE z?xxb7o1u@y`{7zLMh5)VAO7sa5KMNYwTbvtFfzXdS@dG|9{|mDC4*Y1;g>dVejt5t zES02e_f$A$Q@SkDl#E=E>#E;;kBO#@o^6a*qNUb z`Am$yQf%BNlFZ3`_E7qU{jTYux}z4?ZJPZkWOUS?wMY(_AK(Sl$Q67X+Rf($$ao%m z9SSe~KYbaF;fZUrgdIGVOz0Qp;4DfHJW%6`4cfdL`Vjd1hM3Fn>1THnn#aqGTYUcZ zZ)?W%%NfguDqYb1vp30mhPdZ>Nn3wjDrkm~RMKci6D zNw!?;nw5ENlAUpph-8n-UfGIBW$(SY6lF`uD0^Sod&}PI@;fi}d4GTZyuIs>(|NsK z=RD72J&*Nkf4EhWXDko`gB?*L&<3m7$FcK%5giM(a@tYSt~LC9XD2`+=KS%;b7+m^ zRd25YZ48vBq+2f5hMByd1G>NT1CG<}cdS|Li3vU7lB8hfmYSE=@sPz<)a6?1AEf*Qj{FJH|sE|PaCJ-wP~))(eHHV_iDGvKyR;1 znk86dzj*sHwf_L6c~FDxM>(f-BwUB`iVJS^%jqavNS<(saDN>_f!EubqT1tkN2^%> zZ1T7{w&!f=<(O3Dx1WKtc~wk#QE#C#`YCt8nn6wd3H=ptE07#G*8OiYVtEK!!dTxw)DZiWx1v$YS1%jJO z3jaIPPP`(yXfq`ZQYaVIHErKhy8Js+;B5UcarMXezdcbR2)vH?7zdUw!acJN+{)1UF-RV;5qbcRkB2 zwFqT1gR_s%e{TrZjfdknp*g)Lfd`V5aSFHrpg79JPA+t!0KO)t^T8_J%dKS**kh^u zzYggT(iIMKQEeJ5(J-3w&w1Z~u)Td`y_H8DBu~-4e!lx~tG|0|30a2J-#rq@7zYaqimk)j9Y<~_Z9e^& z_rQ15rHt~|_*cz*prLfy&JJ1S2dz%8DlgZ8qXP(JsJskh@0nfQZJNwj0~Xm%79q!0 z$oDyZ;}os&>h$+`(CxE&372qnfedo2bUwA9vIH_Gok~+A`=Pe zm*5N)GSk?$yDlM7x3E$UwY8qYvwE%ow-LT~TVOj|cF;2+x8EU+RGX{*+;DWXdkg+* zMaJ@o*MLn+J0b=!9m1QPr0IFoq`{>CS4*+ym#S+irvFFaQdJ{lNR#L7(=ENXxo&u! zJBoF!Oau0N#_jpRvB)mAtCNBy^}Df>64($mwoI#Vt1&tj$XN7HVp?an8Y5(3`A4M7 zqdqKb#YcF?D`B;6~U{|hWP zA0~s2)LfS4dEtujEyHg)(o?kbj=0{^N_I#&N}PC~f%1hNuZ-%`PfabTIY!Vv_>E`e z*D&VCHGa2Q?ylaMCJoI3>7Y^l>i;wF_TJS{ob>6snb$tLo{*Y_V_uBL%;I3&cg!3| z18Er6-YE(` z1|w661_cP;7-wDG0Dwd;f5HB*HOd9&{&etPTIkShzwkC>n5?Bn{C~+_Ck-` zL!y<&!(pz1FD5NCz4w9syF0Eb@Qkg!qi%FfFz}>WR1{5)Fl64bbCg!i-cl%);~!c| zlQR+3;O=2$&ZVkP;Vy=`Imq}3dz80$V#%uxNc?-zwkx+WgPtjDk&c349_FQ#`sZbm z`hiVZ5?lF-oy*+5YCQg+<%4vuNp{gBQBpsxzV&P8z2s5Su}n|a2ayM?Qp)Y|QSLYX zZh%ap2-)8aEbo?NA%AW!{;P`D!C?YbQQQ~{D=VL&gs0cov6!r4UWMAz4~fVlET;t* ziAxrRywkw-+o4{VeKU9bLiPx2>}j|0cRGYN4&uVsK$rB1_pI^GwjNneTL_YPn{#QN zSEwb1;vql(s+nOE5g0s;nt_1Qo3j3~Gn01io*#Qcv^$0w(oL#C-7(lyuJUTm9${1f z5-I_4q-rh4!-^Z*y;koyo-iwwN_jAKebzB<3?}hIx>G>l9~eZQb_iGhj=#n)Z2wRk zU@k#T$l`Q(eP}{#%=BWzfUheg3Ht(dExfl-PXsIhh=ERMp05?btda4 z+!^n=vdH-U6RlMJTawwEIC-3zvWNCUvqa9m(oP2nbPeM*Z?BL_OP_8P-*UF!J5$#ntR(P%p$ zeZv8PC@B8|bF*nkmh|4zdO6!M=r{&`Fay_=^F+xT4t?ibK1W8p&c|dvHRs1Q4`n(! zVhLo>`gb&~r6J5e5Q%Tm9N%8utxjP-hyvQ4b3U-aRDyao2D54T$>)U#Gsrp18=g;2T;DcQ|V(Gs=#g_ytCYdTPJ^}mI{B?;*j?@zbB#eGCcCqr- zm2cN+mnre%;?LafIy0)k^lW%beq*Fbk0rQ|*8ie;^**$!Wkf{q@PaI&_36MTUU!ia zeVxmOf8Tpr>)>j9(c%(97Sn)Q@p&=STb*;`?UI;U&Y~yd^-k2C(sA1TgM+VWsx`*e zNJrJqstb_0654=8>*OK-Mxmq>_Sn2jKI`@mOap?ltrrrgL*gA#gz;bA1ZaBgC#dZ> znG^Y^Be;Jb?QR}b1a?+bG6z-vM4K+`zTO2D;UVfembELD1-|6E@mM~9U#er@+-(Bw z3Kl$NsT%O<1hVh_PZ)A$e4=;lpj^=clB?Q!l32F8K?mGuCBa?S;0o|@?KJZ*5VhJa zB3}fh$-Ss|3OpA8_giFcrHL-zjVn}&QAnBV&{s!Zg_hqQRVN}}xNw$} zT2>^Csvhvy7QkP>1OH#@aE%uJK&a}%#<_NK#St#)(V6?|7>OVOBkGPWOz*IM4>^bu z4KIs`7sAAPxfvg=MG~9jX!%_tj3ekO)L8&LaV@krT))suA_E(1ouaL(=hY)~JNbvx zkaHFA(k!Sw{DNaAC*japb~zk$E|5%qYBOk|Va4D|KZN5zE(GO%#*Y0u!(86mp&CpT zU480$Txg4wBa4;+<7$K)1h9dJEznseea8Rw%=o#)KtBpW@_L~(b#&iupyX3;d;Xg| zL=8KpHNakzL)!QFzWpWn8N{u_`}VLiW&WTz0=kLQF8w?KkS8$7IW*E+h9n85>lDKY z-P=x2fgpxx9~T-ez^qTN+j#7noI9V?oT#hxQkK1*U3i^=Bn4W(rIg0_&zB&qv<-BQ z_QfD(T(`|WILmD*gMOlba)&wasN~OMp@;`qFAwoDdXnDD2oX=#hGR$^ncCU-7G1Fc zL3B`(#_wS))BPCkXt{|oO^WR6B-zi1WucZ`^$)Szf26%bNGqx>FU$w!Jp5IL0wk$( zffN{@($Q&}hR?$F{=BwsnHbZ{^oSGnq(jx3hv%_}1Jf>~!HR2ozqKnhRQtd_H)JLE z<=_cGC?Ux}r_g`bV*~JJF}X>}sunovRvXUvV;6GER{U@9 z?(A$p3p~sRZ)|ar9DW`CKM}8dwVt1-s+IMX%$Yb0Zmp@JT zG2U>rf=oAMBxT{s^%*IVxxOMpzf?+*oRJe12ywh_#`K-9qt{vTA|BhMj$(~DKL@Ei z6>ee{nHk;ND`d&{nx{ouYWx)wb7pCn00T|mLu^^BwW!liSCfTk` zUI|+)mUzBxH7KEn02=`9z{JS9XLMnUm+?{o8*6oPqN^Le@cAOO}{=r{HQ)T`zOCY zy#E$v7MY-FuCyf&ygG@-kgj?@&$%4NHAwb+`zP@=5`|&^--b_}-p*kZY1B-a#_43s z-tOEJsDcN5BjG_hwmm@YvjgDm=9xKS;*r49^J6&-rQtsIwZchuxqkChPW}-NYKU5P z+};J!5XlW4)9Z#nVc(^2NZZTGKn5C6$a=LjCO)Oe;{BqOJpnYy-e)DSeDj+@Z$+4o z@sg+eNWTI#(H}KQ+Bzw>C#8e$!w3Z777txl2v zcZ4E)x|u;ob){71qgq2}ZIUJ#(`^c#uneflzSZ6Mdf zp@@HvsetXJNb@lKCp`qGWi$Si*WQ^ltI?H;S~y+Z4uX zf+QaIVv^2}dNzp9Z?sbSgc|ap_|jSUfF%-fVTqLECFAIY@W1JYUXk94xm|pi8BkUK z8qXejZRU1P!MQySY1^iyild8aqbFyZ9z%oMQ75Ew_Z+<`%~;DW=3|_CJvyO7^4G^S zjietw>v3PGdY(FzmEs)diYQ2~$Jw!Fr>ZDPuEaudl+0T$Hr?g=A)X+5c(_cw=eHf% zyPet@a_}0ESVe7orHd+$}>iHIQ_ajKj@tf;c@m!NewZ&KlCsu-c=;xj>edTrA2-YzN`i%oiGqx?K{b+q(?7YNfa~+`JMbm}<17mpXY+fG zjF-){`iEBqZB4>z|f|w(93Z#c;J=v$5wA!4EEGm&7u#2 zMumP~0|16Mn>y>l$q?newzc2|Z`9w>O|5kyV$S%Gz1MwQ&5M~{5`Ts9jF*$`JR0YU zM_(Mfd$*k=x(o(lyJ_h0+>kUGrwlG93)Ax70lYs#_833Koy(OChxVXbmBE= zboHIqy(nim$*j1mfznaYvhI49pgauuQWEX{T{hzSX@0ih&ra90MV0ySA78E9Xo*(t zh2TK6843!5OUv_|8gbuU=2Bx@khY-4rIkr>tg2V08PbAJYW)8Qnm65IK54pUo3Lb*TId>6L6(fVPU!3q#{=p64IuDQbla<5JlWmF9|g)snW zXa=|$J!@9Ijp6UBh^|d06kXym;lg&Q)e~yN`=-&geJbfQvTyG}wL<3Vo4s&aT%gYZ zg&Fs%U7Yq2YEB0THRuRvd4;|1m{LXJ{NDzyPO<=`MyWQ#l%1hP7V(n2f>`ugiUV=6 z>Natje$>nb`E|a>Fl{W+@Bk8*W{eA~*rRX%XTnorn2D-da@?*`;yI{yZ6Ah)qSww# zTfBEP&ucXHdFL<@D~fjo;;SkrIbuhk(Yz2eB9an$w1|hP{B`H`3Aa-PsNq!Dp6k@l z7m#%ScE+_)31c46DuL_c+^H@>66_GuYU?^$l!&7%WccW=Y$pXGTLJp0ykzM+_S1%U zJ}bVXf1&&&jj_cUl@9oy7^FV{020cduZH8h*Y$k7LGeF?@26xF)V< zUHeIzR$$Tf$vpBF1iWJhu)4;7d-z>R_qPhP%Z=D3HNxLyoaZSbh9(6PvqSHU=Q?;3)Jr31#7*wRnoZI4IT~YEbigOQYz9G_#CG71Y~l1ih1+Hdzs zw!fU^Z&vQV+m#%}DaQ}OH>`PK)atjjQm$xJ5O6?cct0`CSOq(S9P(=k^3t|deAIXV zQ}B=LIQ@5rTDSd8Bo6d3CUMgp?Rb@qoQNv$ieZNj9A&Yw$5_AcbWqyOMMdBD{nlvT z2E=!reS3RI49d^dbWA(Hu`84M$M!=4@1I-pko<)UeF~pqoT<~H3Grg7H}b~w-WJsv}KrZ=kLIL7b2g_n~3imH7|4H3XJ;*A%y?0v{I5c@k zhKnjZ^NxFdwYBRqwOC>L+0XtDQ$l}WKkxfi^U()r1^v|y7i%kcWNMuD&+N}vlroGN z=_oQHEFCLH!)i|2mEPr5Rr1w@xraj{UuSidMvLvl``C`*Dw>{w8VcAk=~S)Vt-8=z z9%0e-wv&LXD2Dhi?YfT$!8N=TMuiB1oE?`mW{Og~yt;2A`$FPXc^^-Hc9<;$S0PoP z`Gt|uEsF=PKMfcJ2M!Jey%@@l%Jf)2Ud4)IVfU`U64EH-@Q-YS06s}gtIV1$Rt@@gh9uq zo-3fs!Dbv>k6A+78+u7?%w0D)AsO_7NTZkKp-&qduiRhI@*DUeK)a!jE|HXNEZc+m3(CsBeeWo@|p%5>3EI_OxzA7s->OF+s`csx@d+f7@lOVv=t09!g8IS>( z=D&l!Uqdi4Gg2%d1ScRb>$vkwQ$Ijj9G@n>$~5!hET;a_d*iTDIp7E5cfS#$X(|L0 z36_l+2GI3e@XJh625%KUg4l0=$C|^3fNl$r`vpOzo**T?%@V|m+OG@r==UU1@yf6N zgjv;$&8legq*>~oSo$p4Ze%{( zLTv_9wRW(;vS}~gNjPj?W{LieLzaGChx{#6dw>%B%6|}>3f>;D#H?mCC$$4dxtAdH zHrDh`WEB=)$ zoQG$(;pBuPsYz+ReSkd zEaK3Z&xbDUCNpY&h+3Tzavh6m3n3hhSvSyo@0(au zNXmi7q}JNE?enM3^IfQmI%NcP#_OfJ;8ykxw@c2QqIQ<@58<0}Uo<_WJ3;P0@5uUNF14i?#ef?T#*1r1J=U#vZXq~f z;9W)z*xci&8Kpmb*ZA$;F9eB8^ajnUl7wiq(ge&V zbp2`E7M=J5KMj~q95|wu-WlcYf8T?eI>ZePn6(JeDZz&KoIEfm8kC@Kk5@)*?CXg$nrIW$_*A#cjlfi0sp?R7n9c3>B zJB;|C6buI`_M+rywD0C0gga}};a@AeYLpZOx`C`9GILX_*E$_Dt8DR|Aw$A+I%|e> zKD*Ll5i+uIo@RtZR%JFuhrcEpo9IhMG8MjoM8p5d<<1mHDu2G7oDnI_&V$hbKaU!w;#MIBM;nM z9OguQ0@TfrUrSLMI-vz0{#IJ-`nAT}aPJD1yrBVHi?B33*lhRDSz{o#RgzS4OHQ)) zFZ}y|oqPAU#@V5D1O@j5?xdu#6CZs%Q9zMQ)!w{i)T{<4hEG1aXso>U!snJ+w+m6?OAM-lD>+N6?AY-5p*HI7gE*1ldS!-EJCrRo(}J= z;Jwruu01$LYRa?gmWY`;*|B~ydwJzq8%y}VzRB`zGyd@I(m61pm=Y{*-I+7YVCQss z-Pz5Qx3e}zZ9$2lVMwbBPdLC5Up@;xAOR%iCK$5KnqhWb0hRCdkBcJntr;XbH5CvH zVG%2mfQW9~y=|zq-q_hKSaD)^f|+Y*$%|r;{k;9gvgv`rA3iV{v6+lddw17E-YXsa zi!xT_S$iE`SDQAzH^rpfeQsAG`J!?A>iT{9;ST*U4Y)XDP1}a!pDX|-;YO}cJoomC z41)U5iDahSBz?=pUu!@Dv=Ga1WH-wte|wQl3#GuUdDsz(cul6@uBCJ5lJ~EUn9>6i zuRZ0+mWMQ-@F>@CZ1GzalaFB1XsgCTQt8|;5C$B-E$)2N_i8dE%BWlO{+CGlu= z=Ff%wFPIIyZPudn8645=3`WzpNO^8iKNKcUj*%FVu z_ziz-ktNab2G~BwcKpt7RGr8(re>nK2*49>?2&H<7pc$h$>zYjz^lqNT>$ssB#xd0 zT6&!Cx4!?Xi4qC=M$6K0^z|jCTIx+2<#lRYwqU41H(zo5a>Jv+yKh8Yg4Z1`vX<*4 z)hA|R2*ZLu%xph>lS(gHo^RR@PSS}NW=e5y`C_C0a9>!#xTU8%@L5wwzd1{c72<09qgJvNcj%>VM-^3i;7LER=WTw2vUtvS{ z6@jzSLO^;f{_Puc%k}jZxRU>cu|Ynl*sfQ3EeG^}ur9txJL!0wQF~MwS|X2zJrzJ9 zEEZIP#UVB}oJkcdP`fgZ}~-Cwa*G zv%@aP!Gc~yd`Z5T0z=!P!g6`Z0QsRR%4ya$=H|i}ZwI5Xs089PETK+1>GB3_LRJ0F zjVh}8EoAID&+~RRwpfuPUb-`Vk zI_Aj8&2laRiPU$X ze@apj_nD$OjyUL@KBPP`WH{)y^*${f_6(sqzNZbkxZWyhLjnQT{jKuUrU^>_E1}PG zM{^QM#iZr=Z~s_xmZik69`8}X=L2CWQqWNX!cr3t9D%J3^cBhkLZ@`9_T@Uv(;?sz z`8?xfcm8nH%K5Ryc?o>+w zWN@5!xNreKg_%8{jaV_ z2Ip?tr(Nz`@{$^D+}}?Skec%L5AV>wgUpBgKEhil(H~R?zTw|+XlF=a7bDz) zXa5V)riAC?(5BA7KhWY!@##5~Os)|VSGcA&lsAlpe%FLLj*5vD!9EMr04)!`?tTt$ zXF@62E#&4lX&hh-2tNlwrt?eddJeaSz9Ls7eUHVf&^{_dwJd=rR;N$q3-(fnrOxBO ze!vX7oR<-IZ=^Wn9)2ek&{>VbhUg=XONO_JC=plBl)WwJ-jt02?XMlUSj`)*S;v_Y z-=xvd|CluLVBUJFVA6NQKoWG%;#c2Z-EQ^9KA)N52HAI?q4Cp$ z!8LWr}efYA`3c5fP&c4Db<&QmO&#=Y_A{|j@9Rb*&VFt*R zA4P=4K1o0>sR$q5N_P^=YPZBo(6E%WnD!Kkb_@qBf;Q_bcQW5RH>qhA?n

pd>F?(%nhp1Ntr*4JZu^1k&d#*SYl~8B(4`hvN1n2)sI-Myc*M}tO^$%(-r2ESw^QG z1s&s5J|D0dqm$1*#>w-TyzmR#%t?6WL5C2y$zur&ta;g@4s(ld$1H&uiqe7(51^x9 z{h~FaaUF+K`#-tO=Rf|CyO%M8RYB5*lRvf(h}h(bnK@D3Dns>;@O_@hcMb~rC@)gDh-tUhqGzVSTK=ah0p0g3hBskpsX z&qbtoboH{Ogu3s-cf3(dg^)6GP`Rc>l$B4%|L;P3Q|2IhDIpYJ3i20a6}T^TX8(UJ zA6YkimuS^)&q-ZMD0zW7THnd7++aMo?F49N2=Wvx1;~~i zp0cO)_?XBi1uphg%>REOedA%vsU(oZ9}PC=Y%&d2DlcME-i6tU(73G6Ghlu~{YoW{ zjF(t;ucS4PA4;r;wI<^u;;Wc*qo5G^%A_zk+HUn^2AeQLKb)?|081zHx=Bjc5=l`daYYJsio)MwND zOkugKANaL9E2V9 zf&F5!hS{l=Vn-=}r~gOz&t+q;k|fU&5FD7MU1HH{Kk~l3QZ9LnSof8};Io0={j3{) z&}-LBYz@MX`Ve$6N|PctHVYE>|4=eASjs6P*Uo_vn}zFn-GtB3#Kf9yXpDbUN4VIp zcm%JCau#qMfi)J7t~j{`;QFx(LlaD?ZPe>Sb!HY9)`c$hb`6fQIhfXj;QBI~5!K1T zNp&@*aqa9j>)iYGgXsmyF-elOs(MM6YvKtrgYT#_= z4n>lZ;@eFk_`;dgnf#MLTnV~6;pFLEuw;v(i+=k?_+5$WnXo0U?tJJo8rkkvW%5ZK z>DZ~>+qw!-F!B2zgJ%JFkqSx8IZu3E9Q`3r%6Amj2{P=bQJ1AwT!AqHGV#bdI76i0 z5`aOLB4K_=z0Us0Jz3lgiLDjIPPKz-O!J{&D;vn$1084~CIPM_Tzi@JmOuAY2T7Gj zPA-gtWa_DmT0qx-x`}95&&L1@w&YdNw*!n~ZKr*q(a})iL|ggXtz$*;*}cdF<&dk2 zv(OX`kbD9%A&cxBOgy%xcnY-l<)avXc-4K@;*ee`5CUBa>L}ddjkS}PRPTM$i*CN@ z^Sc$bEtCAGai8J30nnIhRmd|IB=;FyM=LkRM%j3OX+VMEkEB1QWkmS#`xDKB#^}P8 z<+W~K@2z>8gQQRjDDH2W%mHfrwb7UzgEpX573MlRrCrVD`sj0}&|6)-)|)`GYt}#_ zFo;X>vG*c{Uh@W4CcDYt5_sbNT?%Hw-e}SAxwo1A4xZSQkuZgY+)qWzFto&U zw2-O9eoJwbu=cfI{dBh=liSm$@gNH*d;aaWiyp*-tJJy=VPp zOsO!`?lJodCq>JGGpkJHm20Tt-0T6fl{Utq-dSfVU0Eu<-*q(Qe+In0zFrF5>*r#+ zMgO}R^M^pt(nXf%M^z5Lf;Gcx-&}9Cv#qJ``3x%I3*TW=r*yG*3EbcrC(`-`fgV+O zM2v@Kx%ipF17Rldla(~C?GN|dGP`Yt47d#Gzn`_*-ysgVL9ZT50!QGkCG;_(C{QDk zrg+FQ#hmXq&hIMk=hydfy)#FLS4EFe=`6c2$vsi*%w?n!h|n6Is7x49#r5#{ZVFR_ z-zWMp;O$&#Sa-ef$vI3d4*#j5hMQ6eTE`enQ=nk|MloLwdLl#RNNK?%n`@erz-Dmm zaycLCx2m9dm;5_0jB`bPe*HqXhqH{Yb=KlvLiqIgINV|g8BzMIRjsW{)8z9_HoAE)U<%gccSkfv{^Tb=*K+oMRp6g2e*F1fXi^64)0Gkt+TU+nG3ykn z*xRzxI|D9@-EIymq|jS|W$y;vb8PY`bm@(=mDalE-qyEt^Amr7ys2RMSHlXeR=Grf z@TM~#>h7!f%x&w+3y+A6GPl7Z*#iTs=>pdd24`>ZNcc7%Sv?}XeqJhGxL+%UQfmTR z;@fIf>8sTeF?&anZt$cj^J6S+DCH(gWh;5BqW1EcEFrvl9{L@w&`;^m6eo&8rtDnf zaOZ*=mXntd&OzX9k5qqhFe9aUz!BKOj--+`|H!U(OSV{|Wcpt273iHMb95+xzdvrt z>lSICy4x)nwB5o8!j)%x2hG!!J8z3Qljb~P?<5sOy5IkBMKO7+m}Dg>!TBJGhB4LD z*W%d%fvtj_M=jv6tUW)sm+gjLPGw&aBXjfT${GD9W{vYeuw)DrgHZ>H7KJX|aYYLb%a?}LL>yPL$CPX&mv0Q+ zib9n64jJZTR@LxS_b}LaJqn=FO{po!3;L9X?JiRA{=DQ${}N}!f)e@LSF`<~Y+*u`j@W7OqV)J!+`6h9$I!>_)T~iI3+v6fC*2VoVV(A6MrG*!>ru7Yt26Z6@R!;z<&u~y2F*lMe=SRX zq*xq2Qzt#Te_5}$Zd{yj@<(pc9RdY%clFKP(AO8E0Yl#-NY>ZmThfaLcD`vMilzo= z)2V#(3+e^sLr1*7aL_{UfNp(uEB`}MI`+oeu+Ml+2ilJpcgOdRhA=7XUI19odPb}- z(wU5|ZJo+FG~eW?0BR`gXRiaX8Dy9eCyP~yJe{a<1LpqdZ-3oOY9c(au4Y! z8mYt!IKTVIgxYCz5QSELa^|zW)L*I&T`u0iEl2P#6eW8_D1WMFN&W{Eq-MwxXpuTI zU-k~qIT9-gOL_Zyoo&1!JK2YAm0mYJ*{8pM?yB)pX%tlNAL^D1ovRLue<^BK<}3EN zYWYiSeDdUp_p_@#to%_yf~d(xu#$RnN}umm$Ozs0!RM)U?RPL2*;_SfT2w&(q(bDe zI9CN&?1kl4kLw(Ty|p!>g4S__}mpSDG_dhpYtC+*F0+k%l*Zo`R={>gCB+TMV&1h z@abinlf5mw^TR38`8$Lydup(TMW8mcL7{rsDs=yX}R80yyybXe}1 z$8Zd{ILgc`s>c0s9_}*GISm}2PN6UAYT1JKl3`*8Urq%MfY@>F;+@`9l6t!gwUwhg zU{AWdf{W95NXVc*5t=CG-(01lH*44n-%EtMD;h9B=kJqTu8t+m7=!tR&yko>*UHr9 z0zUBEOB0_0JI(RRUXA21-cl`9e8?d8CM!g6zRK2oO(AEr3NWdE?nnZ36ujxuMB*34S+kNN1au_$6|`X`Qit%~HwhHW>J`42m}^KV>Dly!+jxbD*fl zcNthM*ve76-a9 zXgEL)E7wyUo`lvsFVk`fx_ejq+VRjV_$|zrIXL*+w^+6uV5T;-KppqvY&dPViEf7Q%xBCv;w zO5(R2@);%L6)rfa;_PeA!;g}8{e_2`VL9vCbEMjq+UM;>183EelCKf9v_`^_CJzjl zz-N&Q8DNRcoC=|R_N z*ztyXyXb`9)=Iy8nmDjvB)s%?!v9qQ4Q?aq4vGOfPOfUMVcjc=VVZI_x9JMfd^ptZ zpYPAWTzQ0#V#@hn!PN26jTc`OY51nb_G z)(#idlFqc)5vC==iQE0b&!~1obzbp9#B-%LSqn-ekkA0aT=8zyqDz{4N4((H0 zZBiIC5Xvj8pk%y5Co$Ryk+kTx;#A2oeU5Ka=UkMB#T@yO3x(CBw+`x2#rm33v9 zX;ZIq_f1~MyQ7zJ{f^$*^9n5OIoVR^1MC~6Y`W+B4>s=5w2C7figGia68{f`w}rcl ze~FcE`5N*)g_^t1RsJCAoHJ>J7=Hs92z7-cgUN(>~R3ofd78{rJ!Rr(2 z-1VE5O)#x)ht^j~F;5g=_D)h>IJj^Y;&ymS^E+|8cb>29#DxxPle;fIhv9q=N4`kCi+3B1 zUi#l?qTo;POgxvp!|;3e+^yZnM(w1UpElB-CzHM1acxTw5r?W*h8g!uYLDROpHHvv z_w8_NVxLKC|JrPfoztv^N7Ux@8yDi^Oac z>8ShizACb#?%}w~Hp^b-3C;uR_S~45kAeZV;4s}V#U1zenpIi7MmCnTq^CLf?<4An zx31nv7@@@VaQ`j>!^x9V-Y+`P|5W?=ly}%ZhFA4Q2=C{7058BUmzc|T%#0-iqbW1Q zdr2{+-6_ciHL(odRxy*cK%DtG%SBMOlfj_;?ALKgh+WgGebqFPZ9nT$^SWCpsd#n) zmsGHM)8-~GxjsRou^@K#`_A*_$))>3&}qN%I!%`R4Z{Rm|_iVzDRp+hudl6rEOs=30M{6cVvOrM_VRLVtivXCESX}mV53$v_ZYLBvXkm&wV7XkY>t`}z zbVZ#-ESTtNEmHFULJrB)C}pqJ7C7%^hw}40;PSA4J&|9a(M1BR{|I@ao_iLWe_UMt zUXi1rE3j+gR8#(u`p4g!v5n??OV@VzdGX(p8zC7WDoMvPKx*squH;bzzo9c2sc<48 zfukbdThuDIxoH4>jSQ`CTMzB|{aOx+DfXQ)&6(nMpKmfn=X4)@{!DK)dRHFKNOUTu zu&L1!6;-$?Z_O)Og=vL?6YsKH>l(Hv6IjJOKMF?nu)izm^!=;fW`FMX|7rATBRjBj z$C9W{l6~!8u`5P*#Wk-9zOJr#cKOo-^D7$E%meLm!6QW<02%lW$4Pqc>vYW>+<%i% zXR0&Q5`HAj4}mxyj~q(=PD8o6Co>`Rl1NpUQNxX^jJsQ8;;t3tz zdH*(`ko4aI8sAaJ6U&0ftJCCI$qQ$|ifsX$7OfEKtGO)q@kJf+U;dsSPKOof;r4;L zMB(EmYl>0b#M3c9*Otir!znvYvi&DSeXt!5=CVxKr ze`BnKzuc-f5R(gil_g)wJh@i4R$j39zV6b4l+rr9z(!31Ksy=Zn_(zA#v{d-LieVU zPdHE^q5Y9IR8uud!N+@9PmE7ET2<&3_p%b9y}5QYDAMpMR%~#tmFK-es-^asvq_wf z?WHcPkyD)zcaL_NZBxO}tVbz*nY{;MlP$ia^5iQwJMD+={m|q*LR^b}+0>@Opd_l~ zVX&9gSItRQ_lL+8AWQVc$f51f(4CaWXoZE+TQV>qUtvViJVEZ&&l8Ny;RLxgR0Ju z1i95{T*+HAUlXO3o2xX7{(9^c5u@4r1kT>3#W&eb*63bV4VsN+yI^APj`$mhKTQnB zun*bF#0xtPg-(;GgG{W zJ@?LHr;Q{%9fi)PnA7Bof8zfMAAzdhXK*iA53>;-M0wRh$A}WtMgL>GdkSleL(L|; zw}z$3-Lkv;_b1Np+*2HTnmQ_br5l&K z#pkGMlwlCinP@~8&Wh}`ezIv~n?SZ-UsYCo&9MBH?;bVNzw#m()>*4^)sRy%W;9;N z(7+36!3)vfY@C44*;68(qBysuvU%55(r3M#bJLw5`L~+i>+xgue^7K6YzkgoNc{wll?Q_5H_qg8Ib)V1a9lk|l@-5i}(fn0*HppU! zNC~C;%Ayx66JY1d>8cN5CUf4bcq4FOB}G%8H=qnED(zd%ra)JCOWVH>eC{JCHc%wn z{8~iI^tLP~j-zF2cYQN7;_yDhx8TKBcidE`jutA$3XZ6U+o*=e!nBl=v)|*}`~Idd z5FS>Fd!C~xz>IaYpc6B1?(jz;r0K;_9v4j#SH6h9QFCb;JX+*iL2DIDiXYipeOers z9OZ|NwU64{H>uUnBa3^aHb*M&)6>c7l-&&!JAZq315?Z2)tkah+x00?%b5c5gn4_^ zIoz>x0fJ3ovCO-$cEc|f3BL=99Xut}{D%`9K!nK?>R;FP&HV3F6HDC|M|uW3iN|w% zfA6Ah3--+RpuT6Oz7=OVgmyG!f7)JEI^M7qo$^#d{x_{`=co}kL~#GxNeN2}RhQE-v*XpRh~@=u7SW~6|MH}MeWH~V!P zeOjno1k7M#+QourOTfSO-M;?J@Ww;g+Yf9Hgqa>ISa#*Pe>{v6u}3txOH=_co|iB! zgxamKe>a$y(;@fKVB+s+5ldL;t`%kd&kloOZIJn7+D z>{5}(iNqsZtxBQbKaQL>CecJ1V?C@;+QO97s4$l1&gz&ch1L_NjZ{*JxCq0`aaAEM z^#egQ_Wdaw_@JOENy!>@8Ja!kP*8X~2zZl``|Tut<l$8 zS$6`P@S2-_DoyO8?ydAA!y&3ubtZ;-+1lf$F3seiv(CuEgw!WW0&;}ot9KFC^W{I< z0P-Gzfpx{nLk_9R`p|~pOlJT3I>LX>cR}C`A=RVYld6CZfG(}hyPD8xW=hDcLO4uf zhi!`2X84BcQOYgP?T%AA2^2LM)@L>ZMd{2o+t}#nnMRV+FnoUV=@EjObn}X zpW(3f>^*U0NYe8Cr*zE7x(%OQoVv1}-a?rq|8NG`RvB`a;ALpmO33+q&ZAA{L<(M1 zP67>fYssWbHuc$m8oaMSWl;ty%OvepX`wO+*}%H0%}m^)gxpm8Q_Yky*$!k`P-aeJ zLxiwV)`nQ!ycTmVfz93bxboeK0X?P)=rLJaTgDS#xoP+ZH95U)3Ez9IkRpK>=3g#Cc&Xg~v&7t8p z0YQ@Mt#H5gJjAhGDp=X2SI=NpUPcSPa}o49KfJVIzP9Tt&>ej0)3%QyN-?VMlPLgP z^|xvIb|0&stol)G+4rfHf{*laz`xQz3DZNGP0RS7g1O6EGJPGU!wI*-aoaJyda~Jl%2LWatN?}0*o~o|e;ZFs8y9DQ-jP$Hga}N{7)QE>ex}qI&`5U=M zo|Nx`1~r`o-N?hzF(%{m3Avq-Q4HD@fx!x*L2XQR z+aik$T=bU(R z+I2%0W)x%CdO1sD9xX7WY8T0G2Jz?GgRNe6WMqqrU*|hmlR2M=cCWY(R*i>Tsuzc3 zaSdrE0N@dGgQwcsPxtXx$G`tJMCJCTJW(g%$-XI2$dZ2; zCGu8tH`!5QHoWX%kKvKjvkA4V;!p5iZ*{xT*3+hqRz8jb&D_hrNmEcYF=Kw2X*Vj( z?Oso@e0YCGHsb&~+(J}%ZuPUU;QJQ3*id9Pp0vjW7k z6w9;^YO-$~#d+6zDY%|A1iTXyW=7^)^ZSqeNp#%>Xfj%9rW=#d{jmz&R^m&I$a*0C ze*lsWD~M)5aOYME+b*J~s@J?13zWr7@e^0PE%t9chq#vbzW0XjMu6_0Yzd1A?UX9c zMMlL%cgJRl>>&EBy!Kq3q!%uyOiNAx0w>nzka9tviYM$^ z`raC&O!B#~T6dM4v6jNjNUfCHb0l$)( zhRp^b*{&YNTxHCq6C?2*DSBN0Z`~D-fhwjkQ&D@%iMFqq`w1wd!{(`%&(o)|ADl98 z%wq)(>-M~$_c~l7B@TFHLLb)j4`5E%Y3lFhFf$ABuE54BAHYc?Qu+fn{7QZ`d4g7cQ zw}=QjdJC9oH7r#8A@#t+<*gcnE8Wev{>-j)@per_LZ-Wf4!5u5gU;?y0z;(PNG<@b z2wV(WN3jAP9OW>)%WQB5bv|$juen5!*lq`;cacboi@eD_er*>|7{^@|c^hTd#8rCz zrA)ydz{qV!7#Wb&3a=vt+CmtmjT58ibTayP428{_NHT8BZr?T1?uPiB?P>KddvzXw zZVIYR0f#Yez?7P{qBjgJwPyeuc3^v`9p@%I(wb(==_pN2XK@K2syb!8S!pVH$B%B0 zM*StYBYYim0epV{(8xP1eCwH)P8cKA*E99m7SkW>fX+18=p4R#;P2$rzY|&2&G8{@ zeX(~WtmPEwcN|9;dSvT!F1Tw8J^fmp%|Bn3l`AZD z-Z{(_6)sE()07`c0wAy_TjuN`2psypV$KpS+AaDZtc8&KOWVFE)W|icOpRJoE>1=Xfxh#(P%~>nieT;u>Xatgr8w5{u!W z6irgN{Hlj#c6WJ*=7IhU!EV3qi>2tz^H9ugrztq?N-N9z1L^0eo!d@p22^Q6-VnH{f z5IN^ryK{q-EA69dP3o!PlC@_ZQ}Svf4~e))&Mx~{dr1Sel;K-(r+L?0hl%F5j`guZ z>bYwB;wMO(EAPCC%7g<&{C-FW7lq!X&}1dzv^%P;r76a`r$sm-??aU=jea}Y9^d^B zK8X0$B0AV?-bbr1iC-@;vvJ>8AonU-n~8ReRMwLLn_2px24rhs)0)_%$#N-tXBB#- zRFyMzFP{7hQpYCsy!VzG1zi*`6@SeM|(NZ*o9#t zmV|3;fvlEc^uf8;T*bm|*#v;G-$z5T%lFd!?H%ny9l^t^tp#=IYm(otz4YE(cfegz zTH#eI7A|$WB`9i3)3uW%g)Xbt^&%HvYpPFLQF=ow-N!_0FakON2p1s54uAwZN@dxG z3O;0Rnsu6_C7TZx9BS(c>qSV{gJfQ@his@E7C1~I-`j;N<5UFQIa(Yl4s071DwsJQ zkdWBjJ&zJneTw-m`RlKngXtXT)!!uCU z57IH#gHd`(K&$|ZA!*Sz5RLaQ(q-^HZ`;O^5})~TjHwZ=O78AYYtLTp$~3=|_ogmB zv#;8rI16adfdh-{6AYJfBx8?(Vhsb{Z zr&anZjaUEyhBd^3?gER*fjYo!g_p{V%YLAE;>BOW_>ClD_ z#-)YT@$hhOH9eW?U)1|ORA9tfU9%ZioK4(_goO6Q_+dMr=dMu^ERPiIPwKk` zQ$nY6n_>ym7%XFk65iNnsf~NNL$C_|3(F+CKsXZ`P_eJ0gn>U28(s9IAr_##rgFf> z_}JAJk|GYnR;WsKTb2@`US5av`=Z6plMzOH9k9uhD!dmk!_d)?H+3{!eODZdOOfqD zYeC$8joqk#!9YBP8C#~aBv|xR{I^l^y;a^*`LQ)};lR7^WN@QS9G;!Qe^W)Qt3~rq zJ9y_pE~WX+G!#%>iFM@_tOpASgmEQ0@gJbnBKuC6LB1{QThws7DjFBVN*ZipEY~@s zbhGIc#T`ctlRUR9WxJClCSzX#Rx|qkFhqaBvnl}@6$|Eib#s@0!GvGvg247wv;&}i z+*H&r9M+D}sgB7`nRBb!fXOiG=^fSk)7*+}yn>u)-OCh4p!tY;N!I>D!!kUsx84NDK(5(Yi8N+*Ws1+Wh%2A0k}h0_?o z#M>_65(H!`tm!Ti;c&;YiOnQYAcd>+^&#(@)nPCsYgI)xve9vqI45zv?=;?Zr}Ya( zK(+lxnvS%7%Tgd}3XdAFn#Ae<(n(ieD7sXUaye%59_1tKW@Q2v*(fWIcujitu=yRc zUIf}X%;9mTfq|Tk&~iQ{HMl@uRFZ+*F)uaaYf5R_=UsuXt4ytV#&f#hNns%7g2rlj zXj8suKK2MV3Na^q_mF`olGN?0pB^&CI>0@CpH`Zl(BS`^BsF1`F0tls=hZW0RdtI0 zr2ul%@2+?}>ychqdPj4Ysy-UGNFit2%Shx^(J4ENATiw-A{y>tu9zB`2T2KPkg53F zZ>%!!>cQ=?!P2q;Kf~2B=nIDfw0Di^Fh6$5Xzt4J-0 zg+yfY+(A4Gq(;r@fBXrlG5ic1Z()w2lVn}UeQfCUn7KJXF1-;YY!c0t!X4uS1#Te= z$CpPGpNbw>=a+f;Pb(jo>q*oERBWMn_l6zsUtnNDw% z=P}T!onDu@Z-cqjRsAzlwhkvRF>rx7H+Nd*3t6C}OqcWhlXM!C4fF>iMth_LH@t*XfFi2#Nu}-(-4^puj`t;-hKskyiBnET6^wPYfh-x| zbHf$VZ!m6FelFl($hg!nHlG!n3wwrH-!I1JyV`-<>q2#~Ygg-Iyj#m_cZ}GjTPSDh zp@3VK@9OqPKzsW8m>8Lh&k_S5|H;-`Hu6#A4zcUS~C1L=Z*wMNk2tkGsYBDeSq5nmTR1->EQT%{G!U=hij+Cs=a-rq!J zFz+~qNzI*LKCf}El>}0xcGR`C;nA@nEVd8{(sKGX8~9Adf3~TD##|{=hAFGXHv4*& z{ETInzjzfh849QvR2myCYK*E7mnALjqQe;txTLx0Bnj@(+2}-xqcgtQ?f?O8&>WMTq?Y)L6NL6Vr1xqTCpZZ)Xl=f;6^j_gF}DWK$_*h<9LXEnql8yYXzL z4v+|9!K6aLTZKK4xVAL<$R%a6tJrz#$wV<-h4O{#(<7RPu=#Y1q!?sM`18JMtvT59 zj_OxON{YPT41wnwtvq$~1yqDo^D~3JBE}*oYE8BSw(y)gwVc$(bcNm)hO&v6@7gnrU;jR&#`uN6^-56Ou%64 zhXb+5hE)?RndS|=lTa+jN+Rtjsp%>)NT_jaO=R=yhIxB;>1kf|K@#{QWqS zw~Q7}E_*e1q%DLlN?mAatbtY4N@UqqYGrQ7Ijy;U&aE_x%-Fp3@XPgpcaNW(cL>+Q zsZ@T|ClooW>^rmD^KNhfNif_|+?PyvI>OA2^4u?MZsqK5`sh22dIPLwke%9>K+XZ_D&}Ogogb(S9MhGn1;cccd-_2j%Yu<*H z`Dq?lo~ZoJ6G$0x-c2Ocr|I2iozlH?)>S;YogsQX!s9GSKDwiGXB7!fC^GW1y;s7Z zR9UGw&1_Fz;U-G$ZdPAcFu({)&2d&hD0UJRxFrEF5MbDW*|KUHrV+*Hzf zp{u+gktnaeQOL8JfPqatCgCQ9?bI6g_P!RIoRH42+WGoeGrlMJ`c2hM`e?Tw&$VvO z+3GkymsbxSVhm4@d?*<|O@*%!-xlHX&^G%G*GbPSby=1wZn+;NrJ3h>FNM8PWqq0> z#6?8ZSQ!n=BM~@7bSZ3w(QjS4&GARR-$8EW?wSAkUP4&y`47P7D1rYGgJ%;L%loeU ze9&WROtnL^0Et}Sr!Q#&r@mZ#DrC7zeR3Q3RwmgX1%8-PYD3Xbj`MS3I&WzyiV-GT zIkb3o#j||c{j=J(2K`mI*DKhgY`dbbz3t;+5_!@ir#Nh`P;9^>BgaPvZlq{Io$H!? z`{|v5)Ewzyez?42P?3b1^EKP+H-t!6I(q^IH`hr-l%`Z!;|=M(dZ!LNeyV(Z#iB=@ zq}1A*$(R$!h{QbaohveDDf2O$-FCLoC5jv|XAgHaD?1Q*&`P!#fb-vl($_E`1aNV1 zSiwTcj)Kh7(dC|*qvJg&%p$bDsy54=-HUf(zN`K9LC)MWCElmhm;D>qlC9=O?FWa; zhKf96&+=@I_l|Y(Gz&k4~z}6A@uPFaauNJ3w87wnXm9T52*1{eg`M54<@i zKDmRfUn=KU zPx?qXq<*24z%@1uwtoHglhdrFu#(R?^I6j*^HAagc!chNUQ<$Am%{TBWr6_)l9EQz zBsM*=YC0a$U^j<1S5or8O?141Raaiq@2kJ&&buPF@mfO5nKy65r6)>$2D21^$xw3Z zlIF%R8Mofj`8*eROZLCUWn)UtECfc~0tTi(GVYNh{oBNcPE{T)P5MxP3Qk=|v#v-s<*6cnG{5>@g)!hJ5`X8JCTH*mRCBi)9|(;=f`oeg%6pv|IvaTzDu zuq=$PYeE2SM^iAa|Cr!?Po3S_7_J)mK_QE@rNqn>sRIQ!_fcCv@%?w=D`W!ijb`(e zEH0^@qn}i3vZ)Yl)E;kFdy$zZNEgQa!pY#mcprMI0Er{De{ zaq@CI!2RzcEuVYG(18VZIGh7@4M3y3dW+yi)T|e2ICmD{HRXc zJf&gA$l~?3?BZ3Gy`%~j)$&-wvzzTx4>cPpz20#7#x3*sIRCeelXLQ zifHPvQ>DuiQKcC8)VRPLH?Npi?fT`eH4C4fW*8#m&NiddysxC3DomjyI@CDFJbt!N zPQu`W&(L@qox(6ZzC>Q##0z@!6Zs{07pxb)x?NG{ND~O}uKm8(Xhqc0rcOkDwd7HtYmHXTi_$R}io-4vvMRxu%PwlPkZelM`gt zzekVe?Oj;{e|H(gGWqdP@EnBO{O{4`jxLt}Yk1)~h^1mhsF3h-WpMrzadl4Up_INb(|AQ|Q9!>zcy{nC-rJF1N;nV+|