From 23e58b412905aae531045e5bdb51227abd7b3a2e Mon Sep 17 00:00:00 2001 From: yu-liang-bin Date: Mon, 30 Jun 2025 20:34:56 +0800 Subject: [PATCH] update profiler docs --- .../sample_code/profiler/for_loop_profiler.py | 2 +- tutorials/source_en/debug/profiler.md | 21 ++++++++++++++---- .../source_zh_cn/debug/images/schedule.png | Bin 0 -> 73917 bytes tutorials/source_zh_cn/debug/profiler.md | 18 +++++++++++---- 4 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 tutorials/source_zh_cn/debug/images/schedule.png diff --git a/docs/sample_code/profiler/for_loop_profiler.py b/docs/sample_code/profiler/for_loop_profiler.py index bacdaabc35..447034a831 100644 --- a/docs/sample_code/profiler/for_loop_profiler.py +++ b/docs/sample_code/profiler/for_loop_profiler.py @@ -64,7 +64,7 @@ if __name__ == "__main__": with mindspore.profiler.profile( activities=[ProfilerActivity.CPU, ProfilerActivity.NPU], schedule=mindspore.profiler.schedule( - wait=1, warmup=1, active=2, repeat=1, skip_first=2 + wait=0, warmup=0, active=1, repeat=1, skip_first=0 ), on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), profile_memory=False, diff --git a/tutorials/source_en/debug/profiler.md b/tutorials/source_en/debug/profiler.md index a6ddd55717..2a41ac2859 100644 --- a/tutorials/source_en/debug/profiler.md +++ b/tutorials/source_en/debug/profiler.md @@ -62,7 +62,18 @@ For the complete case, refer to [CallBack mode collection complete code example] In custom for loop mode, users can enable Profiler through setting schedule and on_trace_ready parameters. -For example, if you want to collect the performance data of the first two steps, you can use the following configuration to collect. +There are five parameters that can be configured in the schedule, namely: skip_first, +wait, warmup, active, and repeat. Here, "skip_first" indicates skipping the previous "skip_first" steps; "wait" indicates the waiting stage. +Skip the wait steps; "warmup" indicates the preheating stage. Skip the warmup steps. "active" indicates collecting active steps; +"repeat" indicates the number of times the execution is repeated. Among them, one repeat includes wait+warmup+active steps. +After all the steps within a repeat have been executed, the performance data will be parsed by the callback function configured through on_strace_ready. + +For example: The model training consists of 100 steps. The schedule is configured as schedule = schedule(skip_first=10, +wait=10, warmup=5, active=5, repeat=2), indicating that the first 10 steps are skipped. +Starting from the 11th step, in the first repeat, 10 steps will be waited for, 5 steps of preheating will be executed, +and finally the performance data of a total of 5 steps from the 26th to the 30th will be collected. +In the second repeat, it will continue to wait for 10 steps, perform 5 steps of preheating, and finally collect the +performance data of a total of 5 steps from step 46 to step 50. Sample as follows: @@ -86,8 +97,8 @@ experimental_config = mindspore.profiler._ExperimentalConfig( # Initialize profile with mindspore.profiler.profile(activities=[ProfilerActivity.CPU, ProfilerActivity.NPU], - schedule=mindspore.profiler.schedule(wait=1, warmup=1, active=2, - repeat=1, skip_first=2), + schedule=mindspore.profiler.schedule(wait=0, warmup=0, active=1, + repeat=1, skip_first=0), on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), profile_memory=False, experimental_config=experimental_config) as prof: @@ -97,7 +108,9 @@ with mindspore.profiler.profile(activities=[ProfilerActivity.CPU, ProfilerActivi prof.step() ``` -After the function is enabled, kernel_details.csv in disk drive data contains a column of Step ID information. According to the schedule configuration, skip_first skips 2 steps, wait 1 step, warmup 1 step, and collection starts from the 4th step. Then the fourth and fifth steps are collected, so the Step ID is 4 and 5, indicating that the fourth and fifth steps are collected. +After the function is enabled, kernel_details.csv in disk drive data contains a column of Step ID information. According to the schedule configuration, skip_first skips 0 steps, wait 0 step, warmup 0 step, and collection starts from the step of 0. Then the step of 0 are collected, so the Step ID is 0, indicating that step of 0 are collected. + +> The disk loading path of profiler is specified through the tensorboard_trace_handler parameter of on_trace_ready. tensorboard_trace_handler will parse the performance data by default. If the user does not configure tensorboard_trace_handler, the data will be written to the '/data' folder in the same-level directory of the current script by default. The performance data can be parsed through the off-line parsing function. The off-line parsing function can be referred to in [Method 4: Off-line Parsing](https://www.mindspore.cn/tutorials/en/master/debug/profiler.html#method-4-off-line-parsing). For the complete case, refer to [custom for loop collection complete code example](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/for_loop_profiler.py). diff --git a/tutorials/source_zh_cn/debug/images/schedule.png b/tutorials/source_zh_cn/debug/images/schedule.png new file mode 100644 index 0000000000000000000000000000000000000000..ddcc5c57e2dd5d8c2676a624c4b980e4afadec89 GIT binary patch literal 73917 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

GJf|i{W!u-T01melHyo3Ml`M+hmk|(TETH(*8B> z*_U#9q#uMh`||OCFnc^pc5eoSFOF53PJ`LcU+J7zG|#IdkgYMRho)`u)!$G06VY)w z&79f2MX4CIH95PyH<6$1ifNisQi>pWj|LI+II?Zz5vhvllo2EPUe~>?45bj=+)f zzrSHnU>Fw{){Jt5CEm(Lz89R(&JdPnV7U5g>;pA_iEwvGw{G>_5!fosO6Y%fyK>6)}?JuD)qbSuN%MM{LrH}KuW+9 zAE^~L-u#WBhQhv55Gy$L|y1L$O&}dhzM7 z1{0!d<5lC^4gz31YzqJ@q>+&iT;gwe;O1ov8EBai{Scp|#;Hkn>cA0xWYe~C!XRBX zGdt9_bIjUq@ebP+j_jO@N>S~on6(LXV{S;(ROs#xza}^rLu~)&&+*Kf#%!8ab4oFh zH4i@+8CjI~5vahce$(KGJv0coKnxa-m#It7?i2q)58=yX(Y;;zSju?w-*G!5v{Sjp z6wAj+Wq!0~IvqwgCq=ANQCK`LKTHRfsBu}-MM=?X{LOpF0}G|h#)iK55?u1TTsit| zBC9#$EqsdfLTkCxTaY+T_8Wop)AvVmyJo)#T@Sx5Fx-GPPruioDWN=bTlfKXEx-_M z2Dub5`4gCgEe`btQ^+=KP8yrd&}z8$qC~Z@uLZBiRnqwI)gOc(EaF-042HI@D84%t z|KKj54Y0$1GV<9}l_yDQ;Iu0n<1%$}KZm;-kLt$3WG$`?)y;3e?fuWD1E^YaAG1;K z^e0I~rWb&`f>(zq5`M%9po@%hK;)S|xcQmO0R7oAirX*!) zciZ?`5R;^u;2=L7vMFq<;Zd?Ll>S5mZmRx+Zk$VMxPH;tjW6@wD~S*VqCc1799@#G z#VfsGY2|`O82!$O-7_;de?qBV?yaOPLtD&3>*-g}I&1C{avAWMbiKov!lr&w(Haji z0H>QXZc!zFz1qWQws7-9`zHfcgvMEaCL#*aKp<)vziE5Ot*Q9e(hHO$9^&aqaO1v&1*-KYqdClKdOBwU4ug!}e4?)L_f6VH= z0Jz$8P;Ov0BPBNpaS^;v87c+T#lfRipK-Ks0)?uES%|E!n;{hr zC+N|FK452$0FU+=_lTm(FSNgfKc4(~nnw)^pB%qh^v#lFuLF>xR>9K5L3KrwPU8~C z{;$ASMH4GpS=oAJ{Wo5)tGgvcCT|kmYyDc5<$gP-oX6$!NgJ&>`}@87{sheGj6bHG zbdL%MXh%&=Lj`nAeB@f1L#!~(WZKx`#2o{y9E1U=IBD+%nbsw=boy@v!=vX*o3>sp zaQYrlQoR3YpS;h>nEC=?~FzlLK&MBA6n8<(^CO3Co?6AzdC{;_>Ale(tR zcjFmb51p0|Uxo>!R6rks4;8AKCPOV3UFGtTzWWm_2z|g;pFD8^jqLKJ3aa0QkQox7 zcnxq4DY-&{=fEGIE1b|A5)9af5qIjg#e3xq-nD=7JJh*5AEb>QC#UJ~M!!sd9_osh z3Lv5(USIZ?-tO0;xiMqtMCtq8ow--Fq(Zq0rPX!ZQyl7ns_Je8uXXoM0upcYMFBIQ zFeqH05o=Cqtb~+f<#5{Ld8rqycJE_te1v&A|FCnlt&@q=M2Unqs^ZEeqyA@&Q zH}Fzjr@QP@!G$AELw0%}Uxy@Vyv~(J=M^diJ(Gmc`V#_(kCs@>)T}TX?2>KMO`h=N zFPty=b*l+(O^U{BH)O=?qM41^Ky#^gOAh})SmJk9G$Uw3~(-spd+CV;ZD}m_1`TMvZI;pA@}kz zNL(@hK-=pQ??%J)_Xkw-_6ZUbV+Nb0dYn{3J|?(jI(7NCwSd?eqsROL1gt-&K|#HM z3G`Al1kLtoHmzajcETpVOXt3l zpthn+UUcFgBg(qhObXrvE^h896upCdpqBm!ROoQfDj&TlQ21vC!XFw)d7%9?((rNZ8FuP}WVS0$Dl zxj#CnSS+&+HOsnex#7PnSr8ald)~@03iUu5?AAPFHfw$N$0lw?pY3-#KSQL?mm$X; z^k951^4iP<^XpGzjt|C(2aU{#_dXrCK%16ta=y^#NB(xY3wjxv;p*jEF&gW>8|4v&xL zJvTqv_!!3Qx{3PAjH?eVdtV$$lpB;Y+sBIvqNVUUx=!cmcr{r1skRY21JqjRX%2mk z&&i4QsgVTqZg#f*2MDO>cl)~P-j`Pj*k6_SQ>E72W7lwW(*^zQGbVo;blTTW*UG;F z@^TtSOC|i=)2f_%^s~<`9vogFQwX+;JI4q~qL<}({d!f^Gm_%-6Dhi0M3mo9kj-?E zb^qnE4+qq-SH=9Vp%8{kz2J<d)E^j8bQou;QXq{f1X3R&NMH#&Uh~P$u4`3T`d>* zKB@<$FrIY_wSm(mh|tDR{yXty!bxRPDLuz#RZ@?xha{$~E2~z9zlcX%yAUkMCxi_3 zN|J`hmQ0g_xcf2sqjQx$;Z^!&=$*&}SzU*oPmi+;hYSX9=aK)(`WcjO%w~9PXvTW! z^Pdaj_#(9F{6Et-ca>rs&<};-`!n-8C)bSO7Z?7qC3Kwj^=oonbE zR>3fw+WkZ-u2i9TViB6%{Gx~_+MZ3*jeSqX?sv;fbH?aejZNqF^OnVeq8e^;qKkD% zg-P4n`p9K`6X@X)(N^ZYjsT5CJ)aJa1Dg82Hn5zXhI*o){4u&kmpSI7j1mGmct<_j zxk|`xQLo&c2Lhiuj7-l9V1mwQd2As#$Ke)&-7svKCRI;7B)^&b67_3Oh*WL2v7x-x zVY>769IZ0+M^lNN7V=zjZ&g_-~;r}8j#l4}LZn;4&eVgdzxBjaS}p?W|R2$E)-soT6= zCZH?#7TtMhs6G5!Xwe!)t$@F_^rUV1OH3pZl*{eyy#qYfLha_ydQ#<}@=8jwRG9+? zJOrV^-B$$q`g4b!4X2-HBBZ&)JyPY5Z{^-$OE8Ub@Oy0{VdVddTYGE-UpBjdpYMqw z&h)(*NNv~D7Cew|zb{z`*ziPjsR?$H*sN5z^l4&NA;qTP)tzgJ=x=7AIG&@IaX9~G z&f8P<1S`{^kn=`=R19D%?F`k=GHVfp54KIsb!~gQ$L3Q|4|Y;crcByst^QYXf8t_zp~dV765W?E*ZgYs=u;o@Qh_UYE6mI(-=aSZNu z%>#pf#M}S^55x4$+F1L?AJ!7l4pj<|B(ji{Re57T zCa5tBV~mF03xK|n@p|#OdbD!UlLsC*`nEppB=l8*(=sYN#NF^H=r22C6`y{;?Ze}b zA9s(Bt@m>);wrU2K$aDP>*Vg*RGC$X9%}6fq*|ALe)8j@{bTmZWs7g2pv8Ms_0&JW zqu;f&z9V$wrw34?;_rbXy5GWs0wR{jtf0pa-GaiAGcgMPwg--we01=0cM2QxD+sRM zne3z`30IasiL+pD!fkNZXVGDH@!dz_iPl=&q|*-^d(2`H7{;|AHYkZ z_Ufb+i-&C5gIDlP)!>MebQLju(QVo)xidIm6k5o-lB6&#&`G6baz8zU_77K#VYj@)Y_whdrVWi;8(c|T_8c?@4IV~NN~BARdt=wz`oN8!Syu8s z$NR&zFmRYnjTsU(J7Uo+qV;pVIrX8=;(R(hBk%S{q!17fu7j@RVaIyWoEk}+R%}Dt(eEV!0n?xSb3Z5Kq>V5?w3ax;QES_F z65RE$(W`Rui`U)#@WNH!Ppmzyd7f=DO0q4=xKQbg;mf?Ql}K}3OgH406}-8%b-D3= zeh3m;RX}H*rm3Y%8mh+0|#8RaC%;Tdz#E{+XT$J>J{L_kt(9 z&A}6B`daatj(f5#W_Jwwb(McK!-qSaqb#c4Lo$Z0C7_9DdJ9q6o#u_-3;#@hxv{Ib z@HWTX`^p38mGhV^k~2rP#PCOPgRBaIh53*OLF14+sL6-*f_>$jLHhe38(vN3=wb5+ zZ|`8N$;s(VM6KXJ&APQGIbeTF&?vmvGH<1NRw?w!yCsI$5S=uWAGRXptyf}BQWvh3 zJdFOAP9-jYGeIvwmj6YF0_4l3S&NXcj4VrH)asTuX-V!1gocp(hhoGh&q$+dS*y9$ zF65@Jrm2=5m@vy_s4RRU=th6DA_m@Wyk*_LqfGNhukVExtAj6 zID^X%QxUdDJzJqNLUFu9pZm*fD=jA*<4IpGsJ)DXl_$nKrr3wE@IIKv_j-3?*CL8o zbVG}(s}TLo*8Pkzh!S7r>!Ug)A3P;xzG&N-mF)x)yqngYCtAF8jB6@ph6O{GFJ%nN zv~imXzx*aUIDerYmf?pZD4PrMO?;Bt|AVHKJMBT5j#!NJ0->WVh+Jm7_TKLe)9D^L zOQ)bT*V9kL!g^PES|-`BT5-LJ!6wLtR$ZM@vot>G&3pd)47`ChE+~?DyJhlw6S-dE z?0cD@>AI_$4F$|btEPFk`JF{-V*Nh3pY+Uf(Y%v4sGO*Czq{D{2foW~wlF39Kq6y! zd`8SlSXtJ8q7I{0d!IW{u&m1~|L+~GF?~fV*xG7-)AO?Dl;K%>+(fAFLGQr7{aX&V zZNx@ux1MRFe}22T8N!vZ^;dq%AMe;S^-5e7Ud0L2GYp-lQN*}+VvW*&$gT|sa}OP; zJiE2>P%caSvWe^J2v z_X^EJmD$-jY@t4fL;QN^mwdz66fgTlp{r;Omb}QkWr65VtVZ?IRr0SX{j~WRTTf6V z_UM<(?|tPg#cJz1q&WBfv}rPUt`S$7xAkwWfi}_FGX8x~&}&2OiGfe`4C`SppI(SB ztqWAn;&{*8pLpxv#6YninRU7948KLWz@(^Ww;n8o^1m{>ec9MtY~rC%nIS1u=B7f* zpMUUQO~A_z=%=k*coF7rs_xr=z3F_A46K}<&X}-&8Q;a0pjA4cqpZTYMVk?Oc63y{#mTgj4!_-m)W&DND(Y%9Dx~9D*8H34#C9WlnJzL`( zxP7H>sXvzOlY$7KkGRk<^;VqkW0CI-_L_%?f}xhbNm#XCB&-Dfi(hBeYk8}Umtvv` z+?Qi7{!L30TIBL7d(TYdoGuGr!fn_yVLF<>77xrG^8FI|ZnywKZ6=8^c&l^)?}K<%k1acG*x@k`?qSYYoRQb@{u)af7_8~Jky ztI~gA?Y}frH@rF2n3em*KjyHn>Mi-kAuMUW`YO1~S<%K`vzcB?ILxWB{T^0S@o#mG zWRa!SWMEW?4@$1+FPd@U_ivGIZhl1-t_h_yG}sy*vlJ#q(ZAW)Xl`ZccSP=OJ1TDM z(WdDrT)(W%XW#GVLujMtwYC=SUzU#kV0OC;+ws^(&Z8-VlCQM*%w}78QBHggDN)VR zrSywKDo;O%pzzv^H=2HBd|W*&D2T|}pjT01!FY4sdqG(>REm>H3ePQ>kiPwM4t34I z@!*~h@~FG^l@M*2+CjzvO4F2q{{#K>iH3;-9d9}-e6Nf)MD@)&)O9LVYG3odvOKOi za`n|M5w_vK=u(;F7pZ$F7R@~Si#9hrerinMYnE>%6xpesj^{&-T=eAnIzBA?G}Y$k zW)y{CroJo?WDR7cn!gG>n%G4wx0(y-I@G+h%az1nB%rdvml4W0_g`miM943w%+C4R zaH#7{eEjwkowImEKk?~je?+WO2-hUlyz?2e<`~d+-1cBGrl1WkRZwGKm=e-*uVxWP zMZV*VDXa3dUqZ_xCFo?jnI{IGpeVtZ`U!6{;e@3NZgT5}T2a$=n#T808`?u8i+VX( zrC{ROQQ>#R#(BXFlf=M?5VA^Ke;H{0UqQz_)ImD0rz5O>IyQE04G8fZ4}N|$Cv!{f z&eE4WJs-y%dbwV6#(O;ThrVBY+EWPLW}C>Pxo^iu$AdA6(+kcDNJY*^j5p_xe@qV_ zmDCtA_xTq19!?h9MiTp%be{b&?>GsbU2kKrhNM zE!lN1AXtRCE9$E3U8cXG)y49n*V@M*)Kz&iewOg%KUX$ddee8sW&}n9+BX2jO+ES^ z+Op_&!PB{mg`kPe`zZQE({u=dIv%4IF7(N&XYA;OnsT5b`i<9ptUtPe);rODI{IPDDVkT#DkL+a>_p0 zs^aA9NGz>V$mM4rzH^+c*PiA)z8%nr!p*%-j#YWF#BX_je$Lg5$u^3DgTvd$-|$RT zQzpwc#@;T^-qTH&>#eZ~-5b|Ky&B0nA3SiNVrr2u6f3V9z7~4g{m=AnRI$eAp25DX zhUsi`$(_e0n6@ewGvdjr=`_gI2BE zB3FdCB^OS<%Xg7;I7TIk+pb^fpB-MNZGkGxq8`?6+9!pniDge`Pu2Q&ynm}4?W@T7 zIi*>ijO^(2Bh)kWH`CDg3)iY2{-X3fl}C$}WZPBBu&v zBqtjT)i<>1-^&;*H(}f3PJZ!JP3jykce2py3Z6$Py3ee0i>=_owKZa>5ed*su5@DR z{yUagt7mX&{M(SL}F&o2j;)k==d;wkXimE_?;1!+tUC zR@})GU(yKPuW1!o;h`~+DNHw{w^KcoSSnmE#>%GuRty|DEhNsG5YhGI3 z&$*SBV2|n@Uy&+YaHTI@+RZLeU><%x>RV{>FinHHmZ#6{3t2KssejFRLnPi}Au$-L zFi?>6PM$G=eRffy$*U{7=RI9uTt>C>h9={8r9tRrz%jlpHDF@ZR|7DNkC!0iopuH0+266MW#r<}c6})Sx%kA1_~5;L72(8(f0rdAWm(iY-nyuPE_HKhB}4&ectR@6 zZ-+7>5Xhs(Ovz|z6%-UbCz{_C0ze0AGQM0&os3Wt??$weI*0v^?U^-ZZV($%*Auw* zB4QI<@USc0Av5h3(~WvUHHULB2Wyn7NqfeV{%_(#@XHAX62C?F_caHi&HaxA`kbK! zMwhgO3oJS-_s#mK6W*j0Dk{&O?kGH^)hd{h7pF{n-JskN_b?}PxuZ}@KRIo>H`5vV zk-vmSD0i59O{DKQ3(lLaEz4=Xr5ET}{?6!;T*{R9o7CPEwIJl&;Z9RPmPv*d--zOG zn7ap@_Dn3V^J3&gdj(iHnL*ts0K&Sxj5b*>H^^@^rOv8WdDsOkddj*{gr@SzeNxZ9 zlYHi^MS531@@MkP^}VPr{dPS^sn5mV&mt^2@r(!b{I%TQ=GefNg>Oucea8~X^o@FG zW5dXCbqQrzMWtC_J^m}O#=hl_da{>p=(9w!LK(TSdN2yq>cE){L?pyX-)~f1sS4pJ^fiQ=G zdd)54A;0`>7GN)wb3R8jyB-w3tsbqF7U}^L4!V0xS2ED=tyC~L43aGzuj}IHTV(ec zRcI}!^}4jwf}=|O5f=t>+41%x@~GjFUCxOUcZX?*S^A~FotS)!on4f1aV9F((3N4S zK6dy=s94?&H+1#*S~J>GJ{hLm*F0Kyi)j~PB?WLR4`ArDTCyzFtk`oJRy>^^3EF8J zHy0Nv-+TM!7TNa<^np#1>781F6o4KsrxTuyRL-9(#aNBRSkb6N4osJi8hoF#ol(2> z7N%E@QnwD=zL~yGYr8s==h+ltlS-^JpYx!{|0u*jg6CkEjQJp(8$ruc|U9C|m~L?5hmflunk3&ui@#VF}U2rK5nJMsF=**_RWV?5}4gt9vd+ z8mNpj_&U#jQi|i>8~8IhYtpk^$zM_P)Sz!``!`=L1< zX}5Su*597DNYBJ31USGQg%c7;ghEe9f4<|=pPqHuxAt>fdwZn1Bmf|N>&bhdT6(_W zVPWR+?oascIrm+5KTvA5%xi1L$(X~lMlIFXYC|S9z=?N--!B3NU2sauXAgXH5&IGI#h$06U{`p`w5)02=Jt&kA`rxUG8EXQgGb?Gt#o{)^(k6V?r%m4VwTr0rv~w==MbIv_(P-c8-9 zHCJh-5hd%i((Q-+alSn$O8mBD#~i*aDKhQRSHE9N#zpDs)P=UyQR5nHLVK@^@P7Yu zaVsyA1YMiS_VT+x-#`Dni9_F_49+3QenrSj5Q5vvw7gK{y4Cd>alUb ztcn;bCUotC$l~G(Ic}g$erJ8-cQ^VmX7L7e1~n$#CiY=YVb|k{lfau3tc%GNOP@T|G_IrD> z;qAX5jLh)6#;13uwa1>`m&HD;W=+C{go@F;-Obyu|`;Adq1; zaeEvxbWDF9yEz&@UwykUVH!ox_iG-3864|i0xsh3Fbb8Azr{N4Z53^ z!{W&b#@J=_;eG^%;1Uq@o)}0a@)}`MWZHxIyZw;Mh{kVKZ~E(=MXXs4@|wifq0I0w zC6WzvR{?mQUuN{A_Ano3rDD%+1CU2x?2a}NUekHSb~2~By37B41_V|Oit77QKZ>r^ zU+Af^Noff>NAT4cTj;FR6M4Yby^|onj;F8Wc^Y~GtYCXat=H$_6;30Hu_ZJ>g5HmR zD|7q6Lu`4w^>Z_Y;=fyzY-MkfFm%_~33biXf>}3!MW*^z7oKCKu$>L4c zkvg6>)8^U`=zfAU=BqNkn##NNVrCsilYzc2Nk~NsC>PFrnQ)p1YP#f z&fZrb#w(y9>WfI#5y{dK!$xxe$95v$v97Uf>`fkaV%xj6)>VzT-#X%v^$f75pCP+u zds;ounk1=;5>aq~W5l$q9KsSpPYA-1oBa)REi1r<8n-#Va`9*!!YYt1c}Q7NdXjMD z-psOp-J#ES7jz|3d!*h2K+5ceXm7Y?$L-z93iH6_PTHe|w{X$~exd*_AGE>u+mPR@ z5Y6kkdDp-!~p{8a}l_nLXNRuYbvLpyG_u&_7fzf-OH#^12y_|VRD%}A2Y%qA>?#r&H z&ERD)=)Z%&20R@2?()U<3>OC<;ypTyY!y1b3YQjJxh`9%%=d(CInextp zDBv>l$xnH+CGqN%OaXF*X=Wl>_S6e_Q}pc0F5}_p?k7R`&kLHx^JdAMKwTy(m_aL(N63*Zc-{_n4;f$r%1DA&tXMzQ*p}sp&F4iOja!+OKsJs z+5teg4G4$I96z7Ht4@wjoYADLtYpfp>JRWgAiYVFIOvsMfjFY$S?h;J=|>&`L1skK zitdhqUGvp>?=L9lc_+4T?t$*US~(q@S1c9o@Va;3Uaq2O|Do$JOqV@yXOEs$|yF%d^`pX&1fr`tZqkU}L}Xt=W2NUC;G+lET3_AcZjL z{4$getWPa60<7q24j|I1db`Z_eATAyU$8UB4xvmUd6~5I@$s=5{>oR$_^+rNr)+l0 zma1)baMj*7w*riTr6{ACdw!!{&B0Q7zDfjeyaT`HxquFm;Kbe=IR*%}x$zz{!a)Tx zDbVksqf6&UIIaH;#m#5|E@uk28G`9dtV<=paSc%OTtz7DyD5~(aXA&&<= zwv2iamh)_IeW7$E0#P=9F82a4RVSGOx}vDwZL7BXFWIFTNgW}Y`xXScV6xBqosBc` z^z_Rt5%DMFj}ND_pEge=(=C9Pkwd8^+e79%?TGH^O$zZri)p|#QZbui6a@Yys++#N zeXbkvr!EL?iMA97-&&XF`8C zV^=w>*RJiq<|hQ)yqB*7N!1LcEU@n3jh`|3e;^9B(f#(VEq-Lu9iHZHNR_nVEx=DS z6Exla&nMTyBuqXG9K(13??&mT?;rCH*3%D?;t~-TeOt5^-#)wk$S{EukF?GbqKz9g z_8>F{wN_gNCDj4hBseMb_{DhGz#W`19GNUO6^0c)gT;VoPO@iwAtFX)Xa&M;s1FINER^Io*zZO ze12`U^6d7XW}@5-2#BJ5{3p)v=!fdt=~Aqbh0njpjhI2xbooh_=> zEcxyj-*rN^%&^mvs`J92;F9g?-K%b^Mc(zo2D1!mt;nAx|1zUv3Al00LQ1Qq=p!-INqDEmyNmB8LZOs<35nU!dW3`=R z@nX$@yaNJ-Kv_liFh(6d^l_zqQ@EgD84h{{8Kh0b8UzZ#4Jk4|K0!*gESGKV5VeRJ zYb+yQV+K4hNQ8-5gw}09gp=-yJ7M>`&sPhNBqE+qUNx(zh%Ye@k|#v1re);8J8(@_ zJENFcg|>v~*zqC@AYlmS*jErcu(J8gl@FO(me2!`NHeQEb2<_@!+QTYW1^&eWt7T- zZiGbOpyDjsWJ=!E>}N($ia3Q(_;&v(ewDQdYt&((Q~jr+gm1x0tGY?PEq$_4HZK}A zpw4<>@Vu2b>sNZl#3!@zRYlSQR#8BnC`kbr302w6&;n~Ub+YZ=zrC3=5@PrS5t~31 znc-6NV^A=vO`Stpu+kyBB;Rh)T!8k}PuVbA9hUNpr^IdZLld(+**jPqpknWN(M14n znb0(H)7vl`2P9(jm1EJx-Y`4%(@PnC)ejjGb~%MK)$jCjjN4za2#BPY#M3q1z7xrv z;MJgD&`Gt(?Br_dFM3sny9RGY{;5Xdu04+ek35Pu0~DEgHi>g~q}0B( zn7+-V>!BR@r+6gMAbB5*CaZbhN%a1{ z(g$53(gd;UCHrQE!8H*|(D%tk3%z!eu(U+7WKwAmh^Y44cHva3B(-f8F({bgx5sN? zqA+mZBrcRXibbI&QEj<(ev{_GUsSxAZ}*)KN}C5FLwr2n7G~Q^qgTSP#QP z_x9{1G31a8Mfhx5e{r~L$4nLdJiO};sT`MYBej|m;iW34XGH!?xjAzlcLrg;bF?Lm zhY*EmSR&-tI}y*Tv^=)y@W4`+Mlb9Kl!|!T#6;ETSPe>vJAvTRa9-$Cq0sX=0|_9f z70^Ef{YmHF^WxFK16|%d%~X{K;24y?cu)ZUYcmrZ)sI34ZhfOOh>jba>&3XFu>>5 zc2fDOi3vF5!WxHK5xc*I9lM3Mnjm2yvk_QH3UFTu<&twz4?;H>UCaTaHzWxK&?TeR zQIF(IUBY=MEIwjFB8))6*c3dj5IU*R;HH#EN2i17msg#KHJ%deQ0pxyX4Jzgoy zKYs-7VBYhvRn{nJ*9_Nmu5V;mWjK~t>qY$p*gECchfS)qO`&r`Q)3A$x;kC&jl`)) zj<1aI23?2@-58c&jr*9q*a*XjHJq^$wVq{1#z8XO!Dex6Qj|dmgtQ-oPrr10LnCCL zm_!|LWf5o-e|x3+-M)G6P_nVZtE1;KJirwvu!rhiGBkMdLL55Mdkqh`BlJOAJni{6 zJ<5|V5&|iDxA8yms}z$nfc`O8ll|n!|9b(ZR^IR=jbx<9ob2`=FPeQ3o@ja;u=tJX zTZ+`~#&bxK{RsVIxKv>~*4iu-%p&tN83zmm|A?G>kq%!Leg}AkyzB0XN7EV6rwU}~ zkkQ&N|K;dNEarefWFYCATD>(+kaWnaNPP9%($bwj%jXI$ns&koFFbB^JL3}0g+kV> ztIe__Y%}4qg7kb}Ye-XnHapO^+b;dHp1itT#yUCe&TZSB?F80x>Zh*-G#K&W-vgd* zg%GGJQg_~kNcn}kW)89b*;8E~D$wemIqOM&_s5_;3?t}|K-0GQpR$8_J4`jQwfZ&q zr@OfQ?{m@uh9#okX7o#0DxdCAol~z1lu;1NX_VU!J#X~&$TRUV%sYp(Q}h?r7hAL3 z{7)-8X)xu;=_2v>K^J&G3w3C2oTDE=fbHcT=oLO%TooMV_&FZAUaG_v z@IXqR*FX93(_|>YdQt}3TPJH%{c9PViX0C?ppDTYmz7HvVXcikFNv~WiARA%A z#9I1Eb>G1oEGNCKNaT=)gT~g9uT#tBl5TXc{N6@P$;Es zcgwQ1sZsUd5RQ|O4If5mWZ|;kY+;T`&&#bBI!0e@(uXJRgSxq*Lhc>;^R0F;EYZ4W z8&~4xbCkT(1IPt@wSidnn-o~Y6fnmP43pH8ZJ&-w$2}gd>I~1g8DRi1$mul_2@G_hEtm%POKy1 z*iVcxQn3LOZUKmk0M&W6zQAlKlWo&=F8k2hI}zUS-UN*nf}anpYC2>i$l@v)o0v!(q)-% zLzjO%LyKjKqF~EO<)^CEi&`v+x>sWTkKdEp*&s;=p2DYJ66o4lAwyP@zq1IV zUo(rchumC0=G&oTp@@I;^G{_!=gjvb1Q|e}10=d%04OBwqyhZdf+pRM1}3!#b-+Ko1+$d|3@KEj_43@ zd-X0xkV%=cR!Oz8SBm3naZgphcdl^mTb_}FvxiBM$%<^rQJ2TlAvSuLPftKSmQRRW z`^(L57H5^deVf~f`|*L=onW}$9ety#K$aJ}#Q~zZZ6K)_t zN`(ugb*EcYE?`Ce6Dz(v(3@>%uxjZ zJ!_Wx->ni@q#$ADtk)c9ws|)X2UA+w@4+QBx#W3e6i4@S;VencyxF{z$8GjmDADLO zhVQ$A#}W~{=7-UH93C8M$1d>7cP)zB+OtL8qkp@vtJ0rChHNWOSCD#wa-oT zC?=ZMZkWUd?A28Q3f}LbExV;09H(j6?^kE(7U4{Dc~-$6?i1coK9I;8`FFC=CT&FV zKx$QXjb@S=EDcVbLq#hAMlHa9SE^aXbSNbs#)AIjbRA$93R0)&bHy1{QWUwn&bt#v zn;)ENA}*Lg`SKyieh3$a_QQwF2qA_j_0Lq$<9?-r8#NFC4q4ctPb4b*%mckHiynUB z=|~*j=g#wx6sMu4*+i5%iHop6{fn_vF8y4EA3!ex+5l_rXg}FPO`N8J3_ni-*i>|F zw10knqG!0)|6M;#EsAImi2ClwY3KXl!s7uy4Ny%?WhZ323ogYc0szG-Cb6Kkn00%a z6@6^s=#msIL(l)s^=3~!^uN=Hx0DKMq<|jqBS~((_)h^@?qO8jP&}~$Zb=zQGSpN@ zB6pZdiF^C6KTqZZi2RHhK0#O_RF3h5&4`Vd$ z^;L)z(FNXy0_8cHRirp;I$-&Z~?}*zG#Jy~Qds^`Bwov-}eyKTJ*ZiJh@{^dTnSnWyMy_sAAOhzx8b z{OORi&x;i9K@A^}$}>V18G_{A+MDxR)j-T{PuyTbaeqUdj8+sB64s@1n{p9YzRRT` z@t1=jLTyq-DL*-NU} zr1}`J=ffDBSW;fP;(n$13Lj`Ek-&U?4?sb*YKZpt>|cxN2b=b{y@4Wy(q;!G0MoxQ z*9`$nbpHGF;0m9aBGDE%te)q|$wFTtz;gVt_wenKP*%%DEj8b^I%e`gE+2zHFl9CT zoSpnYvBg{nJ|S~5G%tEv+$-1^G$K#{ai(X-|1VO|LeMSTK>SWLU(n8z^YR{Z7+`O! zCyOd3-|qd2$clY9gZ@7GUMiJ27%C-=@32&_+;<`#<`07O5hi)F>HI*J-~7FSM}fm| z0b>e=8iRXtQ~tgC(2sFI;`^V$?tJC!vqE$&cVsdLH_-?d96W|^>^oqcMFvz^_^43` zY`>St$mEuwk6iWsP=>Rd`HY6?=r)>6yEiJ;VG5?P(BnkAXgxVqg8b0HOnPiEFYsc* zBLpy*P!JB5AV1oa6;O;*Qt7G`*|2%fx-k%eq*JR^ARy`whzpgav;YKM!u9fbl#Mks z3M$GX&m3~|W5x0TK1d4OeMk-_EPxP-Pq<9!K=Vc@kAca(_CD@dAylh}J7ko%&zYX@ z4Kh=PtHv(ntB~8I1HAbG^GA6AsMovC*P&l$|DfknbPX$^iP!}EoNU4qF|J=98~|HL z8%06DUfvtFyeK|jTqw^{BT)csD^~6nP@kfT^Jb!cO+1DWDayYSdE0NwL0>Xsv)%h( zZC&DlEAittT2DB=NLREm%^@d(fmc>P5xqww3)L7?2j2an1R{i=~~-*jo+{yO>l-ckkp zdg7n2vGptJ)*229!ng6!gZ(EcAV_AEu+UHzPW}!0<`=hZfdW^HJ;FhP{kj88Uc zSfyEth*CUm$4SXFeNOVDK6a{BjDf^p{?_zwc^G-7fe&Dm?9l*>W4PpDrf8nN;|&tW zm5WCrk^cMx;)4VQ-`y%9M^Z=nT>lEE@IfC$XjR!X!X`CLfa6qdEW5-&^={l7q-_=B zmN{OLqO$;^6Fcr=s6792qR>VU?5#_tJmPA|2ZpTcq!)061g~<|(Loj7QOG8%?!=nu zMwFB}mBPa0lVvzsA64)A<~n7iJ1mqw>#0U9G{1iJ>p2V{7e`uiKk-L^)bW|4d#UwH zHvJeClJ7lxl5CNS{N+^ZYl`rq#{)r*#7F9-7KEf;&7XD4Zj(!aiC$|^oUyn9neD;M zxVT{wVIlt>i;KppSj`oOn(_fPua6<`H$2~k*E z)_Rr>>}{gambv#H-WKSkd0xB?H$dlS?zE^D|rO~%cu4j>Df^N3obBp7^!MTb(pMR0Y!lg z+vi0Bf)K!8U_IgT_Vr9-)CUd<*%YWLwFJFFST9dl zn0)4#NjngXlnsH}q?gjf-VsfCp*PFJ8_AvGR4I zMzN*G6k~wqhF)Xi8}2`D=iml`Mqs~(-X%&G6!~ZDl3B0{w@f=|wj2ah%8(810nQAH z{#GDzwRv|D{ECcuu+DyjaNrF&bQ?Zy{b#$;wopp!Pf(~6xr}HIx6R@yKz?xn#TCP# z;Gwc0|D)9n?}_?TK2ILS{94qeZv6b2&6%}W`e;dgu}sOUmrkr6*ngz8qW8+l311Qg zqN07$fvLAC5hL?!f-|J_6&ZEJg00s&+Plr*H>_&*0Em!X0t#Xyp`Fe^3V=h3hsMq&z#BYD6p+hMXqBmvlF=x;CuSVKQ#doVB&euE4y7zNEpwE zVscrSdAeD^#8c9B(e#2c->!v25`RRCgZ@k-+C8hb(w9{e z=@!=4vSqgzE|GX{%43`fawtt)m|(d%Z}yP6`o!H^9Ci=DTg%n4WBy8wD0uSZ?@$?V z(+km!9NZLRAbj$n8}G?&SVit`<4&3k7t>n;LxYaSo(Fbm`+63G&CmXGK-MPMq^E5- zi)4w<@@oPHO(EgKfZw~n@0a%kw)}9t0hnk57ycvf+*^iAVF27t5B&suQz#!W8B96+ z32Tmucye}@-oRtnOYNmM`({5FdjCvOgcgXRrm$d5;{CNo9Trykvp&4vq{pyk ze}+hSt65qxbrYBMi@b$W`P-@HQNX#Q03iO&4}C18$s5l#y<0`wsvWjwY%MSYpAK=E zjT-`Cdo95J0@sh0NrCm)Bnk^4^Say zZQoO;A2!-T6=>TRZQom`D-}Hg=z(6zS|!1UPhu4Kx_(j+1{YlR_kZ8GOiQZ?5DXJc zO8ZGI7GI?z$DX!~E|XIu3IiUKsjuX!=7s233U!XG{yz!qZe5;Th;pFL;m&GY|KnzV z_-qVV+5-+3UGXry$UlkTS8gbvCzc~Gtw=Ge zff9in%NNvYsKq&LOb;ZCh+SUseH1j}*3$yp4QF7Mx#~tO0{jC^mK^sZ{|6ljdgUjm zd3mz4jiOQrG2K4-aw_loLE@u1WdB%kUh*w z?R+owJJ_SuK9*`{SW~0trn6I_kE?U7+tOqyzFM=z!zW(>bZ<-@Ei*;L_e)WPcgRGO z;ep36+Wd~c-Ar;d0Vfyrk5E*Xj37By_NmlSwhDXCsSwZ~Cf;JJW@jddt}H9ipyEEh zY*NCYnbn-O!;*_3-YdXgr98u)Qoidylj}3+@j@9$A0M10&&mh9C}il*)pWqzO9KOj z3q$Z**8tiWmT>Tdo2vcGH_6ai9*oS{VGRxr1m7Q?V_;|mxGF)tUqi~5_MIH}=WIO? z7tcnrK1^=ABkQ)-rF{Y%`Wq{6Lklk?zntRrRpl%j2w|q1MsfjkG-Kafnq{lsY_ZUd zB3IRW$1}476t=T&{86b()c>5fOY*SF6E(h!0jh;q6q2dD|1D^}^$&uKOkXwFQJd+e z>qbaL`Wq;4<)(Szfbg%S0QcMeE_Ty8sIPAS!)O(m!hZ@!^vIM<1VkRcN!mwqhRsi3 z7$_5vnb`x(P<%aCRCVT_`+G`%F5bSbqPJh^zN3o`kO#xYiroHlvdSkD$}#fN7fM;d zX|xiW6+%wMGfdj#dAe#{(Kl&K{mBbVgbJ3pGHQ<=Z3a`7a01y&E<7>d0*=!cr^5}C z|9%4OrK;p*>9)BwjUGgVCDN5k?7s;bS4bN| zUo}u6IQViNg(D^3DGAD!>m*umLPu~WG$_KsSA$vFKq*|p`2oZJat)&+DUfg#Y1wKm z9&kQQ2UP2HLdbEGp7Ath4^qfFA+Q^FIV9@aZPGqxi@TCa79&)~*XXI0fw`{TPkwam zZ~|NPqIWP_C3I(*3|T4HagOKyE#jsJS86d`iY2;Wp?@|8RdZwQ7-*Q@B6c7 ztar#DnS5}LA}Np3b0TxBNc45QS={yha@BtZMimC2vMaK{CX4e~uA$h4B8#R>Bw7DE zp4_pqXAJueotSaJaJM0{R+V@6$-NoY;`}DL@4~U$uh#9t`7qal7QlN%gXs0eD{XJ1 z0uK1E0f5$P^{WZ&WP)+u0~JQS&F^e)^|cASy7Ag`zPhK1tIzQhd)xDgLbg~PIzi5( zB;LD`s}hE8`u;~CF0jQ1l@hd!XhXs&L1491vUtEldEz!Q<(&>u7!(4&+i`Df@o+m? zk%Nsrt2FZ8tm=7NbPPyL_hKIh=)GKQI~j7~KW7eu^|1-M0WSl@t{$#1t$S%oU{yW2 zd*uufU0m_V2nwiF;!g7AHS^9gAuSjgp#njPy$%D9e@HH*13_$k$4S<6R@I#8MEde@k`dTx66FGEq9X>C^ z+1Z3f5A0vKdxQkMWq~S2SIQ_PzeNpi(Veb}6Dq=nVg$Z-S1a$%b^*0+k9nd^|HyFl zxc)0Xo?iISx)fd^`HkMb8@ONcVIoGOPttMuf1+8Uz*31noI|_?22TncGMBYHkaL*4 zz@rIzK3UUpQy)!&!BE>8z7;MqwK{X&oM%k?P9pIPO6F!!qlFK_*kDP@)OTC!;SJQG z@8nBtuCZ2!<5^FY>c#5vkRyg>39mjVo3pg&wSUWArYP5y&wR`&m=z&JBJfhdccygG zEC>{EziUgkkbMYd_GSo5H{%R-{bls$QAN95&G1`L6e|dqWu5n+8jl2`rr8Ec0P;vcYpCeh{Lqv zg(U=bU#^Ec+VnX!J!8PG9-ZB%!o7um=RgQTwrvxctVvIhzq7NqyL(+<;LU^SMJpsP zJHMz`FJ!B6NxD{Y{^-njuV(TR@?|9VMzCSdq-rYgXq@Rc?S4JSX9X@pCwIM^;^J99 z2^CGaLEFhIc{QiT1mcVE#1T6>AogCboIP!E=lZE-U1PgTZ4a`N*|Ip)vZAB&{HvZ* zPT;__?b9lu#Yfz;dNY!9){Pw_6?FRtieKJ4TB)`^RF8bqmHU&Ql#>-H5;#VyWK5(U z`-tCI?OPO;_QCC{9M=B12-k5Em@9U@QO{U!!Md?sibBw>cuq&x@90MY)~B%PUAhGY zd&O?TV$LRqV)6S6CM-w!@2ve|7A8vBHTDlx2K={QTu-(j!1z1+I27tR2?#3bIz8*e76vUE=`0|YSzPZn z?3vAr^)l2Ye6f<{b4z$#IsP!yA9{FF)HT(Tv^7uJV$gnH`>I zH4c~MP49hu_9Y&v*)@{*bx8l}PwR-&60Z84(%4>qml&C@b$D^!98h4e{dLMfr|smw zCxK0iYt~nM@M7*)OPiNf~LXd!bfci8i7aUG7ZaJ*vn69Utsz% zJ`w^Jq+u>qQ$`&aZxeJp!d_lxm+tWHs^`Y(Q1VW#@Ct~KqA0cV0><>(dD7UR+wZPE ze?L6UOY#zF+f?Uykp!;SbMnfVyDja|b9z?2qThk}^J#3f(*0dk6Jys!N~7N4z5|s{ ziTk9kj;?MH^&6YQg@DsLCM`QaoxEX0y{#=RFKHPuR?IQn7nB+EDT;<+0{;x1|ccC3q{0w(YF@6#Q*mK@J=t?yvrl;z4Mn-Y-{M4xBsn+&&H+f z<1hYqaYaIWhtA9w4-e=l9o6LcoSu5%l+AT6zCttZ0)D*|jQzyd-6EO(GoV!K;sT+z z)+5HxkKv=%w(Iy+0d%}L3cbM28sGJswuG{`JHdW!IluA?Sll%pn)<|kSm9=wGMdf?illPuFty@(OG4zFjNqtwtM7&yhnCI>sfn5r^(8jh;?RZjZO9FT8Zx^0jpf#A7fH|DsGRSMU&=@<`b7g!t_{I<2b9Z=$ zNfRR(2uN0_-AJiV%E0!Hm$CkqFHds4^<<;`LdUe?AHVxo%(KgE@lYe^bf6}ujMGzG zJckDH2ce+q*Sr1rLiP_^aq4i8qY8F7Zt&T0fP%c#&q5Py&>eu-jBf_97**^EcBe1z z#>UI$r9y?ftKiw|znY!38ZOVfGljU_({#f#{~f+_+H>vu;v2B@*!u8S*Rl+9cK`A` zF4<^~e1*F6s*uS4{?*bN0)g$p4)$Owf(*-FEG=)61l_RHkw|uquPQ$ezeiA_7RZW{ zj75pgeR<42K2Uu(QpsP;Sqzp|#7=L!&ux5p%C7Sz=>D?zqIsOh+@OTId|vQr6{&RY zts{bo_of3WN6TCco*w+mE?kj9x1eC{4!`Sc%@Gxo7~6*$V8=-U#-519jTKEJm>gFA z6sj0?zcf7GExktaNwi(xmFk{UWgxNB#!{5h3Le+@=;IzrVz74;h}-kShl6s<#b=UN z4Omy3vlUT9QjB!0*X#|;XYA!g&n4pSq6aP_-f7*uQLJ*zZtAbffc=s(QRtThLT9El zNL6Ah8fZu))*gB1iM9`SQtylJy(2jvkGK(rIlVPO$i^Fp(-xnEy8Q!00F+mYW6c*Kx|uQP`vWC!5dLWNc|*;?N>ES$vP(o^0)1=Zd1X6y zrpG#Qg8Z?%-;?h)PAzvjOfgVF1}WvX>BcfeZLODP#T@R8evkX zc6de%tc7VRYnCbM-+;=}iYLVs^-8Gqt>kZ^%43%%xQ{IPQGA>K%-FiqkCn7h{S9(F zabJ9p@BeA4Fjo^N1Q7)NyD;dESQ>2O_SbVe^I!4rd@ z<5i;*y=>f@Tkq$cISXV}9#vWuTIwG0&nluL{SDDMwiaGJUYsLc|6;Vh8P&|%&F+e) z`gZe2rI=CtdrzUQm$Uh%W69d{-LYjldRyRM+rE>!P0*^6nt9q{_HOO>-=ZvDnkY&G ze#>(AWGw&z&SpOn!Fn@3?{c8|WMj%qI~Lxb7N=LpAR}_=Iu|GWVRUorjSNMrx=#%8tOw*ZMlP}#_r&I8A zBE2fh!&PT1FRw+1Oq?psiiI*QZWO0|X(R_xpH_wLa$umC_Q4j!T8OSmPkC$yB4%gw z{w#O?GK_2XdV29q)ru{Q>YbbWKwQSn#QtiL$Gh?uVlj47sW81qGmgYx@Qn98i@E!{ zcWk?wy3s~@<#_khQEnf2I~EC;WvpBrV6-qXCACz8YnN^3OqCJZQHKmAuBPHNzckyf zl|30Wg(uxu|F=0vY{>I(FBUHt?>+$U^Bn~{0I3$2ZG<;EV_(STI!N5E3rk|{C|P2Y zFM=*r8L_J*8Cr*|X^V~eco~rB0+rIPrY<*DE4{JK=lH-UuF`us!A2x2qeku7@n}M* zrHDe-3)hS4 zJAqA>=ZTM2x#|9NrCYp8uIdC6vpIdK68A;#b1nGyRUypZZ5q521kyZ)A_Wx=)(JNGCY>t;zCAI>uEm2XuN~pn*TrW{K}TkFi&9@lzz=Z%7r0LaKCVR%lK%Nb7===GxV(e%sFa zR?*6~Y}Jx*T4b>StpklJSZzYul~C^Wo>3@4k&iyTNCfI-9)TP38wm&QC9iOeM!;vW z5U0(O_>t2B5nRw;M!j9%D!mHL-6lnfm2P{5E?{b|b4X0+>V!mwfj`d0`8wFt=~w+N zcuk(BUS(-!lAlu&HSo~|^^YXBZ#Kkkm7ZWDebx8sDKgPC#O~wNr)pzv&*n9JEDBt&gSntT1Bq5EZLY9dUWsS(vjD51r*t73s zU!n*hWH5HJ4B7XcWC%7kM zb?)xkPKkp3M-80aHf`?Cw93nK$ElEZi4Bk5yd5R?FUq(}U*9Fx4}O-Z3n(2=Tsfbz z1IFE2&+aZ#RP1mtRPZ1WjDX*-9#Ly#?TSH)p8giGqze3mhJ)^O2?0Xy!N`-^%ZWkT&QPmOuqPm>Auhch-?ys+&_N!*u~I{`k463x74C2p+22 zk)5C!$k0nsnjo86>wXiLeSMdXjt^ue1enqHXtyc-w&g~O&c~~@OG=_s9R1|Afwk|x zj~ofb((xpVXU2vrQ@~9+Kgk#+psO4Ft=vsBUlivM25NeF@5qDhc#5yxE$SyXR4P2a z>l%XstQqg$bDgDsFi7YFk1eMuho5!`UYDrh{W*pka9KHy#1w{DI!-c2a>7^6#GH=m zeu?lhnOffo)g*ltT4mY+I1K*QZDlDDMa9_tBQ1z7hg3+?pfHS5ar;Uo znb3?oy&S1*SykQkb}PtwNbztj!6I$Fy>~W`)6m5}na4i`EBJbQd#4=AY zgz9qhmzra+FfLWWxCcj@$!Q{REMp@zb(&70_lv^_FePHOim5RzSnVYDODDfOpxpe< zxp^X-ij;@2Jm#HQscL^(bW?W=(1Z$!5t_|NWMJUI*1aKcyszS1*G^8n`1Za6aAkuhiFe-blo(f|4Gq>km?Ziv@6kA#aKB9gK}hg0CZ>tv6$O6o*R?*L zm<~+_z%Gmu4pt87Ork{%yuxDzH#21I9zN$&trDV5!0J;d73TTk4qEMu68vw zREV)O?_C>ZW8IIe7G1#r`-Ki{8~f?pv`1ms&!NeWm}<9COqz%CO21bv6I+1cn_*0j zbLZU@Z&PH2&U>kTJE;@;Uskbmv9E(Oxr2Q|2pnYGSDX}5Ex{@=-mU9ZcNe=kd>T1g zi@11$zlFe_(JiV5BiH&TY_ZD$A8=zw5$^)Qp7X)>o>A^zIdtn#q=L|>9qAny+?7QSAvh<>t#KUJO#;fk&A2$x(l6>-^3RhoED3 zB1@NMrBO>|jnBo*^!ExbLH$Nh^kG^#=tbChW_jKf?cZ|dN7$GUe|;`p)>QRpQ!;vU zS|7AyrP9`)jbaech*Oq(_sU--hbuTao`cspF*+E%%u>TaZ}Lz=~xR|QN_gVvdf&Go%=h@yy%zKuc&F*1&bOT(;XHWJbrmI zp$U{T#35~xr%?Lt{j3l+3zUZxGuGnB!y!EvMuXw3udLafk&K?$xUFAyD#6g!JUj0e|?(ro%nAk4= zb^#$D)5(X~qgUa4u8hPWf{*+<7OE(obzyAMz;JbevtEUp+sf z%zduOl6Cj{Hwsyo?)E9uD=v55F4(HH@`rkRiMPCdG$f#94y8{fw5``FH`=xhat<^& z3R+T$+|Rsi&J*lsB9OlKZ^gRvtIs z^we0Asg=Pt>N1m!RBa107w^zwUkh#Pq2p*ges zFaAZJxF3jQ)KbmD=}SSgy}E#{^E2NOMEK7kiyd+j^6;vhe~3o|vJ}WbxeW}-I4w>U+yW;=S9?xhCn$+t6g zs^Bu4IL-1?E6L(s&{-GA|9oDb{LzG=wI0Te2`t7Kjv}WhRZGez5#bDMu2F3I6g{qMHYxfWk^p>O-|U!#CVv`wqjyrlI$? zl=tu01V2fPjS#7S7d~{8V#Y{SdFXy?iZtcSDG!0ko<&&!o*np#l+*bEU{NS9=&ygf?KEylt$9c|p%ST#1b^mmE#vrU#xMO7m$0X- zH~jG>ME4J494A*;Vh#s^VjP!%#9%%SSsPp;p9vWd5Le1h{eWxx^oCdqi_SCZiyNjW zd^k%b%ykDY>kY?o1^weHc#mx4rK2vz?cQ08U~*D|mY#&%_5l@IlPe3+F?(%BZIiZy z=lk^vWoK3JhIKy8D*<5Y^LgLwS&^sn90VoldhI?gF4E_${o0H#kb7-%l2q;Z)0NWF z#^3b4Xd(}leqRWt02*2Dp%|{q1)s7Nneisfhst<4EzV2_tMSu33%fR}ZASmnVD*Q1 zD*NFBv?dGk2~H;-^Re7{bwenYo|EiEGnVv=bt*Fp&8(X(aL_F96pR7D{(?pF_Bg$z+HlUWW6Q~( zL2?24#(|1}0 zJ+}d^M}{&2~IKi^7^fMskgaLD_sQylY|Knl&|kK%3W=?L|&@T zj4v8{Y(&^L=Qb#1{6!4u{~EId{7M&JHAA@+ zlGnbF`+%1gK|1OfC3Mj|B1;bImXKf(V-FX*`>O7PvrT`eS0t&>4CMVHPgFK%6cbaU zDKpy4(*roc4X`-Z&0|r2p~~55T)eGl3LdX4bG&_aa@%u}b2Opq_NKm!V}-efjS4Dm z0Q|zkBV%jb(Lp9)*UdGcMUkBGWTQ1| zzm6jAV#t#u*#>vsM=37pQqT5_%T&(B4vZw)QYu^uPJZt!TqlCV4gKKAmQ_@G<|)O( ze&3T?D26Uh(ID(IwoYV8Blc_lc0$i}3$m-iW9&QgU$45dE&E?_A;MnJYtSPfWFq7> zzlv26hvGvNgKw|+No8ec5~I5(ChM%D#&wzJMY3$=V{)Izeq^2!h`ctWc12X8|FcX^ z+tdss_S($Q`@)#QJiq?A2mIDrb+Vmj*Y`sm6V2{08zgUadR-5t5}NVj!9T?BO;0zc zr8RG)P51Q`=MB^x_%^qic=b`{^3cR`0-bAsGD7QF3%W_9c>r%DAFksj^m00kPYcP% zyH!*SeIT&DaR_2OT`s3ftCh`XV1g>oZkEW(8si(GN;)|^R$%-VKTe5^Y$RS|pR%h( z_gSWuD=tkO4L6=q0Jvi&se}zvs!g^6!dkFz{glUppiWMUmIu&am7i#^-Qy@lfU`Ydp!MqVhGo z)WRS{%cB9Yr4kVuKWV1&hs!+RBM1QwNX&Gg=*ThV#q;!@&-8?gTuxB;!7^oN!16V(dF11cb zMHZmplN+NwyTDK2>Ee?4*E<{!qiCnIh|T+6zmtX0+^h&BzjZZY2c<09Xt^XNa-G38 z{4(Mhz-s?ciSSBUH$Uu;DUVAK;J4P>hUK+(TaZ~SUsZ<*#hOq(Qn;iorzRI3=n}63 z9dAP7GTQ*>YO1wQU3F!-sTJ3c{*pgTE>m|D_JZXVOT+UQ3>EZZm-cK?N}U>xr$h8C zDqyJtUV;rBN9$6i6|#7wwcyp&KSC1B?9A7`S8wp@n4s&sX*z=*~+P*)Dr&MbQ#J}mfG_!T| z^?nr<7ej%izOkZh%w0!!QN+#f_eL(L*MjTjazyg%<`UjA*0tkw;V@zMnr;%1X-e9N z3I+jM9@>0*mmK)rQa8g7xTYLawXS;!H>G;h%I%9?<@?L;5gMP;39JA&X>{{b3VanFP zG)x?6>bnwp*U!%Po2C6B-PGXw-8PAhO-n`02|wMU-gh1jkN-~d{iS>YpwD>Yu+e=o z-fuA;@b37JS#NR@n~W*~x+T=enM8UFjVgqsS;UVNgkO8U;SXfKmg;)8*b4GZ2C(ag zw6wI>BC@&xX~Us{;aRXw6<9abohqHTqq20QvY)CE3w1_?4+K2MMs*k)fn0HSAWt(y zdxX9JAmnZIp~7B-1z_k_ld{^`$w}hI=Elb6=GLJP*zDcF1Qjrn$o{cypJMj3ZOtTz zCZI~SV>v;#H+T+3;8QcvDVhrG2d>3#w9GA6T;@=jvE%ECUlV;3`l3-k2S_{eSP#Cj zzh4qdlSg1K4DmY|IA=sf%d@Zh+b$_W=8$+xsUyJ;!XY0lS`y5!MA&~xWK4g&nZv;& zB(B`C)a|77lDAV|0brUm?Bd1Uad@j&s(adL$4s;tcvfAO`C>P-73+!YfL?OzYP+Xm zWu@6f9lL}~R5|8Li}(YS@_jD25ZjL5CS^&a(@Jo`EElZ734`?=k|VQ?gU{5 zdW9*DTgP3!0vcgdHP&vu;PUl7IcW}RH8Ck__NtNpJ3p;((DpH)apTD6k%C~0=EeWb z1%Ur`P$`(wU3vTEi~V;C%Y=SDd<9SVOzXV=*4*5jbHK$XPv;+7>;wfP2AohXG_o4B z`Kod>kkOzxcod)W5eetApd*#|v5&4E|18Q9sn|UFd8}|m%Pul&+I49?a@4PoIX0!f zduM5N>d)b@WUH9%Eg5I}^~($rzA{f0Z5aQQJcN~t9oVjuSNISDpA67|1;=jl46dh5&Brm6lU3KN+mBqk$ z&EqV)SEXj1(rz=QqzvwJuB+2qS}NVQ8|%8Zab}6Uf3|S_d!C^hMXH<_zu(qw(slOk zqn*eVPOrsSHm`^N;+B{|^{t$|0g6&N} zj&%_Y@A80mr?c%v&hnezXaaIC*Kdh@9Dt@tI_%Z8q^;U8Us(2ds%0K*&C&F?G%*d9 z%ue}wYz-y#D_VJckMtaBr4egXTwL$38}|$NGTiq^0nZwJaS`E=D9=1)iC--{D0Yvk zl&Bay3aqWH9VD(g<=tLTyNp473HdAKTMPeG#TdIT4m<;CX>k^S4Pnf*QK8w;+ZOjS z%qm7D2&cIMycVC_nMqwB_ia+S0S}`2i>p4$!Etd*H^wd+N??s{*b82qkT=!}w3+Y* zGYd5J%p$A%(Zp0bISTAczwd6J&c4*bK$h|<%LFCK|6I;b)M8ap=~gId7K^`wQ0HU0 z`q2dSz#DJ5!z|=U=+ZWRJbgBM( zueqVLCB<%W-POe<|NFlrQ!t(npcM3fuGnWD|GNYd?$H0|ODeSE zT>tx>L`Vgw^!lF*CT^bazn@KBbqj#<)c;&xmp&T)^WV>JzTasi{qJXz|MP(VKa%Lt z#uXJ~O$H^U*LDtcS4`>NnTl;Nwx-16#Kokb;aQkmQ)WJ{B=3nx2|+stP`3;8rHY+l zu~r;r*pZ>>t*fI55T{A*YKWxVFdb3zQve=M&K3a^!)X2~cI+WGj7O0N8EwJB+YnsZ zNQAh$S+{1(ERi)AZcwNl{86sA@7Gn5u>tg?jP&L{?XZYVZ8C^4laMrFPFK|fBsLza zpjrY>j}nYGHupaW$@TDrukfh5*hN;XA7=O+kBF-O!}`vY14sYTk#XVZ=f7ZDcx>K4 zg{DraZuRJYS7_zwFIZ9{-6|kEk%`27@d=iT1xOE+(`b z_c>KU)raNz#Er#U@2jVuEwKAac(?%7EFkER64 z*P`S+uixPe7WFLw8Vtds4VYZ{D2l^kl+}mvE!Oq*^#>kI$+@yixzkzHW&M^Yf485r z)03|KD6_ojyI#UdA}kioGo~mkoIb%qe1p+2xz*&)>5=0nclxf8wLWh{(Mc1rsRY|152o$!v`0`gfF{RFA|BFAXm3=n=CnRqsuZ(j&?4-E@ zU}puCzh`Lv%cEN{~5B;u9hCd)OFvEEtN>d`%x-Ag1>EVdI@6QwP6&?u|mj$T_wiWL||77qh-Wz%ra z1p~}dT)d@_)kaHo4jmGK1NZ3FFZI33YyPPks888$_kPNJbBK~G-495vRU8ryA%Dv# z_v7j@&!w;0CV)Sab4=+}8Xu65Y)g1iJna{^ORH9cQTOfLkd0myjxSz};*!iZUy9jiRJpU7-|?bphZ-Yzn{OE9qcP_0Pu_PM7~>KD~fwB6M{?Yj9?;Z8kJqr0-V*A^q# zz*$t83w1(1oDkP%z}>sgrQ_6p)smZyFivnh%YDQ>;0izp{bdf4ru2`P_q$E7gB7W< zOC)tMWgcOvvw2IYCU=-uYsBZ@2b4lJuUxZF!w~ z+ft9tYFvBQ)uS5WL`YJw4*Ji)paD0(<9$XcBX!XYtU+SjLyBj-?_5PZsY`*RIx?fy zb7m$*6dv_{zDzR3xW^Q4MAjMzSynKLBfC3YKbMNHfDXI@kpT?BwqQWz{P_tK{6#4t z^Wv*PCYu$?{%5(oU{RX6Oe99_ z61qzYs5to!(bZO3lCP@o*6D>RhY%E|;881A`ffRiD1q)cL(lJ2AzgL+-ofp-a3VO~ zh_=2-Z}r+(SMYXs1@$P3_oW<_d~WjQj9$8a)57M*ZNj_i(NaH}K$A@>X39HlFq0K2 z{Kp@pZ^p_-87)>*hY|2cR!MF^w63hEd<3bF6krdv87#ajX<1rYi(E(1mZNV+(F0?0 z^er=dH2>JyqgdSPyiE}=;)0QUH0>#IhDZdri%PF|df)W;LG4FLS$Vnl96wxjEsgBb zIw+}ydS1P_3(!>QQW3s#N`mQ|=BNF?XOyH=*y_%zwgysXScK+T3+&Q&+_)8(7|jEq z;)ga3yGO<^UbjNJ0Fsm|yQlQab?>dRSx?1>tTHrwzp0qfJCcWrxF2r97FqVuoK}qB zM~M-mishuucHZ>p3^x5?`=|=p6(nl}G8|}0dP^#xq1o4OJYuO9QC%V0+$H(yApCbP zv#K2*r@$fmz|xM6D)X>8V7(Rs{2_?%pn4-@PuEqR;(D+tBpAVKwE?tjWQC0=l~EU3 zpW(<^3__!1O83)F8|S3v!3)PYdbXk~D;q;g#7;mjEHSa(y(}a=R&3O^e~2j0prlzl zY{{rUIS|@D_#XkqFBsn3dU>MjPD*vlh91 ze5H7xbj+4$XNSTD9E>x8R{~^cYBdo%Uin_x-rnw0Y?PlP5^CWXD}q9!MRHHqD+Pf! z=dX^l95aEPuBGIG-%xLO6r+NFPEeG}xQ=T7r@aS`lG zJ=49zX+TmUlon9{Bw+9l$Gm==;Px!4lOnJ3Hm0wlvWPaz)xXKJL|^ zmmUQ^)#Z;za9z!|hB0q$9PUC=;=$Bl3qYqzs4>dO{_*WSv61j>>&)S(EHJ~j)fpIR zUtJbSwply>)x-jmd(b*3$KY3$ogQE?*ra1Wsm)7}3NvE6+0$JZ@WFe(}j2h1J&|V2v3~ z4hx!FvG=dP^;oo4=4d@4+g~QCt&!*{v4M?ysrKxuB^H6r1t>HP*r@M6V{(Tbnf&nc zgM%xh2bFyr&CN4%wUsp$28APz3*BGkbE>5!BmnS?8$}|xMy6O5Ju0t;whOi#uZ*wg z*sQ;-btUxMGAOv}x`nBYI-#xFIhbk4Q}p%Wseil|Q=AalY4QtmUJ?XX6vF=!nBOJ_$Hq`aWFR;y<)?m^aPyrv%JESt-3} zpJg#)d(t#(I}(rC6RX^fLyjPD)AsI?X@l0k_lyCPIi;&MYHk~zoRI&0&gkeK=$2l+ z*3*Mb<{ozZxonoZDQ5)&NJDYPGTz61qUs>PKn+=WWEOSYb+JvH^*=sJm=5lrSVJ%< zx_aieqVUQQ0e@oIf!C|$tTDsM(eaj9nJhEO`)+ZoVo5Qn<51&^6;S3i)#ytA403#h zH5a_h3)77u=8WfehgrC&E3f#--oXeWzT(yHUXZOSEc z?wvE>J?lAsAnfiw90l>eI}4mqr?YB}Z)+#Oe(26hO;7my|CDij%yPIngIX7u>i&u8 z>IL;)KeoMKe|OL|P=W5sUP^oOtsVgPqyH9}ft^9yRR1*8(>JscSu=!M{roc%;|&d+1E!SWBWcE;9Wq()CF<}j805^z4t`C z#SI)j&&<6_K;&5U786T58ezNQcXYF;@_>VZenanXki%)Sw~5_pHS-%=b?01Sg!li( zNS=8_y$=g3IUw`DczHZVOm*#FR*11W(lrj)6Ad`5Je+xby2$RYQLN+C%P9k2;0%iu zqr7|uY?y%Gjq0hc)wT*Cw!P{*z1kSi+`PH`WIpGr)5vNnQ17$G7t{R*LWExhX5Cv= zGl!?KY@+8GAk1+;!yju=ANSHbAB5h53LS=NexPN1yjn(V&-VlVOgg1YRrZS$+F%sf zAH$NulGJC@Yz{hw9ky9l9U2yG7S+kwk4L>EgD-9W4n-4EtFtw0T4ql+Wc;Tj#ZEz4 z#P)xZG+wY%&#t)o;PY(2fjyC_<#Yr{Qo-|u0rn?#r9UBpL!=~i z+RU00hYlbbJT)aPC9!rGT`9#R=f)(lkJbi1Wr^*XWiPHARc}kZ=lNZ;^xjKuV(Oz# zv{f+|cPkW!LGs}KDGuV$K&Tq{{{^cS-Z3ddah(9A7C$M5Js_pNb0+GUfc8i}6ZW*c z_=5)CTWCZU6hFjl_Teu>Y;0^@3%zIdK$w!Tun_O5lMn=Jx+PrrB3tt@GYv2beRkKA zD*LYogIJtPwx;@m9*mmzHTDH!HFfWLVr75Ky_cTelkmi(#8mfDG;sDrg+XE&QPN*wVE$q#rXiH3BNm_Y!;qXH5%9X@t#bmIU@poCuiWd!Km`>mZz<96x{Sk zDoa9Y`6#m)zz7!UOrS1vetvLsCcXM`)Btt)TOksPAfFM{JUzsu5+WrM> zv|VWFm>u9;x?da=IdN!Ey%mRnh~Kp;E+6$w!LxF`_mjrovOA^g?vUpU{)ph^#bHdD z-^tE(ef;h(pH9fu)WLQpR*2+^bdI~s#F9}nBB^*gA`E^lH^Jx^JA|k&gx_%x5N17D zAW%IjMgT!2p!0?ga%^6CzAhfI|8?8VHq%vLU{CPNv8Au?{eiOwpNe#bf`g-EQZ;$G z;(sEPxzgCrPit;vT1-)uj=qId7q3&tE(arf}; zYnNoGYyXj32ohPgedi3Da6eDc6k|l-3wkF5Awz^IEsNs)%O)sn`#iubmfpaD z0M>|-P#U#Lc>j(8fhdl1H7{x|Ix3)(dp^(poPsw_OG0DGI_@Zhp!+?(8#Lr4pbwSc|bb%*Mj;FYK)RgYmQ++c( zZ*C$)7&xx$t3=6W=!KPeSvAwGfJIqsa*$mT*VYndN+<8a5Ip~UH z$YQn_w+7Cv3QcU}i}L&8O0DYwACW!GW>`lxtuABRdccdr%ZAUhMK@Ow=>JudH0 zKnVK2dWQQ%G01p0ob_$0X?VC1a+&1oH;%^NulnoTv$NaVvxC~R{V&Au6@xs$z7j+b z#;|lKyAS2}iHNE=08m}?2S4cWQCzmOH(EMRijG54fMcP_Fe+h5TSeOr{AP}|l~q-V z+%EK8PN)5olaeWulLHxB2R`IT_}!kpDe?Ot&xV7h{qIyp*M6aLU(T{$#UKJoFT8ul#v9hrpeGz4* z#kVn7#1MjoaFuF&H%S|KdZh4ruu6(5MmdIMoVygxoI#;~V)$}fHt_L10cam8+DQd0 zrZ_o0D`K^6?c{3JWSR#taySThrGTFZINz+S2GII(7FY`ln;bfcAEtC@yWOm98&#Q| zZeWE9R+fnf3zgri82w=PMb8r>8!K0ac}USF7PTN&pv}JzY6J48`tNYoke9K(et!AXAVJP~coi?KsUgjvzn-YB{S zBM_C1##J;m{d9a3%js{XP}6EsS6|%>xXAaUUPuv+0w;>mKi`re1la?{hY!(--;w|1 zZljV;NZ4OE#qbB{y7V8hBRWv&`gS-5f0ILM3s40Qs5ruBg8`AL{6}HoS^sXaLjJSB zqo0-R^k+!bi?&KY9y-lW?hL`56HvS+wVxsnS2k=nVldSeD)vK`?n?GN4_?@;hz=6+ zRww*D0Q!f2dkmycN(`L5%{YUk2E8V~v>CyHp~rPsEa^pUaHdraue!lwQ~H;_Ts#vz z_WUg&oW?1fbkJtA*x~Llj^zTuF$Cwg*Y{=DCHv1Cy`Wk$4pD1gMHm8Kv53% zF7MX2pPGL8Vg0z-NR>eWUxC6di-!=rQ5e0DdeK|U#HcGuf7YjbJ)hqstud?Q?s9>Q zlsSv6sx!Vea^hj82@cFOnX_=3I}mHZGCLKAcOKUqTT@1G}SohGn$PvHam(4 zzF8Dcw=&3;WZio|!;-AJ9dL8qtrhiHCBjs-%LO|55;f|QYFRmAl^a&3fa9Bzl?69w?)eU^pe_Cip* zNe|fEm`J3WA=?*qe8n0V_+Ze-%J?eu$nVS7y{3V}@hCG?4d*LJR|JNKB5*@Ypk1t{ zy&N*^(Bqyn5Xtw@9_(F|nK*V4iqCp^4QM75RdC?E28@~FkKfEa-(O7eJmEWfA`q$? z$+TDXue|g=Kl;}V(bZ3lVs^pa#jWdto$PG3H6RCBlI0 z*ml^5lG__Uj9g1MgZ1S3SueMM-Y;waR-+-4PyuRHpQxD02VjwjXH5j|D5VNQU zXJ8$3VGXrtDbZ~h>n4}%jA(N=#F`qg?2gmA?<{)HxIm&7Ndd}(?|WqpIzw4@yrjbK zvLA9^CV48T(fIqS!B{m^f6RRvW^MbYIn0dK{i4~4R-7QFB-LxNrRwSmArLEHV_k2J z)z~D*;9-DSBP}cS_(W5R6$@`thQ5q>&KLjw-Lq&vi3nwW*IL4paL}VoYa~0rV1N+M z8O9cfxcrO%f_O!x1n)A{tk$LUSU4(Nmgl;wVF+7-kFpD7Uv*AiGfrL>!>P&8qWkS$ z32`mN^jC;!@-$DZi(v?8%9E`dcEt+PRS9){m$11txoogP?9_*Jxg3l=ssD1G>6kcT zTMc@{Nr35}tX)aW?5ww0{g+;|tx(@inT%Ad9Nz2>U)u3%%lx!5V$hXoL?r_6vq&tp zGH#&Jwj8f{U1dYo4l}N$I`&b|wLG9v+K>?2G)m^?4L^O7diC&m6qvg+zUgL&cb*LEZ_OP++7t~IE=9{)TD!4J_|HkRN) z`^$>Juft6y?`x*(>G|*emOeut1DKwPL zJ0mnSIKFz{ve06(1_}?)dM78Fp_~1XYtv|9YNKmeLZHhP7#6=4yro}z1#UiVt8wtr z|7Djjb5DW|w3k)JK$YD{rB@zYA$gPTXMCmTN%o^fdCl#If{u+DKG~T(h)k_lhPBg< zTkD%}%=5^rn=<$FMOl_#Rck<38?JAkWXAyK85OBtLDycL+WN^v)oqv{Mc`N=ShHuuM{(tH>(jY-ln5hm+}#YC!0EoV7{^)+h3iImCX9`WhJ=P53%?$G{^$I~ z*+_MyU`z7;QB%JBU3$vUKz~^V1=+dutUT_oXP-U#YwU+buI&Y2hQYdlCim-hq*P!_2}UC zJLg7+E{0=HQ>l~V)9PG{KrYc!7P4L2&*^f1^@b3_{Vo}6F?ld!g`JbL zKn}OxYUNrplLJB@QdGF$rAN9#cW&IImVc($m8ro~r-;mQ5JKb6#??<69ZsUeYu;JT5;WAf>Wk{pJ!Wnj#<+O9g;2DPE4|3X`nf%@CR%*^>g zf645Y z@$|0ibaP&C3^UagmcEs9Squ$Lk6^ z2d97@Z;1^x%OWg&Ca{lcc|W^~PN=sXI2VLk25P_5H&<5+OFXnjt+Y*Bz~g3KpY&-x ze9QZMTZ-)RdH(ksc6PV-_B`#X8+a&2Z2Mpz-pppGbVmCUN#-tw6A<$EGK-6+C8<5T z6hq`S_0T9+!^5^C_TPtj*GWMLp$Q5&)b=I7L;osf=M#M@$7@(686#-Shsv!$QvEaa8zGIp>oKX1C%(*NM zeVdJCeM>$29qAWIsewbQ<4(oU2;6Sxs0YW~K+Z{%kt*GfCF*owbYAuk0GKRPu2{!+ zXEPj%&*QF~*VwKTy-LCcWXQS7Y{wt#axEh?DnhZ%EW5oR+!~~}%vl7wt;T-Y+A7LS^8O&_N`fMc4BuHr`j?kAI0MN^xeES=ZeT9x6N2cYv3gFvfim<38f zQ)|R*vZe$)%twl0|H=fQYB<9a89~^6`<3j%cKD)L)UsaGx7$|-E(43ROY@pj)S@1? zef$#SHr5oNG_mxqOLTJzU_1a1)$jdQYN>&}=YLauj0BinTY3QSv7Z!qF#OPP?8#=| z+b!~hawyR8T`mS!d|4sv2`;Q%RnTde{iOJ2@ufHS0o@2*0QKTu-eO$+dl;3;W66wA z&@OK&1kap$NA|pi#@vok``%Y-sp4LoO)?Kf;w|zng*f?)f!ma!FY(VT*2a zNxl0WK!&@c%7Fw~h7R+Gj;If(a?oTm)hKQ07`HYuVB2?-99Ai3tnix)vbK{3yl^lHGF`p;$L z@H`<(rP-*(dvE37zyr$Y3bC@b{uN^rWdo8XgG`xGSm3iEowrs_wXL4$?CiA4cK!-(ch5S7`-m<@31c7N)<6t-@nHEKCfZ}bF zS9ZL<^wqSwlsin;YpY3H_*rP^4z;JHPM2c3s}H6 zcD$Sphi$8=g4-4r768RnhZz)hrafnyo#)$X#~+IcfCN+x9)tQ<7EVrET{7o8OG`PN z@M^S!gF|19gSNI=x!%L1^^JbXG__0(Jv6$(d(X0Qdd2&^xOT>eSX>)*z)K=U&JbTx zR0M@WK{owOs^Br>fU}?ZFY>i|whsS8l}NeFvM*l*C<40{;oPx<)^VoHlQsC|-HC~b zcz#{E%pZ+gUs9fPa>9N3FU2l`{?vUyy*K*;oOVBBASE}S2O$PYPfScqN(xiVPR?aj zb_E>yCV^!Lm;HOmI?P|cbPUu5I81I5i4osks@J`C+C4fQ8p3of-eO}rpT8E6*k`Fa zY+z(GGd&IR$t$4u=_wmj#`d0R@x=!Rlcf{d=gYEqp5!QFEvhFs04FXlFPDBfUYn@4 z+we#+O)M`L%25{NZHKMxAFr*g?e6aO_R<($Eg7*@RtCQbZa39r@O_@}nQd)*+u7S2 zaQp%IX*IgfCH4H=KSz1{VS!HJ$;rvy-kz(gtEl7DzcVwVA`jvb!R_;lGa_&9y%0zs z5D2^#n%eP0TwN}1h698>&&??~Cq0vZL7BtJk&}MjaQ+za_U+rXPO~$Ull%$zTpQ#A z?d(B1Qqz|&Uz(efR=)%1W`JsSXzv-m{j%}wztK&D*7gn#-+>#xsf75%-n?)Gt*_ts`s9Gg z*l*BU1oPb-AaX6fCsQ|@IHcIrIqAP!R!V0GCaDZg)Z_ zeCiEoL)!y67$UyioAvkFao6Po(0cVcs|nbzS>LTE!y;U8dW9Hna@ND#OAw)Or&IqH z4hj*OWK-s-MF8KqW5r!pRKWBM(tomeq%YJ(MvQg&Zfa}KdK1#DMfk#Bmg}WvWC+G1 zF3x5zrtKexhJ<|ln>Q=PPh*>bb(q9jfF2-z(zB~>_LI3);67wQvZ}*uNB3(Swl+2Z zuR4oOHQzEU%EnDGhX4XEzp9^hBsK_yXAv86ZP3_dv8Y^|nCJ4tRe8Ka;N6e>{O#3cycFi1-HX0+PHJfy>pPSO>pc z@mGiKN^R|Uy(~}Ug!fqjZg6#X*QR@?m~A=YVo}3jrVK;I zfYRiJy%VJrE8j)_i0zS|k!D<$A6=F=88_E~OvUrfQ zCBR_d1LHmB8U)Uym}!Q7_HULb2-E(Ov34>rG<>95Ic`7H0*<1`YM#@%LdK&t)|I`Z zU&uYrKR&IC^(Fdz@dYCV7N{(q&P5jqFn49pwtDx-Papwr4rb(pfMSe(;{Nf$K@G8? zT<=2zbv%CAPg?zizPK#EpkQ_@`rAvk=unGsklmiIMbi$W2~v{=whFOf$IAd~VXK=% zYyidToYf%6P^i!qtHHCh?*pFU4t%@r60GdiI4b}68-#!I{GiRX=Qt!eIe9#S?0)%n;HPU|0trMniCmkZ?zazrcu8&U9f7iyfocojhP(-6Ncr>W z2(hSG;F6>nf?1lGnK?M94p&)Lu8OG@>qIDK|279dyoj@818ylNXvk}%p z8HdasgsHj$Rl4vkVsUX1NV{3DD-|_02RmKt0Y}RTVD*5@U0im6X6du6l({$>;DV!# zj7r9c;aNX;b*j%A?@?~`{0kIf)5_7Hhd{7bKaP!Hi3Dq4&kVo1Zb{a1?0~27J9-q@b&9cG06Yb z-kUyBxrT4U4Jt{IRFY6hk|ZG{B6H>`WX`b2+%kk{LI@#*5JCupF*HI4?;Yc**1*MCvv>(pu76?K7&=aGZQfJRf`7 zRE;}oeMWu#v2r>~08+KU!}%V+^?MAG3s5e5{rOqj6bVq$W#l*hP{scFym@89vg z6Wvu;bK3Up-(R!vb4N01{&#|t$s11>PtS!DHjPS=j~gxTzWXsm&J3yhIX=#RYo@v@ zmY%(~bga^2;!|_8Fl(p=&rBc3`jek~gC9v^jgVZ!YgYPC`{Ctj_j1(=AS2W)QzrPD zyap0Iw6Y#I^dV#}^*6;H43*DmE9AQz`TWkEJKC9QRkL5O4iV$~USqL3Iy!tLO|x`f zyuD#=jy?(#2Qq=A#x^0C$)x<4^*S2y;Vbn^uc!m5zNFpc;Gsi%X%5FWQL1k(PfkAi zIg3q#7mwmXfL=RS4=->PUqeGfdycC;3=bzOZwd?yJbChDnIq-n!1Veg!@9uPv)X+7 zutnDw8l+s=&It=6s=B+o56|LWyAFGISJx@*O44I~%}wVeCD%esS7dZ`lSv-V&acYL zgH{ii&^-3$KXqyqi}bPIRmk+A`4ck%Q9;2e><%>*l?5NkB_r+I-m}APB&l_YWYU!! z-QWcEWXVIj0#7w94d>(&dOH^v7jv%U%cr$mj^$63ywy1|KQTH=ty|2@ek6KycXW6A zPE^e!=pkiz&y5D{IZn9D*Mxn$Hk?0rXU&ysCDlaT7 ztf(;L+qXq}aAG2Jul!)^(w*&&I`0ZFo#xf6S0yFL9ehpk89}Lpc);4NUkmS-i^P#tjVktx#`aBo{3m1 z1IGI>*W9cUd{#AUCd2|#k#ofgDh0Bpnm1Nt(n(*CzkJ*ijJOY z>iqVNAd=uObEjKxX#z(#Jw1JGZOu~fK#=U+ch5#D`dt_2#=5ez)zs9!WaV=y;j<1* zYjU>@5k=0O)75RZ6vRG7YWYe;nSxD89(s_fSeAJK(sryL7~k-Qy>cl>Vo|pb5!t)V zVysqurS^I(_*6UI3ChkcF&sNF()XkC(y|tR?0LU6iPiho@A#lSJax*!(Q$lYLOcBu zu2~VXJTvJySF(zbBDjoUCvf8jJfXpAEP}bpi@&$SH~$u zNNmJqAdSSXY7L2s%F4^;=NztP=~Q^n=kYb+?C4yQ_E6MK)~S5XL+8eZ!Y|yrZpC-~ z!w1@ExBD`OLC`S{PcK%xa0|Y@acOVI%pbsxF;<$v#U&+f1D_6s^%Zu!4I#>O02O_9Tl_{*>j@nNrIzVI1B_(ZacxYPF<--0zgUR^%rPA*PKgfnn&*l>}7y1|vxW%kPVIxnD(cdB0GZYmVouE2frRF@U&p18{M6F5nysVEpIqeRY;rX?XT8)D#f3#haje}Ad*l; z9Qx82b-c1t*+cLI+x{42q&I|2>r*`S{$L^KO(#yGi{dyr^PPXzM zd)p-k-e_emrT}vl6_xukDT-W7bpD-VbH9K8p72{=#^RQjiy6e=OdZm(U4JN_23w5} zTD7g)w%G=7>+lym_ld${k+(eMUDskLdT_38GS zwb|Cz){Y{Z$0 zZy#}EvoSaC#Shu(FFf!mG2zLRX9rgEM!sZz6KcjGB?yV1IpeZ4Lrqi~#WQawIhle~ zR8^asn(h4L!6&U&yH^uMuyd z3oh##a~2()^{R9rRFo0fkQ6g1j!q5^w(%ko5-ayOR&KLylju#t6sJX>AlV~{YRf*7 zydIqtiW^&|5&y*axGUTIFFoNxKJ7%>)q}J&76mM)TBjy;MVGekq*0KU&&bR~3_BV@ zOPUT&b!Jl_UwpxHf;E)x?#2BxFYe2NeQ4;LU#`6N*}XEc(Ncws^?fXV;r76y>=Ef} z+P|$Fo0q?&oOp`9j6Hm$BB`k#yIYivKU%q|3CT!RRW&XHCl|UK;1uI$iCUEQ_WgAJ zmIgRbDC9qWeX$m1(SZ1^l{GU-Nb+)P=~gUJj8MF9T^pAX*Jw#JW(cgE^;(VSdaA;` zytFhpCFmZ#f7`4Gn5jrE@Kdhk5c&$K=CniNeVwf#@q)J=LbCEYe8W1N7`D%*Zn?=fp|vF|du zdUbiUh=g+V+qZA1NO72#L-)T!6XoB1B!aeIa)?-wpRZ09Vzt$rBNnSedrPEUkpxFQCC-2Qxlwzara`Wq7^Oj`ZQ=C z!_A0N6A4rNRA%QRbc1S{QaDM7Drn`j<4{(WcxDz6Vyr4N`-x5|8U#yA%j?&3fE(~1 z_F~gyF6tOXt1!J_?EgjGNZhyO72iSnt$Tv*XJ^M)VgJaaa5f1x>s{tz8bD7YDyna6 z47e*Lz!cG$DQISP_ND}TyeBp_&!3d)H@-D~W@gVi?9me{r&}28yYMK(7N-tr;s-`q z)YymmMyqAwRH;1`J**TtQqgLbB)CM4c9OT^JMV;~4o)v_y0bxedssssX~_o^ES!{m zeW-KzH>3C>imMj=a`*74Tun&QIMb4QUq*-Sv}khk@+k{C7^%m4bgA$#XIU>o_CMWsoW~+0y2G94`F10RC&vkoVv$v<` z&;&S~src;})SupTO4BA)mOU61IwbNj;^GBY!AZYp)ZQexQ9vJTvg7nyo|lPavFYeY^>VCOwl)=_%k=fFCJ%imRO$C76`%R0YhuE@JzXmcp@cuS zth7`#?7B!oBo`8z=JafHv#OzwgP&iGK3{#`AEG#DBHMT!0vZe@O_V3IUboE6Q}p?? z42l3YrO7m5tpMIf3Ff-$14>zrJS8aE*>%xvYe*C!Y zJ2Td{3lH5((EeaSvz}k6$Z3psvPmg+YBw8VW#cg)p-rn&URz)3X)X78d(LgRO zfwdf+m;lh%y8ERLFQvk5q(1Z@&M3uE`>kP?4znEKSdv$LH%0fuQKw7iw<8lUsurWJ zL`Scc^)f#{B=wuU2wvXE$oZR7zm6yS$WT@jnz@BX4smcyjEwA&YY}*;oL>0q)ntcF zGI~lwTsZmEp{q66Uu}1#Lil*g#EG)u?KM9|!?cin_MOS;`n`6a<^ z?zj)*iy}$Zz;_`JS?!&ioJ`RX0-^iy<96y*<97UAx$-hYfIOUyW4V?6nvCNEI9iFx zOEa1QZl0cmE|K)h6?q3i3w-MA1Qs>&RkvkpgThiNUsRv6oDTGDa9Akx+JMOFvQ_%bC`BkOG#j?kTlYN(lt~yo8$;q4K zd)V9aMJS@PM)Lpk>C@co>`r=mKz21f>oehU12PqP+BO^Ui(eU+6&_goeeSHyR7>nc zRb*uJQZL72qI=d;0zrvbw5|SeqMD71iwnScKfm<|?Q|MxMeZmxAgJ&prcU@yhBC{c zQ6Xx2A@{nul~5eX|Cq3cXXfXJe@S<|{JXce*Hhw?%lD5TKepw--xN$5IDc!22!i1& zzb(hCxAzk*3qUw5-flc(ZZ4?XDfC z>d~8m$ia^TLsQi8u+E}2+t$queS8iegu9$?<~pzIaDFBT{T>*YpP#Qu+pxNk@+3h` z!Ta?#!@(lV2(B{G)!kY9+IxN+b2!mVbIc!aw44f*S~+}5BJeGQx-DcV?dlrfuWp z$Bt&bE9Fw+Yx?x>zi*buD*<9TKj7E#lwcoTaftsNYwEj*&3B>q#sx94MQTF49c)oZ zMXUJu1}h{bC4EtFqV#VtmZ6dkPWOpJwwmA5Y&!=B2S0pxFjBF;T(jOaL`2fBGD%KK z$_T5|>AN5-JPWvJjkLZ(!mbCpRtnf_>X*{6)#R_`iKI#Wm^OltU5O!;N|9vSm6N^X zlXN2SRyuhI$z3gzno#UToG29~RaJ+AWS5qg4+NydaZ`eMmnMw(J?6(Lb#-+L?q$(j zw)Xb_y0GyE-;^Y6sX!IS#q`eX(eIO|`1v8=*5TbtOT#Ruln#I^ODpR$*MpRl!(Ivc zF_g~EB@_&)ErkEjlGfJ8eWD;2u)XkdBStp6YesK7HQs&7?yTxGihb-kTic<@$;n=v zMMoc>r}2J%S59y9*^$bVp_L_*;tY_|F!#5pnh-0*xCj7|T12?@i#D~A|Cbzb&^-2w~ zKebK#te2z9ADh!=C&ZfW|LsQk_t1mq06wwLKf|d&do{DfX?%CTHg)K-5tZYCVB2qP zMcr>n8;->$LjwbI7HdbxFh|T2$*_gmM?BHG$RNKR5JcEz%0~L=Ajmg3hjYiiIilStlS1)zTxU1k zUFYBb9qe5wFC>qSb-LhPm|trNi;0s=~Emdr>a@KO!CbIN3pOS zG@IU;F{YJWYjIF~s+>MNEAE!a!NI{mg+DYZimR%sN=x;4qqlC|s+Gl@CCiT9dxFC;&VMv_5b>`0JCj@s^&prj0$D zNYe%SeEUKG{sNBJa|fk~tw9;OIUymUr>Ei#ePEyMBk3JH0p>to0QAp#WgYY=>X4AY z#Y3H)U0vRi1v^O7Ciz!l@Ki>8`)pG%7_Fqb+82>VCS}rj+cDmw!m8TLb>JCGN=iyg zV@Lz1jb00!IkP)dzP5KV-*+}gAun2K)19|Jemu+0CXi@O^JVuJ@Bu4Zsz0Y%WRmY> zZx8YkxXaSGo~|2SEi;`#Ov!)P#lz50E5QR@r4C&p^vJcky0(0l@!W12sVh7qN2dd>`mztZB10wZNpCD zW(qpq%6}}XQIYE(0Tm2ka_#?!y-g$iBtAYqDG8AMSE1a4S5me~{V!DJRQ6BX5<~i0 z4F#6r9iT&iKE!B|#ojdZY3jNG(f^WunF=n~tV}hb<3c1sCD%ZaO7uWG{=NEELj11p z6>g}+XXob`{=)79dX=&_(zukSsMy5U5jW#@VO5}DcP`!zc-Uy^>gVT&l#0k3e+Kvr z7EC~3(no|TX>asy{F*3U_4>7_l$77xXvg#bN&7ys!JZ)5N=n8wuB->8N*cIkpr`rR zSrkBX?v9KRuS_yvTJQ(~=ARkYT^O=?lqJ~P-BwW$TUi}r4YdQoZpXtcWBjElWMJ_k zC*!WbV@ktB@p7Z__d$D@6$I%o4ShkLsHmvuY;TWM%RG?@DW&FP4W9SYK4~o=Rb#B; z*4`NLldEUgL`<0LWRGZKv-nke&+|7srk$v&$U7N4^_Jf_R}aDi&{3SU0QZDA1X$>; z1>*p=Prf`#IZ zHfm4*!!Ud8i%>3#UVXmt(NPqJWFalP>bc2F#fhmGGpivW`NT{-sLVArss z={2etgY8RtCb9?uY*q%yQ~4cwt{XZ2SJ_13;tcW>)c}l5i`ZcdHY=#k0tFAKcMaX> zc=i9-8)xT9K;lm&Zy_;~QF*-A7~L{3>jmnSVEvR!2@&}*|CUV%XGZ=jP@lS7*p^adAM+ zY>Et2$w__F0co;PHoCg1=~^gLXT1^!7V+bw{L)&GgFiq+0N7rLbqqa6z{C)734A~~ zh$zS%Kr;`S{hVIpQc9H@WG~}>yIV`w&DHfw;manlNtNynwzferX0cX_;4konPjkmX z-_&${%*pR$aB3c86wYkzJw1M)mh43?C*PeQ-rJZIuE^zzHB`$is;F4Pt1zl`Zw48< zx+Z%hLXk^W^Z9m1Hi)s3va+)LRvP?_3=QKkf75Mb-)wH?oD$+dtIyarsfBm&d`X@^ z@9pX7xj5C2=cU40L!UPj4%Oq_qU6ZUJ!Ra!Cx~YDMA||0RTz4^(v0}vNU50Z4dkd^ zUt4Z{sHFKAz2dnZA8lqiUZPjLO+`V03w|7MH44QzzIOTDHjeK-ovvP9OITtf9)0%t5jQRk(&dhg-As`R3jd!uieI#Sdk3KjI3C&juDko(9JZyah6Pv~n5p z4*R_lW_tg4qO=BPP%H3c`>gTw@@j{@Ub|bn8;agI<@7-rA>oF&r%#{n%ED%R?zo>G z7Kdw1h4x)v-HaJ&@L+#w3v-r!SFvbiOcqnp;$(c1lmr0=dpNnarOvXV&^V_}h5VQ+ zYrq)eSM>RSN?XVO-t%!oFLZ%n6>Cj}m>^AvKE^9KwTx8n;8LYfsM(Q zU*N)dz<|?>01It9Tn+zCImg$8K@mw(e!h6s%ybvbyM^A~cxK!A_U(pdmUIk2MuAxk zBwZ;IiUm=&uR@{0L0^W1n&Ul;%UW>Z*`aI?Jzd=xD-8Yq?N(xl&yHT!5M`X^*tGwS z{o@>|8fIXiS86%dUI9spu^Qg`c{SsK>=B)71eSUr0Ko4gLOzBhxk<~j{=#OJbSz+o zbiwzXGHRYdi<*%gb@}vUp#&IU+Td54No`TC&T(5$Y_IjvJ+Iqb&|N>qeUeRE>wcQwPgkbSyC zNxL;i*s{;G2;o4+XDB%kZKX}~+qz4$)uyNWeGqYfmDo>Ha=r<)wgp*h5XzWk3x1~ ztN6gD#N_5)#uuVDmr|9g!|NuVsLv-qk>=1vS(_>T=Hqc?sMn}d2$$agR!57;!|dgl z_~A!{3K=am)J1dDKzW{iY&&}9HoKNib?7F1ti2#11lK3A5Cx6SYn%s6ox#clcO8|oUA%$W#Cw1m|+`0 zRVSfn0}!=7*0bh-Iw5&|G1<2FhB*5dNxr73GCrf!8w+U_=WaXQTly)S&}>&?2N{F` zioxQKE=E-*nZ7HJUwmOiw;+_DI=o-WbZ7Bd@{Cqf;ok>J3tON_Z@Q(e7zt>)^4iw; zfF661^NG8nFWSX_-TAPhOE15DC?(GO0v*9wCbmCG&@45dE53jA!@JhxeVZioba6`#zU{4bTVT zGYdX^63%g|CR&BtcFXrbr;B%XpDLZbznsFZ)YGQ7X@ifG#z5soP60u|FYWE^mlVXP zf9Uqa-WmLr5PpgOFpO#I>EQ^K5BCn)u%WvBFCGO*@Wu`Dz%*c(@g+U#pV%-d@cjP_ z2>g6r<@x^^1lWD}{|*KGpa1^*u5SO&d-$LC@c;B4*xo=@6HmH28<&~nk5r7$dhL}n zH<)`}_P}M_1!sJMTt-$GjF4JuwfeWH~30#e@FxSP-UxYAz(t#6^<#r}a zwN!Bth}Y!RQJb@8&z_cvM-IdANm$rb&qg&uU)D!S>i(PsWh`66VY5x1<*)Ou$0Ng| zYcF*0wzTA8q-C3zpM?=LxcmUz%KI9QAad$ab@@NC^kan2otsB}`c&ekD;Rsmq?w%- zUG6z;sWUJ@2bdeR-&!K?mD7}94<`+fg+j|cI&Z8uGN1!Sm~?Q+Z6P3y&w6pZ=74oL z>{?hF--AzLu*em46!TrCY87;K+k`?zvb+=AD~=~$+UiZLimhDfL~E$aBU-&KMXD04WxVfw8$4&j3Q--jGTIRG&+-r--}7U}!> zW^m!W#BnLSam;NBFy|?-Fet65@govvX4_4ZQO6#He`SyQxKutk)H;hlOS2;YG|^Zv z1xaYA9izR=6U^3dVLdWj(X6J)&MJA_Nk_BCsfhB&Mf^%ZIdcg#jeDa4BL*dQ

DCn-$v{O!|X3zY<} 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 PHK|H+YO;AUW_SNT*#>-5 literal 0 HcmV?d00001 diff --git a/tutorials/source_zh_cn/debug/profiler.md b/tutorials/source_zh_cn/debug/profiler.md index c718b434a7..11f2ae778e 100644 --- a/tutorials/source_zh_cn/debug/profiler.md +++ b/tutorials/source_zh_cn/debug/profiler.md @@ -62,7 +62,15 @@ class StopAtStep(mindspore.Callback): 自定义for循环方式下,用户可以通过设置schedule以及on_trace_ready参数来使能Profiler。 -例如用户想要采集前两个step的性能数据,可以使用如下配置的schedule进行采集。 +如下图,schedule中有5个参数可以配置,分别为:skip_first、wait、warmup、active、repeat。其中skip_first表示跳过前skip_first个step;wait表示等待阶段, +跳过wait个step;warmup表示预热阶段,跳过warmup个step;active表示采集active个step;repeat表示重复执行次数。其中1个repeat包括wait+warmup+active个step。 +一个repeat内所有step执行完之后会执行通过on_strace_ready配置的回调函数解析性能数据。 + +![schedule.png](./images/schedule.png) + +例如:模型训练共100个step,schedule配置为schedule = schedule(skip_first=10, wait=10, warmup=5, active=5, repeat=2),表示跳过前10个step, +从第11个step开始,在第1个repeat中将等待10个step,执行5个step的预热,最终采集第26~第30个step(一共5个step)的性能数据, +在第2个repeat中将继续等待10个step,执行5个step的预热,最终采集第46个~第50个step(一共5个step)的性能数据。 样例如下: @@ -86,8 +94,8 @@ experimental_config = mindspore.profiler._ExperimentalConfig( # 初始化profile with mindspore.profiler.profile(activities=[ProfilerActivity.CPU, ProfilerActivity.NPU], - schedule=mindspore.profiler.schedule(wait=1, warmup=1, active=2, - repeat=1, skip_first=2), + schedule=mindspore.profiler.schedule(wait=0, warmup=0, active=1, + repeat=1, skip_first=0), on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), profile_memory=False, experimental_config=experimental_config) as prof: @@ -97,7 +105,9 @@ with mindspore.profiler.profile(activities=[ProfilerActivity.CPU, ProfilerActivi prof.step() ``` -使能后,落盘数据中kernel_details.csv中包含了Step ID一列信息,根据schedule的配置,skip_first跳过2步,wait等待1步,warmup预热1步,从第4步开始采集,根据active为2,则采集第4、5步,因此Step ID为4、5,表示采集的是第4、5个step。 +使能后,落盘数据中kernel_details.csv中包含了Step ID一列信息。根据schedule的配置,skip_first跳过0个step,wait等待0个step,warmup预热0个step。根据active为1,则从第0个step开始采集,采集1个step。因此Step ID为0,表示采集的是第0个step。 + +> profiler的落盘路径是通过on_trace_ready的tensorboard_trace_handler参数指定的,tensorboard_trace_handler会默认解析性能数据,用户如果没有配置tensorboard_trace_handler,数据会默认落盘到当前脚本同级目录的'/data'文件夹下,可以通过离线解析功能解析性能数据,离线解析功能可参考[方式四:离线解析](https://www.mindspore.cn/tutorials/zh-CN/master/debug/profiler.html#%E6%96%B9%E5%BC%8F%E5%9B%9B-%E7%A6%BB%E7%BA%BF%E8%A7%A3%E6%9E%90)。 完整案例参考[自定义for循环采集完整代码样例](https://gitee.com/mindspore/docs/blob/master/docs/sample_code/profiler/for_loop_profiler.py)。 -- Gitee