From 57f4db66f7b101154da7b9faf400960f9759a567 Mon Sep 17 00:00:00 2001 From: VDH Date: Fri, 12 Sep 2025 18:06:54 +0700 Subject: [PATCH] ST --- Assets/Editor/EditorLogTools.cs | 160 ++++++++++++++++++ Assets/Editor/EditorLogTools.cs.meta | 2 + .../Debug/netstandard2.1/CSNetwork.dll | Bin 325632 -> 325632 bytes .../Scripts/Network/UnityGameSession.cs | 1 + .../Scripts/UI/Login/LoginScreenUI.cs | 9 +- Assets/Scripts/CECHostPlayer.cs | 7 +- 6 files changed, 171 insertions(+), 8 deletions(-) create mode 100644 Assets/Editor/EditorLogTools.cs create mode 100644 Assets/Editor/EditorLogTools.cs.meta diff --git a/Assets/Editor/EditorLogTools.cs b/Assets/Editor/EditorLogTools.cs new file mode 100644 index 0000000000..400a9b51c3 --- /dev/null +++ b/Assets/Editor/EditorLogTools.cs @@ -0,0 +1,160 @@ +// Assets/Editor/EditorLogTools.cs +#if UNITY_EDITOR +using System; +using System.IO; +using UnityEditor; +using UnityEngine; + +public static class EditorLogTools +{ + // ===== Public Menu ===== + [MenuItem("Tools/Logs/Clear Editor.log")] + public static void ClearEditorLogMenu() + { + string path = GetEditorLogPath(); + if (string.IsNullOrEmpty(path)) + { + EditorUtility.DisplayDialog("Editor.log", "Không xác định được đường dẫn Editor.log trên hệ điều hành này.", "OK"); + return; + } + + if (!File.Exists(path)) + { + EditorUtility.DisplayDialog("Editor.log", $"Không tìm thấy file:\n{path}", "OK"); + return; + } + + try + { + TruncateFile(path); + EditorUtility.DisplayDialog("Editor.log", "Đã xoá sạch nội dung Editor.log ✅", "OK"); + } + catch (Exception e) + { + Debug.LogError($"[EditorLogTools] Clear failed: {e}"); + EditorUtility.DisplayDialog("Editor.log", "Xoá thất bại. Xem Console để biết chi tiết.", "OK"); + } + } + + [MenuItem("Tools/Logs/Trim Editor.log…")] + public static void TrimEditorLogMenu() + { + string input = EditorUtility.DisplayDialogComplex("Trim Editor.log", + "Chọn kích thước còn lại của Editor.log sau khi cắt:", + "Giữ 256 KB", "Giữ 1 MB", "Tự nhập (KB)") switch + { + 0 => "256", + 1 => "1024", + _ => EditorUtility.DisplayDialog("Nhập dung lượng", "Nhập số KB muốn giữ lại (ví dụ 512):", "OK") + ? "512" // fallback, Unity không có input prompt chuẩn; giữ default + : null + }; + + if (string.IsNullOrEmpty(input)) return; + + if (!int.TryParse(input, out int keepKb) || keepKb < 1) keepKb = 512; + + string path = GetEditorLogPath(); + if (!File.Exists(path)) + { + EditorUtility.DisplayDialog("Editor.log", $"Không tìm thấy file:\n{path}", "OK"); + return; + } + + try + { + TrimTail(path, keepKb * 1024); + EditorUtility.DisplayDialog("Editor.log", $"Đã cắt Editor.log, giữ lại ~{keepKb} KB cuối cùng ✅", "OK"); + } + catch (Exception e) + { + Debug.LogError($"[EditorLogTools] Trim failed: {e}"); + EditorUtility.DisplayDialog("Editor.log", "Trim thất bại. Xem Console để biết chi tiết.", "OK"); + } + } + + [MenuItem("Tools/Logs/Open Editor.log")] + public static void OpenEditorLogMenu() + { + string path = GetEditorLogPath(); + if (File.Exists(path)) + EditorUtility.OpenWithDefaultApp(path); + else + EditorUtility.DisplayDialog("Editor.log", $"Không tìm thấy file:\n{path}", "OK"); + } + + [MenuItem("Tools/Logs/Reveal log folder")] + public static void RevealLogFolder() + { + string path = GetEditorLogPath(); + string dir = string.IsNullOrEmpty(path) ? null : Path.GetDirectoryName(path); + if (!string.IsNullOrEmpty(dir) && Directory.Exists(dir)) + EditorUtility.RevealInFinder(dir); + else + EditorUtility.DisplayDialog("Editor.log", "Không mở được thư mục log.", "OK"); + } + + // ===== Core ===== + private static void TruncateFile(string path) + { + // Cho phép Editor tiếp tục ghi khi ta truncate (FileShare.ReadWrite) + using var fs = new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); + fs.SetLength(0); + fs.Flush(true); + } + + private static void TrimTail(string path, int keepBytes) + { + var fi = new FileInfo(path); + long size = fi.Length; + if (size <= keepBytes) + return; // không cần cắt + + // đọc phần đuôi rồi ghi đè lại + byte[] buffer; + using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) + { + fs.Seek(size - keepBytes, SeekOrigin.Begin); + buffer = new byte[keepBytes]; + int read = fs.Read(buffer, 0, keepBytes); + if (read < keepBytes) + { + Array.Resize(ref buffer, read); + } + } + + using (var fs = new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite)) + { + fs.SetLength(0); + fs.Write(buffer, 0, buffer.Length); + fs.Flush(true); + } + } + + // ===== OS Paths ===== + private static string GetEditorLogPath() + { + // Tham chiếu đường dẫn theo Unity docs + switch (Application.platform) + { + case RuntimePlatform.WindowsEditor: + // C:\Users\\AppData\Local\Unity\Editor\Editor.log + string localApp = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + return Path.Combine(localApp, "Unity", "Editor", "Editor.log"); + + case RuntimePlatform.OSXEditor: + // ~/Library/Logs/Unity/Editor.log + string home = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + return Path.Combine(home, "Library", "Logs", "Unity", "Editor.log"); + + case RuntimePlatform.LinuxEditor: + // ~/.config/unity3d/Editor.log (đường dẫn phổ biến cho Editor) + string homeLinux = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + return Path.Combine(homeLinux, ".config", "unity3d", "Editor.log"); + + default: + return null; + } + } +} +#endif diff --git a/Assets/Editor/EditorLogTools.cs.meta b/Assets/Editor/EditorLogTools.cs.meta new file mode 100644 index 0000000000..abd6a5e3f2 --- /dev/null +++ b/Assets/Editor/EditorLogTools.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b640a9ed9ecce724cb2cd5891d01b4ff \ No newline at end of file diff --git a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll index e7daf8741c93d19af2273fda1a3c49ffeb140f47..159ff361173ee11b77d3cb072af6afcc3857bd37 100644 GIT binary patch delta 47696 zcmZ791$Y!!`!?{Su($nik@v%7OY&zafTotfSI@;JpWk5h~trs^H9d2Zau4B~C#aep@8i-MeI z*BcUPRxg-U$l;NQXcHwyp$ zf`5Oee^o?Q`$#Gx3;mnZEQXf3*8Cg1o;*9h8cdiX-27cAMVR@!QHn4TCWAkxs1(ss zvTk$ysb$wZjK%Mo*ZeidpQcB^{xq%Zn$P|qU5{zOdnpPfn`M6d|J}03kzl?MKYtpm zA97k0SHV0fGbdds7)!udGFN4fA;G38+ooQrShsj1BN^inCRzN5a+I-nL@*|0fBrI9 zH&qj_0B7v;f7MLr&;Q>Y|4%>5#gZk;oF#90`)|(1sVl5DKP;Zw+|&I0+miEelPs&u z|CBuVS)WM5%wNSH&|kOBUq3HkOm+NOn!i)VO{PZHWWmy@lgn+USFKXlkC&^XouM9i zgF92_@fC5X70i?7-wZo6>lRUl(wj6am#H=9T~wMdm?3RRUMAQmZH_F><9wOglmjEp zY>OV_&5t5XkIiiN7$2OSwp8k+Uv5-<35BAyB6W}O;PbST`M1H*=}M&R7WebRgm^~X7N4`6n|s-W5-hUXc8GR(o7YoK7Dc`}kMhJs9$&0-q9W^rV>S#@Hv(X?A5| z-9$t-AB!{6Z0+uuB4@`Q!8K){j>#tOW{N%*!c(UEKdYID_%j}hlP7KuGychpm;c}K z1R`Sj=W*68S7yhqz07(PVK(6SJ^uIR341)xw7z~y{ zoFq;}X7h}ZFcvglu| zghg*^#k25K>o2zA^?67y|K|bm z@}*@xmaZSzmNycq-rMm=dQ|gFh)r!&^u2ccb=+|gbl-Z>V_Wi+(VyD$q~b|Lbg~Zo z1yy=`_}q4n#su*Q-lHSG(nQomY7 z^Kaqx8N2ZL?YyP=4OoD6i!KtDhGi+>v@5!7SUPqY%73~-OYEgH;cbA)oWoDnO2C?;rehACPzAEN!896yA3uSGfGm|+BW0O4a>W(g9 zVQffochglndWHEJE8(gSCNH8|7r1 ztakBohlj_@#X6U!Ti!I{EI0e5w0Y{J>d#L4JuEj{WCsVa0e41+tbkr z_SkA7JN7y{EI%7-_N9zXWF1dFU;yFGzi&kmb}KsTXaZQr8PD(>-fsKDA!(N0;;cS9 zW)<+|m~thoKJ%5MWC33pqXw)T6gK&OSVPtiDr(e-t%O!jE*sXE-G+7=eaEttXXa19 z*TJX>YXtQ*YRX1=;GD^cMKdmtOXlsHUyfv6YpMx zwO~zYl{V_V`J1rs*(|F;?C`M-9y+ z{hirkC-&yJW?h+CYv`7&<_YtHko{<6mLFgpx89B0olU~v&gbd;Js690H;q1YKTa=J z8M^U0tG^Fx?d02G)d@O#oyK}vxh<>@i?Z6o8lDuq4_jgND_dw5--qoWd9-?&3j4C7 zb}-Qj*i;r@Os6GRK_$8tf3P9zrnSOq8QlNoDoHHdY%lgs}T zoApHn{QcQ&D=)x`ABhPaz%rQUQ|d+WBgOnttlk%u@(*O@l{UsS`KaBlvQQDl2D6h;64B6%<^IM! z=-!7-jD|p6cD69O0G)ZF&HX~^xLfXf62*RH6`>}VTKj)xuc5&&I{JsOrr)|-dOZw> zvU%Y8Cr85qY+GG7IOGmzzp=1-P79wj^#8_6)px3LGN~CG0+llJJB+P_!teC)4`XQ> zxLYQ<*T?@m`w^lwXgC{SW!4hUY(T@=7!20Cb2sjAwhk(OMEggulTdmy_aoW+FJnBPm*3GAF3GmGb0*aUX{3upN!ux!ojgK`S<2lGdtzhIuFBk;paXU6y^)42JwN7Hhr zuu^txBHMR(fzf0uSLjqW---(5Y$`kE9>vxv@}&$hXn+L{)!lU9S+pvRmoWW`&#hZ%D?fqx-8 z|3%urm_3JR5r48a=0%iS;25J}R)bjG^9lS**rX0LHjYJY-{xD!B0AbdsvPyNWBH+c)sFf%u&Pj`(LbyuwExj*{}whFnqBFF ze;Zp2-8S0Gjv1Ny$FY1>FZhqJR~Rf_?SlUl%hH(^IFS{9aoc}^HTt4Q{)=pom7AtZ zY^0T2$1kz55Uu0?v3U^9{bjc4%a|AEGCM}{%p#hZRrd;eX$RedUSV;&(Bet6{8w1o zFM8>}%8FSHGWX-`8mnsMHmYl^DMSmr&U#t7BCfM}U-Za-gI%`rXfQhLCR0Ds0_kDA zIJa18D;MTAtMNr2{I}U_t3m9C2N%Nbutr_!euJ14D*P^+0L7ea=)cEucXMM+-mT2?m_pi zX`|;*hbd9)DSHp~nWByKPj-R6lDDGRGnNSQDx2N@GnUHHuKCYdgw-C_WnaAT=PU|J zcqWO_At=P?1xw$b9&`_j|0asPWSO8(uYV7F$#Pi*e8E{!>=i2n&6uT)Nf(lO3Mzf&_`=ZQy z-^I|3ecEU>WTwz#oNoka4msZm(HshX5TZF0{3JwkDES45rcm-5PPRhDpIf;pRJ^Lm zK+{A8DsIwRQGuT3=CLfP!Z`dcL>0#2udD*TwdOu?`6pH zX!De#VLqM~D!C_$#p79_YJ0R%PN?_QC>G!21;IgAHH*(nLZi%J0$u@{YQ_@q8cw#t zguJPht1uy72~mX!xp^&ROQH%B@!Aj-n3#VHQGtoM*VNLyI5eAK65a-)%`ge?0?}re zl=p^cGfc{VhG;WP#sd&dVKP1jqA5(yqam8YcwL7Oh zjH(FXjUcKbC2s;z6)AaptAMZhj3}0hcY`|5&_+K&&7KDQsrewN!_z3E;hv*SlZMZ? za$(Z&gAj#D!*4?rCN0;$xCT?0ble9~m~=d)mFsAFo)Mysrsv^M%=2)62A=m9yZ;OL zu07X=#oV9`labf8a$z#^pCJm9kxzvvOeVeoqA;2HKM;k<%=cLZeEX(Hu`K);bb7ir zI%{OAa&61XuV9ecmX+UyPVNr(XX8(y%e%GFJE-;SC>F})AZGpqd|l0xS13>DWQz#n z5mv5082Vvwo`=XW5gBAmapaxKlyKSI>f>^$yZxA^O(!U&!O zdSNPz;Ax<}cf$QScoyjF9c`4u$_x0Yik!Rv2C0gi{3|D0MK0dR%2knzFM_CwT>L+X zipb4V{Yqin{vZ!e3sDhyc&L@zALQk^oID@x5c2ZE82o7V2l;p@i1r8hcqJzrCO@xZ z<-+9WJs=8`pO1kkOaZq6ycMzJ!y2~=aIHfjUyx)H_7^3KrF8``KhH1BB?E5`>y z%b#k`FaQqQ8pX=<(a`v<+9(=oXcqW2p9!@w3;dcda%qu{d4@R*nJQB)vP#e{QsB2Yu zQ;51&mA7@WL96jzRxW5YkIw-qX*GTbqNLUNONiFsNd5+*ppje-qu4HJ4W0m^pfz|1 zl--1>$umGj%$8P@oA=N5ey2^hYjH0Rc+IrC7B33jxe)2E&C5VfF2sb^=2al7@Ecwm zq6)v^ji5p%XdT`XD*Z+qb$}|E`+dv1Lv>A7MQ+^SH zR7F#M%gR;Jj6Z^?ie~&ZL}8k9Hp0cGFwJ>9h$?KslR;Eq3!cu&25rf67@7KA(w4lT z9ds`eTk=5=CH}{^ZgKoX~U006s8S7N1~&2R7G2U z6@yeoTYe9smF5Tj45F3h2map4R?&_p7)jN;BHHoF5VgA<9|%zq?fF`Wis-=CTX}A~ z@4&ZPx+*&I{SZ~rk)MDlXeWLSqM)7lH7JeQi+1MspzLO>Gk@-6gLdI^RBX^LynvHu zUz2y?O)yAFf8;|UO4^kVgQ(qI`FJZAv>TrSQP6IDE;Q(EZGU&Z1RDLen9*A3^wcQU zgKvVot5db%Zctr}VmZ$Z?V-uw|no$1YAL)4i* zoQTS%ul?d zmFtW-kquF2`tt!01s%YDg%Zs6wBblcJ5N!3s+9{9#Wz6|CW@bhD9k|q5~46a^EVKM z`I*NV>*}S~7amUxQ5cV>hD;cb{lYVY)V5!E1VnQ9hn&J|J~yo!1EKe|98F}qLpSi z-w)ABGn}7rvePtzKelqyG=eW0=hh3FrV+f}cqf{sk^Cb>(=^JQBX(mnO{2J%*wU>u zqj@Tb=4mv~4ABvcF+4j&FIdNzt3}-W#xrk`$MWJ(%2(Q`JVYzoI9?5+=^bY-WU=?N zMU3a)dzP+>@q8LYRgCBVLR3YN$DiPGQxy|D z9HNzN2G0jgFi&hVc`<0Ad19N%%Nd#a-419LuZlsceip9-{cRRFn>U8`n+4A1t(>%&dlSRNc8@XS~HLDv4gHP^Z5~o=5Rhg15x!0 z_R%ZW4Nf+^!7^I|&`EZDm{>eu{ z6!cFXZRLV4;WHr$x`Z!+;+rR^rFw+!S;5QSOK zL!E4x4ZNV03$uaOg(%Dh-VLHKfAdigh1tl*LKJ2rpJGK}yeRe$p94~B{^3g?3bTo? zfhf!-z6qlDf1CL(h~EEg=7%AA|F?yog6RF<7JkXe7O|B-u(CyX;ahpcl-T**%3DBG z#Wp?>qAIrY$q-esoiDI*2NZVjZD@o?zErI^tFcs_^@qh994AUceCnU{m6o(%V2;Z>ozC$&)>=-waU{;Rw(^!yKP z)QUv!|IVL@V%K;_4Bj@EVO`@roow~j`7|q6{dJynwz;F3L#qBd?+j7(H~2n?s=vt( zLbQ_J6C ze!^!$RK-)i5TYuc@|8}uh-ZAOl`G;Ie+y9&&v=1(u|+)R?VcX`_I zZ;C)?6byrPwB=_h_4qLzN*-4?{Ql!<2$truLpgs7uj$c1hRv|b32 z0HTh1LWF<=%=}7`;qy(+-bo5`se}0w@GUoIL6pb?Z8B#;lqd?(3Z+FEh}I`9sz6kI z98nvh>f?w;5Uo#fJ<$@R>f?$IPPTfVm|*3q_X*!3S1(oX6Kx>cD&mQ45LF*v?1ZTL z_~NjYTb~k$QxH|3KzNrxsv@Dd2~iaZ#UqH4CK9h83Yti;#kMmxXkwAX$^}g^s8EMbnf2#Qv|)4sAFGgXf~nNk#D|bTwKVt$|)Wk7DV? zKhUS==A@$71yS`G#36{P&mc}Y+3GWj=T@%zjH2ZdyZ>`Ll8j=LA@zc)&m__;b)xDs zi}VmxZ?2iQayybNB0ogyOcqfBqA*!Sd5FSf71f<=m~5gkiQfOw`>|}Iza4a8vWaMj z!i0*o5QPa7>mdpgCbnC-mtKCcAEFnResKa?d?nl;F3v%JU(rU_tUPy(OLpu@g!mq!FgZjUh{EI$-K|__a*CfI>P${C7^2SP62qO``@dWwh{6BN z^K))76}rDm8_k2#nVkwlzJPG9y>!AMT%y(X~85(L%;pP>4pq~4}{rSWZ$lIrl z&U{w0r{Vtm;y9D&}Ox6MVw87CX2sJLn6rm3iiyE1l~ii$9Z!W0wb zAqrDmRD>u@aZ$&L!kG7eB}8M8=Bb2e1<^cxB|1X127e`bI@vHK#b7HJrlgn)QD;hu zZ4iYiB`!h~rnI;WnJ`{hX>r%mwWf@C3Q?Fc;+>OSU|A7=RqRxh6`3GfU|EqDq6L-{ zWguE$c~Kss>dT8rE4MuFYf%@Z1%54>LR5VP(FUUGD~K*mHcUkkW#y``D5gUcrlQyg zQJ6~N3`Aini*pc#sqBgCmM%>daUY^ERm2O3!c-L>APQ4e#92+faGP&6kP{XKIP%RxV5} zaTKC3=96*|g{dv#d28H^Qkri>LWshABT`ufeCf@bjyfU}l*_#7s3WpNw8eZY@Z-?)5yO6qxo$n4q-6s3v*IY zoP=_|FeeqoMTq9Ug}4FH+_w-9oovvS;)9h7+EV0N=cbo}wiNXt3i`e9NVNZ>q^-nY z3{uioVx(2TM+XvHiwO`NNNg>pL-dlZjhGKn5pBeBCmW`%*lgv(v=x^i3e#4+vogm& zDa{We&0n!AVmpx@qA=}5gp~`^UgU=;OnXrRqA(pqd5FSv5Y-_%N6=Ax3(+}(j-rW^ zXU~3i60I>vE$t*aJJ~8aivd=yiq7IMh^pu;9zaw?7ZJ8Twum1^c8H4jQ53c^m+L(+ z=M+UL$lLzFe0)Px0%?A`iJB0F=_VRD*)ZKjTPqi)y9huOrn{I6QJ5ZL8${FFQ|yE& zOiyvl%B+ZtiX-a>7NU7>o55QrAoM}$GNz`i0oL<{UI z3Rnevv>EmjC7}0HJ#F|knDUT0sVJ&Lg$`+>y3iSO%}0OH1bS(%`RFg&Km$&jlZv7< zG~%>5rzmF=t;;MBsPPkE}N5zVmDOfvN@?JjzCn!ui`XBRs1Uc zbF$MkL_D-|MGO%+HpWiV5YZB%B8G}+h>8e!VhTuA1jIZmSH*8)DMVHLCe}f87G#*% z4AEJTVPX$7;H5dKD2_nCzcl9*#TlrHc@;cd{0DV0uY!jQ?>0zhBS(nG5S@%1A>KII z3P+0k|G1iHMI0&SK{QPx#dC-%93?7ja<`-kM~li36*yYdwQ?`l$A~5#XiqANHW0OY ztmq6;yT^*&Q0rOY{&8X;)OD6N3OL!I8Hj?87kqQ<`V%sNhgSW z7^I{VL@6sb6@Q3|5KYA&q9#N^CyM$I1)V6GLtCas`lH1U(1EEjq0yqNlMOma{Jh!j z|6I~ZVyPW;yWdITG(;_(EZCOVmQE28qM%bmA}beksz?b@(5WI5L_w#CaEO9V6Zwp2 z|7X)o7bWeW3o~6bg{W=Q#ZM50nIR@Z)U}yn3PfRMig{Kp%q+1KqA;_>I%uGI(wi+d zlj!*8a5Fet?7<)emG#0L7UZ>0c;DLm@L`LKli?h>is>5;Gw>7Q9F-f{x9I z^e+}Gp-VGjLKlm_p|}qt{eOz>PM$CM!bBVGmx_51RliKI?QV>!UoIp>)h`!`tZ@D33Xu||d0HVdK@-f=$p?|ID2ql<( zG;FQt31u}8x=sv$@|g!+Cx$rL&ip0DTDi{rCD@MG&io}hL)4k|;uIABjd}mKL7WAt zH5KukEjaKO8Spz z3z;xp_$DzJq2@J@#kOs`$PH23c8CTL1>GqcLlktUXl>6K3c5@5f+);x z5d~40-JTc<(q3(k7zNQ@ZI74;9W+lEd&Lasl6la*Vxg0*VxRcS$`!FsJb|d)`$WWU zR}vMmU$lUzhy%iF1yU6UL{}?!g6N>=3(@(ZgW?y6j_Vx~!yr1YcSwwbmYJZ3#bjuc z33^z}f$03u5%DKP=ZB7nH6BPOh>nVXAUZ*GRP2JvoAZCi#3ATg)3#&c6m;8!IW8_j zFHM-^;--`B%n6ZnkE@<`+b6^Xh&ppZu)SVvYyK4-_Bv5(PKwSDb>^h_$;w?$eM$_1 z=yK{)VmMUYT-$wGjE5SUOS?~tsZc3%QsRu53so~GCC-SYd+q)&;0rTP!7*Yj1`C^~ z;25zPN@XsuIxBWVna$-@XT=eSR;Y90G(;=ZIq{#9t^T}tY~|LA^WvL*u0X2(yjW^v z>UZyeE(qWL*y=Be1Q1n!QKYnTYxgCQ5u&yGk_dOQ3;a(M!TqS+|A}f4E$~0l7@`&N zvgkni{QmEX=!`*H;1$uw$}RA!_!*)FUKPJVw8dN#V<6gMu8B#|Su=KB%z_@8vFl&$I28KNR?iv?D$ zh&y6AL`B>Y>zzCwRdH8r#UNF2SL}nNncsWj7?jc+)4eCoI@zH2#ceAW^u9=SFgECY zQ4XS@4@5_Zf<6>oAdiwh6n!mS(nrFBDCr|H45FZq#aM`fJ{FUmY?vovk(CScMC^xX z?w^R85QTXv9>E-% zpi*XmD5#WqtOC9^Ca97{pq?hEl4YQ5W_{A0tPJKgE0mVCA!=zH*$|?Z#*r13-&Dcf7QB2vl?5EYS9K7y!-R5JW{>^hTL<~VNm zf9~>|)Uv1@bemclSq7ptIE}0VQJA!{Hbi04%0^B$Ogh=l%7sZMhd~r3otzI*nDlao zk=_4MOEbvb7^IeFkVmatn2hoaL}4<@%MgXhByU3$CX;;PWW!{Z?1ZbA_J)~dR*1r6 zmSsq^|D!ZnWD^Whn5?onL}9YZ_ErI3Zu0^oo9qUaG%ql+$)6zF?nC7uh=PX7;m}TV z@G4A>hYp*AS7CChmD&GM6@EDvgH(lIE_Je1gv)=dTuZ~{ONgonmwEnm6;ct|WgCc! zh>-0dDk4JmvNA_eP0$=N%E|MkHA!>Gp%|p3IprvblID~Xp%u?+`*X<|pKtlBn9)LL zkQvJ@S3r}@SZ=uiI`JUVpGR(ku0Mzg%_H|arSa(dEAq-1OIKlDnfs)xi7L!1qadm< zpF9Xrh56+Xh$_r4&szn21I!E70`eO4o9So)c^{%~7nIMT1fCfzC_jMHw?z62NqveI zAMh>S5))cTCU&w@QCMcQazP8rNQieR2cn=wOs)rM zr70%2L6o$(+y~KmQCuE(vSCWd%T_K-3CT~#cCCcW1W}l;WJ!p^l$2#46UGZGDI+c2 zrdCSUg(yrZ*%YFK2Bl>ih>jVQmR%qUT1NJUC}*WjWu;UfEYgZnAPctRiT6|T>VqEpK_-ZmKM2oL3Q$V!%>N1O!TVSM&fM|h{vH(OAQ$v=3Xku!} zubpg|nzEK>>6%efc7-TRO*s;xFty}jh{DvCOCbtVTmEh3!h9pQLlov4c>tm?b>s<% z!qk!HW8D7FrukOhwSz9qw=%)m*!B5a839q4y0Q{PVd}}M5QV8H>sz@n^<^`N!qk^P zKoq8d{PC>a{{`$d@C{^NH)z8&lmROjrlDL2QD+*;T@Zz7B(Fderm?&ZQJBW^iIofU zoqPjPnD3-GXZL?@570!$H>9T>YE2WF!pVkdDzjO+Fim9zh{80LEg=fiOb&!7Omq1Q zL}8lC;Z`n83pt)d$3H1e3po{o)S8xZE<|Bk%B2t;QvP19h3Js-_j0q74cbZ`vT{LN z$+r*%Z6(9by9uSBtz|7MbN-K#wvlx(NJ-nsCRQ$KTiF_-plxMmh=TqgdqEWR2RRU; zpzY*Ph=R70qoI-Jv~+tp(aG~oHs__=%b6IY_of}>LWtg)c91KbY=s@=AuCs5N16MA ztBES?D5D^%u#-FpQGuQ15r_)xEYDlv_-7Y+4WtUY$omjg_@jIdQH4Ls4^B2rSDEml zTRgqK=_>O;6sD`J4pEqHvK>TWy33BxC(oqmE_+$JcK47`5QXU>he8ylryK=Qn4WSX zM4xTyC1*hN*`{7{p_2{TTduKkUF$8cKndynUvHVF@G_l?ystUWX{?aQOhDFeBs(h{BAJADwKNkuuR0X8yP^BV}F>q%o5>3F%` z$|W5yZ$K1uyi9V{RY5_6vIImyC&*F|1)U(PS-GHp$T|=O{X>3t75hI*I#IU5ASInB zJ2}}f(Xy|V3ll9TK@=uhu7fDdBzXd&Fq7peh{8;k|5*imJ7(~_2lDV(PPQ`3F45I4i$Po}# zKSxfo3iznNxpJ13dH+Wh&XtQXNEObLt01ayp4D35|v{YH7g%2of5ybe+I|HuarRliBT zfT;RS@*~vWe1v7QjB|$;AMgdtM_4w?B+#AB;r=Z$HS~0|IsUmtW^uGtY?Y;~Toqg8 zNQllRO&+76inq9S(4G!PZB)00_1s$!?i;bg7iy7s_YOXCIK~p>pPQ_5pd_$rf=?KC^N~9F%$Q#jY0zWm^xVDh|nM z5LIzl&V;Cn!*a2etKx`U1yL18AEVS6jIvPRWh; zvHzngPRX4Zq$*C!gAi45TAqZCnXxnS0(8kt#Tj`6qHQ}yK7itJO$CZc1vD#@_e+i-I6yQZPMHFg_TQsTZTS%?WU=?Eo(wF6?bG`h=Sgg{UHi^ zR}QgqFTL)`kr2J~x+njDJo+k;`*J!+UnO#1E`aFkLLSKF5Pe<91GyfeH>wZiR*2rH zK9u{MY!Q#-bt_lIBU$)KY!Q!SCn&@-RXmn+K&s-2oDWeIPvmMVSH)Ag5uz%d%AHPj zfzRX#+>hRjK9e^g>e@5;5~8j>mvNrDF!uVF7cw453w$9{Sh)qhl<6T_;7b_>QP*C{ z+z@r`l`I0$7qGmRr6KwPme;Z}L>+x2YeA-?o?%1qi8(O-ROaU$5Ov%8D7S)C{YQDoD&T9eE!_V}o`gDV z(?%Deq&Fk|Ox=Jo-;4=m>YnLUhGteC3S> zFPt#v_|!z`#tCzdPtAnJnx~|MY9Tb!Z0QNrN+{>~aDO7T0V;A{8*PV{oBJhJ`=PDo zeu>oyC)=ka>al0(W-W<$|VE6Cj$=lxhn^ zK~t&Q5Cu)G?n4wbwR&k4@J%;YTBlJTUt$0Er@7QRjf(r4Ds&f+rB$h{+yc|8oDeNA zt@;Y01*TKgAzEO1RSTj8rdN%u+~u|zR7;5FK7;CDWZ(bMWp^1>cMQ^HcNtZGh`#4B zlNt=s_dI4&BcT2>BK?_F5E^Q(a?GrzK_?%XFC10#pj(g3X9Lx;&-dGGPVuRAB-;Ot z+-yD^sJ39Rj(I_qP3?i2n-^5s)KRF$zmfh>b>{QfzcHbq>M|tESeUvEB{ySX>Irmw zbEMy|-ar>O$Ap^C@4lgKoA-a&%pJp3e9M5Zn7L!PO5tSZKD)|d<)$LL+6B>6WLIt8 z(!;p@W`yGJoMZ+ubOIlrZfGBBo6@(~gq}mKo&>CtRL_uq)16D3*O?3jIuGLiM zAqrDVT{GW*ZmXa)wbXql8>Y5;XXV1wRv9?m(tSFhwkiQpm~T`Ah{DuSjUftCN42(c zVZK$JAPV!X>cu^~c)P&5>Q~&6o-pdFXo#w>s}@4Ezu;<+LG{hC z{>I8D+${&c3ip4fl0u_jX`{5zH|7Ov6O|QeWwx{?DyNZIzWD%xdD+lZ6~y3l^Rl6- zDhbWJ7iE5tOa*B5J@ZLHRRd~as&B69LEX%^y*5|Pp!p_f3)L1{XM(m+KSK0kwx#Mr zqWvGenr*2(46Za`zE{6NyG@wy)mSGxO|8^rE4N;>QX3>y@79Y}s*Tw$KJSiNtHj!g zrm2le2GKONQJJjF{%?Uf7~EEcTbggWH^+k8s(cVVd;Oq_K{SUysB#d^VLMe7qA6^r z>OeG2?Nwulrm4MZ1<^EhP#v8-AI(z-)f0o%wvK85L~ZM+hCsc{9ClJ8p&@1tJE=dQ zbEa#Z)pY2d=~`#C0NQP)u!~v_oiJ!>ceM?&@BezJj=tD=>Z!UwG*3NM ze=D~+^-_Z&nu=a(1VmHOTLmGSir#7(M5ki=sCf{bitVG8LHvXl>F=x7fl1A){=RC9 zldYnkI&9@uwtmVNFSd$)sw_m$2|uYm5Up(e)lU!=(O>;)<*utAphiIEx_U2kfSLf( zh4oQt8blY?N2&SH5VKwkRLh`oX1y4w{(|U(I6tc`5PcBmXSEmFZSH6GG0+KfKTpL# zbfm@mMO_BzP|Gjs4n$Y$4^mGcx>|pbdJEC@FN2kcPrV5E==ztzDgm_qj5)`rQb4=U zm`@6-3{JMALsU~M*U=%KN|+$Fr9;$Mh*~;SrAQdNUIbJsh*}y@p;iI&OOebkk5aj; zhWJ+PI~w+zD(uGCh<$~_hpAF-%q;#ZqncI|*{7T3!+%$~+J0e`@ZqW#wC`}O@R4eU z)gC_ae*N%KYIbz9N+Ny6W%yy;x15brDfUh?p@JT z#gow;+}1Ev#e-;Tn5vRPbZ}ytN(a%wiD@bnqJtCDRW67QPE1#YAv!oQLzVJCI^Huw zRf6cbV5X`G(R0B})c{I$A&SjX%^|RU52a_4Cv=h^n8b_Cr+te03b6>gTI-5LLfGU4^Ln1?nF3 z-!t?5nd(_`?2;coGhd*o-eYjXR`XdmrBb-&@7-!X>!uPp*$Nk{3|6kf#i|=b6)slW zAX=&aR7pZyy|l_KQOO}HaEZ!nWOvE5<5{Y*+d=oTd8x_|9XFRMFH^;#%jQz$WvV=M z=dL+PrK&+s?wXTS>RTrpbcOof$^~7a#y}Kwh5DQH`I6L?>KXHTCa!GfpLl6bssa`@9beGDKCN}796$(+%-73G83%W-YhbZVCRUY~{ z%UqJWS5*UPU%pp;3(@@UQ{O=}zxz~cCmVFX>S5)A?pL!Q3c6n%fGFqz^&Fy=`=ELS znV??SLB-SBHQ4@EphGGiL`e^+aa9#xf~Zf0Hcj;Wg9K=V58m}&quH+MX)nnPX89gnMaPPY0Js-Kms{)CEw zsQMGCa5^_JRQ7=J-S-N>Tr4~U{{VBByqK}}QR)0hE5tP$v2SmRG z;*2@~(Qkn`qyB}uT{b7F)OjfCvN=hmu0ymUo>ks`kT$2Y>IGEAJm@*~0jg^r^qh*5 z-cFOP{=5paa@C(#Vkyt)rj^%qpt46!TeMHLBA^%qqm&(c+YNwtKi`b(+Oj<)+v+=rI&(+0f~YfhR3|4J=C0~*<-*)mQy~g- zS8Xsd`#*O$@t!(`L0U`is~CvF+*envT$l&yE<|A-sAmv`d8pn&6y~8)ne95`qiK4i z5<)ahk5oz$y(Oi2daN>Hkml*J3WsQ(o~XPKP16%q45HTwPgPlnUMD{_m!k?R8C8`z&EN4MDz4U)q-e&Z&h=M7Whtm577eO zsZLgIn%=9P5H0Y%ih^h=KBys({go6S)F_aq;-mTlqN(_(Wuni zL@QJxodu%#O{8-`w5Lq03qZ7|Osv0x=zV4q{WV1IGrc4_5~MepNp)R_-e@M(O`UA@ z$@CB_SA8=58lvix>3V+Ge5yXVUI|h4DfAkMs!yS}S-G=BA)ej`(rKa)eH^-U(){8* zeHOZPQX5@`BFxuPrqXwza^`C(Q|V`)$4qBZ>vvFb)0xy-h1-tWBGTv-R<4LN+N%Xp z6>0QPh^k1dH$hZII=vO5D$?mgR_=2C^!g-3?M|;RI@twg(D!jaT7fgrFOf6vDcupY z3_7U?(gHK;ED$X)lMaPwfthrEE7!Knx;R8#%dE>g*#&0N-{5|_kYxyoH{Ir>jkwYmmURCXL9SY5OpTEo?_*m zO!DYC5N(Ee^b&}|H1b?|3^s+>t-0Fq=oelPBv)~-P_6q zEu!Z_)U_h|FhpG|s$W4Aw3vPiQP5&q<#H24PhQ1!LMP9jge0~LQ$m|x zd`O33Y?!Zf5i1wwE8PI1Fkk7O5QQnJ$3hgQlnz1^rj(v;g^y&E*7HGXTWP%p^lgYbT1!81vITmzb%uN{H*JQs^$>_wsM`7@L=}FcL-WU0SVx;*foXd| z71q&(tO7pY`*8oax+IkHy*8={)ip16>gpO$Tk~S4uBYpRo6T_MJKYnalA37mPmpGA;UhZUTYOOb0xhh)gdk|I8TBj`RYN9II=&}$M(N=#AQ4wu*4J)_b{6W`) zXutV`ZdTat|L8fep}(DOi$S_5rJeo}8niQtwby;1kvq*7QEJc02JN6nSh=7b^xqH# z?Vztg6ttsGRK&%mpq+HGB6$BtNjvHEcF;Y~b=C#HC=lLRcf%cNCGD;kL9~eO`V~Zr z=%I@hbrVC^%k+XoQ*bZ+jgdY6Nwd~VH^v~%OmF=?L=)3ncZBGZ!F_ZO zh&~zIM-PDL8L_Ya6{2UvzIvpS?NdKJ&&u_wpH{_8P}=`d75#KQq7hZ`lb#Dvqx$Ow z5cR3QUTNi4y#aayL`4kH+abEbEK2W(=nAtaeZt9x8K^H=nd6_-(t-Mur3*7qXDA*U z=4V|3qA;E=4N(|RSFsBC;y#IDzv$Xf@+ao>j&1}EJ7rGq=$6p9Q|9!J?%?F!{|(lI zEnS$wdKpBW8LSUL)R|xPEr`Ml(f1$Jkw3X{i1hvcHlk zpsRy4+W}n{qF+4pn{EQpFCO|$w}I%YkYTzrL|26j)4iQ+gMZgUtXxUI>#Y!#^t*lu z*;A6kb)K(WyQ!uTIzL1;jnJj7+-#53l_08Oq^9^pH(SsnWaIF3vq6)|A@lLkFaeAJWt8kot4N-;Tbk&lvYtVQd z4N-wXJq0oadSOAm(9%^nL9c+Q!U=i2y_w?S0lA9_FZ(7ZC3sE$wnBF-0$cXqu+zHCFE3 z!c_eaMDG@+>Rk}MTbQN~LG*6Hy#GE0(p!S*`XWT{2&U_s5WORqp&vr@j$np<1<`xj znfen%?`dahUun1I)7N>;(n%ruI110oM_06RotdLILDZQ! zI-*SM{LalTJ41BK^S11zlubiN;RhB3&DzDO{|7f+*;pI;yPQ|G9G;f9l`uV8AzPN~C{@ z9tSO&5)-;aPl4#kWT~D5Q58$|5{SNPbD3TP(Kl@_)0-eFaJk+EQGv_#;j-@ipRHnr zzF-Gk6)SY=aijYL{iL{s?K8o-tg3<*QDWM|>q7(rcdQmAsC5V7@ zDIy5+LhnsMX%PZ~fFMN_LQxPS{O-B;NdEolhkWwQWM|L0GrKdpGm|wdC~p7QVzpVN ziEOdjY;y7~)|g!qTdXnrC5BmRvLuFCYfei)U$Do@%th(;1$(T_T=Q~4*PG~P7){&1 z^`?%a-~O#Py(K2yV5Uh7y3x##7<8jq?Bs)PGAkqo-DK8D47%BDlNfZf+3OYL8FVNi zev8S}#Bqm=)d??`bgTK@$q(sPQ?6F-kZv`tBnI7PhD!{(-HehLbi0}CG&)busV(Do zm}yclVCudyJIq}1x$7@;6WV>h*o-(}WIlQ-=vv&-!8azS^SOeY_7 zw~4Hs8+5n%x5S`dnHQXFn82p_+O!cF=4;c%%guC;>8BfVH)W4`N8*#v9y3kiO!u0_ z{&sol*@xjbW`)$$E{bo=I_VetEc>n5CjBwfzW@2H*(>r7jqWp<693TXK665vW>2Kr zZ+?oRaKf3POj>8IjBBkjZxP`|FwJ zmc;$_OcPOucj4c%_|D{&xI%qr9+0?;de{_|xQlw&l=gB#kC<{!elZ0{Oly%zkC@RC zlV+La5?83BW~IcSN6iK&zvdq^J0!08$IQ19*Zl9zVTnP%Hzy_TUmOq2d67F9$4$1E zOM1fGb@EA1n8)kpu23gTONl{$FvBDUJ!wWt40_T`aPmPE#+;GTWVe!%HTve(s{UWV%Xh_>0Mq*zi}gR${?l&2}eW@Uq!kU+;gi z;brrkCf3Vo5P!v-kecRXmA+!mNo<&HE=z2fZEi}t?ZpgN&0Xn`y_n&u$@8o)$oAJv zjKucW%tKag`}c#r;dN6=6EE2tUN>dET>Bg5X(!+QhM6vL`Q9+MB)0#}G;iQXhV6eh zEhV=9-L!Y|?QfcH6p#P0{Y}$H6Pfgu87ML7Ei=N)h55rwcJg8VFe@d7`NQm&80NP5 zRbrSwO}4}^f12A)_We)p(d3xOhJK(JCdcHHj@gy%FY};u)~;-SnPSp(yD09MGSXtZ zDDIfYC6>5rk|dV6YpO|H*Fvb{6}Zo6522B#YZ!rcPQGCTzLeN70#VQT0cOKUG?Uoy zKD;2Y;eBZ5#r~;SvwR0PjfW?LipeeTfaj_*i1Y zFy=`-z?ui2Nj#{R2dlhX!Mwq%-8z!)v?dgW*K`eLjVIIT*iD4eZWr<-5Azx!ZY7A2t(GtTH zMx2um6N{1(!^GlIiD7~ws33A^ir^_P7bXt%oqU)$be9+=4r3&Sc?k0)hAE0qC59=A zFPui_;ZyfNu}0!k_df${75OkMhOZ?iErvr9ll}|eOAPuioRxU~OL6=n@%)$K_|40e zD1oRZew?^tQUcW_mMDRspU4&^u~cG2k5~Xom zVu><1E3rfw{2F+=r18jc^1~gEvQ2Xz74c{;F=zsYNDP{YVG@HT;$0^n^bx!-G3XKPG(?OEr;6%VL$pq-C+u%LRQ5-#Gc8kKs>=L;4uvoB7xb`foIn81!*8 zl^FDKv~H&DA6JZW=;$Vn&cmeT&{Jw>KZ5ZI^p(2Xk6?TPLnO8+kI@oKl*dGgB`P3Y zVu=cv<>g9L#4;;){EsU}Mf~h0`d2^|QL1@vi%MuEu|;LPEU`spbaL{;orIneOC+J6 z#Gp@Nh{T{zVhqLYACo3yq9!tFGNwumerXV&f>~0_U$RQ4V3C(=Q3b1={GzCW>k=15 z6_jm}TjD9Smsp}IIy%|ce{4||uQ~b_Potm27EdFP*y2AJBeBJQFiB#GYM3gqL^aHo z_zF40=i|@eKMq`DeXa2qXrr zg|QNY*2W|$VA9(7NKECyGR&6x@?aSjd%5ARgEdY*XdRrF7_<%ww#*G$7gZ$&t%qt7 zgVsYmCp+4KUGwXsvB=@Bj~68l_p@j(vBk6KF0n-e^pRMi0S0-wpbhbklMmVut0e|) zh#w{QC%K|cEZG=)1!!$x!iD4R}qQo$bQPssI zm28+Gp$SHbe8OmoITFJ(!vcw6nqj$<{S0k;NTxYfOFSgg99z8H9k#%J-Hs3K7C0-h zeGA->cz?kQu$Qp80}s5zmIzC{!^(Q<2alWyA^zJk}K`|TB=uVA2;Yu^TA zo&0dO!3Bx!+o1MKxhrW~1hYi8Z-==O+qc6~C*Qt3R!MB%9vh{~#}ndHu~VvX+*s|C zQtXG&cfb*;uKhsb4mc%o)H>oqAad9`;;NTx(Fw&~_DQ)6JE5P%7M-wE;xg=vvl2^m z!Fh=#y5NSBFVPh_5=(T2X|3%a({w|D*1SW1giLc}?``6LL%5DFcv=5qVB9rz(8z;YUdIOy$-r*bQB^5ej{}Lqn zOU2IEzXXY)(x`)t;`?H(ly)%LDoq-6sZo4Cd_-~kH~vzxmAq|^FHcUfIs$Udr zI2mmvHhdqc5*xmc9!`F^Kfs$38-9SdC5HJBqa=p;5EH!oiZ}%`9Q|-l!A6N;rr>*t zVbXC+VwkD;Q(~B@FdcG-`y&*P80I6yN`vkBwbM{s8fVY1ofaTbSpl zc+T>4)R1`k_;l2lc*^n&G?949@(jErxr^+OD!FUy@T$aj(mp}(hRCuKN%y<)o|kL?6}CJ1_Ftj)tG*%Ie}!2R+kcH5iS75`uEh3x zkiUmpFWfx$BJQ5-{qMzK$8!;!>0#vW$zMGe!I>VxWG8=8S{4@G)4YT%41LZ2CU18I z>wD$iE*qzMyF0YIH+vGUqH-ThrJF0wQf$(6d)s>{g=lvgpC}y@ z{>jOYOiVc2>2yTTn-QUyaLypk^K?YD-HBFroJQEej|mkF#|-AQa}nv8^UFLCglmiA zPxj4QDBRb{&$MuOsFR;*;qY|#WbJ2KI6Tuob-N`R8(yesy!+Vjq>;II9~++R##VQ&N*sQY%%goZP-jYK5ev&Q&T^=#*3?Ik{rRj;S4zQ!^%9j_Mv!cxC4EvqKTj zHIB54qObjzKiVEMNH35bRm2Rl-wsQEG&`zvOw7{1W|bOUrbha%l*vKKJV(=8XGe9d zsGr9C{Zl)yQa6h}J7Q^*hZA3@HKF}}JA=Rf`5Z>OJ)IGK zE$U!oqe`Ljp~|5Y`+vt!vi;iG{!0xdxv!N%745WSI}}yy&nnoTCfVs#LY3_Io$U8j l?6hS2I~DD1Q$ro>_o?Ym{1$aIGN)Qb!QZ2gm&~&!&veB#I}Sva%7s z72rIlewjqG27&A%Z=fm9$;$?YaW8$kWSY@GHO&76(`?sR&WetZj7Rflszgj((KLDC z15EV(NwIi-F{mzQYEU~LQ#}TlKQMoq9s}wBRakar{!gf|Z1n%R16flQR`7J&jm zMN+gefBwI288I=?JIK#B24)4F6K`dpSL&?EeUh<6jHO^hs+xEaRRRlBcTC$;v7QOW zhcm{*a+?PXt4P604h>{VGmvizM5k${|+Qeo38p<^Is)< zm_MaRlC@r$gGPDGe`ecY{-aE=`Loq0(ki;8Svo6O(frHhcx)1cl{bqGv`Xtw<@@sY z2Kw{gqtZ4^TylZAtGmPSz^%0TQgwA${P|XFNU6Y+w7K}XK>BoliKOuYkJF{+O#;63 zW%$@YmGrr?t&GQd_9$cfpL%e(>41p1V*V6nx@)E+;!0pb`m$-?ez{Re%4(O9HXQ(+z%IG3p<|2^^7QO{?((FnZ|^9SiIa_Swz_+f$iDS z^A>?~**f#lfeP6R^O-Rb*~?45C$J%8vxt{8(A8gAR7o0G=g-P#2Tu62@uh*M=HIge zDMGXHw}HZ;)soarX4+KSJgjNcrkI~XtMe@H%%4&u?orwNF``LwGn|uF9^7Vf;C{}5 z{EtA#u<9u%r7$;4-lMGI#F zph{CXsZLWkq0&v{#4aC29-cN){Je=G>IZ(!6NtCU+%95UOzpgNczj!Q+Ejrh`C7!! zn9BS;XR4TZ`PT?OBJgX$3g+Ln3WWsH6)Ix?tFig_2jfH59}0c;fWl@xW_95ll3xv+ zDE1Y97D!ncFHj_k#ZCEs`X#Z z$#S`AO8!k?z>{7gMaIB`CpFDRTyF4;)P{3`=rEq zn9uC-Sagf#`~Y7V9o&MK;IE^bx8O(8l+W>bOJ#Xdxt&0|h##WMw&Ynw>fp^STk<+w zR1S__+lp7<<2FBT#j|sMH9C14K1QSsiJsGjXXR}-Z)?MU<9tkXuXentNa>G0+Ky-A z?KVGZ#~bpXUH;G8)a8Il5y~R+hekK*z_aj`(S1Ac0U{`8^pg%eN0IMx+M|FNRMk`# zw;j=;;Go%h7W>mqO*75uXy+9v|V|@ z_?L6hog2}Er;h&Al_!e+p(~G{@{Rd3_5y>xHjf<9FnUy19$Icn?*GTKZrVRKrT~;Z ztUdk9?Lyq0-9j3FS;!iGZ}Xb(c_*H}s96t#8`ft%n@X14v@f`N!z(v4R(>g=AzE3zLSiMziaNWM(yrICb37I3x>e zQQY0~{k2vhSy`$QZfx_>??Q60Z=mp5$yqQP0G*%3SqNM0fj9Pa4+&v2OS(I5*wZJ( z&w@%ht=KgvB$UmBLe6WJlbwN19vvPM#=^?FTh4!&oaJHzpp8bk*-5K?yyCI33G%R^ z<>;1oj5y27rj;{$TdMxT%rPN(*>*cPj19UsF(e;*YBeR@#(ypc7i7vDcNv?(PQHx} zDae*WUC%sXh1e0RJ3RW#ypY1|4m9CvJyDFkk1lkMSM^i{clXn0R)4rMwmsQl0gJR+(FV%?3m9uIvb@#im1Z&hHJW%@#uKZXXW$ zhV71ib&lss_Lu$R0p9oWiI8vEx#)c7c`omQ{o}}VtN-DwA-iQ2<;ykudPqZ-sUoG0 z@|8Dg#2P>$vmS;tX0)%MvEoKe*gk0EtO_Ab*#~H^Q8QMwlDlOWqvos|)ZeHDTjYU@ zXC)Oa*%l`orX{QLmAxZd7Ck9JOEwdV|Ae#FY@yi@Xy#78e-+Z2^`uqWsPB%tA#K^O zR>Rn_lmCUZW2`ET4P*aJ|1YFHs|6jo#aRb7x4P#Bf4lWCUI&(!p0t{q(yIC$`wF5} zwG(R$&9LfbHG1(522-3v{7zz ze4{=Udlc#)zzRdOzyYiRbo6vmF@QC8qCT0iNULG2%e_4QAK9;8RLDP&eX#PPSjpqD z!Gl;qvp=O?lssO-ZyNqZW&MNM!Y|Tn2#fuq6CoZ;Zk~y``&IG}Wlg@QntvEu2<nwI}sAa&eV4|9eIzl zQLJPGr{&KY`$w_54V|i=Np8kwLS@bTj%NFy(0l#-qgmcY?v}|O^z)Bl!y#IO#>jk_@kpaS(DGMN{t0XgM62us z_7*zzn6pW&Koh#3+bAcoidMA6cr@6-@&IdpNBbwSvQ6ox2iT-zll+re&t{+H#hb$V zG$%!|8uz?-Q`zJeZmj#E8U6rUZZ*=k;?NwUbG6LjN>Yyrq3mPGP3AQqd1CnZ0yb{4vYv%OWA!g4@~>j6yU;DCu*luJd}~pdKh6?$a|3>j}{UZ?Vx=^K#Qk`@#6i%@>sbrcUhY+`p>jp`oLhrK`Q0$q;{s*jLPj}1a?^wtKw#AB8*-8G#?Cbyo;=jS1sL&2{?G>3xUg=h{Xe+tnQO8&2ttx$2FSt?BoO`+l~ASzJt)esfvX>Ohq z+M7~^@%TrGDvZYy4W_Xu->;^^_&gP~(^MFrXM)zxZtVB*5NOBj6CpmH4=QsYk|p59 zpqdA?QF*BEjYyWzp&CCU?Scanq$Ti@itDj!o<9%m8&o@-v?2JiFwcv zR}xj2gtv#Nz@+>;hzd-~y`Gll$)VW{lkou%ZHCGCFo-t8gdR7GlT zRwFx2t>#CvG<+n~ZN4^|0JVG`lDq5e$#tD*Mz7v;P8QX7W5K^rDB?_}k| zWad*L3X_?ygD6ZEeiWiGS@{Ww!er%_tfG8}=0&n>{1$X>o;G@9WU7ktQQNZfR~V$W zW#=EEGy6mRIe5Hb%={DOyS85&C4<^8ie$k&E!4y8yn=Z)CtE}aFKgwB2;t))Dk6mM zC3$8Wr7HaV9R{h2Q2rl8RfO_{!`5il-|l4Bi^}|{mFrq%UL(qNhPqan?}DgnRe14H zab5GO@=_qRttzi(<@R3H_%{%BrW$VyWjzwfs`J)Ro+H|*Geljh!Fxi~wHo|KCmXaT zA8qA=*7W!$kdoHq*C0yzHBUG?E@?PV0#VR#p4Q3*t;MrK6tor(gL0ZMwRu6PnAy^5 z^HR_`)9r7#R|&jn+Wigx8oGBW++T;+gPvWA4X(qRLsVg1-X5X~>+)_;5wod%%lkm( z{?$fP#ap$I@e(r)(xnW1eWNJ*t`0KPF9M9)!WN*TVfxcqXX&wbWvlY$~ud&+lY|w&CTBO#Lot8~(i=JisVv z8$KPPq;2_5h}zwb?|~?2JATy41#QpIKoqn+zYI~B4*WJmVLI@~Bsxn+RdnR9F-TQ( zGaMr$AIhXMPBxBD(M+R^9g3sW zcjrAYNJ)R-vmi>^gU^L1Xb-;3$_4Go*FqGuC*KSWdsoNbi|>RczAIsL2s$?>l11>7 zkauH_HoO3;%aN=%zYZn6tc~tNHI9Y*`|#&bgJZG5efWEbI@6cSiEf&xGktkth&t1c z2SL=Cemt{Ny49XJebk@lwRElN&*wrkhyA&45qB$JKt3Wh|!+33o=5RP~2+zkGifcZ-!X3xALo`j}c;~5c>&$qblCJLJS<(ca8lq{Mz`Y!nZk{Ic+z`#v zL|z1S28Hk>+PU2Od1aBhQWL^tO{YD!#glJ`(!dpT#y;JyiPPT}tysu~JR<@~p zJw#PZ<^MpmvITgSX>nCdGS36&@xl*Nu`S>YjO^<_s(vAFfkCQ%A@2xnH49wCyF-V~0vGXqPPQ|P`DiQGnZ^7q zM4eg8JIrvCMx9y0k3rO#rTip`UjI>Rmh!*tpli*~{02mG_%nY1QT5CC3y7*;#y>z* z#B#2pT@R^<INGFZ`6DZrbS=*~(>0NTuH{uB z3c8N>fGFsC9syC%^*qwb1>L|$LKJiZp8$E3W+R^tQkac=zLO0T!`E23Ffsf%L}6n1 z1Bk->%6+q3Pzv)KPXtkz-*{>(7iJUB3@!FdnoT?uq%fO#eu%%Sd5 z7NXaGJNR{oUjO~U??LqX?+^am$riDb^VzOXX4mb7?&M`bs$wVa4N(=l_)3VX*v;2K zRK;%oyOleku!rw~X!pE_AAzWdz5FkTirC99L3E7q_VHUF9c1?LM@}~Be*VGAwR=C$ zJtuBO+|L_86!ZWe0#VR|d>BMQ5AumtF6bdX1EQdZJiY)7+8OFU%$Gxp5kE;6?lpl@<6KaG%p2Fg{S#f z5LNLP{~Dqy{^IqWY!zpCPb)V~XZS9Nia5jHKvcw8o`1fJO+}pJh34DipW6kWdvTuEfl6F%?2qM*p~~hBFR{E0RO3dt{{rs}eS0G|_yX?*c~?UH zfAb%qaaXj_@cB6Yy)aL$FY>V%Wae!H7kR+RR(Of8wsI9-;)xf;t%#R+3y3Pb%vV8F z;T68#$yeW8M!&+dFQofL`TCv@_g~?;j6CA7^RdBKcwr2lyb|ue%1c9+uEYjk<&_~i zje3oTLv$MT8gBs2ITPx?&RalB&S;~K(1Yor{u{hI^m4j3>PMp2e;3b3vYUJe2Jf1; zVcq1ToNV>C_{Vg7{$lTE!H)(!v@u3h^f16)|sQNqnDnu*k9sbbD?SlW|FRje^ zPulDK!~etJlgFX{yIe1(MMU}DKh{P`q2%xD`0w#FQ0Dg~jIu)S{s{Ho=Q*MHX6?Su z3qrJVKj0-HTDc$aN=}}w@FDMJ=_-84&p=e+Lmslk)k_sV;=LiN@GVgtRQy@Cw`IOIsJgWXFUkv_j_TA6;O6Zo^cR%AX5LNMcvXmsc*!H7gr2G5756}@;uRlb<*Inir$AK2Yd#y&d(1^e zz8Ffe$6Qq8t3KcFj=84DW1zqtb4`(Nhg$Co_5aKFL7n$`+VB`ibN`N?g=p^I@hcF` z{d;}~qPc(1pFjz2)$xDeZ=j%CC5+h5ZVjUK;y><#XubH4r+`dHJ@%2O2dSkWc@8Jr z(oejJm22rI&X&cs^b;QmQA?SKzub+{dcj3Ph&sweS}WI4A+kc$QBR04aFCf_DGGkR zso8f+Q3_gXu7W603EFP1f++DdL@SgQ^&ncGv}g`d_3=b|h^mh#x->B$^{J)IaZqe z|L0w4kf^oNiIS!k{UA!3M*Ij-&@^I%m1}8QF%F`ZrWMm5I*z0hb0Ip8q!T|wIroH` zH%+fuiQ`|9J=$;+2LFyW7Zt@H(2ZzqbP#&;GLmH!C!kL+%|%5K3sLo%#5IVj&m`_S z+3GV3-zrxioioTR`WTt|-GL;tIEg{3K8wh^+TE0@&ngN)RDD)a*2*17vWY4Xtuxs~ zZHU5T7Y!i_lU=lOvSD(F?j(BsM`?11iFVM1$stxj6ed_4f+$RgI08|a5OLPZJ@xX7 z%Md;F@{2prFV{o;q2e*L^}05CW97MvPB}&LHF2%UDat^!2Imw_APN&E`a%>Ymlyz1 zm|Wr~E7zIaVgf{+$t`9;)R{bDzLR_Xmq#qe;8nAK&MVeI5BF)KEl@_Y6UrxcLHW#1 zD4#eC4K$Z<^NUl^Pv#PCe(^Wd`%tLAfVcs9hqTdy&uaNR)L&4%0J}WbMjxE)JQWhP z*2Z)aT1rm)xwQD=&X?GSaQh&XKJI#X1fg6!+RqT+Axv3c2COx%Dz zn3v7P!~-WArnq=#<<^4@N!;}#-tX!BfVlzZx%7`-%g()kZK@_H(cnO&>UPw9d(bBc1 zyok4fYI0A@%8O)9c7YW{7Av>F3ZgJX3#=f%f@pyiMLmcXSV=U5sQOBxwUt|*_m$`b zQuSYno)A@ESqy-v`pROMlMPcvOtx}is)!8`g{dNrLlmZ}cmPqDYT_|OVXArJt))v- zU9gRD)mIk@APQ4Mq<|<)4UxgghN&rXS-CJZ#n%vpsVO=^6y|F&5~48S!W#urns712 z%7v*VWvr6QVHR2o~d3Sqf7}WcENxQ&(hz zC`?_E+bYVJ(Y)yRRuqQvm=_)2iZT#wG4(`ch_;w|q87BrT!ybN8bE)U%kcF@OD7w& zf#?>4;~(vU8;IF<(Cva7h z!pa40BPu`?w2kNjQP8#`K%(OxC2c2WV33lw6AP`Pd~_nQy;uR!iNy9|14K{RI*6?h zt)v~q9w!^7qc~;d!gLhRAqvw`B-=!>&G}DC^PR|R>B4jp1t1F3NtCs6VLFQ{5QXV1 zYC{yJi)aW@m@c9fMArzqitix0M$lFCaPsWc&+kQl3{p$K7ek$F72U)nD_2D~@h3!8 zbQ63tRpE;0E=oew(H}$^h>G|@)Ub;3t$$>$DT=y~xBHR#_=ac-(){)mZ6ONNQ*?E* zVS0%ltz4L1Vm3r!dWp>tbu>bpfhbIGaUP;Dy~Qmnvm$z?ZGFT;klNNqymGP&>?_n3 zS0QbpeMLHm7T8yWLA1brq9jBM>@Uhdw7~wNs#TPaHp2m;HuPbRrwto{sgIhAilP-% zb(4ceXqM{fIjXP(qDT*-=bu>~;fvBUAVzv_%=&`|K zwWVw6V8OP!da1&}qAo-g4iO6=s?ZaQA*#?5>#W?iJydLlsG~#0E{LihCJsTg6Y_?M zQ()O^=Axpw09C(cE-H!}5LGck+=r-&5#oiDou-jO{2n(=BSkrgiWn*SKvcv}ViiP1 zM0sK@NL56MEmp3IQDPTFRg4mcA-W1OTAYIDD#&Q@H#F$Axu_^^Kx1B;Yl`9l)Z9D^ z9xGlz-OaP$vBLWR($&auLT#fe%qb~zF>;(p;$$lvFREC%X&NuKKvdy);oI)2rwS*C z#t>CFQ8a_7z=@)hm3z8AN%ZhQdcHnM41lQJlf_Vo+C5o}f!Z$&^-mE~pdJgg(QGFh zbgGE4azUqx2M`6FDpK!=3mOm=cHsC&NvDa*7^I}rL|rR471Ko%h^At?XbVx$8KMhB zL1%~v=#M$!{%A1}`g2ZfaI_fVWP{EWQ+L?opG!JZ?6QOI@HHt zN{GTN5Nja{vp{UIa$y#VT@Zy?C=Nq|%}#HTI7OoKpJUD7BJno{Dd}Qy1EQph#RDfB zbcuLp<$^8|VLM%CDCiPV52Bz;MI=N)e-<7@L4OuwtjzgOdiU!xF~u^($bh|UGC5Zj@X^TYkWh<(tN`LV&jh+|Ov$Kn2!;;fVB zOZhl9c%`_4L8^Y0xC2r3tHcv0Tm5SB!OB&?TC~^|SN&?S1)}QLh@jnWjH+KN(n3`I zT9Mrf@BdsUa)C5Y>qKE_n%P~h7p0+J%da=4VW z+~)L$SPRiK{UJ6(F@Hv~onj}n=TB{P2%`0AmpBR0`m{@2aI!(Y-QupLOS)U6*%#Ng z-J&8yZQCQdLKJkb=nhfPy`sOB3%XBu5Cz>QMne>4znBbBnEjrZ1=3ONfLH|4QSE?O z2^}#zjDun$bj3XAL9xxrR&hxDY2}JIB=r8cA`XeN5EXG)^oFR2KZVy1q$>UtBdpv7 zq9bA)MAwIoh-na=*E=faLUdm5sQ4LLV}c$NYoP5W=rOSgqU%G)#UBt|A381$dLUgO zIw4L#bb;uEh=nSd>whQ3HK?9x+evW`x@*Fm63?L5Cd?`E&dGM>vZ&_T})QfvMagAY1UYtD$F5OwB^m|*4JPJLEPhv@CpXT^NzYxCajb7C3P*u1s- zoLC2yH5Vn$i_K6?b5Y{F*mckz|Dt>$W)~bQ4q>pU*#*anQ&1Z7_Noiw0+iLfz3PIv z0nrNex3~|{3iY>m;bg17DAb|2>Mx285LJIs>@qU-yB80aM5e=W)n67_A*%ke$Ytf$ z?kl1YL~HjIQQFBa@T#bZ`%$~Eik1*9@T%wzQMa#&!KBZx|E`On7^DSW7h|p50&j?^ z5H0YAm;=!kb5ksVXp6ZiRznxe*e&rZ^w^Bu5<4Jzs&`xLw=%~+daid{9Cw4ZiaX+= zmD`-|h_ZjW&QKM1L~n?y_(!aSXq~w$)<9ImUGck>E8?Em15pw8#1SXYM^)Sxe_@cS zxGye2(#-DzaSKXqo+CaGkDP4KhvI{k3;IyxJ`xx7p=bb6&_`kjL_r^mVUR~jAB%C8 zF6k2yfGFt`F&CnsPsLJ*f<6^%oNSn9V!M?K^GsZZsB6!}JBY$O7io`TU8C!NFGL2A z!n_b6RxZp-kr$#cFGVqk-l+OYl!NGvs;@*fCmZIqXlUiaycYc+3iDb7prG?!vd}kT zJxHy2D`FrD^H%Jza$)`z`ymSRuQ(3TX82B=gJ?5+C$2i#Fz>}vD9nGN7DQqG6OF8*d{4{~@1tl1y)#F=kD?PqCn7$H9uNinBnCjW?}z%C z911nLul*jAV;pT#E`PRiNx8fXQQNqTf86D!ph6acD5#W0AqpyGC95c32NP7unow^O zRLOc!4zoUKPc{Sdn-xmS_7Jr+p8Ou7md2BPoNUnea)gx&8eeXJC}@0n5u%_zsZU^K zGeHwbA4EYDNH3*jlyA66nowqdrkkV*Wia$$cep>1%mcmJ9UGiT7KNya#Ih_zMI@G0 zAu1w?tPN2SNn|4@TSQXX(X(__B$W#xsv@a84^b7#WYUvyRV0@wAgUs{%xL8fPAOzC zL#GLnKZIAMC(jiS?-iQ{<*i`q?KRWLAR-;ll354gVV|85QRxE z+d~v4z3k>>!(@3X@$%KolmsjI@gK z$WT8S?}qhnxV>b{{OKLliVv&WHAzlUE^f8Fb8?yb6))tjzI`s_@Ir7^Euv za+i~BX{bD5<*Epk3IB34N>zl)N)Q#1Qx1Trh%h+_q9VfNXe)CT)dbBYCp&q*^d@O8 zISYf7G`Cy?QPSLUCA98E9e*CV@$)TTlrY)`4KrhT?}Q|>vm!3gA#dWu&_)4&ifqSX<38M9)q`d89!<3RQtz4K= zGWEH*u9cF7AqrDk)`2KY8Cef9VZ4wsvbCk#)XK_E5QQl#dqQ;5pqv~4(K&;1au`HG z%gZqk1uZY9I@zEVM4%CaVOE@?)idQLV>75TlD3sc3DV?at%Mb3gKOjY>{L}9AQ)ewcL zCbv4-clK46C#_r$tIJr3dRSdvce0DGA)mVY*>@e(ke-T-o3$D;2%^Q;lpzo;{%e^N zqQ!qLi(0t_hRd=LEihbGg=k`G$=VQ2OfA{S$%d&d+j*9*8MWmIh&%z!qk;lAPV!XyaQ2~Z{?F%cl@(y>dB9G(1ocdvtEenOg&i^ zqA>MkQ;5PekS!nz(?E8ya$y?EUJ!+8C7(@dr@GWENCQgfLFgVdVlGN+Rb z(?S-va$#D?#t?;RA^SiSrlp($QJ7Y88bo1Q$@x|;Ol!G}MCU&#O>4OhgVdTfax+9> z+Q?lHolmhLQ9I(fcX=DKue8G}K3 zZQ4a{gXpDc7rD>LR@hZuvvL)7l@%|=RoGQdhN!~t?UtORA4vx#0uv>yURBq zRoGp!%k-dbz4$@;Agb^OnZn72=^?XOxiCFsC5YCG95SbRD zu6dr!3R2rV83xregF|IOsI?gzDoZ)pDu&4hR<5PP9H6KlsC86$bwNWLA+8rfpLR4XttmkBdj*@MyT+mT+ z5=22qNpCAiNk_|@5G5TW??9AvjC^Y4f{vAMAqqNH^6Sj}tdUHq3aL z-O7a-FTe6YN;6)zhA7Mg83|FCiSqL;Da=GU#*Vo#ljIbL!c3C0A?nOzxfr4_ljSOi zK2tG8#$5MYZu(Hg6uI3E+N4wE5i6H;s{9wCpi^b=4Z5Fu=@O8&AqqN8)`ckOG}+S1 z1)VNCLKJkm{NV0IzxI+HcYe}XXU~~%heEtiI#^U>e@_s2cj^uqQlFGIowk41H@(#?FzcAqqNIW`-!}Tp0?{ zb+mahKSbBj=E)LJV{;OBzN`RsGAD88%Nis){*^TsQx?d&7&I5&jhZ^y>KDoZR<8Pm z@)ktZFO(H;#ZAQ`ITxbp7s~|@RliuSwuetDm5LLfkhW+DiX+Qt4LFNIe z`VF$Am8*WEtO!x{8)Z$1s*jQ1LR5W>YzA#KW53FF&~9_q_*eNoMAiQ$dqbTLc;+&q zj0CCrO>!he)o+p$AgX?|oDNa-o8^2bTm2Tf-OA1V78!OoZtl0pkq}kCRbGS4O6sxS zZy~CFo81Fod5EgmC6nIA9GXpSw@d+15xZqZD_6uG z84OVodt_dSrf{z(i-J_eURln`hS?`;S-CL#WOshiJP$AXh>Z=79Xw z%7r;7w?h=>p!D{Gl;)5;22q$p@*MQgj2)I&pjT#vIxPQz3YhEJf66CNMRPg(Px;o# z7I8$zf8hE=Tg4Ii6+}fGkw1DMRdH0Vhp38UG6te5j>#QXu8QMwKSWg=m&YM0;)Fa0 zQ4uHPRfu-aC*?m7?VeA{rw?%atGL%(MwD+c7{1qBMwI-aUD<3Er)6?0Hx;L4I7C&P zmct<`;xD-sq9V@7?GP1lMjo(oMVyt#AL95&Rh*UQF-TRMlUE_C;+(t-oitEtSjivR*go2^#ma;bZQ2)PN{BY?3o@e-9sg{Ff6J0~&{g=ioC#5df6KcN zRd`XBcpSIpUy`LEs_>GmZsjVxEbBm2;APnaq5`kTHY7U!QH57z7Yx!oU6s8cny0IB zAVd{jlfxmZ@R}S4QH9rK0HO-7%ehXrz#DRll`HUuO!tI}z~|p@$j+AT8O=?(8KOD7 zC4Yyg!dvp7m8Vya&;`_K$q#8nH@ z%HJXSx{yb54@6%V@<<+m=!NQI`4>blR3FPrPPT|A@~xF?_Y+y;nJbBkcp^P0$TNH@ zH-S{eGr1L_DxS#$R<4TY@;F3QJeTL4>;hlNJGdWp?S*^?(E?w{gwNgLscSD~2FSku z<(13~(gI(}oK|juuVn#<7Wi70gs5w8WJQR&_D0r(=nGih%5Ne10+zS38AKiZSGI#p zM?J&u!Dr^g_&eDfif7(X^-e}Y)b96kBt-3gFDE$J>OaWUR<7M2WV#n|?fxM9KveyI z@+3sv_CCtLK&t+uyk-^UYrQMf|4H73y6nna3IF;IE6~%Vn%n_1_+KZ!aD6}za7&O&R={gSH7&`xu|r0R~7owQ_1d9SGo*QjKwCq#`(rjA0? zsN^c_jk_iFDTT@dQJ+$%l2%bZW>&A1sv?y1qPfPWYC^4dna>8QZy__GM$O*f_!nsg zgH$^Vjy8iq>U$@fG_@LN<$|VGDB7ZdUH? zwwY8Ph~_?%8f;`=|Iyp-GOM33NN>B#tR_PAJ&#$`42ZtxF^gIN4V)kD&#IO~Kbdzq zW>xE1jb zH=$a8h5LimgU@4s#Rdnfmyj@HA?gE^(u{>D{Vz2?%6DoW!5PQ&^?@&-E!W9sdfeVjzVnqUu2url@KNQJA8tos|nyOm&4QOfl6P zqAgS0kNlm=bET6@@Y1e_cXt0I4-4)NzQylvEEO3R6lwhA2!a_1-GVcgB42 zQfVbWx{0}JzIds$N(|9u=`tz^qM&6|X2`t1)?;OrAEYVQ;XB~>4y3M;9WR<7M& zsg4j;@s;`kqW4ZzR{bD)??h$gIoU8()Ep}priwZMQJ5;8x(QOdt19#D;5HkDsiw@2 z8(LAAYAT793sYUChA2#Rl?B?d+k8?`g+fPnn@JNMjPdW z>Y694%~dg|o!QcwtMW!>`Q`%%=4nFcbXb!(q4IrAsPO1e&Q`kv$glL*NtL_j@Q)kr=qG{@)hB$dX znx`&m6b7knUDYIr+SXOgg!-5{{9Y}DMw&VNUi||7ZMxP?ZGaw_u60wtL;KAXc2|3# zb7l&=t0Ry%%(UhQ^%pqV%;68}5=8UVL*0UCntG^5&_Cuud#YE^JM*AD&Cjb+yWQs7 zOVzb<)6`3a#gCh&Ug`{FU;jm@A@q}@W)5kddaGd&%~NkR(aLR3ebfwyrlOBp0MS(R zRm&loioR++M3-XwsVxv)itVR%L;SQC?(eS-gUQXa{{HH;lU>;csOwg)iUBH9g19OM zsQM7CY(J{85EU^{O@OF~fhyX{y{~?dS^$~%)qBB%)C!Q^SRbj@L-fY_NVOFjY1WIu zYBw~+tQUjTpAdZzXNWot(FbvcsEg2kb3b#8flizIdFmlVXIi|W>Lp00T866sAbPj{ zFr^dP8THY-^@pjX5WW9pxJm=j`(K8utkCB3<{F>M3GF{`J}IaQI@yknR6VU+M@M=p zTcWs@j#Nt_YUxiZXX3c^B1+|ksHIV=gjJOJQ6%%@QL2K~NZ*D-CqhQ48g7h@J5)4u zw5sdI%;HNMwY8eTKHaGlI!5LB@e8Ymj#ZZtu=6pP%Q-9Js0O+rP?U=4P+2%V;$CL>K@$zsBveEIYiCkV2`$zM`H1{tD&ryj}&`sP%HAkg(vOiZbM`ea+YnY=# zAv!rRSLKK3^Hc?hPEO2IH6S`UF<;g7Ksw(uUp0kjU$8*6g=k-}Ky`)E zT#951RRrWW_gkn2IoUa1q-I*VIbWnyN?W!40|AkFy_ zb=1o33zn)g5LLfaU52RopVe)Ms{dI%hN${w>NP~wFH@hOt1ry=XR7$Aa7cdq!hC_I zN}kF#-?wF_`K+5t2OZpLKI^8kJJ||3P%qnGm z*~9MosK8aKh><-c(}8ETDq{!TQ>WFc3Utc6Re6o71zj_5RbHbSLig^Qi&Uy5^z6R5 zNTt4WvO(9WzE&>iI<*9%pzG8z(&x9Nu2*j`NJ%%ScMv7rpyH=?ouQx`RWgXCVxvmu zWEU8ta$30s#;7t7EigufL)4jHRdXx6CFeKQ3WK!3-&AKSH}{)VPly({N&N`vBjzHN z8V032VlGmtu@J2nThvsD){8A_4n*t4R<*>*^U;d2RjtM#Z5F?)Um@Bmepfpn+A6lG z{Sa*x+thI=pLx*j>Ks(oJmz+F)yZ~dhx%aUIqGk=b};2eX1x#LHDZ?5Cz?@s#v+82UIPHf*w!}p^ppATT&0ImLMI=5327V zn%_g}2Z-kPkm~PbgC151^rX`(#Li5h)M*RpkBxkmD8d}gwnJ3?S+yUckD#1W#~}I$$~kooqF;eHudYD!D-h?^KTywW z<|37P0!3ak7pc@+h*rc4$}_(cWE)JI(*>0Ps%{?iZH|^rSJYtW-W_w1O8o@Aykjm>sfiHn zXs)Rl5bbELsRa;ihS$|{h&IFPYCS{;pc`sSCijxmM+cxAYBvU>Uz^Xmsl(8c*XFZs z%KYfK?Gv@_miil_uH8~Moor`rE0)<+PcLk5s{s&o=C-;8(N=Ls)y`s%f9~-6kE)x+ z-H}@Jk7{Y50k)(KJ0#xk&Vq zl;-KFDuh9rr>CkkMDz4aeFf1pJyYQjJx_S9>O=HA;kjx7wKtFXLUn+8n8$pfx zy7pFuLe#als(_RGO45H-dEAj!ntxS2h!*&-Y6sB*->C?Q7WiKEg=m5Am1pG^_(6?= zXn`NpWQeBXKQ$AwKS}YQS_INmd{nqN(8eHgw!Gb0PF2kfuWD*G_gSqz=mA8cdy$dOSp(k@_t}ol&}NaNJaA-2tM` zXx+=obtazv5n4RgGoN+S!@(Kmh!$%gUi#a3>;@aeq}h4JZY5QRyg z|AT0n5}Jr%pZrdwGeYzNHL(tc=mlzGofo3#fk|{xh~_tm zE(g)e^Q5{eL`TY``WuK|XC~8)AbOqYCDW}zdZC$IcY^4JW^&!r$yT32&$M#Yr_hQ0 zt|qEJh3*Vd^(pl}h^kMe4?hxUrU)r#}B12QNA$KnY7wm`Lrr&I+IqXbFxLG(>bkN5$Uwo4x}p5=~)m} zkzSvKsEQ2wFNmthps!iECng#7U5MJ9Q9pCC3(Q168)w3}1!mGg5G^m04)H)*U}jwu zq6KErB_LX07G1^4wJocz1yR?s>V{5sf!TBi+>f@HYL|;7;qW^^2np5?DeH!XzPSyMMMTpLZ zgzB3)@%oR>hJ@;e7^Lq($*EsL^gSp!^?%SX^Ppi`hq?KkVjeV1CxvLu&!y8qG!?mY zRwvt;+`5L9n~L1}sF6MXQEPJRlDS+js5N=?B8WPZS1*OAGkNt|E4MSrr#C^g8RpYF zAqtaUAA~4Oetpu(hAE)0lIZmx%~JvTAwavDP?!QbGeltu>e3K}DWuCm6sC}_Zso!h z)^#8XQ&=~F=q=qvbQ_4?(p^M%u`_y0uIu`~hOetLmqA;a&X(t<|w61C8!j#rs zAqrDkkAf&n8NC#uFlF^}h{BZB8?5k=jBp_dpb;y#5oSFy-}M5Pc4yg1!jR z=Kw0`TM&IeYDN7JqVGqos9!X3jR>k*UL=_~t>Y=z>sk^O#k1DX5A$VOdpIg6f;ix2pac`gflf>aV8jfeFp# zR86;VvhA*}w^+G$SJy-H#jT{(b@Kd9)b1L3Aw=!2sh2?1?wWeNm7Dvo^%lr<+hbqr z-5|9)Tpxz0-QoH)L>H%P>AxYmI9*HMgesVQLT&v3s%wg0iuq6qjdq> zZCjvMM;Eko71q%+AzGp8=(`YASXY-Q=<1~kztyE7s_?Q>U+8ixWoJkU<2I?I%0kWuz?;3`Co+k8|vXusTbO4oRh7hk>2q| zy+Rx5hgPnnX1Z>nxJhfKM?q9lbM5^BQcW%NK8R{+p>J8ydw?QCTk0)^?Zeo&6tvNk zir6OFbE9o^G(_7^8@&)3^oO~+q*p-W|1ejV^ah9~yPe+Zfi&Cg^d2W$Q+s{N%2m-` ze}ZUY+Us0JT}@O)2VEbcB0B0u5Eao;x3O}^&F^$)h>n}z>0U+c@sIX_js2bUj~Jvk zrF7E6p<#O?S!X>K8o$?k5v2||*`QtY0xK7^i#`TX&@TE7L_xdi?8RJc3i`eF7sKm6 zO8UJnU%7e$43(<5<5I#%@3+aX#+FP*4(TrVPYxK)&o-Y?Tz*N5o+GQD*R zh@L<8(H)HJ`A?d)KDs*wX=eKBz7S1JUp)k(PX_nXQ4oDHxSyT`(H^nCj)rKD*k3Pn zvV9t$w^+G84bbUInAmjuqbdgI&P2Qz{ZVg*s8Iv;?-2EApx$TYb|!=LQHY8dq|ZY1 z4zoyo8KQTXMd~|FHq2oC+{&E)q?QiWsY<%VQ<%ZJAVjk^MAwEWjHkbaD2%6@TSfWe zKZ|5Tb$ck~Gjn-IcY{WsHJ5jEA85*1b9qM(c5<)(hU*!YF3fPf8=^47^%aQ1jL`2P z3NuoFf+);Low$@O!fv8J>8e()Pe19}5cTON-3YQj$rPnqfi&Aux)Ve{JTyx8far&Z zM(F_%y(?t29tzRBLPqN`PPV~g^h_&P(ir_0L?w;U2}@(L=`A^9btRB$8mFs3RMR;9 zt(B`{ylx6n72|a~h*sGNx+_FQOwhd{`W4)XdJtrO1=naKGuFpVJ;dFf&dTgE<%+R-?59XP{4E-1iHLv!g^=qh%Iq?#$KRMYVyqP*_ zS(lr(gPFP}MDsLL4~3|TS$Z=>Rm|4ELo`jZ^+7B5YGIB(0nw|4IXV`iR||9XHHcm< znAhL;Kzd0qPd|g`6~R3H4x(2C^R*~PL8E;1ieSD@1kr2S1v(W(uW1+POb~sY*Fqfv z(bst`)cGLl=pyYE1F5Bpba^M+n#H<_m7Cwi`Xof1S***J#~N(3ME?v?XO`*}5Orp$ z{>{ow@6UP%MAQ4TKH!0rW|=+?QJ7`=JT%TcZCI|aLUYX1hUNOMlMT8;^9pfOxI&kL zDCi2^9-=AyMNfbz=t@1gg6Hl?NmuH5b}-7faCW$VmHru8F*`PRm0klNJVKU>8*{nQS+cCXWUD!OP?#X8*%qAJ$w zSrApRLC=M#hz)v~m23A#y%wUN8}(+03XIV^jqLG{DvZ&GFxc80$9~l(q0Z(w_N%@C zQ5C=G>kw7(o4)U4i`b-nmExvilWqc05u5ZRh>F;(50L2iM^$XmhcQT1Y|(#Nxhl5m zix5?@Ro{Xr%s<76ruIDnts=K0Nf+gNE?U0&DS zm8f;u?531UTC7Vb5*2ngM0t}^WK!DPYlU@7Ds+=nYJ0IRS+^)zx22RK6on{4ywC4> zesA;7`{$d_e%kMxnKQrNbI#5=Gv~~VJyvGWg3r>m&wUX|_lVy2|X57<84{=M{+?zAYtrwK=SbW49Tr6JBme zKQsSm86DEkObdxa`k5IhG3XjIO=8dzGecs~60^W5KW@1n98kuYzEz6Zj%^v zqZ#02!$fSF&&{JE!+dUrd%2lzGUIeZK0I$Sb0p4mlUXEjrkl+Qf4jIW`)BxtStoV2 zi{cBjMLKF9Wxq7Lq(A4_*FV2B`$T@w=oWKW;s=dxF(;&%_C%_$%%9RidmhzSCieE| z3bobLbMo!CntX{tx0+&!K}*dk$u6cyu+5wnxtz9{P-{2SIKF{kyNQ>$zrNihN?f6K zm}?}iP&-VD#9h>#=6Z>{s5?y)FE^sQObaI;G_uPK7MXOHnJF=8nJJODLhUx|B?jGX zwmSJWe~;NMan0XjevlaSYxA?jpkJGl68A5@iI{UDcQC#&p*x~Oy4O^4@=5oa<`RSM zH4jM)`mLENG3a+@y2PO0nb)0s(0%3|i9z?7$VVcRes7jZO!~bkk(l%cvsq%$AIuIf zH>CT`0Vf}Hzqvdsy5{dUH%kn9z~o5``lIO|5t;NyGsMX!J!pnYOnT6amOi(8JBQ2! zsnqW695Pd-G4?RTVe^W_-MPbNfy9D8nMD!{{$z@>B7S9K!=KGcO=QEL%?2;m@Q5jM z@(quedTpW&kC+h>8y+>ABsToTd?~TuFQ&}N7yQ-iYopgc+3;8MlO|@JZ zN!P?9_J$`-GcVWvl406?{xWIOY`Z8fm<;J1yC^Q0<`PR>G;Ji7xM(^{ zT-O5h@QTE7Wed>P(>092V@|$d3^qt?7=xtt(czB8gAyBFf&mg6UV_J*e8CV#NF41D zo|hs!Pq#}pm?-W)T~^Crn#6-Jz#Qq2JqQE5DY0P~?@MeL#-|bwu*PAP#DjWq*y!a7 zmcwBuTQFj`YUPmC!FOWAa+of08U6!@BsRPhKTB+QDNZ~2hVi&4v0*&oI&z-=Yp2ShR z91A5ICSv)qryH6|C~@*(D&a?oVJacEQ*_y1foc-NB%-FoFo~$=NgSD~_*7z;E3r&sm@Bc?DL;-6-B;lYi4WaZ zMX*!kpW)T`R$|htaY$m)Yj8|r&}(o;;`uNCL~y5H+C2Z|pD5?$N>oFVlP^&XT_l#M zhR8UPEvjR+#1=JBBC$mceCgy{)WlASEo$OBi6v^`ki-(Ta9m=E+BhSzL~X=GI=kF1 zX)+R=e9~kzlbAFa{UioW!DNX+Q!!Oy&{VwYf ztsCNko9LebHAH&X=$~3643yZSF&>fFqA{Ly^242uQ4&j}W1PgGH)68Hpf_R`#qA%H zHo+U3$fQlMP-=IyU2+DNNZpQ>)yhDzmur!U%}#z%WFmZ5bWvoYnZ!kL6NXAG(Grqa>DSf$>iMQLiOlmKd}pW=jm(3iG50leWTp zVjmtX!^hH49xTHOFE`w+@r9EQ+8XC1uKBHz+%3A!+<}e~gJz+##GqN|>10PcV%PjO z$Pqc*Z7@jUaJR)!i7nbObA z*Ydp>C_Pnd569s#iEmo&iKnHr_J+Oiyi~!y1GE<=dAauYVYZVW?)z|FV*C5hy+^eD z{fI0P+5Q0(No@ZBRy+Cjy|GbZ``##(8h?|L+y{H4+rBYY`=t!~CG>r9M7qO%A#q=v zk~nHPI3E!?Y&kIZGMj&eDi>)^zC|v^Nop)euP5|F zg2WR2P_?JFe@xRKH8hc7`lGIw8`1&Dbn;;apohdT1Mq~zFb`ph#4rOM-R&M*pq>rMXCNk-xc+|;noQB{jiFY^z&q-J8x1R)w@zT}%?I%HEiu8PG z$K;`yEfthDv6?RpKhiPzalA)y`#14O6U$FDaglv8`UF-;%j}cUC$QejH5`UAC*N=w z>fIM@I1D2sHhdDBBo=%MUrH?a6ux%S^S|NP@93ZZ4aZR_*liCZ;*=D>+a5;5UlP9+ z;c1xr{p!VUMR*$JB`&6ss4Q{RMxvURD-pr@M8r1J>9X;24s)37CHGaW3feIn6Wr2G0ZrW z>+P34!;D9~#4zJg)yapMfEp6ROh8>})LDD{Zz39slg`=$hiEEs`A$MhiOY8qvL${m z_>1T&@q58vL@$XAUqY_L;eH7Zd%1!Ic*e;UjHDD`yU2zGsNKhRV#CQ8BC+AicwAz` zm+_2~Z#V^GBsQFa0*PU!Vur*pQ}Mc&UlFI_14lpH(@-ig%rqR67^V>MeWSxY9Tg;o znU1PXKFkc%kQinL>PjQ*`L#3AP#SB`ubmk|Q;|D~v(QrFPU0+NOFU~m#|{yRucW<-$O|H0N_!PANtfC)SLR~6bfrCWWiDR( z?+xuf;%j(Ynql`5U&DtIhx>Ibl{nn5V~xaDMc%+BiLZ*hf$jfI!#7;a!#A49H(boa zk6vy$%||H54?g#3=3}|U#WWxNa--|a0$iRKT}*ExQQ~5H6E&Uu2Iwu+&5Q7=`ElF; zy@f`a$Q{qO(Ny9xd>gGKHhc%!5*xmQyS!Y`cah`d*Qa+eSz^$4v0UQ%v=9gL-1g5O z0ecTWX(E%phm%e|=^~ty7<3Ur5Bk^)`aa?%27Moi5`!+rH4=j^Mv9jU`T^3d{(k=V z0s6X${`ubrm?$ynhbWTxXZR78N(}lDN}PPqCD<%6=o0LZ81!T8l^FD69HhAY!(~`5aTzW{o&LOg|E`hcD3CZZ#h4;-WQy^clYdNDfwv{L zUx5$3{8#d>#8ORU(v?`_<-)8&sgn=03MVCoS%riF(J-q~Ut*ZgkR~zAXSm79zbkwV zT1XL|biW4eM4ohCf-VwIx-UUbiOX;;awN7`i$M~P8Lz`oiN}oBVWh+p6xJhO;t2}t z@uGAjVo$o?fI^Wc-EY8LFV}t}%A9=rjp+W6@5}ZZu|(oZ`Z*E?`e|&x36&(a--PN; ze$RR{>isQy|C{lWyTf9*N%W zI8F_w^6l=;rj!%NdX$3A$~i22jMpp(;BB>NYbAttIQfxD z2=8?m1bU5eveN3|rsaC%_J!cnaLQpXrjNr6`F@@Xb*S>V9jw0HC+FIJ7IQ#5GKCCx9!G%sv0Cv;QM zwR1uhV0{*KWbO~+`vV+#a{Xv_cgZ+O;`&)zm!=*Rbc?b2gf=7bh!Nb9WL8~A) zc-&sb%R2^@S_EzF9k&d++PiCSFSt9ny)a{LsAk(n|NAB#>~*@@h^>Qr>@Bjax>$E| z{|}n{&)XC&oEyqYPPnjr@wqFDhPIz`-w#82XRPgC6j~QbsZ%FCr%zs5UQS+KUZafO zeH!HT&1;aGk&)BeUe+KdGd;6+T4qL*+{TTHI{#`vMJMt7wDF}uO#4o;c6AtPf3nKk z4-hKcdMs4M6x&~m3x7Els+BNg*)7iwOPrlO;jL{iU7xXdd|~zDp?(c@>Ct#y%6VP* zZSne@Gfp4)w)2#B@fGY*CHVnYs2rPA;my+Hp_robzlBO;JEjLYL7yNmNV7jV z_J{u(1sQg5``E>m7xcA14eStS*nc_pQh&V$_V>&n-Tv^BOgpWKy-wqxQQ-~0hjzzi Q+*(xekI=E0g0%2|0Km$t7ytkO diff --git a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs index 097587c041..d0297c2de3 100644 --- a/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs +++ b/Assets/PerfectWorld/Scripts/Network/UnityGameSession.cs @@ -104,6 +104,7 @@ namespace BrewMonster.Network } public static void EnterWorldAsync(RoleInfo roleInfo, Action callback = null) { + Debug.Log("EnterWorldAsync !!!!! nay "); Instance._gameSession.EnterWorldAsync(roleInfo, callback); } diff --git a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs index 3576155fbd..32a89a0fa6 100644 --- a/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs +++ b/Assets/PerfectWorld/Scripts/UI/Login/LoginScreenUI.cs @@ -83,9 +83,8 @@ namespace BrewMonster.UI private void OnSelectRoleComplete(RoleInfo roleInfo) { - // now we have to enter the world - /*UnityGameSession.SendProtocol( + UnityGameSession.SendProtocol( new enterworld() { Roleid = roleInfo.roleid, @@ -96,9 +95,9 @@ namespace BrewMonster.UI Settime = 0, Timeout = 0 } - );*/ - Debug.Log("OnSelectRoleComplete"); - UnityGameSession.EnterWorldAsync(roleInfo, OnEnterWorldComplete); + ); + /* Debug.Log("OnSelectRoleComplete"); + UnityGameSession.EnterWorldAsync(roleInfo, OnEnterWorldComplete);*/ } private async void OnEnterWorldComplete() diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index 75699c89d8..91365cb575 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -182,6 +182,7 @@ public class CECHostPlayer : MonoBehaviour } public void ProcessMessage(in ECMSG Msg) { + Debug.LogWarning("HoangDev : ProcessMessageProcessMessageProcessMessage"); switch ((int)Msg.dwMsg) { case int value when value == EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break; @@ -235,18 +236,18 @@ public class CECHostPlayer : MonoBehaviour } public void OnMsgHstCorrectPos(in ECMSG Msg) { - Debug.Log("OnMsgHstCorrectPos"); + Debug.LogWarning("HoangDev : OnMsgHstCorrectPos"); byte[] buf = (byte[])Msg.dwParam1; // chỗ bạn lưu pDataBuf GCHandle handle = GCHandle.Alloc(buf, GCHandleType.Pinned); cmd_host_correct_pos pCmd = (cmd_host_correct_pos)Marshal.PtrToStructure( handle.AddrOfPinnedObject(), typeof(cmd_host_correct_pos)); handle.Free(); - Debug.LogWarning("pCmd.pos " + pCmd.pos); + Debug.LogWarning("HoangDev :pCmd.pos " + pCmd.pos); SetPos(pCmd.pos); } public void OnMsgHstGoto(in ECMSG Msg) { - Debug.Log("OnMsgHstGoto"); + Debug.Log("HoangDev :OnMsgHstGoto"); cmd_notify_hostpos pCmd = (cmd_notify_hostpos)Msg.dwParam1; }