From e9cc40f74d684b11bebc2db91bee7817b50e3a69 Mon Sep 17 00:00:00 2001 From: Mukesh Garg Date: Mon, 27 Apr 2026 15:13:14 -0700 Subject: [PATCH] Rectangular SIP topology + 6-device allreduce sweep mesh_2d, torus_2d, and mesh_2d_no_wrap accept optional w,h kwargs; sqrt fall-back preserved for square layouts (back-compat tests confirm 4-SIP and 9-SIP square configs still work). sfr_config reads system.sips.w/h from spec and threads dims through to the topology fn. test_allreduce_multidevice CONFIGS switched from 4 SIPs (square) to 6 SIPs: ring_1d_6sip, torus_2d_6sip_2x3, mesh_2d_no_wrap_6sip_2x3. _write_temp_configs writes system.sips.w/h when supplied; _sip_topo_dims reads them back. Latency sweep loop also moved to 6-SIP layouts. Linear-scale plot variants dropped -- only log-scale *.png + summary.csv emitted. Plots in tests/allreduce_latency_plots regenerated. New tests/test_sip_topology_rectangular.py asserts neighbor correctness for 2x3 layouts and back-compat for square fallback. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/kernbench/ccl/sfr_config.py | 131 +++++++++++----- src/kernbench/ccl/topologies.py | 86 +++++----- .../mesh_2d_no_wrap.png | Bin 0 -> 40167 bytes tests/allreduce_latency_plots/overview.png | Bin 0 -> 72454 bytes tests/allreduce_latency_plots/ring_1d.png | Bin 0 -> 38828 bytes tests/allreduce_latency_plots/summary.csv | 34 ++++ tests/allreduce_latency_plots/torus_2d.png | Bin 0 -> 37983 bytes tests/test_allreduce_multidevice.py | 148 +++++++++--------- tests/test_sip_topology_rectangular.py | 106 +++++++++++++ 9 files changed, 362 insertions(+), 143 deletions(-) create mode 100644 tests/allreduce_latency_plots/mesh_2d_no_wrap.png create mode 100644 tests/allreduce_latency_plots/overview.png create mode 100644 tests/allreduce_latency_plots/ring_1d.png create mode 100644 tests/allreduce_latency_plots/summary.csv create mode 100644 tests/allreduce_latency_plots/torus_2d.png create mode 100644 tests/test_sip_topology_rectangular.py diff --git a/src/kernbench/ccl/sfr_config.py b/src/kernbench/ccl/sfr_config.py index 0bbe297..7c8516e 100644 --- a/src/kernbench/ccl/sfr_config.py +++ b/src/kernbench/ccl/sfr_config.py @@ -1,22 +1,24 @@ -"""SFR configuration for intercube + inter-SIP IPCQ wiring. +"""SFR configuration for the full IPCQ hardware wiring. -Provides ``configure_sfr_intercube_multisip`` which programs PE_IPCQ -neighbor tables for: +Installs PE_IPCQ neighbor tables modeling the physical hardware. +Wiring is independent of DPPolicy / kernel choice — the kernel decides +at runtime which links to use. - 1. Intercube within each SIP — pe0 of every cube connects to pe0 of - its N/S/E/W mesh neighbors (no wrap-around). - 2. Inter-SIP on ALL cubes — pe0 of cube_c on sip_A connects to pe0 of - cube_c on each peer SIP, using ``global_E``/``global_W`` (ring) or - ``global_N``/``global_S``/``global_E``/``global_W`` (mesh/torus) - direction labels. Wiring all cubes allows the kernel to - dynamically elect the root cube at runtime. +Direction label namespaces (disjoint): -SIP-level topology is read from ``topology.yaml`` → -``system.sips.topology`` (e.g. ``ring_1d``, ``mesh_2d``). -Intercube mesh dimensions come from ``sip.cube_mesh.w/h``. + - Intra-cube PE-to-PE: ``intra_N / intra_S / intra_E / intra_W`` + Logical 2×4 PE grid within a cube (no wrap): -Internally delegates to ``install_ipcq`` with a computed ``rank_to_pe`` -(pe0-only) and a closure-captured ``neighbors()`` function. + Row 0: pe0 pe1 pe2 pe3 + Row 1: pe4 pe5 pe6 pe7 + + - Intercube same-lane: ``N / S / E / W`` + ``pe_i of cube_A ↔ pe_i of cube_B`` across the 4×4 cube mesh + (no wrap). Every PE i ∈ [0..7] wired independently. + + - Inter-SIP same-(cube, pe): ``global_N / global_S / global_E / global_W`` + ``pe_i of cube_c on sip_A ↔ pe_i of cube_c on sip_B`` per + ``topology.yaml → system.sips.topology``. """ from __future__ import annotations @@ -27,12 +29,46 @@ from kernbench.ccl.install import install_ipcq from kernbench.ccl.topologies import _BUILTIN as _TOPO_BUILTINS +# ── Intra-cube 2×4 PE grid ─────────────────────────────────────────── + +_PE_GRID_COLS = 4 +_PE_GRID_ROWS = 2 +_PES_PER_CUBE = _PE_GRID_COLS * _PE_GRID_ROWS # 8 + + +def _intra_cube_neighbors(pe: int) -> dict[str, int]: + """Logical 2×4 PE grid neighbors within a cube (no wrap). + + Returns directions in the ``intra_*`` namespace. + """ + row, col = divmod(pe, _PE_GRID_COLS) + nbrs: dict[str, int] = {} + if col < _PE_GRID_COLS - 1: + nbrs["intra_E"] = row * _PE_GRID_COLS + (col + 1) + if col > 0: + nbrs["intra_W"] = row * _PE_GRID_COLS + (col - 1) + if row < _PE_GRID_ROWS - 1: + nbrs["intra_S"] = (row + 1) * _PE_GRID_COLS + col + if row > 0: + nbrs["intra_N"] = (row - 1) * _PE_GRID_COLS + col + return nbrs + + +# ── Public entry point ─────────────────────────────────────────────── + + def configure_sfr_intercube_multisip( engine: Any, spec: dict, cfg: dict, ) -> dict[str, Any]: - """Wire IPCQ for intercube (pe0, mesh) + inter-SIP (pe0, all cubes). + """Wire the full IPCQ hardware model. + + Every PE on every cube on every SIP gets neighbor table entries for: + + - intra-cube (2×4 grid) in the ``intra_*`` namespace + - intercube same-lane (4×4 cube mesh, no wrap) in ``N/S/E/W`` + - inter-SIP same-(cube, pe) in ``global_*`` Args: engine: GraphEngine with ``_components``. @@ -46,48 +82,71 @@ def configure_sfr_intercube_multisip( mesh_w = int(cm["w"]) mesh_h = int(cm["h"]) n_cubes = mesh_w * mesh_h - n_sips = int(spec.get("system", {}).get("sips", {}).get("count", 1)) - sip_topology = str( - spec.get("system", {}).get("sips", {}).get("topology", "ring_1d") - ) + sips_cfg = spec.get("system", {}).get("sips", {}) + n_sips = int(sips_cfg.get("count", 1)) + sip_topology = str(sips_cfg.get("topology", "ring_1d")) + sip_w = sips_cfg.get("w") + sip_h = sips_cfg.get("h") + sip_w = int(sip_w) if sip_w is not None else None + sip_h = int(sip_h) if sip_h is not None else None if sip_topology not in _TOPO_BUILTINS: raise ValueError( f"Unknown sip topology '{sip_topology}'. " f"Available: {list(_TOPO_BUILTINS)}" ) - sip_topo_fn = _TOPO_BUILTINS[sip_topology] + _sip_topo_fn_raw = _TOPO_BUILTINS[sip_topology] - world_size = n_sips * n_cubes + def sip_topo_fn(rank: int, ws: int) -> dict: + if sip_w is not None and sip_h is not None: + try: + return _sip_topo_fn_raw(rank, ws, w=sip_w, h=sip_h) + except TypeError: + pass + return _sip_topo_fn_raw(rank, ws) + + pes_per_cube = _PES_PER_CUBE + world_size = n_sips * n_cubes * pes_per_cube pe_idx_to_pe: list[tuple[int, int, int]] = [ - (sip, cube, 0) + (sip, cube, pe) for sip in range(n_sips) for cube in range(n_cubes) + for pe in range(pes_per_cube) ] + def _pe_idx(sip: int, cube: int, pe: int) -> int: + return (sip * n_cubes + cube) * pes_per_cube + pe + def _neighbors(pe_idx: int, ws: int, _base: dict) -> dict[str, int]: - sip = pe_idx // n_cubes - cube = pe_idx % n_cubes + tmp = pe_idx + pe = tmp % pes_per_cube + tmp //= pes_per_cube + cube = tmp % n_cubes + sip = tmp // n_cubes row = cube // mesh_w col = cube % mesh_w nbrs: dict[str, int] = {} - # Intercube within SIP (mesh, no wrap-around) - if col < mesh_w - 1: - nbrs["E"] = sip * n_cubes + (row * mesh_w + col + 1) - if col > 0: - nbrs["W"] = sip * n_cubes + (row * mesh_w + col - 1) - if row < mesh_h - 1: - nbrs["S"] = sip * n_cubes + ((row + 1) * mesh_w + col) - if row > 0: - nbrs["N"] = sip * n_cubes + ((row - 1) * mesh_w + col) + # ── Intra-cube (intra_N/S/E/W) ── + for d, peer_pe in _intra_cube_neighbors(pe).items(): + nbrs[d] = _pe_idx(sip, cube, peer_pe) - # Inter-SIP on ALL cubes + # ── Intercube same-lane (N/S/E/W, 4×4 no wrap) ── + if col < mesh_w - 1: + nbrs["E"] = _pe_idx(sip, row * mesh_w + (col + 1), pe) + if col > 0: + nbrs["W"] = _pe_idx(sip, row * mesh_w + (col - 1), pe) + if row < mesh_h - 1: + nbrs["S"] = _pe_idx(sip, (row + 1) * mesh_w + col, pe) + if row > 0: + nbrs["N"] = _pe_idx(sip, (row - 1) * mesh_w + col, pe) + + # ── Inter-SIP same-(cube, pe) (global_*) ── if n_sips > 1: sip_nbrs = sip_topo_fn(sip, n_sips) for d, peer_sip in sip_nbrs.items(): - nbrs[f"global_{d}"] = peer_sip * n_cubes + cube + nbrs[f"global_{d}"] = _pe_idx(peer_sip, cube, pe) return nbrs diff --git a/src/kernbench/ccl/topologies.py b/src/kernbench/ccl/topologies.py index ea46019..1be821f 100644 --- a/src/kernbench/ccl/topologies.py +++ b/src/kernbench/ccl/topologies.py @@ -33,23 +33,41 @@ def ring_1d_unidir(rank: int, world_size: int) -> NeighborMap: return {"E": (rank + 1) % world_size} -def mesh_2d(rank: int, world_size: int) -> NeighborMap: - """Square 2D mesh (N/S/E/W). - - Layout: rank = row * side + col, with side = sqrt(world_size). - Wrap-around (torus) on all four edges. - """ +def _resolve_2d_dims( + world_size: int, w: int | None, h: int | None, name: str, +) -> tuple[int, int]: + if w is not None and h is not None: + if w * h != world_size: + raise ValueError( + f"{name}: w*h ({w}*{h}) != world_size ({world_size})" + ) + return w, h side = int(round(world_size ** 0.5)) if side * side != world_size: raise ValueError( - f"mesh_2d requires square world_size, got {world_size}" + f"{name} requires square world_size or explicit w,h, " + f"got {world_size}" ) - r, c = divmod(rank, side) + return side, side + + +def mesh_2d( + rank: int, world_size: int, + w: int | None = None, h: int | None = None, +) -> NeighborMap: + """2D mesh (N/S/E/W) with wrap-around on all four edges. + + Layout: rank = row * w + col. When w, h are given, supports + rectangular (e.g. 2x3) layouts. Otherwise falls back to square + side = sqrt(world_size). + """ + w, h = _resolve_2d_dims(world_size, w, h, "mesh_2d") + r, c = divmod(rank, w) return { - "N": ((r - 1) % side) * side + c, - "S": ((r + 1) % side) * side + c, - "W": r * side + (c - 1) % side, - "E": r * side + (c + 1) % side, + "N": ((r - 1) % h) * w + c, + "S": ((r + 1) % h) * w + c, + "W": r * w + (c - 1) % w, + "E": r * w + (c + 1) % w, } @@ -73,36 +91,30 @@ def tree_binary(rank: int, world_size: int) -> NeighborMap: return n -def torus_2d(rank: int, world_size: int) -> NeighborMap: - """Square 2D torus (N/S/E/W) with wrap-around on all edges. - - Alias for mesh_2d (which already wraps). Explicit name for clarity - when used as a SIP-level topology. - """ - return mesh_2d(rank, world_size) +def torus_2d( + rank: int, world_size: int, + w: int | None = None, h: int | None = None, +) -> NeighborMap: + """2D torus (N/S/E/W) with wrap-around on all edges. Alias for mesh_2d.""" + return mesh_2d(rank, world_size, w=w, h=h) -def mesh_2d_no_wrap(rank: int, world_size: int) -> NeighborMap: - """Square 2D mesh (N/S/E/W) WITHOUT wrap-around. - - Edge nodes have fewer neighbors (no wrapping). Used for SIP-level - topologies where physical links don't wrap. - """ - side = int(round(world_size ** 0.5)) - if side * side != world_size: - raise ValueError( - f"mesh_2d_no_wrap requires square world_size, got {world_size}" - ) - r, c = divmod(rank, side) +def mesh_2d_no_wrap( + rank: int, world_size: int, + w: int | None = None, h: int | None = None, +) -> NeighborMap: + """2D mesh (N/S/E/W) WITHOUT wrap-around. Supports rectangular dims.""" + w, h = _resolve_2d_dims(world_size, w, h, "mesh_2d_no_wrap") + r, c = divmod(rank, w) n: NeighborMap = {} if r > 0: - n["N"] = (r - 1) * side + c - if r < side - 1: - n["S"] = (r + 1) * side + c + n["N"] = (r - 1) * w + c + if r < h - 1: + n["S"] = (r + 1) * w + c if c > 0: - n["W"] = r * side + (c - 1) - if c < side - 1: - n["E"] = r * side + (c + 1) + n["W"] = r * w + (c - 1) + if c < w - 1: + n["E"] = r * w + (c + 1) return n diff --git a/tests/allreduce_latency_plots/mesh_2d_no_wrap.png b/tests/allreduce_latency_plots/mesh_2d_no_wrap.png new file mode 100644 index 0000000000000000000000000000000000000000..2d57582d3f97c90512aa256ccf68eb60768221ff GIT binary patch literal 40167 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%0Da1cCNcm_V-|2nK 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

TrAhb~yXBNCM1S=l{k?(EyEh!#P=BLYx$r`|GVq zspnv*eLFxZ7c@2vrVB6sblqQsfV`rMK0Jn&3y{$A=J&|7cxe%y{D6LtN@6LQS`$pf zjNs1Spo%-aW4H5|zTp)O5pi~-q`q`ycMw|1=3wU;+Vg1`VQEkg2s^DIhV3MH#HtyJ ztwWI$t-J^ax>tpIhCuB}UEuy|jebr4_UafyY(%wevRQo{7e_Tq2$XuaCkmc`NmxFB z&L8jk=&(y)voSLpX}$I^Zf>+}sjrzKCaQ(Ig3JGwz6l*J!Aabp>=|^@JHAtK=fI{| zX@`xo9=V-cv#R=1tf*!kOyX@4L;wj{Xw{oU{5{aiD={-)Sf~I&RFN?^Szt`2+q5(y zS3hPNJa*1Sr}w-utWN}kjg;6A<*zWLKry|hp;<0n=n6<3{^!w*cFG4(JdO;(Eswij zh(_c}6f_XV4$rcVpPK1tpRnhCO$yN&8!#ur$dJU8c9%&iTdC}fticT>o+FuYEi~WdpTzBw3GRD*> zDEpB-0p-Xf8e|nCHJ`UTykE|z74~^z!;Y|JZE~rgsUUf20s6)MtwpG=zw5~B z-u|l$WG&ZNFOQVlBfBhu z1^)Dels4Yzib|kH`zCF2KHr6#>;OjbW$T(tAOc@b@@qTU${`EXzHcL&@9depcIpy9 z349lBssX1uUwhh^GCL_}H$m4SdDQI1jJ^&g8sVawL)_33V5H!ry=X-%QV>J;T3D>2 zlei2LTTHSrQ4Ko{pRdyt_P z+OmkI|7f+U)k440)G9SfMcr#8fImHHHUcS|A$I2%5Svy|f^g zukxvij0mEKe$0!MzW!NNM{YDrZQ@JR3nuwlG;v3wQLC}kY(`o&EMmgIJ2<4u$#K!G-JLdrYawL2;W0xam}jvV zoDWA7+%6aEo$W=q)#Bm3mxlOT0NTYKmpH4?_puaHs0h#dwN$*8Sz|G8D|fBP&)D-U z^mz1FgYUfXhvz;Yc0n>u&|qM^)V2I(>iEou!~gBgP$cvE3dJ zW@C4yUx;G3AKnnwQbEUqpN`NX=&2AwDcTd`m#T?)`x08JP0c2T1h!KcmiThL;8~&m zW9AvTY6ef;_YpwjK}W=J<3pk^X6}uzMm#er?=`Pk!TR#H+-7IKTC zlQ~!Fdhl-Dk`Axi(i+WtdJAcF(!HJ@MWvVIDnn)Fzxt&9s^iwS3!Z7cwfOu6{rtg@ zwPbpLCnF3YK==O;Vx$+1p8k@et>R+()4$k2X@OYqX;~*jIpW)@+Ssb2|TO`UVOU=^2i~Ea-b+ zbn3_kPs?}d!M2{Dh&8@j$*f=T9V!mEWyEs;$3g5rV-z$Yg!OIvQaC0QU-Zoz`}1}` z+y%5VWHE1R??%S zs+C|tO3&qL;>^!ZOM zQGOYDx;AQASbzU87*M`P;t1&L#V9t7q?>V?zsO#jOta4*aLi z&D0Eys|!icmK6=(OR4RTLuFpu=&Zhe5_Ty2OE_ZDtV1`4B77tnW~F)p7?y+pfD2kC5T0=R`Nk3;^TVC zpo#|}h@T}g3*n{6p2Z*Y) zhl%1g9gLzKpIhXWjQwg$9G%ffL{Lpr-mXxwuwVjRxo+y{j~3-`!}0rkV_s#RKX5*h zw#?wL?S2J4lVr|K+y!&J)=V^yX_7dK@jm^C?k+|{HgT{Z1lT1!_o25hvsF*aQ9L8) zyL6#yJrQns(MRwMyE%4X(UK8AaX5g+RCFjng3&jxKE)@~{Iu;hdKAstH)IkStFN;; zzPTqopJZ)dKJPnZX=z}tGsiVG{9#Vzpz_NW!>%jntky`c@0~=a#YgPYO|Gu38Q3TP zOdIxSib*S*u{SYD&iWxPo+@hE%PiDPcyR@I0QCNv?!_Ed{tM~j2&9xEJo6Y+JyM#vH13`tpiR7rIZO3x@n)asmgG%NgLdlY! zqp{zg)1k7+YDfXv3|6tnE5Wo!G+NEHsAhf9PwPKB_EpOQCI-ayerZu?ph-#rx`~6k z#-x1d@4p2-yU%?U5TA*SKL}H9#ROplVz2aCce}D!XFQy?*T}&vZ45V3Q4a%7Xj~#% zm&q_o9`#dh__ce&o+=rmXIjwv=mAlCG2Z!b=(GkMJ@YPQxiv<{mzCPdEY;z4$J)Na zlChx_4ebm0D%m6S)ymN#sC%V^79%QTC)#fbSda~E@>jDqcFxSCCca!5isiaxemFg{ zb8d^$wX&$>$_lQq>b{SW;6OeSmpsLmp*GJH=?HqZP9C8Q&MR_utHq2%s@)UuO=f9Bf2Xj6_A!T?Dxiv*M ztB$c)q(6aRzJl03y2JN8BLnNfxWTZNr(q^ID|_J>=m!*|pB7S>Dby~x%0G6;9h=N8 zVJzJHRQy7~hIAn_*dV}$$%}VQvf_IqQ@PzG1<~e>3~JgVl-1g~723vowz-x=wRF3- zcB&JniHBvN9O*E>P)Dcd40g*?=pxBmJ>6VgWFHE&Lrd({ zzOVhq7bwnYRtGxnHxJcqayQRmg$wM^BgeQ_^0Wj?{^MLxr;N$B^ZlO~(~HXcZ;Z() zRv1RDPqr@A*WW4B*Z;C8*_P_7z9a_~LEeDhbYeJCP^6El8!gr(;t}0dljC(Ut2vEv zmF*HY7U9{mkptmwlnODiry!{6mk#JhMMbM>T6NU9xhYiYEPA21Q1;%6^Amhky^d*F zW+9IN4aw0{10SiZkf(_xI15-)=@WCe%YkdhtGjF4^Mw&~45Ge7dCYh^qWP{aU127# znWYjCEj%!1_%K_EkY8@-!%0FdQowynf@L5_tVCt|L^B6XgAavmnd&kkwr&MkXM@hr z{?O?t&lzu)Yd(F*PYpnV#FKf~H)JTnS2tf88^*v9eBBZL)WF+-p)9A#Z0w0Q=QvY> zcqF1#62=w0@~$3E^bN!{`J=PYvuKMxHGo}ewf_ziEfx`-nkVXEhVgT(vSL-uSA7Wm zMm^Gm8eU}2Ml81QEgQFzO?JINhA%UnqEz*PWt^+SBRf39PVe!pph_rNfiwGP-KvKFz z>5!6o*U{(uyWjWy;~n>o%NP!aj&p#sKYOn|*IaAO8Eol(UUB!4MzJ!Us#U0=(!+rV z`qqTd?#$G`;m#|7y}KqxofOV?tP_VbE@QkQpi1-gc^_Ak$S5b~;WFw8HhMAE?gp{y z8z>2^bpC+?D;NIZCDf6ubF9xpLU`*QNLeS3j%@fm4v;{j`0!C$;m+caGf`4p;&&JESm?>2v}|#=XDyTY)ObO@I3X zqzQ|1J4-EwO7E!f8Ocp}P{joP*Vjqw~m=EL&X|0W>?{D1ger=@#x zOBY$K(WX+hG8PZ;dUeTl$75lEGb^~PF)}p;?t651CP)R{y*B+Oi%-8lPnVWT*bw2)Z<6BU`?IlK@AoBC~nt>5#kEvtH=z^(;V|OCg z+CO3u3*)2HEc4jDQ}Zmjen+|2IZC+#b$cEywuIJ|l|8GC@#7P+u(DAW$*oG~{n+;j z;Xc7hlVd)uC-y|HSAOlw#H3w?cGVHzfQBQ@eXT?t`+qE}4QEchm&|;yE{>)c8q-b_ zqYl0ndTNKXh%qMR6*~POe-b@1s%=zvS83QLus7l!$(pyT+`h% zn$loWr#RRq;_;+O2b*yN?=Hsg-}HlXvNPD-%@a##KF!zP@;ccmiheJ;ANcv#w8VI{ zaA{D`+o8>u2-9`zce*wkK@c(b`8dbNtq5FcFmG_D>0xb=wo$B{u%(D>aBvo&jr>8Qxn#_*-*H2mrZW2@KD*0Z{q!#yi{9#`a&7J|Teqf3UYp)NBUvlxk24+`zqep}&5ZSK@PfkpyaHA*Z`K3M z8?W%Cw4cgQ1XD_5Ufi%Cun1DnX>6DK*D{I85}Os+lTH1WaKpSvO9i$(1Dd}JSX zvYE|iI#zwHtOL$YF4lq)toux12wzAqNoR#f(~3j`pI6a@b59KssU3Yd2|5i5O)GYr zyf*B0kJi+d-B8E4Z1*gL&c@SLi&pRW1do$rA=%BV*;@bjcPej=4*9{ER=>u=YHf92 zi7D6Nv>q4hVKZAVuby4Xo5D)gD>@_-cNs*nML(3PF_BROqjU=Bihm@bC?ixLu|=;G z5B4Pb^g7#O)pTuWre6%dR$YCt&Ak}A5G5E_O51|}+lH5_#9-h%S+v|C0%g7q=4AFX z!N096QG{jJG#cKynvTB~okO`fPI_@TmL1LeIBSN8p69s(5pg}V_~!MQvC4Q;%-p(2j8ct=(wFk)>l6G zdiHuPxsUaJsU1x$ToussyKp9JnIg71TK9I*#{LzCYdRQ+8#^E38vI%u>jl+~=!|jH zo8wfn;<1?-A#2uEe1z+h@@v-o?#Qi=3=aT(bq+BF`S-#<{2C_H{T?)y@c2}8xN6!q zwWemLX3}TjU<~ue!}Sf1h|%Fmkvr?YI?v=eo%KqCNG^S@`}q25m~Qs$lU8459$9%+ zHLrfS)wO{*>Re0yXV|6e#O&I}XsgC`xGLGdrIj0V4i62E&Pw)rF7fvz=6f$?N=(_b z7I{xh&hq=OIB6wXow9lOlASg=x0rj|QQMtzlrHtG^Uhr$I@FtXr;Hm1zV;EPI%>S0 zv}nWGPY-eXm`NXITr++BcJ~;~%i2cqYs2vsAw#YxpSoe{ z6Mw>DS@X_Lwt-ltGI3^N4V`+*j~PJ?RJmiQSj{WHZ;Vqkrpp;brt9|KRbb3iKqgC+ z)Va%7Y~StCB#`4tT~kdcEM#bl5Y;t^#P2;Y=8Wu+xEFa4mW{Pee=yhgyt_^7DR=~&COrn6fhWZjy7%WflR$ewlGnuu7(7zQOy$-F!WP7-Tm=<6UI!&f7@x7SsO&=H!SEmD6bR{@V7Ml*kW?R z4s2EoXjao&YFcSXALMWopmK+J$;f!`Kko_q*x7j$P`n=y@tmVKm?>cEDw;2?AlBWX z#ennP2+2mns*=J5hoZu-`ROI0rT6E^88g-X?bOO^`WKL+dgzoWK0+CLDCjPlZ-^~a zKPF=kX(*nnD(;+O|{xsqw)Ei%)F8hw@dU|!x9Dk7Yt(!nt7|nmWPKOW=(H0NUVV8Dk>5WaZ zCZhh}!4KQ$-&c}SNBy@urb0UDDl>eX+f@NF(}ACu-p7YVlt@TPk^W^-85#G1wlMj; ziN1Ihz2V*BK%_rUOp5*Gi7BxvV*J0M3sdO)t0z@|m2Jq%@TTO}($xe;j;wP? ze-|tG6eKJ7Wc&$i-x1iRU}tw3>D>HZaEq}(<={p)(b=YO<mL zEYkk_+pB&B@QEq-MBr}NL{kLqUONVT)dVbEd~#eRpG1lgj)|p#QgQ;!^_c^mh@2`W zO>HiBdmowc$WCZS^6NU9#I1F+JmQCcUK7>v=QXMt@k!=1{rpU*a?!U_q6GVUUH2%L ze65~W^RFAKIpSG;)`iIq^@YD1mv2DZag{-gGl$$qj;3q~ERn!M~YK{i{*B{{N1-=Th;>=S8j*0VBA|)|B#OTSydr7prqBkgl zMgHvQI<054jEs9if7VuYRO79x#Kk#L9vQCL4N?sD#l9f2IICE-i>27FG7nM1gNkrv zu{jkK8&>78!ZAE?Q*(n(5(QCxKWO&v!c;41ATmJg(QFyg$8DJMpfu>y-={_l@Q&rh zoce5vO(iR36ptsS)C`ZAqj%?S(y=h#!#qBC$%n<+*ASp>rk|{&Wign^zkC_vIuMJW zXty6h$x7vE@TbUpVZ;QV5;%k~eQfGn_f)3R+tkEFbm*nO89C+ zQJK<=8d`zHs?bxDXQ?}wsX|U%Xr)D<8=rV~8M`Iy`+@OtL?*kVD_us4+2;f~u*3Bn zmC%{yj&i=pI3axRG^V)-jFGX#O4RLlkWM6id4fyzjr`$Gf45Zih?K|aDN3lwX)y8F z)X)8e#HJ?HIeJrGr8oWYXm8!AT2L%+f4dz-X1=h5E%{mufuk(tsGa=uA`PBVE$p=f z7_?KLUC(6~RNicJQ5VK!>{U!MlE4Z^Z+J{{aICh6s`3vPj8;*w?j-1aOh^wlYHQZD zubBnN()@GRqBic(>Ox0tQdMGd#?bA4I7~a})4*jZX6q4~%dc!eIS^}#D`kH{Vd;^e zL!TKxfg2J;toZ;tn9#m^s@9R`qs4rBHi{%0I*HgtKy7WMk*F*VOpWi+<2$OHlr2an z3<(|Zk=49rbRVL49q$u7drYxz!&)&P#=j?rF=kt)8%Kide_U2h-~hn$Hd)7H6T>5;L+UlZ;rY? zrD-f|_0i$c-BZ@-l-jgNlm|ElbP9d$Wm)Ub&2D?>xP2{<^Yr8~yGex}`dL*1R#OC{ zbwXvLTP5O$u-J$2=##X{OXx zrv-Is_f2^au6OB{DvDxnoOE6!iTtpmuV~zSOQ3f3(+hvH!dsQ95<(+95E{G}1%=t~ z$sch=PO6Hl6m#g%d@$lrd@D;y_xS68@hY#jU6vq4OiBu#|0Rlt&G|s@0nMS6)*Duu3)*sSt*m!?QKH)tyc5_#uZ20bM$_g-TiR1I7n+c#VOi z(Nq3WTW8lSr+fM8R9NNGm9$Jc#icFcBtC`S8w3FW0rQ)_ z=ZZ^*S5IJJeGs>7}(gLJ3?|a>&<=b8t${k!Sw@=)zoK1q@*Fx0O-0lf-~o1dXIB**0-U# zQwx2x9q;O@(rL zxnH3_rqzK$2}_|$x@gX$eN}$p;*Q(>pFxH}{d;Ji|F2l5IvHU*WVcKH<6OtzzpRdrkK?V= za-8NrqPqSVe1Q3snWJN+f#Oy@wa{U1&PC6=>6+8S!`CML8#>c0r=U3TSmh4reDZqylkh#y-rG;)^&Z^WJ zLo}M4iCo!*L9bo_4!Dp{`ZH5Xz;mz zT1XCJn}vzy=H~g{dTm&gEYedlV>U+}c3P9ZWYP`oe+Acava|Ch36?MD5Fi4{UWgd4 zRX8JO#$FPTY6?ZXIi^JZHE}Gw48N=zO$~RngMmSl2Qesf$;ioFfzC4vb}T9qlI$&( ztWUb&2-0!K*W~1W@3=HR_gakpgodl}0#~ zRGKRrgmn7VZ}HI~MY9`B541`hi7gzNiIhnKa21nh^^fHBQ)k{Chy?E+MQen`pAwT z8&;%U{>kLmKVQMe^!bYyreKI0LfZ(k=g?i-!OuMm<}5<4KVmxE!6TKon0xcDuqDJW zClS7n445>skyIgIZ$}PFTB!xi#=ScW?HW5wH*R!R*+L9rXEm8sGDE~Luoo~N@bbrf z;eFaqLpt&UOkn;acqkQp9@%6M%g-#S&@V{^9o9vJVGG&CcA+|o6O{*T-h zq)S~8m>QpLYaX?p?S(h!45QJ+#>Q&b+FwUnDTy3SyX+htX<^F4hnSJ5=9~3e=Nu_9 zphk-JA)^F5;ewCdATfEXhU3fsEC4SoK)L&-Zey+8T#M)h{O;Fk_YV&{p?|N`K5Fu> zsu@f@hsuuqE3*qyn*W(?1&^7Q-(H^|fDqI*xv<|q*xoyMO2#toU7t6(oY@dDCBqG*QUUk97D$FEw+}EZ9!U1XTj5`C_blu! zwas9E|M~j=SszsvysKBc!0e?685m-3{|Truw|8&D2UV3`U}gXNSzuk0|J4oq|E${o z)&pS=LB}SXhf^(8Y4Js+SXTg4=&^lI4?92^&ZIomu(S)gWuU$OI;>2dVe{R)u0H~h z!yAbH{+jjrw|DGtxw*NAIeB=9IQ42igA-&VC=0hZ*wc%O0*NaEm-O?{(1Ih?5Le39EY{GGvnN_~op6LT{2fDX zT@LtP1VjHV6;hVdS{xRuwV=Gw>%jU9wD#88tC)wbc)~?GTIEB({jD6m^65ZlgWGx; z_%P%8H>-;cp~P_e3o4D z7zR-z7>`3Zbtg#$w*`Q#{z1+njJ&8C3EBDz)317he(+$k_p@+w=#wo=Hfr+VP2@6o zh3s7&_>k!XQi{p<{l&nxw4{U%C$al!lD@b9*)BFn09*cfP)10M1&y|Jqw~m4RxZP) zFz`Q=Gq`t6=rxwK6&QjkW6HA}w}3KWHMbIY88>W6`T2<{zY_`sIk3ESC9y6tY`0+) z6e8V$PzEC-n(x+JD;-!isYLb(*o=Y!x3nU+UjZ|wVl zF6WNzw}2!=FC6c~jW+n7)sL0p2|eOcD{*OQ4#-u_fR+AW4syz&{ud{?gEdIAu?H7Z z=Lh3PEL*kEj2{X%^yIo1Baa{D`_hPd#c#h0@9pougOrF>a+s=7YIXqqdC!bZ1(#-o zd&LH9gvAjs8CGeqWsj}PB5U$G{s7Hvb41I}NV(z$qXAuP5%RXt1ux^X*F!ES)ZW z!9EABVWX$D{+E8?D@gZiT`vDeuS|Un5Pr+IS^4;e96_=&-0t*X{i!8Py=3?z=EOZq zVE!oa^dM%{@7V=B0el$U35B+Ds)~w=TQv#3VtWXtkV9UR&sTzLYoBFocKeovor`nu{Z+8H-E5E}c&hCSEiI^8t)E(ss3)ZWY(HO3u#ChLn^pA_Q)} zq24=E;}guL4i@zwsITog-Z}#T?nMwTSDkt1cX9GGye~4YgtJ)jdi~877b)|Y*w{c& z(M_1;q8d(WZ9@)H(K)}l6pqmLY->u$t;FSU zOS4rJbRCg0$mFE?h4eEN8=EHd<0blfdrYDH%1BMYg!gPlScq!5o{}cPy$}^N;@cK| zWsM9vZ*9KJ4zRSXcU4*%j4~sPxhMP}msp#Ooey;rWOtdI<4sk50pgL1;Dn+PDB%9W z<kxD}o3JTpMag17(7E0hiSz%!1KIxJ?#~i7z*3;cgGA^A{H6EV* zY`oNHZn2^6=Z6$rH&ND-@W2D5q2bo!#c;mnI|USR1^0Z89os?LmEivQuh$FUSHTaB z8I)+~=ma2flIjkS3wmUaQ* z)ufT}+wUf;Z)F+AT~XHw{Ycf{82X>PNy6k!$LU>gD{G|X7!PrM8Q*FOvns4Ly~VDo z*?eE;j9UQWqS*B?*pqwfFwDG4WW#g$!a$!H?K8FOHBmW=7_l zQQ{?~b?Yo5A~aeCZV6V*&jFe)r9PWgZT&T+N3srrx0;v=)kY?*zt=cKc0QsPi2npV zefDJm)t_<&C7ul>XRS#C*V*t-0RI&-My{|-+}l%3Fncaf7Srr;?m#x$oz$wt^0k7G8LvFs==)0j1=0*zNl{C*`z)r_6XcmI*>TzY|LH!^7<=}V&HdK+ zOOjm9pWb^h43ZDW3rU0%Bzm`-kKX@otOGe`K2iY|^7)M`c(FIZeVQ5{>Bb1tHYw{# zw{$Z77_Q&RS;u)_uUj~hJZqLitpPvl{PmCT%#08h{->L@ ze55Z&e!7N&c6`3kND&@UoDI@BrfqJ{h}4SX5tgi%SHtgVTpS$Ujj7s!lGX1AOFG$C zoB=nfJIS(b_+cqFnbC2U0Cx%h1L1)ZO^0bR7{p?2&P znTDC`_r5pQGoUwYd$b>C1Ddpq*fC+hfGUC9=c~jzQm(jPANoPs zd^9G?oRVsUrj+i8>3n{L+>veX=7f08^^$6UylYzDVE%OhOcc~kE0fMD*juOfx0Ai& zjD}glRc2+^TP626>PGM?yI_iOl&FJ`B+rL7;g?N|Tbmi>hs5!i(*gt>0fX*?18{Jf zPtY=C8#O%>6Llp#or#^#hKWt?>w~>phx*)cWL)<} zB+;z;0>n@M>p2=147x{Z8!4s)xb_-H41!H8Sw({tKkkg`6 zBP~-_iJW8bc+9#B95>3l25XiGxqE7trhri0MWf~_XXwHst|bJWEhOyD<&d?as0jo1fL@8!O_k1IbD-}z;_-bLd9 zmsNJm`fGl9dDNs#-ATHBAkG9hw==T8C4Tp!6tt(Y=zo`AB7G9XCN1*}hQ^V;vr0Bg z9Z6E5PhYQVp6)TUE-Q}5gS|W<05{hio%D(rnLMBR*AiKfMGATB&?5~);6yJJ*Unaa z(`%z}Mr%q{>0$ z@ynRMAt~gtdv=pyE@Rmt{fzVVVl^Lrv5eS2m5m$+AG_pG&uZ4$7sheTiMiA--E+bd z(Pr%6Vs^fEFKH}COD;yav8IYKi|=6({)1a>dd`pgxzHq*m9yy+@wGI7BNM>TfGs=P zguh_91<9E-;e8fCwla-LW0M>rEpW|RfP9IM1|l7r5sR>zYWsPQQpxKIeQxkg35C31 z4#?1)S4s-TgW&uz7!wnt^1)av=bKRymjQm7-*2nfj+VT=X3!B2r4{v}08`)5)ySp+ z;1Hr00PMM6owN2mClRpCJrK|#fumHKXDnEq(kv}w=R5oGy@*b+_m7MhubO7f>bg+T zu_(Z8L4%<*n!O8127F{N&j5oFYs5JGKP6}c*hAvZv0E-pnwIdXn@=iN|0dt9n&Neh zSIRw47Xc^rXN1m3nfpJh(MZ1p%jQtXz4Ny3*^Cvb_7)v&LsPgVBw)s$p5sW9Dc?An zXSo!*hxj+Ahca~0|3x1BM``f?gqXk{T0i(Pn1PP`RJw;itbFY4#RCC=!(*43Dyzp4 z)Pf}=(O`uk1-#KN<6ZBD7qnhi=zMkp zy&jdcUU)sFBLqr^@(-n>KLR)_0&wy$Of4>{!d6aTP?ZO`=SYVOu3$^_THl}5QwTRu2l8ZE3e3QW zNJub@jFz_liJM@cq?8QBXRERU%Cd((S;&cTti&LEYo@Vq{}|KSX0HgWz$g*hIK zcV^QvJqSW-<`-eP07sg9*R8;-KOg{Q)b4vIwf)Eb)O(w2w9dyn#>k2Tgd6o4;tvns zWJV27g04acWD5D?R8&+26%5(EFX}<>qA+v^IK07H2P3yW?xr0HwgJ|Mkw4&yY$FB= zi4dmy-5wqugN@)IutIKP)clqKvb3HUN!&(URWl%C5CQN$-(?6WY1?mQ4^q+V6PCeR zTLL)mkprd)j$*x9F4vM}- zoC8A@0XLPTfLzXQD=@9YVk}D!8a(92g8BQ>ykMAPP!t$fgHqWb>Y*4v7+%%TqW<}c zzROg(Az~VmXYe#&L1s5p9q{ZmyPnSMBxT0OSuq&cTMWD}wvLZa91BR2X)Jbe@O!<= z(G9tW`h3U0KKsTh3n|E%tnLY~stshRX2~FHL5`c%<0f!W z!y+R&cZHW5Vr|pF+!0u${b?}mCTrsW=DjAC>)|z^p_z}FSD##7oPXFvx=iYW!GiUD z=SaEqP2k5q!voPZv53UzV|HZOE^gX}^qBx@wji?m`Ja%QB-5B9-KbRPI8eujbGNJ} zc6sJ<^0Q%(lb-(L4ul77TkmBAarG83WYya6lWVDgJF|v@m9-xbRo3?=YK3*?D$Etz z!JOM{Qq#=Bf+{mJ6JK!JG1y8+PA+T#a5vk*x+i$skGk~ozDeP?iqmZYvq1rWDCPu5 zM@J*gddQ}rTsAPjzHU?Agv4p(F5mmuMtKn@3XsXayX)4&^K47sO&PLA8)V*bIBm1q z${a~0z=uyK)->pB*SgolC?+;LzrF2H2iXR}-PHc783;4kHF{-F0^bgFck?0>C-A{U zhVt8XH^&2QZ?0wtAtCvsvZ0IWa=lrKPNfB@?o(f-d2|@;f7B53b=BpbyWgcZ(>9Z;ZnfD5h^bAtUnX! zXYiJ9wE8KA21W2O2r%&v<)l9ycz+Du9ZE0_Dp_$CDd!*l=}iqHj~&vocA&S_LxU2F zk@+=TOi$pze6YtD>UhvlA=frk5o3$#0Av@s(shr0 z1r3}+{HxtJ*z&`N;6UWoyj~LUH^L^Q$*YiErn;Tm%ry}T8;k!BZH$nXFUH)LNP0Ho zmbAu5KSP?W7&ziZ6nDto+y72D7zEz)uyS0T>Yyg7=tGEO9|jyES$!nGSl1L8)fd=;fo;3HWciIxno~O)rep! z@Iml?bJ|?!N?Y;h0kNF!zwTc3t^$07H>SO0Q1n0~A^n{VI z7?VQXC(;c+5l+e2Dz-Z1CYTpTt(W=f$*!JX<4L4mAGvMMHnW$RDMCT+%f8l-AJmfn ziaajg$bP`CL!*ZGfGSe$othkRKg39Vb0@i7x$eW5&U&|{39?NsU&_gS#~T?e1#}4Tn%E-;?!J+ z^;KI#Z7A{MM(GW(6c`DnfCS7>Ioq49w$Xwy$@d_%V4iIg_8o4@g55%MMnpNH^r#}z zEo& zbLEsfN|>U{p36;&<4oPZ*$RXT%vumX*pY1H8dY{IimbfZrE~M7i!aXRnY@!ew6+aB zAwVjT3o;O>oQxVY@M;TQWZ&z7&#((_?1e@vEQRg*0A)s-59FAKMy06I`7rW42c?*p z>aOG`&>Lv>oy$EZR1E9jGxy z$Ga+Lmve7tMX;J&=&lZ=mG)O+6g@Xvl+#39p3hyr3DT1Y(m6DHr5#w9;<&sA@I_~vryv==x(JI?7n*>F@ ze(}IZzaI*SjuK#@`bIh8RL~4TBpHlFFj7|K><XLWYnPisj@L0jt&OI%5-Q*cl5at7(E&mR}{V%ckCS!*BLJy3_Yg_%VTC zp)lZ}$vGg>U-=p!vAIY0ee0|2;U=y(l44BdJs3f|CDZ* zJI$6!x+!8ZGx-=_+>yZYB&3uP`lss4(U u|6f&!|F`O$|HpYAyy3rU+r-l|m*{Vj4Wqq8Y(}U}7>f(jp~|^w5e*gMf4@3^jD; z@Vn1|&-=XZ`u_b~%QdW-bN1P1pS|zCAIwV(JEUns(qvb9;h z+H1)qA))6_FUeK$lWeYz;>sOaY<;Nl{P0&MFBX*8bGV=WtM1EYOUBCFxX#Rx=ndA= z!}=^GL*83Tv!!zq!fX8wNjF{`8*_4K79Kx?OVufJ{h}Bn^5FKnbC;47!nr!VNJ_qc zzv=e(^_9e1Z_lbGE1rMt?;keS6xGlqG{j+UZr+0nWqTk`=e=&Qu|9%U@<7e|!06pQ z;#YlXu6!+agE(W*YfZQLyj^74gLG!g&WynESdZqEmOoLp6|5sa-v_%bjmdSSJx~}u zN9VPyLh*r=UP8w+uy7=V_1^cP4Bb+-W)U36Qnd+OX0))+CisF)@pWoJE0#DPJSH(Q zaa2S9*jvx;vpD}K0mLC`ATFe&w!C6xp7jPAZf zA5W^G=iUnqvZ(8O70_I>ld9MlyMS({>ipwGE9%TIy^RrW9>(>Q}15C4h-Yej*O4QjI&LZh&<1c3uYdBTb7kxEx+RTg0H}1&BkpiH6;c z6BNIz#vMwh-4ZLlh zTQ#FM-Q616RrD|`Ma|nTqYg+BtdJKTq9-aWLhhc|6_yWwBXwu6X;AyNIKQ z$k6@0qWh%m31xAa|`tK6;UYY_`Br`@r4-oS=8 zxD0ujR`|jKof&J$@HWuK*eBKWx;2Dxj$JFV?qjy@D-@{aTPe=3nZkza3+iiSZoDb+ z_rBhFG10Ost1U&Do`MBGUrjz%a#&=u`rG8@Qi~*ZV?0i%#$hrkJW@)bvfmpnlRS{` zCv(6dsV07WxkFuFpn?Bx?gaUXFqMSc5!?%#Ol3a1__4QJlDpds+~vzb+sp0Bygqo( zB@w%1hr`^(!^9K;YcqXap0Dw%eYQ>H#C3Iby!NBDVv=bSZtcVJ9trs}=DYZvT%)?v zZn(@MMNx~nNQvwSKGR5t^z7@V)T0?%1@&UKq_JK~-r2ZsV(Y`t#ssp^?eqtiH*g!h z#g7xV7i#EX8p4H}Jgy%w7B_XLTP`!3w2#1WCCv zx?MBnPRwF7g#v^qe=i(<`I;mo6&f6^glBhauCaoQkx`=I++aDGOR)&vYim^)?laPK zfRbJ9ntV9d%tU*NvOjiH%t>^!Om|}hE!nuUNwab;Mk$iNuHR*Cz-3%RFI|l@ugrF+ z!XGlu=(WNRAI>?*DJeDS;bA(9+>n;0h0eObBW7#iffd29wMnJ#X;A1j-jWy{G+LjBge9BfZMHX&@A36OjOBzJ1 z4{Pb(Ka)~Y#xc89PY&4lWW9Lt0&DK$H8pg~=r-yVGfNpG5 zlqq*#X{3sc5p^-)_JR1>6rMyv@A->?$ZpoRe)ChRzHeWF<@jRv^6^TERS2iGdd`Dx z;}OQx-?1i#Y)z?A+?u)HIoi3OoX4%N!zdDDjvb;~8=QVnTu>~B^(_mA%}vZDTc^WgKnX-oW^BBQDe z2@_>1v`;gt|297-%WP0;ur@L>8Wkn!Vr!4r)Zm1089Y4vFg!_1>_NK2*QbZZvSTR* z)UP{!&S{I!&We?Wr4c)BC*r-mAj6lf?DuSH+e+!th+;TK^ri+{vv27wcg5B4en;7K zx}s(UM>@9DrAR0IBO92iSAEFoC8Eb^rtVIDo49L1dpT<<+Q}@vVl{+}RNQSbF+yn4 zqT-Rwrk3~sCI{nJBhsS6J%#I~o#`!bz==)$Mq#H`vZVhwX?V=K_YaQNt;Gqe;jTsnq#T z3b&)WACSkc+?t8?nB^&u9f(J_zH8_ejowlyPH#-FpZd`>V40?4ELK=yH`iOxkU8?@ z>3wDI*98+ixNwu58=2*{7!S8hx`|J}3_JBMi=zksdXf#WG9*07T@5lHd)#D`QIlMk z&5sEPmHmA6M-PR?;}p|PMUB_B{3V?BeA;e0 zY#ylhqxUwueX22nuO@S5)CHgE@Q3D|#YUwTTvMn;f1DbNP%QZZt87pp>&4sF|$3?^g{TZt{y(GRqm!bHf%J=jmbLrryX+Hln z#yrem=TmZzytppIeLu8?-PCNjQc}dH6<7W~i`h2ejYCqMR1!NkK6o6-CSz@Gs+Ucd zrYtyXf4%x+rqhbBD+8+2;ML{}*Ws!sZcp`R;yXTG6G~51@-8=YZxl(?;4zM*Gd&R7+205~s_TIBw(9^i(JM4#XmQFL50D0u(mE zL5W{Kg?YErqXZK2C5rm1cb5_v$oSvp^UbVuIJeRnle+7!=-^DV^!Rb!MK%MCn{GpYnfb>{AtxGQ*pE+*X zn#))&0u>H7QOtoqR?_y>xTt|T(>ZD%?q5* z5+xhWVjhy-K9)vqMWPk1=5b1LbAqAWazasmF6;JH*Y?S>-Nl4#6;k}NKn6DMjl<~M z^dP0plCHH66*f*25Hey*1eE(emDf`rw3Nzp3JR_8(G9K5bq|Ocr_*-ueQRGQ{^Hg+ zHICdxOQNY>`eS}m{!B(YAQ1PWtj`@U0G9G8)IOmQ@!{IrPB zJr9a}^>2|W6Rfsn3old6(_d>XHzYE5wYoV`e=sLLA9EpNMI>|Z*iKt=^^pQoElXDm z-;ZBEc7E>=iK4zbo{Tdi)f(_Wtk=u%>1%wmb>|j;cfFF|jj3=cC7pz&k1HkKt-lRB zO5#KmyCScoEgcbvco&E#9^ek6Q)uAR=?IlJC!@> zQ8;q*YSa3SnKX^+;6iQd$fd*|M(I0r zJW!8NrOK|@w1~%9M4Z-LgE%QM!z+vFataFydL&mkaneV@SRvb3Lx@4i89}qsYe_3H1*_TYeq^+~OqgZ2 zF&h_s)oxr#4zKL3RJly=&B-fE_+PnqwKgaIzU3A)w%A<3nbHN9#^#k~wB0(SYcCqJ zrtj^jt(9FU?MHS?g#JZ2^YKsP^5{y_mRNsaJR-;MV(g6_`ssbPAIG-IzVOPL6waUW z!g-hhjpIL13TWB~@QJ^+4dzGdr(18QTP||WCE-NE$(Q(d-nDPG88?Ip#2F|>2|9@_ zHS!79zZY)r`cR=>po>~By10{)_{ERw^b*RMopRT6D)_7L-pCsMYNKjd6V96hG=oMHopVICwNGJ0h64E zdyT9t8uIp#qkq%#%dJAIv?BtamF-~T#8R2ADull|o@i;#J?>t>;_Z%ix>nrjLo&Sk z0am^*y6yQ*kzG}aL*|_m_?@lsIvq>X$NnpPZeT|$Qn3593;C%C{PvwDl#qned z+sf5si_2`BN1y*qlFTuiD{a1&jORXi4k6m+RjAjePHHHvJN6idM~rH&qfM$i=?{%H z$FNK8EC;7Dq%&FYYX-*(v17DUrfMvL*x6r4asRUVSE5&q)^ z%#Fk+uOU4|5%+dxY7b;}(8@Zf$Bd7jO$IPOCPpOnk>MZNCzpe8eE%OLU%;VWaxTml+t6fa_bVyAoI2-x(=j*;vsK!fLqc(-lunX7B@8wiszarp@6O+w*xXtJ`a}<>GqV^;2h3fOo+YuIIvFZT1?CsmPS4*gu=_I{%@arSw7&rzS zC_@(rm5UA@03c2IuUkF)mpZsLQao25%3fNIe|3r>5x4_h*ZGIxYd%ozn!H-hEE>9GMs1Jlmdnov0=3|dwOLeh-*Py4?Hk-ndKdzLeZTw+~H&kajS z;aigHxna+$TawRj-o{w7h%k3UwkuN>w)UmYGmBQzT?L)&^@0R;`Nx%qc~YV@WS9|u z(a|^TSpj!qMCxGD>Sm=>r?Njt3%MfI8Q*EKHapOR6XtFypN*IHQ+#4F6YuO2m1PzX zBbpl4EUea>o(k84YiDF;z%&^esXNE=@W8{E;8J_6{00Q{ z<2rMrb-`Ti=9Xh7IPdYw7n$j6rKL*hgYG!a^8ywj4O{uM8DWD@Y(1~ii8?oK|2j=g zony;TEY*k1Q|0_pWYXU1+oF5_OpNJbC5B$y{XRkq2iv9PJgQSsQAr*bEE*jho!*Ms zEh)_s#bG`zz2q*P<_&)lXZYxm;(+G*Pm+Yyc}rFf;)fpbGsrBy(mMcsg^qine_oG0 z9YB=Rx!I9>Q)Ih`dNZRg<@cXzzouM>vhuF3#plDs9L5yegU7{;dZ-sOaKhyJg<+!Y z#?(hN%PVGW+C$gZT^$}Xad0&13}1lyPjOx$s+*j!!o*u=q33WLbJ}7XUZNL+ADTDm zlR8ETSTZ|J{pO+KylxcA+t!z^o-J6UU0}g<lGFydPw03A}#$Hke5v ztXQ$oI8!~uni!eEZf7#duh@#`Z0Y z)I@zOau{#!X#l28b>oj8JrYWK8lV)ugzL&~;jzN7^c_T6JVRbdL%j3zf-R6oGP!xI z%29%x9 z+5$izNG0GpKYUp^$Q!>gp5(c)m>jN=Cj-Tzl*IPDG_ttuGg6Kgn6$)l0!q$)caG;< zdf|+(+UgNsX>L6F%2ai5|OVXWLJbm^wjom_k{_37`BSx`aA#NG0 z7*Y9vj4{cC8_iB}smn2qsoLZBQiN1D#hz?amHc&1>0VfEqtnqv{e?~rk|0&1ep{UJ z4}S*UKaqt*6bDIu<{^DVovG`~6O0&E$Hr1w4&V)Eyw6Ko-m8k%+!Ks)4CdxSHnf+P zx5tv#lp`veGU$)&U%@2IO5AE}`)t@L%{gURc^(`I@%}jx--A>2bcfVW5qj*~^!?@w z4<|4ETYFlRV0)IcTdD?gf2MGi)@ive@`F&C!@q}o2A96_Cf>6y8bgs!-haz0i+qdP z6)2MtpX|6ci1kuy$rm|n9uuG(^P|YoPUVeQ0u>6PB#%xFGjSonyKiKc3G)b`PXk3g;;|kq-oh#MH`2T(HVjp~^Rt|{G0DH%JRd=};ozl)^1Sox4N=5G52c5g0&=HPg_SOJ zfz?;q8dqWkBX-mOJ<0002QE>KyZ<`SzFDc1ep4Z7LiWq?{Q(brZm5N4X;tfqSk=LW{NC7TF;q1gY@U?ahX^e^LYW-OXx)x8ku#6v@NXPU6@ z!RCe0|LFmY_|j+HD0-&8-m0+<$jEEg8mCc?f=l<_}Uz8B;_q=IGX1w_LF5BL19I@l;G9mSmNY{GzJ@oy_(!DGB zq6&A-ax(@Ep*`EV{mc8J1abEl**gY)F8NUI37y>!@wOP%RZbtHz1iT43QfkM1!=B! zl?uEH4j8`pg>U~dcN+?6!wggE=~r?#w*Sp$B8gogmfArWz`c<_`Oze^;h3-X{kMT{ zjHk8#=N`>$ALV8UKfr(XYs!<<-g~weQB8Vrp*xy9yF$nJdUNn&gk|1K$#8B;X3n&} z(*KM)an5$D{)N1HdM8`i4TgUQe_+xkS5STP0RL*^--AAKHSbQ-Zql~Oo&EkiG>L{UBw#Z9u-jMg2<_K%h_$!?k2c@QF5|9bCn6W2BtXfFA% zhmeKmrTqw5{hI2PDb!{rEaU(+1-_+4^sX&d|!7MjI_zIi zs!;@PRn)sw;3BH|{eJ7;Gn}Ax?GBbJSXQ49lKnyO)s?wZzv(46=1yKukGZ)&OMY*q zf8NDW|2qZ-YHU}HgMtg@B7ncy8YuLIePz=rF7IaR#v&&{xqy!o6CXS z-5TxXl5UHmG&my@lSpIW?7#f}tRfAH24_>0P`GKV+wGv>U|ky*VDQ@#sln+^^tDUXFG+)+KR<{;6vR+NIPfX$v7S-+oWc)DX@c4uWRG*JmWkd+FG& zq>x_hQWS-M6mEdkXEf~Y0>gu}`+-p75hVY*Af~nouPrg$b3ea^evCsB0a4hLE!C3o`s9ov;uD?HuuwgK-3kzNq2 zg>p1^EuE-fl?xOAwOFs!p3Alb=--^broLi?w;f(V$=tm8VYuibHA;InO>|0Ad;`>euHR1^^h7(Z&Gp;^$T-wdCeloWAXUeDdV1jL39 zl{r-ZtKjl6-*US^CTp*ijPbs+)9vd|(I&RuZ*>ZV+wKRAc%X5l<3#h>nC$c?sqB&E znsY^+c`qN9YPGo0x)epwi{Dnt!OBAo82enC<^1N8&*k{Y`<(p0&)PCX-}rBYjper9 zZIBdg8VYzA$c%kPEOJLyQE|Du(6i{4_-I~>L~sqAhhkPG-u=9Ur>p-K_!t-k1Uj%I z`9?v5wwWpURNWo!&A8&yrtOLTKMh=^9LnVLptWD-;o(W9I$yEy^|NttK212c&(&{B z|Ep%$PMV>b(FoSXe^%>=PEbCeq^S6=rVv}oIYm^tvl?~cJnwfSBPh4Z8vZnhlwJ3u z6(!f~M5*~)Pt__&!(?)M&+K&kX~JkWWH=2Bn0PPqVEmM|zkU1Gc&OsKUkT3dvh^d$ z|5f=`46bUE(}ZV|D1X3-Ur=A{8CgD~EK%vJ^t8b4&yC;>&0rPtFcbC4!F=#fYdm z0eN2Q()}3dUd6fDKHJI|L(Cu-R9QVQjemW-p6j~sm*&Y#i4$%VCU7l}(LNgY{S;Xs z!ESDYosc!Z|9Vk|Nc`X?xIGY$gpujJSV8N^>HY`-qHTZC*{kIRh=fZc;i*CAI{ZY; z$pzPuekDf4iMLDODo{)*O7HbZAFVug7;6k9m)yR48%<|TtT~Rs%vEe<9eoHu*}I)o z(x(4fD$rm3U=ZlRQ5q94`rY4)GD||nOl4E8EdGl!Pv}sU%WVp|ut28!^nG>;FrOiS zL{);p<*JX&yK{l#3&4q5JEN=)6;e0)!=kR(#e1ZxB)lx!UTm-jITY&}P4+lez%s1g zp+$VLk+0>$pGI-_<*T@#Kd>~;!?T0}^&`uetpp3}q$U>a&VOurRDE#Rg=iiM)Z@A` z_rj=tz%ZC`y-3w7FF~v`bOVGcyV$a`7h-7q*XwOb5|oeLuw5J{AYrMCExXqGqH6WG z4?C}#+Wt#TIoPVlJGg zG}zc}_zodkiDpPF|wPhDVI`77`6*OL_`;k{jq zJh{aIm!Y~cwMYyhWL4P=v9wLahRJ!JN6(MG zBZ5{@yAeeTzKO=y0Q0{exh7C?8r7Aht3B0~&29MeU7!MY`Tf6tkJ&^+uHBeQ&mN6& z8RQ91kU_`7ynugFQV|6b02W-$avakXQsP?j4od?mm<&K06;zv;j|M1h^vCZOJ4UrBFH_V{V=Z1-PqW7jo!u7a-usUG4N6 ztf}_`r-UVFQOaPm13H}9z`&pll1=bYk)nPg9^_!DQ4RY@jvkXx$u|kxf!QQg$`Tui z`8ESuP!>K$%%&_kNm9r{+hygu*@xXkRNH_V20C{f8Ah$ z+D1ZgkVLev<4*@)pa=hoH9&?U7>)AH@1<(yB|m@ue6)^u2PR6)WERq~iw`x*E8lEX zN>HPAAvbgJ1)C2?g@iBycOucQi?l6O6;;3mgFSOBDNzuM_T)nimN=!G`V%M)t0^$l ztH3rCgjlA4ay~Eao{uTsG?w=85g?dnQLh@s0Nbya$)cv0h~^P=2|!ecC`+#r7(*r6 zho;o$!nt&{;2KQeZCw0rgN$F*T$6;rZjsH8Hr2cvsmR!m1)_=(E8nA)!!C1!y5Jg| zd98$0f>KrTViC*=MfV7|XbO=%GewAiSBWOGNl6%=Ez008pwdT2jgVDh)RSu*^x*?b zL_~z!OKIikYpoYb3B_k65AOH&(C3_!lXtHaCX!znb`wJl7FtK8E~RV6H-xgA5)T8o z4ki*|V31~0%V06C4_R2=>ua`=iN!_&%%m6`j59Y5l!K}R%oDmf51(Y{R}M1%+?>v9 zVFZ+}=lbW+>o;$LASZRSmmWd}v@+MdMMdsf7z9WeWRlTn&%2_wYv_Gy0e-T9nJQp- zIHSq(BzRp6o{m5^Qb#B)ZdHsGK5s^d9ff`--B%Kp2+?Z2=2 zH6j0~D7*XY2pv@ebTA4AhhSjdBKtt<2}QhJWb_hNxz`B``Na9ZlLLg1IJE8{{WLnw z`}@4951B7y-Aiw&xWf=+Ik$!o(8y8^*Y{?Ul;hklVwj3=0b7GYI`y0?89N~V=% z!kVudZxW+K3BBTG=x9JD3?fb} zjs`2cyYDS&5-d8Gc$jO2UEcMxy8Y>dYvU+xjT|Yq2WgCeph7{UP}tdAX<9^Tq3w;O zBycK^W$STh(M^J7a%DLlc^bYg8W?sJGPJs>GG{Wwpk z&3&Z^9L=qb1k_RAg6&htxm8XZ3AaP*S<)gGhBp0{nhW|PbR}m5H z%_dEeZD4Yw@GZ@C7{4>wnHlx{`}bNXj4X-A!}Z+d)UtF~5oKn6etz1C9vtUxKxY$x z2$*>h_w5zL6@4^ocdc^Q&53}ri80$MYN-B#OHlhupd_59KQJ;gM-Kk#=l2z-{Xa!G zbFt&C1HX}S7w}EqT1UJziSX|Bk`j7BNoc?*4Akxak*yYfUNGq)73#kTAt9WE&Q*#F z)R3b`k1q5QVD`aeN>TsXKnn9Qcl1jmAF^(aU$&Jyh5W#{!^FA*u5sRKUkCj=>Njsb zKk9va2_~f+cy1jI_9BHoEZVygaOG*^UcRWXFy^8`cgt1YnIv$57Edn3NcvQ$6A1Z> zSDPdtO*xt3Z66-4LadYGaVxkkgfRKZSXQz%TWb9M)hTAX4ub|Td!Dgvqw9v6SOF2O z`cuRUfv9My$m{}BIVWNe&5L!aEFzF57wwwF9_$vGhnl6HQQAoG1?6HBm)&rPO6MZD zit}j1Tz@sbm;rf!HGFya8F?g1HQXbZEU@sU!gz86Fei{USd)b`yFl_+jaBUIG=$_g zQ(#^4>ALf5qSgf=8-AYxbxm#-x5>%Lpuj)_{Qr@-#5z_Hejf|abb$K)u*dfKd7~4f z3n*703X(}QzyummnVOn9md%WA!{peOuY@6$)nCpl%CY=D0_U2P_;|H(6FZ$lPdk@7 z1$A2;_`t3hzBcJ;VY};!TALvG)cm;X6j^+{cenzXsV_lsjWu&YM7D-|*1JnnyA?%6 zX=j?(*7-g@4oGp`jw(Hj>C9$=ETx)upS9_ffs1Fn5H@OTNSys4qd(GHot>0(#CPV!|G8|X;~LkJ zkO=Sn5~1`<@t5@EDvgdqVPA0pC1g8DkUgjS5c9Cy8z(UBM_T;?kaJZop{$PD!irSe zIk{o^htSl4WB=c>2j^a3&B38*O$x=KG?CpZ&p8Rmrt>{Mb>Fco-wD``d=cQ zNPD4jOKnJ{pz#XI#roV8l|VNczi(c#+Z8hlahDF0({ZG$W!BFUb^Iv<@tP+h7?fI0 z@NV(deJKNqz~VF&m1#XAHhIMzB(_j5?d-T~kH66*pq#Z2qvDgf+TqROm#cr^h- z$&HP^S$$(cJ`r)^fH%nWMtz0WJw;HtSUP-p`Op%jlW?0fLfoUU-(#*k`S4@VKquWm znzf2O(F7`YSqQiOV54%Zm|HFqGX6)T8-Krdr!-q=riL_KnI<5~bjMe(*B!N==++^h z>MP2wv$r~wh#>|4v5|CV{C7Jv*`==0MZQNJa+7Sm|z`JaK8=BU<%Ud2?W<_rQNXSMdkBUKC z+U*Shfv%#c&QGm}IvS3Vk*%6tGDMD;Kct19Xd%@kvg3IONIB6!#%Z>mJ5_I&D^!;I5Wpl}3G zaZ(m)vU+?*iOOylo#w~6vZXtkUmm?ETdZea?6u5BHYGLLb83cwHKI$$;r-F)1gLRx ze7Ep39m8W|2esGNeGgY5xe*k7#B}Ys(xHyje|erD@Y=%zlSk8uiEw5qv?a+08G*#mS>Y*teT^*a)HpvQcO{|1GcHW^FZsKhF~kZYL20_+*iq#H(z zR&BRo(FnZwv{Fd+jO*24B{+WflX6IL{yW7D%W5Kra?5AeU>ez@`oWDt@yp`mwC4pv zn-3=otL-_k_cs!LHtv#6pj;vQ9vURn0HQ`do!(V8q(^+M1xQ@$Ls)a6UiX|Ef-*o8 zVF*yfsd(GBQ`p2C=j-Wv*idwWRv#Lpgt&*cs5mqpb|M3V@+rEqkeD&x(WsNM9Y}iM zp<9V;XdJ}q^ZV7GmWpPEzzJk)3AneapYGRNiQ6%8uDCv|BhOqUZ?8>A#hQtLmsT5d5B!yn_EEq z9zj!ZvAi3&DC2z8*B15^O%7F7p2zn?7AAlL;NpclTdRs4C)-rB^~7IFA*krct3?^P z9uP4UHtp`}5ZOU7)_AKaTKHZhzxm~bg)*dh)Isl6Q%;}Xp@5^mj`VykahaQ)R3h9| zOXse&W_fhPffLY0pyNZpc)kIPyc2x1oNi70 zFlH?ZiZTdzmcH8Egc)Boz>Y50hQ4W=i1nvYgSZ)w~kc3K%_$(1MN(Pe4W+g|l7ky8M=53!^@%b@Jbk#TjIq9G~O6QB>bN+N{-8R2x zL9vL53&JJ~leqMl^{4GX$t5Tp!L0Pbt!m>uOiWJzbg_e+$U&|he>wfI&!NUtp)u_v zhsqY&{KRzm^5vl|flFao$m2)hwehb|-SqII9@IF%vxp3BX%||t!ctq=FLcvQVvhOt z{pR52N&0rJ&%1VnD5v@lVLP11E_hIwI60g4%i8Ro#}m)3)IO$>$#AhOzE-@^cUIcM_haS3Gr~)13Nc*j#?KSqHf?@LiC+~ zqj1Y!>t&-8o6nguXTC?Q-h<*OH0(O{HM@`7;0wt$Z)eVfU4ZUwr7pG<2azH1t<=cJ z1~8@=N8-e(d3L+v+?Y^m09=rm=5D!!bmMLY7JcLCv(f0ol)^aY*aKyTHU6jFIFO&t z`1PcW?G|<{%BUa{1Em8=7X#*VBk(ucNSXl4#A{T0()`!QulodCnMvQ*k=zX_h>djb z>+l@T^u$O|aGU;8GYSMk7=QygsJ|1z1c?*`tojvYa^6V=K1EhNmleV|0wwY5(x40( z=iWr9@Wdsse;-zrDWjx0e=aJvwYOUr{p$n*%L9 zrh!9V!3qTJ?><;WV`&-?;St!KK-f)Nx4Sd6E2pX&w9lc?eX$znkrRi71he(uwEJF``FhM&LpH!MRsTsIwbTvq@~`j=>tKIo zl-CxlgD{BS4G=IG;^X6kAkFG~t%QofmgLw$LZKOb3N{fhDIcnuvG^g6K%+D0HB?Gs zqAbX7t20nVDhyS4Db1%x3R<%Pf?M8Oti$gTjg9JEeC7gmU#E^a17;9TAo>Zk0SGRm zuz6IdE1W~~G87OY5?-4|LzT8e5`6S~%aLi`%lhZx$>shNZo}yhdK!je@_IPBwoaWx zn2E6{+pyBv5(S`wtliy#F5-eZsHMUOb_KU(X!7k7M{g9L^+hFf1V-RaGqQAf$=pe- zD<0}>cta~=1RfkFj^}K-_~sE#R{)Q-&yP|h!n)&qScT#{D8j~8-|sT<>rzjtOSX>J zO2_^vp6S`MA_?0MnEtaOQJ4y$T+2u_23$wpj|FL4S!J9*ONu<;ieFoz#(1^%r6|#L zCxSOg$!1aot@lt;hF$_WKwB$!C5J{oqFck=4Kh@t~<3(l?^2uFf&ba~Ap4eh1KLB4!vDJW+< zR{nU1feN)bmEM-F&b=|25(lQ%#`Y)zia?vGmzLeAwI!2F)S@m!IX!J;Wb?lsIWxQf> zGG}=u(Kmpl*~Nd4$tf#`BlN>da(b?gboKCnfB-SgkGuFSTje=wq+9)~)5?~N0u1ds zJ|1@3=4t|3XKmyIXt&7a-mhy+YH<5k301j@q5R*!4?RZ7Cj0C#saUx=a^n0ewO}Ep9SHnTTZ}nq-qysHO5H}CG-vC7(Cma^V#K-&QS`c|c52&dZe@T-g(3XjfOFncAI$=*>rJF0gT)yF+)Ld-C`+~-{H-Az->=wSRKNhc&@?{_dt4h{ zQ0cM2c3A$eSxI|t$Gc_VajNT{#5Jv0U_Xr}+c=pMUtnE8bzexn6T>FsPZJ1pRsmEO zldu7BE+FCKUa}%j!5d&CxRIi4BfYvXAt9m3y}+_7?1F8XO0ses7qTtA0oWwQIPc9= zPz!F)g1DMzRU2@rt<25AZT>5X5<2_G0HHu)@y>4PzUb$l5{YBj6b!4)i9YIas$1Uk zNWKt_xcl#IgqiTiBK!{^zN6&iLb!>OV<3N-lBB6U)P^@DY(N#77jE8?ZIau0vG?@( z^Q_25yh+VYI#bKaSsTPkA+^wJKU}OR@nH3{*UVyDhq5QU0NPl;E#dFG_jflcEP67+Vr~$Ax5NbxON9ACO zlMg5Lx&@~$sfM^Qau#>%4$-Uo1y9EQg$8xb5m*By9H6 zWCq*uv7-kl+(-2n3(Q)-IVQxp47x3X**Ovu-7N4tI4H>egf!%UfTN#>AY4rwi!{1{ zoZ1F78RAdSRNHe^&u6{g3O1VBwjOf_v9>M64KE#MKu$+boayu!+!C{%bCQ4`U@y1c zDO>m9CnTe=9W^XVw>0v(x`^#6I6ba5*cAVHIUQdMdT|&q{85*>MNC~`6CJPfw8rE> zX;B@cb?Zg-XI*e?w~=|4er1IxM1|xl9w0Iaug>f_AY8lnB(nsM<|y_gyp2>{JrX-d zB;mQ96T+!2IJ5wf!Chax=r?H+fc;iW%*9%6%=gb*gSIgzk` zcI}^$)W!O_3yl$jW!@{KR&uE$V6=!BJQ{vcu}}{Lwk$OnxFY zDE<|PMeT;Appx)uw5L6m`6P$z1%V_{-T)(bMBX1?jJL60WLvR4{}rl1a^EXTkw&K< zu1vPq94y&Xcz5gB5Ma7G82_m~K`n$oQrV>=AMY#KYeagzBemgT4E2Y+xP}*#Lk+MF(k?O}8lx=^p%I4}!)ZEUO zFJF*%K3p1YT>rd4USNXkFaUmEIu70npo;+|Mto1A6wEVeQQ2@* zfj(uCvdOpHUO;X}8?_BqA=q;Bk{@VhI*)0dqsNXB_P!vrFK8aYu=fIahtR&zDahdw zGI{doQL>;bEFRB;j`#vI%mxyI0KAc7YnpHATeOH%8d3vil`YBx6G|lT1gV#z11Hnh z>dKTfF)t3gWU!L5g<{`*x*PxZP;bK)Y`Tnq)bte0pYl37z_WN1Dl=JMf^f3fF9ZduFl=yDyiBNhS<;>xvM&ClztFU@xnMjxm1p_* zw2D2^JVX%|C{cOja`-nwhl*@ zn@-Ozt*2wt(zAj>+10_ssyhnrtKl;a)B<9{wqhe0d1Fd0@Wc?!-|y9E7ppRRLs{ZD zdklbjICEv-!q3pG201#;sw} zW1E1~lk{{Vf+QH%FF|>Tcvc*zyIUK#Vt}GXq*vyX6%e9FA=U|2$E^s$(?Jz82+vgJ z$^g+>r#mh<{QavC@i43$E#!4T8$cT&E>;swAhyLo$yx;TBnRe8$En|Sdu+?ekIeXj zTh4S6=2=61rGW%{vh>rq#dVrt#Bpil;e5;ErIYJ&0$O5!F&>fHLNhl+@#WRi38dXu z%d*l>NF+b%-8dp%wQ;BtF#wzwbvIj5XT^0T2JLy4Pj5%p_(=hg zp;h8M!v>U}N$nD#^pz_~9 zfkPrA$sZB_j-TbYy5ci3GUCub1TR3^0GecfZ4nvuN_rU86;_XJ=5RSB-ucl6EA$8o zNs-ktP}*@J_5f6KCg`NOmR($X6Hv(iq{U?m>u}u;_5W&n>!>QXa9?;4wt%AIMhTTvN(rSF;6|iF zK|)HUK|tvS#SPm6q#KlyT+%KYi|%d|Sj3_>-P~t_=bU}cy?2aneBb!|$Fav=u6W;f z&iOpQ=NDVxRD{R`k9=<8zz~QNE^k~aRX+exFlcy-Bt*Y&G)8aDC^K52?uzTut=(j5 z>S)LNEW>=VpI{^82x3#-Ys|q+g+BK&sDoKwYunl7!9ZCGC6aj$N9@d${ok7x+{J3T;CW1S1Yn4KT9mONL#Rr)too66SNuKe+c0ob3Ag-CBmf ze97yW&cccBL5)d=32z-R;_gnkAWj>ir6ENkNRwAOf1;;*{^8Jesl58M;G-=4p?tsg zi~!F^x)mk_%-MV9=4thj0(InH(CenhZWf+W03-^P_{ ztuQpe@2)uTHc{b4*TJ+eg#FQda5z!~yy$@fH&Wwu=uOMCwsZ66NFSiLWFf4_b;-%O zB;$8(?HW@n^e{P{+~*-sXB!ePMy#w_*_P_RzS8<$iIa=uw-7|-l9B)I7}zOKp5vri zwN&7!Ant$C>0(^i91J3<8A|^`6g^-MKXZHftaxl0K8wBU(xp+HW-Y|zq7(9 zf31tLBtAPhdHUoQ{?Hn7@&c%#8d_NvFnV%aq6=IU5E10u2@=x z@JvcRZ-DN95Tv?5oVhWyX<%T0x|HA54`V3m={>9A;?mM^QZ2uqK1q53!wvpM5yYrC zz#HU2dGPy;6`QV05*ZyDkZ!PV*wD$RyZ7J(hGZT!$S|VvLo>)Gcj2XV=(IzC(%!wl zLWUFkSW;@j^}8a7_a0puBUlAv|MViSXcAp~18A8H2<^teLM|vi{=zy;+YMorv}Wmw zy!7`EV~chAy~>6Y2E*}pKtQ+O@P3>RfX%!+7%)P>IBVf)SEQK$FROaPXR-hNe7;$> ze?XImS|0MRODr#lBwCt>2EEo+2h!~Gw|}`9B>bO_XxF6aJw_sJQ(EPjnKv)G?@EI`KOCESl9l;90!R5CErt1d*&yEhto=7TsY&2{pzddHkmLL0MSu z(2alBSt{a2)8iWshzD0u1?Q=K+VmYY&BI3iC&DG;$Lk{urVx@uLUvFF9n8OPDP=iSb)@AL>4{F-mJxt`L7#&z$z?rF8-Dz)E3#;5Chwc^%U6f^Q zf}ODay+g*5NV*(s)x)KjwU=zM0l)!N1n}kEco`UQ)j?U#jgH~{2vQ1izks_I0R?3rse#;3x@y zUbRG199h_m+$L-oS*FV`nqQ0dBzM4U0hQNKKTgCk3onQ~>+pj6a{4W8m)psr?r;+( z=TG2wpWlYl$ZHkI_nwIFS)nJUm#5n~C(qkuO}wZ7s}6S7>w7AF_+Ng}G9gdPji8Dsa5XKksw7hu@S48+g+Ry)(`dcX@cKmZ8#QpTHz&d483xrhUDyemR%;qxL|< z72E4SbN6?#=mHZD9m`sV0~S3AI}PlvGv~)yL4z5MA{_aKgp%uO-cly4h@^fG)SQ$b0h-njt(k(KdyMMo7-yHZ>-=HFxOyb zkrYvdOGx2`0}r`9nGf959H{%I$B+X7zeT44QrbI1hy1M%0b&4(2Lg^=ho(}9II%Q0 zr0+1>A5q!}h2JQs078KEQwq?xWT?@Jg@u9R)27nANF3 ziHD>6txWI|cUfOuw&52V(DBUES3N>yWX!T9`7!0j$I8K^Fuf}X2t$l!kZ+m!NO?jF z#LAAC3hg+3{gO#AJw+p;Nni)jTG7)@Z&0jPGx;MwN2AUREo%B0frsTV@IjjYNDPc( z2aS6`tAxA-LarJ7sNP;3vJRbG$(LTQJjBS4EtA?)APoC=&WW%BDr1!ur&|6Yx{Db| zhew`7X?UdJho2uCg##r7kil@T`5sF4A@@sa+qc}@iA+A z8`6If1ugWnM90y`(CssUhzS5ViVyi!tI1JTwR$wPv}VtNF*sfa8jDvY2#Kp05~QPa z-tg@Re3~}hGO`_oYKZR~B%cmO_wuD-Q_hhSqkCW@(nlQc%ajNpI3nRV)64SqoB(fS z${+*KwwT%2qU`fDgt6FxdMyVU1_o|mLI&>n0=5x>q*#BlJq@5$Ln>G9sXYdnC!ayX z?~e6eRb=Z&n;zKE;|+Z!nxci;mfp+`mi94!MKFmW6!ylHGjP^1BM}?WQ?+VCmj|Pa z;J;W;&_kChM1uu=)E1&}L2IbszXT{@eG!14HH%KV$)z1Mx;M&~gT*u~ut?1mlN%in za8JG==jq7p#Tzgk)lpekS`PW&Xj)>p{oXhuN4n+RdmCy0B9iri;DS|btXm9#;$m>% zDOisqzD+AfNBm8)AWn1Su=(wjayUaT6k4weO@A0E{%K#wRcL79&HxilAcfXKZ#SBn z5*rAGVdU7!lg@4V#CfnZ_-|Mqa7UY?eA&Z^`_1ryP_Eze}SF7 znmM5Ln_BPrX+`1D`?|2&ghKTJNMXfvIv3ynP<_QZIEpf;px~h;Px*56s>!y!Nz^(X z{H_)a-*oPQi?hlkf7G2*+;*7v9gfzh*194y$guz8=D|5DYa_WI5hj-6G2hI`Yf^2`eUiO%zBC zp&TigSO%hD6lYT-4Yy9Xd-;`p`wP!c{|Pb7Qj8>;7{KoC>C8gC4ZW7afHuXg{OLOY z9xv*YOu~76!xPLH!VT7e2Vp|m&VY3Zx3Y`DZS4b#p{c4VkwV`ZzXlwlIA=)BVD{GF zHKlDVzgZx3rgzNSKRyiI7gBlQ+T7Tb6}7n{DBpp)**QZ$2v$l(p^t<`!5EAQ(bl6V zbb)KT4Tf5Lhtz$=EFN*D`*v!Bn=BXb!(uL%CK{|2JI-185uqjvfVN-Il|85P2n+{v z@%k29@OK;Y)D+;0&XhFZdFRwoWgcowF(tk>Ocqql;TZ56Skzx7mTwyF5HgrEx}tUE zTYLO2Tgu!e;UYzgZ6Bt7lLh{$Z|`2%`hH2+8TyWjeL_%redSakB2<{_3$d)mFa zV0}d1%9jY4TrI%5{IdrRDpfb97`MKh;0tHWZsLn_NG11xT8U{hlVc zgLkvkoL4)qXW8F{>BM873)<+UL-Viw`e&Hmv}q1`7ZfqY*)Q$?*s#5?Xh2Y9}?w{i~eXvKqpgo8NtMP_rxGYLn$}5K0QqS5g%O%pU zbFe>ku9pJou<$ZNCbDb|l900)MK(Bw#+~GM(3h19Wi4qHDqmmTy1%sZBJp&t*l?3* zEV=ynmikAPi&Z&DoVQ1F8hYOoTZ$JuF^{c4|87fCLG80f*CEofLz>8l+4v*W?@@}E znSGhYTZQElXwzSym{?PV` z53tF3&3nsPb90X#q2#U0OX+f+PPQ-B7;(ZUNn;yDwql_}Kve<|kQMg?NNe$@QYUT3 z+3NNtKr_HdSZEZmG+NmpKXt;Qz~nWhYiF!Jg~#N!)CGVv`hhvA1tnw34RkGrkI#T< z!VR}iw|06WOs#HY>8P_(Snz-cMWWPO8`kEIyV8*}TBr0TqxDJk$q^9&?pM*$?0~kO z%Onfpne5k(YhG_R{cDAj5kyX7A;N(W*3fE^8 z4fkPMAp;v#Flcf+4hvgkiA zpfb1*?GY=WoJ`#aU6yNhNFYoLyJJB5q{{)KvQ^g+F6*>9hb+7ZPvFfy`3wNc<1XXm34odZvdwPP)vfuu-te^mSp3U|l`5f;dG(;u- zj5*>#VohEFBGq7MI_uCx3vkyEfa`_qCRAeg9>%8LsBq3O|2Q7cEaj_(Q2;GiTM;=C z+Nwr2_y_3#h}9My5tHWOmltkbb=B4J=wZZAL96ufcvPO|3Nvd|U+KB3I-*8FXzNLa z-CC+OE}Y>r)&x3unTp#^?-L0h&(CUpNr_Q?-c4DTmG#;c{*;uFJLV*S@qm?xE#0FX ztgk()p>$p&h6Kh&zy~qGIuArq^DvxZZ(Y09U3Cr-ePeQe)f7wi%5L^%v$&gjDgSO!WPa7~^9?x; zCVLYc8oKZDI%~S7p4UiDq@tL2-lNud#dX_{CcTdnavB-OY8d;`XcYa<(pEa~EY;^;7h0U=7|FD{u?Z<65i@5Da zTRaq*nFT=xN-@u||7ld4ra!Mc|0?!mVQNEzTmMyyD_t?FDT!3a=H-9Cq_*C!`gM6$ z&_B61BKqDvtX!Ddy^VY1Wxw{yXC6(G-)P2^OYikZYk$uiQm$^Ud2ML><*98k z%&B2D&m_7{&IgL|U%0TZMG<=dE;=^bqu*`jozn0FFvxbE%n5}?HiD@_b+7;OqQ1U8 zRBAJxQpY01)z)8zchz;Cc>aT00bY^t`xX3VvoybPXw#C-b}s_&+VuUrBf|&weznAr z5TSG1ZRaA^x@c^R)tvq=d3w)cvg0%L42jc`z5A_FAK1n_I;*Tv&9gfzP&iV1yLz*$ z08BcnnrXbw?zeQ`Cm!5=)qmCKCFhXGw|=V=`agn&()7ws&tRPPr8+7K*V&kBKGnS5 z8v!_gNYHQ#s5`7z-dxAL+UI1c90#8t<{L^{mwc5IBl^g+HG;-@EHD0iUm5KgAHIJ@ z^j1d1T}NY^G-S+O)FTo^Tsy*C8?D)aFC6U}|HuA!(F13Q(E*{Tv7We2WA}AR%0QFd zIZk|uJ4K_A3h92^$|D1;`a5mvb?pcG>SuUQzF+96l6{*GQ`*D*Ov;ItukhW!u2KkX_EFU1v{<1NC~QijVLIho5CpVI_$u`K zI|D0)3ofc;f3q6D?ibdT^_VM(Y3)A68rfhfe2hdEzVuijT_6yApFhcJ2#qm`z z9thiaZeme%^$=LQmm=&8R1ih`=lT`?dp}uXdTp+vwtV5yOR&%p78M&GgvC z%A0p_kIb~n#ZxP)h;%!SA3S*MXYkq`lJLMgy}Qf_gw^!`+G{!!+&frVfd ze4|lg#fGi@TsarJ0tnD@7;1*~wr1Xh8RB^6MtbE8{rL5(&t|_U9?3D-y_kBEk%ON2 z{p1=c$@9IXcJM)#VJ~s|w4u0H#vB_4XTy05^mRC^;fB~#%lRK1)K`{H5 zhK7#?=7*tZIu#hWkX)%OEBg+t^kvdu;0hy1M6Xz%DIC(7ZQA2JRbYYcR2#*2qgIG# z>!PE3(It^J3RtJR7P^XM<)xtEE6H85xbxTWSub~2FUQ&b%YX-GK*c27I-BuI0oF?P-MIVW`lbHBPbN&!Kxh+jd?xK>~pPW z&Tk!6zdRYyQ)eLWTQ}?{U^L&8&nzY!*mgKxrQom^^1~2+ zU}0YkO=@hZLg7hj>Pt5U>{M5BV5Eo#WXx!1Ydr_ByL|^8A(o`Xx>3A#Vpq4;@A@qM z!n?&N^+12?X?F3Uj(gnJ8s5WaCEgvdqx!V6Hu$uP-sUUCjcP5En2_-uG!lkEXdcY( zsut$wpO|%|g>dSZiMmGUSpz4+FJ9dqh@`IFwoux>%0uvzA)=)##1`HY(=U;P!pkHs z6iyP>?$QEVuGD)M=j^Uy*k5^3dI7@415j`f8lR4BgDcTB&vY;y85h&NZqgV{_g`GF z$y#uCWq}D$RSqx@Bg-KPi10ixMcihBiu2!GFh?OeO0B%*Pi|K|i|aLu^`q1NkZtH@ zr?qiVr0p(>41Qa`QF}jn$osd;Biqm>$$1Q;sFO-8lJ5d8hypprg!fc=OqVVJC*f;U z=4Pfn(6XGhrFxP%ka7=+LdM)*zI;h=uDr1i;_Qr2Qc!dkp45r|4 z-efG?#~ci!bGF38;wG+ z$?DiTaN*Mo6jN1L=O*xhdyv;}7tCAc4QQfP|77arDKGcecuC$mdow?Gam zb-A-Z2vfjitq=hG)x4i)dQp69-rJ7YIg^K!yTh;HT=?H?F#~N^qSYnCfu*DnSuACo zRj2hMTTjP~wlm4^_+wQ?xxe~$IM^_Z57U(sV8o8s@qm#-H89AIxtD}qI|uA;{OKQi zN5R_t;mwr{MP8tj3k59cClfw{m84?IeO_>$lx=zf4V7ag!w|)0kd0`Wbb{ciHHS?7 zJI}po3CAl6yRTq?F(pyCXSW$X*x&!2_$=`>?P{OPy7{D%kPYuWAe5U7ojpTyDXbuq zRZ^tu9k6Buzhi#4ZO3QU^L==CH8Nyu`Uf2*Zmsafw236Da;@ucMpCQ3y89O6#<*9- zDa_#jm9aUw1z06DGxUEf?ok?{%{q(ENh-qj>Y{EPbC+bdGDB%Uq4EPQE@gm_oY*3r z7uh@huYZV$a%5wzTbS`RT3=zxc~o^$3(wI)UMcmy=RHZq(B45!{t3X0g{H=Ds+Csi z&BeQ#wY1h6@=PRN<$KEf!zUslD0|$7oz&-M{opM&Pihs;g&P_c#de%ON5_mjA&HS= zV;Sbx7V7=e$EsiEk&a`CbPwrwGVGuI$7igiGO^uNjJKdL(#zidM5nle6TM>pIXX?m?;F`w0sCIy>Sz1z+?H?<301^mLaUD_9i`N+I}p|}go zu=mRSmuX5AMmr{5CuNoD#P8fI{oE?_d;ly8XoTc*SEiIcCuhEi+k@>`kI3#eoaubn z)Vr8o$x~X6+1hiClsF=&n`fyN8pJmtnT{s&k2JVHbN{=5P5uaBPT82#i(!kOru%+1;ea z>YrTG91DTeLVY^XJFryRdq8RVijzGfMx}qRSXzj%Eq+pWu_t@?Q@h|fW~kI+)TvCN zzhBq(y%zQ02FC=}?Go3}GBTNqiX2mn?@PO_?m+lBze|0O1f#U~R7qr2tb!2JAsuuQ z*nGRa3f@AvgZJf!g<~(;_;`)B%b2ywMm|LprY}0)m{qP_-Mana;JB>XJr>qiD;NyV z-gEKfsE2iA&Mo6C`Kwy~G4$XC%kn($kj5z~vlAt|;jC#JILFnvn3rgC7+Oq~49h3K zqkj3rLhENaEkXyW#I-#~Cqb#bY9DVhdcQFLmdb7yLFTTUPij}CyPYBSn>Lgdl$6wFYC;?BB?C6d=QLG2`wck}g-^9vZ>&9o)c%AGHzU5nb?k2UN6E(83A?M*|TGfzH>Q#>v5y1< z4rRpljT{I*enkeF&(tsr7wZ_(-i&gsI(vGK&-T7zVbH}yjcc5s@bk4xlUl!onU_R+ z$#9+=33h$EyfyP-wCV%bE6rE|H6a%4VqW9pzgmCxkXZV~_NkI&9V{7?6HLPPo$Dtq z*2Pft77e67E$MGfh}Br3!pw7{2KTXqtD(RJMWwocAQ#z&4GXIjV`DD)x`2_IN#37L zidL4334ir9eAn%zJ+FWL3wdrx0#lBwx#9y0(gF6D{(b?~pH5u9+2bIjZ)>ugQ;0$ovL*U z{f)tfDVsK;VqB7R4E0{o+NMub9IP!_D9m$xS$5Bk{s?(H|GMif!^r>alPuC#MKR=H zC=*RncDyf)zHiW;H@<;E@u1=OEtxV-KECuWHSa0|wm_q%_l7-DHfpVOH`fm(3XwLu zx#-vqDAmnBGMq9((u-%7X|ms2Pg2uO@3?7u#^YxE>>nk0a#58UK&d5)P}_sQ;v7UXU}8Wg@)_x5)KKBj|8pb@Idm$A8+--s#w0ON+i~{G`z< z*9*hXt8q2b)qUK)WLYo$-upZ?&fLhm5*RNpXwwUOgid@CDK02IxYIilBXa7ol}kBm zT{iWI>0IIu<8$#w!gK^{AMQH4GH&irqiq3y5qrs|;g!0S`qjhUyxly3SCVutu zuBCX}Lqehl-Y!LZd@^L{Mz!y;0@;Ps_g_*|BGwB9U-*)bQ^+h*NW{3Rc(aJ!V#cl~ ze*6AICgS6~n~RDh^CkYzGD(hZ6iHqnuziF1gMos)-PP0bU8n#mk<%Uj49XHz!q&=F zJhGG|`)hi}XlQk)D66y3YB#K&rQGst$dr5wSl5Y8DG#i2(acmf9~VTmiS?MDfwiR*T+V>t@WX zs|NfmSjrgTDf4iv9Z4tefuj#%x?Ucq2yNz@5Kxqt4+148*x;Q3 zjhX@}?cT3`h55s(B~f~oob(D*j>nxnubFiEl_-ONw@JxSwCHdTD znZNk!@iP<@*RU?8cqo6#>+t;y~V?D09Gc;l+>({rA9bCE)dB{*)$r~@~ zFP0cO1+#;y0Ta1tt#%+G*N|yt;n$@da;;zW~-QujOCsVk^?Uc~5&*H8T zZQG4Re0TCqd_L^; zlV-bB^)v{DE;Xe6FkGF8e#Mo8iz_1hDpReC?rbhj-bB%(3m$uJJ+xnaQ6H$%XdL7dpiYHuv7{<;CVF=e2Im)XiGXMISf) znM@8PL_quB{vm$Lzerbvv}Inv$bl44=2tIxzJfcwNsRZuHlelQF4~tMR+qSN0rSJ` zXWb{rLV&J&USnml4E}}$;os)S|NkZkzW{sp_$Sa95$1qcETk)TiHl1S|NYXTm*7jJ4)%=tpwEAF>tC!1xKNu6GwU70g&=pj zo27&2>!ra~cu1Ug26`on`yWqkdJh2+`Ki_8zyIxI^BNROCcTRm7mpx*=l?l&d6@s( z_wO~JQ)tldKK9>J92mRzkxNK;h8$k>4h8>D@|r)zAO{)b!GuJX!H{ZgDfL=SQS!Pg0nW}+{U4N_vx*4tOb`#BX zxWeXUmBomK^4)D^&_2(EjQc*f?EX|4y*t&B9<@6M!*)((>~e54_z*O!rp#z1D@2Ia zffAo_vGk@m56Y|#g&1ol={{dyUwI_L296Xj?hN^lRXj=v(h{?uQd`{h_2~Lk5VE<; zFrW`)q=ub-=b6gQKVLs&^iu8t8xlGZ2L&`_2dAL4^{XH+#?>Dh0isX6r>0yO)%oiR zjS#YmoVOL?5q0sDT0{6XNfi9DSgHQUcB>ocSR#lUKf(FqE+W4fu1xpjn6_NPiR%}) z@?>mCNte%~(LMR?tkX#`%i=BIA2j3^fimclAd?XBm{5-GDDc)ofMyYnNxkZ#voQwi zq8ePc>pkmHWYxNIUx()>_9BF~_5x|lKnpIgZ9jYq|1qTDgiPY_rsrEIL=N%%@qmvi z78Ct1Y-qj5MSw-A6bNrb3;kX?@Obc)%s;P>5$ST1wQBkB*YrTK#-P&(MH^wm`)`jU z+-cyU6Tz6dBwdeiy2o{}6d&sGT!B<-_y}g?;e|W3-OoN@f3T^wA{X>vum>1;khd^$ zWHdQ!d#-^9g=68mM&^AMq|!ZNYTOtdF(S=JkrU@SD`blWzv#Teg3@JA?}MiEb91(M zckl}*_)>3+55v@2Acl@+JL{@pb-*;^C=hCyKyCeb3pjTRpkQ>G=N!%x#0a*wwb6sg zs~z}yux~zwm~KHxZHgM7Mo8Uz>lnmEZ06GddaE?d!WTG!?zY)*y%VS3)Uz50hLu%_ zUAFxF_1UOJtXXTKDDg~Ej6GI&1xTi&nyc_xH|mgqE2+QiDvmh$k05}{0ZgDXe+q_* zXV#rBrR*gQZ^0Kj?P3mK@R*FEqCnTOd)l0aMkuG&FG0{=`5A$3;|XjcLPhXUOnAUD zNtn}e_ZMkv8UUq36|fm}Cq@vHMNb(_*?MphfLaTJ_#$lF-3>I3!l25DF*%PgnVuhT z%WZ!&9hybJk5(RIpU39AooO;upkVw2GaYFcT)sv-4f7uW0# zY2`7=$3D&3qU>)bX6A2CLCGMb6e}8GpgTaYEF1_mIS*=b8}dVk#oQY4S+5S4d5n0J<2yw~6a4UPJQLocj06Lv$WijdK($&!#nv1?pe;WBns zA%$lmVB$l;0Nfpgra4%=4fE@8b@9uBVsrAhZ^m_1R#rOeojuUf^=f5nYL^4R0ZFTY zn|+4}t9Zc8bwCaF*ryD3*;OGIk7KS_%{C^L98;3+P9Q~$!92iNFu}uXlCB;i)ju>> zO`Z@=vQ_MV7aAIh^;Gbc;L$JBfn&{tkUDWybB$GFCPUxJej!A#impb+Exks`tWO3hd8C2-+tZ{iZ^u} zdZ37HzR;~(v=e{RTOrC~KFZapl#jS51_K6Uh=Ay~>yjzA7y56^8KxU*i8@H-RaZv5TYn7Ug|j8_7)^%xy5acWx^JbtP`7l7U39QFgPq#2GB=;`LA){P+sjr92_$%2@FAj!XJWj-v}8bc#%5i(HcN$8j2V(HejaG0Y%-;VkocJ zx;fDao_hh=H;_julELu6y@|+9s_2yurYd1XLKwLPXd?*OaDhcf#xbjAftMfzU~%p- z3c|82`E*B99k#|ijcnBvCBpWcoCnAxpT(AW%$Ba|MRH4&HBm5%_2*53zjwr35&R4= z^9!qYhcmCVZ}Tt50P9sHKw$4r#*< z*plV5DV-XbVE6hE$}}}tT0E)Mn`87EnTQ*^&bAI-nz=c;SmtB~DUY2ki*cKa_gzQ% z8GS|a{62*?w&n_>=8gG7Q0f%> z$A10CKz}vmJz!2szfC&&a@t+p_`YH*+0d|(2=S`S_EQaC4WYIdY-#atzW()7;HPfn z8yVjeLL*_Co4zqkKQhlav6HIPtNN6w<6IkKCU?=qrA4DPAfN`oSrgmoV0V5`PyOSA z_;amYlh1vPZi8oewo4kfwcLy1x{v}zHG-ccl9i*qiOg~GTJy@YMRz67&(S~-UB9Uq zlx}umnp?ugwA;#HRS_B|0^T29f=$WxO9%WNf!^VNaiuQIM?TJa&`CbR~YWhK!N zl<-+n4CKFU>7%L6y?Mo}X7lfR9^|hojZYB!hxndC{9rW)uH+K3c8<_6KcIS`r9yk$ zd%;=1WCDNUYqQNbpy%3C=dCGG0AlMsbIJ%3*E( zp)-)>6&8-0+&@|w!=nl&sJya%!IUwrJR`_S^N7HbJS21ZUYQJ#R($htdps8`Xl-?y zN+}gNH7cKkYl#%GL_$FtgUm50u^-8}v7!VrgJJ`cIhoNKviJo zFxd^dy0dXCIx(K(uM6fT^A^FnfgTaB6O>|vSyKa9vx>k?mmcc0lzWuYK_e&<vL9r%N)l5%*JHR0vVVWy}jjeMnd$B^MoosG3P)O>eJ zUF@sCA~@KZ8haY|AHlBBx|X~Zsz5C)Mth$@i0R&^8~&fWV)Q~Uu6-^N=JB)rtcVB4 z_NHC`@fLa^Fw{kvNI)4e;fVs(4f%lsC|{CnXBy=!_)yZ{AFZN?89WM4LP@I{e#bD= zh)FiQnDL-yotlx62N@lr?4G;=yz8o!Gq5(1x!NP?jsBP>6C`Yco_V3$z`q7Q-Ftw%|N5VNrC5L-38;(UX%9IY0M1wFqLvb+k%Cpj zbYEc;xe4m9kSD;#>YV;4#tFimk{z?|rK=ZMzJPbr2GdF=EpVmAy@?t)Jrw0SyozQ>9tq$Q3F64& z={_hPOVvQ)vUHV308`)%9Ov-Zf#=81@yh@*5KjMi&s`Sy*-^0r@EDG{&JN^5$R`r6 z8-YwE<)7ot5H!W-rsFvcGYl`jsuQLduc0d-`n)A2C2MNhIfw7%%fJ?)!#&pu!ZIeG zm8=t@kj4qJoLqC=fXmVI)mfnW6Q|B+m5rrI1BQf~hENVE;y&g=?Nb91P|FosX#RYR z(7nh3KY&6XMx1W3I(PY&%}YPO>tA)}Aoblg8js2yom&C4xI_oRHxX% zQb-MC(#C%4U`~Je7j4M&1&g{+u3tw`kA{wZ1Dh%&mT8C-;2Y0{V$KGP0BVpuM8+zx zrsV)1X%L!he(#Oa=cCC=PZQv7Ao5XFiAUaQF{C3nH-;2=7pTHIVd3Qk@8i@f;zBp&~2JJvRR`_}=e$qltT4;iJ9`nR_ z?;bHhU@mZfF2I6Ejv2McDZY6C@#!}OKDHBudDfcWOA0Zhle}oO?AXlLQ1o3&i?S+` z1@9S>oVD?!3}tqFC{v@+S(rDon*D3%}5GRTOwq3>~TBg*?djDvb3% zSbokFv=g?*?1hx}9V1VZB?Enr(_TUt4`gRV#G64lEn&^(kPpa>UCr%fR^ga>M36Zf za%R{}Wqhh%MBmQyuL#JUK2rbn%a^0N8e~coP6G2C3B@(Zh zY7?``FpUAQ@)&P`LE_9tt?kRd|9+wnD=Jh~1aHQ-S_<$HsF=X&*snL=LWGx(uVDr? z=*xC}jY~VIHRk?2{CwKJ185L*ked258lK1=lovt=8NJ%?;+havSGF7;J>WvjG+u`) z&eF=Gym2-$#R@U&i=SeKKLdGfd?=leAXP_tEn z{M%7MFo}IOJ}A7q7cw*g4^cyIe{a^T#>`Op&`Ab{*$EKZFu@e2LPRhq zr57%OA%qPmNNZtnM_?81`8H3fm??g=7tSke>!Ek-f4Fns$a=|nvMev98$X_pjw5L& zLVbh~15VP+UdHjx#Qf0b&w@e2a=yMq6`h&NdaPsjdcXErN8TqyAs~#oy(ezNr3nO| zCzsFO-n*MFdy>kFztnM4-~d&B-5xKnq-)k!l*?$zw+y=tp3W+xY-5UpkEhq1%A^s; zI5SfSu~ywnCoHV(9!d^_XaBL>SO%PJaV)Tgl2^6#4H`4XlR)F#cpRl_dq|GE2(vvZ z0*mE_6KeF7>5}U9S*fiLlZqhX*%FxvoO&{Gq8EJllAGO4=hFf4>vijDk&yPLruRrE zPKqkgC#QW4w;vL|(LsOin=rWA#2(qn=>6=%DLluw>Jr-j^;J3msqU2hNtLk&!;84+ z?`BjDH{yAYIuf$XwY5m_eC}c{V!$9P$LA_rT+Oh}K4$y{mR-n-U~7ID(cpAr%fA#H!?4o<52L~w zWt&$BpH=lfsu-KdFWZhpS1!*4@b6Y=EapQ+KHGesI@8{YT@R6N{U$5tYMjqD2PNt? zmKRIcBCBOwt?aq2?u=1BS<vQ1EEnd1B-@vnoXvyrwlDJ?+chSHS{c-5 zuw8m%2scDkGhexOUvr1EgH({!WdB2~r|_4@|=wk`as zGQxhRq(=$!;4G>Q%0pvgt#-_LIbR#gp~&7NUiPLLtb(nHDvb+7#atJOd<`|DiG(-gSt22%H_BS9N?>SRCo2tK*>#ki)|IK&hrv0C@wP};`Q}jSs z#w|@%MESb2O55^bX3BW2P)%4FW!`uRq>Ni_Kly+ycWL?dD6(P-(uoCbX3t7D6;oPv z-630NnQM);ZJT5rHkNrjAFzU!Ma+IuO32g*SIKD^176KYY3E- zcApnfnf&Y!!_`ukUXJMuuzDs~&nnak2Wyd?=6X6pr>4zMmfwnx6h7S>5qh)r_>ab~ z508CVG><{VD+2C}D6v@w>(FpJ+Vzj@K?k;Dwz6&azeEb*KiPh$j4wzqzUAPN1(g8* zxRz(LN^cOZv=-nLs}+AnInU`QDJepZ4o{4hm$a)s_N3UC&4BUXI}=@Ecb@K&^l5i` zO@2&Qj`CkE@5mO%n{HIvT5Y)4dFaW>YnusiTf88{3@^2Sz482c;nSKH<5y-ZJKiVv zzD~0h%CG8-IH+)reR4~mf?Yt+KKW)A>#cJTwg;ADo#fvl0mRd`_xmVzn~YNNN|LPw zD2I()4%>_0zbk8jAx3M(h(Px$&qt?qN{CCZq&v9bX`zX-Z;N^9LyEucJ{GVJwa#c& zeY91`7xg=+aeqqM{~lw?*Q|WQz)-y_v$k^z#9%+Qp3RC!&bB!)#N2A!%Szg;6&MOnkyP>5o zT|{LmpGlEn$FPbBZnBrST$8@`3ml0oz^yD1ZCk4>=CT>m3nHwfJ)4{HHNxeE7d8^= zq58HaWI_+szBTcoPapJRsZ1G7RnDJtS?P)=KDfEr<&KVVzs!Sbt*YV~nPLq+*J?u2V^lR&fh%NA-9Ms` zWaI}8tuVv~TGaMVEJJ=q-3;|D*l`@70IU`*g9L0pfWrr#f{nT;(Gz+MKUDQhOY#6A z_WD>@-ivoqb-SRrug_eZbUS_^gzQSj@xXN6yIGKl_T?$)`p#+|tieye6DtQtKUF_7 zaF_Cfetf)#uveAd>PrUX-Vbj(E)0+?aiT3n`B~M6nH%61D-Hggiajjbt}w|UT$W8_ z@k5ZC>V}+u5;_DjVG0mj+6a+eiZz_rgIHsCrA}wAkH-VS?=yS^q_GYlvmc_9hJu|w zM#Ryf1O^ew(Sb%#;u*UF6z}@1=@@1>_QG}*(>rkb7K8S4@qguuiPIv6jn;OOYb zKBtLpO8Q4VW@Jvi>j2Z-rs#1#v%dcFA!2}0%upW`q(@E*S84l>5U)Bt*T>8sCt%1R zpRMtGJFM5RyJUZZ0dG14=B@A(b6CGD1Vd91KDZ4jmi6_EdN8q?oU{hd3N0G;B|Kj4 z8|)A6u)BGAeTaz5ueuYYXLkGNmihV@PqT=R;M@_u(xImh&)&=QSkUhWF(1QtZC%~> r-+yon?JMx-|8ukT|K=?&ILz-F%Gy0Bv$?L0zJ#ol(ygpNA3XnGF}K$~ literal 0 HcmV?d00001 diff --git a/tests/allreduce_latency_plots/summary.csv b/tests/allreduce_latency_plots/summary.csv new file mode 100644 index 0000000..a58d290 --- /dev/null +++ b/tests/allreduce_latency_plots/summary.csv @@ -0,0 +1,34 @@ +algorithm,sip_topology,n_sips,n_elem,bytes_per_pe,bytes_per_sip,latency_ns +intercube_allreduce,ring_1d,6,8,16,256,3073.1299999999937 +intercube_allreduce,ring_1d,6,32,64,1024,3079.8799999999947 +intercube_allreduce,ring_1d,6,64,128,2048,3088.879999999992 +intercube_allreduce,ring_1d,6,128,256,4096,3106.8799999999865 +intercube_allreduce,ring_1d,6,512,1024,16384,3225.8799999999865 +intercube_allreduce,ring_1d,6,1024,2048,32768,3391.8799999999865 +intercube_allreduce,ring_1d,6,2048,4096,65536,3723.8799999999865 +intercube_allreduce,ring_1d,6,4096,8192,131072,4387.879999999965 +intercube_allreduce,ring_1d,6,8192,16384,262144,5715.879999999957 +intercube_allreduce,ring_1d,6,16384,32768,524288,8371.879999999932 +intercube_allreduce,ring_1d,6,32768,65536,1048576,13683.879999999903 +intercube_allreduce,torus_2d,6,8,16,256,2190.4799999999923 +intercube_allreduce,torus_2d,6,32,64,1024,2196.479999999993 +intercube_allreduce,torus_2d,6,64,128,2048,2204.4799999999905 +intercube_allreduce,torus_2d,6,128,256,4096,2220.479999999985 +intercube_allreduce,torus_2d,6,512,1024,16384,2325.479999999985 +intercube_allreduce,torus_2d,6,1024,2048,32768,2471.479999999985 +intercube_allreduce,torus_2d,6,2048,4096,65536,2763.479999999985 +intercube_allreduce,torus_2d,6,4096,8192,131072,3347.4799999999777 +intercube_allreduce,torus_2d,6,8192,16384,262144,4515.4799999999705 +intercube_allreduce,torus_2d,6,16384,32768,524288,6851.479999999952 +intercube_allreduce,torus_2d,6,32768,65536,1048576,11523.479999999923 +intercube_allreduce,mesh_2d_no_wrap,6,8,16,256,3508.4249999999993 +intercube_allreduce,mesh_2d_no_wrap,6,32,64,1024,3515.55 +intercube_allreduce,mesh_2d_no_wrap,6,64,128,2048,3525.0499999999975 +intercube_allreduce,mesh_2d_no_wrap,6,128,256,4096,3544.049999999992 +intercube_allreduce,mesh_2d_no_wrap,6,512,1024,16384,3667.049999999992 +intercube_allreduce,mesh_2d_no_wrap,6,1024,2048,32768,3837.049999999992 +intercube_allreduce,mesh_2d_no_wrap,6,2048,4096,65536,4177.049999999992 +intercube_allreduce,mesh_2d_no_wrap,6,4096,8192,131072,4857.049999999959 +intercube_allreduce,mesh_2d_no_wrap,6,8192,16384,262144,6217.049999999945 +intercube_allreduce,mesh_2d_no_wrap,6,16384,32768,524288,8937.049999999937 +intercube_allreduce,mesh_2d_no_wrap,6,32768,65536,1048576,14377.049999999872 diff --git a/tests/allreduce_latency_plots/torus_2d.png b/tests/allreduce_latency_plots/torus_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8bf2dd5e300b4ed558e07b0c4c6ba096d06dcf GIT binary patch literal 37983 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 =a{LYr$_#wzAYpV`|$4ai{ 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

8Ux0u} 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 Z_LdHr26Y#GOh*2+jHJT7g1d(P{|k?Q{f__u literal 0 HcmV?d00001 diff --git a/tests/test_allreduce_multidevice.py b/tests/test_allreduce_multidevice.py index 347d61e..81e1093 100644 --- a/tests/test_allreduce_multidevice.py +++ b/tests/test_allreduce_multidevice.py @@ -22,13 +22,23 @@ from kernbench.ccl.sfr_config import configure_sfr_intercube_multisip from kernbench.policy.placement.dp import DPPolicy -def _sip_topo_dims(sip_topo: str, n_sips: int) -> tuple[int, int]: +def _sip_topo_dims( + sip_topo: str, n_sips: int, + spec_w: int | None = None, spec_h: int | None = None, +) -> tuple[int, int]: if sip_topo == "ring_1d": return (0, 0) + if spec_w is not None and spec_h is not None: + if spec_w * spec_h != n_sips: + raise ValueError( + f"sip layout {spec_w}x{spec_h} != n_sips ({n_sips})" + ) + return (spec_w, spec_h) side = int(round(math.sqrt(n_sips))) if side * side != n_sips: raise ValueError( - f"SIP topology '{sip_topo}' requires square n_sips, got {n_sips}" + f"SIP topology '{sip_topo}' requires square n_sips or " + f"explicit w/h in spec, got {n_sips}" ) return (side, side) @@ -54,10 +64,13 @@ def run_allreduce( topo_name_to_kind = algo_module.TOPO_NAME_TO_KIND n_elem = int(cfg.get("n_elem", 8)) - n_sips = int(spec.get("system", {}).get("sips", {}).get("count", 1)) - sip_topo = str( - spec.get("system", {}).get("sips", {}).get("topology", "ring_1d") - ) + sips_cfg = spec.get("system", {}).get("sips", {}) + n_sips = int(sips_cfg.get("count", 1)) + sip_topo = str(sips_cfg.get("topology", "ring_1d")) + spec_sip_w = sips_cfg.get("w") + spec_sip_h = sips_cfg.get("h") + spec_sip_w = int(spec_sip_w) if spec_sip_w is not None else None + spec_sip_h = int(spec_sip_h) if spec_sip_h is not None else None cm = spec["sip"]["cube_mesh"] cube_w = int(cm["w"]) @@ -65,7 +78,9 @@ def run_allreduce( n_cubes = cube_w * cube_h sip_topo_kind = topo_name_to_kind.get(sip_topo, 0) - sip_topo_w, sip_topo_h = _sip_topo_dims(sip_topo, n_sips) + sip_topo_w, sip_topo_h = _sip_topo_dims( + sip_topo, n_sips, spec_w=spec_sip_w, spec_h=spec_sip_h, + ) algo_name = cfg.get("algorithm", "allreduce") print(f"\n{'=' * 60}") @@ -173,20 +188,36 @@ from kernbench.topology.builder import resolve_topology TOPOLOGY_PATH = Path(__file__).parent.parent / "topology.yaml" CONFIGS = [ - pytest.param("intercube_allreduce", "ring_1d", 2, id="ring_2sip"), - pytest.param("intercube_allreduce", "torus_2d", 4, id="torus_4sip"), - pytest.param("intercube_allreduce", "mesh_2d_no_wrap", 4, id="mesh_4sip"), + pytest.param( + "intercube_allreduce", "ring_1d", 6, None, None, + id="ring_6sip", + ), + pytest.param( + "intercube_allreduce", "torus_2d", 6, 2, 3, + id="torus_6sip_2x3", + ), + pytest.param( + "intercube_allreduce", "mesh_2d_no_wrap", 6, 2, 3, + id="mesh_6sip_2x3", + ), ] def _write_temp_configs( tmp_path, sip_topology, n_sips, algorithm, n_elem_override=None, + sip_w=None, sip_h=None, ): """Write temp topology.yaml and ccl.yaml with the given overrides.""" with open(TOPOLOGY_PATH) as f: topo_cfg = yaml.safe_load(f) topo_cfg["system"]["sips"]["count"] = n_sips topo_cfg["system"]["sips"]["topology"] = sip_topology + if sip_w is not None and sip_h is not None: + topo_cfg["system"]["sips"]["w"] = int(sip_w) + topo_cfg["system"]["sips"]["h"] = int(sip_h) + else: + topo_cfg["system"]["sips"].pop("w", None) + topo_cfg["system"]["sips"].pop("h", None) topo_path = tmp_path / "topology.yaml" with open(topo_path, "w") as f: yaml.dump(topo_cfg, f, default_flow_style=False) @@ -211,10 +242,15 @@ def _write_temp_configs( return str(topo_path), str(tmp_ccl) -@pytest.mark.parametrize("algorithm,sip_topology,n_sips", CONFIGS) -def test_allreduce(tmp_path, algorithm, sip_topology, n_sips): +@pytest.mark.parametrize( + "algorithm,sip_topology,n_sips,sip_w,sip_h", CONFIGS, +) +def test_allreduce( + tmp_path, algorithm, sip_topology, n_sips, sip_w, sip_h, +): topo_path, ccl_path = _write_temp_configs( tmp_path, sip_topology, n_sips, algorithm, + sip_w=sip_w, sip_h=sip_h, ) topo = resolve_topology(topo_path) engine = GraphEngine(topo.topology_obj, enable_data=True) @@ -271,16 +307,17 @@ def test_allreduce_latency_sweep(tmp_path): records: list[dict] = [] # Apples-to-apples: same n_sips across all three topologies. - for algorithm, sip_topology, n_sips in [ - ("intercube_allreduce", "ring_1d", 4), - ("intercube_allreduce", "torus_2d", 4), - ("intercube_allreduce", "mesh_2d_no_wrap", 4), + for algorithm, sip_topology, n_sips, sip_w, sip_h in [ + ("intercube_allreduce", "ring_1d", 6, None, None), + ("intercube_allreduce", "torus_2d", 6, 2, 3), + ("intercube_allreduce", "mesh_2d_no_wrap", 6, 2, 3), ]: for n_elem in _SWEEP_N_ELEM: sub = tmp_path / f"{sip_topology}_{n_elem}" sub.mkdir() topo_path, ccl_path = _write_temp_configs( sub, sip_topology, n_sips, algorithm, + sip_w=sip_w, sip_h=sip_h, n_elem_override=n_elem, ) topo = resolve_topology(topo_path) @@ -339,8 +376,7 @@ def test_allreduce_latency_sweep(tmp_path): w.writerow(r) topologies = sorted({r["sip_topology"] for r in records}) - # Per-topology plots: log-scale + linear-scale side-by-side. - # X-axis = bytes per PE (per-message payload size). + # Per-topology plots, log-scale x-axis = bytes per PE. for topo_name in topologies: rs = sorted( [r for r in records if r["sip_topology"] == topo_name], @@ -352,7 +388,6 @@ def test_allreduce_latency_sweep(tmp_path): f"Allreduce latency — {topo_name} " f"(n_sips={rs[0]['n_sips']})" ) - # Log-scale fig, ax = plt.subplots(figsize=(8, 5)) ax.plot(xs, ys, marker="o", color="tab:blue") ax.set_xscale("log", base=2) @@ -364,58 +399,31 @@ def test_allreduce_latency_sweep(tmp_path): fig.tight_layout() fig.savefig(out_dir / f"{topo_name}.png", dpi=120) plt.close(fig) - # Linear-scale companion - fig, ax = plt.subplots(figsize=(8, 5)) - ax.plot(xs, ys, marker="o", color="tab:blue") - ax.set_xlabel("Bytes per PE") - ax.set_ylabel("max pe_exec_ns (critical path)") - ax.set_title(title + " [linear scale]") - ax.grid(True, alpha=0.3) - ax.xaxis.set_major_formatter(_bytes_fmt) - fig.tight_layout() - fig.savefig(out_dir / f"{topo_name}_linear.png", dpi=120) - plt.close(fig) - # Combined overview — two variants: log-scale (overview.png) and - # linear-scale (overview_linear.png). colors = {"ring_1d": "tab:blue", "torus_2d": "tab:orange", "mesh_2d_no_wrap": "tab:green"} + fig, ax = plt.subplots(figsize=(9, 6)) + for topo_name in topologies: + rs = sorted( + [r for r in records if r["sip_topology"] == topo_name], + key=lambda r: r["bytes_per_pe"], + ) + ax.plot( + [r["bytes_per_pe"] for r in rs], + [r["latency_ns"] for r in rs], + marker="o", + label=f"{topo_name} (n_sips={rs[0]['n_sips']})", + color=colors.get(topo_name), + ) + ax.set_xscale("log", base=2) + ax.set_xlabel("Bytes per PE (log scale)") + ax.set_ylabel("max pe_exec_ns (critical path)") + ax.set_title("Multi-device allreduce latency by topology") + ax.grid(True, alpha=0.3) + ax.legend() + ax.xaxis.set_major_formatter(_bytes_fmt) + fig.tight_layout() + fig.savefig(out_dir / "overview.png", dpi=120) + plt.close(fig) - def _draw_overview(log_x: bool, filename: str, title_suffix: str) -> None: - fig, ax = plt.subplots(figsize=(9, 6)) - for topo_name in topologies: - rs = sorted( - [r for r in records if r["sip_topology"] == topo_name], - key=lambda r: r["bytes_per_pe"], - ) - ax.plot( - [r["bytes_per_pe"] for r in rs], - [r["latency_ns"] for r in rs], - marker="o", - label=f"{topo_name} (n_sips={rs[0]['n_sips']})", - color=colors.get(topo_name), - ) - if log_x: - ax.set_xscale("log", base=2) - ax.set_xlabel("Bytes per PE (log scale)") - else: - ax.set_xlabel("Bytes per PE") - ax.set_ylabel("max pe_exec_ns (critical path)") - ax.set_title("Multi-device allreduce latency by topology" + title_suffix) - ax.grid(True, alpha=0.3) - ax.legend() - ax.xaxis.set_major_formatter(_bytes_fmt) - fig.tight_layout() - fig.savefig(out_dir / filename, dpi=120) - plt.close(fig) - - _draw_overview(log_x=True, filename="overview.png", title_suffix="") - _draw_overview( - log_x=False, filename="overview_linear.png", - title_suffix=" [linear scale]", - ) - - print( - f"\nWrote {out_dir / 'overview.png'} + " - f"{out_dir / 'overview_linear.png'}" - ) + print(f"\nWrote {out_dir / 'overview.png'}") diff --git a/tests/test_sip_topology_rectangular.py b/tests/test_sip_topology_rectangular.py new file mode 100644 index 0000000..2a0288a --- /dev/null +++ b/tests/test_sip_topology_rectangular.py @@ -0,0 +1,106 @@ +"""Rectangular (non-square) SIP-level 2D topology support. + +Phase 1 regression target: today the 2D builtin topology functions in +``kernbench.ccl.topologies`` (``mesh_2d``, ``torus_2d``, +``mesh_2d_no_wrap``) hardcode ``side = sqrt(world_size)`` and raise +``ValueError`` for any non-square ``world_size``. This blocks running +the allreduce sweep at n_sips=6 on torus/mesh layouts. + +Phase 2 will extend these functions to accept optional ``w, h`` kwargs +so a 2×3 (or 3×2, etc.) layout works. Until then, every test below is +expected to FAIL. + +Layout convention used here (matches non-rectangular case): + rank = row * w + col for 0 <= row < h, 0 <= col < w + +For w=2, h=3, world_size=6 the layout is: + + col=0 col=1 + row=0: 0 1 + row=1: 2 3 + row=2: 4 5 +""" +from __future__ import annotations + +import pytest + +from kernbench.ccl.topologies import ( + mesh_2d, + mesh_2d_no_wrap, + torus_2d, +) + + +# ── mesh_2d_no_wrap (no wrap-around) ────────────────────────────────── + + +def test_mesh_2d_no_wrap_2x3_top_left(): + """rank 0 (top-left, no N, no W): only S and E.""" + nbrs = mesh_2d_no_wrap(rank=0, world_size=6, w=2, h=3) + assert nbrs == {"S": 2, "E": 1}, nbrs + + +def test_mesh_2d_no_wrap_2x3_top_right(): + """rank 1 (top-right, no N, no E): only S and W.""" + nbrs = mesh_2d_no_wrap(rank=1, world_size=6, w=2, h=3) + assert nbrs == {"S": 3, "W": 0}, nbrs + + +def test_mesh_2d_no_wrap_2x3_middle_left(): + """rank 2 (middle-left, no W): N, S, E.""" + nbrs = mesh_2d_no_wrap(rank=2, world_size=6, w=2, h=3) + assert nbrs == {"N": 0, "S": 4, "E": 3}, nbrs + + +def test_mesh_2d_no_wrap_2x3_bottom_right(): + """rank 5 (bottom-right, no S, no E): only N and W.""" + nbrs = mesh_2d_no_wrap(rank=5, world_size=6, w=2, h=3) + assert nbrs == {"N": 3, "W": 4}, nbrs + + +# ── torus_2d (wrap-around on all four edges) ───────────────────────── + + +def test_torus_2d_2x3_top_left(): + """rank 0: N wraps to row 2 col 0 (rank 4); W wraps to col 1 (rank 1).""" + nbrs = torus_2d(rank=0, world_size=6, w=2, h=3) + assert nbrs == {"N": 4, "S": 2, "W": 1, "E": 1}, nbrs + + +def test_torus_2d_2x3_bottom_right(): + """rank 5: S wraps to row 0 (rank 1); E wraps to col 0 (rank 4).""" + nbrs = torus_2d(rank=5, world_size=6, w=2, h=3) + assert nbrs == {"N": 3, "S": 1, "W": 4, "E": 4}, nbrs + + +# ── mesh_2d alias for torus_2d ─────────────────────────────────────── + + +def test_mesh_2d_2x3_matches_torus_2d(): + """mesh_2d is currently a torus alias; behaviour must match torus_2d.""" + for rank in range(6): + assert mesh_2d(rank=rank, world_size=6, w=2, h=3) == \ + torus_2d(rank=rank, world_size=6, w=2, h=3) + + +# ── Back-compat: square layouts still work without w/h kwargs ──────── + + +def test_square_back_compat_mesh_2d_no_wrap(): + """Calling without w, h should still work for square world_size.""" + nbrs = mesh_2d_no_wrap(rank=0, world_size=4) + assert nbrs == {"S": 2, "E": 1}, nbrs + + +def test_square_back_compat_torus_2d(): + nbrs = torus_2d(rank=0, world_size=4) + assert nbrs == {"N": 2, "S": 2, "W": 1, "E": 1}, nbrs + + +# ── Validation: w*h must match world_size ──────────────────────────── + + +def test_rectangular_dims_must_match_world_size(): + """Phase 2 contract: explicit w, h must satisfy w*h == world_size.""" + with pytest.raises(ValueError): + mesh_2d_no_wrap(rank=0, world_size=6, w=3, h=3) # 9 != 6