From 8a6ac7c26ed80616cb2f7a2a8805e49f4e34b5e7 Mon Sep 17 00:00:00 2001 From: "https://blog.iamtsm.cn" <1905333456@qq.com> Date: Sun, 16 Jul 2023 12:40:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=8D=95=E4=B8=AArtc?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E4=BF=A1=E6=81=AF=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: 支持远程连接语言,设备,网络,ice状态,ice类型展示 feat: 支持多端画布自适应比例 feat: 调整优化文本绘制 feat: 调整优化缓冲区满的日志 fix: 修复控制台版本打印 fix: 修复滚动条样式 fix: 修复页面多余节点 fix: 修复某些中英文引用 fix: 修复缓冲区满的阈值 --- PAY.md | 2 +- svr/conf/cfg.json | 2 +- svr/res/css/index.css | 27 +- svr/res/home.html | 4 +- svr/res/index.html | 67 +-- svr/res/js/comm.js | 102 ++--- svr/res/js/draw.js | 459 ++++++++++++++------- svr/res/js/index.js | 278 +++++++++---- svr/res/js/language.js | 26 +- svr/res/pay.html | 2 +- svr/src/socket/rtcCreateJoin/createJoin.js | 52 ++- svr/static/layui/font-ext/demo_index.html | 98 ++++- svr/static/layui/font-ext/iconfont.css | 22 +- svr/static/layui/font-ext/iconfont.js | 2 +- svr/static/layui/font-ext/iconfont.json | 28 ++ svr/static/layui/font-ext/iconfont.ttf | Bin 30868 -> 31892 bytes svr/static/layui/font-ext/iconfont.woff | Bin 17640 -> 18288 bytes svr/static/layui/font-ext/iconfont.woff2 | Bin 15076 -> 15652 bytes 18 files changed, 841 insertions(+), 330 deletions(-) diff --git a/PAY.md b/PAY.md index 4444eee..0862dab 100644 --- a/PAY.md +++ b/PAY.md @@ -16,7 +16,7 @@ - **价格:** 按功能大小,紧急程度,耗时,定制内容是否允许开源,等情况收费 ## 收费模式 -- **按小时计费:** 根据实际工作时间计算费用,目前个人定制功能2小时起,每小时200~300,企业定制另谈 +- **按小时计费:** 根据实际工作时间计算费用,目前个人定制功能2小时起,每小时200~300 - **阶段性付费:** 确认开发前,预付1/3,开发完成付1/3,交付上线1/3 ## 付款方式 diff --git a/svr/conf/cfg.json b/svr/conf/cfg.json index 0067843..9070541 100644 --- a/svr/conf/cfg.json +++ b/svr/conf/cfg.json @@ -1,5 +1,5 @@ { - "version": "10.2.5", + "version": "10.2.6", "ws": { "port": 8444, "host": "ws://127.0.0.1:8444" diff --git a/svr/res/css/index.css b/svr/res/css/index.css index 20da8ad..0c0a28d 100644 --- a/svr/res/css/index.css +++ b/svr/res/css/index.css @@ -284,7 +284,7 @@ body { } .tl-rtc-file-user-body { - display: flex; + display: -webkit-box; padding-top: 10px; } @@ -1134,3 +1134,28 @@ body { border-radius: 5px; } + +.remote_user_info{ + text-align: left; + padding: 20px 20px 0 20px; +} + +.remote_user_info div{ + padding-bottom: 5px; + font-weight: 200; + word-break: break-all; +} + +.remote_user_info div b{ + color: #548726; + margin-left: 5px; +} + +.layui-carousel[lay-indicator=outside] .layui-carousel-ind{ + top: 10px; +} + +.layui-carousel>[carousel-item]{ + overflow-y: auto; + overflow-x: hidden; +} diff --git a/svr/res/home.html b/svr/res/home.html index d535e30..1727569 100644 --- a/svr/res/home.html +++ b/svr/res/home.html @@ -7,8 +7,8 @@ - - + + diff --git a/svr/res/index.html b/svr/res/index.html index 6fef5ae..adb33b8 100644 --- a/svr/res/index.html +++ b/svr/res/index.html @@ -77,7 +77,7 @@ @@ -90,14 +90,14 @@ {{lang.sharing}}: {{screenShareTimes < 10 ? '0' + screenShareTimes : screenShareTimes}}{{lang.second}} - - {{lang.videoing}}: {{videoShareTimes < 10 ? '0' + videoShareTimes : - videoShareTimes}}{{lang.second}} - - {{lang.living}}: {{liveShareTimes < 10 ? '0' + liveShareTimes : - liveShareTimes}}{{lang.second}} - + + {{lang.videoing}}: {{videoShareTimes < 10 ? '0' + videoShareTimes : + videoShareTimes}}{{lang.second}} + + {{lang.living}}: {{liveShareTimes < 10 ? '0' + liveShareTimes : + liveShareTimes}}{{lang.second}} + @@ -258,7 +258,6 @@ {{lang.pickup_code}} -
${this.lang.relay_server_current} ${useTurn ? this.lang.on : this.lang.off}
-${this.lang.relay_server_current_detail}
-${this.lang.relay_server_current} '${useTurn ? this.lang.on : this.lang.off}'
+${this.lang.relay_server_current_detail}
+@font-face {
font-family: 'iconfont';
- src: url('iconfont.woff2?t=1688291642630') format('woff2'),
- url('iconfont.woff?t=1688291642630') format('woff'),
- url('iconfont.ttf?t=1688291642630') format('truetype');
+ src: url('iconfont.woff2?t=1688799262496') format('woff2'),
+ url('iconfont.woff?t=1688799262496') format('woff'),
+ url('iconfont.ttf?t=1688799262496') format('truetype');
}
iBZmaEm={3iVx4)#KF!6&wZ!8Q}13@(ihSDXs(br!j6N@PsqDy}-vAEUNVY z6x8)SF$6_1AHuz@c@wtU#Sp*T0Fx0FcmP~M?N}$DUTr;%VdBcQr`)U`jNfQeQ}3wONK0B zygyRN;OCo%4i5|*uGbHE-hso@(}(xKzqjxA(4N`%;ES8@D`QH^tdU}W0gFNdiTpPR zCX{?b+zaBB;zE(gV0jXWjj0M_`q#jJhG0xPgBkAq+-2M~+>P9A+!Nfl!f|b(xC=NN zjw?Mnu8YR7g}az7KRb%J4aSUXC6P8lenZRSnE3+$`Js3e##9J1+-M_YO|`l|m%>Jy z`ox=OO3ahtF@X3q1apyp*%n}A_^vNP3@FTHQ|lm&hp0CnZG^yL`~x5*Yt#Zr?fK>> z`-+}h^n5@1wvs0*I@L_m(qXVAMO*118LWIwAd*5giaa7&vZYA2q9H%$p))Ms&-uO; zF4odyO^axnt*JVdc009H|0#eEE4wl^+ZbJ26GwR7pt6)7(w$L%wyt?BiZ-94L` 75tXR@CsqH|(XZJq;#T|wv>xu|pyDyT@;1`=$&4KzbCJ|FJWzu(`$V-}x*ANiR zYD7iIkqs)zJg_}Y(rg*qs^vSnpNqwE{%YoijN4T$qU#ZD^&rOlAfi9={INb id6%6kza8fwdbB$Fv#5D4$b{uz+!09AQv=saGnZ4(uNMah1n#T&m(o+S;ypI)v3 z^msbAlY9G{(4%l1SDasQDICKA=NVv`aX`id0o59B!VBZe7^oN1|EgJ^N{pFGi|& zb7p)+e0_&Af;L^^B-z@i*`7|Hs-~=qiftpqP(@iW^mF2WwOFG1XhX`HZpO3$(6Iy` zC#GsUt|eI_Y0Q!6Q!NrDXnz2$j^;YWu5TMi_4fJvllYR~2Me&0mmk5zF*Qp@xc>qM zJO!Z(k4#S=*}ApQ8w8MLN?BQSZ7^lL?x-kOfqnn27JYUDeU5XhxKm+-*{bIEE*#|r z)H%=fPN)Ze1l%s iVBw#^odwp$dE5=$O<-x< zu?S{=N0o-+pTto?gf$rOie7n$<{Q2V+>e$UW$Lko=EP>E2=yE67w$}9dGG^5V -{e2NWkmI~btsz0W ll2xxFK#eXmUG1-@X*6>5&six&?4q5)_Sp zlhIf)0Fe-^QH0SfgGn-AAiv)5nYX-7Y_>NbSQzhzdk93@+9(o|T)3bf#9iLT{<7QV z$O@#F#P}JIRX+oe0ors6K(fAmp}wtkGksg)d092LZW`|IN8dtN@r8&k?#GA_iV2S_ z#fxP&Sz0ayBEc3#i3iezI)s;0D;dduQeLtY)3vRhiHLzVGYB#f^}-hy@H_zEUpKG3 z9=MwUl8Ns-*aojuus5fLi#$2FHPph%!Rx(@H`IfXBw&N!zoZc? mV<7-9xSK}K>i$m;U3`L z&wY3iRF|Z-lgSZ(PHha}*zS74>Jd7SL1ngn)CVP=*;BwhivtBZ5G?!%b_cOpC6O?8 z35hJD7cvHdMf;3LmZ5GhqL3uw*a8)Dj$uyj`R3#257ML=N$RGdSzes@7&;C7jv8XO z?+2iK&9bpq$g7#s0ZmSp1*DjN80UR`rD^ifd|r_V%KJn=1#P}gO4!;!qYdYiQrgj~ z^ bbMgJyRDroI686* zQ*syCBY;hP)8iu}Q&PDt>HEpHaw?wK5u~8E0S}hpT9tQ#4G5=dyc{6}#2SehwkSje z(KaIRWDydP`M4m8LOduUNmRl-rU*$qR+;!zF)txRArZ0&Rxt>FX&DJ@lYz`*4HE(Z zFGB@LlzG8i;sqMo^pjj~?__Up&Q9qxmd{3VYrL!n*Mu3htf)z zIz}hEy27VvwgO+4?=YZuu8U&Le-B>An>-JECB~N2$9UQ1A%S(-LhwmEwM-ixp=0x( zE4F$Rb{gY_od$D%dx=hCcm!S;=YcNbbEC@Jrq%pAd{OhB9_Zs_&n-?i9}~3{u*nzA zDDpDVD2P52)Si$Yz6-pqF|SXY$L#~|b}4rS_fGD9;BbF-0{-@=*=O@iaBfTEA|}}W z-&QXYOQ;usjGyRjbKQa$jWP9t%Axeq^+0+Z8K6l6xE?ZpOvUzm9@w4?Y|oH%5nTmZ z#A yjpG`oe&hr7L&>4*n?E=}MQqKhAOAG>1nS3y&96h@*s1&94mZ#b0i ^w%)}y=15keUlYQ;c1@<%$ zgrcqRu@+SY#c-&qMs(0HnR|~9+ T1_QN}O9_|8Sx)Nw_sAU7> zk0-)cC_NDoDgh0KHb4z{YB=8OK*!h)G|0v}-_pO+2s>VM;aCgI=N`BZ7yp){dF5jM z*M5xlQH8-@NT7|Sz3ezTik6vFmq4nq?RvzNo#r E|II#s z&~a3*@AOC1=utO1Qs({W0zdCZCqr9W#A?yzADVwmR6Ii GlD~R*(q>m~5nM5NHx_+mb*9VnlY%`5Eu6 zB+{vPWvJI+n=FAVf>9$zJ7T5|qbY)v(LG(Ff?}a+OW-{P6!ij7%+E6|fycLhOzeQ7 z-Uk%5x%mv()-x@N8lLloJh{V|=X!SF3^{a|vh`7f*Nj-wprpE%z~`d_^MnQjc9=-I zWfI =RNm$=lo=)#cNAVRvuZ15tnXi z^!I-QZQd&?B3z%*EGuT)o}`IHH4Mp60GPbtL{w)&X7JEtH6rnUrsrzj1O*#gQR1R3 ztFqi5xH FM;AsM2#xu{i@>_%=Ke9p9yi~+nVc{ycAIl?=KWnfon4i2V6TsTjg&- zt}=e##+A8V;QDocZiJiQR&u+!^SJ}uMQ`R|JC39oVE_C2ODwd6kLoWkOzeH`FCK_1 zy-KVnMojBqXFOoUKKeE=&oxTGXvM|8%sf+FCIUqUo|t9v^@WVKrClCxi7ueI!-soA zt{HeOWsPyog&K=8udyh0w _27z7~-#vQGeQGW697{W1n z45=Qk+fbGsO5$Q5p1qcMuC^dpT`F_oi=9?Wjqu(Dh{3d|MR)cVS}F(2auBN)w8mai zDzlcW;S>aatp+co4YpSKO$y_0@iOHjF+ZxjQ1Q?eum8qPr(I$|*gU_p^{?aTKY8!o z&Zs6Ss+gIKMRnJe4K;GLKC0!H=SHtQE~ohs(rR9v2 `$i;2MAON&w?F#mv1tdw7V)Q`=IKW(e@7BYEMoZbqpNtu zDdwE6PNW(tzxq*VWbfFRc!K;u*3Zd-cEHs-VChC~f8e`#JNMw5Nr2WY@E~m+zfuS= zr8vZYFlKHde-3+En8fy%h;)Fhc=U^
lu+!TJeyo(&TXWbSyE23wEiLnF2DC?B>u zo*i`)v~fa)zgLTQC*nQ5vYoZS$|fS8IdI&Y*fMGF_Pqj zX(kj!R=1(ePY9-}SZap1DcfM}^VHOBBauyi#?vQb=znYUq*6U8Unzk0=xX}(v|g#~ z>F(a6r?srU#{?Y$6T^}PUe+YqF`bhv3CY1afV+f%NAKWG(F7~na6Dd?bmo}i8u|(vFq}Y!8SEF^2g4Z+H$1C< zu0&7lc{<_z7K3ZR!;f<
y%}^X#p&hdiZ0W3aj4BvMtZceaoXRP{ z%|;9Cqd<7Kn;JXCqix%9^YRCdPhm@cHiC7)-vL> #}VGDfRx<0GKA>qp@^*qbpP99Y*df>VncL-pVcy9N!P*dLORVj#7Ebu YA zcQw>qX5e8aSc4bJ(^I%}fmgkMn|mL~(Z{$iEQE}GyzT<%e!}&5cHYS!1q{G4kD>v2 zv<`w3%SEqTY78z&1CnX&rxBSe@3_r0Y_gDj0o!=fC>DyMU#H%X2okdns8RC6y*i~L z_Sd}ky&K#l>p5H9;50wD{^B2e=cWJk1e$5ipx);9mil#|zUJS}{RYr~?&c%S^X#@> zuif`0(=J$^o+MLvCFVUaL;%Rtl3f+!8&h6Kdp0fz>O@orx{`=0s-j_Aako WBz> zG+C}Vc3c+)Inv1Z0+K}85J&~_8voUZWp6?#7C}@%2B0ZIgdW|0b`hE4oIsLw04A`_ zb;qbphz9dGJ{6cI+VBTmGUSu}-zStdr{m>v9B+%4h2}+>3n{&SFtZ)4z9_SOd*&ii zxd-omnV?c)mP?dM2|SJU=2@AGL|eQlb9VH?G%Mtw-FM#|EQNjJ^*5g31#&59fe|hW zx*X6eJB_oo>bpJQ$99$cx_L=#YAW8mG)71IN&CPEZKfvS-?{ktu1uzDcBHbtt82YB zF@tUh+kNAWZwKdpAV$F=-wZvZee8rfpKYCCnl|eZ{78YFF&69|a~dr#8Cy_FNjM7{ z9F~ZJwa%fFtISk&0dN{u*W_|N+r_i>v+4FkB5}69U5BT$w;tTJ^WJjD#PYj!)$3S3 zw)VYu$vuibv-NPH&{4j3=Pr~fB_`f`>iVlox}fl)Qca_OAEdJ~DpgMtFOKJ&o ^tY|yGrHet#Q3z zJI=N-SF!C}Iwf4E4En)YLw`x0B`W~dT>H_JW9ByqkZ1e14$S`Bz}9}a;}qPlSP+MM zcwW(8k#CTHm7L3QPH;rtV0bp`+}W+;W25^o_}vBjN5|$PXy&>_&nyz|7lq(D{2F|Z z&(4390nGr%g7ZVe!(~vJ0F;P<<_ MY}CCY5W>-PB6WIUHZmn8oF)$*$k zMMp-WYuS>T#H;AnNFPZw?@z=Nlaq IxsnJ%}Dn+aC5{25sEf5ZJf_e&VHKGg4J(clnZP;IC^;FR@wyaD#+&+QHL zOJ%r9;WWcQi}wXgO{7s8teC9NBNgedHU`6E0~>4yQ7Jf75C$_1LqVc`DL_Sb7@ VyY;t8s`R*ON)&sA9iR7$|l66f3kyXQkU59pKq!Ni{he%A% zMz9@wv>uN)cSC?4$ydJDRj9|&vKv>gTfJg={6^GcD;X;nAyUl7$#tGZrOLU;;0+y1 zD#E)DtsHBV+kH3MK-YBpQRMl*>>3 Ogb+f*a5d~!HjaD3i(yEfx|)b7j65q&TY1`{X=1dUdvraHS; ztmsZyR
ttOvc0eXP<~>GEsc05lhC5Ojl;kCVvNy$n_BSz`j|@oe}JRy1R{g zn0uW2GWRt168B^7_eeqsltgWavFZj|g-%1;(3xmAIuBilE<#tLs~8JL`G8U67 bjwQF!`nxMrW}$xNYUghT>9atv<~qV@UpLgAsJ#rg9_gR?08C_BwE$c3g@o* Wfw%6@v2PDCF%yQiIVEWuFj#HV Re=rl^#o_VXm25F>%S;5dXGI zCRVUm^K}+OukH`TMIckYJr~`6&c5p}Iyg2lF?R5x*XAP4hj;;LU|J`CDjms`tnV8+ zh3uHzVS*kL&9rrnC5kcZTxK@njw})B(3y5D8o|qWL3eU($x258s+>QvL6c;#o)V*# zVm7K;vI#Bh<|ENq MvBE!VceDD~xkEvvkhA9!#eZ}W=U z{3bPdS&S5`oB7SPwg@AC^v|vC&YFlR^JqD!!`RApufgvWWF!pl-8~G(3F-e-pU5AZ za7N5<*$G;=x9-jT)pb?4@TA|-*XjG6eI0&tTdE@k7djZ;oBty5R1hd{weD!<*o13t znj7h(V?KN5;&Gmfl4ll;bP#z3iNgBjdqp9WE_cO?Ni(fFsm?@yA(m*1# bYae&U?4)c)07#b!$2*=WThg`MWiL*PSL}r*?WzIx&>r?4dtw ztF6elufJh~E#+?>dX61i@*F$Ja*0^;$>H)F L)jm!G+V=FFS?Fz< xVToHi?&GxSQkDSIEYff*j2;I{gBwd1Qy`)pBOQ?PJ zn;nft2OjNz7# w3a-P LxJUbqU$b7JNtrV;lZy6rpGfBuuNvmJ+GTv7d69IawzZEE^6sa;#eyg5Y$;^H_ zQ}NPXX+;^IUS3gxDEfw>D%zLP?+ni~n%b9Dq^N22H|)GxiuvEF%~!{O3NmA+=b2+r z1*)=tc!2l6B(o&SnOrtF5o#^l2P?eU;m^k%?93Llv%Uo?wb44rS%h+B(i_Y!^x}HB z0myfv1}2|={p0MIS+X6%*KeVULdkX(&VnvmKeb*jX_n>N_7_x(iqfwVtNeG$$Vtlg zik|puiF`yh`OorE=_jIX>pU<1)GT-8< GPtt_Ewg{Qxv0$9Jc_ x=$IsHG1y|FGUB@|zGBlnGUXxM~;!*Scf-ImCUrhNZI5o7(dgTwH>g4bqe zlEtEe-1h#YXsKB~)p5D4pQ*W{&8ux1b7Jh1dnADN|H~2#WZN@ z@zg*YeeOfTpV_h1XBFOy=6oN2GdxFTz!HsfX{Phqc{`6n(&|Ei$B<2&GlD}!uWA?V zD$l(RHFU?(e{+=_m#_Ps<{(E$k1+oOnSs2!9DVk^x^uOJrE6^sU#dIJ+$6g5jk*24 z58#)B|No(bThFxgyv??{lA#vIVVfkG#}oK65bjuOFG?D<4;3jpWu~=%Hntd^aKl!{ zF|)ftCTC~x_g{aRRK6cC#^LIkDJ);TyjX;w(0utj`7K&R_Y@(Lh#AwPy{eiUZW9uN zIn`4wJktbrIX$}#%~T@sc;qn_Oive=7YfUZkA=6&^z_#@Yep>Y2uf7%TSswrXli+f zi1C@n_iO8)(y!JL{Z&YR$Y3Lw+dA6Gxed+bar7oV3~tj#ED;eDPw(oQ?`%-Wwk-QC zb+Z!Q^{65^@tCn~uE$}r-yMl`AK%}>Kc&BHYR9euE}gtXGt<+LZF@_f{MciUy}><( z9y|WK#{Y!x62kKX)2JGp(#uwV=ZA_X|Hdz5r0y-J*QOy|c?5BP_r0ah?a57_lJ!@2 zRalXN`jzSFfOpT)VT|kHR)DP;QevPk9HT;@rL>2DLDzFE(PG)TAQ9A!V3~SpoE?IL z>VpCCer;^|`3HV;;QZxd^O5GN%XaT<3=cPU?*5m#$m|!UCNI7W@t0jZImKel*I5kz zhiNunGArieFj$>`=55F{D~#+hckQAUSp?-5H5f#i`)^v@VDOSYvx~KAK5lkqj9a12 z{|8R!OIZMToMT{QU|;~^pJEIR@%%Pl8Ms*(K;Xf#pSxi6|3ClhS+bcMfm{v-CXgrq zbBPXU0001ZoMT{QU|??e-@p*VlJ)-qA_Lw0&;P$H*$hAt6yOH{f3nsGgLs@{VPIfj zVfg=t1x(|@|NrBcrxKQ+q1j9zKjQI67HQ@I0FV#~uK)l5002G!d;rJ+Q~_cEb^(q7 zt^$+>fCmf*k_W&DPzcNkJ_-s7ehY*Q2n{F=<_>@k{tyfhd=U^4<`SqA2os(ZeiZN( z!WM=XFc?r702$UAR;C+}9CjW49_AnLAgCc+B4#64Bvd5=CR`^jC+aA&DZnZQDl#gz zD%dLiD?%)$EX*$uFR(A@Ff1^PF(fiRGIlcJGg>pIGy*h?004NLV_;-pVDMv;!9x=R z8v; E5g=Ximac!k$^ zgSU8x_xOO1SjQ)PMh6?{ViRA`!&iL6cWhxBKWcM1O^1@ILZ*DFkTm7FsMsHCqhi%- z9xLq?UHFlVV?VRMgK#;psg-Z>*cD52Y+Lv@%oD7jT&2zR-c-nxrJVHpzRRT+W>DWK z0v0=6e;G4pM~y=3`c+R%E(0$RHncEqE~G6wAIoY^HeuDYsjE$9MWdv-Q3I-46DDo- zBQM#M5!omh>4%Y{3*9C={hwYg%+Tx^hx)4>uT-XrY-NAvHA16GQ_|Gg>2-S~Q~?=g z+z~p78!}Mo?pEI?nOz`^W0GWRBnu 7eBUz@29gFlk-Q|$VgdX+ZwdZ7hphD&i?d3RCo=_>T_AAXHO#X-k+709= zh*|Rh#7qXXSxx6_mg~ALHI-y4OtUm;WF}@`x X*kpmMEde$HBm;s-3xOs81Rw>3X9tF18}ejz#+=6iz*)CSMD?m6 z`~N>CH)IIbK-}t`BsbC%?DJp>lU_ER&4!;5sZP0}2zl@eoUMV;{57Tg@1ah|3K^!* z1AR! AADB@ReHTjF3jK6x8jtu>QG9a=YNfM|ICUy z>MJ6N(D1~e6cVA3Nt8ee nXN7?f8~@_jd*W5BazE?-EEXvVhuxEWnl|ag z+<$pP-~lg-9TM3HnD<>-N!je~os`azY!!5pf$G8l!VF7t!$QL{_mBPV&%XN;6f_J} zaS$59P-XW3LCSr2c<%S=3!wiSu&&TYuBb&7?F@7_!pH_3@QiWuuhXiP>^Q?vEqS3E zD4GSXsNJU6@`LR7OO|a}$x9@K hz9K(MVTq=BcO^) zri!54^2&1N;M?c0{qStkWEhc)8;jgeT>JmdXu12(b0xQg#>8NlHCx)e<-bQkoBOW% zyC+vqMb`(KY%ykNy}7WPSw5hoMawFq0i!5d;!ULIHbmLLP<>Vv@WuQ4@{hV$Dvh=E zgDzhk^Ww)7(_giW0`*U=^wz-s6&g|FHe=c9JHAuCf%XS)8)%FB4OFIrhg?H_;Sms% z3l=3&kur1CXwYf3{U-dD-}(Q`Q)(}>|8*P#$VHJYgG5S@tYkgc{l!CnTYP8z4?g *s%y2iBd<%>DEch$J$FN~1HFEH;PB^Drkc(WqI6;=r1hBQ4IHyKt#Zt4&*$ox~EU z%uTKkDphKYR%dBtZDVU^?_g?2r#;8ERZi4)EgEZZrJd3QDjk@x7ly6~a9|xlz$$`- z9s~uw2pUca2Ko>z^dmSJK%8I@!NU+jfMJ9PBM1pb5i*P+6c|USFo8fYiNG+0&|n&& z!wljKvj_wB2@~cJ7R)1T=pr0wBwT1FJm??-C`1GYL=0<)91ckk9FbsXA(3!Kv~W&z za6zKrk|aPINrYCC9F{(6gfNJv04yV^u!5Li2}y%%NIG0c%y0wA2xB!m6W}J23Ad0e zSU|GjHj)E(kX*Qn QDS; oRbEFJjAakIb z)W8mDfKJj0dt@~nll`zwCZHm}!3lW=HF*WQ`~oS9UX%*Z#Q&KofC!>?D8XeImb|bC z8~}hTaK>k90Ba|^kF{FOusUZD1(DkwRLJ4b>Gn$*{VAH48HJoiJVJz}Wh!X7U1H8H ziNYy40llQ;iHN8WEF)r8K=e$+k`_^A8MerXDj*?Cvc{Myk`EH-gp8)$)NhqzS@z3qMAy2)9c+`w$TpIG8y zm}Rk)+RYBu+qhE3#d(re8`n%O{VlUDQxw;`HeW&>kqC8uX~$62&D%+j-L$KkvXaz< ztZ2KsuIDfZW<;s^rOLb1*zUTG1=%m`=k6@?s;54O)bg?;?ut_EsnbjAR}{^wc-n+Y zez@vm2hE3{FImaGc-sE(D|B+}{rBhAM*Q&W;}0NBw 80tMIib~vPDCP1aslfS2dE#Sxu3W;VyK~*GOlsYlIy2E? zw8b&CQNLPrOEv5rul@5rcW)HzrS}T+^o!tCGVaF^&AjxV$B^H>?cVAA-h1o6cHdyX zm23fdj>61MWUu?1x4{wDDQDim{?2=g?0G-(UqUS$oV2Phi0(nXIH_&z6KQWlej!~; zDa%r;OOO|FY9Pn6e`V`QQ<)BFyM8(L3t7VZ{5Spr)a0)#&w_zk{FkM#vQ_k*tJVOo z&3|o}oQm_(>HBFxvu##=csA)&W^B>^W-;S5I@GB=d-Cf5OKv0;r^)<4s)@`Nbw9-< zvNl}_dKQse>0CJe;~0~KU4GrmaYb11!VByf$5>oE>Z?l$AvU+2= =~8qm!rtR&Hk9H(HLG>oOOz8c`MV*q?(VtuQ!Cun&D{jo25ta( ze>$$LJ2%*tY1CT%Q>#mr)juPO95Sm3Ubi?lEq*k(t~GcsqA2kQw7(l#p?SBjwyibE za#1kKQZY$jakb#*D8xy&4cVMTMz!6x%Tz%s%`tmlNobljZO2xEWUP`zS}KQoX9&5y zUJylI82a7rkRQGcz35#O^xpK`?(6PwMBh=F3H-~MJ4YEF2JSp&UxauYDSHq(cnl14 za{{^Z!J@Zte~$YL-eNHC&WY+=_-jH56 Gn3Ly4g=l0ra&DR+(!VK5}|BkV5q6lpu+k4b@mNXAud>zKxFk za+$ATsRlQ$Kp~O@rJwn7L)05FQ3;J6OKHL-zunWC!f(2QxSw8oEIRQsjV2gG^|rS% zR?-VBi{_FRwPQ&G(gukoQk8sKL!rTL9W!;xi6vq-v19p*&m=|W5HJw-FpqdhZwWQk zT+!nYyOIt_5fSWc3{ o?-18xJzGg@-$zuDuKOQlb29k_OFXezjc0Uu|nxu=I7Tbpgo!)5otL zZcWF4t7s$%_Jl1=E@M~#)k?t4Dj(K*HZ9sW2RoM*h4!UuaVA|AP=~9)c(!oZ<%srH zZ50-N5-5vE_xI&c&)uT<9rPqOw#4mr(OwHfSnl)Qog6*+ExrVx5C#P^QHW9|t6kWs zQNF3rNrS#En3UR7;4&N9$-v@phm5GctkhWfCQsczin6y43`F)<_q@9=8S+sxDl=O9 z=W_pLn34Y8E4 %peD $4ilAOxcshuU87)daiBco&r|6XPAM_8Rjy>)-)ppLi)NL90vJ&=i zcn(<@dQpUZPafBn?RJQ|=>AhGvpY@O2`jAdKw$V8F8GK75%i|rd9A~V%ISzr8P9pp z-@LFk%4=j*Qe07rclUR*5{NpB-%w6;?8cUWHWJ3xqok54ju?ET6f5(~n+ZI(idwB4 zuiHjxZ;!ErPt<^-o)$KlS`Fy6ZL}?HpA_SjLE1=GC$8?i&$`HLt)bG6bI%!_*(FT_ zyVYW6_FVIxJ4H$ ?PyTw-v#4ikQSczSS-?%q=L3GQz8T#Gp+&4g+>iVG# z;!OLV1i!-z#N0^3siKaLKPxMd;U_{%5T#Vz$p*Gw*)bJ+nB=7Z;8q1m)W=Jy0<)(X z={-D6USa2du95AZb)Afk>#8hSV?ZWOuLBP&Yz)XynZDuL8fI_wSYJ+cR$cgZ@zMNO zb0bI7Cf`L+L!B&qA9c1c0J@)`LG-1ef5JW9J$^SFnde=GzKwp1LJ{q{(_;wskM#ts zy;)OQabJM&=xp-bI}T9adB8B}91c0Czg=5i`G~{bk*V0}*8<`Wd+6Y9cmGQfja)w- z9_)?3W>0rUKe% i^plU#@J`+ z)jC5vuYwn }TB5{@FqcDe_F~1&_Z~?Yga@RvOq_@s!p+k*>O;lv}JK zYfoa}*m wyjj)Q`~+0riCVz7z4KnF9WjV=j=`pBJF7zJ0l!0YIAn!sLib0$xy7 zVeuQVq`O)`ic1~<&JTtX#4vUl+0C=wxr|{YR!79$mijZ{BnI3+QjW#U^%c4BqWkU; z#K4Y3NFGZ*1eud_s6-@=EQsM=)mK0NM0@m8qZHY_N4e5}Uu)`^ugy$4AHnzheS5Vr z*2hW~=k-w_pz6~I6w*c#7y=^oFhqbgf