From 8b1874dd3f9de18aefe4eb6bc77d0bf02318ba75 Mon Sep 17 00:00:00 2001
From: satabin The However, this way, we will not check that the input is actually respecting the JSON lines format. The format actually only has a few rules:
- - Input must be UTF-8 encoded.
- - Each line is a valid JSON value.
- - Lines are separated by However, this way, we will not check that the input is actually respecting the JSON lines format. The format actually only has a few rules: We can leverage the operators provided by The generic derivation for cell decoders also supports renaming and deriving instances for unary product types (case classes with one field):import fs2.data.json.jq.Compiler
val queryCompiler = Compiler[IO]
-// queryCompiler: Compiler[IO] = fs2.data.json.jq.internal.ESPJqCompiler@81fd7ef
+// queryCompiler: Compiler[IO] = fs2.data.json.jq.internal.ESPJqCompiler@51d880d
val queryPipe = queryCompiler.compile(query).unsafeRunSync()
// queryPipe: fs2.package.Pipe[IO, json.Token, json.Token] = <function1>
diff --git a/cookbooks/jsonlines/index.html b/cookbooks/jsonlines/index.html
index 407069dee..e3404998f 100644
--- a/cookbooks/jsonlines/index.html
+++ b/cookbooks/jsonlines/index.html
@@ -164,10 +164,16 @@ Handling JSON Lines data
Reading JSON Lines data
fs2-data
JSON module can natively read concatenated JSON values in an input stream This means that we can naively read data from the input stream and we will get the token stream out of it.\n
.
+
+
+
+
+
\n
.fs2
and fs2-data
to enforce these constraints when reading data.import cats.effect.unsafe.implicits.global
diff --git a/documentation/cbor-json/index.html b/documentation/cbor-json/index.html
index 3fb4fa96d..47134c9a7 100644
--- a/documentation/cbor-json/index.html
+++ b/documentation/cbor-json/index.html
@@ -264,7 +264,7 @@
implicit
val stateDecoder = deriveCellDecoder[State]
-// stateDecoder: CellDecoder[State] = fs2.data.csv.generic.internal.DerivedCellDecoder$$anonfun$coproductDecoder$3@4c818923
+// stateDecoder: CellDecoder[State] = fs2.data.csv.generic.internal.DerivedCellDecoder$$anonfun$coproductDecoder$3@54726307
// use stateDecoder to derive decoders for rows...or just test:
stateDecoder("On")
// res1: DecoderResult[State] = Right(value = On)
@@ -199,7 +199,7 @@ // same goes for the encoder
implicit val stateEncoder = deriveCellEncoder[State]
-// stateEncoder: CellEncoder[State] = fs2.data.csv.generic.internal.DerivedCellEncoder$$anonfun$coproductEncoder$3@45d36f80
+// stateEncoder: CellEncoder[State] = fs2.data.csv.generic.internal.DerivedCellEncoder$$anonfun$coproductEncoder$3@4dc4797b
stateEncoder(State.On)
// res3: String = "On"// works as we have an implicit CellDecoder[String]
implicit val unknownDecoder = deriveCellDecoder[Advanced.Unknown]
-// unknownDecoder: CellDecoder[Advanced.Unknown] = fs2.data.csv.generic.internal.DerivedCellDecoder$$anonfun$unaryProductDecoder$3@6aff5a51
+// unknownDecoder: CellDecoder[Advanced.Unknown] = fs2.data.csv.generic.internal.DerivedCellDecoder$$anonfun$unaryProductDecoder$3@4a75b0f0
implicit val advancedDecoder = deriveCellDecoder[Advanced]
-// advancedDecoder: CellDecoder[Advanced] = fs2.data.csv.generic.internal.DerivedCellDecoder$$anonfun$coproductDecoder$3@1dbc0f8d
+// advancedDecoder: CellDecoder[Advanced] = fs2.data.csv.generic.internal.DerivedCellDecoder$$anonfun$coproductDecoder$3@15ab1d9e
advancedDecoder("Active")
// res4: DecoderResult[Advanced] = Right(value = On)
@@ -223,9 +223,9 @@
// res5: DecoderResult[Advanced] = Right(value = Unknown(name = "Off"))
implicit val unknownEncoder = deriveCellEncoder[Advanced.Unknown]
-// unknownEncoder: CellEncoder[Advanced.Unknown] = fs2.data.csv.generic.internal.DerivedCellEncoder$$anonfun$unaryProductEncoder$3@5db44588
+// unknownEncoder: CellEncoder[Advanced.Unknown] = fs2.data.csv.generic.internal.DerivedCellEncoder$$anonfun$unaryProductEncoder$3@52862e77
implicit val advancedEncoder = deriveCellEncoder[Advanced]
-// advancedEncoder: CellEncoder[Advanced] = fs2.data.csv.generic.internal.DerivedCellEncoder$$anonfun$coproductEncoder$3@3458ed1
+// advancedEncoder: CellEncoder[Advanced] = fs2.data.csv.generic.internal.DerivedCellEncoder$$anonfun$coproductEncoder$3@3ce78afd
advancedEncoder(Advanced.On)
// res6: String = "Active"
@@ -269,7 +269,7 @@ import fs2.data.csv.generic.semiauto._
implicit val MyRowDecoder: CsvRowDecoder[MyRow, String] = deriveCsvRowDecoder[MyRow]
-// MyRowDecoder: CsvRowDecoder[MyRow, String] = fs2.data.csv.generic.internal.DerivedCsvRowDecoder$$anon$1@6e1fa445
+// MyRowDecoder: CsvRowDecoder[MyRow, String] = fs2.data.csv.generic.internal.DerivedCsvRowDecoder$$anon$1@3c1895fd
val decoded = stream.through(decodeUsingHeaders[MyRow]())
// decoded: Stream[[x]Fallible[x], MyRow] = Stream(..)
diff --git a/documentation/csv/index.html b/documentation/csv/index.html
index 60b0a775c..c02ae5392 100644
--- a/documentation/csv/index.html
+++ b/documentation/csv/index.html
@@ -200,9 +200,9 @@
val
textStream = Stream.emit(input).covary[Fallible]
// textStream: Stream[Fallible, String] = Stream(..)
implicit val myRowDecoder: CsvRowDecoder[MyRow, String] = deriveCsvRowDecoder
-// myRowDecoder: CsvRowDecoder[MyRow, String] = fs2.data.csv.generic.internal.DerivedCsvRowDecoder$$anon$1@30b16ac0
+// myRowDecoder: CsvRowDecoder[MyRow, String] = fs2.data.csv.generic.internal.DerivedCsvRowDecoder$$anon$1@43b97028
implicit val myRowEncoder: CsvRowEncoder[MyRow, String] = deriveCsvRowEncoder
-// myRowEncoder: CsvRowEncoder[MyRow, String] = fs2.data.csv.generic.internal.DerivedCsvRowEncoder$$anonfun$productWriter$2@5aa724dc
+// myRowEncoder: CsvRowEncoder[MyRow, String] = fs2.data.csv.generic.internal.DerivedCsvRowEncoder$$anonfun$productWriter$2@3fe5f516
// decodeUsingHeaders can take a `Char` indicating the separator to use
// for example `decodeUsingHeaders[MyRow](';') for a semi-colon separated csv
@@ -453,7 +453,7 @@ implicit
val parseableMyHeaders: ParseableHeader[MyHeaders] = ParseableHeader.instance[MyHeaders] { name =>
MyHeaders.withNameInsensitiveOption(name).toRight(new HeaderError(s"Unknown header $name"))
}
-// parseableMyHeaders: ParseableHeader[MyHeaders] = fs2.data.csv.ParseableHeader$$$Lambda$13037/0x0000000803523440@31657362
+// parseableMyHeaders: ParseableHeader[MyHeaders] = fs2.data.csv.ParseableHeader$$$Lambda$14099/0x00000008037f1840@2a18cdbc
val withMyHeaders = stream.through(lowlevel.headers[Fallible, MyHeaders])
// withMyHeaders: Stream[[x]Fallible[x], CsvRow[MyHeaders]] = Stream(..)
@@ -559,10 +559,10 @@ For
CellEncoder
, it is even easier to define your own as encoding can't fail, so basically it's just a function A => String
. The easiest ways to roll your own are using Scala's single abstract method sugar:
case class Wrapper(content: String)
implicit val wrapperCellEncoder: CellEncoder[Wrapper] = (w: Wrapper) => w.content
-// wrapperCellEncoder: CellEncoder[Wrapper] = repl.MdocSession$MdocApp$$anonfun$9@ab9f8e4
+// wrapperCellEncoder: CellEncoder[Wrapper] = repl.MdocSession$MdocApp$$anonfun$9@2228c0e7
or using contramap
on an existing encoder:
implicit val wrapperCellEncoder2: CellEncoder[Wrapper] = CellEncoder[String].contramap(_.content)
-// wrapperCellEncoder2: CellEncoder[Wrapper] = fs2.data.csv.CellEncoder$$anonfun$contramap$2@69dbbcab
+// wrapperCellEncoder2: CellEncoder[Wrapper] = fs2.data.csv.CellEncoder$$anonfun$contramap$2@3275ccf1
RowDecoder
& RowEncoder
RowDecoder
s can be used to decode an entire CSV row based on field positions. For instance if you want to decode the CSV data into shapeless HList
:
Lq$D-f@qqXVkmupA?v` z11s>mPHl%iJxPHG1qu}CA}2*oJ304~^CUUHlRHQ|*kI~lb);%nUFs(Fu#DL z`B?V%4&)w4?%&ZA1)rqQ+7vp6qW4kkd_9;yw3XV80)HoGrP;?1QQ&1=UtMKa`fA-! zT~#Hksa`;NwJpC!C#$QgWogGy6q~lX#y+_Y|DI@GI0Ka?PQ;22U4Y#`fdW&dpvD$# zfU_+HviaqF)K^d9f0vWfgn#oY^HIM-eMs&W 3Vq#r=eHD<(r)q|FEhc=cyxD~nkkozqKU!c%P3SCOk3`HNK*eHr! zVPOy0>d<+oAbJ)Nwno;1NuXSHswsi~PzSz9-WCvq&g8|eC)TAtuC3XIn+ zHMNx!CQh!JQ0FhlbUe>!>6uzgZd4EAKDxhAuvRzL -q^iq=gmaT}IwLpsIf(=Y0y6>xK!H z6H2#P{RH%9828{VJgAyz2KBa1O{lJ$SZzC(MYS5+x!JmTLhYpLi8Ym`>+0`#IH^R< z>L ctLfj` zt7xs}KezU(Zm6s6yP6v6CQY {{-H2RsD3{>i#JUcDjQeoiMRS4}o8sM~b? z D1&&m4-O-QD~ezV2e)GiCNn8$i2@Tsc@dcb98=IK9?)bO6MBV z`G!;~+mK7n2P44sPSjmv20U#_WmEZdL#nHoPZSz**~WBJN8Yckb=TPcT)U8JOD8&t zxmkYoZasTI?Un*lQF-Q#(TT)KdM%KxwN 7i=5-gIoYRbk(kX?Jx+or(@o8={?k z)EyK!nF6O#;7khKNP(Lv@FoR5rocDk{2;evgxqR!cLM81?(yU @J>--Ve36R-|><>Xb9H?giuJyf?!U8KF$BQcCJwYi!Gmhma|9WxO_C{Rv;L$J;i zIEw;bk#iw4mu`aG3(0+pT(E=hllujEE_nx_tv&E@9X!2GMbuHMNwug23cUr(@^5km zk+U8-bI9o?r&q4{*U0%dxkur>73jkeI)qzeIJnZi)IstRz759JC1)dYu&2PrT&lx7 z+uy36DX=pImg)%KSJUyv(fHhA9bLUeof^8Hs#FuyM76WpUF``LxX73ITG)pa$YTeS zGelT~W <=OY%C%dzgX&3J#}W0|l?9;0+XVDKwTs+fZmag$|<75fo~q zP&0)JI<|UC9_(n$Tm^WN32Lg^K^=zs^EeFs8W3y>R8gRo0^3tyM{vXx_?aA!oK46n zBWFu;KtINlQ%g=8IeBux9?c`?SaLKuSCez2aOQUiw{$<|DWwOkF2{(g)NblfFibsa zk-AlVps+GgX=^gMP2~2FyM(;u wY{zjp< zDD)nM-=oL|6xo6z<0$fPiu^{g+x1|+`>_rukuz8i0h1QR#7 p z0-hd 4RHs^~?xg_4l67Ti$Lir& z)Zhs4b2(j~sP+Y_3j9cvsBe_ZLVM~|BGH!4Gwr}|_d%8V5~JOisBcK78hu8;AyLma z3)2(tWQyFPlPE~oH`Dwp*V(Jr;`?x=J^4?XPeah~n2%x>Xe95tpb)C3bWHwxmu^nf zg9}bH6m9#FhbTH2eQB6491J-}l9NM!8X8jVMMFB&mgaY%U~jv~K~j**Cl^@SvZ=k5 z&j)ek@9dzPxI#zP=SgtQHzXPwOJo)AH>Xpb_I=DoR0ewh1-}8c<`)KYoqUcz>KeYN zL3(Xo7>?O&D5g6xgFT?;TjGA =x;Du#VvGA+}?0 zOP5EW^<;@ge}mSOsZ_?!_z28+GVT8=;2X)#M7BZO!N>IA)uX`8?L>hz7+L(m@t-bS zZAK)Ax%h)l?km?i2*lwOIEn(DaSH4~fqf`2n*tr&6}*OOTQlp^W ->O6DYKS??H#-3!(3yd|M2j>M(u@U8s)F+E*kJGRcgoQ!Z8HhHTpkP>d3Zcb91u& zK6U~&8b2&1n(R^l!Z3SKVX7OG^L?fxm1r!ca4O`Kcr*C-yo5j3 6?gsdG zYhu3Ls_pnhCe@Yj@AR#(*qJnr!=PSn 3Foa7Y@J}^*uR3bFQ3WJl;%h&O)IdL+y^ACWmYt?Ma<$4X@o`<%u6 &)ro!i}8D7 z3gE;iD9}uSzfj<6JRtX4?Vij+A-IQU0MC#!PM9WK*oQC=;M~ek74N9Ov*_fyf|Grw zJq8=DSC3Et_t7gLH*z2DB5!3OkO<$gklcUhAo{y5Us0ear&8d03Ood{x=i*2C Ke-d|5`1Wx8w1@`hs!D)UZcU|qBh6@^NJX2k+aG!5S zfg^ R^wcj;n>N-wauW`Gir}D>@7~VW_GH z%yg}~ojC%fBbc0Z)Mh#=kRx!(Z-q_W7NQ{q@1P)fmEo9iupGe_9qSg@2)t=4*rHL~ z?pSQegleb2F4Dt=6! J3Fhzz^q>3WjQRG01 zbk(iefWn{Y!2n1H4OiQ!3)R)k!}IwY1zv@mi}et6d &^;$A-AO5xe+DnH}|n9>zQB0!YKjL^j7nUW6 blh#n z?j&^_xeZ*my#%nO@FSD%F@2qHW)9~*@R9bIe0&XHhXMx*^RSEpK%-xvz~>;` lNVrh(>Ki*&= zq;SaI3Y+N`elRzkZSU}Tw&+JVzg(El&9U4fnn4>}n$LlQn=fyxv9_c=pPp~Iw~$UJ z^7UzOnp|eS^&6%kpIT|geXgOSp9;E)yKN@-9wUNi7h5`0+>KqDeD^&1PxpAh;VHM(hE(LzjVW#uPsa~~Ifo!frfiXHN zbGCxKS_+; #jl?hI6LWDe7en~C8&J_^adnltLp`aU z*6vBD^_+BlKXMKgjSH^k
XV$C~!Ly=+NqM0Fl*g>ID{N-ARHttYq2V3j(GC zZUs;b;3yzQfLmok26ttAH_%y5?!DwbPyyNNGWEW!{^mGSPW7egy3GRsvs712Y|0GeCr2S0A9~7cz9afgZYejQWYs zp!$YqGl0*N6OhG{cMjqOD5e^P=a#E)90)^UrNGncsta_W8^ZDKq7u^1(!Le=R`~iO z@WMaIImze+(mXxRmq3`c$FrAJFG=_6W#--iBT4T1 z}byAF_5vZ)jQRs&_g??hj zdnkG90V5)>m%Otn_znfXq);7&cB0TH6rMogZ7Ga<=39!sK(PZT_6WtEHT!!y(<|pq zJ%rC}Qk{TfhUFirhxVAc1YmHA9>xQX3vV-$oH1t8Z>UCLyB2coKE( =%#tI#6RxWdYw-VkooRLDY*YI?c!DU oPdst2xt5rcTVHC8>Ve#Bue6oCyo-IkqdXBI-(UT+;9O|d `;j}F+~o|bF{ZW&dD}xZ zr^CJW{PBklWl_^C)>te~1+VO2t6UbkxS^qo|DwP|bG#Jhs#r|5wHFtd*#q!DXc2gs zugZl*K1_%ZFv%rWd^<*W+82xj+?4K2Wt$ 5lw6JpjsYO z+Xp-0iwi)u@E~2^0jVgudSscZg`^PL9Sd+Ys&ry8pAb|GaNoTGdf}XAL}mlZ+d}RM zawR|zo&))syeBER4h1LZ*kUWc?kVWTLBhH=38XOBe3H8|U!;$IW5T2Ww8jnATPDcr z1^^0KCc|2zye(0*uu$L)QCS7*_29+v!65740GQr65ps5B{eCLZnMh~4 vOF=HQqKy;;TH!n~>QJ|8s{Y+wBV%{wNt8y|B zcG-S`uujzXSgtoDIz~YH F8-9P3{d9G1SY|a=ZOo)bo%& zt`+3_JaVDq{h7R*$%9U&hJrwB_oh&bP6C{3wTiI7csBeP)MM#4e{Lf;QGIToI%K zx&fbO;7X>vDG!-AX}N}@xzR#up*7|p%lY1IutWD`(J}9B)l-J?n?|ww&C8>};#Gi# zHgXeH6Rq0vGV|MLwU~L+Df~`1bQ^B^EuQjKYg_#AC*~4Y0X3+vPZ^a2aOf@7_TY;G zB4wQd*c@OAcM3?^Ma+*mdy~5nc@gcdkm^$a_ur&m6V*6KRym&`COjc Y8SbNUnchoGpN~u z91fP#OMz2F!~}huOx||n?L)y6DEKeKNN%GJR3}p4NeX<;5HxF*RR@3CJ)6947R^JC zQ0PSp1Gm1JqIDE|oMJDT3w398J~_MUA>Cq=@GJyvJ(Stpxav?hs7ERA8U?=K3!ZW5 z^)YW(^UjAr-YD!pzWKB4_d!^aR70Wz*G$kFq@?OojV$;G3qFy5HZiy+%MW5@s-3Hw z>r>5%&UByH{-Fh +#mJ-Y%*_gjv6j+ZdsHASf?>SI}St{;S z+ix|>#17UC^^FOuzymZ;pKh{}m0LxgCmZo`w3*I|I1yS|CUDHV $x*7(AZ2! zqHG1gste~eZ1Qy0V!oa|vg7O>JXKcG<4=JQ4P7`|*xMpwdIH$A@DmWr&?*0idoivs zoF04M#Q~eA>NB~9RyzreXfjvNDr@ctfS?b#LGKFk?xWx|%y|xXdcNIPDaZba{zHg0 zhZGtj5v#fB*JRGtu@`CDSiH0XRwH+&B?cE-F>DsPz~>%IEMLuvs^&zYJ7 #!nBZ0arL#H~C=fS23QTt}0|?IDcU zcce2(YxFfqWd*HKS5e>&If#J4_7&aFgCGeP$}klu;|)5< bD6T> z?FL2wCDWk^*k=5xRK7=0yW!C3{FB^T?JO%7B^E>OTUw-j2R5V&aPwbiZ!wgLiYMp+ za()wQvUkbbfV>I7b>eHQGQc`z6ug*%k5*7{8C2kmk_9iK;3Ev^q;;$PZa;l%U`w61 zrG;FZXkv?V+wHcN&e*M}%mfv?Ei+gvc5)Y+i!68|1y46CyqTKDc0xn=Mm*Gvw8&hd znTbPr&Wje02@Ej|-;U(1t-W5WI(Skp;5}K4G~@j+qM+ak zy!2*_ReM7$85nN`_HD^|gWT&3wLM)n;!uGzdH*>-v+(B~NTIlZ^J)iXIh=_MqlP2K z*z00ueuwZkj#RIR2D``LmRc z!~+~C$*QUdvVseFcM9N8zaLl44B|g3g!nlT>y|^?eho zd}Q1qVwyNkCTTZ7=W;W(i86FCKn`*N7XKnjaBRtu #m%$qm$oW$ID& z7(Upo&SBm4egdjM9-j@-EG`N%1@UD=RzAy=T!t=!Ihf0)LpbSe#$<@Qud{unMotl2 zUnUCdbKk>aGuVoz<}?`LLL+N!L^3Vvt_}ZCN0`#SN=%Ab=@?|Z)LA4T#PxFip2fxl za!c-La`z`UiA!2HL1mN@g=u&}84$Kdb&@qNR%;Xl!2!Z&If+f7&7KPWgH20g>SSgS zHf8+Wc||+ShkZ|hjf7FXkmsK-(|?JX )_3Bul%3xTYkpmeZw@wV_1Q-B96C-Cns}P`R4fBy~XIW{G9F##ix|A!P z%!U;Jal9$u;V3wpg2z+vBMN>^p%FT^L}cItRFU;lms8*#3Oph95vKt!*eFhs? KU{SL}ln=F _}RNLf3=%~ZWy5CZkF zF(Ve!kS{*f;Kti|(+LU1)igqg*3h+C5c7_-9MRt`#e(MNujD?Y2b~gUq}&zoyanV2 zAmQ =gx$_Nx2MUI>mrwDgFD})AMP=%1qkoKpxZqNEpb~OlgZ=@E$hg`GQcAgMgB}t< z5(KWYiVfln!H5Oo6zCeuR7G5s>li;=TOJMrmOYk&x0FFfq}YgZ3O~TQ#<)7eTt6G@ zp?K@`3bh&+Lz#N5LcOBFX%-twAo^6p_TOee^v?~5{x@Ajr2<4^hU-~&o@)>cgYxXI zTlsOSu`$(9oV8GBjvWxcy_22!F$NbYx5|WJh9fw`-h&(KOkX4EoHn?^YBQ0q==Q#c zg}K=VX8wdrY13V!`W|&;3!pdYHb% pE=!p<~7hr zZmgZ R^#q zPuAhpW5+_1SD_xpjrl}b5cGaL6o6Gg;U7?s@Fl07V)bfZO1UbpP__K-Mu0!sSPTL{ zuyNh0b=8-8IL^g!<*F;LSPu?7qHhJ{p5rg;uFd>XdtnLA)758t-)ER38mq32{ ryvi`#RBbP>>1I$Qih^W${EuU04mjuybb+S(xo zb}^M6`Ljwjex;(RG+uX&@oN @IMw}v88`Qd)uvz7f`LSD;u*qseQ zt+dx!IxwS8WUWE6sH*$sr(X^3pkHZMW{*4mSP7i8kw CB z)=#RxGe (ayu?~4mL@k76aVAI1nzk;-alBdA}EV47f+P1uoa`k-tA)Yo+9r} z^1h`YM2&;k?&D88lWa)x+4Q|N8d4=onq)&NlhLeD=8g_f0G3g7TscLzr0CWa6nU4T z>rr%lijJb_#uVL(qLsM#*Q3Z-ikwZ6t10q6MLw;oq)0&zUcKob^{v*}sT?}>%bCp% z^tX4aV1Fe~E>&QHotV=z1zS7|TGP`(iPPLo0Zp}$h55_&v(Pz3X0z jAC6AVs PnRHvaSmm44J%hDN=No$TS_{k6^>KBpx|1EgbYL}9>uqW^e|1Zy z7ECfBC%jb-3COvi0{Ud<1kq2NBwG88>L9Go!!B+yEUqTEo7~&WnW}nYgeN_(0-CVl z_{R)^Cz{0yzOevhNI=YDPpD%%Wo>xr9xDWlgStt~nfA1^lNMbT6bL7mnEJe0BKoT= zE0}|;DEtA1zo*E<6dg{n85BDVKv4J-C@N6*C^leX>*-%8@GCj%h;IEZ!yC5aHp!&H zmM#RJeW{pA-^3j|ot*QH@@o{NJV-a0v}pMayY~{V3GQ^Rkg_uNCR_zSeVz}}Pm+&Q zw^ae2XVInM*6L-MRboTP_)!Z Z>A9#4VAWP@r;UPx3mbP!^^30f) ziDmnK+F4X4zEqf!e_)}{<+`iEr$QUMpJluMp`$%xDYOHH4rW$$8i2>RSTUS$jLQn8 zhFM37bD!%dnGBx`rptetPk_;u!yzy8gk*B!6Bq}JkHKa-+Ok%HWYdRXKqk1jt)3A# zgTyA-b{KQs20e;VIF}iwdKV-6Tx?m8L54`(Ofh3>tjw`cqxq|CZ3*8KaR^Uno3ZU+ zYcjQ~O2{|ca@ig`{?{!jSYiOM(GcZNq{s;rSz>OJYpg$Nn2pMt>>L1d#5%h#^Xy_? z3v3zdiSDRgTwVfi$!FSG-!6M}5A!>nSp{la&N5YCIqS=X+s9IEh1DuI)(qdtCVo#l zOZ_jH^($9mWY|UCc q? zQ^$}~Yt@ts#C#Cg-4g~qnZ%NJ9qy8Hbqtg`W7*2*62<_$hQ3X zkD<^)NXh@E*zhvufp|o3Q1AxOqiZR8ImMQ-xe53BYYP8W4_;Evm>(P5JX0Ye zkJ_BwnD?-2270jqG>rf0h}Lqj9(F4GEsYhW?7jHLjd5|HxmAp6?hwnTJZ`_hrWCk_ zVOM7et_Wiskmu{k9C=i~!)%63s>>*Qu*4!YH}g?sG1mYlSZwbZv-r6JkQH`+9%O3n zXo~qbxt6dr<4%W|$u>)}p||6YWR2f|Y jiOcxsRxQVg} z9C?86zCGY#=>!yEZT{Iij?ZGYsl&Gs+*!T}$c4vil*Mu=vW2wIZ3X`>trXJC(hU)1 z(lBdH(Zc26d(ytqp*o4@naeu(I2wrLRznRAlX06zIVdhfIdZ)K$N-_g6bx`WxtHSN za;F%|GRdGS^9-u8pE>%6nf`UOEwHp=V=L=zV=)S$FW^|ySzmuW*!al)jb#?7I77xj zZO{_yAXulukm?U)Uf&r>!6rMtolH9^wy++wm?aC4;4dh;HbvPW#(9EOZ^MiWv#HsI zn#M5vZ~ReNS#}D$P-ew2h-`1qVhgv&jNn-FZa(MZ#qNbt(wWMp?e^M(A{X1Te8ISr zs;?{}e7XOixWJO(uf+i?rV8M6zOhT#!^@m&t;hdxBQG;{@;Kv{i9y`8;y-W;Ik&S7 zAhfMx7_bB%!gOvs0gR8r9PuF9^SNY)_+gZ+Qz0sK$sFK{$fr!)1hw3()oio$Be|3L ze2QN*Yjq3n9h5+__LcRFHDPmh_$(hUfU!Z@kYDe}ikj6~y~!ByXnSAm2tI~}Q~p2$ zv}2jL(0$1E8*IWcP5ywo?p!WLl=!n+{+ua)&c>e#G5W|uWy70OJ^?jA(TA=!kq)t1 z!1Vfc-g=!-&4QuA1v(AeYb*m1gTRN~i_P&R22zHx55>c0xYMXRx6v9dP2>5Kf`qU7 z#0$-)Oq8=+i&@BgqTruT=*&Pv5=Gp+%f{G2%W%z*&g20wq9qXS73yiDRjdRHF6?pv zmox8^b%h5|yQ>bnA^rl;f!j^lQQQAi`IO`IKYw2BKR**fLjUJk)~c9CEs)g<)(86- zFoA{6Ziwp1(dv2p|J&+qNb_STJRL`1tf(ONC<97=E)cM1)yur4ns{5rQWSf$Jh-mf z5CBM*I$J%(>W%Ly)LkKdYe%tF0>k>xi-{(f)zuVSLcyOXyf;O5r${r!wxw7L#qNkx z_(h8B!{FI=>L}H#Rxye(Uo0eyZuSwuGCmZ0Akbk@fnCL7em2->F)@6UA&ej(?guFJ z6ot>D@Gle@M3K=HnM9GDDUzk=REq9Nu^Ni)M6rV?_B2@dSS8c44hkMi;nM&xjQu0P zARn0x=a5q37sRATyK+oI>O@#6arK`q7(grDnt zzgJWFHkQwA7z!*NmdyCGaJRGAKK<)5Hppm_zwa;eyWxxQi>w9A^SqF}cz19IDlK6c z>VMiw(rtZ~+Pr5NK#<3c`CMBzB~Sq f z=n&-6n`$mSW9+F80U7DYvw8Fag9sGO#rd{u5@xT!Sc$28r}&~iZ3yo^SbGqzjuIi6 z#s!#%HXoKb*;G_I$qNIO;*zqEx?bH_uC5gg_@OEdxplKLXspKhvg_W0bS;uUOMD^r z49Kz2=$5N3#1-i8 P2@cbJJz&V`zBGL#n`?1s3Wp1_Y0*O7y3_+bcCGpsKikd89(<~$a^k`*o+Yab4+>)KHDjt3jQT)ea==%K4O zA1yX!{0AI``biX@5itu^KbJu{f1cQAhlR-ihjDuabQ_bnfmS3!#vOLg_4GGK 9?;T7vbb+RMd=7w2K2Ka*Q5H9!h@RI 7R#ffE=n zm7L{2UxE`<-`Lm}I3(H77YZbq> ESqgxm}eXRO{cP$WgxtYIUxeq%w@)1Q(mD_niIh0ca zEt4sH9EBHBcqK&-rf5CIT3IwS;fCarIYI83Q|02mLe%{Jg#)NQ@-ancQZy?UcSBrF zRo}6N>MHg-bPnRHFcK699dP|bifl`f{rjQ#A5e564|oTb)5HIw@Xr)+DY79&zz-xT zGKV7XP;^_0;>hhlvH28R$T#$O2LET*O`&KF<658MmfjgBh|kar{|xPq12k4#7(jPA zzzv92pzn5mwcIENL^EKd-nG^1KxIEsU$WK0)HOY#`3A@NZ;KC8FR9l+CfG)67vuFT zhPh_je c8>)F ?>`NlXhpu4IE)Uwx}xwOTyTrOdI zJvVk_GJSgBz!tjIylizB#%Z4yTIc@U!aZ<>|0JKv=OIm$8jEIiq5qQ-vTv@wk9FGj z8uxi4-dg*YUV>Z#$-1O85Hao`wnxtosNl09GLNmgbHGF6+>!262Gsv)g+8XjKRl&D znQEeV;AQwk{mcLUpIGt-PW9jGZ^F;-;pp9_=dAGz^WU%c>I*&le2chkI6@@$x|r z!{CHLUf0o0eXC{N@>z%6V|4H!sn!VA8*TJop(KTIieIPbEQ)?ev1TJ3-e#<{E&(IX zEefi^Hi8i678_m5N-H)hVu)P zz{Yg8*V5~;R%!60!2!ltr14I>5w4)f*CyuG^ XwEd6rh9AJeX)U)Z&AmjKIhiG-32HBO z7jKzi;-0)*f|h{D&&2I~s_<-|@?OH1Q~yzExtH$R^gmSjgOY70K67hS^;K=^mHwal zQ%zoBz^DFaeO|i%r~aVT3*eSFPc6n)3Lask+Le4l ag-HkQem5;pC1F9)HF>3(t z6#Nz-HHh1-b04{J!32aE|IKdt&rQ92x_+Tmc*GeqW=mSt$eaT19(P0b-4~hU3JW@| zFtW)p*7>5HB4x6 xS+9-L))1ZxJIZ}3~!>iz`o&YEh-DK>hN|B2XLzB z_>N><8~S9b%(89`H{-fCC8GTEi*Lm}V~W{gq%D fVP0o0)!x?9k*;m4uT5p^)43#M?FPTK z79J#{eLnQPw%} >=DW3uW^Z@(lpKIoE63X)`$2e&ilv zts%D{_edLeXk9y_^Mrv`2Xj1t@QxI@50_F7eT%NJmhBXLnvL7V$n!D^K1jj8QSb%c z*QZkOI?P0_K|GHan|o{}>$})yl64p(SrOwMWN(6LI W%w8S5Co8Dfpb2)U!9NBX%Q2#-Et8J%pUk$laLS+c+MW2i&ZMf-VJv6iiXDmxA|j z=N8-3R;1XMhCUX|#%)pafH}&>-3nX6_Fhc#wJ6xcu3rvrFF1()&r^9bHS%zo?xHoG zvQY?%M5SQN^m# H9^JLknswG_P3k?(YXi(UW}P?&t?VCf z@iOx6=! eO$!-%==Y2)}mA`urCjk*n#2V{`ZswI@^mQ!h{yY70NFcPxc^0k?Gj@`~v%M ziY@b>ydv(w@(xdcyo9f0a(VysY{+v0 >?x-fNK`5 zAxf3uL>@9sQ=Mg7j^&T}nlg6-ZlqXD`_X<|_}AQ00ARNI<{BOB-5m5SJ(9ShjksU| zu2J^cYj#&WhId%S LwtB>)l1)Yrc8wHA|WsFd5lrLeuVSX=j*S##Oi#>iU#j~3P3 ze7eDhMgz-q+7uL7)-dYPiEK?#pK8)J{>n+@eqy#F)Rn0wHWBmBkH(ZY^@T~Q!Sgf+ zlU>0_0=q#6dgJO+@l^P$0H+^;y2lk@{&OS@(5Dj1>eIOT4t&rUbzFt&jH@mlqPiol z?$)6taV#Wbp$l1Q-~jVHiJddqpXwPM22I#j{SB&i)M8U}h3d-
A1~Iy z-;sNR=yTqp;LQ~LokB|}dKJZ1LIR1iYLvqcLI?3Tb79VvU}2ERTFsDHz@D>Qj*S@@ z>a0036!jk(H}jo2%Uy=4;}OZ;{Le!YTmQcqQ?%m^@3-6r5dN=*!WH|CWvCxH4N_IQ zQ370 6`x z`>ZGdzb5y4h%HqvTQv%Hw}$>ea|H4eYm V}rPspN{+D <&%5RkjZ4tx*3^--~DS0zI^sLFu@9nj5>< zuEycmY8Yuh(@ebG#6_93Z`AQLs16DW1{*Wh*|xvpk}Mrgu|i3-zZL3Wkc0~MQXayw z7NRG`fo7w(>xpOJn-Vs&oo(pY(`^x?Dhcm?8hI~LaD56+2BilPR9~CuC9Dtqiak*% ze5E*}MCV{Lo+>^!FH88=J=j*q`&1aidnouYm?sJ!Na0x&8wtj86a}YH@JJ{-Il`iQ z8iih_&<7OW3{+DBP61H$IeP=zESA+aVL7z31jM??28N6#V7>WpyUPF*k5vyt6r03` z#2oWB3Z^_X5}n>vLRB$bTrFLX4KEY@ZTKZN!G^Xr@V>Fbrs$g$IJ<9%e(xc{`d_eG zzCT!JQ}hkd*fLuBEIFr9WSCg?R{N0er`+AW#c1SZmj0aO6h526-%=z(ks%bRpa>AA zxfJ=1qMK9nIf~tE6tQgM%`oo-hIu~+I8ruRpplT^A_9#Bx_~QHl$qd` #2dfVtcx_mr-eJwbR9+sa`Z(I%wIERBfrPwE-p>@=o`OfjMGh;9OC*G_3jpMc z9CjN^V0_9_c0$jy7uLB(=6I5?hGqs`*v-QDIb&E)n|qSGfEh`$^fTYaPcWZ3XwBBS zT0a m-)|ks%nO?2r-wftkNqs8+&ZjvtnlSALFj0Z@q|MKE38pSGl)-8oh%B2^=w^y; zXKI$r&8oO1{KjP&J(bf2NH}X~J3OoqGax{S))59|KR)@+UF3Yj@h^h=P-s62Wpzeg zp9{1+m+7>Eki4Y3D*8WKL;qo1-=G>`_c+@bNHASA@Exne$chb}>9NdBG1rhU1xMu( zF={mk8oJ06aSH8Y__ay6VZ~pFP0d0F;2A}p;m0hqY(tT5irmA?BXV*nejMIzlrk{y zV$Oq|bEL87Ig>4?VrGV0Or3 &HkEU*J3HLK$d^8u^JQ{)f4~6xCyfi5-S->vKK4VbNDs@sdir|j9U})^FX=^?b_GN z`dJl3Rx(2=$F<5ox=n;pj>yI{R!k>KnA%RLQnItG$J}+K3vGPbhjL)Ay}0xstcoeM zlT~FR`t!5BFsCxr!ES2-d=^%o?Q{77-|1!zjp^ zaRH8&mKk8~`M3qVZl~Z=40W{Xu3D*Hu!j+Xd@+Yz4w%=LuueWv5Q3b}8WNiD;a~S| znHfHx=DvB{V)DbWqMdAm-czoQ5gX%9tVd_Du!eRsVzBP|RF}UtN8^BYCED6EON?AU z3Q(qj&-deaJ_1s 2kqbYs<04BZz-|cMs zvzJ@ghGCcumD9D=z;{fa{_HhzcQCK*$cw?o*y3lzLW8pw_ycS6Beveo_j)K8*%!;y zIjGRfk(K$KOh>`u39M*8#bPm&_?aGu>8R;^9*}f9#2oRC3 zcHB&b1(szBNeJq74C^sVr7W@Dg94hr0j`cC*NZ|iOKy=f0g2eo0k`(2&><8$l0x+q zd7L6oQ{)ATyh_o7DEfDbC5;aBN%fo<$JFu!6!Qs-(H(;AZvB#s*!L)R&4$}|B}C-r zI?<>ln5lYCeXM>I dJO9*0^9JSG{4SR>tQZ=u^v49`y`e&JrS&X-8!k*LJ$*_I<~vDMQ&8%H+B z(k8FtotB+EoIOM&8hYqD3f)R!2oyh1^kvKcWprbo0z5AI@5V$XldjJ!Wu=Y!S2>5= zSf2u5K(Eq)6&!XkaA3LGS?$W!nTLqM%U%_#JkHRxv$#*bE>}G=-Y>DN<>ZY6PP+xi zFi;1StApdbHABmMR}T}0rCiOiA)%Z~2^BICYDgwzb1GB~Xm$+p-grIej6R{6T&N(v zrO*jtz_Wlo&)h48Xum?iYbf|5g%(isJc=!fs|UoCc`>AGFk^R0G*qA*PsE`gOR^ug ze^>v7oT+y5_c1ujshnuX-ILr$t%eMmy vpPD3S@Y@m_7zokE 8xtK3>H0ocr<334 zWDjub-d&5`o-AdVt8Ywco0`mIbOII&E-r7aMkiX{Wfx0%wi4D8=x$@GqbZ#zaV(pm z8>u-qOvG&Sp^<33QTyqH!hll%wu_ Jvq&|g>(gLd|lv(3Y6EcB4sJ6l$npC0o9$*rxs#Pua>=ZQ>Wa|cX3vR>5 z*+;2T#K6fC<@j6)u=J@!mRnaK;3NHDym{Ya;SMp1dYV0tfIvDwksBp 509NV08_xvoa4(9Fr zopx7m6<2fBvFZf1L@igV)GO+9^@aM98PVb5**Ze@?nnuBa >0R-$g zHiqMben)YhMz5K?9C>+32f~PgL!xTjSW?h@Pi}^j{{V{?2Ql#x!yh0u*9&g_9=TJ1 zTpDfpP>K4py{H$Bz1{iZ8TEt287k=DNx-og%ZN)#oXypEC@{BC+o@@4H?U^U0>RRQ zR&gv{U`ZLKg%45ac?!Kv;o%epQdLWlF%&t4B6m`BM~dxjIhfIU*rK@PAUfZoANz`_ z!D-m9Vrt1=v7FZo`{*_G57`Yn>Ht&hYV3m>F#CNAos;!_oR`&&0*YjdW-MAWmg`J) zzbw}*`D)cOCBYgF)#W{%y>(` z{bd3-ZI10S4IAZrb&c69U0a&&bNsASA!YndMKh78&!nuPB3I1MZSqa1)Nvq!{0<-q zEg_=i+>Dg-ah&D4cq4&`akWB?Z+bNdq!yg{LhURXBNp$SWwKdvhAWRQ;&dYT1B`Ng z{Ndf}=|RiN)m $$hj^kdeBOve|%y0+w zP+amCs0-rk4C=8(o*srf@(uMyoGqp>f|pSEfFZ4OxbI+O)42s!H_1&J{T;t hGuhlv@gKc`3+kaLLCLV36W6R3e z&|QwH@pR@C6zuE_jZ@$qgNH=yMY&jpCC)?QjqC%2?^=NH5ZyJ#RQR8v8S~cGxR<4J zJ~78{DQfS$A9ag)W-e{PG~eKxEX$K=VikD2b+Snlc0SZZkvDl0W|QU>(V>`9u9osW zzRr?X(tYaOwEScpuMeN}aFsmA-F9r4L!+XcEEx-Ilw~vGz4f3Kf|-Y>gTTIoE%!c% zEUWeb1G{rMc}6$^ddfI7uIn^#K!ZySw$QC{y;NuM!!94HsX>=Bi6%Cg#Hw-pX{X(~ z65a$T5ThN%)i%&W7*zr3Khc;$runTxUO*qSMfsU6o|8|P%y;Hk;bxS4$T}LTEhJD( zY&Q0ETw(Q}!;Z&OQ9#Kym$HUNR)fj@&0wN3xkSmkZZx f#eSq)e z*qF`Y9gX;v$<0}6gl(`T6%yrBHIg$}FwkQJzIeri{C-(7)|k)~!%bH=miZrUt-g+B zSs=8ty|;d{77!a5baxylN*Zpwd>a6Ot^{k(i9pK1Rv#g$6;9KE#S%2`IJJ=V7;YW8 zJ4$HJLrf%J*8JcQ0&&@$+<&t}tt)ZupOEWp6HcGQV$mP~no!ER8*$E4uadkbiGR;# zmS2b`#X+pV<=|^-JINeTZ;*%zn?h_l1-~~jcv~fT#+#gQiGipip`F=^^98Bn)$Qst zP8`!9
Ik(E`QVDE5^eypo+(4#q8XrMg?a&r$w{3%LRn zT`e&N4&bn-Ll*PIj>5#A$&qwwOi*n-OopV6F+MNOP&S$yzDP2B?}3~45Op-3cJLO- zw{;tE9Kt|@O)s*F#X__BueIAY%o`}*#!i$W8(hFVu%{~ajHHVhypGyb-Hc1WZWY#; z;g~3{zl IrcEenO$H=bf;ymSK3;?pj-J|+j0|qZ)bIixR HXs|=e{^;yg9%O5z@X`S;Ubyk&s!T@~_xJ8nHBi~GwH25L >(P-Zb>nCx* zy4kp38HJ ioF+U7#s=+3Ge&RFTwaFUwz<{Ka z647B`)fGC|uV! 2J1_;OvEVm7+ zr0yK}U|@7dTt@vH6y>9oL#O1I7dnlTFrNt1i)`O?7CL8H7h*XpW;N&NuJL^p`djv! zL|LU+3e}u|yrH47$~R%F?(1%$v%d$B523!=H_$?-q!?ac&1(77N+mm0d7WRQW}3qS zNeA!k{~7ztrY9aO$fnKppy&LdS~D}avwW|E%XHW7f2fi+4)q!1Fp%u;MB$I$hGDS9 zHB}Q5^;OBqeyjWIu08%gXtjTKa18qIx@+(Md#fGUM1JlX4c8_nO{lMItn~Xk LyPp4I7Bz|C?57YwAl0z*#!{Z#HIsmwY=+J3^KoQh7ivsR@lX z7d`u|>#hy|&}b>Ow{b{R=bGFQawR%R=&AbNu#Rg```I&XV%qW5s|$VAK&3M5hG7-l z3c9GNeNP3ZU}VCymPxeLClgh*m6In|c2%1HtE;S;)L2zlTUni`s`H~zGQ)UGiEuGx z?G@$|42;}eA-S`HR< w?q2Z;y_3RKbMVr^?>PXnLW!Q_a6`VLd$G}Lij-cjSOw|f9&u7RH5Ck zo61+EDobA6ESBx4ySDh>- eplWBdLt}bnBu7Q1+&Q{Ix<7XC1ALfT0#m2hQ zqhm`9Q&(GNfrxF8KZMt{3`w%oHPpcTM~wDInBur$ibn!*D^*G6e2b;vywd(R<+H3& zLtSaQQ7#I0Z61s^pKLD8w*Q omn(H!hjLcj6PmxQ{ea}1;6e}3GroE7xfx07t+lU`t6dP62O zohuZRC36DxmW;~A8gEaxr~Gd~CK5@4%k0Hc3#_bA?fc3PHOL&d>94MB^Bssf9U1h> z0E3IkeNV8nz!pB%XN*6Vvhl|vJ#1-Q6lG$a&c;Q%T8Q-r7Sg{3Y>CEZi8 vN1c*{{K-7ZN0Bl6cBpO77F-{)7o}*Rk@_eKuh0hQR-9=(Ri9ylj{*SDV>p z(hY38&2d2c888f5D6)K+FT4L=MRnr=KD6#~N1QeDa(_2K+tG`OfYQ!b7qC8W3BJWz zHDJCJ?xwJ$1liK^Z6ULR4zTn258aF=ME~I%?q+OJzd%Owbee5r*lW2|ty`)Uo74GH z(K3v`IngLuY-_XFRb@+jKLiM?$>wxAX>1#-YVw7K%)E)M9rfv4zhv+Rif?L4XX?d% z*qBBP#dy pd57Wk$*>}F}wcF!BdpO4fnF2zTtB{x=FW~J=u0D}r zX}wI+5R{oL1Z9$hpv>eTD3cTfW$HCu-<0!%sZZrxJPl2`l#Q5hkot*#mT>G^OAcQ} zkMfCjKdbL}3@4xHgb?ogq3lV{Or31Xr{-b;7uhI*aY-Bd2{%xWPU7LDI^T(qALuqy zW@8WfeuVrgzSkjcue|r1-8C+bq|c?Dqm#{vj0DV&Gknp)zuNOD2_+e}>C8}tox#mU zFBA8=TAkv;w4VgD+#&!&OgYm)n_==XJM1>>K8|~d@w^xpSA?hJv_){zE7Wtme{=Gx zVXxWP+fudXbSpn#u3n;G4mQ*e!ze7Y2X~_3Sg&JGdf_rYG`XxEmt5v2o1ixC7&b(V z%%s>v1K5n_%<4l86p1l*rYy!kpTnCvq8Jz}1|V0FyEnN<*pKaMK6ama(&WziUeejb z?KT+0NTbBNd!23RB*d9Jiqj1R&!OPw6sn@oJrsJEBD+%TL$g&tjJGvix|o@);Ra$# zvW#E?4XZ=Vryl3f2#~R){j)g0qC}w|7=nHdMgLX)U;A!Ezvk81go0BkI7>GgxrD>p z&lxTFBJ@R}JcSkly|qz!EZX=51+NsFo~-;ifx Y&A6u81UV)&mlaxD8iI2l4qMlqw4pu^9=q%vO7_9o(Q&JBBH2z)^J++ee4F!i# z5MRT3wNY@nc(uMq!GBQj3ksD}Xd;D*6uObZBPe`0g)gG;r4)XO!mm+e21O2~NP;5m z6kSQtA1OALVv{H~m16e+WDjENE-HocsW8!eOh(;;nReOvg@N&6LIvIk8Q*KYlYeEc zOsE?8S3c!O(>cU)8kIPOps2nv-vKx)9FjJ)aI9*nU;{npgE$kraIfUE8pp{#P^Zy% z8Cw_40@uSE94p#JEQ?D*&{5<(&-Vzs5qGi?otvwhp^nAI!3!o#HYV?699j7-qOc$0 z?qr?jQYizB$p_4Dl6i}7BoJT!hF7hRmL-SfCK!>88`N7)(aRZb+n1szQxp @{|Ie}V$smm!Thr=C017; zehtmJIg2dEzqu7u$C2k+A@XxeMps(TmwgNwOd0xBA$Q48OcEfGPHn$1%se~{A1W5x zjfVqU0q!ZB!wLzE_FfsV=UphYD}|1%V66N_ae0ezqydhKu?%a5m)V4cQzb7lfchUQ zb&cd&bMSvPxqK5i>#E6<>%b(YIB^c%TWBU@;HNQWb5HZNok%aRR+u0jGfYfI_dYS| zzL!D=Q?!Gk3n-Se{K}0wl}@y_=PXCDudYugdktG9Nqab`a^TrX*m_x2(u#I=D z840H96x}TEh_(4zCOESPwRm78{`ng>-(`cz2VR3>8NA3*67W_`MrW~IiMN8SujS9K z@(1U4kGRCVcZCyNUzEP1pujB` fI&MSN<+>>oi$G?c3^_H?;d$F#Y4MdNV{D{}HwvMZ> zCD|92lKX-7P7)WU&m?V8rHp%_H1Z6G*yn9LR?LC-5yO>Z*cwrC)qXAJPD`2L4%|g< zg}vdA5Ss*vcrYK=xw(vABBw_WI<-t(C!?~1Mu@C43ffOFeH7Z7LRV3ED1|qr@Hh%T zN|EIhxt^laDOP2v%&DRm5 ZJX{)Hx5Xck}ilRs87P?=uE!~enik{3wCQ$ zmhp+O@tLkqw^+Ism|&05wz@IhmS{@*=``Ivxu7kTO#AWo$8thal(m ^EYs*$iMyjfX#;Eg*M> zSd)q2()KbP1&O|XHwFI58;Y|wE-_ZW7fHP3^~f7pV%HaeU6;ty6uf|fcT?~o3O?cU z?}L_!o!blKTtcC(D3qqiTNE8ZQ7}UXQ1ms5CG=pnWc!PHLH#P>j<%OIkyFlRlJla* z)g1#Q0iGi0pjPR%Sc`t8x<*~6ZcsO=Thwi+88}7q;Z>+DRa~8+K2e{kFW3Zb3$Yd7 zM=UMNC7{EFoSV~mQ#-39-T2OGx|$)DcR5ZbANW{KTUK&~gHK%`K7FH&MM?&W&~|7= zKjPFqVnR1t71X61jl{i*bCd=plQ9QfycvpcHWL{wdp}|FFeg-lN--c1W->n({oPz` z!7?Y-U~?Vm5o5^-&{R$~7lC=cl`yvVQD{9$?PS{TQSXcK#Be=`XYzCawP&ewC}eJ$ z-6(QDMfaoVD<(N#QFW@ns{2ICd kZ*NA!d`s7s@(+N_0vHedCIlGDP z;M(N=AbBc>sl!xSUCnl iYx|8ocn7dQrBKmSU>_bC*l&;;Y+ z{)qU;Pmv_=5Rp!+Q|qYlYJYVETleRM@LeE@5bh^uKXMu&*l>bRj(P<4`+f>PN3jDb z_N3K19whVgjvm4xcMlbv>fzi{y+9a?jGlXpn#SqzR!LIrpgIX>>{gQ)QjG2YjiW8% z&pJ3y*@jF<(sz#g#o~9L*arnav{;U 89muOHnjuc+7DGfd(ZyH3S z)fF6beU5$hpQ4bj*7-GR^oujz1sa%58uL8x$xG1UE8K^fGErFxcyS;5%DOk|Fej3q zMuCOK(u?i>B&@&Oahzy$Avu?0>e%8+?v>EyxGq4wQLn@tykhU>86bN2ScY7-+;bZ( z#-gM;CxQ=Hf!tKT+LG}U^PeI!e8e>yQzfPJ=G-BpmkApQBgKQ_fG7(G1bvUQC3vem zOJt1UqM3^fzX5!!*E(kW#^>I#;ZTfW)W&SvXRdpLH?l|m>9~X~-n5*XXzwVlG`=i& zK3&aJ&FXITqVZ)ZS3CE`pA}nr-2HEhVFssN5nmS0*Q53T5&M7wBec6h;zVE@HmeSH zak*G7kWWOx0I}mWauXH|+7tJ^gpF87jZzc9PzXH~)8wNhf$dkIekNGN6b0mHp@fT2 z8{xR@z=2Si1Au%v9a8g#V?+=y`MpH{#UeHUk1ff&iJ~8ItaOf&0$AcAv5bFE?9rMf z1nOc6J*@}h4qPr) MBM-a$ m(69nzYYNz= z)nG?ZsE+i@7%EToIY{;?0-+S@qCcx;6(0eUOSV<2__;y@)+oMBO4rQ4_BHq+zubRT z%=P8vjQ)%JT1aIJ#&UKH01O^tp~!t7&P+#~hlk(U1{1$VZEnme3+h<4h^>%0C-n~G z&LsCJ T`dAcz!q7(`lAZtYu%bh-uvzP3}s;9}K$) znth!fw4w~q30FOgyp6~^kAj~9k)+Tx3VlgoV6|^k 4SZ9TCU8m^PaS6428b!~i=*JWb zQ|t)I!bOqCD0( >ffL;# z0ezn0^e@gm pr`G6@?G1UaXVp)Ya@y!xy&2iGF%f(nP)`nM+bGLov4m+K1 z^R~vTzGb*^MEk=_jZ(=5FNj%kKLR{GXMY*!oF93DuN^5aq41Gsq|<{EK|P;=QY6qxDCwyjI{mj5Dmvn zb`8-j(s}_O6i>D|t1L2oWq!6KF6OFjiLSnUrD}hOr_eJjw*Iv1G0V-_e;TaIw8H^~ zLIyhtFO+NL0(A)|)B~n(aG2|j7%@XFR4aK-pjQh+yuk*&i=un;fI5wsGeb=JR0?-c zuQ<_MYbIzLnKNUsBF6i`fI{+jSpJU6--G1uA@Vm4xmfG@HVB94&~ov~q`>16t}E~) zhoCn(( 8>&My%HtQ z=Cam~FqH(Oo#6dyYCp~!s#8K^3^R#?pwL+=;Q{Z|fhDX9>z9QPxB52_`^Na5HKHN2 zc?WUaI<&h4cREyM<*LmjIDL&oDbaWMa +N2 a+QoQ r@C5#4&EvB@ n}y5 zTwDATHy8Y8n&iuwAuQBE5{xY)S$t0b=g9=t-H%)-@m3ne4Eu`~Mfh4NiLtH{&xLy> zI>b6c+K&WuWCGG{u4=_b{!HN;uay99WgNIGY>b1Vt0!;!`Cv@e3w5@p^)m)b-0y z{HC9zcq2bgv2k)Zt6#R_-TZ{bi~O9$Pp}lo@w)nFE |68i(CJUQs9c4i9{}wOJNLd|V ziwZ3!=`XwON~Dr;W KH;5J%J@>j4Ye4lMh= z7W96Np*KFKe9JE8@E7h1xp=k_H)ib3x$H{Gkv^e*n;?u;0|yKQ_~V_yuW`Z$k&w2O zd25jiphvu+|0a&izlhi~M1ZDk1kc!CAQs3T$Lruyo1(Q+j$na1!Kd&q;<5w6^;cnE z*mGf=WQE^O)M%fZXiw1OxzH|t0Ci_vZBLP(Q4{~!fg*=f vhAJb^ceAr4<{y2(3fNMgyQTB6#N`8JyP9=E%ub0zc7-}i zRI|I2%drRD%`D5bP#f!}VlHp2po}=qtwD;iPkd7~PA1*po1Njqg0A+pi>thds*Qfm ziHCK9kHX2;Qx%l|A+Yuw(mFJZLPVhih0dbTB@{iLq6;Z@B*lspJC0)KQtUDlmy@Z_ za&g?bPbXUv?D;4WFxYAMJ@PIk57_N!-C*Lh^l(@j8>zF3>vtwhjt4B2I7lwFVGb&F z6F)4b{mheil4?ojJDW=CqSltIB*3yhn|$zolMs6`G@NT@?W=I>Pm51cSjfrk6b$P6 zmf70oTJ7@~vdoD3G|suv?os!1EROL4^+EA8tF8Hub_Y_en%T&GS&7*%{m zJcPT+-IlGe#`Bk))iuI7{voB8=!`n~ruW7`aIFx)F)vPuhADdx{oazj21lw|0F