oncn-bwm-1.1-8.oe24090>    foK ;G|`u`  @g Ĝ5:'ы 1^Y1ͪlhu~n!gDvl[ $sJֵdSZ̶GC8{+n=W/FQUƘcˣ0+>!_ hqE7>/(1 $gwLŘ j1Y?'ͅ|I%F!J UG XxOd[6v;}ܨ@ DçWiCu1sՌF8Ug**# A/ۮdj@ *G  5F}.fGf37o0Np6PAoӹ3| | f cɚRi $11ed1c973167b43b08c37f54ffc8c557df70bd4706d1a16989623c233145304cc567567b883fbf698caf7ce3fc00815f52249444tYKf.'ж>7+?+d   n  f              4 \  N (f8p 9 : F G H H I p R |X Y \ ] ^WdXe]fbdhnConcn-bwm1.18.oe2409Pod bandwidth management in mixed deployment scenarios of online and offline servicesPod bandwidth management in mixed deployment scenarios of online and offline servicesfoEdc-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䁴fnfnfnfnfnfnfnfnfnfn61b92281c1fc19fc0d15c500ca4112a9633880c96d518aa37cfe8ef67716b4dc2dac2c4d18aabce3067c82d871027ae1fe8c9114911edc7574951b8cb94b73ddcb881b7376375570712005c62d60db218cce1f4754f4ccdb554e8596dd87b0b8e8f012a08621301b90dc8593af7b61ba5bbb66e20f622a5279e808cf4c8b6e0e6a3ff629bff06f365cba0e9a9628f6810e71aa6bdf897d5d7f9f80f17f65665683ef47475e25a3564b88d997c999cb0dd3ecd283f2ca29f8e8294ad84362bcaeda70968fa9c31d3d62e92d3acca03862830a483dc37d299ed45a9b5be22c06eec515e48bfda507d14753c83daa5a0d166b3086029655de88c9d3c00e3e8974744e171727dd78b26634ecbdc06f9418c0cfa1479d4d852f580409a5ea8cef661fe3591580c9a77cb46bdfeeb8e13bcc0d29beae759aee68557ef87d485f618788 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 1727426373 1.1-8.oe24091.1-8.oe24091.1-8.oe24091.1-8.oe24090001-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-89cc153196ed3c573201e7f908321c4afa33cde9e610e8543f11ab6f13783788d4fb6820898c0a8e4854b6bf481d1a7c9ec71274792ed0d69de74bd794167b4a4Name: 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.oe2409.x86_64//usr/bin/oncn-bwm mkdir -p /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2409.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.oe2409.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.oe2409.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.oe2409.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.oe2409.x86_64//usr/bin mkdir -p /home/lkp/rpmbuild/BUILDROOT/oncn-bwm-1.1-8.oe2409.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.oe2409.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 )`2a3ȍP`"ϑȉIB.W" I,$yzRq2Ā,ϥ\.S0/`ɰ=4{p %" *qBNXėANi\2Js0i$8Г#Pԁ8Q4ِYdah*7`0ERGАH$Bȳ-7-- DX*"LBl ӒyIB$W )ʂ?D!D$X98OhLH(RP,mI0@24 H!.lR ">Qx {J"1YBIuC3Dp+D d}BE0 fAd$(KSyrdxqR  d QD"]CLe)URhi `ӈFE{>ÐJHdCC===DmD HTsDD9">1Ue0/U T ~frh?eϢST{g8_Q`:S@7E€ao;YM(9 Bȁr 9#I2$O#ب9Xr;!鈓f˥B)*{7֝iST;E7NiJPXvd.C,\; CiZZU0;W+X:q*ѿȣP7  qb{{e!F ,7\qhl8aMXWz rF$(ÕrC,GLrfvLد.|jAƋy(>*pƣCi HTӎEJ (:A# "U *NԞ\ùKry4> HB>f!FUŅ"CDGl#Ӵ2'?y40 XrWt2#(騑.Et@$$RRg:>/2S6lIeE PIPzD0#J }D+!C&AS^ӿo6d|] C fh H+ \v WH\7G&zb&Re섌t00H.22(8CDEAS Q6:0ȘPIZ~zZrW*u5k p'ƫ|1Z#D_YLi*Oizqhm`BNb G jP1JH$CJHqe)6Bt8Aqx8I"ƐSF MC?’!h'NhIґ ZPg^ha@0%! 2"$B`MFV:qxCR-T?3ՉhdApbkBFaDԗbq&!Įsp'IC rkFȐa>Hk 8Hj*Q)bH>"DWJ! DA|22q"d%H S@u`jOT14Pf&ڟYV\DH29;؀P(; <S` w&9I$o[*t{=" 2򥩃j۩/J/diBbM?Ad,bCj3uI@Uf HE+Шȭ _jP;ㇲyF5BRMS!e eoK`ZJOA AI`?;h[89rd ՒĪI." $@J X*Vn.kwYP@$h{ ecB%0O(`|Q:;[oثϓB9LhNl +瑌pٸV P(X`k<ݩ"B?--5VgxYhDCK uvgbaGE%Vw\Iȱ&9Һu8l@9/v4lHm/0>1@0:#`@E8UWiWR&6,}'Ef39C ]f$gabX@G" =9Q^#<rA&[BrB~#]LA,M-gFG-g$DZQQ%-Uk^istfůPPfh`TT#Eh'P1S49U.LuS!b ƞtYjGy t\Q^>aT(*4 ebЉb[#@R)H 3!Ӯ᳼|Tpm2!U]{ɰsWE v!0bDחPfݪxN;>ǤHŞB#ܭܭ|tJ5`VO^>xAU 2dfȒqxUdF:C:ffh5cV`DmxLg(Tdl,>j5+_ gX%Qvl,~4ۑuAdAi`2zlۗ͆m5U}s՟ Ep Ԅ^! G"!`"lq[QjRBa!&Ȑ b0GP; 3ߋ,b2 I Ryz{@!$!'xY<;D-7U7  4p/0|; LA2LʳELQ0R%<+$4mXYw E&h9^Q m`hc`pe=fUXAxW(zu&# kR&?b)2"߲T Ҩ6w1MUl_\TWmy<Ē 0.^yVo*' Ba0/^$F!& 9&2C%An?j2dGTOBy2Tx`!M,M?MȗC'N&@[MzTMCFbAO4B7(1=puq"/#\jAr==ccJruNTx=O*+M]>"`qt}BloB-4~_`8mU@AlGp@EDou14eAfMZ`H]LVLe28ʤ5X\ 2tJ(GP05X8P5:*PR^ꥶ6^ 2|٩33JPmd vǮdr9x}&4 ~d*!t84ȅ N 0JPx/; 1C<^V*FcVTŶ%AAF~FBI4GcdijT(u5ʏ1ҞD"5L"GALQŀA:_}[ZCc<V;8Xd] GYxFa*@Vā:hczAծ O( d0BDD] :2+0+ RX" M('4 TgUI&<Ӭ倒Ɨ:ڃ0q&XMne7[Y?*6IA*15:UN:+JZiU=4ʲ:@IZYhMP[u:㿬2#$4i9p0TS xP I!ojMQ[~v+:rra8rX vFSmF_hd7AVoj4FVڮh4AՂtxV M⿠jS[Þh* I! mLIgS<3P2aeV?$`^@O[:|8N1KpkNWnA[e daP$d7Q`#ԫP/C]?SnanSk;֤<2-g?__lؐbAa6i`XѢKXIaoQV+MF(~ :=uo9J"*c*hkp8u5u7MAj栫}rF#֊s64PCoZno/V\?U?u&Ѹuiʭ+M7<9X TAK*J˦:kԸ?jR 4f3ſn)ImQ*u8`P~{&fZ8U^хL,{r\r>ԭPuPt!<-IRX[!6.BS ź\mCH/OӰuZQTmnRS F( ^]{d9u|SҘTYSҘdyES{NۀڮE[Qi4X2kb3*}ؘ&ɍu2A),%\UJ)̭pτu=$AUW*ˑ#UDp #]"K?lM; ]Ó!ba9j}z/}^uo}Q"X{ ҂ƨbxzx*b{c4{h@uGK.G#  eV$.z]?/P]MՉqT19iI|!/]CL_i~ՠ+pO64:d+4$Ou1T*K( :ǿjV36013ԕ=! =5WW+ C)X"< Evc qƠgfflv-'& wx{ bmCt!S[C4 :)X55!]eb1^WB~K FJ-p^WAx uф?#m%A;M9 y_zlR:Q L'Չ/ˈ$1/Qycz_מB tB0\{pY4@`!X,*oW-a:k/,b9PYd.,BH$@  hLG+Fx!HyP:!E(ZEO zӣ0Y \iy!pC)!BlJ 62U9|>ޢ6, :ؒD"fݐ(>KEG楂Z_o&jכ iJPTē1LlnD5EC$"4K#Ydd$۰*YdYcmބ.`I*.(q̃ Q `,D ͈x0sF![H3^e"~GȨ-5=]HTXu[zD,8acI#4IT0 W'nTo8&=6@Z'N"撲: ڎ2_X*a#0jodzp\ʰ'Sv&oUPMq@Q:nhH!9pV*&!TKfuTD,#`G,fPK ~7)ԉ 6=~A/bWCA03!ZjG`ص/iu.m0eX0bGeFa`QCt{A(jCX@_c"v5=?'J-4<Ѣ7h@X48ƟWe8ߊ'{0jڢWCmi9DߢbѷkopYc0__ؒDrU b@)`R 6*~+p3\rkXNCE,!šM+hER+X(聜F2R8Ghe<…BmGU2Rڤz(c^W.oW/`1zXdhǣ> F˻?o1UbAqN` ։ F}iVmhX{}]_fh?ChLaP#ɞNKJc (0D02^ξ& BGLm0 rCw,)Hv]IIWTAFѽo&\P"X I*#xKHcI.Y^55.Y#j]ʈ5%k[%k|5,Ic 76.)_E991#!bg%DA& F!RH6<ˣpx,ގBgtގ̧sXT>0xeR鐛D )89PNA#`W g~:v ~eJ4U%\.7/J1!J8rwgB ce~rΊp\{D"`Iر89p MV#zJJ8R-J3-MJV(E@" YNsaO 8;"Kx"݃.v q"\%5FWej)-UρEsFy. ؞@|OS J%'n".x@AFE%9Ԩ%;.WCIɁ9^T#A5EC;@t{,)j)MN }PtJ-kP0 ocߔyAe6vE<QDE!9RRH;irwqoR6Dzֻ`ֶ75z~]-ftG[5E;6:>>eUkϝ}[ϝbf{8ǃ"oR=~Ҫ+/vx|oԷ%&~)ʒ[^abş HV}_./gyy'Jj:s`5` ^fyP'L[F?%r}?һ`hE)݂m]YI=r;lO_Թ(zp{zT*=3o9KNOq?."3KQK=MOy\舂gSҾG0Zcݪ/O'Y_:gЪԠ޺7+Z-xa$akюa$|QyKOYB:v4uzFs~fi+v)hyi۬2g ۭ|-Zu]_~e7+2kٳ^앥}d哸-<2dЌ̳I_-)8j}qNji.]~])]c8?ͳmѱGwCчtrSGd\7߼yvN{mD4 l[CE:.sN CR*>mY\aÇ/M>ݒ>lys^Οfϧ00+>>MKcdI}#/:M?=4Wq\;O}zfoGOQ6]qJ{Fr7uiAM4-g~_I^-93oh`>,V^!n!=t_`݈W]23iMjI|3fG{r[lٓg" %^qdO^9[?z+Ǖm,Hx1`bYZgB v6;v߻|knjWCNfWxp#eiqԈy$_m(?o! xg/`CowEG6LԧffF ߲ۊk"Z 3Z|5r>kvƷwV;qS_K~u;[;Wqt9)Aό#R}|b9=.%8|%3*̧[me^詧;e7uLCT4Um':˘[4A6mѠ&<*e>o.]_Ęn~f3?]4z΄ԶLv5f^ɐgv :76%1l* [ǜ#?˚>~Ul_k;}Wt/b}# z" zɷ޷|K>Vr7S*n }g%ʐӏ7-dN?dӳ)[7޺vۍa]3SvwO٥G?`oȞZ5‚43}ì[LNFՔe_gɰ]Xv_oo[P$͑][]4tl</V+nIVgDYS 'r}2_~!4\J%UVzg~WEѳ%Zώ]6L, WKtp}io<^8lA|qg#suyo{ȃn1}>i% 3Wޯxz脏~CxBo{kybg%){ |o 9Nn g3a+nO%1ϨS>2\=Yu9QT&duKI&屦^v gϋ?uy,z->{C.iƊkӶZӞpc;OslTX#NNoN^.93S̈́obmmֿe;'6kNujaLw/n>+.rMČfɠ9GFM #Kgٓ/a`@FPu㼞&yFؘ[ԇˎySWJM?"V?wimLF;O9;0&z'fQ;Td빽~;roN?n~; %RzPLR0goxѪ؎xs6ΚDI.[=v]z{6QV`c~w7ZȠtȜS\0jт~1KȚ'NG/K*ʫg6}?g4NGAE9ykWDʦW}lloY>+v <:OV?K}M{z<)5z _xhC"2 sm OY㙽Њ}{qn#/Zu3u)cW|ckP&Ot|0*I mzMu*byņg=]T9j]nSeb k}):6a=qzѯT]7nnݕeblq~298NW2w#;v$MlEx<&9%+5pT'>btt)!qVl>n̠)+vҫhH`u$=vTk;ّlTrܔcFwN4_EՎރlj{kf|u3&kԸ,nEX|(RMmY>لSo]#zb;`^:o7.;nm~qd)SϓS҉ܓjpHTpk6ɯM/Z?vg48ΠҮr7dt6J 2>Dni}ssǿu}9OcmdDgRjJGF: !ɞupC #wM00o2/=  ! ΗZQiSO|hl}aKՐN9&)X6Ş[J59`Vf-/?nWGKuQ7)[c^-ie?ç~u=%6DNѧ-tlmۛz|z/,vL]f=/.QwùNv+|8tKM׃9)އYifw&ƹ -۵ysVPrgoIygݵ{nz2ٸ9rn~ga1/fKrFlYtgo~i;Ulxx>2x}C[.X^b53z,l1yOسۊI熆ܼfcc`[>vVTc~ #9"l^'!Y\orUI'QZ;decψ5 e{oŅpew_s9l̔Lh3/~UOk{Hr'^ōN*k٢P3im\ɗl4UhMLH6DkykN?~ByӃ~S0x4|~ؽ-Lƈ-n<}ٷnIgެJl[ig[sAܑ}["; {:=Ǥl9k9R"a5wP/Vlw;ĠC"2St[wqsܞ[fY,~zɱ>X5JlR n#e󻲰f}K580`2>м_Ƶ7b XUZ-5voȐ?Y].7[Ǩ^mB |+1nЯGģؓ7/|@C]3?;}KƜ)Zh4aaUS]\=? ~3vfy_#.K}%-[jv=ıOU\|>Ħtľ+cNv/'0wŇvjsto\>F]vu;6<~ŕ,/@-:O(m\$rc|l1xW("-mԄf{QfEuHZv y~0@ ] LTC:jx+[|J*WO#eLiI39kXAş4/b,w#ݯ\뺪`ϼeWo+9tGKys1ݷm:Fjfoزxg0z~Yض%K/[tqd~W}륙Z|7*w]a̬{7]o;b>= *l_(cJءS oEF$N"hM,Y?$pռ{OM_4{a AN˻2ƻ vl:T2]S˖ng5+HZ8h+ͮ^lժ+-ekf= os^򼛜eX2Aݟ9/t9]J\Ő G|VoQ{} O~^CG̼Gx#~>]\vV)>}n'ύvc:m4+}Ŕ1i>D rX|eꜾ+;t^5~ Vɦ_];3whGj?׌u;wطL=ԂK[Vxwܯ)@zg}wnF#Us}ϗ,g빕7ވ w?:+k WǬ!>o/N<;3W:G֋v-:" /,w}u9\=ԫ[j޽7S4ÑgR8ˇy'{MNH:ndS~[۶:ykdoN€̵!7?Aҹn]?kk_v/?{ t-e~ݯqDE,gX\2J?_&.K:jW]e\u͡GЩ/4U.iG%¾ú0swK=*vgqdu1GhyiZV{>Eƹ4u@iaQ.Ai$aBbAPZJK Iiin y|{ϏWޛ?&|A-UM\kwNYĎ{ޔNthkuP-&-Vm]W+`cc!jv "NS~?Z> ' 6vJg8.4_Lc}FvES,~=sMRàV8sIܛ&a'SI\..oj2Q}ԝ|anbMΜ<𝡛vRN`8͌u>B7`x{AA/DԳ ʸU3ߞn--NHNX( 8M#S'nPז0|\rxzZwښ3P h\3i@qe.2m% ?Z=;}IYE֙" ddb#fY4VЁLEpt)$6?ԋ#q$@4Ǻ ,֗>;'1 y%j>ؤ# U՗HB%G0B[Zj :^u'v -y6(7r1K}f/p ̒&? e(loRQѵ<ţ>/zuD=ޯڻ ;TEez} ~.bz^Tv1ʴ`/? gcd1ɪS7̡Q, "p3Ϲ[W$_*5UZ!/%)%=X! A0h&Q闸:#%0qo {[~);%n= qp3R(D4#)gNwzptoh7rr_3Z%1;9TXOSO Da#Y0jU|.#j.vW?1l-y-wn?*%X{W3Pkjzo3nTo)Y`Cj33 wGWYA3Q!#[-&ד/&^أJxW[ S%M/{ʒ亴Y g^,BlD(慕cZ^Ձ&QqB"G'݋Ta8UJ:(dkf졭y4SFiʾX LeU5s`;$1S6%K,ɧA ( mJ˴qVK}˸d8&`Δ$3DBwc{I$JT=be-ڂaQk!./c)FzyۗB{LT=_7Η7bIJ yxq ]O)_jٛKl-}7#SKp˒ksK=IkaߞᏝV?91imR NIT=%o뷺Qk#I>~iFgRrߓ 4`~ԃݮY~j+l;ՠ=Tqrr{Ilw`e8UΕgѸCsh’blXr!Մ@S.w//^z(9\1^Nj3RA)mЮ|TWj`'և{ƃNe,̜*ukTYÂ1NMeJMrӍzg"BjT>^(R,{Æ;؇U}뎥F{r ƤJ©q+kďǥQOOa[MX6[l;`+>cmt^V"˒Pٙ#`Shy w˛_ҳ59ߔy­l$Pؓ&gXې[&$S>`nwZB/^%Mxfh˿pcxՊ_0Zһ鉫{}bJOM3Md jz="F #= Уm"ʶCW]g"a%4d-OeC3q6nyEx0"NDC'LzՉ u O^k UΛ dB{e$%p_`?mԵSA?NkEқXa/$&ϟɴeOWX{,p\#gisƗMކ).Z-|?6f鞩BkJūf7'/Iد>w؝w≔m7h_TQʋjnr4jQ91[\̍'plE)JM׾ŵ4ƃwy!q7FB mP!*7c/rImR*ot &|_Kډ"0zCDbXtuIwܻO~س1WocVPˌHרx۷i`Z[NәSŹu~H]A4ܧg_|FnTZ2pSJE*%Y]RI Ba*Ti3pHяwΕ1S鏊]߅/rRl+s'm735\}ɉFA~mfߖ_`h;>DaN6_'Ps&)X*aHʭcliD~zz`{]"I|m?Uڊ50tL!K| t5~%8n>jAKA(lra#;1h%rCIp4~B"Y~<'pH@ΕP(p6bj5tx3)zN>Bb|UڹԂxfgK Ћ4;DX[wUTc|}d6?.\,n}ۘ|6v4zCJvcXIe җ"8X r^>zRV#wQ`7եMĸ"xCbJ 3Ԙ-mu?1HP޷&tt+|p|BdJn"b7m 8 B^gb`8$풡1fpX^Ok tzGoc _wnnwf%D瘮129C9%jB %Z)c$In9:b=[BJ+)qke)(BALouooJk`L.U셳I&ѕY#@6x@4Z|2X6q=3%|L>fdk!V1Xl? %5uT ?R4F3 TOZ<)")Ee2ASI#u﬇lPN!5^j@VƟ.<7’ݢ/\ur tH>nߵ۟sCrKv/c3kii|[ڪXm1ld`<~lqBL[߱ Vs,2NMxłX oV1] =6 hYŴU86|<#3 qOMQ_ycKȡV]-ܮ"^yɦ{k١`@CWtUt>g LbFo\'GRxiC+$Zf֑0nם. t>.u &Ft#,r;,&MVin󶣯Qd;}a$-yP4ST^j\FG`vڮh(TDo,YNCN7Hɹ}e;]Vh NV_t3sQo!m5SO׏oa-FR.QP֓I4r_zߵ_xG+*.nJo_m .<ńzn[R}^ :OQM]7ЫfLԜKp%Fy53Um{ 6E[UqLQ*JD}G=pO΢$1Mqi&av.%W@/{wdT#JvN"c3$ <֢˧ePSFk2x$M3Wl=gGQx_Ja~Gq@bc O?NއrvrQ{'ijTQ=R&(q jLng}`ؑ׊نS@2)c ^ah|(<8:]xé'\uY$FZ5iYeF/yTe 9݂B$@,#+T^}n'yX4Z I H(ίxs:˾ѿ2rpT=/ TX7l8- kA˭g<~kO:>Nw4R:1507-ЃfN>&*ǨO̕$N?fyDl\huUޗ ?hN W{ݖ9FX9EH~} x7=+mRο3nS'!0vqJdqaR %~<3kt2eL`iS JwZRuteΕ̼sz}Xxs"v#}yx'/.4\a!NQ5+Nvex*5}f+^ Q[Eo(!5Uo-l²&Nmg}-(k xla6@iߍ^ω.ߍMHO$bӬSieEDe|J.[;cvX}zŃWyӽQ,xK2xҘ`ʽ [ɟ9ˈ_ wƽUS HHٝx}u ӗ[EuVks|^Q#P~M~hEv [#>lSi%VÜC,v~EeiTnMGw)8JM]ވ/t y%rN9r*vMA;,k6=ճl*#vM)X*WnR/{1G̋^G +b#@.?m֐NS xnﻣhN<0$YZ tr(U["~ȣZ\v[w @BqA-_sk_%PpfZ͈={z5:*,葌>S 6PHS]XES<2В-nt*EO1N ajxt$me.5/v[KI*e䱹DQ 6ULk6<>Qѓ 3=Q^]EF{QN&沜'^4C/c. uv" Y>wq?ҿ?EN6A8)Pϟ3,- 1-HvAYi6G&E?uE9H8iEfXmIh&|T@gl(Gu=w']iqiѺlʕK<1Y^Gᢲ[`8'fASdVk+ovr*Gr{>Qmet&[63H [aBb47duf40evY\7g{7& ej{l8tmzzE o<𵿯NֵF_+Hɺޒ 1yj:?؇kїݏ(zLaX{-PYþf9Px ~+*ua3f<G*|7<ꔚZ8iAۃg4PNJϘIQ}d..}N) Sds$S`.;xw*CG .Er,F,UI6} bư⩖ *& >ȑs(29C"9}خOdJ}2#7S^Ǧȭ>Ʉrfc1]R%SJtA6,E)Z9+iX;RRA7Ԇ8),'، ݽLz'~"y8˄8HXpyH=ü벬.kCa*Yf nJ z As4%{3Z??J< At|sDv&Q岈)nXߥߑ!z:?Qە2Y; #]A {Adtc&_jS% k%¾`ZoNF.tNm͕Uuzr@CekT'g@FeG R-ˮ#~YV,%sLԼ,^+7ӻJ萳DX(<\2xVE~+Dž9Ccτnu+ˌ⾁X Z'Jc-_9uY#]lZAڶBg>}s{j6(MZۤ=aĄ/3#^QF:d ?Sd$a&;¥ifɓ7:M Lq[<"Yd&ɼUXC+a O9kN`fd#lFqH3@ח*_as>\@}#qpѴuȅ H"e01Xt>kD'jk*@oڒbNuߴ$(o A٦W%Û?aq GFTqSp&U[BAns0Hl͉U3M=Sᅺ:]Rt-VT3W#1k_5Aٶp{z=FglH??~}}:]bQ \9>l`?S-97?}=gCf }MW͈iq f1ї7#ZZ2– 9+rVzTvlAeN`Jɦ6zRC] "R}!+o'GUgl2/Nwh9 5čmRΪtSbL`nס!A+xg)6x;{07i z >)()tLnz>huPu2?,g{Ew~|vnBO<#Zy4)43@ר}i;ٯiyh 6r!$ K XISJBf<*}x8w"tb$RُTP~{]4VgN/lFGGL`d9juĶ>r: BMkOk[ž^q3ړĔ\MyoSJ jPk{}ڜhdj42>ڥ 8Ӈo("I/yg573=nn%Q=^JƎ @֔813m%S&8T%6h+Ə lD瑣ċ3IcNudJPRY'!}_ 2Ie{|J מbբp̏9 ߞ:SzͫJ&o%dt@i ٽpHJp|)9`$Rovh}.rz7y~BMw9$?G<JY͔`jp-Z$Sط/#lB<_"]sioywِ S/_>|}BF1b >*܄{+A2k ӤZC}d5fsɞv.X,eꓙ='Zj͋qW_j?pk0V}j9FJк%ӁqM|o18TS7Jwy\R+PPEτJ QRdD_ߘW 1a(q OIm!:P5ljb˘\kSG gd4,? ~r!w, u_JDN4kzx[Q7l~Q1 bҫ:h!sd~z L'%=.zJmE<Nʄ[`p٢ iK_/֙T$ZM jCJT$Q 0hp30r| _}cLP6Xu[ kMJ|jM:JXkd_gF*ʟNWXv Kv  T:W$H;HmO𯋫!+ S0YP{kcg=R$r hX^1] RwޚIy1 GE{Å!ri=2V.]rF̸5j aCL= v b_<AHPsK5bgC E{ ]plWlFP$|H{h*)~Qp~_C``;K-$e+ KQ4xv dU?rCcЁPno$|p!^x~,;;ag簀Й[#& B% ws502F _/av03 p&mc"y! /p\v^-#HEHdkdm`GfD/JYzD& 2&/ZávF^ƿ D:sXA\[IXg( D$g/k7\lvA@?ꖴD12~"r!/@VMESriCl~\a*?PF)ZFK5 Du"rr2^iyD߈\]r@68Oh`3s ="/ 7+bv)`SĚj}Os.V!>e 3@#bO)H$ihb+=T隫@6@#b`6IןBځ0/ĀgZ|2b5o0ȿ+Fa1 )A͍7#HGz9[peN ߂ &td'"`0eჃ9L-F Dmx\@6/y @*yGu2dqW6*pU$Z΀!onƊ,@?2 YG Byq:?c߿z5}'J@gc 50#w~BDߑHa كMeb̑[\?! s%o "n&l.f (Plf6XG8B*Jn v[-sy&!D#~x~M6d375!d9#ˆF|"Z]!E!c3י hCd*bCAHG;1i:T9#L^Y`pu^Le/r sAH!}t?f!D#WK_L .NƗH`?~FE Yr!X^oI${ 3{