From 8a9afdcffc2cc212b2b6c8c927624e2f60d83c17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CDaisyWu=E2=80=9D?= <“18682150237@163.com”> Date: Mon, 10 Feb 2025 09:45:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=AE=89=E5=8D=93?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E9=80=9A=E7=9F=A5=E8=87=AA=E5=AE=9A=E7=BE=A9?= =?UTF-8?q?=E6=A8=A3=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/call_me_icon.jpg | Bin 0 -> 80269 bytes lib/main.dart | 5 +- .../handle/impl/udp_talk_request_handler.dart | 20 ++++ lib/tools/push/notification_service.dart | 107 ++++++++++++++++++ lib/tools/push/xs_jPhush.dart | 14 +++ 5 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 images/call_me_icon.jpg create mode 100644 lib/tools/push/notification_service.dart diff --git a/images/call_me_icon.jpg b/images/call_me_icon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ebc66b3ee45f90e25fd8a4d4c43f4e8d08183f29 GIT binary patch literal 80269 zcmeFZcTgKyvp6c}h$A`f+GK$+Ig2$Iu#f>Gk`YLlY>)w)EaDo2y(X>!A(NLNgb)G~ zBr>eQfXP8fm~4W`8HC7w?EUIj_x^KV)vLO{y7g7Po;q_{r+d14&YYgu#e)%-<1H1t+fIdL`pZh=keF~mA0DuY;066#Of0o&&005Pd008&Mf0haV z1pwTP001bx|5^5*b@Iy2%kDqKoj*OFb#?{-w(tM|n-u_Xw+{fgYW*Ly)6;)r+b^di z{!_a=PY)NsOMnyL7XSp{0dN3-PBA&a1Ar_*>E|dw2XOKHg^L%?U%YtX;-yO$FJHZN z_3D)?SJ`jeync&|otvABos*MSKtza_?>;{#=Py#f+!qy-kd)vNl71j9{y;=rLi`^g zXD(g3boKJpyH~H?73byT761PXKmP{YzI>^=l-h||Doqp%_&j#_9^k~ne%7PpW1T%?734zPmQ>J z{=z>dT)cZvj@`tL#PVY#~BoF0fe)~74DwpIMnaNG9tjY~&231RK5tlc}uk#Ym;(`gvY0JNnayQ03? z3YIlqIgY#$$@zKV%aMKKbD^v<9PH-Zh`)XUB2vY_Ok#FO;L7!yki6~5)EL_(Y5!5N zm$pU77iuBqF}}F>tmikl{%-qwC06Hcn&`IHNTp}i-qm82V^N91K+PAJwB)qH@lmbI zJy&yVNpHFgpFbam_vX$`Q97wIFH0;fa<+|(XZwFgrE8AE@1+eYK&!Mh=Pz%!&8*D- z#r+AKh*NVXw6sENT=SzIoIm^OU+MqGqy1l&`S_O6707&c+RGm9HTPlho{m;CX+Ep! z>aJho{iFBKL{wqjFS#%C9={mqUjdFo_L{&QdzF2QAsK&aY9Cd z64&_*48{FJw&JYk95tTJ7eLbfR$!EE1*|0~D9Y9WJjg_V8g>1-wIqtp z7=zT~{F3E1j^u(G;;()*!aOzv6Ys1AJjRBo@ceiexbfjMzEg|L+va_s zwaDdWuE2LdS5#{-=*$!%^L3c3X&5R820 z#myqJRq9mQ?eN=L4{JkAdB*wfy05u;ZctJT%wHcKix>KGb^GtXX^!9<3Ve0*X@xJ) zJ-T2LW)-GiH0Y*_mbvH}YYAx_@W6W#;1*;O*L&X57dHW7=K#O`lm3^R^8cXv^KZ__ z_-Y;~#fKG5!pa9$3lTPh0WlIqjak^Pn^&VlV%qFC=4~f9W_GSw>QRB2OEs_Y90#^v z`0($Ju2+1H1RhV!`1@>%54W6vgjz#Xv#Q1i#rr9g$ohH})7v` zp;YUWyIIjf5sbOcp8)**eYQWzpXRp==%qqGQv2N!d;NDY(r|ptr=I{Ltv`pOE%Oc( zq8cw-ch=dTh|^J)*!l8h0cYC`7A7-8;^c{vd|bxs%s>U}wiuIn(qAuFz>!K^aw(>- zNqiaBOK16O4k|WGjM`qbuROcC7`S!M5}Fb3AUaNR+Yw2}^EAAV3lyz&z`FbM)r6&) z`)XPo%$$D7dcW3KFMmu{O>hM*rtZ$nmNW}HeXyq~0;63z3m0h;x_$(RlYGDXYp38w z?=fxI(a^x-&RlPl_xaT5-nY7qCL;$ZlP8am%+~34_sw!SQ_(zDQB|x?R1ub0wz_Y?HgEYmdKzJ(CScv}Dgsc^Kf`RT>pmRH-C$xON#ZGvL=ZxGy>p zA$I{tY(n&s)QphVclyXs`Lw7A3+u!Mv?P*NQ?%-10B$ILwM<_5dXt16{cg&v^worK zL>~<7-EY@!z!Mt~AiBklkg>Jmsv_%0gR43$L#=SxqHqnwg|vc7icC(tPlQ#Fn0%tX=TJI6R1_aU>QtxvkJQ_SW6R8 zRmKiZG=Cu-@eJ@c^+kdj0`Vc$y`VRJ2EA|7+vhX zFQeINo1(&Icf0)Yx6W_6@pRN>BdFfg;(l z>H5wbRRm7?5>QIdOAX#b>NUnNxcal)EKT38xlMksK9aXoppjR}QQl3Nw--y?9SA0~ z#H+sdegae-X}cpyg9&p^Tb&lohEO*Cqk1svfFkj2gyBmmep#qiquUt~RAah(8pzst z9^L1*@H@a=a(#6mdeDSC+T*$Kj*^#<_Jl*X5dB=)>Dn# z-RqVxO%hGY7WtqDm4r^tZzxoThJF}`wW>gu4+NI>c$a-i{l;@p@nRoH`<8F*h3w{|;u76K#$S;^|QprVg zthVe!yZKWZ{G3VUWPR7dzON!!y*jQ^3$W|{;qNVPq~(29g9Rp)kgV9 z6O2f12__Nu%4R3uATSv%t2AJc0gQw!O0qM$1~RM@_I0_WVy)w9tplS?88uYHBq8Ka zqhiA{Q)hns_zAcyz91P_QZ1p~P%w=*n1DX`s}?WC!hWnS$M!qqtKH^c!os8+cSc96 zr;%(^55PW))eYT(sRNat!wE>^4q1eC*cs#$ysED|rSNm)Cq6WxMA+xlam9b#w_W;}dx`fM1kIgH zAZ|P9-+?QlPAc96Q|f!Tin&0`V-($Yb&6>ilhAmlrv)l1$YlE=~je+ z>6;1o#DE^l>f%Pxcu(0txD4V;;I2_j&>vX)ykRy+$^9SC51z;TB7XnU&}F+bTYrCH zF3vvqU^ICvg!j?&7uxQA;EH7fvEDQHoJ)m`uLy;{pbhNt_V=@=pWobO!Iq_Wj`TDA@ zVFhjHfT9*z2a+a=;*FrWtP-(xRbX_wLhUeiZF(qm=26kMUV~Q9$@TglsHf)QQ%S%7 z5BbXfmKe;~W$-SYT#TaTYNr>P6GSd+13`v+_vg7OLo${>e1^^hI98;ZRoV~<66GE-znt87@ z_aaYpeWn=}4Wyq&G0lg<6ehZW0b zwxM_NvebEw+rML^of2wg!aM^!WMeWQ;(9>&wABmivd2*5yhn1@CkYL;Ei2DGV)Go# z^VX-lvP)7>p5`r0I@TlUa4L0Iu4{i@!k{G7)xZ7I(?m?Y#9mc?hilFOL<1N?b1v(^oBS;N$YB*b+A9M0Tkr*XwYq=NDr%G{;n+~+U*Y($ zF*Y;eG76?ujK+fJEGM5=gi_9XDP501T?b^!hI5jBd z#LU*Gm%|{q(RxL;Xa*_0v9|2w*5l)#HlpjF%F(F2cW2AF&LwzFnzQrO0*lv~V5I0y zY-1x2pLij!&me_YYP+!|X64l}ICm|NiE@Ob{_bB7HlRBH)}8t*BKqAk%s*qOk)xm) z^cvj4)j-KCmEdn4`b2(o`tTR|Ed3MydbcgUx6g8qNtK!IQ;Gu>LpFy4YC(cmgzM_S z`pHcL?=l>;ds>rRM@PSCr{8IMW?NJ>IxruK+`V8i$dAjqiC!Wti@`XRfXa85C1loL zZ%U>!JTIG43@kBf+JewZ*+6R1qN`GzX)ukkYUEk#`1PeBiQEwDm~H6nS(JC!zW?c@ zgurO84nkfg!Uso^vXpJl+YMp8(s9`2BcrUl(T#GnPAoEdx!NpoDL|d+sEkcEk4sTc z%Ck_s5i;leI49rqj;&W$&>gWe9MmYUu3C|P?FH``110lm!`rr=p#5!EMJXppi-jd)l3TuUS~e-?VPXCxXgkXk=2mn?wYL~ z8s#$PK!G8l_uy@Y-bOY@@~}UBhv|?r`jjZVd}uByHP1GK|Nha5LMJ|S=13P*FB03$ zQm@?~(>>^jgRz+H_^#PeDL0;1c2WBdii^{pHw#@-Bhgki+VzS|zK-oUwYGU$=5l0; z@|HA>&x`SnKg-nidbj7D-hgqJm(v-KE%8??Y6b|aEr(gKSLlkG*SR=&lf+gNcW=C3 zZE)BK@_ycAM*?97UU;)SfzjJ67AQx*rwno&@SmExG(si?YBiW98GlHSzPkvC1&AcP zvVIJEXu1H1VV}bM?z#nE5?}1=?(QZr&?fEHc{p!N5c1k| zDvL!AB$#b6`gK7mq1+NCj1V=E@71emGPVRg@?&RA&0OzB9h>^2*~;X=E*PJ(yNx=Z zq=Jh`Pd!0vN*+8wzF;96X_;O;hsRk_QN?hisBWH{yCM(tN2klw*P*7Q?)gq>+KPyt z$2867s9+BgIzY3yP1L8G8j7*xe;HVJKweGXI1zhqTJA?a_61cinAvOFD)cQYG4eH)IN5Y^Y2>a~2u9S)~wEf62Ut zO6E1fbYIzmD6(?C`^F0?T^$>drz>=*(u!Oe1uT+rNqM~D&?T|K=$OxRZuWoQpy}>d zIBezc$n{@Qcx<(0MOQDEcHQn~7B@lhB1)P-1zhGc4Ql@3N6`G4>7zS(Hh|VuN^xb5=L8y2`o>!YbEze#q#7Fjnj(We`i{`!3 z?PJBtTm`+Ky4IW5?L08PHDJ7zSN9w91>LJMrlbURV6Hn{x26AW0|k#pqZfa~JClPt zxh|7C>aKH{H+UuPW=Zrt^kGx6Ps2FxIDq$}9vHD;ed#p|tYE`V? zHwygtpsmzb3H19N4hq6QjJuJ(0vkz5`FPI(d^!I656dqWQi}4=tLwS>a|QQ@Fh;wQPdBaZ(*L z&Xd?C76{IqylTkkb&4xkHUQDRLp=~{v^oC($MHM9K=tkOoUTW)-_HEz+2x?OZ$dk+cfF2LGd2r2hE|n z?{Hts=z&>WUer$KU@H=2B)QF6?hh41=j$mTuc%aSj|t-V$Y zKxdqcq^KP1e9N*u`yf~v)Q~t}GE3NRxWmfre;X*~4*3xO0xE1^^Qjra>Z+9ql5F$& zyxku(9KFT{9WwB%5Lp(-?+x#nv4S;t-hWJ$ZB~*pbse1{E#FvH+U?{d@_5!;iA^^u z287@+8g=BMmJgz{Y3>XcIeQG;?EpjJUp4}HNQ68q;o1z59h)_r7pauqE3yzAc@-QD zTwk-2Y*`A*pNL6*@vLpgDD9xwbE$DCVcTcfDBb<#vL1%<>`?KJF->O+Kg0N=geSPy zIm5v{AAT&@amQ?QjsWwNC(5WQPfq>t7${dmjo7N{5Vvg6b3}fPdka%t^-1Y<_v2=* z7tK9z9~5~ZjLx3bMz82z=E@-VK_`b|76*sWJ?DwYaI0cq1~nC;;6S&f+I6UMsbDQyj`mC5XFX zw>o3E416_UEUf|GNO*7=8gWf@v5!=#^cI~rsjH@Zi(yz?ijBZFXFsZv_!GebM|)S2 zN5?@2H#kU3D!!Xm3nxtjfB&1lwy&JMHrF*eq@MNq`=SzRv_t_Xb6KaQ@uQQ8nrDBm zt6sA{v8qI(F>k^-qaj!VT@v)%L*S-iWq(B)La8I&wU3fdXc1XkI&m7IvvuOVr}TJG z6A0;+< zr4MmNYMAHYPgb<`2Q;G|gxpy;@0g@_<T;{tB~gwrEQ0y=O(a*)ybZOF-@$ z@c83^!e;56_El=JWM8_gx0pLD2WGs541{Q1cUf@{$hzVWt|$<55Iz(WK4Ig+e|Xfy zumahlDj5=>$va>8c+80swu1-yU`s+1(@Q^-|qwA7mMR+OO! zprABnQ->9LrF8C)XH`~msF^{%n$CG&$Vm^F!?N2sy!_RHR)w3hr8o~)jR$@u*}=@D zUKEXuITUe4+|Nv3znQyIlV*TRenVb0ds*bZ*drj|`o*ZIbf)VtIEJ&EW25qAr_l>F zm#OHzesgwl9a3Op+WEthQ24WLRI^k!P>r2%+8Ig2ql{G$TSt!Db$3jRe^IB)iKWdg-P)mK7V zCBXR*vJX?O&qEMcd`)+*v`SQ|ZqeFeZEe^B|8O2FQ7tkw7R)qMqoi=FPnh?NgvU_5 zLm{AQB}E#wyev}EB*ufEH!7{k&_8htT6NL$l8;wIJ&UMx>fWL z7Z;twx=$^#8AZC0ars5AyZsgvPt`db|DkP1V$u<~d@Xp9nuJSgSiwe*O0f*=OO0>s zw~ON?KYa~89`BzSNpiAYOpOg-mY61=4hiE94#*pt4a7w%(bI6cl_%2e1HR|Tj*F2Q zXUknQH8Z}VEsNK?%KlgB<>G$5Rt=;XIg3x-$sPDXlI&(#m8EI0jja^>Q63|VeUz}+ z&syKjmF)ARcW_unB%vMad%rY(jz2q}3zww&7M8S7L)1c?eSj9EqFt-+Vg?*Q2Ei{s z^X^{xM1pY+1oS~zs15(-VnC73`C&Q4sjiJ~J^}5K*i}pmX^?$&+0r6etK-6qor+GR%cUCDu* zwd#$1`SlQoqr5YI-|}YanhEd5`)K^668X^= zw8u4G2(_K<1sj%Lq~)VQrwb_~w621|4J@*BpK}z9@j85d8bLmhsBp`#_s3H`3}ShG z=T&8h%AdB5KlT2-IZ;Kgtupf9qzq$R^@;9v;%$3|_;-g6Dk16pB|GlTRZCOOk`d@I zWd-W`ZYJsMh%!7m($3;4tcJ)J9Wi9ttB|lKuB&+DXSiN)kB{p59X4_ZqRZ#An{kuIHPdHDz+=GnFZ}dMV zQ)~yO@K(-1{1YC|EPU~*V=QP`y!f5I!^>3Yg*kKk(TOnK&*kLsHd11G&7Q8$q4iII zBKISFdJ6K8wCr1HTr6%HtCi({@WcS|y-<{W+ZPz_l>qUVi1FHdJMQ8!4~mv4`^`kJ zzcbUzHadcR_IS8$XYZpyR8pbgw8HbUxyeV-#pHHZ{L{*leMBKyZK~kV0671l@pH4X zV76KXVUgaOoQ5u#J{ZKVur5RU^Y!5L{F8W|5Z*hC_$S^$-FS-6lHZo^ei(<&aFi`Z zX0fk@@-Ax!$_>MFoQ`F222c7qre?Hh)+rE0e*$=fJYKb_$7Bj>ZXG5+tJu3gGF0uG z%0ZYw*wBojcKqR zRYf@7-S8(MD4TyvCb}~b=@ruD8{31$)bu1kTDe~%%4!=I53VZmVr&+NtyN88AJ37$ zhG30kmRhAlO}94?UO}%2Iz=^mGMs2hGn;{AZ?WX#iS@;wfW0M$xNpxZ>e<=F2O@bN z#7Zg*Nvk{*&cS+2DpCa|(|U*Xfg%kVM)hiP%evd9hW=kFp`O(9O{r!$iwX&SVp^LH z5NDv^s-1MlB6EyZv?47k@Ecjgs4(U4d$~4>8z-*r1MWTfE z!w&H`%n*zdp?bNRR~Y&o8dgWgTDz6yQ@0RV!{PLQ7K{JeLEj^2ETr%*Cea05|Bu^c^{%>0A)#x!Sh zm+PGqX#0A~P+j$R>gMJ-no;}!h(xkL%P&i6{U|1`Yt}HD!e2dmX5|FeFmoM4D8`{x z+V%=QFJrCd(Mt#SUEL-MMRE({K+!$|F^u4T?mzVPsz+rj~?1>f9_)+I@lgD_Xro`VC z9Z+G6Q1C;0v9C*mh^71(d7L=#sQ-)_N)HtpQDdmYld(XDq_p`OFDA*|#{cx&oB#NjD91_!;i z3|iB=@g3>HOQGUca}}4g^aw%TSCkDlO~Wo-Zz9gm0(ib&XgU$kwAD2 z&q3I1xG0LZ#>FE&o1__^D1*7Z`YAFbRjp)$zdL*mu6=Y+m7xq)-(gjteU`Z6tX>gC z3}WUE^`wvAsT==2n3jMqp_NFAre;|AZbNh0zCRlaESo}9vX6GYUOxuAyxDPvA8=6P zD?a|Yup3Hog>2>1t&cwKHHIHYhDRSchKg_7E>F~8T4E#evOC-1g(0IIPop=C?-?-1ZrmRij10?udU&G>HL#)GcwM}8S{cUXY3btAGkjH6U*}P~0Mt#XgATD{mhDGgW zU*GCLu6Y*JVdal9t2K{NsK>MtZ?Ltsin6MM3bd#}CZB5~6)6g&cyN#!avN9z5)V5h z;MQW@9oTZC+pI$ai8`lh2n#4zp*`M+8W^o%%j~0$%#~btP3RF2l8FdQnmLh@-8U=} z#Y#CY8S}*J)jI9VRN0JK*4I@H$`nc<#@cB_@RD3u0yY7nD|3Nky|+0{=Bieu{dpw@l-;JZ455#3+Sg%zL+uwnBg1wDg2)9~Mz zR=o)*0t5J7@6moNM3CoXte)|zbHzywrwE_m$es|b>|0Y6F6)lR(JeU>@(-r?Z-jzI z{dID~4`XEy4#S999Z!zK6AJRsD$cmOC+pQ|}IJTxeos)r#R~0cw4gF$X>+OOI ziEVBlS9eSLUd;K0@hON@srVOAW6;HYG=~mT`zhGer>`qt z#naQPxmuDtRg@KMS6l--M`T0HxQas8W$2gkkAc>bK6bLU%FTJvggSNw7rd zTd8rb3Q`gd{wyl)^?13_njv(^%(oaGb3e-x0{(bhGU2Df&0^rbRW{K|+|1YSD=RIG zv>Yl>4<`1}N7seSX;Zpn&fKYV7v^z`bt1wW3(<1Pv(Iwiq^`>Nj_YAElAM5rz2BP; z8oYYL5u+P>J8G1yKV0bzezmKs%1_7PX_N|&3~pu>DW>pNZ}3iM=j ziH>3D;L~vY4Yaq040^uLC(ZpXB-akbj!{UT%SlY1q`zpULC5F5jO%6jZ1Vq6MI ziGx9m4F0$S5XL}Dfu+|(WPWafU-D~?@FV}bB^B`qs zK_?-jTf7>U*tA=#xPf(HP`~w$so;U3z!wUU+ojWSv_{?UbfU@494yge7}9;a{?|n7 z=HzSmH;f_4z;JxnP}A^O}AdM;Bz}@8W`{)qdLkgdEb-f z=8fxyp0s)vKR8et3B4!{8LT7nn$1K(ilcXeHCq&cAW0Y@&Nx}aI0WeNOboOK8Ue-3 z7+Mhdg=;x%O=G-re>lZo?PxZ!JB*L$b?ShWcWh#^-lqg+YdB0z+ICU_$KH-P zqxYbFMPy9jx7|gWjT@*zv}x4xbV8H7>Z6!Zm+ljM9X zc!lW#8>0ut+uj(Kd@ZBDJXurB$H}R_z>WRKpbTkxbi@0-KI?f7{AKv*9?pL=xbjQV zg>A=0FS@cvynSLqiSK3d5kFq0R?Ht36&`VaKo%mh1`+ns$}P^?nGk`~UU#{Rn~~Ox z`3cAKh~|b{T-Po;KW?9-Y|2RgyZtKIm2rQ5{1V*jiOP2!hu#Pujww z1;{VvcDHfJ-D!m>9vVqiyy=!zdfuUMEyd$RXw|n;N=!Xcs0k|zBMyO*f`6&2Kat9{ zbLUmNkOAzh2`#rE-6)10_g*?)1OEglj~~X6DRg;irvMnKN0X3OPrhb-U>Z>y{DJ#o zZ@w_NMVO)!@>E;Hpo7c8!t601!5s9pxCK}WTe%hfx-Yz7|BRVP$B<00V!G4R=@yFC zEA>7G6)0nqzvg{Wot={AqDux7svR+=o|{nVq7X}3N@tSYB?&DrR;GGtN8WP+q%GO% ztF6=KN#>55mn*a_dE&;>zI~1I9i{;9nF$I3`P6^)jP z^0;w9wV8EiG2*0fUQ*2G_IPP8eP0Xfn&Mbb0>Q-JY&^)#y~oUj={8dsQ{y++ zjB4@OlP)k@K$w>Pfs3<>?(7zV3d;1y*e=qxh^Mc z|L*2in~vz{E`K4oH_m!n+M<1I%v;aMjC#=RkkPO%l-s#3?|v^T791_O|(asIut6H$)S3Y?!>ugJo`1g1?22@K3;P-O9^90oS;_LOljc1vbrb&op5Qut1a2qc5y>8`{hzV2!6oNdnIRd{SW5xg&9#=Y7>J@9IU0U zzEDhu(%YG<9EY!7I@@VzmY)nyA`DbwC1r7(lSo&nw8M|w-IQ{*VAqs)$sz7Kzcxg| zB$R(G$^)27zS3DUgB^anN=R4|vd^!H;k0@rCxli9o(vU96y~xonwNLY}T7mj^&v*x`5rk2F9{&wzIuNL@W_Mutrzuz)q z;c&}WYUld(jblm_S05HtnMQIqMt2_T>-AfuD&TWySi*2>EEP!$s^r*+aX8rWICM(= za0Xo#KYb9e16E&RST9yA?j|Cg+KltdjaOxj#D-e*&z}^%j*oJFVt#~a%>RATlI#J( z8P|H|c~6en1lU#HSB2U%Xtwoj;CRR0ci6ryQHZ^Nr z;pM^WNVQuyJxO*#%jqOQ4))Q<1(ltRIj1tb1`821-v$odfPGX|p61p}0o)dc4Z(ON zB|e^gD!!!lW~W``3dZrHtds6#;;+0A3DJ#{5INKIoT9oCe!q=7WINrEyI%ANkkn3) zyLQa$eZ$IiyW5pv z6SL`F+Yv|6$#VlUg)b^Ok2*L+1OvT8a)r0D#)rCnRCv6QDb7-h4n=+eZZEz}iHnE;bA`G9H>`;NPof(_G2@QxTK4RBQm*FxeFLUr<9Tgo4< zsTg$>4py;g*p~dvsx50l?!yGUDVzjbn#kZ9@fFQ!_zAdc+vbl=U3ym5gJ{FQ_1UT~ zFR1Cf9jo=M=EMf+z?zwMUGDr~=H*Gbjad&F)`3+X3E-4rbkpv@HIQV!pqWEv)f}X9 zCdO|)(k!@rwk^c7nKR&kKq|U(f=iUsX46e2=tQA6{HGa?yyn`;Z z8LTdzNjF^;nX8L(Q<_T36msb}IBXDW>R2*g?wK^GAclEEm$l>ACFW1=;A!}6^wyJD z{FC=ja`qDv+)s?nJ~xOAWd4ZAfQE>smxw{g@aZcdf^VS}OG-JoqYEiPG5!l6lp5`; zhr~?Ea9KmUaHdga#couS+{-(Q2I;TxqcvZ> zhfg4HweEcaj-%nFfXCkg@9KHRnt8TsoBaQK8*Yv|uyVbmvus3(S4z z>**s51TD{PPG$#}=6Y9?C;u8DcX}gz9cMr1UawOP{Zn(8y(guMfVHbj<&5RMIh=7vxrX+Rg4UO}2GPKH|Ln>Q3lj*1N!SefD^FpE<`y9|G0~ z)^GYN)A@yiY53Knt3ukfw_pbt5boKp<^bZkGfrYTJvQW<$yXP4Qtc<~WT&!LYe;5q z!f4N{XGA8Tgb%ArBsEX4s6zqBO<@+@;Om>{k$GkOS;i4OvCV6^(Au<)TD-a>)kKnL zo*lAhh6%YQ55;-<1*WpSpC4yla`#6@G>|1aZqAMz>!*LKdh57zyk2ar7zeHSgq#;0 zT9iHg3z&Z|IRB@?+V3kj_1%yqk@UNa7$*yol?Ld9&NUWGaBk#{MSr1SXD2RsAi%F^+)}jXMRy9*hC6G+CdN-(lm^d z@*j_vS}M9Q()Ss64fR;u@YPEa0r%`C^7Hknoh_PKTEf)|ri3P;y$6^*m)=Bo&A#Tk0(}f8!JKHO!Iu9vhK8xlU_%1K*{DR4#v|}zZ%9vFh z8f;dUp^6vc#OjPS`aWA2GB7d7lc1)BnAs2tm@J8hjfo(5h=}CVdNLz&dM@^b;k2TV zGMQ&*;b2PZMh4yF>nu}p)7K_TOS&q5B+Unb;!`V8TBK5`sRn92Y0%UWlnSyY%L*1^ z+T&Pup!^*^*7DxWT^@mHpi0xct3P!bs&SnFgsD+mn7x%SQOR#q$a~g z7m58$Hosu{?e~s_P7YJ+?aWG|)D&yexF%rrSnJ^&J@tT>1qqGeS>H!n0IiO*?b5bF zZYI_2VIVv0Tj>djUI{S{@5X8!N^Gke!=1IBkfZ2|S3!~k6x_0hq;~qAx!VX2_8!c)K*H zXF4$nAyv8aq2<^`nQ4l+S6$n#vXTLpCFf_07rwHM!e1ETwuMQ8!Hgli1OIH)*RBp9 zYLXJ0r1apJ|N7ISW2_6RTYK1N^`A*ulK}ttO}Hk7PA)+;Kkk!qh(c)U{!>LhLxHhU z4;8j)-Vm4DiBEdn{knUI%9`4Ft1l-5pQ47$Hh0r4B=9LxqKsj@U@HRu%-S`%ltL{q zt*ngpqzy!cyVp?$Hr*+c(HiTpgZEs5^%dJv6>W0ON<(ZbEBhed5hAQMCTT{`q=l?J znWrUPa>ZEF0v0XbTC=l&4PQvHG#MpKtJXu6<-$}qzLV~;QxaTLE2C>uId>Y*jT)*Y z7+7lb=9wDb_N;7U%sB^*zU~`^OG63M{x`p8L$?|6G9u$gY#h1D7E29{g$9af7YS>< z!VaP}P*KqPlkR+@zLZS6^XYD{#qy4BmKY5RzsD6VZIIvHk8yjIN?&Jpo)SOw8B1jP zj0B*B5cnhZqu23^$y+$RTi(7vqfp9p?$VN(t5fC7N!MOkbQH~__$2Msyd+It(!jm4 z6IAS}>9w6%A9xfU8>waK*+ZA*534vpO19YF1M~W4Nrm|uYS{~*1A|88P<&3>tr5I! z!knSacWd#>Om#O`A`^K6`s)e=M}3; zv9-;GjXV~pTnr?{Wo<7gMvy!Ss>H+IE(1TgOm)S6&??bT>}NKw|L{>!nfZUHJI}8s zv+wOYGtP_+9Sb6eFe;%J=|##{l#)ae3B3gc0Rcnr5Eu)fRDlGfMoI_)l1K>%1duL- zBB@F!(jft)cbF%?x6gktSu1buwX)V(XXW1eoV~B>vm-Ncw?@{^I0p#JeU1yx(f|4d zjF*4i-G)-BvjDudvV4&DE=_B}v|u6WQrro?Jo)#y2R4Q!jqg;Penlp6qsLx5thSMA zH5lm{0)OVK>QBcqZV!$rYL*(5RjSZv)S*Nrkt}z+`K|1}OiohRya{6s?6erGla{mB zZa|X!6`^FhuZ->FWSbn!HftZF_mlZNwEx&A{q+ArhECn=?J#TR5GtLa(Pl4jM`7=U zPR(EhLgtUopWV!!D_E1@xBbT7WgMSTZgz=z>pR+?0Xf~&$UG(9om17}~Uac(RryMa>T9rMunW7Kf_bG0r zOz*nO(X$0hI}}CBfU2V}$?6FBcf0ULKtbvKj^&b_lq&T=x*?rwvN$dd#K!{e?|zy^ z9rfMe4JbMqH#^?LN#vTjm8`DKuos0IXUACCCZNEe&73<)w>`khB_rX1sECb0n2!$( z(V(&MT_MrOLST{PuWD8tc^|})6-hqwswx&qu&pc1+RC*J1nN%diI@c{V%hhL2Q-5N z?FnNunKvSqLAKGS<)ukMFsGET5q8jW{qM~KjA=oTx@7Kh{}g+{mqZ!8dVSuwE=ezV z-YEW!#KfX*mUC~xE#)Z>tSiU$Nz3vivder&_4gr2%q2d#Bd}@bRJgR>C*h~3A$wc zr|I8c3r(p}`>OvvF#@{MdOz)j<1(X9f2vs;qqoTC{g$Q#qHaa=fPH!C2E1;6G}xyif{IjO>G#`Hu}}k7yaopH&1p4Tq-5I37;AgaLB4(D zb%c!cG!7%Xh|xHVC^!H+fc0eD`Ud--z;A{LOmSj$9Ep$6lR=c?w1qvPCcERtnmdE++)GpSBGCSNZaJi{`0HN7u1?pESsl_{ln@5o>=Sz9Mq&m{r5y54%P zA!rN?Wjq6~B9`xx&5Q;wCKby9x1rhcIk$Y#iZ)_Cy#|*({JtCMS(P5Z5}>6zbwPJl z>fXdPPf6Cucj;2}+t82S-mXv#l5vv}R1tdo&)e+>EwL)$vM&MtOOLV)KW+c&cS-m{ z(XT}=QCM{$25#}O&^)B1V+%rAIEWk{%TM-M=Xt!qEPmfp(+!cisA{s@* zXajhXTc({N>4&pAwA@Z|b>j1^Mqcisx)>awghWg2d|{N1Z5Cu{UMl|g#J!T1y_`4y zu>gPK7wLcgeD3E3icAEcKg1vAHtZ{ zyT8USvKOk%TL{&_V0dXXI74ihfFG+lOHt44Aw_+*Lk}q5YwCSs4R^x05Olt*QVymP ztv>F9*49kg*{=DCTz4Hg&c#2olA+rpp6xT=TPA7mwa5fJU#%=inwRMz(X;`1lyGn$B!|R#sLiY(U7hT)=KM>6k%mi3GsE?blTE^U zGSCRwziSgv-g+H|HTm~MZAR9jddtAhG#HUNx;O$zLU~0Wq@>|((puL>j0|EoIbr3p zvS_g_8Jb;Q73aKmBLDR7I&|Zlo}scW7?<_pyj-iib63dTjtW~~YtF2bII>cs2cJ?- z);9n6Va@lxURDzJP-;3=K4f{m7RU3pczso6c*fbXWtkeRGgxeAZtNH~^^VBiS7YiZ zzxE%#x(owdksXAYC)gnW)%5>=%yS`Xwi}T@XGo@O-20GL$a!~d6{K`gjKq5lY&;(Kw8E^ zpR>#F7d}1HpLu->f8_^0^l#9Efk^3cX`tIJg-NfyFrto$!lr_{kEqmZ_=;zs$u-^0 zrQ7;z4<`e)Gg3z4q32K4B6u9M_R6iJxpBI|hGlDl*Yd9e7N7d91#nLrf-q?VEs<{9 z-wynp!TP0k&eqhyvV+63@|fDb6wqd78LqRTyjWt|i_ z_i9YFjkLT6u?ML1EnX-D%Vq_feAD*3k;I9U*z^a)w#$7` z85zq{5-%^kIGqlx?Fz?42x5&(yzU+NaZ?i>^fWlI6ht0ED8%dKUK>Uh@rr_`)X6*& ztzYZ{5!r1&JA`v`pdQRhNt0xV6`R-cK9={%l@Homr z>d@buow0TYxOI=uVadJ@h5@g$p6e>Tg3FMG*?=KqCa#n@N9S48^0l4II3YRvft_ub z52|@}k)s?YFKZNj$etYjKfuOUc5gz>Y(#%c4!@L*gRHDio75I>Qr}AH(4yAjZeJsd zlK7_|lDum7WKNTI= zmP<=jkTz26y`^xg)TQZ#`wEBjU{>kXLaT#H9p#+2bv=5VY|P4?4VJ<6|9j$=B2*z zoa{&V_;rKW?S#y<;6UkVHfuI@NYTp=WV_~D*|NddzwsP? zbC7x$ttEl^^=#G6Eg3f>dHI)r+&cxblTEnwCr$dyhc{WqR(vhs8D~1+cAo?tELF-n zi=)&r5n}l|O$dCLm_wP#-11uR$d}D>Fk9ZEf9TQ-{ie8DlH3Ew4LG92eJ8q$EUmw* zuH4Sv?g<9E)h2?XS$2L5@mi`AU&tybIbxd_j?BD>PVUUJZrb<#YiqxkSg#Tf{c&JW z)|nXB5V$$!e#}!SXUe=lU^jebn-^yI@R{(w`DqWz=xA^sdhvzJ#il%_JCG zPILu7@MMa*iHajfvwl$Tl6KEjQJq%z4Jf?{BNVxGP3yCGBN=LI;AePnj(2wT&?}}( zKHW!e8dhYem$1grk2A8QHvF>ng!tlA?}bml8NzyDwzu@EZPFjSR8cWznVvxWx&l1; zp&a`S{qtssgydzhX0ba5@3)p)hgWV3qEP;8K#A6S@ASKx>{2xWMq@#D=6V{JF@lsu zujrYHEXoFxS&0y_5enjS;54hH{_&7nE}}t=L7PkD{a}Hu2fm3| zlLCzg_p!ioe*H=Y@TahJgA_A(Xs>kAP}h*VK$Iz&o0ub`B@Z(YVI>aw z@qsc^gwDqKqO7c#7Z>pkw8ItY4&ALM;)%LU_3LW;qefA=N2fMC?N9oy03ZtW;GJGz zpftG6;N0#smE?mPZ(%maJA{8F=60C(iy?bc=udqW%8{Ve7_TEKc1flSqcxH7v71#? zHVG50hL$6A#rA9So4W-69FwG7{$sr7+v{p8b*hZgmDS#tvgjVe5?st5tZ?gxHJu+3 zjkfb;Z1|T}jdU(-O4iKCjdE4bYu0{oB(|?T7xx8|gjI4=3INMDIFjX+G+(=1AOE=n zz*dS302?=UOlo6x6J1DXUwNZFMP9Yais%BL+eu~y!ju;3Y%3?+WTHX4+c6R@L5qU~ zTf-z#9td;?H!Wjup&7}iOf>2S>0KS~)~(J%HqyIA=MGx4m_6xm6AJ-Ng@>68MY}=O ziPq8kT%(Lt7m{|zc`)3roVZHYR~(Xa-}XI{k^y?MtTopn{Gme15}M{ zxe~6erCyQYa`Lwb`bsR#mtNCZ_~qe+IrHZmdM4W;S}oZSPU%>LC+Uh?P6^8G_nAav z&WGj*1ky4xSeC+kx-lH2uDow{RK;s>FJ4#Hzv*T0vQDEuw7>>Jiz4;ewjW9NDY|9% z7Q^;Ux#b=4>I%j3mdzv)+o7;h&e5qxA~1`!0E3+Ruf-Yucz_FpGu4Ige0x5{5S6i0 z8d|_&xK=DTt3JXhy7~K_Nj?~{I~Z=0YhZ~bN6;A>=PJuBA=p?CGbL&Lsv~&;s;j2R z+b|(spST%kC&&F^R3JR^QDX7>!Zy9~G zuUK5Rc;pW$#-HSSu`<15-v;Svo;li`?4PlL?ftc%F2Jh3^UCS;&3Cakev<=_-v1x0 z=`qUWE$n}$pCu$uoG=9~-IIAO`+$fAfInF3+gLJ|b7KBI@rnxqmSWsLDqK%ifd$Lk zZ)1q{jUO@{3nel(Ruv*)FVRd8w5S4N&TZ1S*{2>Y8(2gRW>p^)I7z2~rR^#3!I<{E47v zV@1>UeBNHL5-P-sIdF=Bvo?p>8Mk;n=to3Q$I8~Ete6S_MA<^)4d&?}KLVtLrSJRY za|IbTX^Ac6aOi_h&BBbW@S&%p4MiBAw`ivQKK>)UA4KsN~ICIN-um_WF7XEBdcpoVXY*M4Q&!&_DHus zy`_u4=A);Q?3oh!oiP|19LY;Up`Fsk|a-`j|dmb~o9l z59POq0|qZ;sjP%~5*@HVRgev?vRRGYIQ0Vz_+wrJ#@7KRR-SX1w-O9wR@?yjT>T`&JVkwJQylU%FfFnOU0Xt4x)j);4Vd?S4F@`-c*kY1qF83fepa;J3tDko^p zs(#vI8tKY|rpr?gl0rAB(C_n=O+w49CfSuF(W}uFTAxwtE^|M zTS2mxJ@Ek(WdqVwlJzQFq9xV!N>hy}!viB$N`B%Uj;^lYW#k;mlARqYp6x%BSR~sR=N_MnP-59xiyXWI|NWl}HYd&` zcPtE(6f`54bgw?yltN%vpaC`2DmByWZu;~GFLW)^ooZeeR)MfqcTEjk`ZN08t z<$dcW%X$e$ggqS!=BQUJCsqWtUca`{af9w;{(^>~t8s(f4rVUD<_qHj3G~1R4pq3m z(rMpQ7fOxK|E$+Pap#ojo2UQC^uRux`rnDu{AnyFiJgVoveHg{?H^9$mx?Lar|Pv< zriM+nzCgfWgg31SlLCWt)06B0MLi{S`rs8sI*j(`AwQ)V{ zpNE#m8yITO*xdEeNM8F`oq=$rXWfnhNZbqyDveQRntOnT=?HwA;g#ZRJw*$FW;(E9 z;%K={LwOn=dZF0&Qi^z&!N*0OTu!L_st+Ox7WKwDM0bT$faeMM+S=_64C zCA3q9jGvIu@CpU})a#TsFN6`CZA2`mW~CGpWaR6<_tftMv@|!gVAPz(ywJ14p{cr~ zRqMSp-KWeOaUHG25Jxg8?|BjCA$}9Hm-p`p)jU~RkBYP4it3NiKCwtIpHS50cIsLf z{NED|GriOP+z`ReOX-KIc%65dcgh{UCLu}j1e8ryHS&{F5uK&k%-;w`CE>~n@d~Eq zO-ZrPA>QbK7JWaI_t$7-0(rRz40&nIx|3uHD;5__9n1*W)gt|-K$r){#*HN5)Y5rV zNhyQlS8LO4=a55abjhI%;HDxn<`};rWIPV+?5_Bi$NMT0wk;C5mEo?zVz;J_SFSw00SyY>62 zamn7BM=;ia+s*D@hJUx>#DM6{VP^a)xV~mL(RTBS#l4y@b*EGkwo<=3)AP1 z?_5G5Z+|V)>-!37y(9tReob$4*oR}PjCGl}n&-mn5F6J@lMJ9mT&u*64GqPK4|oS1 zLRe7mT=?+ubX7vkpB#(IbaSVoB=|N?Z34DYZZ&k*wk_2%Jgwp{W#TPwe-1~wOJ|QPJz;}EwVY6h^KRG4$!y|mQRSbwAF41W6bLd;(`~M`n z>r(c~7mVZN>u4_rLt>hJ_$Ru@8~Lp*SU7ZMJ$V2WRsC>^c)=&0ywk(V|&wA!A5;7V=JvEG-ZLx&nZ4@ZhXygP&?7{lci^+xcaw)_DZEnyd!;uE#D&7 zuxe7?@r)dL-iXK1Io0-eW7)}fUw>7BoNoK|7p-gjuha>Pm*!g60M{?VxG>A6lh^q4 z(n}j&=DuJGxD}u4EUJ1s1qbRW(1gX@&zQ>qXSWgQ;N``sY>ZW^o=6%Jd$on(2~+8A1>Le9?d~WWX2;s%+*2i_cTUv2H_q7t z=V=Vdmj=Cdd($;3f0#znAl8WZXb7onyV6F&7MWYGcEZCAnwZve%6NeJlpSwvB|!Vy zl&jfNz|ieZB>xU7%{SF&JRt2)`gjr>W3OP)wPs;IJ*Bp$`GW;O<8lPsoQ#*kbuB*m zPz$!JF|jxtHqFqOyjpc-q{CB5)Gg|J^0c1**@h+iuF^YPWKVA&jbI|HzV~F9Qn{sI zZ-%_?{LH2xvCgMb8uW;%ju!NX=>dGbg<>xRmFvg6hDVvN))qrXE~1JW(%a$AO6Lkp z#~$HiAeYgR3F-6spnQi6GmYb)aTnJr!uvL4&?O3_Qd zPzrq6pH^e#}&7z z$_J|u7PD&2Rfx0KbesjmQO6Mef1%~0D_?l@F6(5&dh436WOkk_Bml2yYpl@coRjr-p)n()hr&FJ9CK!DcasdqNeU}P z`OUielvdR75aTg8M=Sr6RKrdS9uIP4;LO`o({W;n;;u2OS7lLIZo^lezWDE*ME-BZ zve2`*sQkB|n@8$3sKpS<9{KD!2j&LKhMD!vpSJS+{MnVCTxb}F@u_?oH#Qa9?ff9u zHjBFX%XbEr3V3yk=5t#Hln?os(_ySCj5k(E>~|9c0KS)2M?SCkWcJHjZiuh1PsFzB zqDRP)+tmZ3*5BssMbYArf;19m7sRpML;Ez9T2yO@eF7U)H|IK@hnI7oQoj-u*&i!h7?%XA1 z)L$i+|M~5=lP}Fb{0jTkGU6N>yOi`7>V9RqTHPe97#ZlZUJR+7PMuW^R{ZzG`BLnZ zzyCfzQ;ZYa8$opk`M^pUlxfF#Y#%K!~ke1+G0SMkg+ zzMh$8H)_2llDK7_Z}oouf&j8Yh7^uNf_*ZSbn#`De(=%8`7Gke1FL$auPHBf%TOExoi1$XBvy zU#mHCw(9+8BfxTlK_w>6`Nb24bdv+#0=gDsFTC#FiLYMDmw`fC2xePwVy&LbP&3JU zrR^0?Ie*!! zW!f$j>b>#CpZ;d*)ce@@PebEJpiG*Z!c#)gi8qykoh8Jx5~+k!4Q9d`$?mffYv`}F zi*a&nc!1=e_{sE5DeSHxh_*}8K`-evGAKEcilr6=^{GNJw{WxuZiySC^ zelGNGkSl#sGS>&jZ`*vCF3|EB;uc3(Z(W8}RY78}G=*+sIQ!>cOsD)zVSOj#ISjCQ zDa)|k`;aeW~8gR9G_T1J^urcer*&4L&?iBW@Wy>=Fh)dbk zx8*T*Z7BQCJy|#^sH9j}>c{?*qxp(^1n)8y!8_1qVTVEY=l7qL&MGKH+`ZNqt010X zq9hWtY?1nRB=NbExQ~jJ%(U)s;$p#fCl*vp=<{ePXk7CWJ7)mN-@^xxUyYcw%--%t zo=;JYk8hevp`OIP%LEmDe4Bv$$l1L_Z(m2oeZ`y*^1+kNk99U@OSe`Y0LI?Ff8B!t z8aGdoNq|9&-#XShZ;EB0UW(cKxug+GNSa@^>Xac?&#l504w9WZE7;|uI;hJbtkg`c z!=7>H^KRm46&dQGWzXq?%~U69=O@HlY45)fJ2-P>Z{}jJ+n%_Y3JK3xo*TbC@MWS) zeLL9r^yZMYU&SY~#8J^i**(jw$^_tU5l)dba5`97Mfc(>DDgtGwB)ehE!10V-lm*f zr=B@3p3Ns?4jA$;F>hB>{MoH(n>bN0DaaLFm|;5_XavwG$<(f4Ch|-jp#{y?MorSq zb5LvA_bSy&J|2YWW>)A>(s|#$NQ2bz_aNuNZBlWMF_+2Yx@?x(-r@*>nGdxa02L<$ zF3gIp#i$KW%|834`;f*wvyVK|)Q;Hgi#1VfVc4Uh!!n#ty?~gN*m1ny!gX z`>qY(m9Scbu}JUGuW?<34Tx+ ziFf+Z61{@zX)jG58J}q|Mg0CQ)hYi^&0*C^U$a5mHqW&X0&-Qh}E2ogA3{y&C#0TgnZJ~Vn3`@oV|}Xz0jE8 z{kA(_#6K{vWZzh>$z!Clfvd|OD^sL*duQnD($x{V*ZQcVNx_Oa()Gfr!^7l|kb6mu)Io z*KgOYJ13wfK>O92sHWG(kj`ag%z=0dSgKmXwKn*dg$(NRP>)gY#;GV8fRY61YwMw#; z8}gwAM)Ucee!&Kh>&Z+dB;p|@k@aFW8>`QTQt?ky&sk5y2BMY~Ra4Dv^b7#$OFZeo zzC4s_%JZ;2;jY*T^#}%@1q;G*xd1l0%cDMb=v#ypLF#&fg?Sb+iiRLoryt>wN#FRI zq56MMBnqugz8t1|F;iT!n)Mf&zArZ*z45McMXv_IrLT&|9Bj?)<11{GfzV5X_O=JB z1$wiCatmscpgW*EXL*a28n*DkLv5WDut^+fP3D|e>HA6_LD{d#rqs&7J#d#te@DGO z&i{kA;B&5dvCaiSX-l+zb)r)>#bR+?b69mn4kQ}wavRoCBJM>V zPi=u>i5Q4QX)#EvpKCT}yAgnlIH+3H$C%F7hT43>0n8wiG9GEIl{HftgUXygE|a)h z>LLZ@xv1wq#&3Tg*q)2|IPiR@KDkKQT3_5O#@~vey-aY#+ihno>r4pkmEOc_Jwg@Q z1=1?a=y^8A8MXoNelKiHLnZwsN%(cz6Gfw8{9Z@Rjsz8cc5?GGKH#|Ka^Jn64T+w zJvhCG#@$mPp=U}0iYDqP5|oDoAS6%fw3}I=#6B{6T`pqr848SFp-CGyGoF}h3jGLc za83y0+mP!r7&2Y&pZA_Cy=y$)EU06J1(Nf?BSz&rhzWa~mNe_-%Hoc3ADu8M_aGfL z0&W7{DrXf8G0oR!xsP)d1nvX1EITvILi@VUj$?wUDP#I{3C3n$@VML~=#7$ngS5vD zG+BpwIezTbog}v2%3Obsj(-~wf9zfZQ9N()DQCzk)!o3yWBXd{fT@l*I+Qnx3man* z8WrNcw-RN*Wu*K%lmzN7~( zhz4Dg*7zPR4fSLSq7u((dtxXnO|)BaSys~HpxzP3J*UslFQieD^;l_ZSutV@zUFA&r zr;^zpSTncQwB}T_0|bkY64`7x{KZHF#UpyD-?rBGN4Cg)-Y=^c25u%POkPBl-ZH9Ryv($BGa6<}7Z zL91kncm>#k@vF3;Lx8rt(e1IwKoP%LXpxp~%fs==Cr$BJDbz{4Q>31FH6_Vwu3jy7 z=>BkIaQ~>yTQ??Yxt4Qghs`VojU+kFYwOD2&Q<6)d6<(p5J6mqn+$o!vFI z+1$lnIKOQel8Sd+6hV`ZF;=w3LUk=*IBx%Z-=xnz-#~v-uB*KOdrx}wkrTa#1)uXb zTv%_)TF!6yxn0_XDEG{m#e?9Zs!Pn&q^FdBR%WICM8RwMB06iD?{_D5_CHI=3EWSC zGX;gXfxt>*vQi(;;L32ip-*0o(DxU34v8V?%c0{wuS|(k4*~$}jQN?CGWo8zI*QM)!rk8zeQNril524$4XGIXO+y(Y*7}8%op8mt@+atVdr4;PEdg=7( z${>8-zCjl32%c{W!Yab6vP>{y3wdc{bC(5%O~M!?(e451`D+>7X93&OO%3dukP>|R ztNM&&X(bO?TPlxT_;O^7HDt3k$iHSwkgsd+HNJ~E@0i0NV%^3a;x?e8Syxv*AC)gM z0%9C09brT1D;`%vndLnHJZ{%;b9GW<8(2_=ir(E^yluf_Ixxyuso`A`M{7s}u!?|z zo!=+gv`o-z?mfyjMBo^^q1u1$l{GdTCzsIZQxPm`#7x%4O1sHV;^sNxza~e*8e1lp zg3kowj2j6jj~+GzVBfcldtw}#I1zOfnI&#A>Y|zjN9O{8O~D#~$cGJ}T%5dz+&AxS z6?Afr5x{r{RAJWJrK85J7h(p0RFKF;<=`T7oS7xgngaKm!g97Von%Y!?is%5eX6Iy zkGe?=rFF29dp{@OXWkZg`fF?9_K2)?BRTT=+eU`As#rATYkG(6-cf%ik>KswIJ=VN zpA8zXNb=Yl?shr$#BHd6MbP{*h8?q>kA8gOtHsQ_y)>V#ReBg*i)mA)SmG)cg|<9( zVoX7_0RMJ`L0A1+Qq^JlR<-2SoGaJkEnN?Cgws=BY6y&#Aj-Nxq8UAomBH%A(|BtQ4nwr&zKgSOlDdFp4=_3ciXD2F*2V52qvU zr`y8+G!Z+xW3NlW*Hz6pZ=*ZC9KjHR9o*;xpatPKxSep3ri})7G=b!Cr<}#;?el zMJiG8&*~Y{*2R$KQ^pt5dv5W57Y&Xx(CiR1{T8KChkIg79vcIVSPj@|(;CvFiwN3J z0)U!vbZSS3(_La*fkTM3T_MH+R#awmw?gq@Xwu~vv36{;OxH2@)$zHt6LOG0$XOP7n4}@D~O7G~(fl`y*tDd2NF}UxlNkbtZk9Kft8#5aY7Q-KPZI z>@c|8bmdJPYQh_iE@fAgKZ-9$F~kWu2}9LYS*ujzaBy}@Re1E&Yb|&l zD|;lOe@@nJ)nENCHjUsnyi^@53r)`hXuGak$K1brgyeliZrFc_N+X4&C?$YFl*{-fQ5flnjee!L)oy66pgi_^&dZ;Z1pb5d} zJ+&MqI~#!~9;aJqyTWl@6121C&_=&H;eGhLGX>+lc9+vDSaG>s5Ff=hU*!?{c z2N@SpP`D2+FDVeTH#@Mz&J4E$fAnhT|76rf*MJ|AuN+J36f*j@zp$Wh1L9%a0Oc66Qz9q*|b&0KG! z7mL`W@c@EJt^Rl~t4|*r_Z92SXn3N5SZ*M6Lxv#f_TuO_^9pOM+}Z1i*@KmsDSW+{^+p~kH9L2ikO~B8>I?+?2c`SO zg3JPx0<&zsXV1!sXl!%Q%^=Id*9|gXfgb&F1vcJwhVhOd8jp+IO{_SXtd!+v*zmxXuh!=q%6pDJT*R1ZC+ zM~M(M;-pBb9-nuXe5fjM{9vWR%^%BziZbZD6iP!!jIW$vzUkci(FsQrmL)^!rkzu_;;-LT$3e9 z9b}8eBREocCtt%n{(QG-3Fz+Z0=;2#vD-S?B&*#V2A$a#u1oF|2x&W(EGQ_RID?wP zKovcXC;VR+*Cb_NZ0GU*g`vK>vYuTBhY#)iU~72$1^{NnU)-jaT8O}PQ7Vn|3I#D@ zmaCYKlaBs({VkoIl#(Y#3T0dmr_ZIs4Q?;Y>5+4hqF0F#A^@K1cg;L@r7O1RXq4WtDS!%@D zKQqtXHNR7N5Qy>6h}H+FB>EOb4Hd!N^sDvH<(1}a91J9f(b5zM9o%g}jb-dvdj{7M zcaD{?2!NS21R?#iCcaQ*90L1f_^lZKqFM(B&KL|8^oAKqI8Z660!%Wudpaj_U42(% zLxTQ2ab|G944Y@R5k<2d>YoafyHcO+>w>vpc30na(xj}ym%G>p;~P()R}T~OBO@|1 zR|pX(%UjhGs?KG#<6POiEWWzF)gwD79>d>10fibpk^C{ehI-x@a~3_rx{WTd3wIrD zobF#k2%N{Fu})xE{5ETEgE1FH!jV=C0u$^Tt^}c z@_#cauHP&$ZgykZ4Efu1S02{PB+g+(GOzh>CiAxDezPC@U z_niIXseZkUc_~J2$#o|y8&wdocg1N;TQkn#|9mpR5-68yP8cw}`mb_W@O9tKA734P zrv~oYTWt!|_+jDjF6OM}R+OmAkhqA}XWZH3-@IA<@F#)c&{FNNZFw%vGN5<3$TG3k4KVU&(7^*vp#&bkRXSofGIrRYm;W32^m3)AvEAf6!A#J=lvquw5;!Zm7s$3Pg1%+)N6pR4 zg+u7YF^gvF#$=`9QQ$hh*Clti^|z;p0%5x4;wU%xrXBTCl1vF5K0oC#LQF2*co}Ctjp%fL55yNaT9VwWXA!bB=9$Q~bnj)Q37L@tSUdY6V+rTsdrelLE6CZ7 znBA?@(lrlDdgfK9S?fHt5+kTtaMYazGagTC7vl?EBkdHJcvtk;2&FR_7s)9QBU=osDR z3Uu%qsmrw@gSZBuVnKRIbI#i+K;OS74m)%RZk>7!_N-&JdGYzD+yD@mREJ4eN1CUy zaOdeDl^%DWJ#P`GGXeJb%lR^O&2Bo?;7lj%@NUr0pSm@ykms2C(8Af>Ub?1oz`Uqu zs-*s0GQmSw9w%N~H##CMUmNtacB~c8xi?(ssbf`i}JKo@sg9yge@oLl1 z^31zk|DJew{ag4L9si{6#{J*%_vB|*NAKNQ3p{T*F;mBip7>_(Gm^*~4vC(wNr=p` zCOu!A&IEbZ3%kv_4i#?I)HX4QxcksLbi_xqfl`zwc5D#(Jpqm&T~NJA4|38Oyi`zZ zAIelo$9XH+80PRWh@PC{_SBc~he-`G&f+ozclcTFp{{A>EOC#El(Wn?mEb(;VXivg z`U#3fSI_53S<{v0@V~!>A*Rzy3;>&9-m#3=?eM#=_bWz#Bcu&~SXFP~qgz{3t96U@l{g#t_^jdLd z8feLboEPZrX(Ru@jD(XkAXSF8SV(@ykk#n`^4eS*;W^_i>-(*YBbl!|H^$>(0W|fq zi5>=|H++tLgOc|fP6AkkCA(f(FLespoPB^w`h9x(6*z4hu@{*cg*W>TUv+fxtaCI9! zxBGhdIAkei4X5@ZbsWJK45PLTTA!9PFcAK^Z5*^n~Vtyu;jAKE@@ zlqsl4i?&-=i4Y0&w4~&@Uinx?UlyFjT*_Uo=>T=HUgGWxXtI$0FW1flE&tsF0vB#n zghG<_L5?327QfawIcrSRez!yEvFndSdY?8n1R|ZGzYW<_O2^@PKMNCl^LfQfW7?x! z_E}c1fsOZt3E5T&%H@r}oyiKu97s(?c$p2(*Bht}!J52IUkSV*6xQMF*EnK5o)1RI zaT$ay59j%UG-Zf{zqr+SeX^4oXK~nV=+t#32MuTF^mQtG9t<2HM@;>;FeMTXLil?mvL8d&T&*0n6bfB$*L zCukoKX%q=m8cI#=LjDs(Xr5VAUk*~L6KV7`F7AE(ET=o4Xxsf0*i;y52-ank7U=6c zt4s@P=~j|b|EGd5c|hB0ge803fq)yGqt98_vDq4%NO0$}H?jOtu37jK zVzcfWnw|bD?4#i&SK}1N#*G20BDBQ;InmmcnMeTH9E`A7eK{yKt_42QsT5^pI(3D< zfiN};3n2ObDD-UFEYmVv$v=|F0Z~+r#%UcfD&MiZHBMay-}{;W@SjPq>Yab?T?>+490?(CitpRM?tYw!*CpxI}bbw)|1%Bsp%4yskmwsyllmFzNZ$5&SHxqM~fLn7iNjv9wC)YE53B zg`Ja*M?ZPxZngu*qNY$JcmEKAceigC6wf#$`6GV?dIi+>-`$*}FIjMlbGScnQfqgD0|d@B)|DK4? zQ$sU7$9QX7emJRXBRi;^ZqdUmUyn|TpHC3{t(?qo>ZF4N-jX0ahmDZKYHNosU%@>8 zG>=oRT0U~BZJ3v~NDR;5cTSYqGiim?`SBPIDQ-|#@a<@2<3Kx|_-t|HxvL1%M$eug zxld85Cpn+AQ?G}yABEKIn~m+qN)KYaqk&p=hk2;Rt?tW9L+%Y_whk-&{q*$&07PBv z!V;FZF*-S&N@Sf-5sm!NU^`fl`(F4hcGv-2FM2MZbYmG~e$G82pO1dyJ!+^a-2=a*CHWS0^b&5ZmWc%45rVZf_EL3g)Hs7t0sm~;G@^m?MBSkqU7en^d@p*EjFF~H?|Mn|@_VuUsk*U| z|Hs~&f3unY|NlCDO*^f&x@)a7ZPiW}TdgxXC@LyMNQ6++jm8Ai`!C?TiqHeTw?2Fql zwNjxBf4SaPU^&b&jv8L?Iu7B=L{t8i39^p4@U}I%(X8qexhMo!z{(0+>JFwbd3WWO zRG2Y{WV)5xw*=en1r|q`orLw>?k%hmdu6aeG5fBL?~wD!-!VPYqwi4mAd6xBXcxfi z;TdD+JFRz$PCJIIbai~K&@E~Db)6rh9LQG{evED~yYRea?Q&(C%TR%78mWK6wmby* zpliG2H`&*fJ-!_2jbC=|pHOz3+FT(ypUbLt-xzXlCwdfQPxT37c6+@swXG_nELvh< zCL<|?@G_LfQnlE8?1x#GLqbxEew`?DBP2_rVZ`GoMz`BkyFKR9gT(gi(hET zc|Jwgn4=kCZ7#4!6K59&wYr{m&OmBdo>AamvA&jR#6r2=5jz^tj=}~asr#@h$D&n8TKJU2AhjD6^n+l200*}&GY0BJie{rj4L9EPH z*LO)s98R$c5MygAy8W-mHxePKi(~^p{&>-43vP6`^_==iGqgwjiVITn)4cE>$S8Es zHcQPV@XRtyIQ7RDAUhX!EzOwnk}!17GNy}&oPK{lq^z2342`(+M9u^Ba8%^P-y>x)yh;SaKW*>MhHPoq6xP9~#6lzLjHJ zX`g2PzMdBNj8=;}uPjeJtyAAC37(<{<_gA0)7*;krnh_}G zK9hC|^nU%XUJU+o@P~f>Rrz0?nk|2xhyGF?g((qzX-SFRZ}s*qhjA7k}Bj$A0WEq8}p_;Wj^vihXrS$xxRm2XZkTI9YY$^S^~V|NX)Ejj}2@MF5nH ztN+a)NrUdKXp~r5Dh7NYQTs<^H*DZ;b)(0U|AEA2Kw2Rzu7h_V@z=W@-@HPe>DTHqQ zz0&Qy&;WVqAw`RZZ>iPzN!PwD+~u;W-R1q6oY?>Gn@X4G9^>1=KY)LL~nGE`&oe+>U_qwoFoKmqiI>LY`5i*ZN*JjaRU{a zM(g@J7R;HuRSJHMeHy_RoiP~(5F}lKG<(G*C&Mu2nis^|VwUNF-JZT??U`&e4@u3&YbaL|&kw^2(z60M*XfWVO;p$3Qh(gWY$m z+@wUKb~ncacCCAgv}l$k{AZ?jq#ZFm@*GrY$b#80a5ibA%zWrh?RZ07S#WTy8z zeXi2yNFto@V(gj5bZkGVT0dptiTk27O2z!#M%A-K{}3QdvEiQ*iQ;olC4S()MfM?J zDZX#v`oc6~SGjZ6TG>p2?)hc6R`TZRfkaNsv;9T#-shWtJ`(rq?M5C*^qIUrkU%@{ z`|Z0AWyC#@{r}IcHV!q#&E~iMzgJ%Rc+0m+KRPLsN^Q7=&*FN5 zt~E{8cx4dOLPPT09_7n0 z|3-iOe$ANCz<#1jT#DJ8jM?V_XGUF54Ax(tP0g=mg+>djU+CS=^WN?2_&~;iU#9j{ zj7_j~dYtn<6W5RMEs^_ZrF&CT>xV~0-t}QwtwgByN?DwNspRs4g@FJerA^j9koe#^ zdiRO2$SCQe_ z6lYt)yAv;jpO(2>9IE7;+1!usW98!d5Q@~eev`4^zA(4+Mu;VF>Ayc~%>mDW+3fCq zRpa^!SBs799O~rYRxqOx@33O!oad>ltXO2{D@9xS8X%c^BABPg@|7of|IY-_wu;8rcU+f9W(un&iraj z&x{hEr!&2pGmH60cI`8c*0S-1x)XO~PC>Ed9UtciVyq{{75mfJRJ|Q8NK36VFN~Wt zbVvGgu9#tjniPu5O}S6%nr~hyIH6)&0$Mkm8GFZJLm2@cFd(I73}VvP;i_VemF0wG z=6+8Hc1JeTY1LFxSd=@ixml%wNpgN%6%URWjkKMJMF%?)F6uqQoMo0O7tEB)w|ADu zL11Itkp)V6C)HyJ#CZ~PxZ=EGEA!_6OAUittB+P7YByVjxT)U)T%Uq0m;<5Irz9yz$ee$l1 zQlYJX8Ja#LGV2NO7{kAbMo}tEYsXL*r0#f>{9REJRB_*7%!8{Fx11WW9<(no^4in% z*l;wmP2zAjN2l0y5?t5IW^?F;iE7Vrx60RA1BAb1Mt3h#&Gw4wTYLP(+tKBL6Oj&Y zmM6fgpM7IOj211N(Y5j13n!*5I?uHA4t#u9Zx-?axAo@pa3!seTvFiLf4UIqWlr`s z=)IKxFw@9af&Fmrc6vvZ{?h50u3WoZ`i9DI;c?28^UXrQ@wX{58S&FI|5{#=9{rAa z7P%trJ+efmo5(sgx7JnT?lFn$mpjiAdpWmelQU9-S5g;bDom50SL~&LW5nG>l?}1& zkUTteIGh(_^?W#*ngDyyOmI*3a%j8ll3B%8ynA6PzCNYNAa(<1k1|mcF8bp$y-Pl4 zn%E3bbbIiErkRtT7N!mF6oS5k#U;rqfvk~HKcwU3SZ!MuCAugZCjLe71@yclh0%xQ%u#7P=D7@ z@H+o7vDH<0<=v#5%lc!^Zk!L_a4`cz93=Z%g1jutXMnkF->c8FqftnlRCU3=rJw!3 z^RWjKpRAJp+J(gQ`tTahYmYx`NxrgZ0wjJcGU(pDQ?)fBciJ^q(Z~2?J8Wv{VTN`v~ zV9d{I!M~c}W4ph0AR)BdYS)~g_4ihfDVj&v@N-vARhDzPf!Z9dE3e>BnaafcGzxlR zy=l0xUS(mW@{$!3bCT7i0UXdbTuRga@-XfT&O;uJ(THOW97vr0RF7LYb~1^+Sf|Yk z1TRk93~Xg!z_$@*U{>$?KiQj*_I;m$|MkCr&f*5}ws(g&_{8!$iLlGZR`xCRuRn8>?3t?;Uf=*ncn zJy z)#efYyy3fWxpsKBHze-wxV1B)SM)n^O|+vs$M-|#_dmAC9Z2+Sd3*!4=Gbpq2G8t+ z8^v@rvC&~XIr2+w+%)vXUP7FKa76ffz%ISn#(Inn09tBbr8%1P%17TJLDRCodOT0ddObXgDAJ6l&a?0a;wt8nLKz1i9< zepJK&i>}Aw+(JcXNvUUpg9z{TI)+=<7V!rX)};N6AIAO*O_Bc?vW@G{*sDq)kgm6T^r%|tZBrEmgvVZG29jM4Wm11k}Oglc_7O_as zdx*~?YMa%M$=d%ZTj@6jCR4Z81Js5S6I{*Pjk_cIeRdBO2*@v5boydD*Fe*texjH8 zwJC7+i$VcKpsM%8c3N{E5ud1o2gB*zeZl#G8-(e*WPm7J)gg|n;pmtjP! zC%Sy)Vsuu4Wf?X`-&4lFJXn+;u)eH!WVX7M87{kPclANEPoZ;ef-J?pfZ1yXRrnd9 z$cKOMJ&+LjEba4N?EiupfvQLOHSTHaibNq5E|z(3zt4He*Z>j54Vk0!UIpyAL`4yw zeIP;4UQ2%Ag*>@Zgs5s9%Uz9T<77gCb=W+(k6rlV-j64WViq7&3XSI~5Culd?-4Fm z{$c?NNyLEF5skX|VJU-@AULG1o`O~aoXz!k`ldD^e{V_AvsS<5bveQ)f?P7jZvBCG zHqTqO!vfT1U)H|Bip=S$Jh@!}JWBv4rep6AE-MqP$}oGsPN$eRLsQJBn?G@Z(|Bt@ z@nn>B3wd|cc$L=#!0mU)cH7^cxHzCm-G4gD-)nu@ZoDA|nn*Mqi$Qx-8)W(dhGjmeFz7V6LTH;m2@S!wtR+l)r7+JFvCA&saN~mor~G z{O+Y`%U3gicLm(-OEfO=Kw{&xU~a5lU;1AweJ8HxxOR8#r|zAvXDUUy^?*?{Pnk)l%bed{9)Z3B3>OX{~XMic5PTFyQY>>rd{5{dypwN<5Hw{%};h z>&f;$`ar9AJh+-6lDI0>otQ^2G zo#7hx6M5&rb+5Lfc9GA#opx>+mN8$w56x3ha14>fNOeBcLOUdX|W_ZK+tqfy>~ z^F)@D(Bk?;@ZMnVe0FR6I?0GD1(MCVQC^r=PrSBLpfGne+J_%!H<1I#0KCN-Nt#A= znRo(=dhKT}y~n|7;?~XX9!L~Ah{559@EZU#*YP0R6s)6pLp*8H)*AhwA+2^m8`S@H zW-9ON+Q1+<&?Yo}m=c~FL=ii1ZDILqOv2k0k_$^!T-BLn$hG~4k=vG$5csH|;p?c> zP^E{fZQw%Wa-U5>-HA@q#NEJKc6?5|^=60mY;MsX0tDWoSrFQ7}I1W=(d?4ZN^YuU?w-GGD+jEX^ru8M(HP;#|P@@7z2TG;;jbtLU zG*ql-nNQq$pB(qF>a9UwM1lufT?0*r`vtmw=%8n zQ%suNBc=hO;)@Gh2*Xb|P=vqZ-9ueA$AYVu5C1OwH8{;~s-&Q3cxXemmxgi1-|6I9 zgsv8|Z)DHOIKJvN;IHbTrR(XXAzA}=G^Wm|t-+W6u%tp&)4)gBZmprlc@ptzE7=J1 zVlNds0jrcLdU>eYb>Yve#K+U)g@A#FIivIgEneWUe32 z8qT_v`;;W(BF=U5GBjliFyG0fQuD50e?4dYu#&P)oQ)k#deHP$?14m;q+ORxJxc9@ z6WT5}P*bVfv3Hwr7;!EI1KDrB95#fD>bV8W2}Rysw?YIpziy;Rd(lwpMx*ubnc)jV zA^z%JWtL|ayv#ErO-h}dh(uCuIKHQ*x%Gwt?7xz4_P>ptL#n62_HwU@p%F66+o&j%u+cj%2_89=VXLa)JkoBps=WJag_l5^&F>g+@mH1HOy&Ga_`0N3gN76AL*;FEApajWp%1IjYV4lbzVg?H~xs7r))h02xh@S4Gw#c<{9Br%6pfn91lHzccrC@ zD{$fW@0(iPI00D!tF1L}<3Q9F<)qx3ikbX^>;nk1a!X*7Zeh_${y?%RD7*LkXjkh` z46_mas)t!#hU%DCc-e^n$jwN5tZX{5rZ{Pg7&W@;0`X}LA`a2RXTVuFHPl&P|LvDs z^FQuB-+cxdlaZRL00w@&`#z&vDf-(5|kJ8$mKLL>J*W&cj;x$T9Fa-n_Wb zaZ1I`pfwTk)yvp)=KAnt&dgAq3QzH#6W4*BsCKh$Ywfn$q%7_JNX`|O?j%&+gq?7V zNjMb?@J*(S<7eV0)Bgy|63oP1pr(u#)<<-v`PBZ!!s6nmM-yImtk)XL{+w}KEGMPeYW)UsBg5WgiE$vedMRJ{z z2A{r({;7Y6TLlHRjP}Vif+l@N=6?(5t})x6vu1s9^KazbNMe}7i??X z%_uQxmHSKoKK~|Isima6t^hGmy{gVX(3DzSoBY*$Mgi zCu&w^Vi+TGrmb{5$O_n)M5z%so)>3qE)Rn)WOGMMXI-76O+SxDr56(Xgs2lr8(x4s zu!YEYZ{+=6z_f1H=`C;DPM+0$%50IB#X9$SbYEqE{<&D#MR$qe^epJstEaL&59;-d zpvoY-qt;E>d!rs652$4eb;U)7uae-cayM=*S#BOkR62iI5N#5KL>#uWXES2#<}iX6 zkt%G%8Q3(}lrI?mJ(ud$-&nqRgM53i6#)llR_gS5g}S;s@&V1w-&C2;Rz6^Lh7+}A z(tafC8W~cfv(_i|Bd}mi8+{pCd4dI3rGDzk<{+9Twb^w_pqrvb#yx+jqHoDbzCr@P zwfv$fY>=UrZ+5<5hFH1@KChd4Wu^Tdy$~KFPcIgSjB9CbtMT%e86f{_!#a5-*@>ya zO>VUX-@Qj(+j%TX`PK@Z4C8ivyxSGd`^gzMw$^_hABSWICo35>bcQA-^*DTRmJX^u z^jEYsAFC)CsHL-u1acNRs~oaXfrA<#31nzzTja6^!{C>0>`O+QGwPj%;>vmQar9Y# zoIGs$4C1W=c}jXum(i!8x7EKtk|jGCBnH2ijSto2%>ey5Z{v$+@|{NQbhGoKiV@QD z9o1tHp>so;(86r*hH>sy^gOg{NQ;c2zyUhQx}0_YiT9!O&N9aj4IvzZHjFH6;zn}r z5P|cxq$(TCC-0*6ch7Yc3r&&avx0HI#@PkNVxF5k!ghNwHz|rcn|!Xzf-#mBL3(dz z=30ZxBGYN)jXX|hVHnA<3Ta&4=>VVF{qrkD`m&XQ$2kEYZ%%~~@2zTo%)){?Dqwt= zH@l~G64{~{K!-u^iWw&jB#b0nJ*PS^%1z8}yaB^tw_eSA65F0{v%?oU<%YA=>aGtv zE%a$E5G&#==t92TgUk zxaLT;Oz!jCBv*T>vco^_*BM<&Eh_V8t;-@tcSo3H2zh3s_g0{N*6mMMSuI50iHB5$ z)ZF9FPD&`>Qp3e#eI%krZ&x9H`+b-E{1$-n7A}0s(D=US&*_>E`Ig7@8Oq2Fv_6oy zP|*o}-+yIA`7fClUwcp9{hf;U{waDlDMyZVCv?dF&L($mB%CLFQq@}B`=Ve)^X^{F z?*|fIFHVUgZ_zJy9;LO)=)!jE*3}^W>`HhP9BHR6bfnCd=Gg0c4f8fXg)lDn@>33p z(qmS%C&R^I^95ssfnq4wB zK0abjFviB%l;K<`(i`4i-z|~*-h2r}o?5%ddc$*twX;~sKGU2Yj0}%{6;f%XAdlXY zjoOETH?b{8UA!vRCKb2D^P%D<$$<1sKxgL4#O}-?%6EY(1mZw_n+FFzC0yb*S!igr zUIoE~CIOQ4#x4De(m)cVxXg~!m_&+-RWf6116C%CX7L=<`m-r(@w)` z$ck5(m|6w56O7im)UE&ZJID5`qtSaS;?dUZ|8e<9=hSt^h)mOlX0taWg-I0B471M> zzqg2FZ>HJm9!Pv=bCnJAZ8yGg+SII8s|5*0_bm zL&=n4rxqICkp&R5w2$9vi`*=3x|}bFvszTLa-z}`QnFq{CW;Y25*l^P!bVefNN!)f z*K!d8k!={C9c`Ls4wlZo{UG@&N4?XoV$hc48w95t{gsoD zOr}NbK-@iB{ZeG}&Fpfq0ISC8iT*Q{bYy5S91iY0n=`MsM@V$KbGYeoQn;zw?wjv zJ5hC#xv;O3AKV?T>@#O??Q4i+~C*Xjb@jx8c>QL-J&nLog2%FLi5N z07MBga|CPM1;JvP`fe@81!H!%(5KwQt9Vg;tn((&r63eY zB^6 z9o>siGdl3Xt)w=EIKNe`bF2*?BO`3~GhXAJn@fERz6MP4INz5Igy@YAJ>>PY+c1#n z$!>WnLxjcUdy=t&k;YR?)IzIJc%8PVc^SzbM^Wk49VyANmk0Y!V<>%IcSq<^lm6Ly zjXqe!g`c!uCAKa6WPy&fKa=*VB=Y5gb|Kt>gsh#nb){QZdN|&oJrgWu?sLEOLnd}d zp%abel#?AX&a+c`#P_Cj$8K7Uc>=GWMfO7v8c>{VN?FH*IzR&BF!K$?nx z#*!p$BijJ~U7E}DY?=VX+M81C%q~xs%XD^^%Ypqlk~C!WSKrJsmarplHv3{h@q_my zum(VOsI_Hc9KFco}!(hT8yDQ7g3gSyX^PRJbVcfQb{@ zSYS&=2v4mgGntR*B{}m08SAOj zSHwxji?#<6gACCN@Y15RKy&S=i7((;3*wc#!ye3UX5031XN;}-7(C_uJl?t|^fOKK zo`uCKkWLeK0oCR~+O}4!bh37*+5AaE3zOR+uu*m$!4;egA2pZ4sahE0xz{~~mX(+y zF(+4RbFpUz`<_iDtA%k9C&MfVX=pEakiC_NRkyA_?z1oUr-@#Oqj&1v0Jq>?$5em2 zJ`sIQm=m>rSOA&EcYvLnt(hd{>^s!aDBf!9KLL5o1%=!LiKfy6i8pDVGGlYUSBj)Q zA4tqQ#eM!YHgd&v?j>Cux!%Tg2|FY8O1R93ie@-zp2f9XfZ7936BS9uQ56%4A$64g z!z;>>ux2mNn2e?fQCjwj1YE3jBYUe%S$PI(=%Wn4sW(uZxuFHGI?O)%q}eDdmuI*1wC@ zL?eg#6K4Du?d<*eIw;ujxp_{4Tp23rsZNZkv()<(I*944~kALS8yI>%MZH|$T_OO36f(8nSx->yj65qN5C z1CaPQMNgpn5F8b}x4k_lc;81gO_t@ACG*DSvqa8bMv1Amdk`dM*6U5QmOoqHdAMfc zW_5FsF7S3OB_mTN_S{^O{p6qew9|FC@ltWfBcmY;8~2k=>9APsFU5B%YnppG(zk5? zSRa)3IAqQrRwmQYG3KQj+D6gTo4~83wV!ob$>vUup|U0zl{(GW6Y%@^kTN$%7c48X z?RG&|x@v5zUT@~OfkhADiY*5@ z2S@9cXKO-qN>$CvFgrOR1wp3*qTcAD6}MNA1n4+Yghj~+Gc)jE7=UZSk0Yg~{V-ug z*A-AH58#*^nwN`g5$xd3l?ycj4R7zW_>FceMeByE11zFyeBb zWU1KPki|YJc@jR>c&d;}$;GL=;E(IGSGgpB?o~(Zj*sSB_J5xV_a7t1j-S3K>oK_X z(kU{kAyCb~Vm8`jTv~=Xe{Ir`f9x6urVu^%VM3-A?>tgyy)QYa3+-tEjT@fXbrJ)c z3VXY;)jsTz#kuD@akQMR&T`>3&~4|~@* zvuHU!xOVC06$xP(&ZMIL>T9n`$61N>2MwekXI(!K&hQnFaLl0FEbKnV=yqDnOhEq) zVrjGcpmC#25-PTP4(BCbn-)TRdAJ-EWFsj{#zwA-Zp{vaGM^D_&Zgs3^hIk0#rZ}v zinp;9izL_>s4@hIQU~P{@AS-zUeMQWK)FM)evk zZWzc*6koAfFJ+-p2oxY7po=NRyqtt^jyo-VA}>29>(Ty~Jj7*BF8a6LJ6lg$^v#MF zmzd4oCNdN4_ug{<={YY#xkc$4cYROP+59@z*gr!D8*Y+fN?9JDF;*CNAl`94yW!&F zx~zx}Abu5vfL%J%yAPlrRJop~3$RFHkm$N*s_Gz!FyTywBdHKWK4 zsuCDdNBgR7%g=ql3^sjZPqP*SOZ5r{-?9uNnIJHQI~&kou|=> zNM{@r-jDUO23+_>`Ld;Lt(`(Z@{>lYN3qZ9D02bIyP(34sA{uWF>}k_{(W__#l~{% zGe&ij_30+ruMvm!S;o>6K6tchc2uSt%v~dF9-@n`*4GBLYHNfGejxi6LVt5k&%0xS zL{Br8dZl~lsL*AfR~fw@L+=xQwy~?rcJBW=Di`X)?O{?1OA-)Cf_>|a|IyMyUR6&_^?xraD8H2jfI)FSXQCciq$)#^)H zS%QJ}?l&%WrF~nj`h#c<^Wh}J!(})f!7sr~?=dbb*-At-2ia(**!7tYz)FXGWuxI{1?3`3<+5lO z2X_iQ#u+)cg3{6&=FD6YjdiKr(I2n5B-`b_{(2IU>=fXhi}&i}Oy=9gj9Y0pTy+UF z;Wy}OFe!qt2Q4;kgJMut-WAc{_m+EI60%YOD;crK9)IlfsYcRoo@(I8`b66rw}tw> z96jfk3!r*GfV#`)_1+$9E#KezletU1p&qk&-z2_c6o&{%&>JqvFNcB;`Uz@?8s?0d z{pQYHe?59ZufIsM)z%@kQVno%u)gq8XhL z+7Bv&X*#bnRt`Tm%JuwQO|B1^0wj!u9nT~TT(Vuewld`Y^+w*gv}mp9z$YaCOke1I zMv&IRT{Xu-F>Vf@7Y871rC_q@^kBsBG0#SC;)K-$=XD>!x3>#D z#hm&4b8Cn5tA2A>rxpUIr?E0OXGuVt(}^p{sh>?BmnX~8LZVF;k&0eWemGZ>^o4;6 z{H|KwpRDL!kT>@z}ohM_Sw{T#7Jz{(+rvq`SjP1l-t4tGC|@_2gNHJJ3cgCe@m z)2vjB6X;7Hu0Q8nv5-@|wVy$B9d{&O2*g?0-r(|tXx`D=b)Vl;Ba_|>+6hZA2m^@} zSk74CLF)dA#ye?hn0+5rV(@6>f>;FcuES_!LNoTKH77DK|LTR=cOQ-yUEDn_6oUt8 zi)c&U&^pxA+j+AI9;V&xx>>w0S$a|VB7HsfzQM*~%37D!ad?x_;4dT>1VxQObahA| zvvde|O!q1@HI%YP+ZzO5hkwvOv)@A|iiqxC+(4BE4o*dv%^$e9jmPY|P5vRbC`p}T zsLt=c05bfBg}-ZRDc@zUuC5tS3+!L{|8Pk45%IT@+#k-%MxITwmp}FA*U2Bs(fxfy zvKwMB!M_@3cwUo@vG_gT1hK1dRxk}mibLG82pD|`m3V4mbt3Rq5=>^mTHAoax}ouo zGpheYwhJxD)kIrC!m8+F-_m+$Fj)dg|; zf!KX#amexE-rcEFvtJA~00_?@8WCP;sT#zS5oVRhMO<)aMFCZO-7zudbT>ETQo0u_?f$f zvW?JkISmnDhxH~3gy3MhxbT7#NI@Ia+hDDYm1q9BdRHJ{Sr#aW$jT@jNK%J^0!z2g}B(+PM9J>w&%hnHLw z7l847$ggFfILFU*=^9o=5yYh4?6izkExGGo^yMtZFX-4pdCt1TQ2>`oI;t|QrGClX zbm;JpM{Qew7l~_6HVeen)yf5etGnkYX*&Z1v0l)?=94~a@8>y&uF=Z;V+4`of;d;e z5S5fqPafaMm-YDkyvR9)h5Zm_&da{nZ`%~*;WTW;WuXqcE4_M7&rTuID4K&69JryT zRI&TmK-TI0vunuhYxG*v>ER=&eg){~W}*Sl5czwNdd_LML%wPG@YB^l{L`f{V!yex zH`~6p5@qb0o}hn6JN*{yc0%r)BVoXsvT>)Y->JcD=-nkxHO;2T+%(Je&`DwZRYPh- zgzAjiY|FLm_tyhp&GSSh=i6hlsaiR%;onQA2;5J*qCZ2aM^3)zjFp`To(r?-3B_Xc zT4}za>^n2l1G`Q;w!tY0uH8T1?M~3%PYpVY#y}{-WH6eknoG5vy0(eXNL2)jaO00*=5fa zN1iF+OIJYtr{k%cBSM+dw>))DUe9ITO6vBq?&Mn^g3SPYQ3a7*MQzS16+LVsUt$Ka zI!x1}mOl3%NR+}L6E^#_bCh}4PX7ueHJhZQET^dI!ASHEg9~Dn$YC8M39n*<(x&9- zc>il{klQP!86;2sML*sf6Ci{}i#c)lJbz$1_IyKgLVV-87DZ#dIeP9sJ*7i(tAveG z1>jr;vWn8Q+!by=-)Cftu5OsbJ(y;{CVb8+@+@J73pD-PLQ6ZPW+v9NgO%G(X_SttCpDdnC?>+rZ@fwt{Q07U(<;r?jy<8Drc3Q)PxluP1ujEGB9xudw}IDCQ!9fP=fr+0 zNbGu*>$vVz1SnQMIS_K}{hFo2+nRzLT@%yuD*Ti0IhQ z@=M ztn|1#8}QSi-ShY6X!d?F+akSrjJ zz}G@pW;Zm1o5T-^GJWHkQi1c}=m6!!3#5sjJg%G;U%n62h1_TfN2Z`W8>x#a2wzg0 zvjY(sWmuCG5@gV6d=gh*cS>m-fkxG7j^kb7wfTMzNS=J9pLXs<{-b!t!1{yc65fF_ z7SnpKo>rGvq1uT{elykp>9P-&^O@c&_=1WnocIu~xkyVbvLHJ3QPOVh(-I1!gb1aLf_1L2>e)L%C=#;=j`mPf`3jT2Z^G5my zZ*Vp}b_dnnuaInPT+gI=Ppq(rt#2UUQnK9S5+$$tQxo&?-emo!$ek`pL3Tr_AKiC; zBT!{%mX0E>sr0yn*j7G9#hpJ=MV{|#L9lTU8pMs~l#yAoC>t6?3L?BVU;krbLf;Tz z*53Lh99%T9%|h>Y*RxQRAlV#r#+&B*a$vP&nT5R)xaQWv$)<1^mkiGeU!Oz5QNR?_ zXwBX;S<-G#(%hqO2O$uyY*2Vv-pd9HH{JMb@Rtt;`t40ZXbHIY| z({xDc&4MXR*TY3oR~X_QX*^UILMR0df?QW4Qv5TsEw}>Pqmly6(em%RJX%b|J{j8w zi7hK$D9$U&o0>CKyE17F10>naS*&@2E`d36$q1QKazn7<#&yKN$CZ_?XNH8+ z6e4dE%|TJ1h#(NsZqOf9@Yso1pf@zXvYDgp6QcZbmmcae-{}0c3CChtoY*ypk7+Q) zrT6a0Yj$alXePAfG|-72;L6`z9uT$CiNFUR%Icbc!0hzMwZnt+3pNo=7Y0>(f-@H| z*R>uz?p15HV0_nAJ{4Km;rF1(D;fElxwcm|7@fF=SnPp>o48NY(d`s$N(VBX zIxt`_=qQLSnEV<}!#@)@#N=N_cQJT-W{<@+0r02MHNhqsO31-5|XdBsJ!g&2gKeOkyj-?Ca3ZlaOf?5`Xvi zLQP?L>yJkNlm)IDf8J=S>Aa}u?jDzAccFQ!K#H2O_=3FL!mwy&`;7r`wg~^wv~sZu z8Z0;~M8j($a6)5wfAp`>*iq}&7P7BR%BMgq%5dSty(Y`n6Tl4H2(mQ!=Z-2=3 zuN3xD1&@P}33Vbl#(QbS^xTN*YIOZUkDx%KHaF<>smbbb(imF5SgP(Bf+gGBTXrANE4;6m7y_lhuDjq>FqULcc|0aYWYmUfX(Yz z<#XsD_2>${TK+})=3%IE*zxLNl`>zYQeM$GXrar55(P9O5S?kDfjE7Oy?d8 zU&^O&l{fqblR6Ae@_p4B9xvUinqKG`Cv;sQmzv3kB+tzNsgP&k}0gq#5OT{tVc5n^8yjMO7tsnY+Tq)VPfL)4j7rA7Hg1BqtWn)ex-pw1h~!p6S>h z>w__~m>+=-*B3Tc{Jb!f`#96dEn7Q)FtYgv0wx>fC#O4OH(OMP4~wDw%>Avy_)bSf z*_}wZb$HM_j(#jQ;&>h_pVNp1G*wV~y85p9=l>Mk$@ojy(%>CaItIB5h?i5c$%Cec zA-ZTRJ>k0JU<|pdbZ+mw#HjHv<20kWM?>r-WGRP5at?M{(7*PUZrWl3u$>qSnWPyu zi*WMrk3`iJcI?k1{a=+&YZ#y!D>m$G*weFE z1lat>n<03Ea(?UKIs(4n z-cOdGA^YfUDKU;D@5=uEmifjOG9cU=VpEixm*cW63q|vCm5~Bo^hI7%Z5<=f&+v3% zNFE?(A+_sHaBk3;e@l8awWwDKiFbE%bINtKaUV*Cu0;iX3vAx#fRW!Wku=FfI7nBW zmw~qf=n(sLaN-v3*=@q-6OztjZh9jzaUkZlFUfUq>~sn4xD($gPmQKhlBa0JxZckJ zHy)LaNPR|j112v9Xk86{Q-zcKOG9^=mv4Hcah*=Bs~O4BHIh|_Tp+o(Wcro%yQJP6 zjQNy1*zW86#po<~ak^fpJ6mKhOtP$7k&&!(Tn6%)C+!z-^;e_n*OA8)?)B(}d%Kr| zBbgbUrXMTohM;$20#D`|5e0pgzr*CloVzy9&*%ZmpMrqv&{0qKGsqh9oUUPcG?Y;10*2>7C zK_e-DM9ed9xMAPcX_}_Ya70hDOIwrIPa+b{d`0xTTih0*-mI6n-#*^n3zePt7yKfJ zYyoJaX7@q}X384Za)NT(k8LgA@Zfv2{cAM;8!7uhV&>SP?9X4&6rNhRSeupCx0$T1 z+AVr1^J3`iT0}6X1Z#DFLb$;UnleR&fK1(;>7J3_Mn$3|nBD(!Wu6|X#eU+!=Rn2Twa=)QM!p9v^h5&xub&v-_mwMwf} zfaI=^>xGp~AwraUZNwVpNz1P7h^`|&wO{Qjxc?7(?*Z22wyg`tUQkiNMs*2D6Huf} zSr$NofP@~JiU=Wu9(usF1X)rQ2$8-Zgb*M^N(h9eBCr4fAqg!IdJBY_P(oRM_CC)! z=iYP6zxTQSzwf@!bMrhQ^9%F)#+c)qb7p>Hj`6-j=NZCDj!o75N($H_M<4{KiBdsD zo^!I$UqTRl>$cvwjgXBH8{6cWPx=Vgdsc&n)+T>cvl_!g|@M z;kGo1snx?{^PVV9X}vE(3~RH08p;vca`WNsIq}Et_GxwJ!A)m7EpU4I<{rA$DJhFx zqws}IVZI+jF43e$=O|`mNg>3MpNH52(oMOtMZ?Gp_0v3tM<%AuXN`p9<_McjAEWmf z!k1Y>JWvuB4>+sDU3CiBfH8ZDHtz*}e=%K;5eeI|NzY?9=q_3{qTR4RvRg(WG8Sl) zR~9LVWJ4$J3)n}duwthV2)m1ZQih`@JK`)ClGbV?`k_sa9E0@xw#3T4ODIGV0W{Q~ zS7enOpLcaC=Tzg6V`TDi<~aXpch9pzHl!aIXCEj1P-YyVC{ZsgZo9EDQsNxDdQhve z={c-6po60bV-K5VL&cVFcRRZ8?)oc9CJ>twcCagT2_B&;Qu1eY>)jvJ=ja4vbV5Re zmScofy7;XbT!W?JIUD2J(j|09ZXbm0RKi%_3w^%(x*Z|x(*7A=cbVdGMRsD2&?lGC z^dlmwY5i+mQsr*Osj0R#`~mvXFyjL$Gsv6L=efzq6?V78Ysk=2EiVBpb8orCOV+Nf zt9$2f_Tj37U7@~k6G}a;xNf1<_}p!X9JGgtQEbZj+*{Y@n~P!P$C;t*%i|z(gh}4Q zlc@7wEmoTwB-z<_pRIJ^>ZG^!U|h_rP9XTDBF%7T)eW@v=;U)F*WuGBxK2a@$? zle}Gk2_s%eAl!lO8#R@PiwM3N$xm#cJmB^`9OgF69STNfAsquVOxH>* zMfZE@tX=KIHabno4X9_S>+!bUDNDuNE_DMW)Lna4u?lAimn>h6k9>cur?1IrL`bK< z8(j?-rfY5a)kft(Z)V#`-@otDvTMfD7HVu|WV+eYuaFORdASO3;;2?i1x{8Pz*{gslY*o(G2EQxkoL-%!ux;RQn`TviLz>~9du^ly1DdGmHRIc|EW$Dde@InO z4ZBA#mE@7u%k{=fEPH78OsJed_Z4OpFOH~U_z4!4sn+2;^Ov~JMut#Uk^l1^t3;a| z38hW3KLL-SKvd>Nv|v$lHr}j6LR!WF~2R0Wh-9!Ia*9w@dIJo_)huySUbN}I& zgY&F@?C^Nh-qU%E|lE2*G z@4+N-s+V#8SSmqUs3Px{e*r^aVW3XQc_8jLyEcv;&Sgq`FkJ262d!ju7&@R8F!#F- zH~|l=bm}to$OdgV@lPi9(E@GwRTR{0h8yGZ?S>zsORO0eV!g*+Yeyu8_Ty?aoS{Wf z5|NP?1^AHhGZU@>pNCAQ=RC{%o;J_%{cY-dk2_ zsG0!#dsebQ6`UpT4s2#3SnRAAC5oPFnO&V^2pe;@1eM4(54AE_@7(%SG(ho`SWhUp~jKq|z-qFOB3Dd4m6K`pG1y(c&4e#&V z-;J>|$jCNGb2&QZ%>S-!@A#xRr->1;>~#ZE=Tu7{^oeJd6xZhcx-v&r*Cl3XbW6y{*UP<5)sy}R&E0^w zh=aKNc63b;0oJKSA}0x|&5Y^{oHYo#P>W1}bcc8t7u$Ywver)CzS?#UAwk@)Gezc1 zU=;kmp3*nhL)qO!Nfv59aYmeoU=1!FVvW}#O3r}%{8CU3q>*z(wtQ6$nzSWK16m|Bc&tWief*jd zA3D`@O)Zg4t&Zep??Y{Ac?Or@5#Ej`>j%g%zx9WDDVvh+Il^np6sS+;Dk995I&iCC ze%K;P)5TiBEe947ypwS^a2anC1hrB%30=m}M!3?_eHT{aZC<_?9jeI7AN8>}<$CHE zysPc)JuaF2dvy&bxl!(X!|wD#&hrSg)+rFFop0qpm)LP0j@n~|lC)%UQz-0n*VyP=4rFbWJJ zB0~B^<#g%xZ>eq=;9nM0a08B ziq|RCBUPT#JY1@dsJReRqOrTLOv1HfAz8$~tR=!gvaRYU zEBRIhj(KXPvybQ-vPK*c?sWXY+esR}Kd;!GshbxDm$LbAYwF8JDd$TIFh4#`7!lf} z8`GH`azXn0=Ov{FX@3H6XFqQYEbs!xe`wAnM2@<^cjUS0TX5bAOl{#ul_(x>-Ve7o z79x5rbet!c>$l4U3+-|XhSM6~gIlpRFc}ZBXbXD>D!XBj_A;Xw1#uCzNs0J5Ecnou zlI*b}I@CUP7}LnWC zQfy5KbIP8qA!m`hOYOrCWZlkAkz(Ep&r$po`i2PGHj(-7IOE6vpwnZ189;6seDL;Z zMEZlXA&S5cu~F8R16DED!pPSmNZ-89dn45P?Gu?DlPbcTr*&9WEmI?Zm$onAJ}wT1 zlbfwSG`x#o*>AM0lnflS>@7Fv`*Jv-@4|==n#t3T=UR)y9dJK6( z`5@$8PBjSy+H;iU#h58Ol1uBGZV96hp$}OI62!u6DD4x~OI8u=l^nqOoeN*>2^tFe z*)xF$wW$HAgjn|z9GCM>iJhwyqc6_03hw?N*kozi2+jW|8aVz7*%au{+tHrTs6=R%1{n*rm`K;Gu8E}v_PAN zB2QP~qDB-0R=|@78g4yY&MG31h^Fx1KJ<2euJ8%6oPg`#^T#~;LroH=h{ib}j1m}o zB3d^tJYtm6k$0!ORA*&2O3BhFq~u%6xBqV=b9fumFm+ z#On!PK_zC53K#{Wyp0mnR;(u!W~y_c*37AazGN&=yYDMv)z^St?>9QE(=`(mjWED~ ziLUguceUzU*%Y!yTjl0*0_Z@9ScZ|QX`AmyqUDlw<%>i#stx8HBLN(kYxg}TZ0`HC(_N2@SHy1(JfM$Ur=UkPHxbU-uq>H|FEhkoZ_|$mZ^b zlriH#3UGQS%`fe$|3dW4udk0HWp`#$0djtSfF2hda@KOR_Fw*~^DktRr>W&*d2q|4J z9=2T69{_}An$WqB2#s#DkB706V@cl&0CGJ~1YaM0`v<^Co8fx>bcLDP-Nb0X>B=;# zYf>UExS#*Hq>e(3#D93tBM8!5T76QG>p4}?zVYvE{J*9DYk~i3fq%ROBu^eQm3(&c z7*Hbh^nHahhX6U&w~rn!Gw(QdJ&Sjgb^br8(qW&YhkbZg`fuJp|0gf_k2uZr)Mvru zx|9xt%nzJ3P=%73`$ST`p#LVN2t-av^8Gk}kI$kBh@o2H#WlAgkGf?TwDoy{kRHxP zxH${bAk=kcs%>Lta5BKuM*h12dasH`jHZ1r_x1)ww#2zIdtO0Nw$l}t*dvCZ zLXmxQ8Y4l=d_5|}3>}Mbj*PT07`5QW79bbAm?dV)vD$CoI&n3|IMlR<^^s=vYPXY-wt z%yc~rjExmSJgGXi$)I_nmg9taox*DsETZz%u$MD7<^#}n&UR^|4}b3CoFu~CfF=i) zF7FV9-MTn|$scom5h?W{EwI`J!i^M<#c*|Aq*)=-2d%WN)kGB9wfzAXy+KgmRE^h5 z$G7Ztzt!GekEqxPZ_NB-(rgzAPCw@Nrq!>pFYB5E`>@Y{h6D^~Cw2eRPf8c-1$e;A zQde8rNm2O~^etgN$ST%>Hf7qtcEQ?p7H7Mrw}+v}SYPbH@+{-&GL2EJNl3@uWi!{b zlt_fCX?Gtnq_HE*q3M2a2LBngS=7~TVm+axte!JgF}4=2OHmn0uL9BsOUqnk_>zUa5Bf8W_{ ztt;h{8>q)=G~D(lZk<$DAa@A`$PO~=?EE9ga7=_Jj{mzYrwq$1y)$W<` zCD$H{`*lWJ9M#Irn+e7K5bp@lTcR$9kt*6?a$|b!rlYf!rkYQZrbT*+DW3_#vCgYfWB%G3%nEiRXS0?rvpR%t`e>ikT3`C5LR7*NnWI&=fxrEI=9UVQK3b&KXZweaoOzFn>`<7v^{D#Q zDhzXpx9fGyU%N;@tbVMfW81Y^bMgFJG{FF)pjR)mZ`Z&7L7j&Z#wY)Hc&IO0I9Tc` zCCc|wQcybXj~N@m;LVv0a<)cq(Z(yyDmAsZ>Knzw=2k0xcC~m8Dpx7$NxpZ6moXYz zB4d0sD{i*YSq+8k`QDxr1i3qXb?r=x^1vqGud&L9uNW?`NnY0;Mk33wkb4M&=zAF# z=O;8aw{_>K!edd%SX2Bg-M_>Hj;trQhl{@>i=BYDx=pWozUc9EdSM^#73ihYbZvDC znhCC^Icojz$q0s&s_Z4j8JewR$GDJXO^GsJ$E?~atqjvtol}$dr8O6ab!Ov=tg0F@ za#q*Z1}e8j!$mS?lh!#|VtGj@F&(_^bzJF%H?EDZ|2|Xy18N^OKl+Qgm4;>&npSZm z6LE&efOgN7LF2-w_53LzQO+}ZgD#zEcWlV^;fhi_AugA$D8y7j?nx32+)e-2VYuI@H0~JZ;`QougBvr_%LPt%`iY=>tpow%Z6u&)3KE$H|uyI`eu5 z0&3|rBWp(pH8N#cOGNSIBnj4_J?AiwoaytMOmNcMoNEt~_`J!iR;^kbt{%AKi#w5s zP5Qj@?OW@_2DHz280ziAqwY9m`M29u3hw^wW7+SP`E<3pQyM{{_d)%{;>eoGoua47 z`&$mxf1RuRVT=M$g^!(}L zEN3_^6KjUl>Wx>r(IjAZ>-mnJ%J&Zi_qLdI(msv1NG;I<2KS_Z%)t|e`KXCC7EFmIuw_ z@_-{b?9l(%yu(cL-s=<9{NGrOM7|S6bc=n;{jgwXuaNq1sAqHy6u;#hk@aIWX`RHV^`H^po7|54Qc z@c0l|zxjUOvTA~L|JObdT1nRfoqKTR!Pk-WhTs#VOTs|zKJ`jzNrv^%sxwlF>e3mE z3B$zcx;GouS38aM;;Ro5V1+{u?qCdLJB$}iz3V({ZY3*+?2)q4M(V{SbSj--GB2m! zo`$^@NLJ?0VivKDYIQ#tmw0y`c|}V}OjqOvQu>wVTZI{6>Ag`8im_-ZU8o`=@ocXWJlRJrvn zvXBnhTrfM()e*&~Zai9d1+E6hQ`zLugJ1bIcl-sE`(Kgzvr6(yHr2a-??idpBGa%fw`8 zY{rY+H;(6&F!d&s z#54Afe}tA8TCWK_0T*^R<)^@9+xnZa@fP08?H!!S39xy@8J3S7!%-nj1NoNB4R`RqfY*?P@wun7k(b@O#87yuOk3m2 zx^UCqsta-Ul!9bnmZi1s33=R@Rcu3UU$8pV6#+PLQH%{Z`q)BNYHCxkA9wX8eW~K$ zcu@JauWwl&7E!ACgEGBwTGp?-c*A?$X5sGhFX5HNRkig?+Hyg&X?*vsYVl0ZB3f_{O*cr)g#hEP%$DkrzSXtLDz=M0 zK`58c_N|Q&O8mN~k{lz`A;zX>M|DXV)xyg~7UsJ{!PVo-s56Kg>zjn!soOC1c)^V} zQSm`o8=qjf<~7~l=ccy;>yu8YO>(Krl6#|&h(6+1N8(>d?EVD6l!o0Xc!P}ZJo7MC zpArX5TUnsTD$I6D)zg*F&=Wy_0XArT`2H$4 z#vfl||Fud)?yKsJJ<0eh0jteMG$gp+mwRc->=HyWCGxA&%|x&CJ3B5Y|7eaYOs76} zaj*H2^qM4lk*s>apo!*SP4o-*9c|fG<})U`MYB$61`h^vTQ`P=j@9Sg=(%eKii$K@(J$TRVlOP z#+UB3L=J8&NvTWG8wUs_x}OJxms!ljkM9??t9Xr;hnfBf0FnqMGp469>`G^@<(^Ts zG9bd#NeYh z%317fLVnYwD{IO*5*{=HF@2$`a02GdNsa{D_Bj6%UtJkhera&pzd|4DOzGg1nRrK% zF3bXMpYwnF@2!4ENdSYedL=632mEMFX}BG*&8d-;v1nR_-qaTLtN1jK-X-#)nybcX z-e$D^=rHggEDdgCOJBUO7wOb7S zqH!Z~!gZ=VuUf8qh6mHlC*J3s>Z?_707vjG$bEapiyC+j@XM*;|DFHSBSP4b$8Q_z zZ?WX{wFFaYigIUUh|!zGbuDm$s_BKOi{`xCykAvL9BatlqlE0YS?p_MpGf%;z5^G~Tg|NhMwf*7#G-D-LU4$= z=MXxSU0hjHn}QsrwLo;2;ljGWKG_*^zt0F*(49-(o zzCE48zN^V=vkO?I)Ee5wNrJVz}0trUft* z`F!(GnUxU&4_8yt0n;2Vt8`2xRX)v>ZoVDSt=;0f&JZG}fZg9`gspig1ps(nZ(WF~M(bVeH)i!Lsnn@^3r4a* zkrR2`E@_EgUIg=Y-i9-7>YyTW^>=``_Tb;t0}uNEB_ub0hWB?D;9#N``Kn;g=?uqu z)hfc=@d6_v!nez!c2J6V}r1;g0#y|IwmrDfcx zc{ErV6qO7?*S1a@*ba0Ku^FCzvbfya)cOaXvJI=)e=HFP})8B*0@-6D@o}dQBO`~U<9_>G!tWi z?%98$8eaF_c=`Tl*!923qW_>u$PwOruS8eN#}J0vH?3T_CfvqiC&zQ}AIxGca?`FFVaFPv`E(P2c*+~-Wpxs^7*dd9VjjGUc`*R0 z?Utt8MqFvO+Yyy`UOYHPZ*9QPgsP@1vR)?I_?W2t2{81Z5solp6!3EQFRWwN9xwQ6 zj=gHAqF&j80oTa08_i8c%?bW)m$l7#14#1s#{0G*4MzL{XA z*oIzMD^*J0H+Cl}JKsJ;-uV4*>UD=ec1s|uD{oKOtsY^G6Nv|m#tv%nqhmCLZ>V-Dp= zp~fz&{%o_Wl}Crd3JbHXb8>M;``7A0McnnUOtoxTg96LnDLjIc+9WA|O6TC(&efe7 zj`+c_#M8>!zOoru_gVYLl{6UU!DhV2{ZhE2&6ke~b7wP3 zq+KFq?(>-Oj@^>T&3xn0y;f7-oe)Z|<4-#a!pa-Dw%1Fdtb2mSvz@728rCNDPFAUU z(px__de{qdN|_Zei^I_-iRNc(zAd2~T`wVKb?KL+U&10b3Vg{5>jvxF?kA~UUIL~9 zj#H9UR7;R<(-EJ=U8iQ-0-6UIVOyN>b-}PcV$pb!)7W zbV?*EEVs~I4epSFx)HaH&J8I~@+E1Q7lpF4h@~^E`?K;R{^Ug6CBztohLCSx>e0Z? zWdCY+;t=~8;KFsl^?%n{S`v_*RP>i`_-bUcrhr*YGm&z;ko8ON(y2En7X@LKajkXFUw1P>jr>joeJHlo^kEm(2T$1-_9GiLID49rfE0j>l&BO-Gw#=tcEv^ zHR$9d1MYkR96b?dUk?sU3JIM?GkIytO)6x>oCFh|9X3ppT%Ws1-^xDJihrSY&m%it zI+mm~?EJ-~qj z`gMisekX4^9e-3O(fP7XgQbcZs2Q62kXS3f4mjhv{x5$2|DtUtzMVwGdq*{X%f5={e<5Zt$9HDB^WdkJ#rna?wZa?W zo#%0iujsm-yvU-QGzlm1Tj}Z99e|_P{|gcSlOhis<`CzNhfyKLF`cTdIM6>ne3>Y% zvW!ng+bJ&cUGSdzG4n_I*h$g@Iz3jUOe#+PJE%DKg#0iNjBL&TdMQcqT-oDTw zKlw0O8(NrR)}?noWar&GO7r)??gGI1zsNoWIFujjg%SFJ_XY)&7*SOi1CIOIHA{>)^>G#h?h%bP;8$%xxDA zuC0}ybbKP}tfnV0Q|(P^O!7X#EYk^JT{{icG4ZeA!NrDd^$%>ie>sptMcFiUr49B) zIX|)*SKjarrb_GCcBb8Xp`x3FhK2nhDdc6Ap8W^l(4?V31NOJ6lJ!Shx4UJ%G~9(F z0v4#iWv1cKK+0CFG=2-QyGy$u2 zA79G@U0N`}Ysy+Aceu~i)T>N(yoQ>w3P+td*}9|x)o^AKzgohlus zOkP&J4()v0HwOdS))B4NGuN_X1Q$THxsOLM(k| z6pAxb*Zv++zF>SEHSz}50yz2~1pf~YPdzD9hG4I}4ev-{p3q@&8JN!)`xs*Pl7nt&%5)biMjjJ_D5U)hMjJ zR}8`1pJg>>x`3D0!_(OLBlHz|#a32xlez+;t;~j8v}Trh{#S&A_|bTDobbe=DkB$5 zMU8V63idp-8%z5y!nU+VboIRF+;9sb{6z5}=~@ssP*&=Ffa5>ag!)%w9D|l`=L-z|q%#)!{FHjx>`+85i5V`{7WN8@&VdIrr9^*9#5~S7mk=7d}C@ zIW2bQZSumN7dBIB$r;faw>XIXKl*mt{QCP>GEKe?i^@{W^7VyD0S=2O9sB5dU5v)2 zfd+%;2;-05M3Wg~I*ZwUAr=}w-6i6?pfPI$BUfqtna_Zq|4oDc*Mbo*X7tw$;ubGV ziMrslz|oXGLDMZyUNZ^K?|Anl?vYs(xICEFpw;xst4j~Q&|3mk=PQz0EHavD+1VYK zS3b6x^$VIw3e{)b!|T@154`C}bspJoJs7NiLgA1DSa3tWdj}t8QPiTn+k4mAr+sFn z$pi(emPv`8zrgcDlrJ;7U4fB@l`G>*_e{gTwY~Gbc~ctn{?N(6rYTkOyz}hMIOCTdACT`u730D1Q@R+=wVF&o#*9G`=xw++?!=Kd5d_(!nn^( zW)K^jvQ~2NwWp~jCZtAMKFpfM-X?XL>LFKNHTuEo>znSDv`jF=%GeF+1)FB0Ju8!! zsF^992(!$e%2Tk5lpl{E0G^lYpYFwbn16Z+y?8n?(^R1_DMlR>61B4?|Bd;=W#n!) zzM(9DBXkAUPwH_S6@Cb$Epa?f2U?-kr%dXNL|EU$JmK!+!qh3P%hKJqDD z;l`AJ9-Oi-@d?9YzJ@bTZu%(-dRE{!+B3AVWx?V@lD3m%!>m8X>+D@nELVqWIW}!M z-)-P@^NIhg7$uIjJyJBPG{<%PyqCJ$vRzgrL=oDYfAozDI10Od?dWUq$Y$JnEjbTj zL?z=*<0E4v-^G6CTKD560<(3S09^g{s^n$**W3Hf5ewBHQelE+9%Wqti4nRt>j$W|Nvd#;Tok6ErmVrKM2Gi6LIZ$r>5@$Ut*JL)Z9gk5l5a{@z=B_%Xn; zF88q|QvD;_ty6OP<3RhJri+9258si?V%i@p)GbO;XtWeB`H`;P>Y&zlJUHdyQGh3)5R`QpRhg~5sxZC^yWE8G2u{6H|)y0h!ksIr>1l8njPqJMctcLqKRfH{y`UE zwRa!e!Q<_DYFAP;tRER2x9=LJurI&4vahIjLsze$O-Y@X*k*?-c^WbQ>PZ_9%i28< zSE8kU1+=js=v3nkVYi!#dFJ9>%ac?O&=9OSXJAVOzaW)GO%vV;Qn9XW6}4Vh%#N0` ze!B7NY?|(^0d5)*fwM;1(~F6Pdu}(oO2dVFSQC^ly?330LMZ-T%L?=#@$>WN=ZY#C zKUi=iOcu394+wCrtpQbe%M|9!%|8Ku0*(>u8%yKS=$N=C<`eT8BO(sLdoF*_HzYpC z$7c$8UH_*Wy#J;UPC5B!yg1lu&Sdtk`}VZ|*+;uhB%(AtTdDtEre(P~S7*kyCBp1( z+u+N~S&yl>35N&Bm$?pYXFpz1UX{2h>|5?UqIETtB!6Ww1SaHQYPScA_uad8_eV|o z%K>|#p)E^Qb!Ca0rxv!QCmO^-8|Z_TeYFlgRfA(HT(Wqlj#$*F9sT<_E<}dKwtxzOj z|9N*0RrA`PfUxg{CXKArXZ{ybW4J0AJV-3 zzaaM*Q1kxpvPZ|Co&0a!m^3pP!CxQ$FI@cp-%}BI7>}-@k5rA-A~M?_2##0G++0m| z3eml3)~q&gev{(ZkG}sWVE4lj=C*%*Xyi1bWZ+LgAZkfrxR5r$E{>=K^{(La=o$EH z`UvdLp%2##gJDiGP74`g<)Hr7?9<8#mrl07GVer~zhiknM)bf!PT$L&=k_DbF<@lq zomnF`Oa&G5TF8+9$niz?uR~zdTv72rn5t0dx!Pl@#$S<7q@&l&^aPv7y>BNd^59lyYqZ^)2%z!r zVrQj2p<0cou%ZPrA}mf`s>>J5cc-vCr%4eTV@B~-l{>(iRpa6I$j;<=k(?_*Q2|!~ zIT}BGTMD#Z-(9$SiXAo(bUCI@sTk%clv54|4Lh(USE&|`7F%ksX*|HuteMjve6#FL z6`mK?6~^9n4YC&M-WXF)g_WXpoVc?EqYZ+|AXqzQRfnr|nv_Ni34>whiF5a~5|MVs z7h;oFP1w(#)m(jLRv)M~$=j`=jDTTKeLHni?^3tKZTHFru+=63VcPSAr(}@T`d6e( zEzpb`^2_+=S3UU8Wj~o$a4p%_YKk`24GJ9AR-g25Z6cQxnZpcFHqZ4wldV~*(RB0m z#_Rt?7vy=^cp%_f)%fC}L2yfV1I@knS7RlG@pIARmpg{3)mA2LO}BVtW*%3lOP*8C z8i_u&jj;W988LBn=1a@hJ-AP7mV;?<825Q7j>qf4;vxGLl;O`FrbCw;Zxko+m_JmP zHSg?hu;?vtM0gKYWWk&ft~6Z#Gcn2)F67bnG&Kw-9o@Cjv;EnBmcLX1+O7QqqiNWs zUj^eg+>e3OZ<%z#U_6ML0J7=qqLNspC_4A(>c*(%6LgR2sD3<+EXjp|!8uhkmC@4Pafm7Gdo};|w;3^(y}$_lVpmS8R4j zTb@3A;#?KIePrz6f>r`6OSov3s^za(6N1prkLT;-4}hd)yn6R(ljTk;?-g_f6SXx= z39$>4IS~|{Ndr>t7XMkb)`dZEHcKm@s8}cgpT&R}J*em$GoXp8@aQrsX@3f63p2K$pnGPzv?B|Nm97ckiw^51SS7mhP61UONoU*MM zrgwOtxie8_#j*K8M@}t%*lwmSGrhf4<@dTqEWvB}9-@3f0_rs7P}}dhV6?zdT3$na z^xNujy#-%CJkVAqwHTVXLk&ofe@b{>0HMvm43Kz36ZLZmjSgF_u%ncL=d$JEG)zcYZu~5T`hdZV#<*{ypk+09$-=;vKy5YNNVBEYJM)^8j+xi@ z31ob*Z%vTXR`g7Qe5jXJxWF{hBP)U6IweaIS30lkb*R+GFjmYdpO_;_q<@x0)x!hwC|J7t=Y@P?j00mkozgS?>X z_8Yw=0hAE|B#n_^v35mO?B&3%mz68ajjj&o`c?w}1RUqU=)Xh!sOkzVBm3b{ayX^1 zvJ;sb+Vf!GOMIlu*o8`ZCJ*QCUGVrawg|d+j9R@pNOg6qRT)mHK@0iM;IzU=2AzYi zs`BZo_V!=Kn)dkbD;Q@EbCTaIX8Dog!#+f^3w~gojp)MU;A5_n3Q13r5_dlPO-9P~_^|cqY(k zN_B!UGc00A&y0C7FB}1u(%P&b0OL#iTjAkTV`rc1efXnRSy$Yv6OXJ@*$-?zjj^{Q z$(c-8#@YIMGb)ZRuwPaeq0Vo1S)z*vDv??N)8!~J_om1Yr6akD3i4ov6^V@1vcj1q zV>E986#}4>ufT*0in$l%Rzw>NS50P&xNSfI|F{%x`wn*6jkeuY$$>`Wmc_(u9TyQ& za;rsC*E+j)8gs*r9BZ2BM`L_;jTu+A0;}*V#p~w894ot9P0*{Yw=-A9J-vT>V(*G)c!JBf?i)<|m8TdGQxLDR>%I=Q{oznGZ#Yu#+%)1` z18*6w^Z&Vo6m&fOp(C9ru1q8_G7tDx_wA0H8x%I(3iT=x!~=pMqg?K#*UH#itPzk9~l2`KoSnf7BC^Bn@7=ZzcU=# z(t^B93np{?V>X3Q4@N@MqHEk2LtUpAn3ly_#U*yLDJ$RWEjoL?oyCW=vMfv*2(Ceu zYIrU7tA*~1pUfeJPFoQx46T7IfrmjVJe-bu? zFQ}7q^Q{N)t_D`mUEp$@)XO2yd#p9L!yeByD1M!@pu#*oA!L+|ssu3gN(j*G6axF? zPkARa|S4vHnWRtrdaIqo(CmYlOMD;*Io1FXFnc zlBO;Vh+PleS5kDxf2n4F>`}T- z=vhI{;ucj^;nn7Pe_wX?X^t!C@+!+jJvGkf?;nQ$m@|&hF=Gypj07SlYu~YpsBfKB zo(0sg*nJA{B(`<`#5rK_Ccwew&C3lfEnRD6gWS0Nh&igM22u;CLQUzmm@&S7=(Q;b zCoM~oHJTw!y4DFqdg-9Tu_Vs5AJK-azT`QqQoQrefDUyVAyOmO?VeCZmW(~kHlrFX zWI~8leSy<#r>0KNa%8)gCFecr{cVAhTb?45N z$x~K^OpC4;VAxJsbPF*^i^tymHT65^mfD?hX29E!*SxmcvNPez=b3ivZR<9h-T>~8 Lqwbgl main() async { AppLifecycleObserver appLifecycleObserver = AppLifecycleObserver(); WidgetsBinding.instance.addObserver(appLifecycleObserver); - await ApmHelper.instance.initApp(); + // await ApmHelper.instance.initApp(); await _setCommonServices(); // 设置国际化信息 @@ -54,6 +55,8 @@ FutureOr main() async { } }); + NotificationService().init(); // 初始化通知服务 + //ToDo: 增加对讲调试、正式可删除 runApp(MultiProvider(providers: [ ChangeNotifierProvider(create: (_) => DebugInfoModel()), diff --git a/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart b/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart index 45fc0c63..9fb5ce97 100644 --- a/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart +++ b/lib/talk/starChart/handle/impl/udp_talk_request_handler.dart @@ -14,6 +14,7 @@ import 'package:star_lock/talk/starChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/starChart/proto/generic.pb.dart'; import 'package:star_lock/talk/starChart/proto/talk_expect.pb.dart'; import 'package:star_lock/talk/starChart/proto/talk_request.pb.dart'; +import 'package:star_lock/tools/push/xs_jPhush.dart'; import 'package:star_lock/tools/storage.dart'; class UdpTalkRequestHandler extends ScpMessageBaseHandle @@ -78,6 +79,24 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle // 收到来电请求时进行本地通知 Future _showTalkRequestNotification( {required String talkObjectName}) async { + final Map message = { + 'platform': 'all', + 'audience': 'all', + 'notification': >{ + 'android': { + 'title': '呼叫提醒'.tr, + 'alert': '${'收到来自'.tr}($talkObjectName)${'锁的呼叫'.tr}。', + 'extras': { + 'image_url': + 'https://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=视频通话图标&step_word=&hs=0&pn=18&spn=0&di=7456461798821068801&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=3670633426%2C2210940696&os=2119936476%2C3383901310&simid=3670633426%2C2210940696&adpicid=0&lpn=0&ln=1216&fr=&fmq=1738909566404_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined©right=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=0&oriquery=&objurl=https%3A%2F%2Ftenfei03.cfp.cn%2Fcreative%2Fvcg%2Fnowarter800%2Fnew%2FVCG211249198901.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bev2_z%26e3Bv54AzdH3Fv6jwptejAzdH3F8dnla9lla0&gsm=1e&rpstart=0&rpnum=0&islist=&querylist=&nojc=undefined&dyTabStr=MCwxMiwzLDEsMiwxMyw3LDYsNSw5&lid=9610633549467928081' + } + } + } + }; + + XSJPushProvider().showCustomNotification(message); + + /* const AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails('1', 'flutter_channel', importance: Importance.max, @@ -94,6 +113,7 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle await flutterLocalNotificationsPlugin.show(0, '呼叫提醒'.tr, '${'收到来自'.tr}($talkObjectName)${'锁的呼叫'.tr}。', platformChannelSpecifics, payload: 'item x'); + */ } @override diff --git a/lib/tools/push/notification_service.dart b/lib/tools/push/notification_service.dart new file mode 100644 index 00000000..596f6735 --- /dev/null +++ b/lib/tools/push/notification_service.dart @@ -0,0 +1,107 @@ +import 'dart:convert'; +import 'dart:typed_data'; +import 'package:flutter/services.dart' show rootBundle; + +import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +import 'package:http/http.dart' as http; + +class NotificationService { + factory NotificationService() { + return _instance; + } + NotificationService._internal(); + static final NotificationService _instance = NotificationService._internal(); + + final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin = + FlutterLocalNotificationsPlugin(); + + void init() { + const AndroidInitializationSettings initializationSettingsAndroid = + AndroidInitializationSettings('@mipmap/ic_launcher'); + + const InitializationSettings initializationSettings = + InitializationSettings(android: initializationSettingsAndroid); + + _flutterLocalNotificationsPlugin.initialize(initializationSettings); + } + + /// **📌 方法1:显示普通文本通知** + Future showTextNotification(String title, String body) async { + const AndroidNotificationDetails androidPlatformChannelSpecifics = + AndroidNotificationDetails( + '1', + 'flutter_channel', + importance: Importance.max, + priority: Priority.high, + ); + + const NotificationDetails platformChannelSpecifics = + NotificationDetails(android: androidPlatformChannelSpecifics); + + await _flutterLocalNotificationsPlugin.show( + 0, + title, + body, + platformChannelSpecifics, + ); + } + + /// **📌 方法2:显示带图片的推送通知** + Future showImageNotification( + String title, String body, String imageUrl) async { + // //读取网络下载图片 + // final ByteArrayAndroidBitmap? bigPicture = await _downloadImage(imageUrl); + // 读取本地图片 + final ByteData imageData = await rootBundle.load('images/call_me_icon.jpg'); + final Uint8List imageBytes = imageData.buffer.asUint8List(); + final ByteArrayAndroidBitmap bigPicture = + ByteArrayAndroidBitmap(imageBytes); + + if (bigPicture == null) { + showTextNotification(title, body); + return; + } + + final BigPictureStyleInformation bigPictureStyleInformation = + BigPictureStyleInformation( + bigPicture, + contentTitle: title, + summaryText: body, + ); + + final AndroidNotificationDetails androidPlatformChannelSpecifics = + AndroidNotificationDetails( + '1', + 'flutter_channel', + importance: Importance.max, + priority: Priority.high, + styleInformation: bigPictureStyleInformation, + sound: const RawResourceAndroidNotificationSound( + 'assets/ring1.mp3'), // 自定义铃声 + ); + + final NotificationDetails platformChannelSpecifics = + NotificationDetails(android: androidPlatformChannelSpecifics); + + await _flutterLocalNotificationsPlugin.show( + 0, + title, + body, + platformChannelSpecifics, + ); + } + + /// **📌 辅助方法:下载网络图片** + Future _downloadImage(String url) async { + try { + final http.Response response = await http.get(Uri.parse(url)); + if (response.statusCode == 200) { + return ByteArrayAndroidBitmap.fromBase64String( + base64Encode(response.bodyBytes)); + } + } catch (e) { + print('❌ 图片下载失败: $e'); + } + return null; + } +} diff --git a/lib/tools/push/xs_jPhush.dart b/lib/tools/push/xs_jPhush.dart index 1d1847f2..254773bb 100755 --- a/lib/tools/push/xs_jPhush.dart +++ b/lib/tools/push/xs_jPhush.dart @@ -8,12 +8,14 @@ import 'package:star_lock/mine/minePersonInfo/minePersonInfoEditAccount/minePers import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/push/message_management.dart'; +import 'package:star_lock/tools/push/notification_service.dart'; import 'package:star_lock/tools/storage.dart'; import '../../app_settings/app_settings.dart'; class XSJPushProvider { final JPush jpush = JPush(); + final NotificationService _notificationService = NotificationService(); // appKey: 251fc8074820d122b6de58d2--鑫泓佳AppKey // appKey: 7ff37d174c1a568a89e98dad--sky @@ -45,6 +47,8 @@ class XSJPushProvider { jpush.addEventHandler( onReceiveNotification: (Map message) async { AppLog.log('onReceiveNotification: $message'); + // 这里可以用 flutter_local_notifications 自定义通知样式 + showCustomNotification(message); }, onOpenNotification: (Map message) async { AppLog.log('onOpenNotification: $message'); @@ -72,6 +76,16 @@ class XSJPushProvider { ); } + Future showCustomNotification(Map message) async { + final String title = message['notification']['android']['title'] ?? '默认标题'; + final String content = + message['notification']['android']['alert'] ?? '默认内容'; + final String imageUrl = message['notification']['android']['extras'] + ?['image_url']; // 从 extras 获取图片 + + NotificationService().showImageNotification(title, content, imageUrl); + } + Future pushBindDeviceID(String deviceID, int deviceType) async { try { final MineUnbindPhoneOrEmailEntity entity =