summaryrefslogtreecommitdiff
path: root/kernel/sched/features.h
blob: 3c12d9f93331d6eb387c5a73f308cb648f4385b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/* SPDX-License-Identifier: GPL-2.0 */

/*
 * Using the avg_vruntime, do the right thing and preserve lag across
 * sleep+wake cycles. EEVDF placement strategy #1, #2 if disabled.
 */
SCHED_FEAT(PLACE_LAG, true)
/*
 * Give new tasks half a slice to ease into the competition.
 */
SCHED_FEAT(PLACE_DEADLINE_INITIAL, true)
/*
 * Preserve relative virtual deadline on 'migration'.
 */
SCHED_FEAT(PLACE_REL_DEADLINE, true)
/*
 * Inhibit (wakeup) preemption until the current task has either matched the
 * 0-lag point or until is has exhausted it's slice.
 */
SCHED_FEAT(RUN_TO_PARITY, true)
/*
 * Allow wakeup of tasks with a shorter slice to cancel RUN_TO_PARITY for
 * current.
 */
SCHED_FEAT(PREEMPT_SHORT, true)

/*
 * Prefer to schedule the task we woke last (assuming it failed
 * wakeup-preemption), since its likely going to consume data we
 * touched, increases cache locality.
 */
SCHED_FEAT(NEXT_BUDDY, false)

/*
 * Allow completely ignoring cfs_rq->next; which can be set from various
 * places:
 *   - NEXT_BUDDY (wakeup preemption)
 *   - yield_to_task()
 *   - cgroup dequeue / pick
 */
SCHED_FEAT(PICK_BUDDY, true)

/*
 * Consider buddies to be cache hot, decreases the likeliness of a
 * cache buddy being migrated away, increases cache locality.
 */
SCHED_FEAT(CACHE_HOT_BUDDY, true)

/*
 * Delay dequeueing tasks until they get selected or woken.
 *
 * By delaying the dequeue for non-eligible tasks, they remain in the
 * competition and can burn off their negative lag. When they get selected
 * they'll have positive lag by definition.
 *
 * DELAY_ZERO clips the lag on dequeue (or wakeup) to 0.
 */
SCHED_FEAT(DELAY_DEQUEUE, true)
SCHED_FEAT(DELAY_ZERO, true)

/*
 * Allow wakeup-time preemption of the current task:
 */
SCHED_FEAT(WAKEUP_PREEMPTION, true)

SCHED_FEAT(HRTICK, false)
SCHED_FEAT(HRTICK_DL, false)

/*
 * Decrement CPU capacity based on time not spent running tasks
 */
SCHED_FEAT(NONTASK_CAPACITY, true)

#ifdef CONFIG_PREEMPT_RT
SCHED_FEAT(TTWU_QUEUE, false)
#else

/*
 * Queue remote wakeups on the target CPU and process them
 * using the scheduler IPI. Reduces rq->lock contention/bounces.
 */
SCHED_FEAT(TTWU_QUEUE, true)
#endif

/*
 * When doing wakeups, attempt to limit superfluous scans of the LLC domain.
 */
SCHED_FEAT(SIS_UTIL, true)

/*
 * Issue a WARN when we do multiple update_rq_clock() calls
 * in a single rq->lock section. Default disabled because the
 * annotations are not complete.
 */
SCHED_FEAT(WARN_DOUBLE_CLOCK, false)

#ifdef HAVE_RT_PUSH_IPI
/*
 * In order to avoid a thundering herd attack of CPUs that are
 * lowering their priorities at the same time, and there being
 * a single CPU that has an RT task that can migrate and is waiting
 * to run, where the other CPUs will try to take that CPUs
 * rq lock and possibly create a large contention, sending an
 * IPI to that CPU and let that CPU push the RT task to where
 * it should go may be a better scenario.
 */
SCHED_FEAT(RT_PUSH_IPI, true)
#endif

SCHED_FEAT(RT_RUNTIME_SHARE, false)
SCHED_FEAT(LB_MIN, false)
SCHED_FEAT(ATTACH_AGE_LOAD, true)

SCHED_FEAT(WA_IDLE, true)
SCHED_FEAT(WA_WEIGHT, true)
SCHED_FEAT(WA_BIAS, true)

/*
 * UtilEstimation. Use estimated CPU utilization.
 */
SCHED_FEAT(UTIL_EST, true)

SCHED_FEAT(LATENCY_WARN, false)
mYcͮ\t撿#c ~Nr:1g/djG gzGPg#{^cySߞ:]fk"oE?><)F&@H*[V*M?0:fh~v0A_0cX3젊H>KrQO޷` ys?AMo;PnsEa2O^`μll<2Ugi xxwcIl?b l{t~ٮ2>^&u]?㇅^#wm"#|G۽rV[q/. x6@UeE6U 5F~:+^S" /=A|-cYeUWmW݀hdc@4+lq.<1w|V|6s:ه$㱗iՆaimn7.p漿]||v ~cۧp\6cg>|RZ4ǐٱo}NccT>+ze/$q_#rYHdҞMv5 Op] =Vb퓧>M_'G+yC w/9蔻ǘ,?Y=XdGTV*_DH(XQl| b-7?鿟'E1IX5JyGw/t}y*rg´咷ZgUk ?=cҜea{.%Co_ ?$"ŀ(Cl ,?, du,bF8..}RWSW_چ, ؞樨*լ0jCVԿ>,F 2RUegW?1] ^3"g.;4#ՅLrΥŘi#F2?Yc!?qYX7b }@CF$eGRC!A/g{%?UiHw=T4[*ю:A{}L0nx %]'ZLHwyf ˜67EE:[YWK40"NQ[{U?ŠmW\߱ϰT^H)f<(x*qu^Vo a_Y>HYBi5`*˧9\'G~_WCIq2f '\4`E70k+!.}Ps-B2e`>v4*XE^`0n0]?}nҡ߯?sݐU~d|Q{ Zc$[6Q 1-YYvMeFKpRcfU6#N.0gcq}h@ +z(XuE H\i=4ϰ56Z8x2i ^k w#%w=Rݱ9X4wD![^yU\j#qvu<\wr8dr)d,aB ]ȶ9\Nx#tk1q^hTsѯUa5keu NC|}&2vV?4C97AϷWY.)sf{W-k=ۥsRbSp#.*[ۮR)L#b`!C~M pIds_\X=1*~u"څ3cg/3Y_U/2aTxXp9K L!4z;]t.ϜfG:C”뛿~o4[(QGX)mANr "nE\T78" ᄵ^.÷ Zs`>^&揶$n=1+M';t[}wU]g<J?mdžc4visDo.0X'2KiEG:~ G}e9`Mv`:XJ`x 4,ol| IC/ -߿3wrJsijcI-rq`Sx{c1f8dTUpb|fPThzcdL]bc?r׺^l~j/vZ9a7sY#u<,ԐW>tYdvjE~&i,5*_m Y 1pFl5&zI-G91itR[8}Ռ#8YAdƿ9p[O~gQ:@gae6Vc#Uid8coe5R#f-#UǚֳwKg5#B_xz*0 uJ->\\r QP7{W,8Us)EG OIa*MM@5YK$2)  Pe1(`‰Ah0ƊYiK)I$bBbQ&\J0@(HC#/f:pL >.sPDA(.hvDy_OY;+ w|X9]AM'=A:y)=E™_][quF1Kh]tC"Y2^!}SH s8c(M k8+Uo&c{ jo[vl v7'LFmpl%"`N}  gOiƠiE!7he!BTPdJv V($JTYiH&$j@Bb h&Pzo)tR!@%42)r0)*`*-USuذDD"BjBi $"*B a( h)*!(V 2TLDC6H& "᜘"u%  AI4SE5T TP1Q14M%4ME1+PDPQI A EUADe(@@ "F* +@Ĉ,7មO=zTPhB bA{PX Z"BiMB4R+':MGG/y!g-D $1)@_WA`z bp WQ|(g:Q HT(L96m3"1!Qi4 VRht8-&ҨfPuL{S Uڎ۶:>X!hVMɱס*ʤ@-AL d NymՆorVeb  HQb P0MRG4TKIEKM (*gQ DTUP׮ \f$ib*(Ӷ-gUR $̂@ETSV5/yq'{64?;:y.#.bܫ;?l&oV?Vw_$ I敖&88 HRBQTBPU ,MNPjiX" *) *b)Jb.4 _Ð{PE~J(bBe0Uz;zmÿ<eOvAymbV!Aœi:ͦc˟&WO/V3M`b1L4<@ WJB# H@j)82v ir@LLd6O@*GT 삓S^-%=S1S^l2 P]0+RAHRd9éB hii=>VHo%0Vv- & Y*bIxϫXőVko*Eؒ#my?G8u=۫ @-'R)䂧϶n7sǿl=y|Ħlv,#}m¦K-&%U5@F#YTb b>Ț$gparzT}?Y~_.t}PjYȿæV-e7urS1:bPB$a[(դV.?O-K3̊2DQ?V3<Ҥ"s#1/1 I+D,r>[ed9:c[¾ mX'sS?A>? 1I뾸}y}ccm#+y%HUy..uUXp.J Fck9=P1>0/bȾ_lqnãg)`;bp(AD܋_Uz: Ϟ{_g#F%Ahoq=:>NqMd+/U( SV gb[]ViWmtO!`GaIz=.ʉ+g~Wu.mEębt\8Kq4K2xS.N-;oq0E_q|De(Y&"u:L[V+?QH-Z_$) =*ߗOt7zO߯o cnXq(Gz(ڜaz%;/ཱིV歺5 /!yaCf(TK~b3Em{+H~ ` ˭d5!IQ{&Jve_[=Ccѻm[7&{Qt(3{9wFew5%WTQ2氆* ٘ MWn6g`UхLX3ppz>s˦WKcK67Ǖ.p_Cf ]] []ѿ\*y"ymmk{+'N3|0*2:iK/-$g}ɠ̾~ ^Y[tϧת"Qtp'n~$PC3m9vյMʟwA1Ow]EZx}ّq(RX=J+M#E p2|zseI3+Fuy:?lm2b蝊{ >UZ0Fg*+h9Fȅ\&/6*RDS3uJS^:_vlnSb l,|/,W&넻qOwӒry9{>, p#C Lr4Æe v Q3G 'jy)_%w 7ܣ_WCK>?gNxd?|rK ~}|\ݿe͕[ ԍ?O:^u5:,\2^7 m^[!5|5#jTFoW;ngهωJר@~*#\r|>c~RWTj~J8C/Twe2τ+bu];wrߓ Fn V(BATdxf8 wo}E{5Bsݽ>ػ6ޏܷޭ' !V>g}g=0ѐ{UPlއOq2\5Ɍ>Ñsr/EOeEΥ(rL6q`oc)3SF^ݿ#?;M'xϞkTAoEXثXWGgvVt_-x|/}T;ڷ5g<#]B+I2._soAw](uQB9Y #ݻ㧾>keNDA;Ҽ6e (4]$sᷫ],SâHH6Ώ)E9guyׇe;s6t詟*a߉Ȇ#jÁR9<\5a~:*woFbA&~JubS1x&v(\Xܣl/MÐ@B0EB2gaumMatmz1e"v^o0{ʔ|=Ӡ{:yl8}e̾~kn{ xNmA# Ou;mU]zeG͆"0M}m_^z=&:uN}K"ɵˠY4s;i{s藩淣n򇴁t`z;&vkӇW9l(0mkL91I@F?đm;r-什9Y-zste^4J dp`veɅcM_Y^&6×XkP~x0׵ϳ&BN]Ē>Ά=X e3&km\&iK8 n|VKsbYҋ~2Խ:8F\z@QI(*J%BuY|YC M"~xDO_y ;|u%J}HYI.׏i﻽\J_GhZH%$B${:25^r u[ k?DQB۝{n|Vkx^@aT᭛:+gWL1K0=x|\En|wОE@&;9 fGFf㌾y׺ok=-ߠ,ɀwnaۢ@L,6+|׻GIF̹\Om П(a ^B'Z'~V3ι^bݷ, sv U}T~H~ce^ǹ̈͠hD$Є"r+Accf}VRf@MR-g$zJ3ظ(%8@Z |o[ ܙ[>v:0[p+2-'sY1U/1"" m-.4a7&)}Ϸ+.5cmŋ6؂ʹ\Cs36iG(?|Hq# ۆw^0t U3S6ft^XJ1 U܃X]g]?][.#qzhOS=iz_^HaR UK*T UCQoo,>Wil߫ ?j*{=nl^ L;Gwxq#J77~Zk[3|^nZ;} Uq=Wf}]J0:f,zO>+ӟtx'**G?=y=XjUߛJ- \]^$eV*`T_$bHLGefz 0Ԕ1 !7EJr@?~??T-e\/xɐYb%HNaπX’E hڙ.Uލ5S-XH_sZv8+-wqb3U<'NLˉ\ T6pkY!{^D|yN^{$ ݃0pWQ;hpTA^Z_QPJܸyLStpMP"_{Ω z7_;ܗ \])Gx]Ƿ W˺]}scj4J(D}OKkmp5]t5wzק`˫Zz!p>ywz!.]fо[J@@}zy ֶD3ЃeS쌎GQr$Aׁs$ksb5F~H c$ =׶q ݵkb.G2T4#ÏEaL3\.?%eX _R-i;x bv'}[@8ɓfdFwWqb>]!+štRSҰInls/GQ$,[) 36NTQo>s61@a0J*iazm2k74imG qʚ\z{pT̈́BӌJ t\Nm-_z\<դrٻu Uodɻ|==ou`7|::}J~%vPFyX,,b \΅@(ȁH)Y\cfFnco{xQ,'#|ڸ#}-ٍ>!Hޛ:5&p"-l47?/\"7W]3M>pI>6 7۵Tȣ.\۵"8O3ũ}v^Q> U pyASH9-?">D߄#7?,BY_ qSJs,z&~YK h-l!p 邿h~}ё/"+id㮾󳯥Y ԢOJ5qq gG +__{2y1@زZ'?/>U|~ЂV;ZE@@Qz>,!,a>὜Bs+qVh۟ a`_yFH?Z#dp|g/|BS%񪿃AM[pltfܞ~Aꏤ?3Suܼ/TcoKIO*ۏt.=<3,UYDG=NXt٦axosaf:-y}r~j[mNWѕ|^?7Ï7(B ]қת(0|j'WB?_灗Tv^ GHmTn|@S,|a5_pTs$]gx,69wP==.liF)?*~ƄNŸڒOg ;m:T}My`26  }w/qKd7Q{oNJ2P"[#06)D@t~?<Ϛ@JO+$y15ۼKvD" q@dzm>VGv@N;&lxۜ Wmt99"Iw 14*Xg",co>m*%In~\rCN̫l:obDy&DB?F2ɞESU)o?IzM坣I Lm{۟27 pRԲLQ_ǿlDl\cF٤vF'YH3OZ]rlJ4_+Q`Z*SEƵPI5LUESH F=ݙɻ6ih) =ZÞB['F6-Dxg~@f=0Ʈx^n_&_P|3}!]8ޡ,\ϝkeK8aˏO>_.LUڣ{ #Ǯ f<3Ǯ/> sE꼹/ɢ} 6TCcޮFKׅ<57޻pePfԱڨ]Yl߷A)cbYcQ~R 3('+}T=d_}߄~S?{ B֢wIu9]bj^A[\33aE#UQ!E,n%.#i cKy1(ߙ_/ h@rqT:{E$0׸* ´2od.IƳіHv0=:փpnr',pu㑫YazcWKֵ7HmE*O6-ޯwˍs8Jbkt>V7v[Y|YJ}p {-]E0`9:G8p>_P˲M5]ʣc}ʨ=x\֒z1b:*0>Cur~qT ?70aafYF I1ta:>{^L7_`)Yx$~kPxI1g/˨\À_/(3||yߺb]e~zӎ?=9\cܢ]Ccl M?+3pG7v0lևXVAV]ʰ:+8k>v b ׆ Ħe;Gᯕ v@J 6IPHU@*d/APlG{D#8}N'O41F'%w߱:.2ؽ2fC0~FcXd<)MB{ iL֕`N[~7N!ʡ/z&x`lg;li2ٍf1t+-G;jŤfP)8;,I( >|sF#dg'atJ1@Se~ΔA1^k.`/@r2Ї_pƓ9zZkM8Xhzp~`l+ dSd1D06{r={s@b;]7RFyTW N\6tvA{])ծ ~4n]4*D`%ڢOulP?AiS:^۠VF5th(JAu<2~;A1"\u:U_Zӗy[;֘L< b9UE@ο@~y}o0G ǓGgX0DxH HjL9Q-5>P|HR-JwC}n!ODuBo m0Mu;6TUAԾVbj̯K i}YϬBL>7,҉)0[v 2(b k{^]mk=hq.\XTo? \bc?dvsO"0.rq跥Foxm$QWξXL될=(hgBPT˰ǃ+X/.|;"shYUb*XQ3s &N hTazĕNu/'`@%8{=V~Zaq/_}]슛&p,WpAJOmBE>{z+D 'lAB\Gw92˞} / ǔGcwpOLR{X"=xu4c_M}v-U$ *S;Z^WG) /\N2;X-$g*8jdTQ.3XM Q22 =2kGsL8G7VW92J~Bt~*(ŝm.wfDp(*SiN|T,#8ma<-^ҷpFq-x5Qf@iA!Oiǽ ۗY)Z(Z Dp( {#74dL@ `}WU*D1匒Ϝp=Se\vc9V^rMw\8QqD>LjhZ#[^ܵ@8q /93Rђ q4=Lw.Ӑ 1YN@5r_Y1LWI)whR˭t^8pxG+XJf0JHw2FsɰYDQ<@㘣<] "92cޞeNӍDV7#;ȱChcerd1$HLqk>6}r+PFїJQS8pNcp"2 ywP95"HS1t3 n郇>_ ο8F/(<@_q1) @KC kpa )$T,N.$5Qb"ĹO~Pbvky{KG8M[N'vdzgEgIs1c4D|eY-e$9CzQG)nejpN8؁1`hem01RJ ȓh#)A!<* 6rQw9UVO't1ԇr&5uyˋ͵%.pP=-q0#XQu( ,edgxH+GsS^c<4ҙڕykZG?WGO><+gbu-Lgls4>/>q"cZP#vCs@{-qWD5R YP~#S%Wȇsb}_^_-CDʁθ>?Kp.掮%1 dL=Ju^[]vX *(W:,Y$&1U(4Sr{ Sajn,\J4cJiT0<1YFe8g\D\ Q%[M q(uL9g*(6,uo78ƛst Ӌsv(!:Mj1UO9Ḭ\OW̛=OkF%on""+Ēz&%!TZƭ:M+ҡs2$/)JfRc(%FUt1砀L&%ոa N>*'ی?fLu[âNsk Y8¯Օz,Q<9=O3Ҏ0_*5lw^{ Kbk(Nr(}dk.-@p0a7cf}rIFy?73Jv{H{5\=BA;>[|'7Xr4)%Z-Q -H~d{l Kv|vhDݮ:bBKGGE p!\ ~?yZ~v=ĜHh8/!1|*hRP`)qizIk14[4~wLf 8-o^^57u+g8!E\esh7ѓŇ},"=`Z\q!I[Kp n _hfo.x8[R}VW`4*8i|?jYn\< "z}:#hGAA^ aB>yӷflSgD 8kfFN;qviK5]-,GdbE|M|Mze//ԍ;ZNY~m],?!C"sEfiyz4N>q~ߺ{)w? #B,5E? _4__N-goqeQ?:q|lv? n3񂰌Ek6zZ&da;#e o\ly8[8:&\}F>Mֹ]ln45$W h[Z3)ࠍ<<<]FAJ^Ŧ@1._ԽͱU)+DWzGЃ w \ $#NHE6((mlj=HA|Q@[DmB݂.&1}+ GE2[ddY,Qq*pweGsơB/?EY/{THc$ղ84T?qd*q #/HXd"J~67ՉrxS)złYNf9DNe=+kD #_k,6q0-<$@18=OJXaI I;qȳ8ˢ/ MB^EQۉ9  9~~sJ6˯6΂40In1l`ba4Uށ؋x\CmpXL5RjwYnSus8 .Ғ9)sQ+#P1#s fuT+{DA@0So͔3ԬJ.I`FS8i|z3F"RD0DjSʇ$;): NWh3/@w%gNdF ܽ~O!ua- hܷKr|yĹ (oʎ$pOjԤ؊|w<{"zn4O$ן-,Qf}^*u,&:ɿ$;<8 7o w?1ʝErw4y}\!KQ:o+q-r;Hs˫O`9 ]`@/18ݢL2$v_Qi|W0 s>&~}zKM%x%lW/fi}y5UX0VlN|FYB'{hh]$bQ0Z\Q_¯ %JK/)7^r7 OЯ'vexq rncfN*t]sNɖ H!kw羚^HN Xr}mof>Wzo˜bDž8Qس 덶x<rQ[:,f]ӛ'x1j|q:)?xlRFW#c1w0nF'uq Vr=7`*M]}tErdȰ` _]႖Qy8}|eeA){L\9rXբ58t9h&GO\qg":=h:8^/0uOU_\"òTYƶ7X&L ADXw+G~/AN ]*Gi[Tb"'!AM 9$.::0[ OG~aF6)`LpYuOZnW$N0,ߢ0 wDG[罔H[ &8bK/%s\S۞k+{6m&2fCrUn,t\OFX&3|eҿd "=P>c|F:6g>J9v˭2 (K9]pCS !G"5~/K>a0e¯5sПk9Q]cP X QG`mF,z.g(g)!Oc U#p(1ް>eRs9r2~9Vg[49LpPLmQu'ۜawUYd\{_}{}8H5}}~q]v<_~2.c65zpI6 Xf7NuqWßhW(>!L|1SmvAC0\)RcG_пp(pE>h5 r 0IGʝFZɜ\/( XKD_eͯ#=5u*S0y< M1,z:Ȕwßā'jM'Hf^z=Вb qS/BaM"&PI6Wџx>J)y稲jk4;߽De8;%WZhE8r8ΥLGk99EsVF?OxDH:'hntxUs/od JOmۛ/G 4r-_ЌO>16p]œ>X Rq`GϮHv)pdJR0 leDlZ E W@crGℑ( (^JqN!2 g.585 U9>tz)qH8Eu?PE+z_fr6#[+%Qft^z2iֳǦu$3#uoSD iă&:c.{]&A/W5l&kB\LNtq"Is >/H~y\72}.koIȗ=0@'r f ^SO53;"q}lR CkR`i7|u`fJNEdQ#QB4G-4ƽ˚xw5 -cʰ/Dxy8%jP~HǼR:5]U/T}JHPqe>ҞGiU&NKǗ0D/_`/|87 > Gs63*ZF+P9Au9? 'nGWŧK17ӾwAΌ Td"[j2j] >fF p `=tk7vo\b j[4AI.rtGEռفQZلϚ\(۲mj:i"־oDwq rplPs½`Xc|!XW(9~+|^"Hݥra,Z רpEܧg:Re{[ኦ3*]O~}=֐-6pj:sGy/¦gkFME f{\&&yמgH+Ư1&}n=B\/@#zW$Uj/FC#nļ2n]\W=%h#?!#zAQy¿> ƒ ꐂ~1=f}>\IWNf[^X8 U3#*~`#5ta mD5<{! n_2KT߽9%gfa* (K~oۂ3z3wHnYbH[j:)kkbE{;³6 Giֶ:k@q(e5~S դ8D%)FRqfbA^pٹ,{_H7*'N>U | Y돐v:(>~WY DT׬CٯtJ;jw`rkˆFmo&$Ev2}KDZ\R,X<^f^fUArCQ'J۳ Cl.R=钇ޠڡR CyՈx!èjg"KM~lXr?MZ5GlbǛ+X7^j,55aƶ~Q30b82:}9NR$.vm-e * . 38? _[ѲI.lCi˄d#EtΑ Hq;HZZ-(1ޙ4 Ws?=Yӆ'SjzMI9ΊdmSdR=~zR <ǾCykcBjΫ*jW1oP G9_:#S̤ r6=’C(b7R`5sn>녳JU]iw^߶]xV,H# Xl_^[|KJ``FrĐAؕr!__R0r59!a]˚_VŅѕ^al̫ ]R.jcku& Z2jw>?SqWdH᳿ ?67ɖ e@4D7xQSL|[ޢA16r{~JU1 _I}h#fOzRͧ86\~V}=4jmVKM޾ 'ڱ^ , 7n WI#yR7^sDz5G8krm ךDL~|mxdJIeģ"!giKurrj߫*Qm]o:5<k< 9\j4ݝ0<ztDӧ,_B7z)Q1D룓ȟc>'kœ`u cW؀iX< a1dtu,!;fzUkFl9g9Bnr{_6h6+?۽Dok$a {+oqN䏗 '#x;u,#:rzj{X,>e\dC&SBz(2bVqp~^,9w#F-;{( E̊q8_vɉ`f ,sgaк/޳Ӎl"u0Z}o.wřEP^Hi'OI2 R.!_Lۍ^\\G_pc_s?MrX7f9dnxCbG^{rGQY^}NSocEQfFދ7#!^iK>Qqia  A \.ϒXT}>ZZ4!תkT{#\ G ф)):UdYNr`獓|=Kv,IQ s8N '%jyX gk~q\A6 ]Cϋ& =n#}ucW< c/]X,Y-wDAql_.gH[>"B`Jts)T[(`8[gNA#'2.㞎{`/[Nf 7WGQ9Di\ۑf֦'tvŌ @$s`[,BaQ_bZF ufuMY 8)LXI%:]٧`Êdv(0!PW5uamC!jѣ  x:ia z@"־|͟_ǺА d€^߲|_8F{5c1ZS꣭ sB̕5%rQd1!|ЀpEյo骿L5#lx3zE_bUwb)+UMD>LB-^L֚ Y;a!F],gNmT:g0!6=*8~]c3}ݗtRAg2T̀"]MƋ!U/BL:`vS:ʮڏeh{h>aw:ba*3{R\zIWعnн)$772Q"PWxՕUɕBЃj㤱{KY8_@:֔%~+-N5чm=k:Q򜈗_uZU˨j>372˒R-a|0 "Xhv__Yg ݾ4}[ f=` i7d5Ve@A J=r۪> E`z(l4< |>1ԖI6#QWNל,,`ӎг2t;ϾDGNg7/!m?c;-^ l>7OO?,L1}v iYBm4Fz/=''AlƼ\aBڪL \wő$B kBgH3L7o槒{/|FJ39g࢘kAi4,PV=‘ϼOޚg~B9Y/EtMGQ DŽ!j-gC؜Pߕ\ GV9_>ꠉtW3 W^Nsx^Ta0'Y@8;`NҘb/ֶMM׶$@@PX'>}(H+rWṚ:J+]GF:YG.&w5, !nk;}oE;>^Um:f+r"U1:B,y~}i޵]hs8AL$*k-pxGY6bnn| dİ3ǿ;.#c@Ζ}>S=N-P_s V˳ZyA1DAьM4%{$P6HZCvu>~'k"Y"k9JXLǣI{c1u'` wfIZr|(;+s0$]cJM:4ۭj޸QFZ~qH.p]r5aY1x.u PG&UQ6T(zd[1}/y??SQ/*u Tf '*ߌ~3v;?JE ]rE\CLc{ {y.V(pODnaE᷷ *4) a *(e|Yya":3L}zL^08 hq.JZg<u JJ(exd(Bp~Y)c&:ݱrƶ卍6װ1X9[Y7k ,0a*cApadሃtC/xrkؾxK:2~X(s st:/NA #D^xj$~ca GWPL;NqV,@d܊' Gfk$ToXS< BS͍9//d5pE(\9bpDntqp餎 0>pHxAY'\> t)D֗'qxe0dFv"=,0=9 aU]aIBwl__oi- Ku&}D X.6{O[vwHLp\Hw9Py}cJ'$KȖZ9M/Zyuio-g4{…ZečQ"A5Vʂٯ?9;&wa !dDb QtV[AGwkӟݷU#! ADԎz! yRZXaOGX{DWFujm 8*<}Ն2,Z tP?6ǘ"Ha_sxfB kxU{Vc`oflj 3 á=òaTo_p/z=6Q"8u@齣- j-03aVp$~Gl?fiqCaX߷z DO*< jlS_O1>#z*: T i¯򋯖6`+H.}O/gj׭jC8RG&x"Swߎel3>λIELU(I( O]ۜ^WEM`ͅth@=8&^sDž V]֮\3ΗpM,}=HF|xXno" ZE+q39Vh*+zT._F#c=?L=g} e' нU0@`-h14>ݜXdȷ*\8Zu?3ijۖ5uuwjsӲU k7zj~_r6ECeQ2SQp ˚{>rrZD>+[#q"MiCZ#ORxFzpI!{r\]l]5/GtMcX6qh%mN\8{LRbʪ,+2ZQea+os?dviEi/+?o\↎±fwqΪ08e T=d@$ :%~AϲD]'h@wwO|nmYk?h2Tp!ob0ux; ^M)ʮ+йe8_(X6. )%n9Lg4+ kcÙĠKD P:ٜ(׾k##oa ̎ [ZcT9e1ӄ\8<^<zPжWT|ޖD,1u:mRHj76nM@CݚF5paC{ >wf|X5< a-3 /n%}_ f1+ɝ 5$$ Hd})g\;nC5]P`$3:waqS_M}wZ1zHsIP`6[S;Ȣ=UU cMw7lgJ3Zbq9u{s_Nؐp`>DNs{9\ %7L:,=^<_qDSsoRZsGt ~"f_k?]H.hD9 쉟˫ꐟHy{ M{T e<_$!*5^/e'On/m?*ntq"#_#`r~uuø(TGOIɝf ^Zq [e#^GM4}'e!r7C97~le&AYшi͘A'IsnҴ0Uu؝9T~ph$>1X]ꢤ#|<]%iL+j"j+>?ʨw!SlNgHzNb5G+~ω!-=J^qja y 4. {U ^FIұg5ϧ6#Ĩбu66zVe轗Íc} HΰL 5=+^Lݽq0i %~NӷO|ߝtLsv?V[pFZ8snYrz=>o00OTC'5z >4< -uޗ%]kdB "kq+{33=ahӗXx$5;N\κW} S)'!Ѧgc_ S;Jw5>k0 Kυy2/@{0Gȏy &P q0r3A *fP,[N$*Drٽ~ƿmyDFd:&Z/#ӱIcib"0$b%QDtuYtU[ `]f4ՔP\Z K  }G1"8šT2uCz d0 md/WO]Ƌ )೟tೖc3v >t?&N^MZӉf36|:bD.CǻH*Iu;~ oE]$7kH/Rz q/=Lk/|2Tr桋 R t8O? ww(pP t}"yP`(?#CKXޮj=?Xkh -jaRԾzriTWɜ֫ `QLMK2#f2`:ѦOTsgJLפV&cLogHi9qeKiHk2ټC!FXɡE,Jl_`-/VĹңbCi{4G茠CY|W5_G(諄f$_dk2afP|(g*Ƌ1t.YUǡY ̸3b\AL ).rQ|G2l:&˺r;;$>}  dž&uO+to2> Iqpx"t_%%aR%RH~c@g^[ )EŶBZFXGNζMHz+M &6JPդ$$}~/0OJǬDʆFw?{ ndP)ZCt)*#N1`r^Q W5 :cnh5W:mr%}d0C/=`l)Gu]) S`.e4sCT> ?eIt+Eyad], 1c%jEt4Kk`rg HZ7g1.VsՏ{/ Ƴaƒn yq{Ƚ\NjAz>]'_:R=PhMS$Gs{ƯS(tD.ێ)D>}؅*w}tڅʔ #4u$qX!F6*ыZNm^@MA @`AON]yRayN 8!l~#qBYJINx([Maԣk6snN"N<F|Bs2[##\/vd4wUq'Yk𞿔;mR*"'ڴgŕUUQ\sȟp Gu M+?ߩJT`Lf%G Ns{ . (#3[.[mf:ҁЀ@G!Gҭ KNRtUWօ][c:x/*;@m=/hs Yj7Mac\m&K6Ti?HgN_,_&2o47aC1/OZJIS9k?Y}`/bhT"U< @8"Qg lʫzQ` hh#E+_`SZ쓸f>QFH[`tT`SGuM" .-_{hA7O9ӎK J 1`#+ٛ|}Xoz0DSzM!D+w8Ʃ  i2쇱,]4Ƴ8i @9-D y.1S(K̿{BKglHA];[ ׇ rO( pwtjOaWqx8R*;ܦqP@~^||_nt}tSҳwU!8R0PXDßm:/?ÇC讧B.lgf#\Wde'(`P( B~܏?a@B>lB}7(NxuC]Cz٧/#?[)X*l,@}?a7"0$y&L"'4y&84`fpU}j{ھ#@S5;;"|ۢD!2E(k@T؁nF7~ ƃ?t#W-?U|f#jpᐣ/X|̋)h(^I%1[s.YGgYL/jMI0,rB >~kF#9ǕF6,Ȧ} .JKr-@E%H<=! 7tQ~dŠYs}7˥|kȜUMb444+Z#C'=Y#tOUVxҜnI <}eaFT}x6L;]FՏfāf#qU/"썞Lbʲ ظvTHQj) -@`pIͿxSm%PyO+nf>JR)DP\cْ 6P~^wVȉ/U "c|P`At:1?K[,+ B,ʸ# %R $jEy}m2j]OI#*]ʖ/ތmPS9NF9%EU z Dp"pF Kɪpka9Hµ;hE;Hps* !8,pPg?M1%uLN8۶:ojKwǦ  ?'}ͽ|sSNRkd{:,MF #d$"O#~g\q:[BTZm%{nfj?mؑ.wu/ ߤr!hN<=p F!ȉ:u.ſux|QK.;'Km}&{+imgoG^9 Iw&|șN+3@ (5QXVS0D;(XKUxOSc+cEp XR2Qd ^صuۋ}$(q%è! @y't2T= u lf{)b.򩲙QkKi?Q3fkYk ذ5K>cr#c\jOlj3Q:qK sE 1v0XʧF#?dlqQXܠF|Vqm@@le=cȵKWVu 0?Pyɾ q<)θŹXyʏ?ȷr8qC"68x=/m_ yh$/ͻb:OҰvF?E8‡p$?R<ԛ4ёW:A%çKBqfī!p/biY9xùl=ʁ/ Eք ,sU<o[tu8ΓLӝ@nI71G})*+ugNSFbyI[-,=5$sɣ#P9ɺ* O{rbȾ.50tgB(F5h֞v" 75m*݌-NYЈ>eʱ{\Weq;N:ɈMte?J?)6I˄d~MP[-jW?$Q㟨rAK $X  `C0K MYV냺WGqt0~J aPކ|SB5Б;HsǕpQpDe{0Gxn1Z2"l|roN(Ak/ј$c:} ;N9R>"?xIg50T3 #i /Y-RݔMHjdcfߤL.ֆec 8L'OUi֚sjx)Auloㄨ :6XL,'gH~,p)N#sZDwG꟬Iw"—Hk\5{V-D"" &$1GZiK u{ͅ+_Kv*Pyɤ׎R-&/N՝]xs>r- YkN: C8r%_|-9}*Y^83 p#}/{5ʴ 4t:&VC!C۠S++]=2DImxY!jx=7nGf Cms6{ eGUctCfJEJ:Юϴ E `\Ǩ`E_V o!]Y>΅z:0;=~t-϶!l%H2G{e89\㈶\9pKZEc?Ux#ֿ# 0*u/r7&-M ρ|d@s3,$3@hsX+3΂A;#$DLSЦ!8?Bq??$WH~@/i݌mPinO__5ǔ$d@88IvHA9 GɂwdpyO?>yqN pcik#_3[$j?*EIQ Dݝ̾Y׋gi~{Bz؄=5q>ݿĹ3,6cC*vxBu/'̩^mWaU+^b8V; JuD/~i}qnDnN ݇F2ükg9=05~z"5<Pǘ:0W0m7ֹ"ua~aCQn'[] kyy7U=+|  ZN<~38V`͒2s|ĉ3pejOc[#2qn[xRvm8IxOlb2nR6!/fvw=uӑ!P Dӓd/IS$goΛTp!uHI¶j a-R8X7K'Lz+|ة90#ԾY"p# 4>ppҬCQOrV5!x^r$0kUMok+Ùõ|xuŔk5'EB9 oMD:P갣;(F9eiP['\咍!f;iX0yN \:y\8Z93iLJƶ6B_"^,5rbS6?y583IR{k􇐪;9VAF̭9X9fwGٲzB-Dh}8'B /Wts#Fޮ' $LM?'K_"@YYަqWר9e;-d˯zv}<6x]PX~\r䨯T {^<|; W @h$ l}f!*Qq}^*]f28Rn26ynRJ״T"+!B~58ߜмޡu}M}% #q@ eλ4{/A2-i#ƑK ?mV8뾸%uPx{X/鵤ޫ<Nw_:mWK?6fB6m'5@a \ 1&<9-rN~ðvSm}ckT pAo.Z?c*uNrCɒVMe0adb D9X,}~vErA#5x%+V|&T/#Zka8bAoӹfv6 4N*:R_dL&3&#rj}YU03Fщxf<׃nth0_w-TQ+-{P1yYyh G9#hq.MV_a:0Ә8<îcޘq.%!J3ymt~#wf(GvctU`%x?O[Kg':;7ECPӕbZJ\G+{3$vaeꞀP/*ij`Ϛ21{J\a0#Yq UU|o5E 6M fq"؋515 ;&,{F1 voNmL]~zL;`:7(@P(RlUU{d+.B`= xjlotJ_G$h?CHUk?.n3f Sz.?Bc md{2~n9c6|]%:tLAmg&؊a g827o@Cb^^+E #~7>CHk=XC6_ `+9Mpzy0H ¦ M;qLLx6w^#!MCxncƹg9C:)*\fUħL.-r˽ah( A5X@yX>Z06#o1%)1}JɴX[KFض8c?#T"TWxӅ>p "N0]gѐ/m[, z- 3vf4af,(M>?vۭv1k{?;Ԟ93rH#puWHdD=qDl|z:'<+2͜ALSY hUСLAo+-ne4|zo󌰶Mly6s)UоgC:|}X`)t%dK^=ǯS s6 X2GIϼ`.4! Hw(z [%ibP$%Z^6xF6s!˻y\u+x03¾m2OUÝn00oyD hAqґ'?W/zV!(Ƽ;1X9C u!ڈDYZx(ۼLj'"^c/`>fg2N5xڬ>xȱO;4&esn=}a6;.qz׫M4N֧quuB SKw]fjYى]|,'H`h].o}sp1oKlG C61؜;^prx X0N73;0tR<=9#a7PQ[/SNJLt-Masw̒ W6DyyeIQ5uT<6rAs|`֪T8ԁ [gϧ]-G|dqYS`LLɅx㥼؃ 'X*ae]1|a8ޢd$3A7^NeSC"Dɗ _{K>sC]z۽iN=nOnK/'u;2GŝVk|GZN؞ 0oսi&/\Da^R俙|,s{8I񱗣rx)پd?Yy3L'xlšg h 5 HSq{a{]V $"-y5ֳ+/MWZe[ً+C~07^3ՃF^-%a3o"zWꇌG:cJKͩF0܂7zo;'O>4TYY WBQ7@fgSmFfv6l8oN:TY֜j .8xsqKqXRRqM^TFvs(`1@ZqXPӠ 3 eE_{h/ous6'Di뇼Oero8 #=, 46P-b[fA _8ա98 f5y9(:_sƫRUxE;a|N 31Mx XXd_7|Ny@I ]`^!n%+yO:TX q jl\ľqp.-RLܺ;059VIplA8u#;Ej >߃s(xs9^ɚ8@@!:YSu}8#zX. #L_!bx|"]p?z74e:(59|*5{Ⱥeq68oIp)IKK!!ѯ]Qz*v)5X8ޮa9D*wƩ}@*K9pvRRCū͍|A8o*ÿ ywr{;:  S5x[}"/|bʌuZtI`%Y믞2tz䴇s{MkPh,O>!,Wp>Yx 4jYcΟ8םA&hL3[1.=ؒZ=u( 71Cɭ.>6c̎y(|[ho~9NL@8zxY}5urw!]8M{^p 6fE,>I;?^W˓ {3HZ! \73+ 1D|T}+E?-eDxd9*qHA̛M2ecGZ.Y ,f;.1- ?x~sKM8qŇ.ola!϶\9&:2= R._ԩ湞2" oC'b-P0&ea:lf JսgZίOր\}/ښwwtv8喇ڗ uٚ?lF zS+2Dsm5w4}%c\E^E_f_1<\2.+{3ֱ2v鑏S:tiu9/:Ed`n贈"BafSfxg8oѯ8\XO%E/:K.E#G輎qi,ǀ3ѥw]‡\UnT{~7b73rntdAgf>+s:<\#7}j`ZԪWPP 2͏F1m^njo/!u5K;8)H,fNv?/$a߱ѲN0!̔"rVb Yy/P )fdB+BշS>[gW_=bi#% Da/:b9BrzΞHwB?RQG# He#܊xW\~~8~!6##]*/oN"0s{>F,\̿tIV_?S:zw/ЈR18n>ICەK[,7˔Ѓv0YJc?W٨*C l^0Qa6ǭ?b (Ɛ_ ;Gk?}7E^$Lw;mm6װd N3a}N̒–-!0l.u8FÛ-7ի [uxny.eVE_;̪z-bucY6X|O=4S8r2G'7 +e}A>>$fRSnrЕ0;uX8U}~ V1oM!@?ӐHuӅ1TXs(68)^<4ZE2o(IOh9Bx]񱃁Y}+@;DIZ*YMHi9ꨜG AɴK ) 0]LPy*=ff=Y](0ڣKX_ٯcN[g. _,C)|\k8G?>c?°DFPj2,wLt-}?оR8QO\߀u<3R dgwGc 0&J@W&wpAX?xAЭ=5#sed]I!ɃW˗ZY,USTpm/${̊ld+MK"iz& *^m뼳4"$*udkܝsQ)EUvzؚhs@dH I$qί[+{DW9X0p؂YnS,'Y7!ibֶD[(+ےKϡJ~BAjX{`+ӥFVr‘iR{?)8챈YSF!p΅o۴_SSˋ}aOT+w, N{/QU9lQi$ _ΈrQNQwo-ZDe |^[Z1\nݭg{ nb\&Fq>H' {1O|W7UkO)5NUjD}:9tL̉LsqsﶙPsQ0AU/^pTgg8tj2^]q1l!P2q4pqnQ@gD@&iĎMb,?bq6#Xo2# |Cru4=5\ɨAd Gdq|k0O;I dBsv@(>+7;$%(I2KXAq`X%CxGC4Wsz|rp8ZaI!Ouƾ*שC!|sϣ7/ߎ?VwB[#!Yk )^f7D`sӏ!F}OOmڎ>@#Ђkn0|8>SpQ2Xxku,( B?IVAvdx.o E}O^8E$:䳗$&iA(~ID5!\~!<o Xbq>J՗"b`z\{Z9'6氰+mY)FSИ`}iߙ |]6NDG!TXjI! XcJQ~ϯ;U@I˩|NI؆L^M"]xzӁ(`8U}m|LLK?X0@k[~qp!!w&f_wF\cGu$kw3mHcJ3a{: h:d6JqB{`