+### Visualise Page (Experimental)
+
+Renders an entity-relationship style graph of Users, Groups, Tags and Nodes, with ACL policies drawn as connecting arrows. Use the sidebar to toggle which entity kinds and relation types are shown, search by label, and click any entity to drill down into its direct relationships.
+
+This page is marked **Experimental** as it is still being refined — complex ACLs (for example `autogroup:*` or CIDR endpoints) are not yet represented as distinct graph nodes.
+
+
+
+Clicking an entity highlights its neighbours and opens a details panel from which you can drill further:
+
+
+
+Filters can be combined to focus on a subset of the graph:
+
+
+
### Settings Page
Store API URL and API Key information in the browser's LocalStorage. Set API refresh interval (how frequently users, preauth keys, nodes, and routes are updated) and toggle console debugging.
diff --git a/e2e/mock-api.mjs b/e2e/mock-api.mjs
index 7f3a486..41a1e1e 100644
--- a/e2e/mock-api.mjs
+++ b/e2e/mock-api.mjs
@@ -152,10 +152,14 @@ function resetState() {
resetState();
const policy = JSON.stringify({
- groups: { 'group:admin': ['alice'] },
+ groups: { 'group:admin': ['alice'], 'group:dev': ['bob'] },
hosts: {},
- acls: [{ action: 'accept', src: ['group:admin'], dst: ['*:*'] }],
- tagOwners: {},
+ acls: [
+ { action: 'accept', src: ['group:admin'], dst: ['*:*'] },
+ { action: 'accept', src: ['tag:server'], dst: ['tag:infra:22'] },
+ { action: 'accept', src: ['bob'], dst: ['tag:server:443'] },
+ ],
+ tagOwners: { 'tag:server': ['group:admin'], 'tag:infra': ['alice'] },
ssh: [],
});
diff --git a/e2e/navigation.spec.ts b/e2e/navigation.spec.ts
index d197bb5..69b0487 100644
--- a/e2e/navigation.spec.ts
+++ b/e2e/navigation.spec.ts
@@ -272,7 +272,7 @@ test.describe('direct URL access (no white screen)', () => {
await seedAuth(page);
});
- const routes = ['/', '/nodes/', '/users/', '/tags/', '/settings/', '/deploy/', '/routes/', '/acls/'];
+ const routes = ['/', '/nodes/', '/users/', '/tags/', '/settings/', '/deploy/', '/routes/', '/acls/', '/visualise/'];
for (const route of routes) {
test(`${route} renders content (not blank)`, async ({ page }) => {
diff --git a/e2e/visualise.spec.ts b/e2e/visualise.spec.ts
new file mode 100644
index 0000000..2d1591d
--- /dev/null
+++ b/e2e/visualise.spec.ts
@@ -0,0 +1,142 @@
+import { test, expect, type Page } from '@playwright/test';
+
+const MOCK_URL = 'http://localhost:8081';
+const API_KEY = 'test-api-key';
+
+async function seedAuth(page: Page) {
+ await page.goto('/');
+ await page.evaluate(
+ ([url, key]) => {
+ localStorage.setItem('apiUrl', JSON.stringify(url));
+ localStorage.setItem('apiKey', JSON.stringify(key));
+ localStorage.setItem(
+ 'apiKeyInfo',
+ JSON.stringify({
+ authorized: true,
+ expires: new Date(Date.now() + 86_400_000 * 90).toISOString(),
+ informedUnauthorized: false,
+ informedExpiringSoon: false,
+ }),
+ );
+ },
+ [MOCK_URL, API_KEY],
+ );
+ await page.reload();
+ await page.locator('[data-testid="app-shell"]').waitFor({ timeout: 10000 });
+}
+
+test.describe('visualise page', () => {
+ test.beforeEach(async ({ page }) => {
+ await seedAuth(page);
+ await page.goto('/visualise/');
+ // wait for SVG (policy must have loaded too)
+ await page.locator('[data-testid="visualise-svg"]').waitFor({ timeout: 10000 });
+ });
+
+ test('is reachable from the sidebar navigation', async ({ page }) => {
+ await page.goto('/');
+ const link = page.getByRole('link', { name: /visualise/i }).first();
+ await expect(link).toBeVisible({ timeout: 10000 });
+ await link.click();
+ await expect(page).toHaveURL(/\/visualise\/?/);
+ await expect(page.getByRole('img', { name: /acl node graph/i })).toBeVisible({
+ timeout: 10000,
+ });
+ });
+
+ test('shows an Experimental banner', async ({ page }) => {
+ await expect(page.locator('[data-testid="experimental-banner"]')).toBeVisible();
+ await expect(page.locator('[data-testid="experimental-banner"]')).toContainText(
+ /experimental/i,
+ );
+ });
+
+ test('renders a node per user, node, group, tag and the wildcard', async ({ page }) => {
+ const kinds = await page
+ .locator('[data-testid="graph-node"]')
+ .evaluateAll((els) => els.map((e) => (e as HTMLElement).dataset.nodeKind));
+ expect(kinds).toEqual(expect.arrayContaining(['user', 'node', 'group', 'tag', 'wildcard']));
+ });
+
+ test('renders ACL accept edges', async ({ page }) => {
+ await expect(page.locator('[data-testid="edge-acl-accept"]').first()).toBeVisible();
+ const count = await page.locator('[data-testid="edge-acl-accept"]').count();
+ expect(count).toBeGreaterThan(0);
+ });
+
+ test('search input filters nodes by label', async ({ page }) => {
+ const allCount = await page.locator('[data-testid="graph-node"]').count();
+ await page.locator('[data-testid="visualise-search"]').fill('alice');
+ // Give Svelte a tick to apply reactive updates
+ await expect
+ .poll(async () => await page.locator('[data-testid="graph-node"]').count())
+ .toBeLessThan(allCount);
+ // alice user should still be present
+ await expect(page.locator('[data-testid="graph-node"][data-node-id="user:alice"]'))
+ .toBeVisible();
+ });
+
+ test('kind toggle hides entities of that kind', async ({ page }) => {
+ await expect(
+ page.locator('[data-testid="graph-node"][data-node-kind="tag"]').first(),
+ ).toBeVisible();
+ await page.locator('[data-testid="kind-toggle-tag"]').uncheck();
+ await expect(page.locator('[data-testid="graph-node"][data-node-kind="tag"]')).toHaveCount(0);
+ });
+
+ test('relation toggle hides edges of that kind', async ({ page }) => {
+ await expect(page.locator('[data-testid="edge-acl-accept"]').first()).toBeVisible();
+ await page.locator('[data-testid="edge-toggle-acl-accept"]').uncheck();
+ await expect(page.locator('[data-testid="edge-acl-accept"]')).toHaveCount(0);
+ });
+
+ test('reset filters restores all entities and relations', async ({ page }) => {
+ await page.locator('[data-testid="kind-toggle-tag"]').uncheck();
+ await page.locator('[data-testid="edge-toggle-acl-accept"]').uncheck();
+ await page.locator('[data-testid="visualise-search"]').fill('zzzzz');
+ await expect(page.locator('[data-testid="visualise-empty"]')).toBeVisible();
+
+ await page.locator('[data-testid="visualise-reset"]').click();
+ await expect(page.locator('[data-testid="visualise-svg"]')).toBeVisible();
+ await expect(
+ page.locator('[data-testid="graph-node"][data-node-kind="tag"]').first(),
+ ).toBeVisible();
+ await expect(page.locator('[data-testid="edge-acl-accept"]').first()).toBeVisible();
+ });
+
+ test('clicking a node opens the details panel and highlights neighbours', async ({ page }) => {
+ // Before selection, no-selection hint should be visible
+ await expect(page.locator('[data-testid="visualise-no-selection"]')).toBeVisible();
+
+ // click alice
+ await page.locator('[data-testid="graph-node"][data-node-id="user:alice"]').click();
+ const details = page.locator('[data-testid="visualise-details"]');
+ await expect(details).toContainText('alice');
+ await expect(details.getByText('Connected to:')).toBeVisible();
+ // alice should be connected to at least one other entity (her laptop, her group, etc.)
+ const chips = page.locator('[data-testid="neighbour-chip"]');
+ await expect(chips.first()).toBeVisible();
+ expect(await chips.count()).toBeGreaterThan(0);
+ });
+
+ test('drill-down: clicking a neighbour chip changes selection', async ({ page }) => {
+ await page.locator('[data-testid="graph-node"][data-node-id="user:alice"]').click();
+ const firstChip = page.locator('[data-testid="neighbour-chip"]').first();
+ const chipText = (await firstChip.innerText()).trim();
+ await firstChip.click();
+ const details = page.locator('[data-testid="visualise-details"]');
+ await expect(details).toContainText(chipText);
+ });
+
+ test('clear selection button deselects', async ({ page }) => {
+ await page.locator('[data-testid="graph-node"][data-node-id="user:alice"]').click();
+ await expect(page.locator('[data-testid="visualise-clear-selection"]')).toBeVisible();
+ await page.locator('[data-testid="visualise-clear-selection"]').click();
+ await expect(page.locator('[data-testid="visualise-no-selection"]')).toBeVisible();
+ });
+
+ test('shows empty state when filters match nothing', async ({ page }) => {
+ await page.locator('[data-testid="visualise-search"]').fill('no-such-entity-xyz');
+ await expect(page.locator('[data-testid="visualise-empty"]')).toBeVisible();
+ });
+});
diff --git a/img/HA-Visualise-Filtered.png b/img/HA-Visualise-Filtered.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa03cf3ad1f8c74a087aff4774f017de9fd64b54
GIT binary patch
literal 257045
zcmeFYXIN8R*DeYopaP;Iy@{xRfPnPgR1~BrO0OcF5PAtDp`%h20qGzjASLwBBVB2s
zhnmnsP3Qqa$l=?2fA9N#`#Jy5pYv~B>zZ@TvBsS19%J0&ULOtgv>2{&T%(|%V0iKT
z$!iJ<>HrD~s)#F>F7A9?AC#k@xIyvaiTay>%&nHI&6ZC;%UOW01X6xsy)q?E_wqR#
z)A!5YBc7_Yw-#OIn!0VErN*sB*6@%Lzuw7C{fye;iu?Q}+pqTT4O8xz-@9|8TjaXw
zSCJcEZuIMfG_%T)=4LF-3G!Gp@e4K<;z!aL#m|n8gBwdqN`94;1c{oRKEC%n@s4`f
z<*T>;b#ZX{{r`RI-t!^NM0$q*81%nK^Mt>5`saMMdzza6uu)XqT}LDc;KOnMf}-GnW&4L?vW4Tz!?kxw zy%H0p^sK=F8=_`!ampSCMX&g2jOGd&sR!H{%r !r=ouiCg_ebuJG$4OqM6Mx;Q!&&{ok%Y zpVq_G3`O_#!^;Ib^P1JXr-#6UBsjj3SYa6zO!}k)@f(G^Mnz304L9Mt5ffJB%*FOD z1Aj2Rvc9cX=R&EG2&n)YGPj@8U%OLP$Mc<}oa5+~zVjQ(&{H@ 2=PFt^d<&H*kh$BdB>A^1-3}t?I9Q!!DJjVCY`ClP{tbNN@Lb6IH zWupXAr>}Q1HVC`8`Lh{+Af`N39d#A+g?pN2dlojKI;6WsO`aKo>`=?*<^)TZ1_Z3~ z7qP<=I3^l=?8~ebbDB2eBMTF9hODgKPkuHI<|Q4;mYI6sW1S6wnVT<7h4J+VpEL!I z_vu_&228^=Z#S-JV$+{`=L9&}Hre1Uy!r}KG3uu$xnTW_qpsq@*nEtlu@Yp45n6L+ z>=2$iRi>_!Wkj8&!_# fAbz<(l2P z{VC=rMgjAAZ!s-ZUo`;l8qfB|3fGX~p1I%l5ogeS+5jI6uA-~EHGzh1#|k{KhWxQP z&WIZK&w_5%0#eD#y>>MJnSnvohb~e9Jw@D5HI7~tLE<4{+wf_fC+bwR$NkxMgn*fu zsMh1fhh%J)KL$FPM?02YxfDMG4Bn1Y0g!U-O?J*=f?{1>EFI55Rl#%c@&H0BUjFP4 zVeTLa?+%|k0ssJ pg3oXq@88 zkNtD!<-wLFE7OMeyM_tmWi5U!@_wr#oI&|aCzba)l&_+vD6jTBkPtD~Xt*Y}zxD)7 zd(J1-6RW)6?w!!~$}9k1CMrKdV3%_5tznncV~>Oa1CG0!vJ5o^{;UR=2W80Is$t-e zTn9Vm`2Kkgs)yioQPsLmTUw66j*TYl8+b<5oiQB;i}Tjc0Og4-Ri;ww08~G=xgCQK z@&1{OfaQ2vR^wlzX&G_>L!E|&n4R&ZzX?t&EwUJRk%32NYtplM7^7GTx$)h^fd3#& zl|A5hYln@n%`U(gX)(lrFFd5XfInJB4oQcxMDX>T$E3lh_LzF-0VYY9614XfF`i4( zr9VhtX}?zyTg)*b)&M+p)C)$b %UZV!3c>?Ojg>g9(X^%laKi9jzB0{WDbP<#plWWe{FtS%I}|p15|!n zbjq|@S(Z8}tp i1=d`93@K~7|&&_bJjw(52>^1N>hdJebmGdiDh?*KL~ za3apS;%ITQl}DRl7_oBZQhUD*1lZA-pu}MXI?->UpQ>DU1vZ~gBP>;FQ>MTN7+%jY zBJ_Ak5dkKNS|g6MFii{b!ie*5{)F@2gH*JD*-6iF ~@I(-G+r<54*s{^4O~Cj_ydr@raPG>?gbUmgDrGl-k@IxW`2;|AhjRW||$n z#GjC}PCJ!9WW6kqd6MP{cY+0Yg4XvllYYbA!f#H5_um${N{n?gYPaX5!g9omqAD@S z!NgSA=^|r#z{uyIcdf4H{K$!Lv6|Whwx^2ibTGwTl0bIgUuF~rgju39x?NKm-<6 kmNQ zugZ5gT7w4f6Z*t~X1iOZwH*R@#WOL9clOvXX{ *)RWsS3wJ0$?Gs%5P>`UnT zO(&^;A4bfB<`bh gzj>|7JoiWN4YWv5$0bArg>cCxg Tp#;1c5ULZq8p~LIzvmqDyXFze|^9=Mc$hS95^0R+poub zolY})!uO{DWPc}JnxWic&E#w?zmJy7XN2|$;E?Ui3EGlHKnAT8 *&8aq->9Pk#eL+J3rLU%(mn6@clf9>)d0G`X&L^E z-WB-k(b1dgzC6>yx9#bUz(5LJ)orGDRi6Oj2XMl-4|7#Jsc@B<4HZ9P?k-o_ce{b~ z_)7(~463W8{F{0VmfldGB`^UUoYchg9g|ncquL74*`k*&89FvZ9)^$a{`N&7ou4w` zEDnA%; c#4!QOl!VzGU&UrB+PCj~UW!*DHjf@{1s~-VJdNr9WGXw`5ZvA{Iyenn&Rt;A z&jc;}7z_g1gg?h_2;i+%JVq!xW+sqne)H#!1NTOzYnBTQk5t{KGZor(>B_$~BR#P% z5l+3Yg5tRLk0kJ_*mNy9AE%yCS! _ouhw8lCSb%_AlBCjnBmv<(s7RMuvL-~4UXxjzrOUFG^jYE6>b9RlU9X-G)H;1 zOqBeu#->a0SPD)*dpQ~8(etIyScZ4B?ns?vnRiYl5bJEcJ7kGeko_*Lj{%eS)QQ{* zzvhQtkB+DM#j`aLu9UhAb-w7ZUCHcf{WU0E&1*Ug+2PC2fSg4|`YR22_S?fren$Y~ zt=iRT{cP{I$~DiiRpw#}`y<3tF4?8ZDSxEg_oZ%j!ai6qOIjFNpY)Tw9E#;_-0oeP z<~`kedUzMGG)Qh^$YGP-3F*T@ZHGrvp^|pJcTB+K8bh(x+U?_YxT+MkIOnCZ&-%Ed z<>~&Z|9GiQ{xk~)iW)tf@OzZujoOM|pyg6(R{am^Y)H3aLL(tem2zRB0V8U0=w)gD zx9+MNyCyB889^H?2{{60|J|QeEoFb;;_MDUkLvDKxO3AiOB%SFtdF~z=LD`Kce@zr z>a6L`)B`jbiCCDm_mc6TqQmnN+_jcyt|Kw)hShG^0%B9udvc}@Q0z7nVu?|yiQC}b zKWepfH7;}gZf`%8V)D6eVn}@JM~0&qIPfMpBWNZqpCi>t_3Tq2%lcg%R+3tzyv2T} zXu{(4;F*Xe#vQYb+?E7+Hg1CA>g=h3E9yq6wGfUOK&AC!vRl1Ybaq|#d~w)*e^uqs zT6WH3szIxoN*gtsCaby-f3Jptr`wh=A!0V&56;D=TV9J(DDxgzY@lNmv+O0WA}uQ$ zN5{t--c0})`9Bh7@DVS f23I&W*B)s)p;XuFA0MPvb!bMTu`>5H;mDhi- zm{zghviuZH%nX>OG-qnAC<8C=vSuPuW9m+4eU0ZDYhD;CDjLDo-CTj#iP}TX3G{^N zA~ertG%UwDaR1Y=Kz2l-T@(Vp2eT4i3{7YaIxFI{dyo}iJ~NeS`Pe?dys|w0`kJam zv-C7g9o*Nal%R}Qor+GW Hk3R+B%_>^GyENg- z!wq=q)EwxaZ|WTa*$Rj4FBUV$p|iw6mBT+DJ7^DiRdC kX(pdo)^iXJUJ`)Qq-S+%Q(u!a1B?fMt&?f_rYoBVZIFH~p+j!?3e z{THp6zzrv~E*)`Az~5?Wnq%^SITeJ~GvMsdQSbM>Le0Of0}sKZ!*Vn7MXfE?pPyIP z(5tvJbh3QVvC(T~iBa5?0Zkun_0zIQq2d%%XM;MjxZc|$!=16Fnz|Ry#z++EW$lvI zwMO}3;-!TrP%lcsoe`e5&nq_5GJr1i`xx&5+^Y+WYBgU?EVJ(*v2rO))Vgdnsgkb% zc46SPy69BdoYz_VxbuY;A4;v6$?%?3tx_jW?_=j4kL8}w=*+-boH=J+E@1XA7V1$$ z44IMyf*eYKl^<+Kv-r%zU11je#^v VK0dn6jU{=d97FUVCBWXnEM?#Lkq|rh8RxrI<2qF2miE2v^r)&z9Vx;!%5_m z5g6L1PmBkAR=jR~vbv8HQ{LMNC+RbxKUSVR!?(JMg7dw-a{x__PLsC8I+Uz5IbzPQ zBMMB+uwLJaO>TNyVsySkG$x*vH*H(R{RA(o opuJ!jTN{UDu4!A4RppfZO2$S$^GC@8?WGqhmVI zo#S-9xv?H#>sh7_u2k_m!JryWf4X&EIfJDgye@`BEcBmV55_Li;y{h;>VAU_hv@qZ zq7464a0gDyTW4#EF(@vK@%OyBIh{)yRB|sx#+S2mM*(*$uZEr{4Yus;go?IIPpAYK zm=|&k3^E8SD$Hn;#By !X*$nEX>S4H{%d;Z< zOVyuCt(*8qY#%q`nJPd}3!fYoITN?HNt XbO3|tE$Qmk z;K8Q^c#h{3L&AX7@!ofN6t_yLzWg9Z7$hhgytyAL)=xDmPzyBkz$W|qzif5uj*YoU z%tm^CLYLB=nI>jEJHUPa$u_#TAI%)1D=G!xZ~S>GE(n2fe@aC~#X>T%R<+^e2n&IG z%+@QnLg$!U>ZVo~w6I*BlR>Q~aeXp?jb?J_Mg5HbiBU!TIPxlcUS=bD!NYF?0CSR3 zTaVxOOrtGFQAcU@m?6ukIB1VbMpL7nyz`zk<{K^tW)An8R)wDO7jm`Wk{hpq)@*wY zHc@MDyfDhh<4%bVma`o?Ycet@JNW2tLoL)BchZIAv6vX2P&^WI+HC5pXx%)oaI=fS z?E wNS2I^ )jWq0h;aYyhMlMW!;dkPV2%3 fEQNl;6wBMd94WI z>t@vfd0dOU63$#!xznwLsZ?F?TF0oP;`=_{Z;(Z*(HX5c?m1XoOwD%CN#x-UM0v<< zj+_4iP&N#EYA2lysJW4Y&45Rr?GVFu{wSPOE#w So3nFY*5e`_iUpm905`e$M#>YNNgG|trLE2#9 zRZ-Jw=dc)=>B`0Rf~;^x4m6?+d?sFRhx;-vKFFQ8ev#)rrLA|zTSx+5U_bEdDL9PC zS-(H;mCo3ye{Igo?OzQZ>a+#G`vc#3V$n?bj2mX0;P>WnG5$UiWe=2XIJEx*<}Pn< z&$QHR=!?5i9B^g&?GX{aa|un2GO9a6OSP)BTQy4nxCIIg!$+$Ga3S_F`z(-?Pr&uN zDx<@@-8+_zsBfM@&D)g%th$rl@0U<@>*JfT)hggF1av{z*b *vGIwdm`yj-fU&cs%OkCcV@xBDXwJH)_{G}Jv}+@ybR7YYp8`*uO_di{<_O5gw; zG4rN-P#>T-z2VTqiU&osFOLr#FIsp&@cR7UO`AWh o2jHL- zu%%U)B^Pgvlf)gAAS(Sfx=_kb#Qa1ok6*?XVKe3=^7to?A1apJ`d=LapV74shUE>U zJ N-6kUHTZxf+UuOke?ZX@Po-(!yro0S ;6!;S(?9xv7xCuK!hRg1hN?UC}4FmuNVvE%iV zoW`?tTi&MNTO#TEPn5L*=EQH6OEmD>xJkl?U6h6Ac5F1`H^1dSb 2X<2KbGF$5t6}s^1NK6%FRcOHKe_2jI1Z2ZrmG3T(OXwFD1nB z`tB^xK|PjYc~w+wH$uY|QkC~QT(Q58or!VJjsBxOKNrbe=h|20cF_YR5@vWnSI!qY zmmreZDaY(AEZKsvku%}%wuM3a{~ck41d=;)RIstr9R<)E(i^`?n76{O` WMf JRbFtHeL5DoF!jAlEG7%d0yNuBtP6+%znpPe_rF@cZB(oXHs zh@&}1XdD!x${b9tO=vtzD^xG3I2nK&HP^e(Vh{|CSE1@!0tzg%=M-qWOC9k_)i<8Q z$dgO@Q><4V2KeEFzdn^sHeqsK*)htU)rdhzKMNt?nS hS zeN1|`<-7Bj)rv5We3ZtuH35%P3fSnko`ZHw_24B-bIR>HC&TsS_V+kjPunE2l*hJs zqNJ;VO$iUslT3QkignlNr-}U?e?{K<*A^+93^#!%i )at&?r!Tmc+_$>sVUGx>_C;N2A{^p9BKA^V$i`3m{!!gcdT2GXGx4@ zTW0&qzF5dv4U_8Dc^2e^+ug}!qJSOKupE+X%-e)4;tS%D^~K?^U~D?wu=fu;bi2T+ zXxq{)l7Md3?l?cn+IzZ*QSNwhUFUkeTlb2ubwYe#g3?TJhY9^O{(Ijb_x|z;p6!AF zA;PS{oy6;GMGBttlS%sAQk#-m%}XImg(|XZ%|MI5?)p<$ctZXA?x#Uw8J-hON2*S} z3|T#yAaPSl8r{~N-hG-m--!z<8;X~gJyKb3KOMeGD?QUwtW`JXi&IqxLa4F68>)!Piw$#A??;Z9wMgUyoXhv*xQ3_Id+7j_d^*WiyOf6opV~=eN_hT z$7}nnkXswJ9NTol6W6&%G=9|F@SAJ}v}f~U2Z8H?yQ bU}vNc`k3b2{k=Z=eVuKGE6S3*)C4`;q``A}j|Hjv9%-E( z&g7+7pK5@KK6IC^jm?j%wj7NE=ZL$8j2okMqW3&@PB|?xh?8Nl;MIEWCVa^rtKa66 zu*=ZxA(`DVx qEaBTb0vjTLEO zqjIy8MV(rK4s>1LMJ>Xv;Nt u0d#|jdTg~w#b@mpai#qxd*m4|fsCK!hs*tT{D*pp zC;X5T9k7xdH{)hEO$5M6M*uL0FkMHGF$Yrb7*yN4;Xtm2s0>(3t8+(`F0jR(7B>qw zx_NM;xneOHcs}3Oa>V8N2Lfe;ChZIX&mGV4#=)yw{C-m--h%&7K;`z>8e&(|`D~Up zvobKj-utWY((N=wp;(C-_a Q2vl-<<%ND@4{sBOEQtt{rED zPDiUAPqr(;c@+ 2|Etvxu3jb2{Rt&Dd!zWMn!xs})~uywqr3f3 z@-AZ^iYM?-HePvWdupPy(c>Rh-chHAwV-{G;Yj7({t*Ct%3-WLJc@op)k6)Vu1J_G z*9RU8N2Abd7ESI;!kaR!$9p+eCcC{Ez?Gz<^CmmS8Q19Tpw-cTs=|sQ3Ui1{lKUxT zR!s|WvW@7;u?zhTd>+OH0we+8mU!;EO=Tw=;=lA)|4{5)9LfasggN*0|EzNUw@mFH zzEBVQ|CMq7?+%1@A&{{WHll2HW!pwPh7~j$$PBFfVZg7wvVvs5rcujWF`Y&x#Ul*2 z5~W^3sHeN<3>ObMF180=Cr`5>+^GpzJMu4v90lYy0SxSmk;-9rd4hS8%LrjmtDYs= z9>gy+WACLnN`q~PTE$U{L`1FO)Q+%Pp2&oi2%Xd&h!kIUIDeOY=#@6Ym-99#iwazY z(IO@LBCUPMIX2^B+MjAr|A-U$ZccM9o!iFSu4=a6FgRr;FgvY(WM3SwGoIbNf`%uu zXBe6;^*S)y^HnEu2EP`j?oJ)pkaPX!{nAyi4UrQb^kt^>{AXFqi{mn!IXND`4>Bb{ zvNfadOQ{n%L{kG-&Fmn09QUT#>pmhd8pIhqHJt%DaAkXJ{P4MNv6-u7hNajzf;y*Z znmuEap;HY{RQX%fvr#M@Bid4mxuIUN6e$WV} zi#ajVuBP{N+4wGTS9^cViOY9^?Qejst8(P=1GX*fG|^^p_t5%B&-8mE6th7+uXNv7 z@@Rnl6Jrp~$vJHF#gJYmbpwakpYeWb<6cJnC!Fc!N-LwFJm;uBBg52 ZlMtFgH)|)y&xP^EH!~l|w3v2&l)NdF<9gM>v;0|N zk@1d+WlBS+kim0@fU(EQ#5b4;jK~tr7pU+&O=Oz+1WlY4xG5+3 d-=mHklZ4pdb zlYUbs6#B#1qL!NKo0_(eZcLTblYrci>O`4#-fPyO2XE)HZ)MIApNTqt8vCr(NUvkx zkV3x;7MvGamWVV^xK^NhMT@EQk4D$4M+R5utTp(U@wDKg9aiE%Zp5glLNQnVH3et! zpQ0l#U#f!q-k?SzJ~e8-8X{#o=P9RO@&yXI&`%o~v|qaW@TmFwdy?Kx^9HF3q%&;? z3B+@ZG5o&ec^ t5PlJt`B0MY=XHMM9GuYjr^!7l=W~V{j0)rA+PXD zJi%7KmoN{?OnOt6=>o=FYN!Kd$2{NgxUB9HIch+0rUVmsUh@whQLK)EQEJ>yguV3X zgIZRahwW+!no0$tu N*65aV_ZACpk5~92+kI{h3C2NCi=M-cmLC{cX0)#kC4vbC_@L!2LtY<4nubDO zP`y%_@aBU4{on}N{t6N^F&-;4E7bI2bgbDhubKB?q@DY*cN6go5yxR>kQy2A@S30% z_C09Mj`~!zA2;IQviON*J65plljP(td+jpnSuC#av9h9CZK$=_$)kQpsnZ58ql2$% z9k=%N-)+BVDo%YW%qAm${79EdL|j;bvQx9>4Ju$AT&t2&-Zi+WNh;=uJIJ6yu`J$p zH~8_QWQxI?s?A~N>NrpGL;8#j%DTCLCeB46yKDF5-u8*swdKkW#ZmZ!V|!i$brM#r z6ubg9Fe}h5;DHk5fye`Na`Fo!CxH5kVQq3fXtO4CtU!*+W%`~eOM`mLo4IH6L_SU8 zojSfR=}K2YO%w|fV{{WUe);%MSAY1lOngmH;&S@dn M-kT*9Zz&tRUQmPlq zf-ZCc2aFQjGU2x}zkt$*<089-<5xw8f3cRz+0s(z*4{w8En%*FB)IW(($3)T 4v^)-fa+89p5~n*1r(@hRx5#zO>LO<+NI?nlz6!(k0(-EO0Y zs}2t=g!8S8O3c$fV9%ZOo{pDTd4FPPdf}=@?Oa&n !a1{d5znEMJ6yDVR#`>b`O ~ssQ z)nsfqSG5XXIaD5Lys~c3Ep}`ov{`ywn>l*l2{pDdr`Uj5d4^kfU6_&ApT$4ecsl }x;>NE9yVFb{ceAmN14Zq@Iw%Qou8K2a; zJbcl^zKOgHBg@5&eE?o!+pygvP7QD%*i$5Z8?s*JNpXRHTvkPR{D|c&F3s+xKfE0Y zVJN!j4OkzZKc-Q3vfvD!*;wiebjv$z{9gO*bl3M_U70QudaXX~QunYXIM`cXQp32G zX2LvIn&-Lwr@SM*B+G9KY4CT8v1@zO4eB?Ebu Rt>QI?CWDXa=fI9yw^^#D0HL%8@~|^EXgrjThh1;E1Es>c=grm ziC20!`HvYl8-zFghPipvl-$31-Zs(X2j12aa7Xfbs5r<&=mwu82v9*T4OagiF5{I( ziTse2t^SIodrf`fDR(_Yisq##3+ac*$XkblB0kxjf=pG`I|6)}t;)x7H97j(ifOib zi_M`*zJVAP{ijX?m$Br<*E@9&uM~~F(pcT4g0j8{F?H}v^EWEwN`qC;Q+QK(`5Vkq zG?Zs-q`1YW<;lpQ1vj~E|Cl |fWr0A)ap}t`s_h-HQWBWvA$ ^J}ruQLZ=$!{6townhC*Pr$7PK;R zA5@YRzT9$}8y4y<5djJ+hpn*Z{}8&bcapM}M;&SCc`M8D<9$JGIezC9q04u#4IfkS z6{+zVX!9w&&1ZjZM6D1yvHs+Rw1(s?S3x)Xc-^<_z8oHJKD^fmG0;dcb7Ok=n2-6b z!5g)Lo4)E_6N>2G{f*vyo1UNI+Yy{5!u@x$lMtc3q$CA$Z#+@@Z5I}t2N=v(S2L76 z__J>VaZ(NYu1~4Qo*(<>Sz4LKOFmI)2#?{z4++|o lWEN{{TFXwq4Y;jJ&GzR0-UjCznDY>s}sn4(hkVtcOG*lNoGE7LwiA67NT z7F#CDY2##;!peS+8)i3TL9wezm(mn6b}dug4bX-&Sm?Ose5M_`pSx@(okJB9{w~p8 zX#iaF_iJR>5q$q4g2oj5YMMe2qe=1QdW`NX&9K^6j4@g-@{GsfBi>A);M)N ^)=93yk;h>Y@mK+W&D|?*jPbh^>R{}`>1tcF#B1y_w%a_BVT`gtU*&6 z4TcnbRgrS5Cx^?7@$0?QS-W?9tYN*|gLM&LpRw<_d0QcNx_C{zv@gts%CKJbbKZSQ z>!8m9o!h 9{)>0YX>K`VV5QN)y8DLK6LY9scA zi-4kvsRI@I`x!?>#EC^hE%iIbQ+cYYM6=zGAD&YlvVXV{nVGjM^5|vW$W`Ov4%<+r z3-2Zid<7d<-uSvxsS)I+!vzb;J>Be`HW>8&0k^cm%e;N%xW0I!FcfXlX}YGQd!;cP zU~6Png!^MeEPIbLJ~B7-p#;=iDI4iFdi`8z@FyM~W_?=WQs)AyuCo{~`N5u-`Sa^U zgf^IT6If|~`>jSOvs->p%bRiP0%o7;C BUM5LqAR6mHW(<3ojG_c>@PZ?%|^P?A7!B-W^d&8VmG0hGzEmMV+Rhg_L?BcNo?a zrn}h;HXe3Sh2BReSB3SchF;>S>CTI|7ZB2?VUY5=n}UOC4Xk1P>vF<4o7!|p=B52# zA}e#t(tq^o?Y;_V)ch)b{mZZYPTa$e8!5Gv9sC#ZM~?woo#-c5@yn1q(zRAkJaL@e zEm1&6sVI%k#pu#NXNB8Pu7iE#Z+K~`w!L5Ysz$DStn(tR?Yf )*)rro@>d{16ydw!$qvxYUz9c!B4q}M!jsK`Oq z-^EI|^V^0dM7rEPwrR^McX;epgV|>r-og2|Ww2*fPEOdvg0nQ+gVb_zXw!!fMWobb z+fclq$)3H3u4fbUyrvoh?*|LXr!mH2yp!pb_dQ{1dRk4b)H)CbD<k-Fo@^ 5jHX;e;t;|C+b@iF$=K z)%-fxHEt`BDf={lkL=068N?{}J>pP>S|b__%R8U?(rD?VraMWL7SBo&(;S4{e=guw z;N@dqD;AzJ{H=%kFm@#Z Vy!*JD%D!weDF1k z7WUH@Cwy=zx89#u*ZLCW-O}bM@hFOA_Rv=P6ult!Om%G+FUXDM;rZ8#!0QR99dEkj zKAWlDMEi3edeA_9_O9KA9gEyXulQgXo>!?lMCA(mYv+`uS#`{{{2y|f`9=g?ie&-$ zJ(eAS8Z7Ol;3vn+azGLMM~dHES6duJ_B_-QXqJ@RhhS}n4&5b=G(3*rZu?Kh!qzmK zE$HT1{D$uo7pZ;d@vRqk8ouOyn9G=ig|h2sNm9_=*4C?VNrP)E-1wMkq=5J^GNOGJ zx}R;hp8UaB(8&`q{a7z$_Y-kkJBl{{sOU4Ek3rnKR@=yS3TeV=#(pVN+w97U@@Fd3 zXZMv;JijmJ3VxzVd7bj`M&XuxI68;|oyL?YHBVENr|s~wIp~E?5`} 65pT>U|Y|03+f)PQH*xK z{A=cR@17aw*KsjvHpY_%TWMvhx(JGrzLe$>jj4B%y2#|NU{`wy#9RA52hRmjo9bw{ z=cchMKhG9th3mpzmPrk=I3$hVa~BqX>jV&xT46u1-vve+?ejvO@tQHdlX6nxD_j|` zc@$tcT6L{8$~v_&>%%=N+KsK2>Cl?R7RLH+y9L2#R24P9p5+Dq34itH74%9_v6|mT z(rvbad+9d7<}fok*Al&V!t+N&v6(71hDgY~bf1}mymi<8mt6UL`L!K*Hp9N#PfbaX zu4_+@E`_s1kL-?1g@0WoU;8eU7{WdD`WSLg;E#v_NeCQspo3+-6Hom8)mlTKalDmZ zkmLS&l*6~j#lKSwVrpi!EogvCci;hng*8RAKUSQGi7XmuZO+-}>$5M3PQ@+UK8x3jy-L^8nm5h%Y7^Rp7Su?_?46eN~4_jk-LQX zxcw*PXC(=MV@R{O*?rBZlh@}I_kFA_iq;dnxI2w>bAO?Qw<|Z=%VIyApMKCt*N{p# zc&ad$mq-Cc1_LLnCdp5SKbmD|_nA3WjHS+_zUbGmy!o*UfBNP}t+-8)uI9$WHl|hK z)0*$ff{xn$oy^~&-p|dQO{ftz_5_%dSGvu01%b)b_I-OPs4p~ugy=e?x`f!a-!Y$) zz?<4OmgzfOWd>qjCzxkaN(apYHRQsZ+lz}^LJZAO7FG+Ckqi%a3{={wBzO!%X|;DJ zZ|KkW*|?doXirlZnZ`UV*PwqWO<}8DOKacuiT6pYK)a15{oW*vYj#@|i^+}oHdZ=N z2p>n^!}gDgKdVaD^-PNdg#m)sMUuZyse9?$6v+H4tzufR=m^d$-4jcs2~E$-mAhJG z%AQ(lYwGl-&W$CeknxHb&DiAw2I^;eBBPn#*%%IAr%mG@)7*DEvM OngmDi%)Mvf_YpLieNhf6aKy4ZeOBk2++c1-NRzQf+09UcUBR*Z2n{aZU33$Mod!*~Vkf26 zAQp~&>P}{{ld8~rdoe5D_m?uXVi7@+@=l5ZFN2jb^oga(_WU9IU5n~OY^dxq1V<6a z+U4Y7O>6W{n4;UM;vzDN1MDnl;)g>x+-~QG0;w)eryMW4g|6TuD)BfW1WoL4BC|Y| zjcb~N_`8_>2ZEhW;x%MzmVEW2`gS&khppkAP9C*E)~{A 31aAD8;NJ(2!i@M zDTB-_Y1BSRF<1@HSQ;123$M$+qJ9c|CBZ?V%(3%`aj$G=qJNK#;Va?D0?WMePRit9 zR$|XGTOd)4YM4q7f|SqlzqOX6CE+NZE@^Y^H(~g=*?#Z_Y`E%o41EXD1Y}uF;WBr5 z U^=H}a1Y$VL4c<#6(w+OID1v$xNzZ)ep!k<_lT2hr_D z`?B9xXOC2U{ YJKu7S`*Ty?P${%ZwhL_S@4wJc&b!^&w+o_~z_+fetpMBkz z=*QaV#hMS*rkwpSoTZK=Z&+3(Zq?MQ-4x*LWt;t1Yp--jO#(Lh3+vhIV^hnlrc+>4 z9WDB@Zx<+0cLSNS^j^aO9CFXB3t;w#jwdTFz?RNnx`t) LUl5Xy}@{Pyhy9E+ss?v JZIYn z=#$|1{;K;~vC(kW&5gs<=l{(Gd=rZqyYWKKL`IBoKGYn)Z0ET99zpYEC`<{;I&)3* zh?)3!?fAM$-Q5(*f@5g>FooG>RC{#F07u-w*Z3F!-!o0|ZMVwkrAv_whBWtsUqVw~ zU30J>Hu5m4D36i@Ff*i{v8g=zyYKRLS(5oIFARIz=#gto63p#^aPO-(!)rRiLG`}~ zzly&H0%gHMKNDH#q*tON0_j>=rHtLq$IXXxTvlarC5qm4$F0#eusm@sicA@GInmxn zi(5x)_qqWRnvp;P1B{;D?8<9&on$H7YO6W#oay;B!0J;z$22$B)DF=nFJ?pUmJF#V{wk za1mtdsmcjwWlS$S(r4aJ!!AH*jriaXZ)h<4a_d#iz(0Y=Da;#S*{6P_@>Up2K 7Qdb!+kgu7CeTl@;?A0R+8nf<~hIO#( zvao*~R%_z2dGr2>rmY|anEgz`V;e>BDwZaPrj;IoOgpABWPQ`+B>vz-St8cw6S~J# z?UNTjj>I9ZU~?nCZLd_Fm*K#^LhT~1ke^1$T9{1pv3}}x{wn`0{7`~JaNw*}sxB07 zm1ijb()fu$)H^BhTF2YqJA~{9$rn=)^kwc07nz54lF^)cK8eFi7;g8b+bMB8=V+ts ztptZp@a2n7qB%MAj9=vRG23iV&lNG1E;fb>IKRSp@_15YFlgEU!oYHTP8ZW$aAA)( zl`PEr_vAG+tnCj2KN?0EK~5}7yc;rKbb;JjmcjZ@R^>Sdp6oyvE+P~1(4?V@X8Vbe zlKsWgDHH?)azv<<3};LGfB)ICi@z+|>GVh98I_oUS=hVc$MwLl=BMum+9R{>Nr>FL z8}{5N_ulw(FC)5#2nLF$nKjY p7H-}y3CBf?#(lIIi36+X^uM)`D) zFTT)lTqiVB?N+4Et%XjdU9y@H?INd!u|eW93!xOYZ*WQM)nz{sPHiD=Gs!Tf;!8f+ zor-m1Y;j4;4@%CfjIIVV2u19FH>ZSpd>H8tOs7-h<`}vP7868J<*_H4-dGhCOb@*@ z5aNtO<&Hc)m7o@WyNoi({r>o2?QHGDv_{;UmFNVHb!yLgu<-<@IFYvf8|C0U?6^zCH1!Ci_xBNgiiOyYuf+l7s}jc;Y)<# zHO|qBs29S2I1t8^lP9E5pD!{->tA+lMK*Rk(pG*Z6h|^={tY;`9W!_M!MR@!=JIh0 zdGCZ^Pu!SjigK~hT8=X9yLjEt!l*QiRBSUy5pCnpLV9#FB`=lrj@mIf6YFV}{+m|) zT~n7arI*Iu*P22`b5NgVt;0E2bM7n+BlYqJU&Qy+@j01zP F_-ng3MUayv}^F4=&7B5WQJ<}_D_O=bk zgktRkFLwdOu pY}t@u3zamU z0oiB*O&IBSXVgz Vd@O6b?d0v-NAONmp$#TsX?98q@bA%wr^`Msoj$Jw+qd4H|p=tbz2Ac8cZP z!!5^301D*ds9 m3Uzp>E5xuG&SEntnADYB;hZg9|rW#PI_B3O)ngt3_S20Mx)(`0@9 zgRdzr=Ghwlh2dZ7Xe)s#CgNX)mwM8!3cLg%e{-tgzn!nE8y^ff2Fcm8o+ZoV9+* z-8h(nBKr{|Bx8v-Gl&AHy{mq0Cvf2d_kLX@&~otZY^2lzfBej!0F*+P9j_H+Nk_^5 zEcUzzimY!YX8>h-W>LJgz;~gY*d!7wft^-%1yuQn3yF|Uw2+SiQ1a5=mTo=;S&fB% z@e&a6Nvdrz80C|xJ !AXDrx(vR&yOQ7`Q$p97rp&uJ^0l8vXs#ap(U zN8y3E!uluyKywT00BM#ZoS36$Hmm2ibv=zMm_*}eV6<7drT3e@KwOy8l9qEyg@y=6 zw5+`5)N-bapFvW 6Z(ckCF#}x9g{6rvzVS{i`MR47yF@sNvP-+WwR9#_J!dSv=;~ z_n#yW^UuUL`=)}NzPL2GQx$vLn0#9A>89J%X@9m&Yst|41OLSQM6Y3V1<7EymQu?` zcmD5jP#i5!@%+F! H%@mv(;NAS%?& H|U)20GI`nma-aI3{y+l7M@x#uqYn@SR3hHki^T(pZJ Os&d-n;XEQ`p|Cd#R!S2-k{2kVj5Riu+cWD3ze8}!UwMzcb- z>-VD892v|(am tFM`tp}wj9 Zr|pI9tk8Mko-uFOS4fhfuinc}c%WbT zfl`2 3bpSOM<`}f%6(cQXtD2#(Vtp5BeC &JAu}wmp zIO+(Yi|`)t450na_~kIyWN|+LkMnv(Roa{C#kH<=R@RSu^WN!39lHXkCR@Z6%|T>! zNFyfM@4@`<_mO)|$}+14PlRfzg*GUCHH&-SS=GXEcg8l|RpO)KxgLy$Ovg?L_k-O4 zCE-qT{4$&7P6$K1x`0ANeWJ1`XkAOV;B+YasHzgVAe1Eu6g$&%t8Noa%(>MVj4_** zcpGxQ&D4eazaW^1GyOOo$#+eRbS$CL!4rOVl}ZjCzfCswq%Q5 GKQHAgp;41Frvd1sK3eUWru%hD8 z%mF$XSpj{5Qe@Bg;o|KOrFf9ItR-0f{W-BK+v}*`(wkk0PY_)=>DWgJx~ROQ>g-u^ zFdZ)hUI)Znae_ h|(k=wQM`>=x;cq3@B4&_#dGFO>W>A) )%qMKdk7y}<+PEKh+@2fA8quKja)>q$KMT4WA z9w+yp*CerxmXG0>)Zo=JhG?% L~Pr$qZ^D~ak61)q#!AK_jeq> zlYK|ExkD|z=Ys+wjzo*)YX~vix+jETjuLXll2oJDrXtJcvXw&Z^X+uk*%7)cL GIJPCf-to%bV_pU5I~QzpCGJhb1roe0tyZ z>2Y9hBL5og!$#0kchLR5*y(q#W8bYH{>fS&l=p1=aW1aw!2oxZ&_qXW>qWrbe}$i0 zK?Ao8!iBq=?ePi7-UZpy*L%xzT*>|COn`@(rR%F30BM=Xp8cv9Zvcq)kxd?Rkj wdI4)>Tl|X?WgBS{uGD98I4$<$L YiQ}e$c*WmO4 zr)az6+djIkvhH+i0nAAyhRc&)VVvLruS4YAAm0r+1qr*ljx)F6G9gTJAAz30n68=s z2GWRu<9KD`Y{J0{(G5sWOMV->$<|=wFK;D~{tby}! 9Ca g-6J=9x(0M!&wB=_ zY@dyjlUo1tnv~7!KAxmC{ji*~f`ElHsqW=}>LuXmyi=q*B6wsV4kA6epJdwjzF8LZ z_2I<7iJaoV*!y;VP4i{erM`&-!A@D@gu48z>{-8!DAtei7Y@2P>STE98e+ZFMXfLb znRt?}-W_GkYtt?oLXFT_Cd~7HvCj)mYzYAb{;I$BM#z=lkqhu6Fo E^>Q1_yCkGD}5iqdRP|C*V@b(VOxp?0rO3{ zV~%Opa83K04^}lPWPn|If`gTfhyt_I1>1q=#E5bH3|Ly9ZK~*n;{~YNHJ2YCHQ(Cb z1Q9uVK+Qpl^4==6?rzJfzkq_5z|M6ft2mKGcoqJhVJCeG2>wYkMIXPZ137AhhK~H& zzG&_RC|5Uw*h~Lngpq?m)&iR^m3q&IbEdbc<OlQw{Av1YsZkxnljwEaY8nq|8+ z(^L7gdf!WA`P43_EmDyel4lT>Gy{|B{p$boMFYPy)HkbFOQ!=fz;Mu>Zj|lZDS7?e zCGGK5b`?%XUj_*_)+2H!A=UHeTlMMqD_%(a!cNLYsv_!EZ_ZW_g?nwrUq3+AU!_w( zT`vHt|DNoBat?nc3P$tE2unllzz^SSy!STty*|02uSpcUY8PGH{G8yP`ngpEXyqi2 zvi5}bQa=O$wH>(^(5Vzo3pN`q{vJ7iR?`l@!0g?A*DPTJYS2j7naZxfHY; )iz6q)nP_K=kYc-u<4Nj7tV!x0~w1T;swc#m3>fC83;i9Y~jJ5c?97`%{>vw{(y zc+i%-1>kv5xm^TX8UZhy4Xmg>5iP6`zJ)8Y;y;4NFgF9Oa_0W1u+s{-B9~4`fQcq% z9z~TbBR)~e^6E^WDMFSC3$N0Mx)f03k|C((pw5?B6e=Yhz eVfj0A~3ujPS@iKj( zuIjXh)fU6`XCSmAzMNXytRt`Zmp8Cj(EPTUs8U7ny}p}Jj*P0b `ykhVHpQ%aIyuk}2Al@yR$@HNs~h*e%gagbXq)(6u2yKwQfEuaa-fs}JeY}1-K z8kL7SUF;R*eGsk%_wsM7)oP;#jp7vL##W!hgb1{Z<$QS2!(c^Q;w1Crd-N6B6g^fn z*nZKMt;ua%;%!_V=Hpo{#oW*$&r%&$ajhw73FNEJv!KHjH}wo^EOegkj;9Ws#K4#P z{q%K?>b*NYP(iLN!r~}?cT5Ib6fc9#V~H+-waM?DNlZ6xCEK*fRU$s#06zx%okhs! zyD&qwWJS3vurP@@J QX zrwsnZgcXNrhp`2t7K59kHFBj`*{Bv_O!Rg#tEmQ_pxqGa!umu$P0D0s;O!`b3n;c< z(j)2WIGvPU6zU!7+jfHMr?iOuwkhL gWf>==
5S5j zAIKb~A}imx%#nV Y56tD>~{N2ZsGKaS_v`MRV5 zowex41vF08ZyBpO9G@`+K2 zGu49&q$&`_s6q2`DwLKd626Uf8i;0bbZ@c*`Vp6Y=6Ayq9yqW}C2WT3Pqe9wwkesC zrs8XcrHRoXF<3Zro{7SEHF@~&MJ`;gRIQ!2KttOPo^L(3Q+5B7#;XhWhZ8(@kxo?H zQz};U& h_^=V!%AC>M+*#IzM@N!BHrQ)Al=0ZZ2A2KTk6 z|9R~rUA2s|$9Q5aIiIdYJV5*_yWQJZ!68)05<69aGX|ZwN(aV;-0xMET-h4RjGvF_ zVK BcQf{NHTLb!{;d5RX;Tj!L+>vnkuX3^n7DP_@A7>5^Iqy7vu=MBxIXx_ zZ@bX{NSgKFSGhNml3s4ye`-~?k4|y44= 84<3o yrTka p!@NnyWr`$QvW}WcVmU^wtKaullMFKSsmYw3u^z}#Pd82li++5{*Q5A zLjsBB--VCC U73!>GAucpf{U?x=cpq)1G*%dyArBU%L;7{k*BLnpd>%4vUDA57La`kR zRmD9=nl_!Knq~zH<(~8qQ>BxD6x3D?6Fzt6T#N*AZ(=#}ScEW>KRx2R8@d*8#|6UF zIWbo)^jO%$5w3)pEzB>ySuG^Ck*ckRqzGYW-GvBSzZaCthuJ3mj21Q0-2Mn#M(*OV z+{-4=d#3f^;Wn0%R%_v}Vh@7TT|fkge9aP+lzTu^^4^X!vTB7MN8220P+aF5E=%ZE ztbbPa*_X`(KWJTnK6Swiu@1h^B<{$DumOivVldb-VJF|OEqs{ZaLx7G9bbsAz+G!~ zfP|K;LIR5Q;(fHoywL1H$0>_;Wcr|X73DYY)7#G%%;Jmv>&6joc}h0_rv>=FsbH3O z7sw_1A$FzoAw|h8kXZUe!x}GnWLSdp8%@l7Lju;4*b1Mms9ie2ji}01d6o0mDd~p9 z1poZnMHA)U6r}DnU~Z+-8A821%@J8Zng98_8CV2v@;8UxU?47_qkv|bg`re`=A$JK zMG3N$nU89MRJC-Y#tbTh;Z4t6!Ie95)1j})mpSA7udkB7y#s(36Fws4k`P`~ES9;~ zL*8ik8%*b_VM?PKV@#0#D@>8~(wsS>A{eR2x_6uzdCxqG a&>Q>c1nqjBl^4Ko<1Q$@K6;`}*CU%u z2DA1&C$(aog+uvQmLW$4m`K?lecexybaHcNoW*cNQ2!Rtzo@OVc16;q4^b&ULHGo{ zLWN0;L!XyKZfQyc1{`eOF;}PBPEvK^Ax*<;-ROp{T @6xWNM@#(%k9X|kQ8Fq^x_`+MKiA-E=u#wPbm|cB_BY66GAT+Sd17!V zn(s};Q}xK)(WX*Ip#G96t-c7?UY5TiJB+R_XGK+ S_OgiPxq a?q6tz|wJ5%q?p8 zZHdWu6Dr0X*}-fJ_&ymss49t7q809@G@+m$*CO8g&&)SlSMdj&(*cpP84~p|m{J{< z{wK@H^o&L5zK +`FZg5d&zBS0_RDRIKfD$_cZ^bhcNsr(7CxWzA2+17u2q`eL;}n6=2P~~+)wX+ zy5%kU^judLJ{+Vd7W}K$ED+sl@l*Xb@9?wW-^7~cnfJi8X6M;Cff#t*_O}D={W W?1XtRb20Va>YheoNp0k&Jg6yEl0Tc1$>Rdc`0KO5` j!gmeC}1$h zsbBcyXds~C!yw7~;he2QqYszQ$^qB)75R>-J5L3c5 RX-nfidhaw&h6N15> z=24ZTzw`h4)!Nl&o=0FXM4l%yX)!zWZB|7dm{Knmi80F4TF1l&QQ+e}^6fw~d5pSe z4A46!N6q*Flst54CH{{PsuubzWnxxs3hU=#j_8fh>k!hm@ljlE1ysv9u{KfQC9P_3 z?2&_s*^u1w>2QeuS{lWJ>O<##5CR11$>?sg)I-lAQ3dZ5Nj3O@2M~ap0L=D5FyvKT z=yS-^fctnD2oSYbID4YWK#82e4hn7ZhJ`ic;B1WM5TrrAb8F-t8V(IXJCiT5Gf0-s z=zv0Q&GG$%V>f7n=D)_Cm7g4Ae$=J({lYlFwM^0dV3ARnFrjI58L{M)cboaB=`Mip z1bh eu8)40@=44Zn`{@XXq(WG1jnY@r>8+ ztal4v=DQbzA1;#W??yH2BkbHqnWTRE?HBhgtLjJv1mFcPDt;BcKRFT3eK+>$IUMJ` zSo@K`&&AlAy^ziiCnt)2Jq2eFvAabcp4BB=(0uTjgzrf7f1PXDH|q`~8bKIm0)Zo~ zrzWjy4&LUz?rTx%cH6OoJoPWnpJ=>(f2tXB5xe-cDAwD`_KL8qXfAp7d%btf_p-V^ zqfH$Mi|!`pI5z%^>JqVr;2?VC?1FI*DgjOO4`mO#){tSejwAyF65as0S|bzlo|7#w zR6=MX6v@3vu8WEq=bWb?YrtxfD)Y+|wlI+}c9fy!)3BStxD(Y{0@ow=HY&I=B=!5e zRR*Qv|C2u3)cVsFIbDdx^ZYv}8e3hUrO`Zi;FEOa*X@p0x?r&QcDh|8o8yXa7~Nb4 zM{{nR0*0ulEX`y}5$DNi`?piA_^9M=jBiW%HPb0if$<=oxp1x_`w`UDlF>5a2Oj`! zon|ZAqg^sm+Lw08VHAYX?s+parOnN2pdxo$V=)VdQ~O$(oV=wOwns`2?bGgE*_&1K zp>j-;+$$W}u#5-gu=$Htk2-{Dn_)0=U~Rf4wH1uSkA>#(TfG|JCxZhlODnEM9sKmQ zDpta-l7nxQlwo+sRJWwaS*Kmte4BaK$Or{#3_;N!S3rf#ukk@_83G=E6u^$Xbo{X! zV@0Y6o qN9=OHqBLypUo?2o5#@XbBNBHxMF(0vX_nd z zn>RKaX^I@z+#(O z!hS#w){XV8C`|e)!LAUV0)#*sx+Ktr?Rmh<4;W+x(;Gp|v|r}=xp&yU2$Rkt7El1E z{ALWvNlKA*0JfMwxp~5%ULF4HoS-FMqjX1&UwE;@95o`K^?L~MZb|&Cumb8~=7|0l zNnT}J=7;9=DyCTrJuZg+8 T~F9g(0DJ0*VXA>#ULwNQe(~d9loC zD#$lXOiqzbRq#OuRkWsr)bGtUI4Q*7-qS`U6}T2^^;3#?ahZ;V<4mgG>i~O-c+kWV ziCjX`ptQCXK#}0jVWoo`9`5LNY1m;n2gD)hJxCJu1!@VYQ35(DBIpmuTmfWNnCZl2 zE^4tV)Edbxzp~x0x48w7eU_8k>8AY=Y!j?MvdSxp-m9{{nGFxq>nhVjw#`M!81j<# z)#}O0PE}8-i7a|kKPT0HCDUms79jn5aZL$T6#Z`GbLE5NL*ag5(B iGyf~gF&|iV#9nD%m}qSjtieq>f7Oc` z8p!4g-9bV!Do#NQYvL`4ZAw+lr1PEs>`EVnXd;l(o>d;8pf|RUU?Kb`v(DldNeq>6 z>*U;bkPF0k%Vx41wP%aN|IP<{>Oh~Bv~PK(13t%U`o!P0{Aybo ueGk7Pk0;Bvq>{Yuth`l^9=;Vn z_L02o4oH;f@q0R=a_jA>ze@RQKTN*8zb&jn`Ca0_j|43{aEjT CIBIv~#(L_Cf9_~X9Wm&^I+_q69-SO$zXa#+5TOl_Wt?;IY{9g$T%DEL14%dn~| zY$P@9_;p0Ecc| y zFe!fep4HG6PQ&=JP&V9W6jKUcl`S0#gj 42J@(aXOFx-IGv zxqY{wCZ`x~BzRDSc24G-(1nz~#}sGN*g`mR#5cNOh5277E%pv?N~osi4OJXeTJer* z(#hNMG9l9>0;RRg^Xn73V{N gt;sc4#--mj!SAMawR#KgjNM{U zJfSx~g6{gsL?A66*L=c-1dwLGRyt>Vro&UHq8>1g()7n$vQ|11%j7Yi6ZsIq&)d;q zbN|rAsBnGaQibbbQz|07Ozm_Z{PR>2t>EG0PgWx3H>WQ%`U0+4Q!XKfCd~-5gDW*< z(J2WWgeS U=(R=8L&57uL3PkDu75;ZK)AO3sJ#Dz79&3zSW!re$rzGdH& z)`Wrw3qXpIf#XIea5|Rlmy%#b;6&Im(N?|S2Op4HMI%7IzRsK#9Y<)?xWEc*I6LJ7 zF*IU6tEru{8K&P73T%dOF)|{`j67<>&m7cKH(4mxp j<@LJB-pFvh?y=r?fI-5HVqM$2{j`~3&g;{iUKXj&rx*22jJ8HP& zKff}7lAd^(#Qfr94yv^h2!Wf4B9P>n 4#EU2|uMM~WLja`v@TK$h z#P;zp&es2z$*NW{s)+CTl$_BooS+iFlLQOH-N||~0rP3H$et5t%ajywy5eVg+Dee7 zcwiE0SKP9W7p+)DKUvg(BG{2X0gfD7jqLdfAn)$PTPAAmFnxvSrw%_5q9XPS73u(R zE=nSa7gF^ jVe1Jv{!I)&pSQcnSu9Gd?M z@YUiP7LN3ZuYZp&WB9~J{jQ-nQB1R{N4XaiM)WSA+>6fq>G$Dh@#{&U;ac}CKsO*7 zWP<5dq-Uy|Ey4)jFmH*YA8IVXWT}Rn3Lq>hFi7P{dxXeuUWIY}y36J;RHrCd`mG$# zo6tn0h~;xc`CayK4ES@+njH)RiB>Cl4bJ?|;Fr2 =&Acf5njx?%7<5mx%X{S|?5-zH+Vh9LA z5Zer8-e^>|#cG&k15kf7BTdQ~Z8Zb?FRYaum=1c%iai2*g|Mjx(@Ft4r}WnrYB5hS zeq5BYW!Sn})}efHx{fmJ39PM3oqB$A`QpmNJ(rfFURA-}0XKG`WhR-Qqx>)(=BIiN zM5fdhe15^BFAYOPIHe9HwhoB!>_45dn0Gu@4<0W(yZ*)F{t EVu>ZhZlBVWr?b$++*+j5OsM^5F0S(lQI*|2z+O%H|O z;+yda?=CD2dkPkH9(+obX#QL&_!k1fxBcN>xYxgNzDr%A^bu9eg7zf+U#S{Vy1N)9 zW*hL4rTrbaD%5{9Q~s8#{Sa8i&Uc=C`^x)p{olo(!uijc?)aD#zR+xGmTHi~yfq50 z5X0B1w3;ypH_pV^mRfp~f;wL*CdTe-3$uDeZV}uttH^8Sq>$!APbey$aM9Do3&tOb zAPtNNTM`33+NiqB428;tuEvAmvo*JWp^s-$?%mIh|Ng!p=8lnl6Y#pS4REHZaCgPK zWC;MElY4CEFLJ6s^6jn70?_G-zl(p55#rIb!E=#gI(CpqHytO;a%xIbDlMQF7mWP^ z7pp+xq=C`2@HJRQgsExpLKWUZMvRXiS+3VvoTByGeqY7L0W)0nsl&b+z|R} HHzW(j(@BhT8 zaSP%%0b+K=4zR|H5@vS?Ni(a(7|AOi!!=9{W8HiI2M)^sF(}FNlr3S(9 kU%H zhY|rwpv9#Ov+X$lOVy(U1|}ZfK*goTSP?vf3WNT@)Cp2u nTVN zv3HF;*zCp6fya2(!?G1Vfac^Kjk}1W`g{DmMmoC_u5l0jhxHm`o;TUNT2IXznerGj znnLO0Rz@7 1av0(uX84kv+Q*vdiAswJ=ec=g*#-ZzJGL;sRImuPtZkCN2JGk>^%+=@edpH z0=g5Sf>e@5Ve7GbpNPtyZWX((zD TcM 1O+U*gf{E?oUU3V74Ot_M#s530jsRg%ZlNDz_2pnXx3{o*FETSIBVC_P76S@AA$ zb#DYO^L&BVOcrtw6^t_L-F1(N+>JW`as;v^vl7DJi5<-X2~M4>#ah{zVqIdCg_(2c zYv}>5=*xc8AfW?&h z5WLw87*=ayP~e3e>oO#aDxCxD zF@JzG>}bgOrshDLK+#?rY9)~D(*qo`%~DlE;5%T*YlA2v`hnl$6;BJ^NUDTo5UIJQ z^Ed0Ujj90H%Qs^XqxsevzQ{cve*WeJb0(K7us2}et%9NMT!P@mCOK&)`7^+%oTDX+ z>E!$LSmj}=N!$0|kZd^1e3UROX$AzZ`#zX1x@d9uI(O7*0bMsp^Q0zHfE3B Gof*d?8X0yc3#p@}H!)Hgg zlap-hti**+1|A4gdc8~Is3cOv$^xYwW!JB4jgM7>$_wa(rQ2iCsg<@H4$reKM0=yh zwtK&Y%2^KylnCIDa+Qge3L*%x2Qs0`D^R<+YL`reGxiEr`vl2UFY#qX_Gi+|ipYHu z7uda7tBeWvOkoQy!NGZ~ M2A@OZWV12X0h zziH4 3@xEXPE0|;c72w~I}P6i#!_VmOcbsr&oP2R|iY+>qYY(>-6+nRsa zvK*qF^;eNi0Qh0*ro1deSyV>5?J9^ZOQ0EwYSEed&AQv6p*21&J?mF>Y#p81g!czg zQJjgct={TKK-(2Jr!L^A5c@CB#yoxo$`ad84z9q@lCHG;N0je-Z #YEe#9ntK4 yD=3SgSty@Rjx(sCdan7_r;cqChOu7VHzX^54) zZ 6$Y^e7L@$(qRe4NE8!^Bl(q<7NFRmVRU^P xtKpmlliHM1Eq4Z`LND4c&%xkPO>zE@9hV5J23cWSr3}nt^2puueA-ae**o8ufAo zhHkXyH05zf{Nm<&qC+h}aC0A`C=uQIRRqkGNJaXa0ax~#ih83rBCg&1ea1L0LE8)= zai<$fwVv`ed;NkxsQ|X{HnEJ+*T7%;soJ}bBy16c8r4rAE0-kOF_190&ek}JGlSox zubzvJezNJdB@Y)?v53!*vS64fe*zIsj86w&IC-QUS*2iNr&||C%(knGy!P;OP~TM@ zb3EjL*9sc<1=~CPRy`!Gv4>~t!`4V)K5T-Sd(va~<+{ej6fH}rYZGqj#*vjqot?PG zt;vac5Gjn{$unpbcF1_n-H+DV6m_l3Ske0+rwsXllJeyDKGTbGw+c>tmIaQAP83rn z2-zi2!F|!Ob}Lq$U}z1x_musUBPh(!2IYx&lKc}gi|&6m#%QCAllVzmLh{-SrLEEt ziq4)r!t?{OLaNSKBM{u7b$sa}~aO50lA#%1+ zi9S}-r0?*k@6(Fj$&EPPwWVjT6{fqzGEV#fHf?nopeK7;bfpyYd7EoM^R%9^DE>3$ zX9j0ijoGNR(+{1ZH$SEICEvvb#&6M>l6o8M=yFd5B$c@=;Ou{|1cR2yj6YO{ZWD+6 zbefnT2Ar5Focf
QpZ z4FnF;?= Ialr#3S(5=!EcN{z(2UA>H-R z6AVr?O$I@?6y3*H02fBCb7c6pm-xRhAROcq0HXq*E|sh}&K+ APq|-f*%Uu}Yna3I-R;dHd8> zl-4Ytc XkSbxOMpD{lKS8bZdpET zfFC{+sx%)=Lgxp3`OLU$x~x4K{Q%oBW*a_q$0p?wr5eO3H=DcpRxY&2n*lL*8ykxo zT2>}k!m!KQNZ76{0+K @g+iRw_FzE8;R-8 z{np5RTbE<>*jiA(cEdZ8IsVCP{~-#p @|BsP!Q_o$sQQjBPa6|j?fS2*CBRB_;8ViG;M*V21BpU1V z#JN}R`+gfG)dTC2HhW50=Id}BgS7b~y!8t6hx5JuI>f=KPsKd@riC*9S*dWbWYX!4 zw{|!WY#XziB+&Qig!RgaVpZOm7TZm_s>1u2tn0>H+pe-dp1>ixJdcQn`~VCbUG#!G ze#m5(q*(X%Z_VJH`-H9^&kCpf&FWKI`um(GXQPSbdbjF^F*Nn3mH2FPhoP5=iCh~8 z6(FKPPduIQ_VV9?uxs1sCkP$BIPM|4P_WKP+P5|OBcgW*Vuto(f#~C}r~c6&IXTYL zPYiQ82du4m;?G~g`htkOkL6-`WH;-3#m!OP%$|^}01KU}FP);V% g>Z&b}a( zWO`yZ7aSb;BWsM-)0ahP=f(t4bQp*jgO?Z;Zjf}0M_+m6U?j*Lrv1R5_WQ*JO3iI> z)A~4gOV6 nm$P*v7f*w9zH^0@W-j&A7w-&VQ;`#GIEOhLa<-yNVQz8# zN9J%=knE|Oq`a)}&$%>} E}Vwr+N8IhzGQTECGJ*IU +QFn-oMJ$p$}ZOjp)W}TbXFW z$knf$#bM>1?>rQqZYuY>% J#9E;1JYug1+nK%~7R7Gc?S0_h!I!M*jh}`8PTWjIzq-9W_pWRATahZbeSK1h zm;F?F_Rjy$WL-L!lYbh|(W|J;bMM;J%%5GC8LqEP&i#*V&429A@=y69xkxc4KCjgC zEO-A~n5R@bJ%u)ZrF*0O)bGYkNkF0=6O@p7iO8v4Jo6=~K9V(YZhCT-pW-w+R5d30 zntzZ1Yo huFkkA?c8k!5__^#~z?y z3;mTgu;`cjvJqtD*jX(O7Bu4|$SW_?1yYvJeHJqjbY;e2%oS+dkWtny39U*yd6xlV z=Paah!faR^w>&fT+T<3J&CaN{c2J{SN>R3*icN@ph2oldHi3Vkh R}$>Js)>~mzjTQmiYM+-w=IvMMXPU1#*x&=-{q{dEG*(WU){*em@p2_ z;eX@WX60%bAQkZx5UW{`t1`^k`Uo*$g?!t$Fs|ixyXz!vtzwBgPIsBTnz&HRD-+C( zadgn`+{; +X(e*IxY+BAjMxF 7bc*dM>8otQqn%yED3W&cQwH*U#hIKD!40e}CZ|0%~~{43$Vg#=A39g`{MRQhb> z7kQ_|23iH<_8{2)LuT!GoxgKm3PxzJ8?xCtH=^i~9z0jURVgzv#3Ouh|7*0Q48w~X z1BKY?A=aext-KxMe^rCExo!J_nMI$PKfQO7Ey!otJwI9AoI)N24M~XBA@PC-Y`un? zO`z@ZnC`ce_8*UFhR@r6fA-x#iz>Jl*1|)R`eGRO%~OMXTkIk8$}lATX5c`Ahwsyd zoPPYsK{Z3#%eZi#xa7qLaOL9+7fF{yAQ_U j@fqv bE`gnK}`WOP_y^DdUZc-lw)HHoMc$pNq+FT z!>#)Y?7zhXxO`eId%1bduJ1beB#7`Mdi3BK54!q^A3@-~qQ-mT^`~c+cYwR{pBi7j z{+|z>+nd@dv5TmK-hz9U(U_C}GXDe$AD!vPW acj#W8U-c}h^ zJ$O7ncKs<%$TRrbf$9Lk&i5H&mP6tjuJbIrGFZ{Z_OSrFdGf(t>a{m_#JN?gH)}Yz zjXt9J58ke$W9_1;L-LzqWDBtC+gm=`8PtiTNYd}rq;$@SI*3!z1FO2-DriNZSh~dK zr>bLVwmJqmoP0lXs$U@|8OKtd=|l|c_*tPj^*xk>v~W+sdKFIDni1C1PoB;2Er#re za!6Z3Z!vLk7u~-JEqvI8W^zUIcWP5*KJZ1?poEmWd)6eoqzUil69tcWV;A%@ZE0uU z-Czm9caCU^lS{O;ZqDk(e7McovQTy8#8FQ%x^hxaq_;t_s_)Z!JKAWW=~_G=u3u0i zF_A3F^)RYUdJ&kzsUDLubk`VO679TeJP`6WBM7;}w^0YkhrVpfk*z@8`- zAIK`jT0~NGT|EJGRbK$Z&OR@N1#9l2DP{_UjE3XX3Lxc~XpU2s@Q3GCFQMi{6QE+~ za;0de&A80r=&T}RZW6*A?K7JLPifAo2kWsy3?=Bo!}RY7Tc0}jU3DBiz1gXKMzHYC z6?G;5!pemP*f3lRaDyKPL~IvqMw9olrB!{g$1JmcZVRC9xBHk*a&PkJc1B-AfRADE z5wmZ4)m^^9zS_j1`xTAjTyem%D^2z2{ljaV!TGL-90ZRtvGS`JxeJpRL{_enIYJwg zX0hx>ai7KRpuewoll_~^F@F>Bv2Hscq}cW;3H43u6orC@M9=|YLJh(5i--!hRow5n zcYQgwUr=zg|G>lK&1y-qn4u2I+YS&mp#2mSe^yo4McLMh&>BW2pO|5}&ggtebH#Rt zK67Y<$4^CIb-MCXEw%~vvWj78LfPTp({<$ffQx}pw0mT)f(-Lu$chQF`U&mHWL>r# zBdh0HsX9qfHZlk>BB+8>bdPTM*3=>%6alR}!P*ShliL$98<=c;grJ3(p_hxDsqT&e zUR?4xhrZBFT v@sj`mG@T z+mOx24+<|i>m>}WLPt++&a&Mf!wXSC{-<%Tu32e9QsRvb{03Yo<~VKhWu}C9>N3C- zp)V59n5>}6HHHp2tr~q};r;@_EC1;s&pepufrJB}>%T{)3Y)VWx~vr6+uNl(0FU>r z?ChR{kI2OpkQCE1ScG4fX&)lA#wZPv?*o=w$^Z5{Zk@gYruBka;59cvDqrh2<>wXw zvC2t7bcf%v242&^i?94 Y>Kafq7RHxW$j?wIiOk^iVYyp za!4EYWfVe22U6m3LA(aKWKz&Ng=>4qpNRbR0%>C=L?FkkayeVCM8_*h(`@hB;ID URh82l{R@^j7}TpRK!B1oNXu&tX9N>(CAQ8@$;p+2s`sh zlawx$-8f?OYtW4US4f)bXs{h-e|TqcC9WKhi-fCWpik#W?9e6Yd0?_GBU6&UrU`F= z)XShMGvy;xD8UTW%&P@ais*h0fR#vQt*uZ&PKmjMrX3>@8A^vRLSkqA6%c9C5%D>I zS_5m>x+2BJ3`_H;29g~8&D^mMEiqDz=m_V0{5n*bdOcVsu*^-|v;6+wUmuC|ycPJm zlGJjx>OK2BgA~*|WK*cJs^Jw{N4?<{2O-C77F$%^^N0mf&=oHia9F#sD4p|Mp=C)8 z52)|;{Ou~Gs4J+}Q=-{`q|veGxot&HqNjuPnSLHN#TE8;0pE{{$U4gkMB_Y%<3!)0 zb+FU~Z;a1|*gpxOyfXMN7Jp&f&h{$Foy89nIU05uU|eNszfd+{Id-vGm;aE(-pW$V z{CDXsF?2Nk4^5>Rc(L>NGiHr>O{Dv0e#Sfw&3RTfz_?9ysHjU|he%egw0(zrDX&Qo z9g_ex=oM^Ew!NQ;k*0c5a*oez`^OIAw?6i;SZ;+LpUbi3mw-k1;J}DK@m6Jf=9R5I z&<<&?6*%mntWhJnN;8;e0D}R@x*NAtSQHV}ofuWy$w9Z_(Y4yMA3? zOgj*g?FwYN;a)88*272>1wA&9YTJURi90ld)VevF^PqS0I>17Pj*#bkNru7LYrhIS zo4pZRwztO9ARp+RZ-cw*S6yFwg!s;Ff?De#7SkYaj2;nf_#G `` zHEu;6;d|Ct^Ki2J-+zoovxQe|HY$G3jb~(`{p@83H%#zvfoOXTlk%6R+ztT@Bp )uGLHx%!$Csj`l;QzNSmVn*?sftitUx2x-Gvl$xYZE z{LnS%B(*aLl|q$~%&*Eq4Dz#FQB;YYLvqokoyJ}6noJ|3d5dv~FI_maj(){&03m2( zJ6QJm^&^n_$pBCOQVU;Y9mh+eJq}Sdw)qpp6W90M&zW4CJ48^=6ktQ>{wA1q<%I1i z{NQ3rU$=FeN2qgg1~#?0u#ZoatGcBiBzL0f1Ad*(%4>v z2fyK?#F8$nn+QY2I_=OgS)OQCc~s|fTEaVZV&i!#?QKuR@3l{RemZKz$F@`j^!Pq{ zrBHhce-IC|-y8%)Y+;!%9>gF!dHn<%EV9vU i6M3f)S*LB2bdSSA==ZiJb92JQ#%q6&=(-_Jefb6$L( z1l51UmB-*3QL;S|1-`(Va!NcVM==S>kR^5WedI&7YB=^Hsw}Tz4VON(!bA@7md`TT z@CdiD{hT;c8OC1y4cJI1HVZ#U)$_-tlj$Bp$Qu8r1#nQsOE!Kbl3z{?Vp97-2BK{b zSr#95Om1f9Z@p{hd#}5PxP{uYo$P40>MI+FDz&By4Ty80=u>4a+##oH=CJY)zHb0- z&ELQ_keb?o*FYS{NI^l{1}V&0vk?6Zs+g2cqV)H?rU%yDz@mb f5+Qg~4EfuyIXiN5f0}o7Sr&nyzw^T9Lho8tbV$>5m=78!&pb z#|Mw!TT91F`CWb{_DSw0oSVH4=SM9(Nyf*me7RP&UZd4q-5f!#efJ<6#n0F!^WE?% z)BZR-_r>)#SSKWMrQ@=os;9Ip=X0(o-zYB %v2Gf$7hjRix!R%L;o4j2>h#EY4-%cvAO+3) zIruO9KFIOA 1=o{{G7V*CHEp=s_m5fNAowSi@E{+{y1TykE^!(u&) ypIa!SSriYyO*Co;l4I~>p#^K|1+`s_TWFz zy?$sJMQ4Ips ^nKp=w@tN%H) 7N-TcQ^ZEE4eAnEfhFfD#q5u0&N(<+(9dg zX0Q+nOUs3wRHi6q+CQA(JNUmc*#(1ds7X)gblGNg4$>dFbXxmFURuE1CByhFOi-+@ zY{)&+>mEhEc {#S z@1qHQ9`FVM|D-MY-_y|ra`R#=H0?A{XXpT>{0*P<;dhwoDsg2qUXDm@c6q>enq3VC zy_y5qN_;C47*a#HEUyW$z$BgkJayJjZO*R4=M^)60WOPb&Z=VK9dAMrpw+J<0zIW< zeFi3p#z5cJ%y5N{K_L)J%mt~(VXAMss;d=x2Y@p0hBIpg;#wiX&q&b#G%D>$*gR@z zc8?SVMnQv+4LZiGj) }$$`vAOUWm`cI@aLKwUaw}i~Kvke^Vdo0 uK=&;)y%p(fwBBTQ>$=VoM|0`*&u0Jf-mGV#!RfofPQ_Jd>xS04cj|z|Z}}BM!5_ z$%xSBz9|3Tnf z&IX66=wOZ5F7ROa`F*AFp(--LwMw768ep9yy-(avNgH}?wOF3 k7 z%uoMO*+&rRs%F%E|2Zx!^g3r-)ncKPTlwuIm8I$} 43sm?@OKZc7_Cxz_6Lu0G6NUPKlBBAW|dkD`swdBfw1N87+}X>Ot->dO9Wvxn*# z$!Jj9iT|g?gVB$NCHXkq83$USmIatgKkrwZ$fL=|=Td!^m-`3D^k%ld%Pmf8*9W#A z`xC7nsYkvK0yiJN?} Z+3OrMG%Hea@OtPVuKdX?|ecMXK&|88vwxQH2;!Nju( z{$n}F|DiixyXQ;$rE`h6w|@CWgD0B4I)A(T1=)um(GpEFdss`dZvY2BS}pK3g#77d zy%9E)hNZ(h$hGNf301K=$FUO3$JvxGX79mOC*lXwxc>SJMU57!m&@)eLe@E8sTom= z@+NUv`lu->1X{zwhQSYASo%OV^rQj7igNke?OEsxXo zU-(;y`kJL`$-TF+ep> z6k*4TXb4cRUh_Narkb^}mX<5kq)vXI1QkH_K mHM(t>_4HsgSm|y4hPX$EMJ2|K#XEYcNJ@pC96Z=IGe;1^9kDkZ{ zbIbB`s0cu5TpS)ydpJZ+kPSyAZ`csa-QPz%_x+~2iOjJjuDrf-F2beFhp6NVwGW8o z4xpRI-htoRfqkuI5f4u~^+f7o+Jp~q*rqgZ4!}H6qf !TN|F9UHicXJq~ zxrTymrvztE`QDJJw8C&(_t$Rr@`c^+f~!?@d1gboOYWUJAPQ573~>}^;0Rz~CzRuT z>8&6Ybeg(LA+(YAi5m^yZ(r>#{a-nN? lJzT#lDE-vg-7cYPDQj$D`gsai3l&+Mey zqgHdKhHzk^t#n)VMvSBmL;w?WP~P&_lnw_%GIlVX7;uWjcmN}B98?T-cEbW2{$)c~ z*C-p%Z!pQT|Nq{#>1@FGW;=)IAG?ttTD2=5JCH!v6&6ha^&dl6{%{Le +qg8`~f|EaEu=rV{vT8)yGfvEg?&_j+#}dO~XH_K3)SIQ;UJN0E*KtLXxxc^iR- z!4~DvT#odnUn-CeG35knBJX^rZL9PE0g6YeNgZHa061UmSz=>W8;;!v=#%|0fWhv1 zB~v*b(Guc1>H1a+aPbvmU|9|>RYSIC{RP74w4apI7AL=s058sK+ruuk3z-TjT3tQo zhlf`m)!~TI6(xGOJ2uQU)1+R%9F1CAW(?HW0Y_6MH0xNvcf^`@YN$%xYcJ6 Wd#)(q-a-~dm8LD zW}-^kXit#MvM3l!z2fDRdm*2l77pxx(5KvS4W~6`nv3eieV|lM-#3-GVanhNYJCpz zg9q>{#ouj^^Ab%%W*WomVJ0@61{8>&Cu2%ryIvnF`pWOKIFoAv4diLhzTWSiMJ?sz zUIa=j<4zISiJbnr$9sCWty*^%fAv@k=IHz}7Q{S86|780#dA0Q3@iLv?EkT6!o2Q% z7znTUo7ds?7bHLGxh?-frGC?SsOJQ;$LkR6$W@FcM|H=3w_umcF>?oYc1@yDV2M?P zKpd$~G3csDuk+@KpSk^cz3+Gq-J8Vi)X#f9qt)4PvBqJk?5X~|({i5uG-mwi!*hMk z`~4dEXWS{~xC9kJiV9SW(kf%>L}ZSJ6xm8l=8v=HhYN(EGH!$VPS>Zon>&w`1%vb| z@9k@A!w%_a6kq8J_d(;AXgtC1oAHqRi!mqj?bpLMH`(cLx0pAVSyi4KU4BpR8&CUw z& VmyxO?SRItXuaIz or#9+k5F{%odbJ%2WsDUR0ov5NWjqKXC#$|x=MQiZ9>R7xWJ^JqTdpnXZvpwyN z;8Z@&`Sifu@Tc#1VOp>F;E<}w!V(bodOE85F?_bI7+-2pd_k_E_@gVfAE^KGtP*nU zCr8PmX*_b{W22+I7bBQ63EmH+DOlu#cU!H(o!_Dfa16OGZH?l>)VkmVW6>>X@61^x zyTZc7ah46w_0caG2IgG5t`w4&lG6aP_ZGc@?Q|zfs0JlT_~#~_ng9srQbILqvYCmi z8&b^_5e>4&8lAGCPA5p^{D)k;_r&uf3-8EB*JjPlQ||W~8r=umQo$hM ^ z(`Vn3!-`*i0$7K|4eBOp3@X2sd^7g?YDnm5Yg&1RU)pKM+@jW7`N$`cxNu5K$Ws31 zYz*Yy>7tDx)S_z$puSQ7+!S7$9%lt_?7af|r&0mb>jKIRJtR%f5`{OrhA$*VOtI3Q z cn*9H;Ozfz8;Uw*t zcJNs5dmp0zTpg5DGv&NYa-7@?x 0@yOv$xRb63Je zGHQrLx=%@izpbK60(;gDOa`nzinnR4-2@v7C{jt2+_yMpyWh6CIRvZpg`w(un4iym z+!v1IxD21PV#?4t{7(xQsCr)tGM(6H>vGZ2k%efbf}n!d@gdQ1sbvo|Xn&y*_WZgw z# 9mF9`BG5Z{~gnv@m`6%oaFH;8uR|;TF94(_z3^9JdLTS=`Tr7 zswo6Lc1mTT@A`eLuN$4qFayg4VQgC28UkFtx^UOAV|vxb+Q(XkVRxRrY0+2LqhjT? z{OXjF_`3%V@1irWs~$%s{+-mPDiVV~Z*A^b9TVvnb~mXWd~txou}XOLt*_dK;UDvW z&wV0;at1Hf;_8py^hUFP$j$!t$4l D{d|X984ck`eZ>p?bgToAf~!A#%z>p z05>K>= YP=X&ClZz3B7J>JcJfErOFKVZ@a!)vPPl3!gFqtaXu? zL+)<-SfCJT%nLe7CXEe2W7;pl4om=$h1Afim?}uM?H2rszj|6UfBg+xYMPKjeR{~J z_(Bv-zo$ ujn&cRzftA!KxhEQJ+xcr}86Ka=Q!JLOrDceg2V zhC xNF z%}z-~okUQsY13f?lBEE*{)Or=6WgIS6o%wqCv5N{UTpuWS?Xja7Qx(r?3|uN$;eY3 z4v9LcD#Mh4 4LV!Af)RSFb zz-S6_oIZ QUoT_zH8w&*TDI$UfWVaTsIj~;w0Tk~fBejia z1T5v=6g#zyEOLMhiE&G4YxJeKh?We3&7*ZmMNyv2+n$9ahKY!z-t8=uIb{qzJw~=v zuzh2(LWqH0`Mg92yBMNt$_#GrlS+K_Az)&7CMqU_g_6-bGKZ#8PrYTalf_F3D;+dN zQ+M=4nwNSCqZ3KeHIlDHoSVqaxG;@TF<>dwEg(p<9of1eW% YTfJs8EdwL&~>9)G9cPq(io zy}HfG>`-Z2<8lKa%h=klPX&=>+(}qHk3C5|76Q2Yszeby4-h|pbs1;#y;|#wTYq_E zh-6_1bF`}!tiwRlZhXzBYa+QC 2T+}Ps-u5 zrR@6im<_+*F)H6MclTr6**RuFWQ#$e#y~B57+-U~ w^6$N67z3sN=0X>*l<3@99&X^X*AL_DGfQ zrnGQt8WV5FK;})>#aoGm`QVf@fsf0BUgt%Xx{&Z&*;_b*(atG>L%U^Vg)!#{dy9KF zZp+U&PW}9&UMPLcZoMxA3SV@__400{sD~JL-ksVKmWd&Kju!`9(^h!ci7ab9HbUB% zpf1l5tD6t g1wNntxCz3N+_4pVfhCLMlP#v8 z?NADs762_~#h(7m>y)=Z+Tbyk;s1N^Zh_fyGf{a?-w9q>yYpT B9VYO90Qy}A$KR%72^&mvtZxMdJxSU+W#Pv=o)X&I2jpC62c6LHGMJICY zA9?E&ouD5q;!=WPssdNscw5aTS69R!4;DmcICtfczBbj}R7_-#)IcTL8WeGN%|~av z^qbu7d)_a_{QM$E7%n5SVa+kEOJ~&B>iFuNU9M2}p1eqR5!vQ>zFT})1wOTHS8JFJ z+mBH1$(ZBkqmxAaEuE-?hO(m5M6_A)G+hVWM$o>AT3^sHbcG-hsMs9h5{>5M^tvOA zbe*Y3<=V999_#*)mviCgX-4RWp5Sk5C)OMb>OO>;^vDcY`6{nah@G^YQis)rBvzO# zDQ_K2agv^dF3Z=4Srp 6k}ib*(rb(C@J6l0*X&eGF{ zRSfJ$0BUnIWnz-y5l)d63c;nE<16uAF}vwuTvYHHpaMRrM0-gj6?SAjx!j-G&B^!d z3XOR)!vaSRz)8g_p2mT|#<;-I>bN=bge 9&mwkjbhZp|A(_rz&!uk1M{`^V)Wo^Vh0H=&QE zJ%W3JY1FIlRFr!m=8fyvT=Lb)v!Y+QQzesO$4ctpA~zUTMMl^{>zKPd*V@wt2~4_) z;m_xJ;Dy#I^C7-m95#JZe(a^PXZd^CeAaa0&=$SeQcW8~n4hb4BCou9eUkQvZAaMY zO7a3 YdVne7IAe%V*uJ`4nIqQ4wf8Ue%kodWYZ4zTzK@-KhHmFzFiws1k|z{-4* ziBiN1c8Wkfc}TL03xFKBi*^*Qr}YR=++?;$R4t=aJjJ&FXz=!dm>pICEq=P_91UmL zJZ#SzpDh%TgXRvDqWp-ABUPArk`@WPZVb!R_f-ygFb7+uL8SU3LG(6-uQO SSqQ`1)4x#rd_<=<9q?LMun#6>U=$M0xeKrqKa2iF4KQqSH6JrB*f(c zvTZTi^ht7%lm<>$MV=i_buJ@mhKLrOoLBd%)WL`uO2RD+N6{jjT+elOePQDqZMG>? zpyW_YLiF&>CvE>MnoPa*`e|=sn!PtGDBMb(NJ 1QoZCpkD#WG#iSl{msaxXo)2*`N zk$;h(kJ)9^ew!fD&>@;RG33^=PE6aSC(Cn02{GphhFeujVA{#WkeP=)iC`dHcN2;? z%Biw6&cksOy3B`M C=siTW& z2WK%?zo%R?XzgH-W5azH9S{gQoV(5-JltE?b7__TjdXcGHgAvDOblJDnM${+gSb2| zr@CqcSI)j1oj#n4!E(RfZ#|XEGW;XhL^)Eeqp+7jIsgO+1zCAK`+Mh1XCq(6 {^e7?xAuPX)?pUHApF3~T=II5;VAbaFtI4AlJ0k`8VT3uh58dZSi3 zfL}MJCYJQddSn+#XA%FTK=51I`iYlD_-0fkM1B@dRjT6iND7RFs!2EILV)MiS$8wd zb~w;oe1BNv2a%fct?|b@Y>P<|UqKG~v5;gpI_27s?K=eA8~&q$^yx@EM`3OM-T;w3 z&$=9J-M?so-f9-S!fn1dKZb^Xc1-K{$G{HV7qfi<1^fW&qfPndwA$#V*IdL#`bOxB z$tXn*vuBN(zDUiuegU?Mesh>~5A(sx?0~x^Vy=1-C^UXBhQTQyj~?HARIpfbCmoRy zzfYQkipuGv3V4<9gxgy+J*QS`&Q}sbQ0n0dG=y#@n<-ApTr0@-0(i_61wU4N_&t+{ zA_v?BA-pg>P7qg)e%zXW#{r20l%0Hz>j`pH{NGMOO`#8-Y=pYdhwu3Jw%@T%JY(-3 zSY#;C!7Xu_keMvdF{IfsVjD=^LX=go5>M-5X{yOcMi&Iv+vss{tx1bx!zjLJnQWMh zIbzcX`~j9|)#{yZl;rU&!MW+<_o0l*47YjXWo2Y%$N`!-%%o_8(Bx~@r4vEsRpyoB zJIkV_$)Z)E?NMs|(T{wvQ~gZUaJ|Tm zYm|`;Rf;%Kd%QDJXVUU*XVQ@DC9aB-#K)9_R& u0~`VeUbw7qb0` zLIm{&Eo|0L-i^xH<91D-vDAX!Cin%B?hThr-5kQ3GLe}~R%fA}?sMT%0)@$4SjY6E zv|IaEhhl>lFqWK0!E{z5(^^iciidC>l%Z%DAP lM=t@r}6*-r3fc<_X`H`hen3 z1fMsqem!zTuRjRxyx *{nJ9I4*I$ HO{XC_~h6c93-hpWth)J*pZxeuLDM5@}oIq5f|x6c4m7VKuW1SR%6 z 5+!D}az?D+@Yt5vUFnVtmf@|I{~Y4DJ4R zqcD76^DMY_Avy{Dh873_0tl!Op-@}4LeIJQ!?B}@WcnP^$cRlK-$OSUnXu!CCtC&R zCzJ18&CYv3Q^`#;umVV)c(sNSpBMB;w#YW$UHDHEu>rhpa-6{rS^-fGz~Q9;^lQ6h zND+^)FL+`+06<}Vw;$xYn~wp&waHX+3=&Ida_WAdF!Eqv+@Lpro}!nu`JS9w>P!wC zV{l!e5x}A7GtVx?(3}q2K>+3!Fb*+Z^d@SSjB5cuVedsN`60<4Rs{h<&Z$+c%&^g` zkp@9R5?!ug_Gf#PxzgW=at>NP(fnwS&o?Bjqo~20dihTjBIQ+b_sHh*k}C~)qQ4@u zaf;+NO!Y;KWPhp }PP#uZHLcj*hBjvb~clVQ!k?kn=(dpgFsh^YI@wkIE*z==Ak2hbetA|NE&ok6TFS zWNGdjK5CQY+x7tQS1HGyLsOc#bH~bl%-xnUsB9>#!IpqPydODan4bv8VAIB4r#}l{ z<;1<8r!a>jMz& f@t zLvOpduCdI>46C74jQ)9FE%Z)vi;2ZnR3Ez3u4|1t&eAcc%2W9Fb8hwOb2oCeQ-gC9 ze)VdG%t)JXaLgAGiz5%;1$pI t>?NBbv>uHhLOKyopUYXS-q@rOXK6FJ!cVDjYpL zp)_33HYQ|2HG63OFNjX~*CSiNEtWlqJu#~LcLx_#5w}Ii*@BQ1_E%+a&BJw2BK2;A z+>JcCM|4Lrd!3K=QvfkrypxbX>G;mxM2C6>e{4OtfP6t|`bSo3i9_3_2ceFZoM#tY z0do%2S)_Br)K@e9YxBv{xG4yalVS-FP>vAcW{pjJD%b7&4)k-zQ)2yBqf>QHK?+Ys zlHb$Zt12{34IH`s@pG=j71ckjFt`?|9RvfHh3|01z#`5My@n;2YAxfG6zD<1{n_^i z19%ABG9iTEXApeD4d{U){Wu^}5}4mFSbhJ#n@Nnk0s!s!1%)ur36ja`9#2kSoRF~2 zWg4CNH6SH~091F@!N(l<0a0NT%2aF@9^gjhSVBe*x{m@)j=T*xe&yX9g9$vX@0jjk)ZISpD3MX=( zJ(16j3SIqD#EzV|gF_E+Od>1%n7v>_<{|%S6n5!eQD-*CTni+zk@(BUR|7@p4M1pE z <16;xBU{pL#PFq>XoAh%>)xmc zbyH|AB~vd{zRSZ7c;Tl-8|@O)9`X8lBDZ g_fwWxLQnVpS)n|iT$noFmRZ*Qm>N)t+&2q?V+F0I12Oxf z?UKgppYyThn|m!HI&5pyZ~)j1ab3XS!xTG4HQraZnPty 1yVla388+&*n%e=iGN0-7Kf^vW z#G0$4m1^F-dj{}D75sVEM()dn|D)eaG|8exMXw(R1jYlp4D$iO=@&!Y+r+PdQ%#<8 z99_PxOf?<&(A*9;VIWd%%l10EIorzzdy(f~NhzXZw jvc6 zK)SFoVODrBCJMk&m+8Rnty7&SnbNTXKC};d>C rvJh^YWQ2K7(!xT$?I5ZL-;0|2~2Hf{k5;>tV#Q1=%?A>1>psq^09I!SJi@iJ2f z04DPVt9&~g6KX $wg27L?3lMLgUZ1imaPtEfmR4)} zl{!&?J{S`QpcRb`U!kX;(htO!WyHQ|y7XL^`c@AS@H`(wl%)a40e=LwwuQn;kk c|XJ`)OPyX=sB`Ki!egYNZKuMWj$-4*I21b*rT>Mb1Hp zxD|6MB?eNwX6ivRMqLk6xfBX5!x5nkRW&dNOm7FZe|JQdb4+%s<17l *T7t t76pxm0vy-sh-VM(34D#$Ll>L*67KCS&x;@(Zqo_IS2^@#uO0YMELiJOvG*Yj?oF`DGfVU8es;Qn`|6S6g#psoT!>O17DQ z*!snnXF=2D=xvAgABV|w*?4qgo?{+S5~|(#tPL>&uYVn@^d1uMoExjwYi)WuJ~Ur= z^5>h-ckZ)%9*t=_EjOSy=81Dz21tTUEM}9~vJZW!4xfd2KZ?!c)-O9Q4Bs}lQyGy9 zW#pyn8JUa_3IfknRUiAv*3VPU>Ia-QGT#SK6+6tcJEvWCkmEKCU))Dr0`9*(q_=;N z(GWXb=3aQL+>_gTyL iR5bD|aHdB7V!t_;PaAyLr{pS=#yiME}=x z#_7l=n@CZ^Bv>Q$suX6LN9E*u^Vke#rTBG37$ZYhezs%r0sk>##$$tg Pqoo^;hnx-t459lNCy0sm)u+A)B)`+2VD0;&)&C mT@);sX zqxHxWhQh!Gq5b9iaTWB4AkjigpNA5d{}qeX2n7s-8%nE rB=et2J$I8$FhXDy#}X}SLQq3Q10I9W5;yy>~GgMWvo z|F3xqVa@>hTdpOZo ZmsP{ z#cpv~9*68J_{X1&OXz~W-ebSz7NzVrAm3xh&-B-3=a&18Cj(uVWmTV3xn;5R+_QAk zscdBNRrB-^6>5H$S^cw59c_F?{4g mz0+~P0XjZYrjvd_M# z$wbh?lUeA#MRb119Jt^t{BC^oq|^~hl-v{)w1ZYagyq%{g>zT{>xE!bpy8 h z;^f|X1!iJQ+rX`*nuE~qq8@Ol8;2*gkS!gg9J(6bDRfyJ7n2bu5%+w5EERTnAMihs z6n@I0A(VyYxo&0H_z26FU;6l;7I5Q#G%788x=Zu1eZ%rRqU@JD5I-`W5=%2C_quo^ zH6os%<#7Qb5%?G#5PX5 r>;RI6D3j4B1IlM+EUWY(YVbjmjV9_YKyD zWlXzJ#UQ5i^1RLWW#V;7^5Y3R?x|_V9i;ahYAfV6rSErkCG0jIVfo&x&f>EG|9+1X zb8lEXSC8?Vr_p_5?B#IN@5Q0hb;F