oncn-bwm-1.1-8.oe24030>    fT@ ;G|`u`  %/)Cg&L\!vT*+r9>0[8-pa T̈́%jm&{;Cnl8ЮLx# oTRS@7Ȝۖcr󐖰|m|Ĺ=mReWu Y̊yi;;Nd'WP~WKTp(^~d!W?₺015Ⱥ}α2-ƥqR KϗpIVj_g .5¢HَS$Q6+8*~eJ=2LՀ.7)U) Y)VY? 7+?+d   n  f              4 \  N (f8p 9 : F G H H I p R |X Y \ ] ^WdXe]fbdhnConcn-bwm1.18.oe2403Pod bandwidth management in mixed deployment scenarios of online and offline servicesPod bandwidth management in mixed deployment scenarios of online and offline servicesfT9dc-64g.compass-ci^GPL-2.0http://openeuler.orgUnspecifiedoncn-bwm-1.1.tar.gz0008-adapt-map-define-for-libbpf-1.2.2.patch0007-fix-net_qos_stats-warning-when-qos-not-enable.patch0006-fix-input-options-unused-warning.patch0005-fix-some-review-issues.patch0004-fix-offline-packets-block.patch0003-add-proc-file-interface.patch0002-clean-code-and-use-securec-function.patch0001-adapt-libbpf-0.8.1.patchhttps://gitee.com/src-openeuler/oncn-bwmlinuxx86_64 H  Ri䁴fTfTfTfTfTfTfTfTfTfT61b92281c1fc19fc0d15c500ca4112a9633880c96d518aa37cfe8ef67716b4dc2dac2c4d18aabce3067c82d871027ae1fe8c9114911edc7574951b8cb94b73ddcb881b7376375570712005c62d60db218cce1f4754f4ccdb554e8596dd87b0b8e8f012a08621301b90dc8593af7b61ba5bbb66e20f622a5279e808cf4c8b6e0e6a3ff629bff06f365cba0e9a9628f6810e71aa6bdf897d5d7f9f80f17f65665683ef47475e25a3564b88d997c999cb0dd3ecd283f2ca29f8e8294ad84362bcaeda70968fa9c31d3d62e92d3acca03862830a483dc37d299ed45a9b5be22c06eec515e48bfda507d14753c83daa5a0d166b3086029655de88c9d3c00e3e8974744e171727dd78b26634ecbdc06f9418c0cfa1479d4d852f580409a5ea8cef661fe3591580c9a77cb46bdfeeb8e13bcc0d29beae759aee68557ef87d485f618788 rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootoncn-bwmoncn-bwm-develoncn-bwm-debuginfooncn-bwm-debugsource  clangcmakegcckernel-develkernel-sourcelibboundschecklibbpf-develrpmlib(CompressedFileNames)rpmlib(FileDigests)uname-build-checks3.0.4-14.6.0-14.18.2f(@e/ev@e@dh@dgdd=4c@cccs@b@b@JofDiamonds - 1.1-8JofDiamonds - 1.1-7cf-zhao - 1.1-6JofDiamonds - 1.1-5JofDiamonds - 1.1-4JofDiamonds - 1.1-3JofDiamonds - 1.1-2JofDiamonds - 1.1-1JofDiamonds - 1.0-5JofDiamonds - 1.0-4JofDiamonds - 1.0-3wo_cow - 1.0-2wo_cow - 1.0-1- adapt map define for libbpf-1.2.2- fix net_qos_stats warning when qos not enable- fix input options unused warning to fix clang built error- fix some review issues: 1.fix segment fault triggered by unsupported command operations 2.fix incorrect use of securec function parameters 3.remove redundant cmd option 'V'- fix offline packets block- adapt libbpf-0.8.1: prog_load_xattr will deprecated and use another way to load bpf prog- add proc file interface- clean code and use securec function- update oncn-bwm.yaml- add oncn-bwm.yaml- adapt libbpf-0.8.1- add permission to dir- init oncn-bwmdc-64g.compass-ci 1716822073 1.1-8.oe24031.1-8.oe24031.1-8.oe24031.1-8.oe24030001-adapt-libbpf-0.8.1.patch0002-clean-code-and-use-securec-function.patch0003-add-proc-file-interface.patch0004-fix-offline-packets-block.patch0005-fix-some-review-issues.patch0006-fix-input-options-unused-warning.patch0007-fix-net_qos_stats-warning-when-qos-not-enable.patch0008-adapt-map-define-for-libbpf-1.2.2.patchoncn-bwm-1.1.tar.gzoncn-bwm.speccpiogzip9utf-87c8b1dac10cb360c112e125d57d53988545f2bb056ee6a9a8a2f048905f0d979e5fce029feed62f66a2b532b03d05d5b73db5a80543153a8a7424bac0c873ec4Name: oncn-bwm Version: 1.1 Release: 8 Summary: Pod bandwidth management in mixed deployment scenarios of online and offline services License: GPL-2.0 URL: https://gitee.com/src-openeuler/oncn-bwm Source: oncn-bwm-1.1.tar.gz BuildRequires: libbpf-devel cmake gcc clang BuildRequires: libboundscheck BuildRequires: uname-build-checks kernel-devel kernel-source Requires: iproute libbpf Requires(preun): bpftool Requires: libboundscheck Patch9001: 0001-adapt-libbpf-0.8.1.patch Patch9002: 0002-clean-code-and-use-securec-function.patch Patch9003: 0003-add-proc-file-interface.patch Patch9004: 0004-fix-offline-packets-block.patch Patch9005: 0005-fix-some-review-issues.patch Patch9006: 0006-fix-input-options-unused-warning.patch Patch9007: 0007-fix-net_qos_stats-warning-when-qos-not-enable.patch Patch9008: 0008-adapt-map-define-for-libbpf-1.2.2.patch %description Pod bandwidth management in mixed deployment scenarios of online and offline services %package -n oncn-bwm-devel Summary: devel tools for oncn-bwm Requires: bpftrace %description -n oncn-bwm-devel devel tools for oncn-bwm %prep cd '/home/lkp/rpmbuild/BUILD' rm -rf 'oncn-bwm-1.1' /usr/lib/rpm/rpmuncompress -x '/home/lkp/rpmbuild/SOURCES/oncn-bwm-1.1.tar.gz' STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'oncn-bwm-1.1' /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0001-adapt-libbpf-0.8.1.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0002-clean-code-and-use-securec-function.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0003-add-proc-file-interface.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0004-fix-offline-packets-block.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0005-fix-some-review-issues.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0006-fix-input-options-unused-warning.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0007-fix-net_qos_stats-warning-when-qos-not-enable.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f /usr/lib/rpm/rpmuncompress /home/lkp/rpmbuild/SOURCES/0008-adapt-map-define-for-libbpf-1.2.2.patch | /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f mkdir build && cd build && cmake .. make cd ../ko make %package debuginfo Summary: Debug information for package oncn-bwm Group: Development/Debug AutoReq: 0 AutoProv: 1 %description debuginfo This package provides debug information for package oncn-bwm. Debug information is useful when developing applications that use this package or when debugging this package. %files debuginfo -f debugfiles.list %package debugsource Summary: Debug sources for package oncn-bwm Group: Development/Debug AutoReqProv: 0 %description debugsource This package provides debug sources for package oncn-bwm. Debug sources are useful when developing applications that use this package or when debugging this package. %files debugsource -f debugsourcefiles.list %install mkdir -p /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64//usr/bin/oncn-bwm mkdir -p /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64/usr/share/bwmcli install -Dpm 0500 /home/lkp/rpmbuild/BUILD/oncn-bwm-1.1/build/bpf/CMakeFiles/bwm_prio_kern.dir/bwm_prio_kern.c.o /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64/usr/share/bwmcli/bwm_prio_kern.o install -Dpm 0500 /home/lkp/rpmbuild/BUILD/oncn-bwm-1.1/build/bpf/CMakeFiles/bwm_tc.dir/bwm_tc.c.o /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64/usr/share/bwmcli/bwm_tc.o install -Dpm 0500 /home/lkp/rpmbuild/BUILD/oncn-bwm-1.1/build/bwmcli /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64//usr/bin install -Dpm 0500 /home/lkp/rpmbuild/BUILD/oncn-bwm-1.1/tools/bwm_monitor.bt /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64//usr/bin mkdir -p /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64/lib/modules/bwm install /home/lkp/rpmbuild/BUILD/oncn-bwm-1.1/ko/bwm.ko /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2403.x86_64/lib/modules/bwm %post ln -sf /lib/modules/bwm/bwm.ko /lib/modules/`uname -r` depmod -a %preun DisableAllDevices() { local CGROUP2PATH local CGROUP2ID local tempfile for NETPID in $(lsns -t net | grep net -w | awk '{print $4}'); do nsenter -n -t${NETPID} bwmcli -d >/dev/null done mount |grep "type cgroup2" >/dev/null if [ $? -ne 0 ]; then tempfile=`mktemp -d`; mount none -t cgroup2 $tempfile; fi for CGROUP2VAL in $(bpftool cgroup tree |grep _bwm_out_cg -B 1 | awk '{print $1}'); do if [[ $CGROUP2VAL = /* ]]; then CGROUP2PATH=$CGROUP2VAL >/dev/null else CGROUP2ID=$CGROUP2VAL bpftool cgroup detach $CGROUP2PATH egress id $CGROUP2ID >/dev/null fi done if [ -n "$tempfile" ]; then umount $tempfile rm -rf $tempfile fi rm -f /sys/fs/bpf/tc/globals/throttle_map >/dev/null rm -f /sys/fs/bpf/tc/globals/throttle_cfg >/dev/null } if [ $1 -eq 0 ]; then DisableAllDevices fi %postun if [ "$1" -ne "1" ]; then rm -rf /lib/modules/`uname -r`/bwm.ko fi depmod -a %files %defattr(-,root,root) %attr(0500,root,root) /usr/bin/bwmcli %attr(0500,root,root) %dir /usr/share/bwmcli %attr(0500,root,root) /usr/share/bwmcli/bwm_prio_kern.o %attr(0500,root,root) /usr/share/bwmcli/bwm_tc.o %attr(0550,root,root) %dir /lib/modules/bwm %attr(0440,root,root) /lib/modules/bwm/bwm.ko %files -n oncn-bwm-devel %attr(0500,root,root) /usr/bin/bwm_monitor.bt %changelog * Wed Apr 24 2024 JofDiamonds - 1.1-8 - adapt map define for libbpf-1.2.2 * Wed Oct 18 2023 JofDiamonds - 1.1-7 - fix net_qos_stats warning when qos not enable * Mon Sep 25 2023 cf-zhao - 1.1-6 - fix input options unused warning to fix clang built error * Wed Sep 13 2023 JofDiamonds - 1.1-5 - fix some review issues: 1.fix segment fault triggered by unsupported command operations 2.fix incorrect use of securec function parameters 3.remove redundant cmd option 'V' * Sat May 20 2023 JofDiamonds - 1.1-4 - fix offline packets block * Fri May 19 2023 JofDiamonds - 1.1-3 - adapt libbpf-0.8.1: prog_load_xattr will deprecated and use another way to load bpf prog * Mon Apr 17 2023 JofDiamonds - 1.1-2 - add proc file interface * Wed Feb 15 2023 JofDiamonds - 1.1-1 - clean code and use securec function * Thu Jan 5 2023 JofDiamonds - 1.0-5 - update oncn-bwm.yaml * Mon Dec 26 2022 JofDiamonds - 1.0-4 - add oncn-bwm.yaml * Tue Nov 15 2022 JofDiamonds - 1.0-3 - adapt libbpf-0.8.1 * Wed Jul 20 2022 wo_cow - 1.0-2 - add permission to dir * Thu Jul 14 2022 wo_cow - 1.0-1 - init oncn-bwm ?}@SK(6$!PIb $( bPc *`9IHB@z{^evfgvvfwَlG͢pd ɠ Tg 7C>G"'& \H&H#yKX\>s:OaTI'd{X"(@;Lv@(4P,r" rJLT+I#.9r@4t Ȇ" CS 0OEy@(:ꆆD"BmilT(f'ReB:d})K"jLNQ!} !*$&2|DcBB ʅb ocE(N!_(@DbPqluaՕj(tcӨTɢP"(L:!s=]]!"L 2@(!O/op0O0;8/"#D\ʓ^f's$l,ċJPP$pV 2$p fE{BBܢ 7`˄#A %SE2a#(Bˌ$¿-Ig"T($lA',GC m T:`HЁ#Zd< Fj(:Qj!⠙Azv_t|A|q-KqRXd 68U$bln*"mHy+-SJ?WS!b20I$fڳDLYX!WGT(THͰC 9r!E] sݤq2<2XJQ~S:2I,@?,B Q*R5/4,L2UmKqb_єy$@j+F dm !hk z󭀐4nP`j,v͑˥DрxpVZRm`NP+RQ-N (h{^:D@0OWhzE l8I-Zh&DhgM}Y?P`?"::FI:P!R 􏲂tJG 㼤Rj BlG@ʱBEZFhZwyx u <DJ:G5 qtE>$KDI,* XPX7vH6[,Ex}6J"0 aT [ktR&NM?EvWۤV6'A")K5Ft/H!;k2%@"@JJ,RQ)+SgZyԍ7#("*)m h:\Ի(0PfEdX!G8<TpF4*ڋ~TF"}$jS|$ _7G $#"|2(yRGxW8Mx0CC ,{ʧ<;š.ә:` )8 sU~ށΪoBɁ9B)ȁ()N"/e$yqoFP IG4].MQ߻QM۝2)*!wJ gVµ#svbQ( OժٹZڥ SEW`(PGPW++ 1aCg+nǺRգH#02$ E e9b6db~mtYP 2^h0Cf@XYH:6GcD2׾ >2D[3(c'dAwAa98@&*6H, AƄž(L2Ӓ$@*W˥V\c8q0^ˏ!0bJ T|J#/;Cksrc8ʬ\PBQZE R v@+K!1 cIY0D66:]8hb"/ A8q8EsNTЂ= L@[[eьp/ u\i!m2bȠ$ԉ/j:L4L)iNTG# [c*4 h%ŎL 0 y vu%#8Iln\3BLAU_SAZU3TJC!B$Հ Te l +PP!s,/IFRh$[PҠɠA23lB&R"@B~aV@/[6)I& | T:|?P!!`/MTN=~%VJ}!K"8kq<"{`P;K2- z7;o`F*JXFGn]@R㤆?C7Gl --Lm({+^X|]%ׂTz =P 26OAm |x|ѐD'$4XTМf VM2plOW RUrTy쯧vàt1_*EtGt&A{S(*yBu:U8|+-^}")`|E;pdLVXa&hO`VhըH DD}(ajN-T)+hԲd -(C@8BE(ѐŨ,PiT+i`9T'jh7M.&0 GPA"~ RMuFiR* v; DzYpePiT1PgVt E~к:hLc֔qy񊢘U,!@AKTC(*kHPiUK4 H ͢сn^u5L-!R{Rk$n'#=~4pU,jXRcMi)U4%_u(tjo`M8$N XEBhm jiZS, 4%R1NTZ{̤!Ȱ`A8.֏ccA#ގt " JOF5f# <ؾl6dm)#d(0U& IVh= a[DۊR 1@l+ v\m<|A^P?g8&&!goHb2+$/ & >ط5$()$Jl$Mp'̗Ć6~C^($ef MImeR-d⤈E*^!!h2xא7O(2AJh$Cs| /+4 p6#"E@4DY_Db 5KIe$2d eFibgL 5jkȣ5!dHqrϳ|S9i y"1"1$07* rCV!=G| Bs{ibi"iB<J8qp2X7تoңj0: zhpA^ζ~+9`LG8,8R RI{U"lv xyT\ioG DO.b{e5j(s#n b;("%P~!( 2kGlz$Dz욦eD\b*)lT&_X +.%PBi?"8 =Dx*J}jjsr UH6@DaW:#( a3:A ?Q5YQ~j%gW$ 4ڭF)ϓ Ҡ~ unTUt=Y[.}8 s_7iT'S,M.uߐT|F>8,4.$qJC$֤=I:`a]cJ@O(#Qu5X0gR[& 3Xc)XGX40d 7܊ڄژfjڐƴ֘j7Țڔ$ӨC7-s mv-؊J 7)ŒYQ4MnDMG5Ӑ:L]Mdi/᪪wUHan{&t! RX R%'"x?쐠0Ou4:uVYʕ/ak)m  Q{K{ڋ_40F 4Ó +XkV#!+$@s7?J_v9G\HL/"wԃg)xW TEjN$ϹNH0 ybZJ[Е UmM\K}mA!D%GX4!y1ƧzV^@,lh 9P.1Zʦj4S}9ZܭR ^)H  +?ԑ~ݦREj7%1ڔ2h3@mL?P/<'Ja|훀zcog#7Ja+Lo D ߷Ed$78d[l\k}0Nd$Ytf2"S_2 dd `hz>l 08ӏ*j0OwoXڊd0hUrKR$jw[TaAcPH5 [PM1:tdf=ȺMMI@"լ fz@dE`!d81yZg H7@Q.g$ o?5=33c#n!>l6%=/ؓ_=hw #0( Ʉ` IRT6o 7.[TYe$[J0Rm/` ģh&h+Y b9 WDoRQ_c҉a:Q,Npx\F&yTO@*A30cϢ;bQi"o Y{aˁr waB R$h EdʗdDY#*H1o#p:K/AؕO(XO.'eUGyE(V% ꥾$R,)H?(kQtŗU:~>(uF4n Ѥ,r#?Ted(G4P&Ke L{D^|<v<;eЩ {2E`o;{[ab&^% ?![aCꆆǡkNjKqq>nX'IHR9 {/nF E<>nDDK辞$޲ u ?6MTf#mg XLT#%ōDl衟/}/e]y,k om{{Ps駊E߂nFw4ZKZc[zxYyw}ܼe)fs<(o'%~ع~:,"kF}[i◢,ܽE,vQ]πk5?ggoUp<|2˭36~j1 |Qv0e%_{ȩzkϴe]R-. &]^-y֕坞3>(/68E¨gGnR>3SB)24\T/:leY(x}6%w?ޑݭtwJ ]~psҍI26iA垷䙵!~ѫCaGnZW^gmt:gf<`V*s|ʗyUQ;e^vS"㺖=E^Y٧iO[Z>o/Cv X=<Ւw&bו?#javtޱ'Ǻφ=yV9)YGjqz\nS Ƌ.5o}&`wJk뻣ȳdPɸo{U7[M8(gq/f!SY]O_cK\2?ޡ|zE9V6?e:zS|];NAO_\]&|ɎSUNd .|aR_sR7Mn6ӅOLxIm{kWCm% yk˳;_gv޿4|E Ak~I92&jWЖz<F/ҿ9<ɦהrvLDz?^j-آngѨ'x:Ì֖?Ӟxg/Q׏RWj΋z<@VpE'_s̀KK#7ey룩K!ycSͦ]>hYq̙_>}ßy?WgE+֗9ҠQ.| }+w䣾ߍ?k-}10+ƀw&]- 9x"Nj#],O<=kRAu[YniM+ݨ>;*>ewg]zTa;o fXxU#,ONs!;cɭ:̺5͔_d\M9Q} p!Ѕe7 EḥEHCr`0⶙dqvLԨ5U_~_/,LÚϥXYjw&,mo}Γȟ=w`l8I3עN~jcT'1oh?rœ_ o'VIog,Q-]NQ2`i~^mKU?#oyڳƭxksԬuzשs-g}cW}5Y= ]إN~M0/=owDחeQs7zv+?2PۙG<6Y1{nρgN1{/x_'^xVⰧ۰JƐ֐}>y_*=}#~ՓUܬ|nȝUIkBXlRkQepvSݞ28+y72vgX6m.En: o98yFu02pTTK4j>3:L_y*6pLf[3ȪzhD_?8+~Vxyt^m!Jk? sdԤ؀=~)K=yqdx} ]7y9ib7otQY{J}Xo>ud4O[(bq oj\^Ѿhcl,qbCeK׹s)*ve,suBv#wtd ^hjsk)ʶ ['-Ew}j o>.rqa d37B ?Eѓ;o^M4פk%y3;Žy1en)7P3o0/ݸ2=RFؚ0ugSI^nץѻ37|9.z=٩Bo빝N?!v;wGR[|1}m  '?~pjYׇZ[~.yZ Ow |3bvQC{pBkeoS;yIɛ 0p7 mᯤC ޕonXqaǼ0|K?P12_ZY&>9 ~Go?%-|٧&zAʇnJr;iǧ.>|9]Z+Ic\x}gS u$`BEņZ)MW_]5cnw5|Y[ =Y >Ms(.j-|i[aJN_IT{|-=Rv-|-g!W|.OVYI:仚Ztu!YZ޳A>+f\7ׯuч>Tt s7g' 2;v[jpᑱK3w{*kSn:~eǁ->=tzK̏eEFE5VmK=f 'Mx2VX2>s;sʏ<\y5c5NȳNO;?||>a#N g߻2{;׾/>n#/-IC8ըּyCC;v6wNy/'C6aG1œ2icI{zf=SW7#Ip9c/]~ie f9}'z3~5ˋ J8eE-hytJ|nOqȑOsta}΃NiyTZYCUͭ#m5nS}~7MSFr9nIOsŚ }&yaM3};N>>`]=Gd'ЃR&{]mOW9[5lIN~wAmt*?kw_#nkھdVm;IfwS֫%ndM-,l6[L: jհsd-piq{Id=ß*}'yqa9n|51N47K ^~vٿe܀柖˘> 򸐄KQE?ܢV:+:&\7>FdkOU]?OV{[Ee잶W7zRr&̽qs|;k A/qy˶t?P5ׂ;gK<όc)UoQjP(䰹ǡ!SLnȱm\N1sFUjꗈ_csF i;pg4fN=|9Jdnq~w k;>ki߷{N緿ArF|Yk܈uKC+F%y#;Ty2fl{oZGh=h(yqOi%=4(a27+$^|+N~& #_?=qvD ,%kvr:H'UɰJ/2sLU[zI+/Lms7wO~vH<|:Ar',[8u͔W^n8chK|Bfx)`˪{x'oU~#7#bqp++~cm̳5{=ƭs<̃],~s{/<8fݳavWG]Dmpcˣ.їxpIhmG4qMi~pTm3J`K6`XכL;d|*k!>۰蒴`wQT*zmSzӊ V=t{kxslɗނrefwkOq<ҧVU$mYe:ܦC9t\?֮kĊC~WD5^\^=xgfF7Z(:cNKx?Y{YVŇ[{+ՄڹۖSKM8e5[w* 慪v xV.OGv2e<9%qJ=v D%A fڄ>-c{F zl.ʳl2;Z> k}3m$6{UJew,Xdۢu-=q L˝بO/pJ־lZxMo< mygmc>Z?7gmwL.d v2❵iOیA_~> \zkɗd}[|ɦQ Q!TpG l6y#w,{_:Wn)/6qun#wCFgy #KN+g17w{y[ޗ;KۦKFt-ψ}$;aprȑYQ' 12"?z9| / -#~`)ذX|F]$b.V3=tnhk6;cn%!;I;&P:rW! ~EZȥ/Zq{Z |zeC[ƙ>8QʨmL\V\^lIW]{ _{gθM;L̈́6y 'KXa,$wUल- e8&ϵZ|OXvܴ~PoC4/1-d}잷}<=W>GތdkHn;7z}V}ͪʶƌ^pW}5)'..Ӱܞx~L枳/e/Yqbņ~K 8$(3OZ8{79e7w胕]}M-[:R6+ ymܷT&S >S: Kje\{Ø)+.opXURc6O/ ySu& lǽj:xD<=} w=%?sܮ7|l̙FOV5C̺^Z7n`~>RWҲŭf׳NTj΅ClJ̸2tjw s׼]|xk99'OucaeWcϳ?W\^8OԢtRNE.7f'"&LM^n{a^T[爤e׌3 _ tеmDO?2Eͧtk_x4Ro˔4V=5T>|ORn!!Ʋ|7ʅ z Yvu#O|7S}k1ƩcĊozj-wVȚ 痘.m{[$mNM)_N}ng^ɡu w8Gr'&Q/;̺wS^5)626):VdD+ִaC¯ Q.E#|my8A9TᴼK!ok`ǦC%3ޅ:lJx[%YVjϿŖ]Z.p^Ffֳ79j.ϻ [:̍z/)389~BwjŮU ptȗ_nuž'^T{1q̋[D;?5io;{hw^<;vLc|oݟg\L)j6?sI>p+ߎŧY9]s@Uw[`l%zy?ɸz1{Fl~v{?>sHZx}ԓL-t|e~B d<~zчzWjf$m@>bZ%1|Y!s>.\^Or[ptZ{DNK23Wպ>>e đ׷sg߫z#Ce^/I_Soώֵl3 %?/m-h'W'/,qwgaI+6h^bjfVC'SFX6gfw}%ŧsZ czĔ3tQR]>p3]:xW^+ظW+;/psޯnU~7ZU}x͙ёZLO?/䅾dVٸbčXhѴY+ۚC|i,bη>aJ/ZxjjU}Ɩn{溞[Iy8op{_2޾}󶏑T㹳==m?{Oyd8kgS+qϫrW7xoL3C EYݛ};M3iHz!s|wF6;wպmF$ \r}3.~irۙywDۉO6թ#>ͯweVee9b2kY3L>ow&n,9+89<6sqaFS1:0(dǐeQӁKzA\ԡQn V#$FF_]*.Q6Gzܻ9G;ť3/:}C_K8V4~V|nXk|C֏]y}Ubu4oq ~ b/ ,n=:70D9[f]u)b{BƔpݵ7bez`6olɺgg_<# ɰ1jނf{izl׶TeS3$#o^ F\x%oGx'ߐ/qOR6w:AT :Nomf@Yŵ!=tNub_7\l+g*{WA~ #^9sfE4/z"9*ǻ\ZdM&un.{|ߩږ-|ptlsyɣ闏E.LFY-k);v)Ȕ]*Y3$&}bk̾C0 YbrG7>:1rѳؔysF Æo!עӪo~T:CY>NԲ'_-цzFOFk"e_^\E?q>C}ݣ07Vu5lwc~|~b-G:TY|^y2 w珧-@̯9QiqYz{#_yhD{Zۄfz:j۹;ل~ X[ OĦ=L{ڙ)(%f ǡG5cNn(>](; 3wg_$ٳrOow9˾>GvXs6jȸSdQKS:.DABafAi).%$Q:ABQZ3}ss??^Z{oߕHnTfw7q9oKf;syS;Qq=A OXogu]Ŏ@%B/64;MϗkI,6)}g%|}\0EىJxONm6I Z'qo{O%;rru|FISwV(=U~7;srwn-K!;aT&363^ANT^ [QnQ,(VV|{th;#}J8!b47LIAe_[¼qQ~TQ bj:Z%Kchk@A4{ub"J{rliI^b{JȘa7h'g XgG$y}'gXCC35[K("P/ęh[&'P:[_SLhޚ4|%[<`nWT_Vz#izt P ]lZju-Oz)םt1dgڠh8@/0K^0,pYIEaGF>w8# sxj7P96,yS9[K+j~#B$!$Ny3Fq^N2XzXKdUè϶VVsol޻h ڍJ^m<İŷpJBY`a"dxD``ij>]@aŦs>KA"a GT$˻Qofac3 IKJ(+]-*fi;,'gvnDPnY?_OZ"zaf+aq\mLQ4A޾)KҒg}J̞G3y~>g =-VvGMkjyV"SG tv/ZR_ΆYȟW)(<;Ұ^ӻOA?(zc%0MW6L:4r?tNٔ;|,$.q4_~22˶)v/Q[q,=kY,<9St7 9l֧m$7f+9Sk ]DH|_NTݳm_&N W n3R|m;_ވ%*]{&i%t=|eoro,/H=kO--K.?[5/ @'e}{+jgT?vZƤIP68%uS{SzG$& leII}O2ݏm7 4ald<3ͧ#xY@k.KBegvҏlME).O,o~!3K" RDc~S" Ne@aOEK`MoCnD/:LEJRoh xޗ\4F;!-V.ÍU+z>un5SpJhjI')<7{4_'5}z'l3D@*j]uM[_А<EϻuV Sn\Xx8 ՞g2=T''G2t>Gzmԯ+dzTW9oR7,{,r~ cgKoRN`O\\<&F^XF=A"^a韲X|zr=,Q_v7azt\k@ۘ{ *w$a wbn\tawѮ'Rjȣk Q+G +/^Ta! Dlqm737c6dXҲP)54>^nӛ^;]LhwHu(ړx\MO_ZI,-Sl]IU|PNqo0 %IӁL}[,.k'i\R GhS|a!&q>bz$:^YAm,3^#]mBima;MgN%F։!uQ~p}Qi:˄y`FO)<d"wI%%]P!G?j9WO?*vc~ھ~HYVcKs,io4ӟ<Xp%' QXmfC}[_|}^?89fj;X@͙cև#)Rw=#:yzO=BftȾ#'TooS;h+fld1,-(bը> s-gqŎxĠ]d7u&C48IShr/ej?JLҘ-yTY%Z8lM!B㴦J7St?gmPtQO8 W\)ˏy&FT{X^P +xda1ZXjA,iQ|a}dU~u~ݢ#A;WBو0f/Ȧ9* -'"#V jzTS ]IF?, C;Wc$TcC/ d;7c!n?UR[C*p *nc )Ua'aC7H_`+c1|(bպzMMbH [M6lpE͂T6T [+1$Sc g~DvLT{h Ayߚѩvй Q* ͋0JO' F48 yYXlK< ^Bu:cy?-YƏ)|ݹݙLcd|O唔 'h=Џۓ'mO븋gnyG_0*eĭD W0 9* h{*53T'XDWgҎY A{hy)`8hǽtϔ~  0웑XucU6\ԭC»;S-rHy,,cS=ihUCd[M%jX}JA9x9*T ~t[tsl # Kvlyaڭ3e;6D r%d!}n{9-#i:|{ 8?HMmiR`glR/ccs]Գ %r׶3o}pXͱ: >6 `S(~ X$Nt wY{&D,08epkdV<0g eǏ03ĉ*?y;4?Fm|jI.!#oX5S:v!sbvO\z&5f^!!Vs؎-2u{up$I ]h[Gл]wl$3$PmJ j*܂i6=DB[ݺilێ^G9H&HA#cW_OQy41r-roX<ȯ"Ai^ P%&/rgDg9:5T"? 'tY꣩68Y}"w(ϙʚF1gOwu$IԸNg?]?濽'ID r_|Bep8XO&uӤ˩KqbRKNI@de(}|w&$A8LOoIxJ02 o?E5w9C1Rs.IM;hT1,}oyWY2AhGΫ(?:4%ѧٹ\[lD]%RC+9͐2,Zz/C9xO}ɤ-7 W@\E=s}*R 2q 日Yqv}H]ƛCiʇceeLDVl:͔Vug_ VHl?c&;޼O}cL*<}9%n̸ŧJ|IkOh9*j;f9 N6bY U͆@WmCR>,醫-?S#oI33&[Qv[]x~[$s0kwwolOcZ?jn?ĥ})sEg E}\u1ờ!'saG-^+fN_>#Pˤ%xQpcpv6se<iاe%eS-Uv Qɳ|S~SyI t=4ak2$#VO;,GxQ\@Raݸn/-wvH>@8ݑӀK7@998h>2o?-2W,;1?J/krY]Ty_Zr/ q8)tt\u[c{!.'~PDUHQH:,cpqO9 t(“n?KJ1(3DPTsDK0Z ʔ2I0Om2(EkIU w-+#a>;W2& cۋ؍ аrz8GՔ:9:૰M:{>08FmƢKViԳ >;?ޢ-[r݆X!}7Zz='6~|7:7#ML[ s Uy`P5QAm(5uy#-<9˩ L5u{YH";W+VBӯ3Qh<5_72b\ͻIwuR1/z]toR?$yN76R4Ag*+\/3|̊A.n8ERSjMFǑ)QA;ր7f9t }L [!{>e8t⎍R;4U ;3Xlf}߁{s!lRZӽJʌt'V-UZkG T ?LRWIJUB[d[m hd7jŽv.Qx$kV$bzci]#4#)bۃkcr눰~,Ij2M9~3ؠ +`ٯ Gf81?Xs DTB0}LE ⿪i?ۧKˏl 8}mԼm:/ݿ&)=_˃F3T1}PGEO?C+$Dy}w [u|E]:r{r?d.90dqs"dKuL:98@m?(T+L#e=^P ?( a·idWTbŶ%=p2~~RQQ0WE#WܝwYť]DZu?+WJ,r~ fɫ{U]C ·n0fOY3SNY1GQ}WޟvFe=әl>#Q$kn'^h ,H֙2˖esUtlx,mu]{w|YS'CUw2ľ}Η~~s;Y}l '{K*pd)c-{G_v?vv1cq~9;@Yf N|ByxRF5tW\J]͘dHSjrkyZm@:f\*yF?c&EdMh9,L9Α|N]źvcީ4 R#% AnMW|JW%%<ÊZV&d, ,0#Gh` o}`f<<)5ɔ|O{6F ,&mR"DuyóJ݊b/rL)z>lhL8 CaJKٟJM̂LS┖˦xc3>t21"<͊|W,jc!a!d`5'}pN2VK Elb|9+E4oij g٦IxI\3G?}g(c#4albisa]N['DbW\Rmc d3uhK`'\ͽ'Tmg;H[&&Ro;򂣽b- Q" m]W: e0Y0u8leۢA\4(Io |Kّu Rxߓ6k]T ˲n f-)i,5̞VӋ ko{hi|`(]4;-jO!rXIW촵WJ\ypERBm#?lΰ&/^T⼧R]ynFnD"}t`%~f|G$DQoWSˀgw0tI2"kk,Pr+竻s1>spsK)Oq,k!m:yTZA;=7WVm^[ ͗vQ؟$8[K7.g[-2Y;>P{}p?WPޘ7zwO*Cb)c4Yȳ*|H#jؐGx֦PGЮAJ}8Os ĭ3ZYj}> F6R ^q`٣OYBVZ|j[r"Rly8=(?XzB5s)NZqa$r(q7\\$bxD'`s[}u>g1?>!u!,32b*h]J4* ~ oetҳiMjۖ =cӟE9۬s4uojilZ7HzE)0~LK>+t7vG'O\x'4~4;2MDh*m=RgQ &Vau~s5?IH“^O8:_қ!`i#r]_^~B֣p+N7;e08ƱFEz!..7"p8`io󍜞Uc=`pʝ%XA:[ nJvm3 hKq8d~Vr"vÓJ-fgf^-.og  LFg\-3 qnRS O ™Tn afu~ "I{4'W4@3Oxw5K9kQڷPZQY̘^Ǭ~e& P@j"RuwF-pdm)Lw- )5]q4#G.YD7D_v ؏k/j[s&|o?YQG۱9閾('I w.HU~AĆd" qVuv8ߡ$l7V1J9҅JL1=_ok|O:dD_sp!§3ӳ!+.d>ȞchН2)=hǣՅCE)uʺ = j]Ӥ SgӘ_'Z8\V?wg.4,Ňt,<,5` 9wm͚ U{1~Jku؂X7pO Xlv&g^3aӖZoܑ3q%{ڹ`vbѲ̗qOf^^ cKJh5/] cv|N_Dt[!)QCZO5*[7SM(IpIv@B{G2k`N>*1DeJ}}cVB__,Z|jўǢ{r'<%u@r H #-cVsʮM-$Bqh?VcL+}͊VQ0֝[| +9Ѭ)mE{ln+Eb r 2IhTfoa920x,药o*n8)nQ=e2?,}ZgR
(a5roM'W`!"O08\0ݿXr " d7{k [Rȅ( KY5MUn$n⿶I  DrPCUNYh-a0  hW6Gz ug`C#r!vYമ?(΁*,XPkD#߬!Bڥ{WMk ?iM@Z LG2Lj_a?X#"Es9[|DRk+R RM&W\ iHr0iĊ\bY VNQ8l[3P a# 47݌#ỿl!o'99- K?+D&kz98L`0o?#DއBwgq ޿%e#-׽ːw\U@k=@:\M@p#+]`B,&dK+/ !修~o._|F?X^޿3uFx/+ '% }Gj"mB7+d7MOPx~2Goq 'P\̿1~ @QO=bmz14+i+]nP8rre%?7J(HyTFmu ߰