summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/pipe.h
blob: 083e1343e98ee169afb1eae4d4fd1b80e620e879 (plain) (blame)
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
124
125
/**
 * @file
 *
 * @brief POSIX FIFO/pipe File System Support
 *
 * This include file defines the interface to the POSIX FIFO/pipe file system
 * support.
 */

/*
 * Author: Wei Shen <cquark@gmail.com>
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rtems.org/license/LICENSE.
 */

#ifndef _RTEMS_PIPE_H
#define _RTEMS_PIPE_H

#include <rtems/libio.h>
#include <rtems/thread.h>

/**
 * @defgroup FIFO_PIPE FIFO/Pipe File System Support
 *
 * @ingroup FileSystemTypesAndMount
 *
 * @brief Interface to the POSIX FIFO/Pipe File System
 */
/**@{*/

#ifdef __cplusplus
extern "C" {
#endif

/* Control block to manage each pipe */
typedef struct pipe_control {
  char *Buffer;
  unsigned int Size;
  unsigned int Start;
  unsigned int Length;
  unsigned int Readers;
  unsigned int Writers;
  unsigned int waitingReaders;
  unsigned int waitingWriters;
  unsigned int readerCounter;     /* incremental counters */
  unsigned int writerCounter;     /* for differentiation of successive opens */
  rtems_mutex Mutex;
  rtems_id readBarrier;   /* wait queues */
  rtems_id writeBarrier;
#if 0
  boolean Anonymous;      /* anonymous pipe or FIFO */
#endif
} pipe_control_t;

/**
 * @brief Release a pipe.
 *
 * Interface to file system close.
 *
 * *pipep points to pipe control structure. When the last user releases pipe,
 * it will be set to NULL.
 */
extern void pipe_release(
  pipe_control_t **pipep,
  rtems_libio_t *iop
);

/**
 * @brief File system open.
 * Interface to file system open.
 *
 * *pipep points to pipe control structure. If called with *pipep = NULL,
 * fifo_open will try allocating and initializing a control structure. If the
 * call succeeds, *pipep will be set to address of new control structure.
 */
extern int fifo_open(
  pipe_control_t **pipep,
  rtems_libio_t *iop
);

/**
 * @brief File system read.
 *
 * Interface to file system read.
 */
extern ssize_t pipe_read(
  pipe_control_t *pipe,
  void           *buffer,
  size_t          count,
  rtems_libio_t  *iop
);

/**
 * @brief File system write.
 *
 * Interface to file system write.
 */
extern ssize_t pipe_write(
  pipe_control_t *pipe,
  const void     *buffer,
  size_t          count,
  rtems_libio_t  *iop
);

/**
 * @brief File system Input/Output control.
 *
 * Interface to file system ioctl.
 */
extern int pipe_ioctl(
  pipe_control_t  *pipe,
  ioctl_command_t  cmd,
  void            *buffer,
  rtems_libio_t   *iop
);

/** @} */

#ifdef __cplusplus
}
#endif

#endif
i0 CXsȖ*n`(&=0/7"=^l3oK^yVfEG֌D6ય #!НDQ*HDmW<=>}J-l6/OڨKPc pfs!if+R"CÇ9u:Ac-5+KgZ`VR Ts($`1H(|txN0:H,^/(P:No,PEo4¢`GDR eCu4ƥw# )0rRx{V• $4Vs`΋b|,%33V鞎jӣt $4;Dd@m5$=($P3 dNCz9cghr㸼tP\˘isøf'ovwNC^8=k?\D\I >fF+ER Ow$7Plae!@!JUTU "F\(>nGUf=fLC2L`Tf 0b2Xsm%}4 =B|aX2@Cp=<} 9`C%Re|99:Hb?] &H3oO˿U?93uw{Q۸>;ҪUUQwR͜+-*K4uJ'iTz@!sȐ ǿT]| HiUd`"i3iXJcMIy|VHhe5^@uB:]ӎq^f$tΙ: X%rw8 A1odTQ$% Z(bJ\l1ĄP9d3g26"b}70B RR\.ߋudd;@9Dwzww:ٜ.ah%]K: g^Q**́jN z$ȭRHQkO#" xa4;L}e ]tHz@^ Q^5Z չ2DȝPzK =Bsv5oENΊa-!a`BI! @lAD? 9wi9DoDyĻ鲪YX&L̀'Ԑ'T'> CYj@j2)DЈRÅWe]wdPNܒv$ >+Qj  4K7*|ő9~~m;IЭpzƕ(*uVm :QiX# hg=밌Z[Ya@:?$Ǒ97 Ϛ~ iObIox|aN `_\zH& n{wwB%BKKvt^Z }dw'=Clӣ$?D,inZ_iDk3&f A bDMp_s2PR%xX/ŧm f&|k!kA~E7 &^Og>xr$0HP I$^sz>鲦2)S'!:]kQpm [d[@-yP#s7 ѕ80Iv@ԴA=n (p#( G2C `DgKFKRi`^u1+R%YإһE> |Y?l<\T$4ClR1lןC2qF{!`&|te\'X6vB3VZU[ߧx ~2-єd0IJM \2+(UIZʂuZ]T8r7j :FtIVe_bvj^8%yD%Y"Sǁ&s u r{6Kv qOb&׵Oa(F=t{̙ۂ4 = 8|"bX菙IA"tT lGk ku&93-̒)AqӦ0  N| ypXoG" )A27$=Pm;3'sTW+NZP|UUp c!. X+ C3:.?K$}g\HnbF͓zhn$(V͞VxI޴fzקk { P@3&i_}ЫK=nfw;~)R夼%&IRHsg P$I$F$ +~:Iw-A}d#ł zZ=^9РFOB'DCH肰΂[?D0֭LD<)K5_WW,;sG12,C``D ,C`m#*v'vHi%SVS#ye=??h_p{$mT;Q[/B@j~~D=vu>VkCtSލnEFt twuYdb) 5{wAaK9<??od'e]Z%%#N "0 g3N8ۘJ@^%i8l4-p:-d0 .i4>꺥Y J\cu O_l/l9PۅUkdh:-/В(=wױ6ؙDU/Vm Vj4ϬM' 0IDu=@8dNIWzkR*koˌ eGyy ^p3ƂH7/'in_Rp֕saX8Ipc#;F][gOVU#pʠ6 ]3P`ZF˽ˉ\5I&=^Qf˼G}_ VзpK@n\w, &E5ǣ ."a+s03$6}n\F?w8V| ,ȐKJT)e9} $c pb-Lp}8fd8 Y zvHɶViSSC/ֵI#3D9s3_|Hޯ$$^dx3f-C站x,$FL!q ll:V ~Y#/J3]`5QhC7FSUaXvfs6eQ׮4:3{BU,^7΂5fAIR&/zsr@;٠܀>=B7cqj#Y$I$ࣕCEC HdLd!BҶ ,-Tknzk`m DT_7zW˘mR+/?7'Ztclִda=.cFNV$;Jq# r1G`bS9>~Oz~sI:TI6C{4AܙӼjcŌaSimmmmmmmmmmm~/$4(/c +M  ėZ,̓d{U;cKJ¾ք6炛Am3ifݳ R*Wi@8%ހ|xA4$cpxq‚[FKWao`<;-֎^. ;٤)0zrrGJ+s\M!Cܳc8Ee I ]PU @hbת^cMQ7嵸 溃8$͕(Reh9A(YfnHꮼlL PdžVkYtT߶,g#1_=F~Ο{(.SNF溓3ha`PӜ)=W=\5l/p_ ]ϫߠw,8'JCT1F]Qg9$vlKQΪ-/7+B^8888L ]$ZRkIl0`(DCm`rz+Zij f eBR"@pa;hwexsVDudi3B+p9 Pmn;7UIq;~ .B5vIr{RXNYZi^ȋ OCD1O 0-7ѮYZcTaڠh\0'k(sR8!#!!]PG 5$U"C]L9 vFh9Gyuuu.-ύC! HY>A]F<]L:.q^6]̣@ꭴ4(˯_9b=w1@ lclclclcn标<9<ǢFlfb53CpQqm,v1{n IR\Ah D1FD#dز.F{<2#B`00`\ts\&P b c?ІYm޶k`njoxϜHB[ 2I0LF$I@ĒI030304aI#@Q$PL@$i{@<z4w,YcA1maWyzjE x's̷-_8'o5,loL:Y|ijk1q>3w$3>Qg3G='Vʪ]^1K ˊױw_1W*aꆈie/OksBmTu[ El$dsi2'"a 04dk+&W ʠH>U"frirEevuKf?瞷j: 6WmhSnʯ:lN)K tܓ$r_¼ԋwP GSF|}E&(V}kʡ;&rL#qDE(l y\UvcVUM<= q' TG($w[M3E*2b+X:w? ؿ3z4Cfػ)~9g-r'.1b=} Fyc vKfԚpCXu~9/f SVjC~m}^kh 7j]WI[XGMtg-h7EV o'T0?Gob,0kU`*rZf@h+ *cކłxsKU714aaQyɍ<5 14riC= I"Uw"Lj)mjؿ}^6g}?|<}gJ-zm@Ґy[a'A&hm9,Q0_'6b}.tfSv#S!!ڕUU?wP=w`6[jHEBWڴܚ~zw^/vq=ś +e(aO?h?W[1/]-O&RXjl`mTz*I:!Kss)cK6x4o/FmF07O@kk@YӧH[imrnx Y'O\(Gy Yvl6GTw:Z皦m%z57+S]e~l_S!,Cf1.;y3eCexLP3 4" t9­`DE<1NMe2d7.K6wܽ.`75`Î_J0dcx'yPp9+(1wZ45Z`d_CƆim @-Y"ij5B.›妖sgq~f|Ph!:qmg إ:,ےی6.9,jA֘VF7wf"WnIVǪΙ 81|ZM[ Hf13uG9cBUd"B≛O1UKQw)s{s$e"d}QzxAlSsdrG3ϜR=bOxWnWξyoy<{\JNouG3?Zym Sv TȄ0cIF4$Mˁ }q7|Mjk-mz*/0vCOIdgU]pSwF}*V! ŨI!HCr7<Fg~{~Dz۱|7m= μ eQfH"]x 1)wdz%eI8il`ЈF4=B6F(02*=N=)Mp H Pe&hɟ#YO d62xe]Vq`H 'wꘉjpPTEy:r"+{J:\2q^Ef涩4f{5C0D`#a)+?J_>뤪0&F8F{$X.=/;wL@$r@||24ޭR} kB٧>ˆ5L3"+g^V11P! ܍ ]эYӼ@3FI3V\)p.,9UڳZ2b'&ӕbIOL9iRqE8ȱU2 ˦2D#gbp>v= u\CԄY#mD 5]P6[l-E+K#ǖ'P PN HB=OUгFiJ&B"o4hMԕqG~2}a`8AB5j k2q@  r:>2OmdT}>n_l$Ŋ]gt0|lU "~rI>ÞwkGYV`r+Jr6ꇉsQ!-Ѿz^7Ǜ# .(L0ONv7/o m>F`L'*x =&:S 3cC4g?zGdzޥ] Yf/_}/Ҏnd0L0\vӤ; [3*ȸ7V 5$w7<;qCفۻ.X~6-Svszٙyɚv#L׺Rc xq clYDwkxVMn؜b.V)uDgGHa|sѦbZF7F]JSH6#sy#鞝Mi,w㰼]G`/ߕipfG@XNC=j;Q{m|,σlZdk&,`E it۹LOO7'5gg#O[ѯqg45;|'kxl1+V3X`Btf F5JY[o~|wx`!etD$Ew@W9z14-!U/Qqc#pW޲{g2骀dMɘb aj༫aY;uɮ2]"dM=||>?7 :շzCǹʸ(^Tm+ t]X:)teȑ[Hf3*њqA8N]vC$'ƨ')4ggEK_o4ص@GI%|PfA)Ȼ&#1Tǯl7c;љ3 Nsij\a,YqrrFn$Y( 9ǁ_ܕ'H"GZf1}+_8)xS#9|/ϖ8N/\V`tjkP6 黑M>o M+S70psMUQ^" c-q|=iުp륗M(qLR5Xl@ iLrafd7ΒVQ>N,u' .<ކ85zn%+q> czWo|.8{qݽRwth@Ѕ+H=Ǘ?j(I(vyU!7/PaZMw^885~{/{*oW ɣg5/W/$gAx[.dS]:e>'GsC)OU/u:n Fv[6C;`.}j3#3n059@S-А֥I폄ĩh+o%:=zӎntU6ŝ8z}4#w:Mӌcqqe)p81 :g#>mY÷m@<%O挌Į<gylO%#~5oj^~NMm/+t/,_pl G?d{.̮N|Ko=-D_9 a BiEhc*A5,fyW ڜ goSzOr‚>(SrV$UCyD leQZ-}wx2˛YGG7 2~VѴU[`A?'u AϲӴaN VS&̻L1-Ë*yտ"Kx9vpUffP"Wt|k`jtyz9V|xZdY4Dq̜w U8r6e܄.-E>nc!gl)2٧M[XEGs=@ Q޾,>SNG`Pȵ}.a~Srk:mLNr90BV I KKp8U$ȆAma,M)euf$;ZL0t#Llt'2|KXK"Kvt&#'!uaŸt 5'i|Ȅ{w%k>OEzsCv8 3Z :}:.#CSefF](0ڠF7}.7~FPQ2&B,~ƽ3ͻFͲ` ]^.ns\>F~Y5Wן뷢ؽOouϣ̢͢:{Y(\hnKc#e槵a/^m-vp?!@ؖ@DFzJTꔂ"oZ" lFX -*U H F0JH=K@wO8uDH*Gꐩ(M'M`\Ӱsq` /O΍:i [xpkuHk7D#/O̹6H<$aAWA ASRZ%mL$l,5~BbyuAĐilҶoJQYrmR,` C 4şQXLb!>/`ct4EEӚ&fF)mӦh4ϟ2dԛJkM-%oI񽮙JY&*5kmwjmQO^q +HmH@`OVQ7, ,dD$ ʹj@*l x2}ϋ#ZJȯh]3?4]<=$a H td\,'sAqXO~-E. z_SsZe/~X nI2 %>gO+.R(~ӭ!-eO=s2o 2`Z^C޶ U-ŝKbKcFx ];-8Y>zz?*U0ά%tB3E~Q! ݽ5axA9P(*@H ,Zͩa8`6jl3kd¶09g>1Q9Gd_[~gAr8̉lLeN5cUݡ;SQG#B vk''Q,!y|C"?7-=iurŽ>OQ=EՖOUz`p5l&QD6w>li~d~8=D̓NHMJ ˬ{ >k1x?.k(6Y JM' abBDX)B`)ȻFdd;eP),>( % a1K7PƈDD`AXő>(P42't15 YDdEHv DYbb~Íue<"Y1B;DwC< ^XUʢ3:[^;u[4hnIVHTHW:sMͶ)eTi3l(TUIdejYE D4 Ԩ"@S R?$n#[fXm`6m5MJ%JbJ/K`z!2S>kvh+cU֖a"xtAe3ء1"(f8  cؓP4t!Ŏ0BmY`ud61=V~!`x~@/y>}ŘNvԸ8X)G2/I 4!P_J/N] 'IK1&0F-A3 a OU/wk3!F_z#i#:$aJ@T`{ˆN > p B&i*AD A #C=f|Bb\~>+Q L>Hlr tvB!(ƉBgp-Eo$: #zl!X(ƟJ jAj!soT>"pי2,6CRo p`Jgo{>3XKX o [1z _ c]ܼI$Hn7aƴM@Y![ފ Sg>Owb'ˬb6HE1³тuZ0䙧BSRe m 8x'[ՎH'|R-qk]RDcxw ^@՚qPac1;sO6bw=z&ĕN8F̦_ jVw}1HwY]5N|,3{"p[ϖ|]<8 bcKEF޺H:g$`A:d&`/O-@o&~(/휈I$9L$-vU}}mj{ӓ9 3l!W><$P`)QJZyO_#6FP !׻ Uݵ:SWwHleR׉gW!jm-mU!YЛE*5Hm&"ԛcZJJիayU,j-iѭ~vuswoe /ҿ*+ifJBߪqxA$8f;XnCdHTjkMKRrL*Iì}$ "fHdIZrʎt\,i)fkC*6Z*Uy붿OC"M4lΕq)vWdYѬmMM,RkMfّvRզk\Tɴ[ͱ[2$хe1d4hі&JjMY2%E{j핓T +۵RiFc&5cQE^vm*bM|W nm_嶍,$2FMdV6׵r$5㡶:Yگ|.%YL>-?+Fb8ꪁ T`?`cB}\+ ~pCd[ nHzuHowF~wu* zݶ;ϘS˅D;jȷ̅(ޝ>HB<܀@7)L LbI;=ڡ 8x*&0YV1W1~x12@!57B |B:'u$H2li7ppyCCCJ7K6BAld) #?JN,4&' ࿤Lqj$̲۔FskǰC߮^ȆC 9+@L&5T< " ~_ГȐ auHb2vD?w\1(0Ďr#~t>j8!4N%Ii-$`0 C^ Y#l{oexpѸn<Ԙə 6'9q3&} 9$0gsuehx t᳛$:6/ZH<gd׏9 -p/mH\Aӛwog-8uZE,ce=AO $|]\V5o1H @D(Rթ[IbtmMI,U6i+kFf5Kj6ei(nkUMmvmbFl[E 3B_g?qU5Cyrg:Ӏ""",#*u6u*1On|߉|"Ŋ( 2" 1DN,$   $x?>w$?/[?u`wE#-G0OP,[m[lE02 &W@"/isb"Jx-|1g j95*D ?Mpz K|_hϩv1÷(z`P`+2W#Sꂵobk\z u0_)˲7}.p(=7=Cբ;v#ڮ 2I?;0BvB2*:8E 1}WOSsLfky>6sWyks3;Z^w{W0k' l48P51LN8ۡځ7J <9SL tc>?^VщBPɖ.. `e@ӪZ{0f$d349eEF9o΃+ce6A$f/csHKõU(>3QK-yYULUمpz~%N6KfziQGLyNύ(B?ˠ:|[hEǎ$ I{l>Jnx0tXIlKhZ!XԾp f9T:rG 4+EEUR+(z2 ރƌV h`cz_vi#x =Vnmm8 ]"ZJ39L6@|m9g3ɻ%Hy ,药~~l(l~Z[{ygWNy|S Um>&s'c5^~A !7f#]^ 7<.>{.ZqᆳkU'毿1$dh+ϻO6ז|y[}iƗߒ뙋BwW9Q_+â7李G[DC}j*!PA^ ]{^,U>z,|?|fo!l; fp<eY7FT#b $F Wի~ou 6X_d`~b1JhaLؔMJ1jR* Wqr[9)'\_65 !)lF#xZԻ^un[6 h G8E @jR߻}tq ]` HJ"*!'8~ِ , "W*)`j#2({("T #H(J4B" ЊZ8L,wpZHX@>bЖQe'`u"E.(D`lAX@T1A>}Bx< |OG~?Vs~I$UUUW>{wo~~A|@ I$I$ f99sc 0 UU]UUUUVU!`eTnUv_.P K DPP0O %In%`ˋ^{aX3r@gNA~A|XJFM] d:}_&`#x"`)8ض \BDr~/Ğ7dC ,yt?]vWGlJ o>|-yˎvMK`hCPʛ+;xvθZ*fx1b1d$I$I |;ǽ>={Obۨ|fqRe$!2HI;=>cӅΘ򚟓F$I$I$333m#To>۳fڪjN·hNvy{؟%C-}w+ͧqSM1P ´ewI[`ʼnVNv%CG:B+IPpGc"!G_>Jw "CQ(V9i Lmmͩw߾NSKN}[qw]us9k{޵kZֵkZ{I$I$I%۵Ϳ/vr˾54j*OݚE5_s9 4.$l&![{kj~ZU~ >o>~ڪ=)L\f3 $ڶAH3 C wF ܼ=-!MXk܀׵: ]@J 0333 k8 5U:vX=ce mų{3Gw(5s܁X 8uxu1R/VSna\:Wx1%YW2ggf Bp8A>"l>zL;%I@RP%BZ!jЅBZ!jЅBZ!]ގw:}jvJF.BڊA+3hhhhhhhhhhha!Ha&G|Rߧ~o9skZ2kYֵkZַ5OOO2Y&L4hѣFɪzz}Fkzַ//{ssZַ5OOO2Y&L4hѣG,~QL JqSi>c'eQUJ|՛-Ԇ $;1ipcgf͕fCC .6q`@H34\ށYUD.tT) HIW#؈rCNiδQܦtsC*FC/8( EeӽvJEo"II1,rqC,Ił*I"$`I \08ąH0"Nh B:^c7VH5V+1>Ob+{LkU^y[=+k bBtvgxeb]7eUµUaAF~CxqYdYsgR`j! zn2hKZq4Y}E$+c@mSM&.0%Ƈ.q/c9Gv=TNB>PM@Bq D){dFƴB'5I  *zy|t{Z]wXvs|b~ܽHIQ'A>O#ZAKɒ\T $!&TJ;[nwneNA>J܏yt6_ j4X&P"JQ&=T,.>!< x%b'VY=$V˼H4gf Ia:M0]"Hi:ӑ(ЇE|t 9q#S,p4JrX4!wBh>N÷,weP-ӂs,ys9FX:=Kp ,k@HKBȃv_Vvwv&׷y Tu4bӯ[ti'"+B&#|HFZ5e l0Xt_hhI;a$%%_L;"0߇ 88zA@Blً`0TeƳd F%0 Y]xW\Th\v>+53=3Jr{ˁ ;L}Aiw)p0pD=`אjQw0H, H/,mw 7$}xb~6@򠡁Cʪ$ XIo=ۭxּw %m*^e<=C[|&fnP/wI 'W5oK+BfDbP%}/'^"_}AI&c7-{ 8u F1.JF]uo)m$łh [O(&""~B m]T:Z>c5bUQ*R$:億B*'͒Om0^02+YBOt,\Q%Ԫ1wS^aG툔B0FCHB !7b-e|cZ~9w8/ k>æeZ#uяZ~`+'L4z谐Yz2D=|f|{ODTvlDx$GG>\4<;YwhR_/S9A+GH&K{&˻'9$WBKUU@Ixwgzz3 n2WQps 8&rH˱f@&Oď &!J5/mZ kKHzl :1Ik&bG4LY^f n!keBQ-C',Zd]-,3(A6KYa(,@I*śԪ :AUozq`5N $PmZ؋qp8g327Pdo.83NiS[ݍ̑~gZr'3\\`rqlsD%j%`t\:"SU{4ڷߓ>N)u\vh8wۚÌ]X^rWJ=8 aс!ƣ˸;uPҪ$I%$W9[(I}m76Kj"ovAŇdFE" ]]wD=U!:QX;@@/-5TJj5am$A>rӨr!92'|w~WZ -kt9vmuRE (4I{ acgD*f&=?"I%^ Kםm*ceVkh $s_}HoQt)ʑH J$Px`© =sζ"UT$޹L 0:H 3gwNjW/U$lK.TvlDž'VQN0Q'儦7ķ;v{k&Hom5Yeuo:JDBdb`-ڮCh 8HYa`C KoX7mS|XbW#4'T7=wUu`I)ᱠ~tSΌ0.`u 0bgC7BHI c򃳱wwwsp;븄I! $!:]CǏ<9ԧzg%(<<юk묔%C$8 ':Pnn<,<5UkŒ \>Ut|Zz| dCe /ڣO g0!?FH]ʘ՝)CG${OuYd;ΟUUWHRBUkmu{6PǗ;ǯR9ˏQO {U853;% %d D)›?aO<z UyJV]d7~8PEO=֎  2""r zۺ>AL[AmK+ ;ct%ulPԁυ⨋բs L]mH wpYuBᜇۧ>#'׍5.Ԣ%@'(>)]:ԏJ(tTx  *8b C@ƒ0pJ7׽\lq"cV$I$BI$$0!$y<9%x\m>ZxSk@Ͷ 4n"'ZQ Ź1D][78Q ]DK]%솰ACٴ:I.@XrP!Cn$8&';kZ:+APMi }pۨwLY;r$W |҉UD 26  $BF畛ykѷ=`a%R.ȆT45Ŗ$؎* Zg&5cIߥcuU^i mV巆6BҊ'L&XIh/Bb*V>ca$C~-r7x'\*JU n6癷M8!wmA'LS`ڣ Ι'QXTRvj̞Dj&NeoMfd?B)ևGSBx:ukdܟ~ >!|YdUPI*A6}z2< =XE˷HČpԞzv'g廌9r$܁BByU8}i_"!S!8760s54̟w(sߧM3p*ܥw $xD>mܷr$f"8Z0k =Q^S 8޴dOә5ꖑXb}5:wPD$iinVjCX{!~2%(x%T$ |j#fr4T;ǽRH'r-_LIdh)W1nN!O}C$(f& iP DQMu(X8_]z-HB ne2U?8؉X(FʅUD*\oi5M/$ Vw}ZjhG(E!߉`oM" dDd:hӝ=-By+/N;c*:A9*b.XYd=|?6V@x(qI/G]01#1W;/':b qDSꇫ~vU s7DȧUOJ2(z*{6C.B k ~i WJ8jlqiZ$/NE$&QyIQs d@EO#t4s} ߨmC!^>(D.~sO0ty[vk#*Zc Db_Q 0& Us?밊B.ߦqOf!<8[T^r9.N 7ˣ!kwhekKpf$lدbg-c25&.Vw<Siΐ `L_#,QPPqI 6 _͞0M}=K:AVj1Z'\Cy*%Es$JOPHD?dɸ0"$P W JBD~ BrIYj+v̻HT--(E-*V"=i&oziEQEQEQEF"6fC&=ѥ1;zO|?7`[p:zq6_uw72R.H4 Qg&Hn鈴ta[-Ht2ff.G*@^tb{N;8q5zJԿԶ.Je1QB]O=֌k!ɲMGtdy0%a%Iq ó9>+G1jPL:0x *S!xʈ40:vY\20Euh @0g< (J&}yF\wT~ŌZ#y h>J@T+TMӻiPƘ aovhԄ5?T-UM秒{|̉g+ttνU)藿.=.3_hG'8PGM?H"hT>t~}RURUPU% %UTUU"QUAU% phЛrR5u~7  ."n?C?j8la 5؃mKi%g+F@H)d4$&^oJtOͷ(~6SadBlr Q%n{Qr n0G@E(áv>+X@:x '@2ń-3M]Es7#'Uq:6M0 `,dPT!` )됆FAm!2vyy& +S=cneץ/:Cl\ TO8jdMU-:o5m m1T ^]q ")wuNjRV]5roN1T{ҺD"<U* zыh a?%BoojR)T?0j< zN&,{9` *Sn.Z ʅdp8gUQ$ "QJ-Is\I:B-: eX.=`ւ/ ) HQ6Ic5RD)?tPjRҖ X,QEA>iBRRө7K,S;,8Bwe^SO`ׇ% Uh"xẇB{#CoӸ15'(䨽O\ 0T &E,Y >XEE%1CaȄ2*IK=$?. >E6JrOzHatP,cz Xew TS \@Лir:30`ԛ:I<7z""aDw* AZHښU@  R4$,iBKZXEV {ђqve B=jʵhK >6ߍ+oepAxhEJD9$ AH!yBiAH|aAҨ=%EfD4HS *CB,e׶mj+kZ7JӊDPl#p£_=MAR}[ZuZ!K\^Z5;$MkgG4w?MgRcceAhUQOqv$B'Hbi 7)JIYddd[߾O+2&Q*m㺶a!qJOXIY4 F%5vTm(%!0[7~::2pS˛2F@Pa(P#)B^X::aG#+"3kS!:Q@E-C@g dFY`HK Pr%)$Qa]Uu;2Z-u]vnMgtC!|_GhdݪպjRDFBD+a9#ب~~AX +EHoDC&A$0- =7EU jRVDX)icLy4D9!6&P2`W@40Qj1ڞ_#)r@iN`E4E*|KHs>A@@'?$^0]:4MPDyx:&aEuNw|H0 Bԣm*AI6 Fh،!Ȳ0[A0"gE V&KTb*W%fRҡ 4hl Pi9nC{$HO ;Ԋ|ԝ%uLkxyWȋr`rLi46\؅9|`p b p.5cY: C}: !vJ>W1z݆V h\4qp5W-mr5Ij#jj`3'峰q|ʖ̫#i1,G=zr7sN*m$e#b49IïB*m9qI8ǛIi^nndH0X֟ |⏼ 11=rp4B0 2!, 2H YH8,XPYzGC:GAЈ(ԥXT-TmZ6dTRbT\P"`0ACId Rx0' PJQIhbJ3'&,ŖAt@d{JxKyҦg"1:`zpASPa$e`*&*ax+M4%4Me@#CHVjn7HRAy&Pb#!AžAhdh{zH:`Dx5i\Sxρs=p1̗ep@TG`Ll+OF@"rAMx ?YT%(t0 Eb~eR/MqRbYcb3hq$M*b^9 -]l6/+)&* HI ]e_Thpv@ _ܪp_ZtH(AET "z୧jdr aDЪ;wDc r#""<* H*'-4APk nw@X8U!\0߸]]ZEqD$@t)5λbPw{Q&$UFN raD036dFm雌kfnkU@$fbՐk[(iH9 ~^p@Svx `6#@̨6fƱSkƘ>SA D=20d v7zU-[{-)BQ3JJ#666P4Q!I  (flշyLCeeM (ƶ[ū4H`) $;eP(rL•ˢEswtݪ9 ו$@uM8b/iP"B0b#5y 1 P6VA @?5( pg˃`z}<|(,ϵr ~ ASPv"̯z>79y"%k@NZ!bPB"SfEMPA䑈 Fa "2N~MP@ $ZRUX= D'R lI@$ }AC& mzܔIP!XXg.i H>"׏J&RW`!4sNDP"$=ͣe,1c)w}M w=F *+*=1OРgŁ6 ̡M &+agpY+GEPrCr ʥUMQ-zaiI?0@鞺CizuC  Y" 0g3("Aa•b`" >f;Dk̊[NZ_phEPc@I!.[_@(  VqV" ,NRc|,='\u(A8… %^DwZ(tA'څK t7;XuePb⛚gb``jR"/` !w""Q ={{ؠyg` t*5!O8i* ,!r(M5YR =hY@ T)AyBpwcT5^َe v: VX#Qj.9*Ъ $mJ)(Q:G?m! %X{=M'25H;"-fm0R1aP:zda Mle^k@@$'UEB%BQܓ4ۺ]RMKL  ,K+} KjMe 2]7LI֢lQP]Y]ui&HTurSd&m-Jy[>_K)B a8b XTJQLt!ys: h Hn)UJIQQUH'PF:; 8wHqPw 'H<9zN`2  IBP U2KQ,S~|(2 ;+}!:*!%wp ?$)RGHH A" Bg 'k@9uO@ A-HZ-Jְ:Cz a>†ՁW`}$SH{ aPR#!zMp& x#U*6֕iiZVf֖tS-RR"U(I&^fWK t"-d*a4ׄ$XL B`M4f )!IOQED"AD"8āZ^Q+7@r!y(fpB/Cϖkd- PPRyq`,@!5 nI!@= T]}p;P5vԤkdzJ r&SNvu >0?(06B Q,VCMCA!@xc-CDމ(E(!SZR݃h%_`RH,!DHE)lA ,u wO*g94y g`{z$;NS*H'DI$UFD'Oߢjq-iQ ^nP۞G#Bh@xEu{bO48@a%(Q+$aBԈ@RPѶҤ5m(!Z'?Qa A"MQDd `V")A'7 pAhƒ{jPMGΊ(bJ2LFԀb QZLBP5o@@x@E*z:M8ma`]*NJr` rؓ8e1HPmCQ5mI8JLP-1#1 B+Ta Qt伄[C^{,i@5TlC04h VAD@vd$ ?\i`yJE$+M1 ,c}'L"i/ +ҧ"\B|Sw8-J FN3RrB)~Y ,)M#JЀ@=Q"VBEcdjehShP "uAb)Pr"Zl: Up8 D*\ T6@$WC#1 LaD *,B EAKF8@mgBk" @`դ=ISv֨C" Qm [D4L Ԝ|`UDZP@V QE"*ょPO@|>9 ` Ѵ 7u~]Ji)=iFZ;x[&&* JVQ)2}ڑmL)S5` % E*X*D aR"S!D 8{ǽD z"' )jЂ@O5b,T=jD T# T(m<7A ZAOa>AO`AJ+pÈUP8=j  M[E\#Z`* 3L[Rɵ5l V+oީnmkM  `䊔Ra$Ċ{gKys6LרEhDSb{Ƚn4E ]dP U;p ڡphU)DFyU9SE=$!Ce@F  T"&~-$$% I bUHeѪAc$씁SpP""=HlA5A6IDD2(P^q1k $QX#z'\hNnE4,@kA;A]ĢNgIX.$ !вHs3>xLôjD¼Rb $ Sh@A_Co,=$| 1au5v4HC$amM;R*xZ|ۣ;w&jah{Z/rq0@>D&,-d!d2 JIʨ* ! @T?5 APj$D=a#2 >I H5^TK.*9Qv. ܥR4 Z((]BZZQF&8O.t6[h,jR:Ha %&hpI$v)0XB `eQnAhQBJ%`^Lc`$h0~~L "Mh!Þ]n!vs^ `Kh[ajIJ)K(‚` YÇ1 1Y0Fh%"Z@ZIĒ‡ن9# (,hmc@GD+" kT˄@aFhf)YK a)܁*lpjLnWne|.JJTvT2k&!Il-d(["&$ZC| W(`HSѭ%rNfr}`Pe,ZiOu esEAo&`^a M4D̂a:Ӱ(#v<񁂝4 `pc:JIax0)<}0\%V1E& ż4d(74" !(D0A'? +ܐX7J !Z@DL" #J>D@e$J#Y(J|S9<u02.(O@pP (ڻ= F 2i8ilu@ʞ\;S#-15(T;0 u )ŧM@KAcL Pe3(CnqWU\r 0ŕd@x!6Mo^$I$I$e2AN91lnNjK$!4+vkĖnO]4̆SER9Lw"y&bE!x  h@$Wu>HPuzwgi5y=]<L@[dZp(YaJM<XLIvTZ?hm4Q 4PE!P-q'( XsuR-- @A;gh YI\"aI Df[Ui܍D'X qH) 3z\\8 @hvl&0/RC, 2HÁǞ'ΞRCԨsP<"h0Jjlͱk7A$RA B(Rh3*9 6 lEF;*5^=s.cKu;D>CQH,$0WB>5SzL!tJA) E QL)Z):>E uZ[ ,n*$Qg٠\@ Kqmʺ혇*g(uf[9PF`WUCUZ,*Q@X:.$D 6DS: tY H-zi^,$X(QR܍ŠfQQmA nuF֢ƫdQw7KcWSY $-$Al֓CԠr;bq<|2vh &C{EQ. (O0pd+$Q  Vlf\eZؐ$H6 YeZkVuBB4(X(+D LNŒdP$ؚ FAdX"1HDVIeRV!B2T$ ^^[+^&0Jږ$"ID?!PXXbBE+@&h M@1cNwKR=F*!,t Eҕ 9M"XzR(P+ZoJE i|yލG! h%;LLP2\֠ Lhns"@P:BEؤC=9XB uѤ rpI2An8#N0Rf8ʬFV$*IWdmK鴚!,2J6mѭRmDΐDT%t!21IZAaO}DQGC]v(,HN6acpQ/&٠jоo+0ȣ@a!g2Ҋ(<~(*T}6$֨MZ0yZABr$7^ :m!!aXsHhS8 8*@P8NDO9cK,- $Q-JI`XC0$$( IMzIiyGv~o{\)Mߢp,:HDC'`ԝAhRvUײƇ|")q {xnF˄?ӧ[ba]q )H^? eSc*)P* O(mRU7͙f/pKB*G &"BlHC:$<@gТAK E0`(;ʪT d7 *!xZ`@2ɐB1vw(%6;Z@0 zB@H6bѭ;׶fܽ EmGe  xCKJ_|ȟ@pEه_Pl*CapH+_|18X {= PQB| nCX\HS QQ|`1@p@g}TTd"d]qN@dLK@@mO?EUT,]%)y0 @X EIPX'4ՉTDr@(Z?fh H@Kġ(J%&+#E@|VMETcJFOu ru]T^@E,zp\Np6ϒl ) `i$ZBLslR/XH -{`"+t Me*2zc"|)˰[$e^cz=0>BحP/?mSP hOөc$%% #g:K#߉ip$3ǁ^P (v&vAcAfV޺eV5^Z& GI"z@Z=`O!$\R=J!SǸ}BgO ;¹^&DlQXwČ2̲k-`l` 2aL Pb *_k'쪵xS6)6;C Vۃ8&ƅPzr@@rQ DL1AD 'ކAt&T]nֹj@Sx+K/U2o z i`;evCxp~6%g, 9DD>6Aa08r!7Fs@8ik?؅?jˆ!ӣUtH\Z50v^hvbygQ0JLf]\a   D%ΆɆ;0~.O1ȻU`#~9carO5]o꺮ömIuSȤvO˟l_˖6a[i蛘]\߹Kpgå?Y4 NSk|kT`F'c+91չB:-G'T\=rc[*3qnQŐ+Ȯ>:+=REK>qj9nhvhmkQIs$r 2S߇wbe͝? O\TeJ>?`َshrRǒ^qt2b']WsG蓱i-L$~ݼ`8t-;p1&9j49#đ`S*'[;WFH1.@6{Xoqf$9f~VAhUUtc?A!w?'^L|zM[z{ 5\Rzμql?m8> zGH-(\qp"`}h3(]Uun}-ép9{̙?Go}wu& iJ}viYwQG,P lm,Ơs[7[7,iK^IQĀ ]lܛJV0I9dLUDj$lA6|^2" #ҶxCw<BfTð8cEƵ ,h@ٞT<<䗘  =XJQB B%1cI^g|w  ,3#ilz $XDb4I0DK[~%~D%QɄp/@bČ4`kԧQKb6[7gl )L&a5rlgmO}pB$-?H0b  f[T曄N r(BIɪ *W$obEOz/1"phBVyD"@B!Y<"JEIoIV`qB-jb6lT($)@D( !CY9C@1qL !lRQ NFĂèl u-1`%4K% JAGbihA#\MWM\]52J6"ș"0bbN9sw$a[Y<Ӵ=Lݴ<ƞyҢ{A$%*䮵vX*֭j-#FAPgqx>h$ ܤ{:k{ή%[[ϭz > ;J}xNRC@8C)Tcp O2| yK0Q(K1!`d@$H5 Ckpi*```(jqj]ed [xXׁ jW+DX %'D[y$ vR3'_ZDFkZֵkZֵDDkZֵkQֵkZDFkZַ(>>zPXl?h'~i;7Pjy@H~y=FM 4ATRۦw%*JSR(u5( `$Z6M77aHp& e,38QU%B5KI~ _ɣz Hu*#VFHF:QZ<"qC'@;ühjn)tl-ġ?2]\iI @|Cq<5-]77Q;d2IK]UbYRXT.NYQ|d$$Q5Ct9>hBPZ F CJwJ!t!)(%8B7U$I$I$]}Ϲ9s1pH RmUUUUT.:Hbj4O!OCylw0PSCicN3Dqf9IcBvFy|{Nǂ,G/WXb㾆Q_yHfq+o~PET ^fq msQ6nv-(D``mEQ$8I$Ew*tF =bq6hV!7Yy?4/؄$ؽ/=a~ G$ 4L!` `@0SLw LmP-KVA]BPYRBBjҕ-z GdFK*M4:׃h" LLXH qjȫ6޳;CK`#OE8hAIRB!X|#̬[v_LCqVwL2FIdl"i?aR ůw_J _ ' JdK D0]!\3t70$cEbg>L`I$ ## IWtBPpP/vcJ%IzrĦY_Ʉ m2 lDcay4-$-%ѳ18cq \BuȰ~41 a!먡،ߺ'a33n6p 2(I]qY-|꣨ՋVy }@N3fX,>G;QK8vhWǀ(x\: t1Pc&jh(MBk zysxHTґځX/+6"qᐜ< hԧ@H^RlG'; "P>("-D%Ekt dNWvp(F0Yp(M 'mȠEMCC)Y^LՓ96aT(C3Eb,LLS5\"1- U4 jN|hAhf7EZ:X<(-@(3L&zIfc|8$`d.."EuFƹ'i@X|$a^qhm.%-h `p* o[}AOv2(z5`C"Z%QE )(EAdu_,/"8`$` "{l 1@N:НANF󲫘22)nibYbmBd#(?^5&1'/1@jF >ҬJ.Kw~ա&'>IQ-GUn{(f N9Z ~p_J+)azn+!aM&!uR?y{.dq3RX H@=xtRꄗ$AydSH&FXW*"Lނgv4헁Rl v~\%r,%"69d+00 Ʌ Mg >ƪI$NC|" pU_U`U^W68{a`1t iH@ >:>#T@`(iJ>7{ÔD!1H7 dWhiͨEPQ ~#1_gҦHA0 #-/J$^a,`#=lO|NZYQ#被}?V;}uF?qnXpJRHi/p 6%~FL9RYAP_~7E`t0uiLxcb5Cg-#LAUB@(suP#Ai,E -n*b.W3H<-YXY? }O!C?T>2ܨ^hCY{cQ?z'BDdm 9y=4 m#ID`D!AE"Y07#Eʫ.D>iwXL!-P :8 "Ai|h%ٯ!!iI%!["z\DFͤ!AP.H p^ :@m<D!@O̳TF,QZ*fš`/@D«(}Vu_4 2b /[BO?J,N==^v! XHPCD WJ%C JG8zwh[ 7+<:"{QLpO=M)j7ΕU&śh\%ു=~2HLt<cPԾpJ5g5r8v0XMm''+7^&tؼ? !0&G C(́0 +|r2f#tt=$i(`ΊUky'c*K[ DLc \ވys1]^/`DEQP18$">򄬖K&3ZfR*IGIŀ%GϮ|p5QiUݱǨ>E9rO2&ςH/C'tSXFp;gvs6ňH^/i I*s+Ͼ0T[^Pzk`\wYvg42d Kձn !9N3dqvL޾j'N;1oN|9{Uٻ7m k}M;G=O%?ks~0X%wQ4¥b3WC4F*/8#`DЕ=c )A2޽ MnPx@8p L fHa$8 Ljg0'D%: ЇGCl8N@=dPeŰ"6B Ssڼ]!07Ҁ) 43lM}-Ayk Ye˂(({b rJaJtJtÒ,AM U BA! |+h,$@a3s#Q4.Y6CqɧɱC3OVAhfbHEiwh@3';%"i y_ KٳlQN^<;VhJμtJ{W8&e0sM9w٠X8 ǓZcၷA b;hv :Aݙ4s=aqL햞˱FHj<๋79˅35pǛ5/`gtpl< h]lHD<ӄbe8Zj cTģ~bzXհىkIf#҇(7nIqB1\OzGtxE.s&F!$'*04mZ6(z Ys6^Rd$鼜lwXB  4ׄ,_΍+A!FqA|>‚]I b 1GXF pp\:ó2H@ $uIL~y1 C:TCyvRCG;^H*S$Ȍe'[iACB Ցaց[{m!dYch{.#&qA8UнTHhI,uS05:!4r& \1##o(v̳nWM':bڻ6 t!@xG6Pm4ە9x(3n Q1-^ aq#3[]EEwE/0!Euicg=.LxC(A(Z0&0z0u',Up]f# $6>2@