From 3008fdbe5155cab8cdeddfd6cfd309b0fa5cc31c Mon Sep 17 00:00:00 2001 From: hehongzhe <935062458@qq.com> Date: Tue, 5 Aug 2025 11:45:17 +0800 Subject: [PATCH] schedule feature --- tutorials/source_en/debug/profiler.md | 101 +++++++++-------- .../source_zh_cn/debug/images/schedule.png | Bin 0 -> 89572 bytes tutorials/source_zh_cn/debug/profiler.md | 105 ++++++++++-------- 3 files changed, 117 insertions(+), 89 deletions(-) create mode 100644 tutorials/source_zh_cn/debug/images/schedule.png diff --git a/tutorials/source_en/debug/profiler.md b/tutorials/source_en/debug/profiler.md index 6db35690ce..e265f2d6aa 100644 --- a/tutorials/source_en/debug/profiler.md +++ b/tutorials/source_en/debug/profiler.md @@ -22,10 +22,66 @@ There are four ways to collect training performance data, and the following desc ### Method 1: mindspore.Profiler Interface Enabling -Add the MindSpore Profiler related interfaces in the training script, see [MindSpore Profiler parameter details](https://www.mindspore.cn/docs/en/r2.6.0rc1/api_python/mindspore/mindspore.Profiler.html) for details. +Add the MindSpore Profiler related interfaces in the training script, users can refer to [MindSpore Profiler parameter details](https://www.mindspore.cn/docs/en/r2.6.0rc1/api_python/mindspore/mindspore.Profiler.html) and [_ExperimentalConfig Parameter Details](https://www.mindspore.cn/docs/en/r2.6.0rc1/api_python/mindspore/mindspore.profiler._ExperimentalConfig.html) to configure parameters such as profiler_level according to their data requirements. The interface supports two collection modes: CallBack mode and custom for loop mode, and supports both Graph and PyNative modes. +#### Example Collection in a Custom for Loop Mode + +In custom for loop mode, users can enable Profiler by configuring schedule parameter. + +Sample as follows: + +```python +import mindspore +from mindspore.profiler import ProfilerLevel, ProfilerActivity, AicoreMetrics, HostSystem + +# Define model training times +steps = 15 + +# Define the training model network +net = Net() + +# Configure the extensibility parameters +experimental_config = mindspore.profiler._ExperimentalConfig( + profiler_level=ProfilerLevel.Level0, + aic_metrics=AicoreMetrics.AiCoreNone, + l2_cache=False, + mstx=False, + data_simplification=False, + host_sys=[HostSystem.CPU, HostSystem.MEM] +) + +# Initialize profile +with mindspore.profiler.profile(activities=[ProfilerActivity.CPU, ProfilerActivity.NPU], + schedule=mindspore.profiler.schedule(wait=0, warmup=0, active=1, + repeat=1, skip_first=0), + # Disable online parsing by setting analyse_flag=False in tensorboard_trace_handler + on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), + profile_memory=False, + experimental_config=experimental_config) as prof: + for step in range(steps): + train(net) + # Call step collection + prof.step() +``` + +- schedule: After schedule 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. Based on the active value being 1, data collection starts from step 0 and continues for 1 step. Therefore, the Step ID is 0, indicating that the 0th step is being collected. +- on_trace_ready: 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 [Method 4: Off-line Parsing](https://www.mindspore.cn/tutorials/en/r2.6.0rc1/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/r2.6.0rc1/docs/sample_code/profiler/for_loop_profiler.py). + +**The principle of configuring schedule parameters is as follows:** + +As illustrated in the following figure, schedule has 5 configurable parameters: skip_first, wait, warmup, active, and repeat. Among them, skip_first indicates skipping the first skip_first steps; wait represents the waiting phase, skipping wait steps; warmup represents the warm-up phase, skipping warmup steps; active indicates collecting active steps; repeat indicates the number of repetitions. One repeat includes wait+warmup+active steps. After all steps in a repeat are executed, the callback function configured via on_trace_ready will be executed to parse performance data. For detailed descriptions of each parameter, please refer to the [schedule API](https://www.mindspore.cn/docs/en/r2.6.0rc1/api_python/mindspore/mindspore.profiler.schedule.html). + +![schedule.png](../../source_zh_cn/debug/images/schedule.png) + +For example: If there are 100 steps (0-99) in model training and the schedule is configured as `schedule(skip_first=10, wait=10, warmup=5, active=5, repeat=2)` . Profiler will first skip the first 10 steps (0-9). Starting from step 10, the first repeat will wait for 10 steps (10-19), warm up for 5 steps (20-24), and finally collect performance data for 5 steps (25-29). The second repeat will again wait for 10 steps (30-39), warm up for 5 steps (40-44), and finally collect performance data for 5 steps (45-49). + +> - In single-card scenarios, profiler generates multiple performance data files in the same directory based on the repeat count. Each repeat corresponds to a folder containing performance data collected from all active steps in that repeat. In multi-card scenarios, each card generates performance data independently, and the data from each card is divided into multiple parts based on the repeat count. When repeat is configured to 0, the specific number of repetitions is determined by the total number of steps, continuously repeating the wait-warmup-active cycle until all steps are completed. +> - The schedule needs to be used with [mindspore.profiler.profile.step](https://www.mindspore.cn/docs/en/r2.6.0rc1/api_python/mindspore/mindspore.profiler.profile.html#mindspore.profiler.profile.step) interface. If you only configure schedule without using mindspore.profiler.profile.step interface to collect data, all collected data will belong to step 0. Therefore, performance data files will only be generated when step 0 corresponds to active (wait, warmup, skip_first are all set to 0). + #### CallBack Mode Collection Example ```python @@ -58,49 +114,6 @@ class StopAtStep(mindspore.Callback): For the complete case, refer to [CallBack mode collection complete code example](https://gitee.com/mindspore/docs/blob/r2.6.0rc1/docs/sample_code/profiler/call_back_profiler.py). -#### Example Collection in a Custom for Loop Mode - -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. - -Sample as follows: - -```python -import mindspore -from mindspore.profiler import ProfilerLevel, ProfilerActivity, AicoreMetrics - -# Define model training times -steps = 15 - -# Define the training model network -net = Net() - -# Configure the extensibility parameters -experimental_config = mindspore.profiler._ExperimentalConfig( - profiler_level=ProfilerLevel.Level0, - aic_metrics=AicoreMetrics.AiCoreNone, - l2_cache=False, - mstx=False, - data_simplification=False) - -# 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), - on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), - profile_memory=False, - experimental_config=experimental_config) as prof: - for step in range(steps): - train(net) - # Call step collection - 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. - -For the complete case, refer to [custom for loop collection complete code example](https://gitee.com/mindspore/docs/blob/r2.6.0rc1/docs/sample_code/profiler/for_loop_profiler.py). - ### Method 2: Dynamic Profiler Enabling Users can use the mindspore.profiler.DynamicProfilerMonitor interface to enable Profiler without interrupting the training process, modify the configuration file, and complete the collection task under the new configuration. This interface requires a JSON configuration file. The JSON file must be named "profiler_config.json", if not configured, a default JSON configuration file is generated. 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..e2b8817f811cfe1f52a4fe56fc2e2d4097967238 GIT binary patch literal 89572 zcmeEubyQr>wq_GF1QOgKNaGgVNsz`J8i(N8-MB*_xHQ&SaCet(JOpApw$* zkWB7-@6PY8dF##0nzu&Qtb4lus9JS)?W(WN{`NV$_Bp>-et!TEsVS){0WdHC0E|CB z!0&Z{!k^lI?)Y0L|G6IiNdJBZAjZQ0VMk(OFasVCV_*_v{2l^4{o7C@F=e62 z4bn3g7MTUakc(Fe3zUD3E8p{87weA;*7W8wBv>H;t4+ISZs@4c?` zKK@8#&K-6EuiNQyeF;h&M!&hey1vN&S)m&bg8jH;hMVs8Yoaz$WDrrDAN zxgkv7YWsP7^mpzsQF`Y2Ltp=#Fo05sEg^=uS&tIGtqfC@@>uxz!~wGWDmUh#*eu*T zO+xQp`hyA`;=@5M?6`r$@bvQ<@^*I@c=KRcn{B;Xyxlo>{hOwRNaaWJ+TNgt;+a}~ zj#Z}T+(Y9{s?Iq-fB17M;`z{U!ar!W*1Z*M<&objX*NBtX*P3BQ~=AccIs4prsjpz zU$@b!J~txYn1$L0_$-zMn2(UWXO2l<_bxDL8RE7ybH1}WUaaf11Go1s@cCd$0aH3D zVp+S}!lYEu>%O($GcX&U6bo z-1bbBz6>qg1Olc@amv)V3!coq9Hi?<*=54gy>qosk<>&i!&W(lSuP|&;=7%hCmJ;s z600_|Yf^25yn~!5WX)ZT?9-H-uGiRYxu@}{lVw^-{B32FipIcFIrDA4iQbZJevWUq z7`0tehEq7QPDu50{BxVDmZRMp?dRvTO6sYS$X^+bs{0g(g>%$~CNsB}4k|?c0^B54 z=nA-#vRgDmF!O#kCtpctC4S}zpVZ2zUVk1?MyEvYEZyqTNx!KM*EEx z#jz2;D)k%SB)zu@dONavsrFNNQ&4ng?Cf~1b)9U=1(%6-R-9b;j$%lW z(?4%za#%0hj68kJiU5DXFU@Km0g=nlj|Lxby3Po?#A%X`CURFe9K6xiaJhHZDIK2% zG48ZMO4s&ZR*IqZU!O z>F(0DIqEIfD!jE%xnMfsLGZEA zXmvtRw#NJo$0V>wFnY!cAW{qa-{{*Ss$X8zSCOfgUz~vpg~|=i4VNKi^uim`uI8}; z&vt5k$bYrvT#`6=>q!FW6yXYLhdxY znc2%iu(?;3Izyq`ZC{Y;Gp{boiDrr~JUPNN{I*e_v1gK4i$r#a)<#Km5=(?xe~J-2 zhYR3`n)$jqOk25jgS())hMlirW158`ZY~eH{HPi9-(1y9Z9O5(!nChzt24JbEG2Pe zvW{@KGe)M=Yb&>T|KiPWkVc0 zcWx6qX|U;sO}|aeiNqRlZEPvao30y^!7|k6=L4_SE6OBBbmxPAita^k`HY2V(-z1d z8wVzaPggRES$20A+A}sDWQizwKJ`)9Z~Itcbn^<5Nxt3euv=FbFbRA=Y|*@!?uY9j zdwl>3|N8bjVc?v=&y?hZ#bz3O{0!rk4Pg7cRb&FPu2+AOrnSOt_CaC*WB5&0} znw?G2dr6}44hxN3ncd%j{v?HqKZGG;%W1X)OX!{2x*;Fn>|^+VVhyr{bc8^?99?pk zbBA|zZfYa$EaqCD7Hu|#306AOvM^@D&xU5m-&GxwuxD6z2)0q;tlXrUuBiJ!$qQ;- zrpZV1U7oF}dic~jf9p_X*!<9fL<%aJ36GN6Z1|)^w)^MkHhr;3P)yTl%~!x6&owX0 zT(g+5a@w*hxZOS6Vs5chYjm z=;Lu+jc5x{H#L_vq7GgH{46wMO0p3`>>NiVJj-I_m5ck!VjY#E`N-B=A}x)#Inb}?u-uJ$VDkZ?nx+o@^ALi-YuZOig) zzwn!(>gJnk1MIT6W)1jDREoTPjvHN1jwZEen9X=bf44K6)@rI4VY<^Q^9bV{o1$a*9zL7KiYT9ov#K5yS;G8-XK03M zA)ZP6QG9bXFV+dOQSvTx;c7R6XEjP)w;y6>3`VmX@M1IVqiA;ZQsmJT85c$J&8Fi* zJ)g~h+R_M(nR5U}cgLD9(901^a0l?S!KU~3-7!k-jk`YLLZ>#Q!-Paz-o=ul2*W6cTenmDD zT;lt5QTC}!>9!{FL&c}e`!jQ%SN{V$r)o4hoM8F^cfCtasRygAif10<49Gtahq z24YptCwU{#nrGEs9hGhw#!WqfEf5+Kd8rFt3(5TDdB6kf~ZrS7d_genqje zQmL=8LOrh`6+ot(s5>|kZ~u}IjVn!NeOK9Y`@t{Iy~tjg(822IAXOP>lGmU91#PKT z`_=Ta=sj&6Wdz{1R5M-MR zm2DMiV8zeirHbbCY1e`v({V+WGQE7K@v2HYC3$8|lDue>$Ozv{ea;D6_Dun=H(c-R zB9eYhq{w}6?F0boHUFn>@agOp7DQkShJ!YliLb-LlY;og#00;$*(pkEc=^zesZOZM zfN>x!D{UYneg;Vswu{`dl1UE5Fc3diK%VnbOyefX? zydP{p;ou++22-=fF#<4vd4xCPVavZhT;R`LnOm*WrR-^q&(oE{mwgjGbkg`5)_u&P zJm4emRtzRgOs7_=F6&j4`jV2{Dc+@UylQH&KwAVFIUrFnj{jC(#7{MM4?U5m@m zdbzlAZP~?k!g1Xg31)JNfc3SI5@qEQRsqiAnjTEpscUK&4IO) z;;W4C5N2%M56_b3_8S?z&Gfssq}DZ^+j55l^8G7jR#kRSLt(|3Y^4 z{GZ&PAHMDBsB0Uz#rh!9&|E1{ZPIGhdngLH9bc$C;Jzr~YRsOXXQic@!PZpR-xLVp zY(R~CZgJtI`~3C6o!yn2SQO5>u8UJyzD$M^u0yjQwNa;VLIO0K^P#bHey-t`U;IL>EgaBkXEF(_|PxbO5dqKsZ$HtXAf@W$GE3oM+`bh+n!%6P|$+A7F(gk;2-7=DIw+?ak@ zr+*z`1kHq9^4xj~E48Tl))EiWjZ-T=^YR(t*m-vTWGy0jdv|N$m)#2!+038_;tPD0 z=N{ySI~QECyYHT28W;fSL>!nU`z+#V>oc13|SvOX8u=#Zv%C=^`j0#QA1XOUNMnIyUvvRKD+ zIyHezRO{rFc!N?8-02ild*Z!{avyGuapv+S)|KyPGUz5EqSPA-D=tyY1o8Mei0>yU zQ%?Y6FQV+(|Q+dH39nD+UuSO_B4-^5aBr!&#Bs5NyR?wTAfN_eqYH+ zo-oTPex=z0L3s#D9zK}w5}CqUyp;{mW5T)1rsTGDx}BM^_aRl{oZ@<-n*x?+dw)hZ zJo1Y6NeXDG+k^(0n$!nhJog^%gRY~1Gass7tZ`Q_z9c4SS2k2*i`+n(4DwSCPM+!| zT9q)QijPKKWir319ZRj1YEo3{Qw2ijKy2Ai55G{lmZ$QZyw=FV`XnVIlA84>F_K}@ zDK$r*Bsz7L1f?X7u>gC@WukRcDjPk!baPE<8zGt|4pSRNfw2=cK(>GRSrEG|AnWB(G`%kE4G3QVh zh{a8))Ft(RUt{?ujy5HJ_{114NNAI!n4vJzpMIM(xP~XrHHb9E!Sw*V2Viqu|65du z-g4frLN_JW#|O1kLs&<8g;Zgu2v`{-bEx~GWYBaoR&Gx(0*pMbPBCtt<0WYQTA^w# zDyLBaD^&8uCTOJyJZV5mYokkOW;d+9*u)O?YCZhovniOcLFHvLRS(AbAa=8ODEB$+c$ZJQrdnJf+%A)&HKA7+R(hSj9=(80i7=kc5g ztCOvjcm~4GKjn3FhN%ea!t3>SntqQRJRVv0m4UVcG)GM}3Z@)J6wF80{j@q7di$QG zc|@nqIw#tnLn&L^UL6lZ#)mi=N=`=HGP|?M@;iQVKgiCG=2eXe_Nf~Ek*dvk$b**Ntq+zY=(10P} zCzAE^b_?q3-Bnn#5iYqNRg@kz++&Jd1vtznS^a{VO~O;MogrZ#l9n^^j@|cX_ijSB zg;MNtnk2^bwiVAklB6JdXSrsLFNt|ZPqn?~MWwZHd6d(ayt3eQbt4xMfhO>T#t{`= z#`E-Grxl;x*B(WmDOEOWB=ZNCa@FSa*3yH>gUq@TL6dP5%i~pXqp6FO1Vj!Ojyb}y`w4&EEyP&2v9U@ugs?qmz8mF#-NTTo%s_RTUYa*e%+-6pe z{yq}4RKsUth$p2ao~yY=&^&RlaF)v9Fxb-M%HgKT2Fc5gFs0dUJ7S_}88~wp*({oU zX@8c8@a~Q~o`9SGsQ&tCjB)&QQWcpDMyLvV7B6w?7_lPoUe$#I@7a&Xq(VzbvO}Jh z-w9xiXl{i?Th#fu#a9#L+oa5$mqM$tMeR76QST?tyH#n5XQ;+rtMYXgy#Rpz{rwQe z;0i>CoI}D@rUu50G<$7zsOQ=LoOy<*(Z#%&t23F}doGx?1I*;WFte1diLMsaN#mh@lTf9o3FolMl1R}Z8cQk@R0&tva8qS* zD>)wYDz(~4&k)~mWx}>pS+P;c8|9*(rAr7OXU;$VK%~}0ASfvI9)N}Z?{B*v2R*gu zhpcsXZLH?EnBh#G-XmBQ*H$@EibNJv-S&nmC){twzeR`}T$ua2pu9JYbUhPa4vwiP zcYO>4k~~)0b<9vylqp5jUy!UiV6G`Vr*MBhNhZfifY-%cc$)%C5Ia~g& z83h@C0|fp^wiK7q%!sekCPSZUjF@{|oiiH?#>d;CMFmAleTnC$Xql%IaCqieeBrCY zFvWGG%Oci1sN0*AS*1*#EgN5ck80_NF0?(-?Ym#w`kjveEk9+N2LQ&9Ix2&r{tA!@ zZ!R7KUS0d$?pbRIjZy>euK^fIEjj?7fFHer)hx!bZDy|EakIJ+*M*hw)s?ZB+wpS| zlUr+U$aWWO*VBw3x5Mwv@z6&1wH^7({!jA~&5RWGV60Zbnks4s2S%|w)u%#zwRkrM2ld}x%aV$QoreY<=!1L{YO zX@=71@oFD|LR)ehP6~ZhqWJ(D{b!u{SrTsWYPhw`Yagz69!X#L5; zOEE0N*NuJG`|#Z=0ZLLBf2LsZXP{YtiLZ3hcBLSy)uKN8nmd-gt3aKHt(4nUz%gp~ zR_J@AD_Z|Z1T37E${r8f94XK^X)rzIDma<@YD}A`H2(;Lqf1xl=A_d!J^jX)c{V;| z5r3m+UF`OiJ`9S*d_3P;@OnZI(t#nwJ~IRo66? zdh`xJ`d<_4&M3H%qD7}|Bdd^lL(7e$^+hg19@5m58K_|lG_S|iyn%`Nq^s4d!Bo)y z1n&*H^Hr;FgP~?;nw&nx3!aIZhmQ7&I)YP|{lsL1=QBfGRpSnf0M!RE?haBJ#QUE9 zTuSBpzS88x z6WzW=wf2+WkYT~qQ zqCjV5*F8x`+M`m`7DrGQRtHlQz$@Q~1eut3(`P)yfNKmV0gN@?#~J4-*~2BUmxZke zRGZo_6Bd#t23=rKaQ#dA9@-Y6x92qFa&v2|l~>>f3GRUJPB$8n_l4pO1GVAy5~@?X ztf^U{d5n^Ip?u%Ud128-AWz2^HC#5X_T}?;%v71K$n&(g3w68)-t@{IM!y7pVDt# zKYxvnG{5Bf*zi3nwMC&NbNG)gU}C$#j3wL0#R^=`*jumuJAvwWn}*};5qBOr-Arty zaY*Xx7T%xdDDBgPmv^et(%aXor}tcq6dYnrHc_F*;^{988i@vMn7EV_%ajvau>FXr zC{ibq1kSs^)ay3{kd`*C%fPvOmAekJk;kZ@Nww2*jT3E&>VcWwe0h3#uGIN7-Pa~` zHAKT^;u2nY*H}d4u}tP9kr6TY7qsNkR6Ma)2tmwJ&g=BB3l^jbfs{dp5g>^%-QK!@ zYhus?D+~bo_c^9N5hMi6#xm*Yfq#ftqUK{6@M#CAl!7Ox%zjhK|D=CjuGQf<<+Pz| zf*6>_lvEtAcO*V=7nJtXbzh(^^1XRDI;i9NfVLdQR<>r481K^6NU&c|+LT!=!T(0T zQ%KAnWm0|>@r9iK?pc|RoYT&@W#@vM3hFhzEg&1qk#Ru)pR5_5 z{;rL;L+S&46uXx!o)il^7M)w&;e$tOy_Iwni-CRKP>_UJS>sjLLj<3wg`@Gsw5@wr z|8qZ%GN4bu0;X9wo3%~G8@VYvJA>}n#VuKvlNt*{SoNb6i_arzoI<7cNMx@1%j<>( zTU0ruI{k<1QUFQk)m+_kP^ag_4$H&rf_3|Cw zpQ1>#+QlQ4fu5Rl(fW5HiMxsWCXcYVFlMN|d<~6^^G$$`nIg*ACgowAnXH82^NjXW zEP`$TP7#x^J8d$h{@*Wag8w`=F8t3V z6KHL8EZ@z#TqOs&LMLW^{stIY+(dOD1EDo%hU-b=)4rxmld9NNi>9nD2X0NKX21sX z0mXLsm;vKSh!Bzm5lA3 z*y8ORjN%njP4Ht3l?d=DRf+yInTqLnw7~@{r+aT+S-5H8cu5(y$gXYaWSk{a+4>Ln z-aaKjvAy0l<1GBtui3O_vMo$dZfmBoO?`Z;VeO6@tv{2|H0=V}c=7JiI^bKrYuxlk z(=J__bbh_ASYHV0Z|69r$vI$y+063=otaOyHyHz&%#3%6MMrY1pYS%G z=L9n7=E;be&7WrGhZuz~lW-0%hcE$F&Zx{c%pa&*g6PCRw*&~FTe*3o5i>AEYx6eQ zS!N8(9Ypjfu$?mVR_r$Ls?i8a*u=<+{Ls@5ULzhkZC$T})Lo)M^cjmo6k}-Y*3{d& zA&N$s^gD%p9Q1&zU?qcn?c}`oquciB-3S;+tL{qZ z*X$coangu9ZwmsGLy0-{tEWMVWAb8P#p3*SLouAwb@5?1RG^Wt>(Lmg0)Kv$1thba z=QjY2UV)f$87lh@4Bg|#bVN*SYxP=e*-byqmfeY8fBb2sL!D~W;ZtF3cfr=L-vE^O zW`!^7mM#u&S-tN?sCiz&t1W>N4O_Gy+xPI94dOH)vCBGsO(=GkYKc}{O8GE!wRrvl zn(bSe{QXpdPQ{R{eL)gjcO8zUG9jcXJABiG*eM{!VMj$%6ZKAyn1!WTY-$KLOC6^T zXBcLxCkmBxIVx{j^y_0+3B2qG^V!{%bM<0UdPv{X$lq}3dYkMic@xiC?gDRgynj$? z*=f_rR}NF#UAMY8(ysZm#Q#FrY+cG%Px@4uF^>smMWP(6P~&E z$TKPNHW2RwPXI#P%{!rEvPy|vY3XJY2GBKq5pCkL$^y-@C2EhGOAw+dD?f7H51m5} z7nC}k(NY*_s+V^0D?6^*R2kz5+jaDVNmRWA#aA#TMJh74%Oy5WGlp@yf1TB}KmOKa z9-vU}r~UYL(@V!?JZ`L_X4NkfesEA|eCE>i-Q(K8R=Db0&*e(3{3Ku0i;Q{39RsgE zN81=-`iQ9ze(z-|t=uM~1EsZfV#NHNtKG<1wF%7leyH-f~%SG zD02kI;Yt<%hoFdwJX8alSKSQw5V>>{2%1S6j-KSLYdIELAA}5|i;21JJ|Hx<+1E|Lzq! zG{mIBMr^Jr$D>R&y$owwxlq#uuRpWC~qF9o;sxz5Z z*6}0}ZT0uCUrFn&%%%}`g=w`@&C&1`x2=)u%GqgIn=LMe_svbk)3{tGWvTki2^=fc z6~&XC?xbAVyV-p7hloSkSQxtvL7K=&9NOZsYnJ2V!^2%!#B_kCdagqkDh>*TT+mM2 z4u#1t?P9AGwK}aWZ4=nS*~;f+G~^8=N8T&5D}D&yG!#En4;mjH`l`=72$YXvwGRqLT$_1 zn)8q2WY{W?Eq`~K8STD0BlwL zV7mD2tiw4sw{5Y$HZgZ8TR^Yn?l+*^2e?_nnUvQI@h5w4vPjIu)*?Ha)S~v>9W5$x zogW~?7oVi7stqm@P$p29nmA@n(x=gcO*0RQ)LoECZnh=RR5;+bEjU zq0G|+{1nPL3Iw_%ft^eN?D5u!Gao!sXHrMT^tl_}dc8-`VyKV%H2uEUi;uJc?+-1- z?1CNHzIl*0ioq$$qIRKfFFhJ?lk=prHaR^(cc$O>oPBB81EomZ=bmu9~A*XJ?h-YcNyLH7)xMc>U|4x=3~*6785s*>Kx8M`oC4 zqTPi^0{R5rZu1uG^5$)qu26Tt4hFGOz2j@L{62`B?KNT-fH4G?E;ag}`wndwX zbl51U9z70JmszM^q9O@0#?C;(siS;MiAXq@*l3*?5nFgVoh$Kv$AiyZTJz(kN{aM>y=eLT7uvR)s#JElXsVOn#hm-P$tyf(Mn_BWy6`Lf#U zp9+i6_OWV=D~09LeC1n9j}cKU&KuIUi}jzYT0cq9hJ-DbQO`T6oX-WSzsg=!`bv>yO zF7mY}F5Jc}BHA`R(x9iC`i(9Inw4HH(6bz=t)u!=$%%XZHkXr0SBF?v*Qh1S6Lx!d zVh#K)Ue-lp$l$9EuAxtV4^;qZ}@wmInv$KVYRUS(| zGBFVT)evL)AVMk0kPk_;YiJ1d)mRR`RJB{o$PHlP_%s^$9lgaenvnOFJz67!nN9w) z!;z~#O@b2HXtnd*l&;db=nd`Tl&$Lm;p`Pr@5O}%rr6b*n=dN^sWPV)Bg@Nl-V||e zm8uoBLPK{xGl*oiL19BbN$TTkL`@VJDpvpt}XHKi-oS(uigFGXALy>mRge{8~HiYH`CgF zm%oI2ce_OCrzU(a2l#Mk@bwK(9|;T9T-l|-hSncYWwJG&iG@7j<~7sI%gO!?FwtCW z+{_bgU_RrMc3Z>wv@9*3S2E`6x=kU*P@ib;snyUEyg}~hx-PO9q`Jk*YiO6R)++jT z1tomm5u7*R!UtY3?jFK0tBRV=zlm0p3$?jT6F0v5bmoUv@BXtX$Px=8K9Tt;C~w6t ztg{B0eN;bbzO=a?eTu%xw(n@|Ms_8dt3b<$obPGp%ae>PjZ$-*x`dp$R9dUr3ogHx z!bf>L6iSnXcD3z2pS0c{VN|z+eY5MoSv32|4*RuqeDApaV*2)-Ep?+UkQ*_5n}MId zoBd;ngkyN3m1T@u!c@xRWqKwAkzh+W|E+c`s*}=smxN4R#t$Cs)aeE@I-X81GmnII zH=DH!)54tzogazU8lKb5I`=j^teR2(gs9Jpg=uDRKOtp)toI_28>8U*`!!l!6rFv6 zta2o7emQ?eQ$Ny4f6iRwm+IG1*zVdMq7^HmR*1u`82O&fFMo0NR_qM?#1Sc4Fs zz*m{VvLy!wB^IEdGLh->pBiy)?#sOFI@NUUjk%XI_pIdCjkugro*!o?w!ZIdSY)7l zME0VlkiXI!EMMx>r}vh0{Vb~RVC$3XJ==`EKZqX3kF@{nUW49CzDdl2BSM(&-L4p#N3XSSLI?juBS%d*7-!~A=__VO0ul~8DrR5a zZZp(_A1k`#_~_=w+$Ml$^{2&JM63IS9c+4hZ_&fu$IJpS*q5KZ+zMp-My%6^m}FI# zH8v@O(t7<~P;s5ZN8PG>U2PqBDg;)Y(VX%K(Rf=H32JNqx!(XyqK zN_y0)iH%q50vG$p+h8qL@s=|QMF)BmEOSIj5W6|k^PpC4?T4~M05{5szPQIz+sN|) zr%H!0$E#;9G8lu8uul`axkTQdoxMfL0QMG_k;7`H^5rLG*cZI;hQmFikFwBoNR5F z0@|a1%>`cJT##`MO5WO;QcZr!O(v&9i@xeborXx&h`=UmFEn}EgohSjqZMcIJ)q89 zwspQ-J*~^($W}+<(QY(F>pUw%n`fkb=8FrX0l%?_ucv#A+!=Mrw+1DvxW<7p%qO8L zjH`_2RJvWx)uufl(L6Kb8N`rnNBoi5^s){;XnKT_0tbwNs6R0g$iHznmdF}^{rT5RZi^$40~^B~)OA_L%al9ccEILf^$(os zxmz4sntGEMQ1RH6qv3LjL~VYn?T%4>1*PNr;g_t_6PR>0=S71|;k%qnoyZP+`uc_o z2lZU_biEh+P%kq5qKP|?1}geJ9)21Xg1JYrRMJMGQy*zI)}|5(7i-5!dE)4&yT`HM za5`XOi(Dg*FQ1sF{L(OYFb-nvhP}7-aaq;RL5JH`o8ek{os7*ZA=CS0 z2t6rv@QM)MNg5li`eNXoJ(>Ua2%fK7Xy;c-kS=zouhcXy_dlM{%o{5%i&xk9Uky^< zC+lqAe9KqIwpaQdxF6im+^JIvAy;2DU#eZeAMP`QxYWAv*a(mK{>TsS@V@5{n~YR3 zTp|}R9cZVx^|(m}X8HnF-)1zU&U2=f@X5-YB5k zZ$Rn#AfMzgz!fMZx|})9($RxvL8}Xl$AaE>1X8rCJXU^r*gPJz8h6PCC#G$7lMSxh zd%MuA;oBLCd*^$2^Qg`5k=p`laYBD&`nE2!SS`w-6IIT8JjK$ml$lC4%tQ&r-!=5& zr+pRyD(!swBEc-HXUpMh77NtOx4uGxQhza({>_h>_=o9 zI{k(ev<9*4X1@tKRsI5iU=en_o53}=S#jv9n7+VRBliSQ+# z$uKyx`H%=i@roEY?Iu#zAZFMmOUFq)MbTyYYnk*0oS_vPvx_Corx2uNvP%PVvOrRo zbJuf{?(UWr3-iZy>WfnakdBEZ+)(`=OjSRj=x+IXmf`PXiNz>i@2^z1mvKw!cTC4< zkIab+mme)YNSylS!V8HwoHwcsO{wiIZ&Ni?zxuxc+`P0(X(PQyFm&K&AqX_* zu(5OU>;n31d?U{ujUFM~y%PD_Oh7JojV9rXRV2h4pEUBKKUZq^U365mcrKAkYyLSa zt()ycta^GP!6MD-R_*gTsB0}qJI=F5vO#b|NJ!Gfrnd4l^)}JEwxP+%L0dG~AfvCZ z5bhE&PImk?_u(Gu(QaTXMohI~P;{^gTkBgSIF%*ChVqW0uSiSLt85M;)6gf4W*(-U z6)7*#7S2pyZOh*4@VA`a#V14_)Nf=vzbKqSCgPeQwdd4{m6ATnB{5IgE4T&uw31k` zmM@}`{J45-@=i%YSA8iy+&7QnJTg?E{64#u$7s@Lps1L5_jP?edlUnz%=O1j zJY6%suzX)NFU88yOsdT(u@U@Whkneyo2y>zHvsrU6b0*DlG21KkXjs^(@(q3yk5^K zrWw$0qXCC>OHDs_)p7PhI{h#^^i1SFTeaFNg{h=Ef)5U9zvS0GcFGFSXXB$!%m@L#vfAwQCs(<9_(;APaq94sxX6+F~&6-0C z)<(!kdTgF86RX-F>aNOE7qc~ zq=N6~_r$fI9`Bbd?4MTqy~NA8Ix~FFcw{oaZtT<&d@m@9Y`-92 zC_mA^lFdno(aP9%$6xOrn3IMtlhl_HPy4Y*yzT6ZmI(kZROV;zA%gnRyz-BVd3zdA zkK8I(rtMv6%Q|5x=56qfD4Nq#r}{L=n%UZxEd28dh+-v`wWC_Hn*%h zfauTHaZG#v+spZ{pxeK-XwXgF=b&Of>pwZFn$wPp$S!O(eE&<$`sWP||I_Q#Uu(Ys z{@|C#V(0CbBHCeq@_)%*{Et81atHR@B-nez7cU_ygxCSA6llVO{=7qTIN}9&+|1j% zAqeV#d={?PZ?11TC8iF%;Tz?p=!#`K5dF-vyHPVdk(e=}=czQKhB$&$-XJFm^q$KX zvOG5U)?W-+lsvzmH(KB~Od#M9zE4_qkA^h6Y_gL6w+g5}-nsK(d zMrOBj5`hG5`jtfAqzJtZdpNV}M`1a*J?bYJuH}xSCDgO$>#^Zdbbb5W!udA+mHXcd z9lMRx>f4CFOZ|_< zqe+)S-#w4J_%2nDwfeO%rhVV7=w2py*)*j5X`amA3)%%^bY`D%4eqC+e{%feKq7An zKRwwEdZl$#ej9SMbMc+___?<2%~GMW@)4DSt0zu*Et^x*%+#8ND=4*_n{%~KHZ4=oaV(lRO8>czNU?9=Gk?grO+EoNNG-D1S^OUe%o9T z8k$G%OC)~#5xc#<-ktAfz*>@5k`|5jxTI~!CI@*lpupq^oelvqRf7cqGL3^70)>=S z&V)Qi>KP$;a{K(sy-($u?)MQ)pP>eUUJGTdYuS4D9b3E8x_U{f2@c4wo;Rz|Wr?TC zEw~gvUoSrQV(P=E(l+@G0Q_Qa-@p8SY+auGeSt`i{$acfe_LV9e_df~8ONWP-wL+V zI!{6h1HJ{lQo4Iq!8xIyGAuy|r>fv{w|Ub!YED)0$9nd}zwU|8c;p3rl9gANZ!|*( z%^Motq)UfLRw9{1J$+9jS@hZ(`wHtbTg4ti%6~s@3Y(56|~5)I%ca1X_?Qw zeH}fi_TB()i^~Xy!x?~X)G|f4`CF$cUIm}r{f?R#EFyiM_mNEEUw@jd6;8!I;wSyVe?L;wj`2hF{-(wsU{inMmAY*D(sjFdDwVZ5 z=kvB>qU4x08W{5M!5yeN17b_mfCpYrV^bXEG#C-o$fcU`WF$zzC3*36G3kT0kKK)V zyMp+@WJ!`He7^&%$DU@(aDGH3(VVwO{nb(YUg7lbhUOuv=pmFmyUW6`eiI`9!^yY5 zHv31$40(R|oPDOJMpr1W5I?i><4sB5tI4P){n`&mO?hFb99|+hvhPpq9`k<3ta){) z@QTdr;hETnr&q~^_~E0kaC`E%c9LoSvd2(D76$qKqgP|)d_rkdGbxCFeF91egARwk8Hwky0@i6uxDaAHKoNOrfOL@{aR`eQ9?Lfw8pm)_w^g9 zXaUWi_M#qlE&qC@9^Br)rT_~UCZxq`t**zzg~F%2 z`zlu=)0ibe>MnaJ*(NobbmLa&iAD!6^_{f`*7X))c;3^uN&qid%N({zblIQdm--2DrUl~7pH}tDce#1 z2<@|i)?XMuwcW-yuHVk~{FLcq2_Zoo^GDcYBh0X8oEZNnXJ zlG_w>D^*WJxNF>KZFT3k)@FVK>d*9+au#z+@%{^QZygoa-fW9@0)aq~V8Pvjgy1g0 z-CYB8cP22q8c>jRtqO;1VDS1oC=+-`?NZ=iKwodGEe=$GwcvW2}Ex zk43LvRn3}JHEWJ#i313spDhAuS$u6zf1loO$(I%8>(Q8O3#9Ad0cQ@D&%P6KTpfP~ zvG|PfI>biI-Gnt$r_Te5oTpS?JAhun&2s#ovI4L$XdnV{6y;h0YG(@G-)BO6DQtXj zf=<8qxZKRI0Uo#T0!Y#Wjd#Ba>)V?gof6oH85bH_(Na~;G9$RsTwd&RP0WC{NhJ?R zx`#PNC*N5SGs?eYOTd=KKw)^a^yd4QQ`GNzI=Ukuo{;KIR8^=~pRO+NH>lUa{67wI zEf2W;yVs}Np1*v(8W&V+d!|?$z12xutwT*gz=@g9rd_(VVbNxHwb|t$nLt~s#Qi}| zc1^*gc6a!Ynvn$~ZX=9?>-PR{htH9@di{Mc{N(&>Rm0%yQ{QIy`Rd5>rp~`!Si)v8 zaL6QMVlkxzZjv#c*yon8J?{PvNb(ziBXjq+Gmy|iMep{Z>XP@K#xbJ25m^yvyN4?`W|IOr*zpnm9ZYV!LQ~{PUpL9~` zom$FSZ8jl4+55fVL}o;u%ZhF)hoi^`*nwFgG=z%9Dq6V zCD6V)=1E_gF0V55yQ`HBs}-UXIZ~XwPcrTg6go%I~L%iTA>7^S&o* zYCIDtDP2XVE*E@B-f0pomF<^Qz!sF zByzjE%Wb{cz;*eRpR<9(Kme!UIuR>sI@`=P{wsX<|8+6&^KZv1@^3Ma8RJM|gL>fR zSI*?W0w3;Qcm4Ob|DPN3sRHk3?*0IOD<8j& zh~=*1_I{leO{{hzUmGvUUyT#iiB20m)Q(k4>K7|RNjoTGaVp)k{kk_*uaOMXYGQbJ zavvj9JuGK=DBHAhOZD*D%3P%}%+%xyPQcKky6u@C#YlDM(;b<`#XX&9C^Ye>t)Lsi=c~ za2(V*ee&|x=3f_E?{3~~ttSfq5M;24N)V*99SfM6uKFBW-SIU6| zbiV|Lp#SjXe|oSPs;NpcHkSjr&QeV7*k>*5t(7%fO=gyIoG(zfu6JV)*zDDoXsXGE zUpt<@uw&%Se%GV-@^nk3^tq>FYPcxLKI)kU+GcV$4^@BsiW?NP3E@iQN)#Z-*?H7O z{ypaoh90P&4`9*z&%`(9BL97_IoX%(gqw?+-vExA>|nK0daG@QJcVH6U-H#%_XPKE z&!pn2po#<{&<~BW;%UD1_jEUWkDF~ z3;+2B>_K&ErWnVnh0&%jjz7XV8d;K`wZP3}NO<08&%CCxO2-qu;uT0h*8NaeY_z-5 z2s+dov<MpoV(677`IRyWOA^-bi?LW))-fOAx(NXGxNJ_J;5a2@aa$*>Z z+dPxdXep-FHr20vr1DNekUJ++ric%JdJsnbLUNjjk$$=E(q$l*i&r1!RM29HxlzU(l_N}2div5N zN$R@antCrvRVP)hs9no0w zu{@O`ej<j=uk1CUgE8qXDK{HKgL3Xc95P;#Ame2hQfmXoGc7owa(8P( zdT;nCr{~|yUlYv#P%uZv5q4&Gh$(AhY;w>zGix|HQ?M*k{y=oHMjCc)X@O?o9M_C> zY|>q&yCA{(mG9kd^R^V@D^jWhfGz`I4Dtq$kHQQ9MKY7_1g4B&?{J9tK<}5^Zcc}e z*Y(PAOFBOaKYcY_78hfG1wVvGN#&LO27r6eSN>@f;^C(JG7EI$&lMKo0Z(*wrumhT zE}Ngz11R)I0#>J%;|2{nj^jbFHP5wwSvLD-;+ai)IL2Y7#CTYvbQMos3MO#g8N>1% z-u|Si!WPz8!0DJya`a(ta*LW=CB!#lhOkQ~v(aj&I&Hz)n@#iz@`JfdRec=6&~#uI z&8XcUc?K=FA~qJ9kRm{(bp(83S3phVCqi90f7Ee56c@rE`=)GHo$^g6!bcb(Pt>i9FaL#U>z6t#0k8ejs?NN;lznrm z!Vh74{A}#d=erYH868(|z1{MHxVgouv>cudsF)Ca{-D(;Em@XgQN*}WwAL7_Fl12y zF<%8?Wy{2^lgP6ag%Gf8KSB5dDN(A{bBdDS0LSxxp58vT550cK6vbKedz|;_YH!f- zjmL!V|J_f5{Xeid|0Nw0c)%XBfJoBii;cTNKr||Wr1yb55F0_5f52@}gYezI5ky5V zoNHt&uh3faR*Yg2jOWr>@e23IhNm}|2ljL!O?bx)=FHigJTiOcJ6T;qCY%AurMgkE zDehSa!o??2Z?G0cA~b-^BnTWeo~1{k37A$9muRPg%xA|pr#Dz&KG%N`ZYV$Vym|7r zU{a~qm7Onvq=ulRz9uL!Yq`w1t7NNDi7_fb)LeW=8V{{M=U|H0?{nX3Ok^*R4L zFv1%aX0m9k!bWy2m5f6#LhqF@4&kdqAgKx=QZ)!z>yZ#7hd$jMU3GF07)iLulo(WD zye6Yd(U~?}yy)qf&Cd`tS!uE2s7XD&SBBppC9Bw9Bl7&$?Cg%gmP@y06WBYz z1Xh2Op6u`EC&wpe=j*HgbM)jN2sOQ}zbo+n5cu`K>`?s~68{srgG8Hfmu1Kj8p(kr zoi50wq7AIY(gq6k{XulX+@MG*Z{uB9N{&%Waa(R>odb#Qt(Uglz;UxP5s6&5&09!L zZHY-%SPMN>Qp}XFUj@||d`KJ=qO8`KWSi2kYKcQV$)>5r6-N=m&CThX)D5}`UGfR2 zlpGI$ZHMOkKnEiO#7n?qR@?t5v5xU~cAw>f(}U;6eu)~PB9U7pyZr!>SblqkS#^(g zpLP$cI0q0`{SVzy$g=yt3JR$(RjGl6Erxs>;IdM`3XdBl3)!_O`{Xxb#Y|>wlVTV5 zsOro(S&TflSm;JjspAs7$-XZJqXjhBh_%=%(=(9W;+UlA93l&EuP97>LMPgZufDECVR$cI3S@Wyi{2LE(9hP0DWQDpD7}-*wVTWDs*}Px)MAo* zG0nv`Jn})M+seVYj%JRH2(HWDbKvPgwhQ#pNw$uAeql(JWb)}XFrYAX%Z7Q zpdY6AB+T!_0N5OFyog?`_>%N4dPDG>sp1m>ix-^HgsJk>kDj7$vRiDBe|yjn|7&=MVK(MGSP-6+A9qSX5_U z{$%2y`rPbWaFK?_8oiFM+iTpw?g#0gm_o zOyD}h>{-16Ic&Dv8}CwNm5H5+(#4tLzbE|-XuxU3N2J21K+&{AW{2{c+7`4jOa(-= zL<&2ad{1==Gnrl)5Dr>4v@_CwUiLfl7tG zye5`^MjiMLIVttG>Fq}m&e_8Sx*1|}wB0?w0p=E++)ZS9aJ?5t@0lOtrLu$Qr9Q5U#4AwW4Xo^pCMYgV_%!v~#>Hwc}23^6&Ru}%_NS}%)P^gc(C+Tf_tSylpzgNX+}M{nYsayqg*rf-J{*%@${ zT09gky}}#Es@94t{n|=gk=`@Qj~`t}3t05nXFRkS1xLHZ?UTX+VUA$9RzMH!)-Za4 zMfuX*tCQ8c4-?@Uua7kFJvhBdpQfoZv&kkipcZ~jIipkNj`hAQv8)aJx_SG`m|?%` z;fIViEVzMUA=g6a8R432PJp8>^HopyEzE&B+iyvzY*bXGgu5pH%x#~SU{Jen8t!#! zIo>d%$Uk5zizz9Er1QD{;SiAA{)CAQ=^y;Q*dnrPvJsUN7PJio-w%NBdh0LvXhQqX zjwO6WV5hea?~%$wsQ>TUdN3S6WL7N#Nyp}^xe_c&H+S$qA6wBCXO~ajp+}Kl z={cS>R?>7@f2ZWh==cuu0I=!Rh1exA3_+~=2o%Cqxrr$;rJlF5V44IS6SgBk;%Xdj z26B@Fr(XY#c+dQ0dljA?TgkOdnl2e7W#04+?@){x?OZAyD_#nLC1}V(mT|SkxP6l` z(RovJU$AdN0GIK^n!BD4+pUsrRArOl6u*%;R;m;cyIB`j6%>g!5TV>{W!S}is;SRX zmYm&QD;q)q+LT|SvB{uN*n31oE-gqt@#@D-F3K5QtvT8K$VUx!U1IIT=kXLf2c%3Y zEsS=)p9wp(Sxddvghr!d%6v2W&Ygd9=9vUc|gKDA9bl6ZsM_iavA>JN8vzWml!ck51JF| zYAbo2(N3JetV_ zk9SCCn%3=0F)ddJlKwsIQ$~sm-Y-eonnEhS)M>y-chqjsYn$jDW-G?9x$b zpCznlrIT=Q-8Fo;0sM03=DNT#RUDD9A|^u+2nHZ$j?q+%Xw;AAJx_+CX;$%ruU}S% z(FXg~6V@#})=b$sOpeK^O_{r)EKkzWrC8SUUdpcfCG%~w(%M_77~DN)R5SmKnVigX zo+Wq%Jli+?&MO@sS_l1FIB%*dOIN}XNYF9V0U zXL73Lyz44{FzQbCl-g1j^C%V8(VygDXysQGuks;`dSkmEsT^^(sjMmyf;f>ugi$5ds_ zmX9!Vd>uCbsoE_Q`p$}n;5VSW(%jWw;4=17sAfEE?w+TqDNAlK&i*C~oJ>IFqkofV zB%e2XWRqZfYSIAMNmlNSbK+}Cipz;meELwy!*%!JZ1ZEaD@mT|X-{yIegG-T%O-Le z#ThmGWT1U95sXx(t3#YhvU{9Z7eDcU`gPIxtwbS$c7pgvgQ@@9k zr~^Cki_79K>ICt{X{1HgV1t$Cx|5j(6d|&<&n0O>o(j^$J(qtjx%Tt~-M97y+%%+3 zQdy6EQe~g*TeXRtii|>`J{G8Gm4Kzg_JklPrkp+3{ZBmL!N{VZmD1j)WMW z=LzF_zyeZoO62pr`*j!o$K);!PK)9DGAXW_*)3AZH!vc1`9XO)z2hvRknpuoKp0KwXCz^-`AHlyzx_FzzSjc+u?MZJth-3fsWt9`i+ z?FKo?#A$~(oNF-V5h3>l%-i6?Zi z@y0CjqtW4E4H@mz!Ai3PpmZm{M{g~EL*?d;9O1Ob5HgI2or?5bWrP;RzJR6i$gI+? zj+1o*F|cQc(Gk50Uljx=q^@9YcTFUtH%lI-cTIJK`-X2?`PCuZN-1%fT1aF_Kn3|Z z_d;Bo-!-TMegJCc2wWVx3^X2TgVa#jwB?nwrfbW&9+fP=J!}YF;c$Fq)9jHmATN?C zl7YFkJ9o7Ztu4Mt;oo9Ib

I<*@Jum$CWdDu-5Id0s7HkA=TH+Uw{z?xboC&^IXI zeZL%QrK~n80-UR&O~6W6A|Z3>7+>u6tu;Na%jz511Hz7{s2W#CwvwX;vw&IC_3Mz0 z(6}Sl;3+I=q}!s2VTYWUNq8vLD;cJezw0ly>w|zRF)ORmm-suZDGetXu4P_zW#)|I z3)0UNwtUMZNi29ZTGuR~s83K1L0CP5?kTRU3I0DpZJd9%={Qxr3GiC6m zMkE1Wy|~A32QreJblu=SmoPg#q2kljJH-=F`K}`?oh-)lW$~+o>y`h`-vBNyoR*#% zA2FIzwda;J3gL-_;Nv8M5QV4@V>TSn9ERr#dG|`J1yA3uIbzGX6Sw-r8GX1ry!j{x z^fe@@tkP$$U|kH?tb!EXHh~i1A-@5WIX16y>H3~vNf+1R>#C%aQkd1%e7${=ZBMpW zVNtxu=IA$9;Duexc&@IOz>^P=dPK*&exWw*vor*P}dZpS&)CNLP`f3SwTW->$+O&h1EW#T5q*$6K}< zi{MB$(%fr;I+`SZ95a%_E75)e<8<_wW;QhV$lSen`Wpa*UcK(hzpUs@VTKsk97;@u za{Ti8azHkdi1i%f2rZXe=)EK$b^Q1u(rj81ZUPVDrb|pX-KX}6;yZqcp1mr&yy79G z2)>+>RcwqAP(HXv&dxM0vS0P5yA+gu+p2?XUqyulgzT(Wk=*xtcfZ?B3)}hif~ooX zmLt$JnPsQSSv_hQ#1ap_(MqlB zi2g)x{6A+q$bJKsx{}k9yNf#A_T%wZJk3W8ZC_D#oTR<_nmhXL)MD;(0h&-WC^fgF zLB%au_m?WCFt3a1w3}| zug7N{C44L?BnZHQ_~fl%+;trx7lB-F+*JMs42$Kxy%C@f7Q;nv(SOi9Mvi|qbddl2 zIuq`{3Tq5Y+dnry-7_Cr7~Q2i5=)GR@r-*U^9OoKeRp}-FKq<8;}wp-h1pU z_ux+jl9)U0ZI$T%-*%Hr)5^Q`+2#H?PiJY)E$Aw4QkU6!S)xzr^X18T%$X~6ind-F z1GS3S{_kHB3esGPa_82XShRw4kJ)qEv{`sur5)c}2sv03cVVRsY6fGZJy%xU9w zRV3M?)kXYxtF-fT$ZKrqrB2SSB}H7)j92pDCS8&VB??CqbZ8%w;(#0zD0aEYo=&~E zPq$3t=83*EwpH1`Vh24(Url%{d0z7Y5SDqIt37uYE6P;7cswQK-tEpZrs>E5fnl$) zu@I?UcCG^VyXIe$lZpm4?votF?PB_{uyVVzS7lRSdZ;dea8nF;x~yv1JUA50F3aDT zl2LPN$tzbpTXik=k1a2>Yf<#bdxBT5{+Rqm?Kj}F>)PsaC4ZzX{gQyU_Zek7%y(8; z&=}hta}npX*DA(F0Q2ru+$Fap1;->JQ$+I4q%x@oHjGQw=AQTVSXY(@xTZMiLxLR)Afh{YZ~^Aa&}(0 zHf^-&ldB!f4ePwXlW(I1Bo?FSgM}EKqLOyr*;o;F0R_hi3F1yCFsnYvvMF4C_IM&v zwO3wbp?0IP)}Wr+$U4&@^o!eHHuV(WwbAxR5O;=5RQdMcuna2|seC`Xp9GbAH9SzC z`CHgjUzWkO4n=@trA(BpYWUGuR z*Bz525L4dalx7;H6v<^sxR!dTHs^5^uR%LlW42gznRfUI&!_vaObA3Aa{AsZ*$R&- zxyB5`NDkEW7$&ut=HI#}MP;4rIh@s}guZ>^aVu_`%29c@!)meNfmCJkf#T3pMO=Z%x;aTh6! z(t5sW@F%KhS6X#O%P|YBnBB^h)H~8tp~<%ZYO?wM$nb5g;0A+1AA)6HR4>sbd*Z)t zk1o~PUi~ok9-WFeA7ed{qWa4(%MZ6cZg007B6TuH9Um*bkecRw=M!8b^NF7;Pgq>Z zF%Od>s_hg{W!KS%=R2c9MptR!FSy14yR!K{h~2rK}H z#e$KvvJKU-`Ko?#j={s3z86o>@gyqzpYPs)Ft%g5om>@a;peG2KEmJx6co$yOwLsZ`phbFy^06JIG#)6Z zy+6J7yx}h6(5w`G;B}N2geG6)eROGtr}NAw-$8lA1y58+#1mBYT9hK=BTM!zW-Q<5 zA57R`^%YoYs(I4~;7s_N(4SI%jJZKY_b(3vX$l?UnGIteD}EBQtEYJ#z=>JJ7}Zxp zG~Ybul-rSh!mIVerkLCNBJjyQMkFL&Q5`7Mv)G7W7qM_OBfX*@fnr`=ZgcZf9 zCFyccS$7?G`M>t4_P+Irs^I2_jUi>SYSuYD7r!yv;d$4Q)+VRbYG|}`I|#T&gJTdc zO*RHJc`_n6+#uP4L)T8shEse;yfeI}YW;eR9*u2AfinWGPLCiF3Y4=TK*(eRPJUeZ zn7f-g)=?W)1#9k%`6sIF_>D7iFwX5g4M0eExd|ntVNVK|JHPyH%zyFG_91TT za+cfpQ1|D~;mU82*r_wje06eb zY~#QihH9#{cBdrAOoF!eu(UR5ko>+*xQTL@tl~vm>9AC6e25QD3nls%Jt%NTzwiqQ zvy8j3;-yxzvRuwb>7}JqZYn7*#^I&@rxg&#ie=S4K?DQ+ob=RkX+w(4*m+}yLM-&& zm8bsNwkz>M>>@Fp#%JUb8hFTv8ArbjUJUXC6xyO4H z=AZv$SWpbKA@8c!-gWGJte6umn4m7t!tcr-BO)Rw;rod213{KjV|8Pk)y#~}v&NS) zv+BnT;Y|tWMoCzeg$ug6&r~2xci+mU9Q1RD|WX=e+uASSehnohH zSpk3`!k-m<55#;J;W1i18`+>;7LH25kqScw83SVYx+p?ta=pO@(yomi~04QAwg z@Q)|_ks*|M$LEB*Q%XIdS)?X$K!4xza9-8>#bwcD#Xb*7So}jc>e0-pPiIhfxKW>X zgPcAc-Wl;!v55tbpiVJ&Zd_jlXAy$AlokuL0B>`@FdPHJJMRkY5`v*eQ{#B4ywBuO+-27swH;emXdysHM5T5awng{Fu8q59MOOAY zJ7>I>0`2r67o_x@jt8!?6YSm1vJhI}{&JS~t$Kd!3_tj=) z&}Y+(qxj_H$g9;cZ2{_vbfK%HvrDJZfeLHV07tDU;t_mH++D4m7!mlP` zJzlT(P11AReWHAyM5wYbp|Vj%+nFSlxXa}>5?v%X4qnn2BfFB;bnf_`RAL7;ufD$7 z3rfzkma`7J!3XLsqdL7@lpD5Sy13&aNvr1GTpQ@O)@jEBllPILe-9m{gs%xax5e?j zpa=>`_|+cz27vbuMR+xBZ)LrWti)0W!|*B{L7&L@9w&uCd@a>)t%sQ`N@g7zgPMd) z#sj&tYYOj*8z$N` zO0*{#83}b+Pn@PIcIlLRE<_OJA9Of?)q3U?Ek9yf?1j2j2+0Y7+a&xj*DUNwco(zK zrIo&G!=(?-YP)c4uCT6+bDH7saAg3l4BCmv3{~F|b?cxymM8xlW7}aXSDL zqIT&XFlGP{c=Q2T6n><%Rk~5&*xXc}L99S8us#J+7@uzZ1!# zqq6wgj}KFq0HLOpP4Id01(oQoz^qK3VY4M8%*Gy*{ZeV9%9ugxM=NGP8EZ#?godgF z(O5|BiEi~q@l>nK6 z^m_$)%_-5T)@xGyvM~o8)<2V*W14JKp$tH##%IOu9Z(4LAIap^R%F~95^9xY|f`U0n`z#9OD>00pl zX!2#i6p04jvAXPRzqP;#PW)b>?>@UqsRr>N7VrcIoA)jtSC(q&tQt}@x}D)t?DV)% z+xCohO4aDPmdP45$Zc9%X15%&@@dz|48YzD!aqwjI1%IFk9EIu^x!>D)>FwU)iG|B z6z>=(P~=W&M>GPn#ncMG9wdwPS8{F#RHPf|K_ZIB=$Z7smG^Y=<|}@=XEwoIAKPPc zxNGFVqNZ9z#UfVYvSyX(QQcuxAwWSkM1_t0Yi926BwR82TF$HNnLL{eph*^j*ERs6 z?Ey#t0`Wbo9^j0E(vEbusqhh*L3O##h@3bJp65T>>4y+Ca4 zyt=2GIyx{ynH`N1e&Io*LF+HfDh(Z}ZFZK_%*iz!?t6L@)l2(AJkdr~>C9$QeL4={ zZ;>q}vu}sg2`MIHLxLO=yF(Vr#N7VKf{^u6)&MmF=CF_{wT7sm7CS^ zt@@bwST~7|cq^2L$~kE;nJA7a_eg}2qCD-BIJ(r%s1&~!Sd>OqoRoU7A9#xZ)+p)X5Ma+0&GBeP@Y+FG4?*T_;UPn0nYIxaH)$ZD0O zfAk@B{G_XUX^NDs@|BvU5w0RUyCS1gu|OvxZ^=ewRm+1O zSZhb02RHZau=2=5g-7L~xVk@4Fh^dg-IQ3mLQ8;<5nGSa13!yLsnLqu@VVVw92T(? zIeU8BGj_)AaZyw6KxUOU(LSyPi=S+P7O66VZ1gA{IqmuMn8nn^fz&k&5J`qaNro?y zs6#PN3#E!uoA(HIO6MFuFu2cnLzZpXLq zM>_sBUDZXW=axJ(!ht6*8lh9SLbF0fwQ200G}`3DnTFQR2Kym7u5^T@Kax>~L!dHY zAk4z4IpL5~U=@}Fp3C<0wjWihED}cRw}&`d@{`49wfi=+$Kq!o=Fj4ROVz(F0)N%# zfkNl&FGa*Q$;TBIVQt1ML$PeyAQs zkt}c@(`0Wd8e%=K{H`SvE^I@W3G;Gsaq>J8sgb(%Y;9_2%Q`*X(r%)7adXk!q_p1v zj3-SX_|Q(E1CfcQk{5XyV;Fr50A*#0CKeBKSZyNiU+#pRYv zHm^oET92Elyv)33deQB{pl?V^p+LzmhD^F3=&9Ai510!v-+L!k9HT^IU`&Hup z6)F5`psC@~VJEVUMMSdoXcVuq(73it$GAr>|AckDsbli|Gf>yTomipa&Tfdasu!h1 zN@`H8uKUTK_cE$3X?{v8 zx*vZ_ zQ)7`2#&3X80L4#=O`)fXrA!kEqyqT+AE%VWV4Q`|l7%>QWDZ!%ejdiBdxO520b@jJ zxqB@jLe0688Q`#WFv&(Qg@3W$Tbos6qB5I0AeJ)6{ zyX}ylEGJT`(=?FrG&z{T+lZsWk6ziMWKHR_h%sAiGzP>;d{55USEc&QicPBW$flX* zIE%lIL5s0wBt3k{U={o$<5a`oA}(h^LIxVYNOYorJ{L38F3XHPtLjOt5=+x4&l=4h zQ_?rB%ZLF@JSay>1qpdTGCGhI)NR3`JM`0~(-b81MdMi^4>tQ6=mT6bmK&IBQmtyf z%0xdE&hdFx?#KXReU&NPo}8KL30jne@zJhydso^qnE<=pcbfj(%}DEx+|3BXL_%s6 zppEz+j5BgI<7!;Mr6}m8#KT@Y#kf>0UMCgi8Bvm*6kgE=>Wr{+YUJcjN}ezC<8WPF zViTqxI;^a)0zG@Iq9|b8%in3|NzEcAKK%=NWp?zoThh&aoc$_C!o{KmTM6VHf#1(a z6HgD>I@G{W_603q^T?8awHH8GI9ppZ?;OkIcIDo0Pim$CS2zWdOkYFAiUM3RJiwdA z?MeA|dM?DgFFMVC4e06OY{e%fc6V79XlEtqHdgLjv&^d-0genwA?XIw>=E>(BJ6 zm8P*eC}87#;znY3UIhHOA*4E3CW6jDAgOLPq;l2~*jdT^>2QO;x~|T1x&3wXQCBwk zvJL+7>XIsB&nW(D^cdSr2I&Q*`k^5q)R@L5dNesJE1C!`>Bj;gPuHH-nFVHxl_iObR`RLiQxA+ni7E!_3f~JL&S-ux$g975p5idL;OeRW_rNF{g&Z72yD~@lTZDbPT zdT8F(bwaq-wTd6Z>h*UPNBc%$Lb}j6lWPA#*RgNR3M4W4n@g5FsgK?n@ zd8v5RPxQ;)*C~|Zfw*SAaHVEjd^=`YgJgs0PzJhRGVL;5A^Hk++wpo#b{6g7npVE~ zXJj0eE;@ZeRBmJ^Xe+`CFtj-Ve|v=`*mh1q{Dv6-AR#p`CW-OoH(;B0_w7%No8aF7 z1)Ql1@26^!zX7CWtiJ(6>P^1^w{N`DK1Npn(0Almyj)#c;d!*dfxA~TM z@s#xw^dFl4ZH116;a2)~eM^k~mie}Kvjlx$pU#SF+!8rG1NML}upkHIgt+1y_eqd5 z);3K19{<>anj5-9KX&gH;M&UlC3U`vH(rk-&9tAR?=AMSQdLRZ+Ka@oCAo4@ItCBx#p!u)B{-bu-fe;m86l zWo`F~XV|SJiz3NcDV~jo9729nz9B8ze@=-*Gu!Uz0h)5@ZuZ`5Jo<)*qW8Fl zCSRf<4@nG@J2V2}5f{x{%7vx<5B&zDRDruT;oyV`Ne5g73CsW4*9i6cbaZP!n4{ca zVE-f`j4$_-6ANP%zPPL2%u$?OYEsjYw?qX~J$I7**0fxVdVxVw{72dt>@5r66!Gnw z+fO#)^%NeX*gsDI`@v-Q)E1xMZW~-HxLDp4z8=d zxn&aXG}7gldt?hD$ELQKxZhsTnxy;?{2UPFg#Er_}rk%3aK597y=( zuz&P;A0toj^Hl4;odQpFdmmP;k(MgRK**#u^?ZFywAxQ``d!+U)LF4ld7A)u3objY zoZ=*}lS#Q5p5d?Pf+^29wo>G8JaCwqxh22c*c^bEBU<4!lZScJqds0iFtCE>=-(r# z1$Ync+vviJe43qo_l7rT->TDn$0rhozy02p)-NDVV)iNsO>MPr6>rR5;#s!~+2kS- z{pUSGh$1RP61h|cRh#Z*VG?GRLUE?6%#35y%j;HWvN>2GbO zbCa)r0}Qf_59BJu3w-DWv@xue*`6v6wMS?Cjjz~QmN?+uqwBqX2p~biZGc!Z4hKR`o46SC%06fuPnqZ z2LHOzt0=$CBt#sM$~M&Yw7S#UQM+O*o$mb(Z;i3`m$Q==Q>uqEm6_@t!x|UIGRWE< zDd7%b8j~L2+=`*7;^pD60xyI&l}rfFl*A(SJq_6Wu5SzH;$tsP(^6BOssM7yoFG!u zSJSn|Y>+xmpzgSR4ZzFw4_{#lv_OG&#W2mEI7bFY-)c8beuk~RW=&%@~dYvq|x{0-I;lJ2kF{ zTy9OL&MD=GU(0fc)DK#gDgD^kTEoY6jX284Lwk*dRL1l(%+P3;qVP>B(+5<3U5%Bx zn~hi|`|(IfFkD(%o5^}ne1s$?x)znynYQaQY1-hJup+I@ai58+>8{f}$p7+eH$CC*$q30jczKhlW3RB>s;nxMK3oxWuiEDwt-U8{TxGJ49gEn2VH(8n)eAp zN$$o8I+5OUV%}@SU`_)t(TJIg&#P>^)Go(oyn`PX`FDNXJ(?zTgYG}qzR>&}Mmx)| zv{<31D@}u_z_VUPLp+z{zKhfbP>Y<^oq36LoFN}}#oPAW$G5{gOaAylZ(W-hox{Zcx-$hRI^8DGzd%dynM;G_~ z4? zHwd(6n_;u4ST&@2ST+>GIxZ(RN#KdtV&iwsL{hPozkJV+bM}tYDFv{ci#nAFJGGt0 zT4I9_j&|bh^c8Wj;}|O%D>G^`<;6VGlJt_RJ<0I}4@PP$5^x}_cevE*qB)*NYL}6d z0pf`ZFGKXKn`e%dBLgM0KWMBN^O!rq^c416Q^L8IRi8B$hi|J(PoHT$tXgX}E-s|< z_bKfU}Zc%zqkKP0=*?TGnw&nAm$J=oWpyaI$-n) z?3l{z?WM^LYEY%5AZBCTDYINu*@;V}Rggs&SYjK)STj3C2;iORNo#5pGvr^V(7IPD z3fjgjI-f4ntt|FobBTL)n~+m67jm*$N7Yu!uzag4_`x>PmUb_%H*9MGT0vGSu*mWwAZJ`(PlpkG?B##;9W!mNi|sFiXe z(bw+R%s7iC^mxGuAhn|rRmmr+Tg9G3T0*&XK50gzvT;RLl(Ik68nzX@V`S&1YdMIj zuIcQq-PbiT>_kkV@diVpV2Jg*9VCL-C($ID;;vrj)kn9#4^3C0V(1c3E-Y*DW4MG@ z{}h=yIeE>&!G{yIGTd-TW&)ljC-m-rdqA7 zSxhUkq!p`oTj2v~!^y|`Eu0T4rH17z3zR%E+H2rbN5)kFN5&4zLPhP(T_J4Q4pAAR z+RGDUBUqF5$mr}?TkNKV?T;xu6ifGf=#bRFm9?KH!Il^Bs6nqL(CypJuM>g?sm-$c zWk;2{&<-+(Ts5PnPnBqlFQxF1pd4VbQRpm;0u8_=Bn3pt{X&5HQ5 z!GP>`fBlz8DD`#7SBa|tYwVEtK##Kr%D#l#K2Pdfu_m-rWaZW*cJcKOZatRXA{YDM zKnL?e^F5p6*=7kyMzEM%%)5Ul@K*INNw@XCOS++yIg$@BwG=P9cvE!ns#>!QK*kJ; z4!GT&pRFp1bH; z^TI454VYRLw;;4crFg(>S1w|gs z5c;)SySNymV?$56F4^-|QXOk4;B!VL;d+ttx~bpJuC23@OAJfDw$r7NrZPI=637np z7V?gM9ys1%*-<#z5%CTVCRjiP3NkOD`?Teq9-q*7JiQr32V8TRb}^Q zoMNogvEr6h>L@zZh-O`lFJ-w%Rz=VBH&JHzpcwU&KU4jQ09$P6Nq`mHscr-a0G_a9jHxL_w60?(URM0Z}?7hVGQ^ z7EwBeZWy{7hHexX7-Eoyp@gARkPr}j$G!JC`|R_+*LQt?z{S77GtYX~z1ID^OF=a) zDA~lBOs#dV%uwtNPe1Hs8C@}neE%+5FLHGS>(bxH-IR$UDGqr`eZPCvIMDa`h>;(# zZ@6&w4%;fU{sz<)@ZR@Q0dF+VdDv9{VlV6QOot?$Eboeq z8o&c9D#@5oD4=Teq@?~+qQ9O$48c_rftlu$#WtqO0JL{~vVj;H{;xFF z-v0yb^bhBv38uX!h0{c!V{w;Gt%f8~k-JCG4Eg)#l+36Q?4`xbERLvAU`iAjfRVaCo0Sw(Sc;FMHROp6XR3}& zXDm;Wq!3n@7&A?3#hu%)RDu~NmhkZ)NNdZnfU0H?c8!YmHZp2B<&Xl z11+1*`Yt)zV&Z8AN;U?CA?$Rq#Ga|K?v#+@aAtI;baXoE;g6y?NdMKo-YS!~PU(QN zFRQ3cd0O*zgS*!`q(-=il{!Vad;5-_a&5D%4k?`a3cGRbCuD4%l-$ds>N_?wv-ljc zCNnx2W>B3ley_zZEAL|lr9$U$+_JPTVw{Y76=g@#C1$o>?N6@ID;kr(RkC@T(**+W z@=eS_QH{5(^z^HE)Ip(n6ni1>hh#(Z%e#v3cst4WPY&_|aF3XK*}5IcYnVBzI~2$h$1RefM}Xy5vHYzYSNtSp4{_v^btwheE$6w^R5_LeLIjT_1Nk<|NOWrQB?x{ zssMTVtF1*k>jhE5wC1{*%~gr?JXZ4Wo1_lO;h$;9w?r+ql_`|Cn(*fd1>dfBMWwrF zj_!V*T-*JE(EH^t1)m6!fpGo+YVz02qORxONpVnBzBr&2WhbPM_q4ktDuJpx?fxc% z3MA3|RLH>pATx{Q+)}mO*TUS|W*YSLYf!Vw?4oKf2VRLGmrpWQhtE(QkwMcF#W~E_ z4MEaG%dGLO%nDMn>Q~cTR;>4q0?!xb4;Lmrg&1_g#G| z+^b(tR=md;%MVAmfR~rg8g!yQJ9=g3eyCu{B2ature6U{Of-$UW|*cqjag(<=m}NB zzdS{GmY@=!s;L@Z{g4cGqv;2rry0ltFylq;)XzWuO!?Qm@9&&_FNeRuF^J*|_Nr=Y z8mHEno;B9`KxUvUMRiVaVv>2DWZJtNqYO$XFl;&1?%Us z@BD3QpgmdE5rKm-5TY;q}LtCB?nHW5JDXsMH zgrJX8;vU%(jF^?CuU~g+))w1ME_j>x?XeZ9j|76FDGW>-4H)sQ&19xtwCZQqM2|p} z2hwCy)!wANQ8JD=R+#;5x>X!R-OAB4qGPI4J^#q*c6zXpmF&u9FoGJTJ~*w48O!p% zpCEpAg%M;MNR4cSL zx9cK>Z!S6~PQ{kI8j6=}&q8D&#_OWtn18K+}T=aJ4hYs z`vf#;*R1eFL{fMDzMv#gz`!{~!xLNL_3;FilZ21KEFa(uO=*2VvL%<^0$JT~=EjHf z!iw}c%`^{+#S;_jGrm|LzsC?GcTY5fGDJQ>aUh1f>VoyR`Y{KUnEXw)(-2BbKFLbd zu@YU$@RPyh@o^Oa0wtzoPt&Nsq6xqptsNi=kN^|_o@xCvkAV}!_@M315`g)*1r;4PzIr3S4m`-Ck-2m5&B;v|^>D->Fip{$A--}qjfxqwcx23~ z6pi&$%sIsZUDA5}n<4&iWSUz@xe6)(e5>q&aHwvom)E1ahQZ#KVa|sVLfThd-y3Vz zp8Ih}z35%ZSUJA%*RnU;Hh8)z84@}kZxxwf#@htHcDK13hmgreh}okZ;9%=a`_=)~ zl2}{>!PpRC_lJk1aV7}d=0c-s?^!grC@Jtcb^ z_qC2MNhFhr2N#Iqc7z(^De?$AJt}_0n)WU+7%0C)*);+P?W4|JBm-c=Dfa&EcA+o~ zGG~0s9+`g`6RCq@Y9Q+}_QvGQGHB4!7Zf&Cbn+0YF!DG=CqfH|N)allX2+zfe)N>? z^fAh>iED4VAi?fC({nsLRx-LAJr(LnJrpxo`Fv)|rxg;!0ND{6-_d$}WO4_0 z`d;=I+jM=D=-+nqw9`*&%1dsAAyy}?Y-I#U!XY<$s^$BrD2pDXm3cohn=;yQ;6#d5 zj^Yp+<0%9yDFg*&AQDl+qExHD!~*j^t4siUow4vLys&Ul$>*VG%dLhq;oh;Ll+|rb zedBA-OO4D)8)r_cCfUM-z?TIY{ED!hKvBJ8v|qi+@way`Tj(De9R2`2uB!Lpk{$te zubppaFPQDYLLPGIv!A4E@%O~Dlt$q*4fB~oOv@zLBgwL;isf_)uBmM3He%8qy*YtV zjws4;z2Xq)eX#F2jhc)~hIOnFv3B7#ef z0Uj_>gX(Fe<@pP8*2cOQd_;1;ncp{g*3Qz8Smue4vp0gRM9)wq;;&hSC>%9BL{jsj z28hp$|1oa+J9qoIv6s_|44i5$t3?t7Ko3oNw46yeCpxgI2D`*E2YRXpWxw8vR|xJ+0hU z{c)_3$_tRZp2KTi@}}tk1+nBadQ5g~<=01ulxfyHJ*yx9;GEuPbH?5oXS1h*=UXM;7!a#~Q?~^C%koR!q8x)x=1Y4XUSggz%y525S{O-(h{ErZ z3#kWIHproHw)3~gpRNL$L)AKU0dcjNb*fS2bYoQ3A+Kv!#jT!PHh)4A6txL?HuT@U zrR~Fn^nC*XFz2!_I{zP|t#}2Ss}T1#)zd!!yWE!d{`FjrdIdGu&hxtVtqbtpJk2Zo zcuyO-v5a}^|#g?Q2C>$V^7X(=!C#FN|aF|^ZIl@ zgrXNoK##Bp%s=@i$o+~RMNLEPbqxV1N&-rkMdi2>Zr2~` zxVb|>^Oeo6LVvSW8+HG$d>+PlSMn4;-E&`OC6M}6)+G$gV4BA&PEIY=qYM%kDP{yww&ayo-mdvugO@mmgsR_n$r>_ZVg&=+>Z~_&y5!_NrkVKJ ziq`lJ_jF_ZhBfVdddZdRSmb?yn(593n89VcZPaN`zr0I!!+>jCzVPv^mN(Uvdd8vd zVKD7vSy;R_3hOZv`^tqx=5QPzmZE6zqH0~%IyyH{0WeY4K4^DEXtzv_QAj_iaTl@C zQ|>g;+cRN)Beqg7bx`iC9|^R|Rjoi^bjPyrm9lp;ky}SIgGi|{acp*_X~ejPChF>E9)^0}(z|3wl}ik!nZ9N6I}m{8k9(xx4<*-0>5MW=t8LoC)v_$f zH^mtkq@R3orzIpCehlR`Cd6JWSbof|f}$nx5S*lzLQx-H6x0A@^{A#M<}HSn5$gK9 zcrCiV-i)_`qyJ*?g$$+GV^_+N<14&%<4*u=?|^^(!=Vx}H0pXLi`06FqgS`t?CWgz zobPy2SNqap=AGee6x{P%k^l@0Ndus8E8)O{tpZ zo#g7kCD%@UyH+ILC;M5k%=Lzc*0=jCp=&u)J_?cF1rqVjahM=HdQ)`1oxZ4GT4iBU z6I9eH%i`5aY-d${R=&@6S`WF?qCI@vFu;4lN&}yKhTd)s`fj(}g+!V)V{YCmOB^2c z&PLvTsqSe+bd-6qvL1a1S`q3vI1bb_TIBU|E1PfyecXhe_4K~(6E4Flwd-9f=iA(S9U=jZ#H*!iyX=jp7{l}HJR8B<@+33)5Q_p z*``5bd)d?57E}%?Jy!Ys;n-F)Y|E~MWsM}hGHO4&?&-8lqjMFX-)BhZPMLwNONs^y zkUoES;^lVIG-vEd{@y+1;Zw-oLn!g2b~?a;V(@&-ow0JYWyfd!X*oH%BW31p>mEK^ zYr6ALX=Vi@?HeIu*PZbP>RABV4MqpzUk7L4K>7jCAFtj?F-MeRZ(=7Y|_UfeK9TJz>ZJmxXRoYrX4m;!(L@YW-XWF)nuh` z!ySql+J}Am3D7orX(TyJk44$*c9&T!=!T|c>t%@^HTik{x9UCP65oKiy10OXM97k( zy5Q1WKcj2)&$RY9^^;z*oS0BU@zghtl;Mm4P@A_aQvp`Nyrt@*)%eSL?RdjkWaqog z0y{Q*o?x;Lj|i0bgF3ZH)IfS{TUX1%QijHFP;KtX3eLu z-DS7Jk631YQ#&mz$#rKp6lq(7+^QSf6=B}w0mBZC5&uwt6sG!0DbT<;)dM5cLA2r2I zDpj`^ZceVC3rvZv;>NY*1{@)79jz_#3c!nig`~E0rkmQ|(9NqIEzcIt@U1AH7kCF1 z1pqv$TJe9Lnfeof4~aJ0V$7sDA;)AUJC8cc&Q z2n`V&RDwD7*K54Ce-i2OtCPUe43%x4Hl&NhQ0PHqQxLX`NhssBF zENY~`+E{$mzKIHCJ3e={%e}!R&LeZmGjStMS=YZ|yq%H@V%2 z=zLLOUTe75Q(? zaAxp}by6%M>TfJW4);D4dEyVUWQ_^p(Pim6%8Sru?JlD!Mqmn@x3K5lDrtb9-Mk$E zJr@{p9ri~@Z|x}BD|ysUIKY~)KF}N($SL%Hjdaw-+FgF;66Ipxi}Ikv_zQhzw6H=oFSmYw04vSw_u})_q*KzzEPnvR zdjNE0$iFO17`+|WC_4Z5;d}E=ynC9ZQ1fClrgS2o@>=iDiioKFY|ig%9QVP z@@!WWDxH9`Q=Y>Ae~g1v{$1RM#xss|khb60X`02Fhz1Ikx3PDn?;Ip9tuPOh{yivK ziA!I2}#qT$^WJ z%jyng8hk4rORb)yu&a*u0i;Z=dNkL9ui#y-YR$}MpO>6dh002Kvx<=mqw|j$$&+m% zozr-rxsJqy+;F*U%%semC=E=-w2xtJy23siTeh$={en7T8_%*mUft}K6s&f8(Sv&& zqZ=$rA*$+#dIN?-r!Euzf^FS>v4CUQQJ}FXe-_AqS|s)ccn8|pAaMeuxz+kqEMh2Eh#bBJ5h~|I|x)k4*fgAIsEIic&I`Cf-q6N2#k_Cp#C0zyGK#vca>{V?-WBe ztQC-9m@YQCz{-dEe0W$_qD1UF*ffKZ7*k-!MT;_XO#tdp1O)`Rv6cWl*PhS@C9n($> z^?0Rv;O-{?m9mx7s$7gE3DYvo$Fsb87=G5Js2L2Om!r)-WPK&8haZpE0C?fE{W>p(gZ0O%9edOvl4 z&~Nuu{g(l2zqI=uyguG6d1aH7gc>dxE~xSlano$t_N(ArJ}_7mrM%VGD&wj}z&c)r zY`~3JX+dd%q(;LgRh;e;uFYnV*~!~oLM{`%YJ8Br9+KfiN?W4Ne0zPy&CAD!5skHF zO7w)v$zct-h-9^QrjO{iK#hb3lO@ARqWi8gU9TM#+pv?J)GOHoiwT=eETIWy&BBVX zc}~T7M5EDN1_5jCVrZFct2XZ(DaWPE3>%cUwMbSE=wm%gU^E?XWh2)<9lB)19{<+< zBdk(+p>@xzd@cgHF-+MJJb12p=Bm3VE*QUFH&;h-ZOd6^<-Jw(j!=a^^HxT?wFuJv z<@{JzgKmV|R&8ai^wiKuWGQbu_4O5)9sjft*EEP#zB)e|bhOP83Tu?w8rI>u*m6dPaa+?zrg@n1T7@JbHp<9_> z=l92x2`VCpJMrTWiD9j2v-@Sy<2spl+}}ndt{WXb;Et4c z)b6Br>7vLV(gwjzk9@k_jbe|*NQ(=y&$?uU!_z-4sf-R5mJ3bup&~dVU8jF=P`D4ze*{lq>3zso>WzJ9ywnhn0QO%fOsju6WV>JPNqhN| zwaG}=RZTXRRNhe%t<>fDGNgHv*OAFn6`^1TW_)^YoxQ&<|uCApwf0)4v#Db}j z(Bbl@phgC}{s5ST-MCoO^vork zj-ByycOy3akiNK-aG44|dI=*&(f-wT-xs2G`4o|rp7IcF2Vns_7NL+@lU%;I1q{B@ zjir$-DC$B+ijC!=F6M=L)84ZsdAb?RF&%m?!=#;ODYblVxeI3#zu%B;6)`m032Ba? z-b85-ih0|59HiY7CHtrL{PZCf9p4mQf>e1GsRX(feM7H76zyVwbMmXJ-F%cF_+RK( zy^FuZ>R&%W!FMA=ue^}(I7DNPhSf1OYh^2Q#7w8ljiY(5V@y!z`^34jA6~8QBcu8j zCA0)W)iE;zt+v^}9Ac{5HJL`e)A+hrzBZRCmlzyB^XA*6UlV;FO+-)X&0q}ydCH@J z5rbYE2T>)f1l~X!Y@KQLcqenMY(lg8>Wh=Ul3otK9MET_5m5pgQZpxK(-y5Ity19wueeel%K)u!Q6VW7op(mnU-E#$9 z&h*5$$KH=ox&NZA>0A1ACBFIcn#+Co`$xzhfbA2iN5bp#u7e*1m&|}c1G^1@)k?2E zAGs8{#w!YU507eHq(|9ne=^^Ut*}obzT+DFsep%?FXaeEB~&c99T(LYi!@Q!79O17 zONgYc&}FOt%tyEftGbI=xqszU(lVUgEF)YdrWDL0^<|W_Pt5vUsnP0h3;s}bN(+uG z?)Df;hzfh93|~vf73RZKE^y9?&PeBlr_a@%YQE1hs1)aC#ggO+CK{{A2$meDBtM|hY|g1m^?F{qN)wimuf4ZcYhypfu7?~^u4bnd4B`JUFJ#} zEplk{$kLU2!={=U$sXmgi$M=EMoOxHk!#Y5zhXv#F%2A}%8;bL^vBTd7rrn2C@xH2 zp>WfGA3lFQp`ULgH){*7yxx#&KQ}zwDq`NSUese<S^uC?wRyCda6FfAU=Nn~PvQOUCWs z0m`yalFQK5(JYmGnNHzFa_i(lg%szvsaa>*+XMEY4jee*1)DlbD`B0G0)i`ffQ)BFl%oc^NBS22qi|kEo(c!ZDV#h zx{%_>R-b5JVRp8t4W5kjinw>oa(|sgmA~dqQm6aUJj8@BFjGt(3Y+#fD52Y4W+G8s zl+(%8&tEcW^;;F0av0*w$L`gOWy(RUde#F8|B>~}UT%888s`wxY_GQRA_k2jY zgLU%+qAFGX+`@|VH(9@p@$m%4*PS`o?3W)qgWtkpno(FzzSL1* zvUwpEDsH5(3H(r#^Rw-|VA{nym}U5#TBVW9{KdVpMTjzDyp6&dRDiQgVAg-y&IVE( z+re ze+m9=wMHW~vAepgyq;l6@@f9gAn4i_5ilAGv0xZ`_bJS|fxTrpR!UR{ypIYH8WKV}|3ueS3yS3;Vml*`O6BA}zfVagLp$>jI^BBv|rQU~Cm z|9Ss>uBjbb9Fkjom6fp=&&rXV@-~~K8zF6Ej{uu^IA5d)8kY*BB#}h`#XIz*4C|D1 z8(Zx>Oo)}1F%%fo)w+49_gT{Ul{+4Xbg)W9WBPaqbj9;ah|DA9LA*LvVyj)(=E#VX zH{B4Q0r$6B?tMmQExl>Q3fk2;ET;`Av8@6bke@RIXW#f$OSn7}=DbfG7VZec}5fn7DfrefIUDXkKLsn$lmpQ<$1jO9A`O=pt!^!x#;`S_+6duTI z<#Ps{#9b`Fzm_aJW)o?0 zm9sirE9dFEylW(5c6JfGA{V3@c`FUb%#9FU9_mQK9Xzk=|d%VEZekZ^R%rcPO^@4^h#yblqwI@d2DQj$BZcRWZ18Y7I&!BKDCZFs!HCYMXi<+ zzAKU9%S5nRvt;NwdGch4?GY6jiRQ&=OQ|I1a3JT2m$GEfRu9tg z@~*@Kd!EDOR!%;A;YBE^S|Pql`Xchp4aB9@I~$6tH!0 z!Y)J@rH!TgV?OwHH~#^^r_?^(4$Mo}{Q*S%_Q&%M&>g+4KB1KiT{ZRfH(0`N62lxt zD$j5!YY7H;As~3J%aoR@ZBIJ<1rwM+-CmTOxvdjkNxrmGIjNcIi=4m@LLMLFM$^`) zS|=2~;POuY`aJ%iu^&J*5%ZB)iptG$=fQBc#xqMn*NEoqn8-%Z$AK@wE_0Fa{?XL? z(K8*7X(4ZGnqTnJ?VVDl)(3iV+TXU|>OTN_DU|%SkA^T6DauoFuGfs>NKg81^-=CP z5y7;TP6q~GyP9plUC5{Q>YTxM5li-AX*)YWuP%!!oV=p5P#`9QQ&7e9aIE8OfM5QRGDT~DZw zM0|bp%tE=mKtg8B@1lw~$%WOV`y{ip z<=zk(wcgi8Tz1*T?{_%#QR0Y`m>>Us(rKW7Xd>sm(JUiu-mY%(yHkB5FxE+@h@--e z5BJ&X0LIuNjArBg!n_y@luyG_L1OIJ;_l6)ac_df&%-rUAz++UY4p^49EDX3NIqanP$-Y)*!gk4rs1b4q zAFeO)9-bYaP&-shP>kcvI)K)rPiUq9D?i3zOoW@~SI7te8~9)1NpX&dAqY5% zRbxGBMOu)EMTg7uNwVA<7nL;ok%sTA@3m8|(Qk&MIQ(+g^s()AtL40<6GU%{U8A(4 zqJXQvvfXACR`ebeIE-h>|{pF4;ak?0=m-&AC*+WBb}Y!~-)|F||hZ zn*~I9Uaqp@JX@QHX)Yf)>kZY?_lT{5VJAcdxRvC`Ci$F0 zW!3J}>c|>~nmQXo{!%xP!;qSLw;Mr<3OTcJh>USc?qFz_82RcjId#t7RIxcR8Rjd# z0be^i9;0jBmQBCwO24)a!4@->X{&vpBQd6}F4O2ZJhv}5U2Z5~F)S{^<`!PEV^#uw z-YuXdgQy&4*q+gE&T7^_9x@k?NYE|YT#UCm z#v)Vw?VIuUT*BWC@r@MnCGWPBKzIn02E4URI`@;TNoBWz#8W!$;wnsq{FZFVC4B1t zQ!d@nJBNOA;rdW)A4JCiT_};HZIj_cNa!JCrchGCze#cniI&bJrJtn91 zb)?JQyph-CxHwEzJINNFgRetXRH&Lf!d9f53Ih*KJmsC;a<9KTd^fGEvoi2*Hn_bu zYHNS@t1q_d&^Nvr3|O*9TGslsEJO4zN9+5->62^KN=faJ^v}{tud2OhH9kM*62Hu= z_Ht8`$v^TQG&|8p zCiLIiJdFS6n}+Q>txfAcIvAmEt$K52ZZ}6X2O(m_{c8A)7xA#-gE;(QWsD)nyeV{+ zhy5VN#_tCqhjpaG9bwvNO7vpQi@_7}BdzDJUPtmJE2&=6m-BF33AxY6F}Sq6bsz{FYW!Ve9V08V>D``T1I228O-eXgp=lD5 zk`mf|f=+3sh_iwQ*xD7+Cb9`7CPzp2IbLa}?d^m2S?Ez~pDqOCY=Y}KNe-EV=80gC z5A}Gw=aO&9hVL1zp{^;uaSJSmYjDqnihZO_Pc4OviO>X2%zZIeORe)t+w!|-zK}9f z-}k4RyD2%HT1m!h*^4V1k1j`5S0S*bd_r<~b0o}+{g!K$<~(%zp2vC-|FG>^82Q+C z>|IvNbBr&SH75nE`=L;+LhAgqw{9R|K80c3U)iS~6R2FkzA?C`Hbg;^{$_)*-U zC#&{4Zp_Ic$P0rF{)qCk$-iR{E7C9Zl~!`s^!s z5TW6<$w}3gi9qXE6UH}=QVr;x*TAk%{hv@c zsaBDpwqx`L-nRr2cnb6{{h3N^EW*xcYw6Ma-LO9%Ow#;E`x5vcqD(y6-Kq1v?QaF7 z$%0J~@ER}g%SkQEIcwu+Z0`*|saIrD@!m1n*K*vi@)?!vn!F_T9XpdW_nfKZjnQ$H zG8Qw;h8*F!UQP+B8-xO$#u6SZyW+jauA3~Co6Tk67G(})btsjY5XCtFD@v!OQ&XguL;w+=kzfNHcSw~JlOgT z^pK6zV6Rvn1Uzm|p0uY>06!#Ud?Fq`&>iEBn=XoLB6nX?e({TXT>*gYqnFTthbl67 zDa5;i|1IGI=?4%hL2;uWrDx1g!5E-SL<^znppw9wH~d<-JW66&6*uy@DF(%R3yn$e z>^|#bV#96+NUbqb5hqpF)zE)@a`6Ouq74m9K94SR$s96PqnGTT^GCg6|Djdr(T?x1 z^-P&ibTaB~KgIXDpzRZmWDFEGJut5ua~f}JvUsxOhOf0VRnWQK;WoW4y2q%3T0ZM} z!)gl0evbq7_pfL8gE6NjG?A7A&Y$iD>kgChWt|En?nViZhFAHO+$N*zit}3>haSX) zytY%yj=@Mp$2Z$u;fb24lu0H1FK4Mbd^%7iFeUj*t-D(sWB2t2BygUUdZmNWmS_B9 zP1p62(1hSL@o^B%l3tz8dxW~#Y8rerZ@KGjcow#5(~D!0|oOM^JWk?2W=8=G@J7{wDOL335#&RPyuKbC%7 ztPmCTd9N@u2yL0qc^tRIYrPmxOf7mWVJxb@BWB2l}lK%i=E&yny2LHP2LycF9U%0hKQ1MnT6>c5@t4SrB z1x-S_Bxt5hpZW0VOM)OtGkgS3+Y?gFy}!wL3VvAixiNSQ9R0|kl-Wi8zwKA65)U1u z5VIfFHQK@QYjY2`^S=N29C&;Z7I0Zi88)H1|{YN&J5YqRMaN4!3uO`R>UUSgJy_ZlFi0S(~ zvR#kyKaSS_E(%1;!3KT!zh;l>t9mznE=tZ7Wzh_-1_y6Nj36X1rttM zUj=K@L_rF}c3j(LG~6|kCY4OzKBQzC&QfJeV;gTH2!GVWEz27|ayc9bhxeS5sycEk z2ZUp=csXV1% z&)QNWc46!rm!=NGoqq8rr_@%C1{qp5>0g;thsq6)1n_hXIGQjbiYdih&N^`sT&SsX zlG1?PQ*aeS=kvrW28c4D7)NwfR*VN#2TWDld=c)Rbo~!18nRB{1TJvfl(0FHmFy@m z3?y*Gd(nMO3o7>(9Z6k%1+mv4yY~Pa8``+lqBeKm?y}1b|MH~RAlT^E#;W?9WUt;f z-G6V<9#pu9O7re^q3p-##*&OoU~IQr3=E8aAZN%z8|c?B;C4H567p}4rNYiOFco%q zCI@cTzHswoO*0tbHSmeo<_HtF<>$zM@-C9T31y5P=H(oSGyJRf;O%&ZAX$Xnv@*zH zaVV|=lrJ8|VEXGxLd_FUp+Vw3ON0{k=a(k*OrIU2cx?5k7h{y9KS$B4tps7!cr+4& zI#!=$1QBYOLx=)Gks18@P2&nmv-pWvlWv{j+Tfj(n`rWrk4CI& zbIlf&<9(}!1M2$7<1YLwzEF8YYY9OV?C{uc@!rD#canU2C&i(WI(9v0m(8*b&*FK_0Z2SR8Apn4wY}6yP9A}7> zQMqNVZPhzAqqkbn(+Gj@zL({jBHk-wEaA-%YCT#MpFjO~@U@DuzcEv0{c&Mf4Lh@} zz={c3R&2FnNz4-`m#6-V!hzB52@q{fn^Q?nV)*tF$?oc zyP$>$|Aulv-BDRiV7pbY9c}$18w1cfjhR@mNkpK<6hEF`Vs@=et0%qH?5VX$&50?@ zFj|FEyg?Hz?pBj}X~;}C{)KFk*-`U+2{eaDR6$0;l_kka8LXN>9Vunm8P#wY+;bNd zTAM;CiZUjNDz35mTBYa;ZWS6FuI#d{Tzh$rXJN(x**_@H=lYD_FpV!as}?f*JojY^ zuPCwBu4fms@u<2Kd!|7rn$rK_3YY0e1uJbZ8p83s7Ie}xL}kslFWw|SD(P0;=bmLG zA};DqnqK=8WHn9hD9q6#Hx`zz*_j?~H&vH?EBj0(#>xMdR+ErOI?2C2tM;Ac!ny-WP!plbw(Qz$l5)fU=Vj!-<%@lX=ju!IIBDs%yIV?PtA4t` z9Lx{4C&mP6{xB%9Gp$*##eSXzUpkZ{c4>=1HE^X2S^OM{`y5(qZwaXi{^{_uB8Q_A zh5z0?2@5FY`Nc2rplS?9;YhX;i+39EEwNy-9K+T@RaGQRFd}CI0`*%;jYvR-kAcKJ0R{5 zIYK(b>q$D%ye~f&QQzLFOFf|X?XH?ZvW%s65mUH7jN9k3E#1XBNd2!H+MP#M(hQFz zxGvx{!-wJHxq0$3ghkmTTb$#D)ePAJ@AeXank{_QWJ25gYZ@*0= z(uRS&NlZMewvods)OsEScqDEQa_1+seI6Ug@CEG#EGsZthx~VG|5vcJj~o5Z&_F4u z1BW&eJlXnp!9wN-kZE2`R#!Eqs1i51lH*N9c4dWeDhjb?#Vm$vyj4z*vX^wAc72dy zsQfss!dos6MEoRU(e`+g?jZ!$lTS44Yi1#4NM13g^S8+Pt=2p(4L%Qe;F?&^7We9E#bg?i)82e3^OXxyP zuCRU;UwTw9D;C@8tWL^&wYp}Te?ZA{0PdDLLz9c!hA=RP)8?KasrhM{hkPAJJQLB^ zq*m`As(E^*y>2_Ee6B=OFP#zxm2J#&`bITIq)H1NDKa!}SuL1%mPxM33lCw(=hhS7%Qo31v8X(1-R>3N^$9Dqgvw5Ta)`?YVy`H8$faX$FNqx7I^GfyFA$a`JUV1Dup~xGCS@oqGYC-{ulbEU zD)T}XY#2yqBZLhyP&uel_7gGbd7B0;IP zaMA={ss5^sA+5aGlOhhhbH~S_OUv2;KdXZ4Zy3)drlmPLXL$`}Bs1iX>lhyb_tBxc zYx97&D$cgk>?%F#`uAkcNL+e5rMlY+NtSQDeKDi_N_c#<#Zmap8djokASQvjaKoFe zAG=;p7@U)Jd+Pl`hAj6jU}$}&NQdm{9%83kA?k4A!`AVv!K1$TH|h@S4lbb?6WQx0 zS6A-m8im;^_;?e;X}u=ePLZhP+X@gzLDWzqbzws$vN@6>Cvrj z2x+psoh@sLM05PP7}v>ARszAeM^Fy@y9iplIciFCoNOMNm=J!=5G@L@x`nWTbBTD@JKCw}|+?&*WuB;J{??Z6R zZJL@c^+4{)?uG0vJQ^!~p%pS0yM-7r)f|##RnRwjK6pm&845)0}Yez;vx80JsRNOaK-1xY?!#&%w>P?aiD{p)?DH7Uw?$L zkOUkJexYoUt>lfdmOo31%i(j1VZML6MLE)2IE|wX8*E-%i+(`xt@)|dm)<}?Jvl!5jDO0?iX`Rxlz-HFVZ}qnAw6= zE{uM|NmH4sfFZ%ccS15y$sxW2%m?>E}wFTb@b7L~-R?>~4n`+OBmqTP^H4UqY^_-*2zS zjs1tyUb41+)Dq`*FH+ujuJ}UNJLS6M!7cPOX->8j2u7I5pSt?QkR6F;5toHfx!yxB;_YRvs}B-FGc^bT zc6A62m}uC|;WB|61+dgJ>i`@5;6q#gUd!e7N<#@1h#! ze~9<{8P?vCY0Ft{FFO2+>#X&XNgPt2r}4P;Tu_@){&0|YQ{v0_{;L;?f&i-f&z(3E zcwq!;T->H%ZuJpwQU*%RbzSSc z&hz|WW9DU>H>})kw!}!Z)BskX6Zfuf3@r}D&y~xTBruCLdX~5AP*YQowz}$1!Tu~% zIL)!d>q8uS5z&eA`n&Qd&M=t!^JBWlm=0x6aw%@W@#Y)Zgz}#g1e5_zC5i-f)CLoDOPy z&nER>cJlkl57f>-46C$CRW{&aui8)T5b92RyHQn~B0!cxx@GsmHaS-I1Ur!~F3PTS zLiy9^-h_9H&kv!|D9UbRua#Emm_qG+KJEyS=z&Oq45lIF_n%*7|e zt@099G2f34A-9%;iff&TuK-VrtLnbWdQ1PB5H-A$4a)xmn89x9G!K1J@CN{Q9PK%I zvi}Egmq1^#=8C$e{R6nf2>47H8;FVw-hB=6*xd(URs7pI6ea;K*G%halD0j%aslW6 z243Cq_Trx`UVPlgSZwpuB>w?Ke3Kqr0v?7G)cpZ?hx|T2u+}UQzLB{j)2|^B!MKdl zd^4oJT2fWKt66v>25sK=ul~iW@NTbYWa_8{nWy4YtZy>E(t8 zV+x;>;kj}A8bBw}lmWqLe7{KGx-Tsk+0UjJn=sw;Ub_0=3H>bbR|vSfK1OK8A0rlj zX=YDF8v9%3d&ux5DN@?6_nBA6`-7(>)O3FU9>cXrz&%a}fD{3H76)g;C@Gm1NMX@f z7vtI?^O#y8%~*H67(|wgQE1mE(qWa&*a8y9Y!Mia`?$EhmRdo9Yn0fEo$0wR)I~mu z!aXNZZLuE{bmEXV$A;SN?aU`yjuNbT;7zo31E2oA)`~_*8Lhd>U>Ad(fO)rsM(y+A z)FO|eE>W^vSI?9&LqQZwaj2{l^1dObbQ-*$sQ*Djp2I(VHerJk0&JyhskNZE-&+UcM z%&h7<4Rkmo%7Im?g{$hlTl4X)a47`M>J!`E0&3RA);8r#+|yK5c~FuHq{PNHEP!ZE zc8s+FkME@q%`jX_VNU)`^BHI$Fn`fpL_QlU`7zvUscYwwARr!E2GL z9iOEE5>sj5?1UplF+fO0D&SPZLV3T}z0o8^Hq#|%YjB74#ISV-Nv+`J-hOIobRbY~ zD&V5n65~Zs8F#+W!nolVE^??ds@Q;{D=t82Sfsr|fC^00`N%eRIgwm1SoD2?HG)$4 zAsAK+qwbaPEN_6)jFEPL1r$|`JIAjgD9PSF&K)qoT@&cTsK9fhxSx3b(o}J%Dsyw^ z8v2bN48=Y)9^E2^D)kpYPuK?0oi=>z$MT2H>tzVvNX<2xjvqiJM ztwM6?3ta&iW2+CHr^4zpDhMUcq28J2)!@v!5ZW+ST^{S&FAd^L7Y~`utOuh@p+@bV zBYQqs5_au1=FOgo)9#2-0&148=HxH+9~+ZDu$fca;28GAC@~1cd=Dua{`$?a#n$7J z@G4K%qnoctJ#T9;q+V#$SUsCKq8=2JH(|y%o~=Aqe{8ntn3P8r)O0nFnQCi25Ejk0 zIrU;i=}^qe5f2m~N-#3x!nuT+vLSfB;5}!b${3q%tA3l^8S4TYTkK~}+aKR?s#YoX2)BKR4{|9OP!DAB7mxZzqtHtGb9eK|U)BBP?*J252nG3#T%D$s;cyC~wZ zM-uluKkt$E)BT)>EY(#D6!C@rS9zI#-t$GHK2)e ztn%?8+1Jr3W}WBD!@JdG9)LyAvkJ~Hp(GgpvyB`w^tEJ1k5f<8Igx0Aw-jv6wXW95#gOn*z`#94v1ne; zwv7CAuTVRUA?w6GM+OauzTRk2nIfa|=O~w=qHMlMYldE^^;6BxjI(<~BSQ)<-dw(> z*$BFoJ<1=Dx0gDZq_*C}M6j>SjxLV00C_&H*1eLlC~AF=+2;E`sm`NhKB)K|&Ii3Jg$(5ei+(<`WAjG$ z1_ECaxl1x(??GX;wN${5zSJK~Ih`s^9(ewm(-zI<0fJ-cUhVLa9N+8-y=4*6Y?#)D z!eb^L{Nx~7)~Wlz$70OdEV+!HtrB3#Q_r5LfT8p(sGJGd&R(WZ(LgcVJzibfh=an6 z(FUb9$QgV{>H7APG$X?7m$l#!wd)!_G+Q|4x4CE0r@-V-zR7yP7+y_^D_@q1*Q<%< zDyb8N)FT+#k3qtG`NTf@`PW~%L~Sy*Sa%grDNxPRwXv4Oz`K~;^jq$2bV|A;#T-l0 z$qAv+SoeD$f%IJF2%*s(9c8$x<9tAe7JMPNMhBm5yB(f%(I7NHV1kr23a5TqFUt9a zcqG4Y84o)Yi~kt#aD4vDSG+g*u3>LwY;kl|xxNUQyAfruMb+mGm)h#>#Q3K0Jy9!_ z3dm-8?vb-qif2K4og223-hcoxD*xmrGRGp2zxZj!j`dC|YLslNiOzMdoh|qAG&Xmro z`G5^z{m%pCqIBo%`+S{(7*l$kjLpM@QlR7;h|LA2Huw*q$hY*|o|>)8yiRnFd>}P#8bGeesVrOBh`AfK0?O#*j>{?$o#Ccr{s#`M6<>pG`~8ai}1Fa zu@UQT7-w9nU=UYu?cQ>aqQ1e+Eu9Eq2avy4-m_(Lr(UVbFJ5=Y z7FqQrzIbY1Mn<|SOjo7nD4+e*%9w0o%0b!{T&ch_bAU?uNxU!`MQR}QX`R|Ii#y_x z!qN2TsBHtU4V|^{OTe|iwXI_*!o+dmB};Q^coPLA?PrYA{pKcBqDP-sWQS-tc|jty zBjS5s*J2rCnPO#&ok;cE35o!LAHQK7QS<};PdGHq_1f0K6_V|Dc)#WiY>DYj5#*ma zp7n!gnm3@HK}=oS%)hY&Won^8e*pchd>HtUH|!5U3HD}*eQ{Ch58%f#6-JAVQU)`` zsF$ug-_D1-FtBzQi&geD@S^N;0Y<<|Vi!DNDtE>4@pR6iY~Y_=3Tf*906=0lRH-sjlc;v*P+Hb2J_{{D%MMj1FPcqSm*>mwstYkXd8 zp8BEv$NtdVisHho)EQOaXvNbWK!WnKxM%Bu3L*>abH100MwFxrr99suE*uIg4?~uK%~T)o_`11Ye`{adUSrL%f0W+L-iSi#x?XN+i`|XS9qN6D zq`y&c=-h4UgKvb!KAqRYWtOq3c#IaRgBfj{6j8~|WSZM!V9Me_k)J9fht_PS!~HLl z_<`xjFTu5c09z6d?Xi1sFoc^MEXkhJ+uusu)&Ee1#N|R|W6e{*=OmTD%cMLp+*RTIjzV~FJJChc7WL_j*ShD^o9lSv4$9{CLncLDl!5=m8JFcq93 zH(0gjbQ7Vv%pJ7RMFyRI)A2!-+QM~@MZ;vC8{)I=Y2SHuMb7_#XVCc?XH_5$2pKow zRJ9+KuX%v(Lc?_<$ zChZOu%7znmN%0K0Xs$LNnUD#KK7eNq|N!Fwi8x9UFTIL+8LG zLRcyfH$B3vS%8?LJ!%ZBgE{sUh|By}_%IMt>fQMM7Eq#jdi_`uKav(w+NiQK7E_t& z!M_VdN4MAHPHAL%I2EZp+icWFXTLhSeM z(PC3!i_nKwHHd^NHGXVe_X|l?$NA>ll&mlO+hWBiIPb~v2$_pB3srqw>61x9=G8v{ zsy5|(3sSi(Vd~@hoP>|k@~7v20Qht<_31p7*CecEsT0f0hhs}FFHw(`H*n|2opEFIV(oewzjO`E*eVHct&G~XG_GOUu;cK&?r|38#!4Ryppm*|( z!(4Z6(|%%6H8quq(K_e4MHN3njB-A3e~3Al5t1nRrpS08E&ezue3ss+F zj4tc+bPP&qs6jp!$!{0xk_D5I@MdIx7O9NEJsI{Ng~R!Nzy5jsMaIhS7^6&%)h`0T zN`9XllZQ+ITwLaEt%Ueu&cXi$UH(^o1s7my+u@9LomZ@Igsa@uGgI5xm%KQuy~2bp zQ|gBq${`8A#xy;F_dya!lQi3uP;p5g*Yi`Nt%@rStXq3de4<)x%HjYr&>NE*{TlgH z>)TU?=P#28XL(%qD{{fYqY>^`U2V)H8;prmbJ|`purh!t`1qOd0Y*yl)1#%09A7=~ zya+t$3 z84Bi_$oI8^F_Z-Z>Y9aE$&!@}9e%le#%ToO_a(u+Jx5=tuqDfAZ=7CX{~lR&`0G9T z4-7^EKeY}o>QMA=k2XCy9k<#jOeFiCA2wb`tv9Rq=+u2rPU z7_t+Hf)4KwU$}3zuDcz<{TDiJ-H;=sdT5VmuWJvY#3#&wx!`L)vx?;JLjzfhrG$xs zff=I_f);@yTA9y@bF%NRXEv-iXSaS}&8V3nXvm$_*w4OtT1J;ye@)0xq#ZTZ=H=V| zt0oaP;AhJ#4xQuA=za11Nt3W8$gm zH&H1s(`Zm$itg~%g<~8u3KKC1Fh(MX0P~!A`DUrU+yXd_a_k%50RWQk0Jwp^ZU+?r z5{A>Hpe@#S0LIdP5Szr#OG}J8`XpSu zU>U1N7}?+?U*gg$89?X*9MVvdW0}at1tWO#7Y!DMEQxxXEbv9P^hK=*~~JM1<-W=;{}B$q2q z`WRkW7ZtDH7o5?~*{Q8Rl?%Y@Tv{^PfuvmrXWKiMVMt$$u*Qa#sD*_UmLGI4UqzBR z2G&}Bb&+&mqz9ViB^C>fCb46ivd+z^*!#wCn$-!HT=b>ir9xP|0 z_5s06;oz+NFkE%BjKdqQAkJdH{Tvx2wFpb@U_0iKV)3F`JkV0Y&a z-z;mpSqPbSn%VZCskX0rzTMZ1-BA1BxnxqE!>QZIamBg{pPd{^s6d#~Oi^U?o z*c_#1U4iau^I7#js^{%vOSequVDm-D%1z_QL|t-Z=UJxS+iX3e9H$DuR&)8sx~MmO z;?{ovxvd+20BSQmmz3>zDf!PBR1bZq-CWK%nkqIL=3SN@1Hw0&dkh0hR*c7)nvy^V z&n4APzz^QUYF{Ypknwo)W;z7;&lLE?uCf(NKB9_~r6iu2ASEG(y;}xRq4Oq3Ppnn< zeYb?#t4-$YPR9k@HR zza^rQTX@-vYsU{z{2ea!k>Oluopn zwfxHmw$2wK@T8xQiBsSz-sbfINfQgt|Iz~$#ncCS+`!|m2$xK&T#oWJe;)q+1JG^v zE{qe`MEoT7FynTgBBJ;}%Yqm|)W@^p*mwj9|`A4tgcRkl<}m)Wy|A zA;~mdEfj5IHC?h#$n<6Z<&3EspJdYqSANqG+QbfL^3Xujz>=jr<`fcIxq!Q|hoIn9 z0n}@LUUb~sjq=J0>m73O)%&8yNpq-drd+)n#PQr%AfW>`tJjl`RMOFi)t zyWQ$M6|X>dDlWM{faBZjKLGU`=Ucu+2D_e-sS%IHxx#4md7cAkXa%#f z!rQE~rv>t$>B+dIB{Z07;wI9~=W*;=^3;({Ylof-N_&V?af#Y|9_`Y!Cob2FL-2Hu zb~eGj4aFQ{h~ZGKI0yVSTjs-W0{0FDARpam^H!Ct<@7Erh(sKXij6AUb-i6g{5wcm zSLlAFcJ^(`>FwP#I#h73yN(oe`%Sti&o4MT#2QD^m+dIJG#%4YoHCm`jnR(KP5Wrn z4>P*s)T@=47iP+!!ez!?Qn_*QiP(2d?QOz2QF5F{?o2qix?k4c#D4dn#=~eC&rAMT z{Jo8Sx*0b9;&;Tu-Mr(yJ8#$cQ<+W5J2~QafUyO~Z@Vo$zkW$yAfc?+!#xddYk|Rv zw;_K3dY2z9PK&%lvL3$dIiZrS4D7GHnr@e#z{{|>A_4-i{^_4qZq?B@tarjK>u!sG z0Oy*1K7RmW!b(@4PchmI&%>_EIx()RxwJ*Uzxs#&0VMRl0npp!-c<$u0mNf6ahKBn zj*jQTXOpkfQ_S-APs3*XkPyT6Zz+Ln)+>g&Yg^BR#(C@#^Keh4Und1?j5P{{OTm%| z(6wjnvk;p!iR?Bm+Ixal?F!yiK`rloAEKMz%#UqNnl{*sv`?-`KpI@Knw$^<+&{+B z38_APM&l^^7#Qm&3MOOZ+Q~{LJ>oVUHg+kfilam<`8Y>7$M@A{)r{KZ?)}Ut*Jk)$ z#GGuPV2kALjRsCXSBWpIdPm52YxeV?2JA6(IJW@DobUIq!5{8)wR> z!r_qN(ivRHtI<$|U(&#_TCS z6LYXQ%t7$3A+y|-hnu9eLJrr_cER;tD25r-?E3^nj#ZO2bv)|*yfOceZN z78v!fDa_56`<(yKmBv6MhNdvx%9dfu^T3h-#_89|%EQtTId4`JC1(^d1)r7Z5fZhn zQm+_Vs@}0h$yw|2%zOvQTo9X=stb-@sQfNFGO}f91YJb+*^Ow^63@kji`F~d)ht!M zh!!+DG0^wfJF6k4A9qBMCjh(VEW41Nawj!u=a&6z6WVi{s#E(Ls<_q_v#Xd)0$q7* zY-xE|n(9R@)P>^lR{!Hqn7_&_s$!7Ngo~4VZ&ZPdzw>q#d<9wN8jd~5#RYvH{ zveY`qMEU4)W@_>pnS!hAdq+B1G$V2)WS{o;j-W-M&lp&wPqa>id4_WZbM25X5kPn6 zMK~fthEr`b@UzJKM(<+mfdpbtY?C=aZz}$IjP}+t*^4eGen;(%`}1Z2#?6ySANVsl zGhBk>3*K;6bQ252g9Y3x_^WirWvj zbVXeCP}fsYuy^ECYD{l*%l)%}GaBbyed9&vi8V_jOWo4>ESpJ>oCWN8v8U@jpC#|z zZ|9oMl~!xB;TtIjkNH=OP{Xy)X?J+t0$@x$kH_nu^jHg(NTMeu#jf&Rk;o>IV;zxx z*26mhA9#HRkldJ@{W}**Pj~b+mPb!oY>IE)&d$J!as+8S!iSrQ(91z5n_8VMK1r2b zvtE^f^>J*SaFSKzqQ3VdP;Xtmw|=WQzHhU~%;eeRND0^>jI(|=rkV95^^M(JoAA3d z^A-(PR!c-Qy6+?BOGlq0n-aK3X#TtrN$gAyEBe7s#hw^wdXH!925e0GL63~Y z-Kc6HO#aqrJ#`IpPbR`*KDmhTV=n0hUhTUJ9YWs#;~`tW_{9CW&1RPVa$^_vtFbCk z0j$>stYf;6850ZEvuYt3+f8G7hEuyeUj5gM2;Nnt-BRMOZNq}D@D+E{1*ON$G(K1r zb8KfqWXD20ynB)8@2wsSYTt2lu0?bcgwJxH$j(kF zi@l+?wPYwM0hG#x<;6R?^Z*z{4{rA4mwopIXV2{S!L--AH=fD@T2OqwXqzsTn8FNR zBKdVx@$LHZr~}V!w(sLlirvoxfWbcw_8}Bp&uX}(865V&<`-+_|lvn_1rwzo;|Xd^jNg*Ttt{n(z9Xg0erx8_z$Ls^$0G?~AyIz#hJqS?3!0sJxZ5yH}*OgdQC~F>`34q|rdNjdhrs zD5r7n2eJA#+jFZvR( z@L=AZoh;oyPvfyFL*#-e6AwL+>NjEK=$z_+QvF6BRQ8N`1$V)$R&kT}<(s?JTzB;0 z0n&$)&Y13*?GFx~T+^~V0X|P#6;R|o`9TG7)_^AkYpgoAK>|59Kev-H!UlaUO1D5` z>FKC9lc6EMu}&Wp z!vYi5JV8PZ8sXG%csUm=iVengkz(U&{Cqz_qDPg{{B&EB&fl?i)6&u~q;v#EF%f|@h1bhC zI}<@JjupcQ>9hta=p2gN^|S!rxq29xogNG6DNqr7=6omq?hD59EUFp9;4-NWazp<1 z*!;--qHQ&V>C)w?-$LtZ4RF4wNQisc)K_e!$n{+#T$3db)qbcWrGPgxKDqQsNz!Sf zGLMhp&4!r#=8(%#|W z@}zLc?prVp_M}V5{;!ah_B-K8O>Q9b^}=tAL;J(OLe|R`q0<|5?q_K)5%eEG#qoc< z3*bGhEnv^ZTWJ(Jgm#N9jrMVnb1)7@%K>#Fymy1jy1G4_{Q9&l$Mp|j?pJSzmz~R< z&NshogU}!L+(KUT{$o7Wt*(?oy~M@ecM_VAdMxw!J`}z>E5iQs>jox{QGDZ>i_6z4 zWk53hc6qT9R0bi-J}Ge7;AQc9Bd$!SsZBc>65$8|0g|wA>_0L2$i!w?mRRxQV`UyMIj*nYas* z$|CSZOg5?@YGYsJF59ARsLhAixoYH18KY;jvxLb6>)uQ`xx&k^Uu88pCEujIe;v_6 z<*}Y6c;e%Ax(Zh0s%){88?#j!az?Dy3aT@fSRi83tIYKkaH6u*Y4=t7R0e%URBwY7 zgA*m0H#FiXJqz1R;gmiH8S@0W=`rFDmVQ3Sikfy2j1FL#^wi0fr7_XTDEyQxI?{nq z`^ay5WGO)_*{cSCeLc{ZIM%zji#q7N+904`X)dJMlQj;;FpB{NGOIzPp_iFg|r zlp5Q7QChSon9tBmQLt%8-k(k0;J8+S;o}@)9If|=v-AyhPN0EZ56s%UZDy1)zRb0S_>z&;N3W^$%^H|ECL*X7_T#+SH1G*h*0jBWl=3huf?O zF}o3g9C{%XH1Si1VXOh8t8u4mp({-rh~=wRRH?3Y!@GMj!y-(6OrIpr*5IWQiYEad zL*cKa3tV=`9{cgd^YU(RnbOO@lud1Tq7$QK(9BsRONr0JlNMXdJh9@v!_8YTG_=TT z;Qs=8$C7}4Yvba|FYg+hZ`>*Bxv?6!Yk5AFny0$g6KVImT+(yHKI!^s z)wqX~>=<|Hy6N}t?r$%id{a-}6aL6+)~Ok!Ce`NII1=RhllxmL-rxPm<^fPo4f6BT zQJ5xo8iMSOH^$NOan3p^LxYrTvcot)~qi!{=sC?GEv~=RPdNCn^VBX^m@bOLnf1 zlS-rogF=$+fJZ|WB+k=Y%O|NMog_Y0~n&JT=Xi5fa6*xwK4fcAgu2lL;)gu+$hIXyis z)%j`()G}H{qZ?wZ$ucL!;c%(w%dPtu!PU#HW$B*Y1vK&lbMQ%8>AHJF%HufN=)2Qh$xf=gsDPsqa)WlT)|?t?r_LqunqzS zBH|epACib*ONh9OimsU}?kGVmDvz9i6m~i+E7aw2#@vvHh53W+va%Gf$@hX+r#+87 z)u~71rCgFKNA~2&HKF)PTLiW}92|ZcVjSjfu?uy=C*1QR(q(udpF?vg{dtuI1Ji=YkT_A@bNdPIc{`R5e4aV;? z>%ZI}?m_;ZfU*CxZ~p84{6G8V|3^a=T!aBsg~w{nK6x&MHSSSQX|ayOz5usUeDKFa zI4y5TQDoYPEnQ_2Dx=0+S{R@1ZGGwV-jOEmA`dh%*1Bf4e6IVHG_Bl%h*xqpO<*k|9>y>bAJW0 znArHA0$IXJp0_D7@VRk~;sOb6mqv-EdWt2xSJfrz7L}=X>Jy(f+&9`CNE=GLR(Lgh z;_`G~gs(`M{ZsS}sbTs9AV5DoL)iQQC~|~}5m&+Q{kX-EiZPvBoL3C8M8{hS&9_rM zycW0L5x%w8Kipq<(FR##%ly9y(Q%=Frwis~{}UPid#3i^5E*Ck*=cqh>?vJ~Oh_o07ZZNKt1=gum9)_o_GYxn-KZBZ4ARJ!-Ugf?F8qj74i&2QWJn!DIHdNm7y^ z&Apnqw-(8U3~U2Pb|e2bl>V#YxQ zjc?4Gk#-)=pO_R(OT#iLg;XUawnxbA#>yMH6;0L+8C~@4x}O$~n6(LbFFI|7&e1ws zxYd}}UTT!p1uRxygLOq(wMMdi zPc{plhy_UJ z$Mcp}Kl%vS@w7`wW2gK_BUhIV&c_Z2811yJ;+gpm({O|33G6Wme6flZOaB8`OJe~0 z3`&#A>Ug*kfF<~uNU5_0R<#CcNkfSzjh7fCK74K-u8rb6&s!7cv1~Q6=JcUy)<{(f zZ!kYxxG~SOW9>06pRH-szwaW@M)PHR1SDJ(iwCNm* zZ7$8HWZR&DvO}^8E^wJZm- z9J9x;qO3$>=ypwn&HWT|oUhj`*a55x_A&H>(^O3D*k`G9AMDJ+t;iBIxEkL5oAD*P zSguMgwYs9ugXV8g)%%r$Zh`5$EqWs$siwIhZ_ zm+08B$&}oP&3QU_%)H|puNBve_X2{K8)v)2>sik1x_XRUnoV-U7RXn1t0b>Y0%9F4 z&(z+owZWb$Tm|khz zAeR1wES;&+(hb9jx^HvM{j9B}wIw4|Ubk29MI*CDRl}F6PBntDr+PNA5%l*5JB8gT z<#t|}JA1f!QGBJh?K~dO)*g-d_Lb_!z{T9Rqg?;Cq~ajau*)B;eiJp=_h7dc|BXF8 z=QX)MmAzAOq>WW-2+a}c%*4xTaHDJy8`;jjH7ss%m~nud#puzO1Ppp2(~Cp@J*+jX zljfZaH6F(0*PW>wQ;?YQ?-<_S^2`4~YyQ{1p_+AbCH5)UevFcHUh2{>?Cq|Bk4^@W zii>X7x?K1ERiHthdg7zi1LEzm@;DNzAF3-S$j_>uSctv<3x}ye8X{(+s)@n)~O_Xt?OOi-xA0p#p=T~JK9^h1bC(uz(@R@=c zpl%7P`(&1*Myp)fi}UfOBOMuB8p z`RX6@qvNw8{lB-m?RX@`lD_SoD(V2?Df=B5f-LTjK4?|#SvF>#VNrRNWy z2T>17ee^_?b!n+`XPEt&ed0vs^FZ{WjEwgt565LID?`V}UuoepV;PehBecmH`3NdM zHwy55(Z^;^QU(A(Z1;NJ5RneKf_7c?o#8hYpq>u(y*5e^6P9DkE`3jVhM6^5esEF| zxy^A%z(Ty)yVzJSz<1;v$eV-=u`o{3ervctqr(4I5wUFRw;l;&R*JpQhM61F+RmHP z+P)L#je&lovbD8Lkf{tMahK`m&w1oNJV>u0!rzc;IcP-w?2!Uy=lw_hE?1>~#dIn; z_pT!J*2|RVg-e6T+bSRTnB)u6#Jy)@(@5ATSS3c+i#hAcvrS(NE|8osz!+4G%Z?E5 zH+15{EvN#EOIOWyY}rt1??y<=E|qjSEh&|o9EI0j>(QxYi%2!ADC8OLI5U0nQwyTr z7EKyRUb=AIpPT_v+3|3n%D6mQJ(==ghAezl?0oIGnS>z$$oSiO$CBsH(NVw>j7^(> zb=4FL(`a=2XGRgr81|7PQXXC8W1!IMr zmy=h(5c5m(IEgpR^S*FlnWLv3THp{)|U}O7pr-&@FX*!w6t1@$p zxq+Ykg`*ddPC2PsJol3kvagMwogIr*QO1nj&CRL&c#O0uAQ}!^Q*FBPsPQh15^G-x z+eky@!y2AL?#?`mfbbT0ewXBsbY1 z5ZRt+MBb6JDSE$yqH*Q6_WGWH3&@U3fEJQHgj_+-&P_yHjz1Rp+n$d= z+~|R<(4|H){5IT)GW!YxLbVz@$Rwf}`kLn;5yuvkYV|99h@GrS*JQICs$bMP_0aX* zw0kNGi&HAv|KZ!p7a&-D4AjuZ`dNONfT`z35$fJm^73{Ja zp`xxW?1^O1ZlqtnG?_TR?XC&<4)P*CD9slPFoTTooHroR>Ta|p(9|Ni`}h`Ovzy9k z%*{Ptp~oMCN=h?}5ylofz)z%%NhqDUH)6As3RN}eYL*{K&Nq9hr)=<`q88wNwnoCp z@n(A<5SCa3QQBcpp49p!Fx>u>{HVn|+AGJSa+Udl0#SD|6>&LVP6H=tIIz=m@o2QQ zF008V;kC9h)ORx}FAwN9a*G)?j+>-KL~`&>q;>6RC?ll5=J* z7p4I}rE-=k-Zo_@Us--PbK`8PGZ*S;nouTt7i}y zm8N30%T3oXbS_q%_0gr936x_QoLsS7!<@e1x&=Bsg5JxVIntYV#VE+CXU_Zqlq{MY z#2$Pxue-z;XbPGLbu|y=_4~NS+bu$n9uW&v*=Nb}KgCVB9j)gXIUb=FL(ymvof|ciFO2Qni0a9K5hQ~0njR>=F3!buBjKI zc+YJL7r>pC-waxssk#y$28ALGS;t)j_d$kGRK!suaKnyZ%46Y?ID@ptWWITU1Ef{` z8)NHvsg=*>QP93G-cR>4;(6A{5T10I;rG#}4Ml8kK zp=1!v8b!-Kf!!lj&-{#xx8k<;^?qdp(JnNDK z3um7;BK4uPI>rHR{$-l?NNHReoU_1?X=-az)7GpRic^PYZOMjjq3CR{Mk%HIvla0J z`l0$=AJ<6{sNwVvf4nA$Asbs0$&pvH?U|RUJn!7P(CE2$Vu|^8)aH4tesFhNA$;lV zJWHq3WKN;s5DY;RttFY5CecA^WVHfc36*vtugBaC{c(f820Q@P!$o2!CFvp_)UdiO>(86&23yP%}H_I$b2IeHWQ;VXXo;_8=I}!N^{&4*J~^#X}iHGn)ZafwA=|M zI}1p7VzK;AprDt+=bfy^ojv~&BU3^bJH3R5!XKP~!mM!mv`EJ0#_inV8SV)>j|mS+ zcx1IRK+|S2Jz(RYEH~qvSmkhSGWGNoa49I-3=f^{>wB^XKIq!&3}mm#rr2@cG~`q< zoN|4eI!C^iMo@y+YQ;Xc_;NlwECS57OI|K6H>M}#Q7gXarZD#3Q+s4&eK^BB(x>g#xa6{7)giI+uBu&-OL_x^&#&@q8?b@8w z(Uh*`Vv#krBExi}6q>Gk?z6E_L5hmiYvfu_kzh<(R{8>2h}nyhb1S*{g-Z0Iw#az~ zEOeQ*OQ&(pc_x@VqL=%_<@8;+y^510YBMf?7rnp#Y zNTO^7$sNh-4uX9x7_{a5wkl?F<9{S`fEE zl4f3GY^3WDjs7oNc)MNej7d^+&0Xwbr`OVsOP7$vdEfQv+`)(Fo3~kzhb0zBbM>Xb z+S;_{yQpT6hOGUL1<`byLW~pmD2SPoCbnz7xf%jfogoyz+Sg!>zsl0cSaw1#WZ^{V zY}AUqytt)*-KA|e`-6r#Nv4Ps?!#m}gS?|?^|#M2;@g2;n(8o*)gZke&&t%z5tV}2 zLLZ1}lEb^Z%x1;Rn#6|mdFvljoyFUtC?_apoBE@*OlQ*{>k}9Xw6Ycby69_jPhYp- zp;tJmHQ&w#j!z@=eNU8p^tqdN#CNt{)Kq21I~+-fuBFKT-nb|eoOiN)%~AST4t!Fj zI(*UWWNhX-Dc1LYw0E9CO}%fQw*X>61q21eLX}>GAl0ArjVu8Ol3WT|(zH60RxxAu8Xf2e+v>^q!sAw+Uem zmzQ$UH+uRRp~?iie%a65V<9Ye8>yBa+QSotnGAP>;AWklSqlJ|Qr=;#aPnK(&Q;*~ zGMvPieWwMq5e>o##NR`x>C1?;KJBMsT!5WHgMG%=NiGNbku7C)L*V+q3AmlFA@&?jEXBsYD-3-jG4@fp^%R1LLtjT-`Pxt=PyZ6gD!l9#m_l9laJi#DR>q1hiD%{fkU6R$VaTLm{0O9s%m znH&Z4&v1F8t7gd$Z@Hk-Pi4pUb0U6RTV~)+c;gdPs&z{mH1K$8$Tgx|uh@hIpH~Ic zn*5@=Xz$)XZ6CVp9H6>L=4`Z*>DFJ~o~2pAEC4~jtUQ_k8>kttFzT#R4wsfb$$I(13W%J{I`%)Kx74?fG zuxvl7X~Uf4R``V~zEzl86X2X>c_{L7etE$LfP%B_>Tt`?cX2hYo}LBv1&HZ0)L~Y} z4&t8DVA=}MD2S!lx#)lzVh}5qO!_04$4;}E6#N11nP+W5UeulE^_r6#5baf5ZV_7n zk~tI0W|$@CBez`OAS10@o{c+U^ou(wVF8jW#SP{IQK@#pnp-cQZ5b<56s}KC|LK@_ zad+SPHlY$p4QiqjjGu>ec&_ZlvUvAO=6Sf=E%fF1bW~;tmjQTzB|I+e(+R(-A8wx1 z(WQyA4)R_1_9O0{c#QWSJ?)!**f|i1E8j(L)O)GbeHC#@#m#5JENKdDzq(^$T&Qn69V|D3#tt$!eL@e*KslQQYSZ#1;P%nGFB)cM>%^wZ%IvRUo1a8nt<4 z4M-p^TpR5Aw16N`WMd~$LsPRJ$E9Ck$Dj$=XJgxBeD=j2(c6J*M&RyvPq%TNtlZXL zRq%3oeJ7TU=toPVLENWxbpo5$_IM@U@8YKU2_`*bQRUeVDFw~?o*YO!;)i#!{ zGW8{UF}F{$q-yOpD>&Wk3bF2>#3TyX`IszbuJmR0){&mj@k=GwUJ`SBs0akrt^+^F zqeQnVdDdsGc^-jL8A7;X@BBrMcL7_xOJC91v39K@N*+&)-uTQYi#bxoy&bYA^EAI( z+xH<|Bdg>vq{3xxt9483Zl78(!rgb)l1>lrzH)lW(YijNA`VO5KcLaRBrTGTCxe>O zD$fsiIYm(^&B52(vVt%&caOE&wd<1*yRo);>7Q|Dh;?9Qv|>gW^dgTgTrdS?F(Q8o zP+vf?0BZflJbzqmQ3Q#dALW(d)>}yzn<-rO3|!q7-|NFB?`mh+l;E$P4?pGGzu?B# zWiZmjTgI+@QB-$Z?OnwbxT&=sAmPV_Z`KV`1&uWS^<%LSb$82fwTm8K{pIdUJ@m%T zf;-*gzW6P=egMt@)`C#Z%-Z@UyJuQi|7;VRC-GgCf-@BLh{q-)oSJsFo4=CKP9Be? zW6m-u1lVaj;ZopaMKg6GyY$<#=QfYxY;7P>Qeyid;F9?Ch$z>@G1Lu>8DDIfsu;yD zFKFlaO&)aPAD<{)R)(?PqM4Ery8t9N-oxTV{P*+0BHa@8=lFPSVc;}|Of(QyU(yi| z+MhL6qp&{uel}*hyNm|EU}_)djvC;mRQiVrgF#-$Mmj9qPldi3KSKuVEpI*kNsDh* zcE<8QnM0eAQ22o!O#5W_Lr(&Q2y3ZF{xkMvT421%2Ih4<_VflQCcrNTR>&3{t1xN> zj?L^#-CW#D6wMIz-jA(#*R-AmAJ_9Xo&r)+v&cGIn`Iy2+5~Pybji%>h^-0l!1BP< z+n%}srQHR?n2a}q39ZT@Bq_P^`2J+?xW2O@@@lS-r467sciS9K42-82NY-5ay26DP zmrVY0?tIyQ${rdnlX}&!L6!32@`5VX$zC(SYbO}zTV4GDqlc3)u;`HtGet%l(C0eDY>d7GE9 zdw``;ctovjaL0nfmP8QB;rB}Y!QM>i_>0u0<(}>=8XOxi!Pu?>)2c58@A2WxviiGvYGz+TK0?U?TuCl`ObyvgRKn;nB?p< zO4F&y-<0xrLGWHFPi)NwlguV%SYRVQTOdiMv%seBJ9|Y-O+y+N zg=|{;_E57S+qn4#*HsT^EYYRzlik{oz^In|I}H?+$u=4Lf+1;`<=%0p5OWNPJFT7j z&-3*I0;9pSc98P5A)HSb(wVd42Peq?Sqa8o3AeTkDf|NXI7xfz=@BL&Tx<2oLc<%5 z4V?kscn&@kmf{_gR2qR-;ZS6FtyhKh$hfI8TXmZwc*UjCM-Y`XY@%ltaq-5b4u9n! z_<&_~LqAH=ejaxkO0+}=l<8Zki??f z;D78~4MAMG2jo6X)#)YH{+8!~e$;ZTU(PTg`9*xqk5qN)}h z82b5gughS^%*jOuoBGJP4!r?TQ)^vLkz+6Z9a=-WT>AmF{EefIOa0HbxcbTK&w!HL z*!O>=9?^%DFCy^a4hNa|d+?reCUsixnLb@39*&cIAR%#p1O) z=M9L@7#Gszjf~7>;44l)Y?uww#xO3c`+rk7D_9c@Y~qI}w#>^+e66 ztEI!Fw#BF7ze^047dg1aQksLwcgF8pXH1yhom?Ecr|8(7tGX$%)+6*MU{X05DRa9w z*N;xgk*4)) znz8Zs#?A-G7-E72(->auP(OA-!@KLto5}E}DF>%mTc0b$phyjeO-Wq{0R5Mu`yn!v z|NeQMtXh={tK`pL)hfEzN5!N zL;4hUSp?ilCu`AolFH8A^1)+E8Z=@<@~M;o>iBXf)W+u#$|f>CkiXU^Zy1illFhtV z#-t?R`YU zT4;+%D-PM2B=4`nro!`azl{IDZC-5sa7IT;}5sHX7PN0Vaq z#y+RF3q|%Wi)a&KLpCKuo>Q)$v8tv!LKgm(Pynxfd^PQXHKqq7iU%77RNzWF7e_ms z%*JLw6nE&u0TbU0(6)Y%W->U$dmj_I4oFyy+FfrY1J`hWiN&JuWOFK`S#AoNAV%0DFac7ydbO% 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 ci{Wz@{&z;u|KBbg{9RL6T literal 0 HcmV?d00001 diff --git a/tutorials/source_zh_cn/debug/profiler.md b/tutorials/source_zh_cn/debug/profiler.md index c7740504b2..be8c4d9d51 100644 --- a/tutorials/source_zh_cn/debug/profiler.md +++ b/tutorials/source_zh_cn/debug/profiler.md @@ -22,9 +22,67 @@ ### 方式一:mindspore.profiler.profile接口使能 -在训练脚本中添加MindSpore profile相关接口,profile接口详细介绍请参考[MindSpore profile参数详解](https://www.mindspore.cn/docs/zh-CN/r2.6.0rc1/api_python/mindspore/mindspore.profiler.profile.html)。 +在训练脚本中添加MindSpore profile相关接口,用户可以参考[MindSpore profile参数详解](https://www.mindspore.cn/docs/zh-CN/r2.6.0rc1/api_python/mindspore/mindspore.profiler.profile.html)和[_ExperimentalConfig可扩展参数详解](https://www.mindspore.cn/docs/zh-CN/r2.6.0rc1/api_python/mindspore/mindspore.profiler._ExperimentalConfig.html),针对自己的数据需求配置采集性能数据的级别等参数。 -该接口支持两种采集方式:CallBack方式和自定义for循环方式,且在Graph和PyNative两种模式下都支持。 +该接口支持两种采集方式:自定义for循环方式和CallBack方式,且在Graph和PyNative两种模式下都支持。 + +#### 自定义for循环方式采集样例 + +自定义for循环方式下,用户可以通过配置schedule参数来使能Profiler。 + +样例如下: + +```python +import mindspore +from mindspore.profiler import ProfilerLevel, ProfilerActivity, AicoreMetrics, HostSystem + +# 定义模型训练次数 +steps = 15 + +# 定义训练模型网络 +net = Net() + +# 配置可扩展参数 +experimental_config = mindspore.profiler._ExperimentalConfig( + profiler_level=ProfilerLevel.Level0, + aic_metrics=AicoreMetrics.AiCoreNone, + l2_cache=False, + mstx=False, + data_simplification=False, + host_sys=[HostSystem.CPU, HostSystem.MEM] +) + +# 初始化profile +with mindspore.profiler.profile(activities=[ProfilerActivity.CPU, ProfilerActivity.NPU], + schedule=mindspore.profiler.schedule(wait=0, warmup=0, active=1, + repeat=1, skip_first=0), + # 可以通过配置tensorboard_trace_handler的参数analyse_flag为False关闭在线解析 + on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), + profile_memory=False, + experimental_config=experimental_config) as prof: + for step in range(steps): + train(net) + # 调用step采集 + prof.step() +``` + +- schedule:使能后,落盘数据中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。 +- on_trace_ready:profiler的落盘路径是通过on_trace_ready的tensorboard_trace_handler参数指定的,tensorboard_trace_handler会默认解析性能数据,用户如果没有配置tensorboard_trace_handler,数据会默认落盘到当前脚本同级目录的'/data'文件夹下,可以通过离线解析功能解析性能数据,离线解析功能可参考[方式四:离线解析](https://www.mindspore.cn/tutorials/zh-CN/r2.6.0rc1/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/r2.6.0rc1/docs/sample_code/profiler/for_loop_profiler.py)。 + +**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_trace_ready配置的回调函数解析性能数据。各个参数的详细介绍请参考[schedule API文档](https://www.mindspore.cn/docs/zh-CN/r2.6.0rc1/api_python/mindspore/mindspore.profiler.schedule.html)。 + +![schedule.png](./images/schedule.png) + +例如:模型训练共100个step(0-99),此时配置schedule为 `schedule(skip_first=10, wait=10, warmup=5, active=5, repeat=2)` 。那么profiler将会先跳过前10个step(0-9)。从step 10开始,第1个repeat将等待10个step(10-19),预热5个step(20-24),最终采集5个step(25-29)的性能数据。第2个repeat重复等待10个step(30-39),预热5个step(40-44),最终采集5个step(45-49)的性能数据。 + +> - 在单卡场景下,profiler根据repeat次数在同一目录下生成多份性能数据。每个repeat对应一个文件夹,包含该repeat中所有active step采集到的性能数据。在多卡场景下,每张卡会独立生成性能数据,每张卡的数据都会根据repeat次数分成多份。当repeat配置为0时,表示重复执行的具体次数由总step数确定,不断重复wait-warmup-active直到所有step执行完毕。 +> - schedule需要配合[mindspore.profiler.profile.step](https://www.mindspore.cn/docs/zh-CN/r2.6.0rc1/api_python/mindspore/mindspore.profiler.profile.html#mindspore.profiler.profile.step)接口使用,如果配置了schedule而没有调用mindspore.profiler.profile.step接口进行数据采集,则profiler数据采集区间的所有数据都属于第0个step,因此只有在第0个step对应active(wait、warmup、skip_first都配置为0)时,才会生成性能数据文件。 #### CallBack方式采集样例 @@ -58,49 +116,6 @@ class StopAtStep(mindspore.Callback): 完整案例请参考[CallBack方式采集完整代码样例](https://gitee.com/mindspore/docs/blob/r2.6.0rc1/docs/sample_code/profiler/call_back_profiler.py)。 -#### 自定义for循环方式采集样例 - -自定义for循环方式下,用户可以通过设置schedule以及on_trace_ready参数来使能Profiler。 - -例如用户想要采集前两个step的性能数据,可以使用如下配置的schedule进行采集。 - -样例如下: - -```python -import mindspore -from mindspore.profiler import ProfilerLevel, ProfilerActivity, AicoreMetrics - -# 定义模型训练次数 -steps = 15 - -# 定义训练模型网络 -net = Net() - -# 配置可扩展参数 -experimental_config = mindspore.profiler._ExperimentalConfig( - profiler_level=ProfilerLevel.Level0, - aic_metrics=AicoreMetrics.AiCoreNone, - l2_cache=False, - mstx=False, - data_simplification=False) - -# 初始化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), - on_trace_ready=mindspore.profiler.tensorboard_trace_handler("./data"), - profile_memory=False, - experimental_config=experimental_config) as prof: - for step in range(steps): - train(net) - # 调用step采集 - 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。 - -完整案例参考[自定义for循环采集完整代码样例](https://gitee.com/mindspore/docs/blob/r2.6.0rc1/docs/sample_code/profiler/for_loop_profiler.py)。 - ### 方式二:动态profiler使能 在训练过程中,如果用户想要在不中断训练流程的前提下,修改配置文件并完成新配置下的采集任务,可以使用mindspore.profiler.DynamicProfilerMonitor接口使能。该接口需要配置一个JSON文件,该JSON文件的命名必须为"profiler_config.json",如果不配置则会生成一个默认的JSON配置文件。 -- Gitee