From 9f260c38215cadb7a07a79d4560e2581548ccc66 Mon Sep 17 00:00:00 2001 From: Mann Patel <130435633+Patel-Mann@users.noreply.github.com> Date: Wed, 27 Aug 2025 17:54:45 -0600 Subject: [PATCH] updated for using .env --- README.MD | 6 +++--- app/go.mod | 2 ++ app/go.sum | 2 ++ app/internal/handlers/login.go | 16 ++++++++++++++-- app/internal/models/db.go | 24 ++++++++++++++++++++---- app/internal/models/token.go | 2 -- app/internal/templates/layout.html | 25 ++++++++++--------------- app/internal/utils/render.go | 19 +++++++++++++++++-- app/main.go | 17 ++++++++++++++--- app/tmp/build-errors.log | 2 +- app/tmp/main | Bin 13232480 -> 13244560 bytes 11 files changed, 83 insertions(+), 32 deletions(-) diff --git a/README.MD b/README.MD index 4eb08d0..f8204c9 100644 --- a/README.MD +++ b/README.MD @@ -19,7 +19,7 @@ ## APPOINTMENT -````sql +```sql create table user_addresses ( user_id integer not null @@ -34,5 +34,5 @@ create table user_addresses created_at timestamp default now(), updated_at timestamp default now(), primary key (user_id, address_line1, postal_code) -);``` -```` +); +``` diff --git a/app/go.mod b/app/go.mod index f0122ff..144bad7 100644 --- a/app/go.mod +++ b/app/go.mod @@ -7,3 +7,5 @@ require ( github.com/lib/pq v1.10.9 golang.org/x/crypto v0.41.0 ) + +require github.com/joho/godotenv v1.5.1 // indirect diff --git a/app/go.sum b/app/go.sum index 0444594..2073630 100644 --- a/app/go.sum +++ b/app/go.sum @@ -1,5 +1,7 @@ github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= diff --git a/app/internal/handlers/login.go b/app/internal/handlers/login.go index e8de9e4..ab460e2 100644 --- a/app/internal/handlers/login.go +++ b/app/internal/handlers/login.go @@ -4,18 +4,18 @@ import ( "database/sql" "log" "net/http" + "os" "strconv" "time" "github.com/golang-jwt/jwt/v5" + "github.com/joho/godotenv" "golang.org/x/crypto/bcrypt" "github.com/patel-mann/poll-system/app/internal/models" "github.com/patel-mann/poll-system/app/internal/utils" ) -var jwtKey = []byte("your-secret-key") //TODO: Move to env/config - // Helper function to get redirect URL based on role func getDefaultRedirectURL(role int) string { switch role { @@ -49,6 +49,18 @@ func renderRegisterError(w http.ResponseWriter, errorMsg string) { // Helper function to create and sign JWT token func createJWTToken(userID, role int) (string, time.Time, error) { + + err := godotenv.Load() // or specify path: godotenv.Load("/path/to/.env") + if err != nil { + log.Fatalf("Error loading .env file: %v", err) + } + + // Get individual components from environment variables + jwtSecret := os.Getenv("JWT_SECRET") + + var jwtKey = []byte(jwtSecret) //TODO: Move to env/config + + expirationTime := time.Now().Add(12 * time.Hour) claims := &models.Claims{ UserID: userID, diff --git a/app/internal/models/db.go b/app/internal/models/db.go index e1fc40a..2b6060e 100644 --- a/app/internal/models/db.go +++ b/app/internal/models/db.go @@ -4,24 +4,40 @@ import ( "database/sql" "fmt" "log" + "os" + "github.com/joho/godotenv" _ "github.com/lib/pq" ) var DB *sql.DB func InitDB() { - var err error + // Load .env file + err := godotenv.Load() // or specify path: godotenv.Load("/path/to/.env") + if err != nil { + log.Fatalf("Error loading .env file: %v", err) + } - // Example DSN format for PostgreSQL: - // "postgres://username:password@host:port/dbname?sslmode=disable" - dsn := "postgres://mannpatel:Admin@localhost:5432/poll_database?sslmode=disable" + // Get individual components from environment variables + host := os.Getenv("DB_HOST") + port := os.Getenv("DB_PORT") + user := os.Getenv("DB_USER") + password := os.Getenv("DB_PASSWORD") + dbname := os.Getenv("DB_NAME") + sslmode := os.Getenv("DB_SSLMODE") // optional, default "disable" + // Build connection string + dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=%s", + host, port, user, password, dbname, sslmode) + + // Connect to DB DB, err = sql.Open("postgres", dsn) if err != nil { log.Fatalf("Failed to connect to DB: %v", err) } + // Test connection err = DB.Ping() if err != nil { log.Fatalf("Failed to ping DB: %v", err) diff --git a/app/internal/models/token.go b/app/internal/models/token.go index 6a66b13..7fe780c 100644 --- a/app/internal/models/token.go +++ b/app/internal/models/token.go @@ -5,8 +5,6 @@ import ( "net/http" ) -var jwtKey = []byte("your-secret-key") //TODO: Move to env/config - func GetCurrentUserID(w http.ResponseWriter, r *http.Request)(int){ currentUserID := r.Context().Value("user_id").(int) return currentUserID diff --git a/app/internal/templates/layout.html b/app/internal/templates/layout.html index 9ba4cd3..7dca51c 100644 --- a/app/internal/templates/layout.html +++ b/app/internal/templates/layout.html @@ -32,6 +32,9 @@
W`;T~PJA?%J#SO!9Sb6{M Cdm1C*)(^v=Tzt1XbSR1U+rsujY-=dx>^3zh zeaDU&Fwv~b7oMe^k0H!-e<=A%S*(~tb!nLC%{=MYG(>6pE7*jz(dltYbpqsoQAisb z(_J8PYxOgbomozgVl(ncH~K0KOT&o@+F}?PEW8V(D~4gLBP-~UVOS*{D(KT;#9i4V z3}KrJ1eAS-ll{&ychIZG45}v%G||nnKk3uqB-ril=h 7;WI2rs6fdX8X|k82O_-oD z$LQ7(#LxTA7a)2vK7;~!b#jox^ZDx3dn jOLy C3b1ILP3 z!4*;pR-i(uhBNItk~Fd@V{v>YX&UnZ+a`8FfUX}&(uF6}sn<8;xnRAN+K+-JhSaC? zM`3o2$)(Rmk$aJEP69uK 9{duO3>YZP5sp2I26dWFCc?mgOFMvLq?Vo?WxmPusUxM%^OQb3u&|H z`>~{ja8IOR (5bSvinCxAwXeDf+bZwus&@#p15g>UbR*r_{1^` zRPVfK*YU*Pb<_S?3I};0G`VRA3&Hw-oJ0-d5q&G2M9+_hRa`L%^B#ZL@-CW0{~b^2 zX!oz5g=2%JLUh&_GEoRSh1csI?W0X65MS4gwm2iaGm2n5;NG-DHN9%zBsv0RLfZ^F zcLM2>**pV*xgX$CdD|hexKOtnQ-%FyLI-T}uzq71lDB^as)lXgeRM_pQr%5lMye;q z5tm$fMhZ6D+QAdqs;};cuf06Bc= M- zPIph61U@30X`0Fzg#2_di I{58th(0;WHnMg$irMXo+AhW?J~L7$F-)iBmbb5 K#k$Zmy{>6i)Wnh0EgQSaerdF0Hu*tF|3DvQ!_XW} zql0otLm_DsU64ck{DO;TDPlCcT0yU2@^#r2SV` 88g2bXDE{!l72)g2H2%M=tMp9~S= zQt9n{2<+S%>S!Q-{+qV_e}QFy#TfnjOAo;3>9xh(3?z`?q~+VWq@nHIfiV5p?<8sH z_PKDO)OHj GZ66%q zMD-j10Qt2$gi{e%E%%mo)}S2=5ttfcO}{N9odxj;JyS^Hh06n}>jKiL;nIz;MMYQ@ z<&bk$)OrTO4)WCNkcy9(w-U@C(p{nYegIvtfM|tXkLkt*q(Mjr6Q#C2r(9yBB;M>f zE6RN!hDww39qMOA*$$-2g=Dj^rJQbC2p=`LoHi8^v?z0;*&?ZJWqBAkU@l4Y7ZK7e zd_>QSBvwdxM4cCrrXGLwfI-UrEqxreaw*+sVQP)HMzVc(n!1P#QI}rBybDJ&(rCSk zzSt@_lZW))B67ZQJcj#aTaAN@%}b3#zw6d7HN6hM)bzXYQq%hkaE#w(D%B &>S37K4HC+0=3g>8o6RA9&wbxzcZ!kSHPW0o}8NtP%$Gr2QyXb6rn5gCaj>HQi51 zM*W41&4?=*-uyDqG(1UeSJ_KF2(qz_L@yTO#zs@SY8CCj6xuX%6`j76csN;hVQaUe zPA{;}f@W`1=*Fcay4#=K8Q>*sSaFZA0=5Zv4&@~*7p9P%672wmlys${qWn)h1%*No zwV5Dlf&dx6vPefT%dn9%S{ GMgNOoU4s{Eb|vaOTC)YV0r|AmhEo-}YI?1b2OTg^8s>Q*xS`Fj#!F$qgD zjak;p4L{9fRc!SGxvmm6cci!1U}_vKqfTovms 8;p74mvN7 zX|dBba)Ah&S{2{fPCDYn>v$Scgm!U_rgITcle*CnMI^}G#ux3&&Jq?CY554QN}IdT zO+|>oz0Rc{ib&7KOWB@>?@(@i4FdccNJP0xu@`JdOY@PcV(s|OpzKs}_D<5vLhw6E z|JqHwJyzG_;iyBQ?8iu=m{p&48~&ddN}cyW*bc{Nr#+-mbk }ZQJA=f(Dn;a zFjkmN*kBWbdet$#Vou&R7%)B`x-jZre&y +NKM&yWuo#EQa&VD`>?2c!E{EvP`$%BF`ePua<7e?A zJ){)QZcpmM`9(sWj7Ix5j3Vb8wkWt_ma5rxik;kr7IJ!+C#PuBrAq){QW|e*;u2+R z+HgM!w0U%hNvv7@Bed^+l34T2E#514H&dT;QhA1z8$Gli(_?BWy|bTm5S$Lt1_v;g zI|R_42M|M_GK%INKp4EmD0<=m4oO ~@Ba;YeC;%3QlLs{MSnR+ zeAO5JF-cd-IY4h5ghv~6kh+%Qc;@2)8e0lZ=ef|)r8or`e2(UqlG?SO*rJOpaw6sS zH& $(w0S-eIexu#nf<|^iY>vGu4;I7SpH4NnLxlJy0Kz!RR-0-a~7jfPHHI 2kwFr24vPQi}1*lApw z3lqX@X@}GBJhnBavrpsHDYh|vbsF~SuQ1yC45WEw2hBS}`Uv0dpm)!ZG{I>HO*~7c z39lXK>9gQ*rbr*L?|yHn?KynMh&1>d32JOR9&!#vujT%hCG&Y4l!l)0RqZq~su*_Z z#x@Ew5;<^>CuEl~26F4FLA)MzR 4}}yr4hSbyt1R*qEECBekYq*KQPdZe(s2xg z66qtt>ipFb?Klt^e`hBRNyKBmvdE*p=ZT*(5{bC;BrwyH6%=TH9ym)8hfPFVy!bP| zG_CMq5;kw}TrGG#?>9TE5> zkh9dx#EW_}@{O;gtYlz%?^Wz89_q*bo@c^vUVAUC%fy1C_g>FQ)En@X9hGGSdwAB= zu}tI}JC@EUaSJ7YhFu_D5mTqOQ5 3qr5p7y8~=34dQ^# z=)P_?oqd4>$HM5L*DC@P*vKGG5LY`|agd)?I5P~Kx3OP~<=0lW`=Ez~=`zrpGmJ9^ z)MPe2bdmVPXEC}0)!o|F@M>UjIv5O2q|I++JWj{1!NfB>BiuYQT!0a7vJ5x9I@|~i z-~t(3oDq)GF}T~_m2h> TqS90LSA(Esb!Tj=^1H6Peu(OJ*0cJk5Z6a%BE=GN5gBz BdKPVZ8Dd+-Zk1PR?vHyRHXd9XZp4W;iOsSKPJ$UHW|quWxXf0|>Tq^j zOrt=IaGZ{@^<&M-QMh};#MbSZH0BoZqQ1Wqo4Cuhs`2)0kBPTsFXTRkns^K6U?!nW zHN(x6;S%Ns1j+o3s17-JF(A1M9cF~&bd0|X9+mvLm;wD~(%*lF*hqDp*?Qpcla-Ut zW!8L6tff`K*?ip8&qG->>JMBMT*j`?SBk&c0N`*tKhTKdZo;W>ujD7rj5CPi_#`;U z-D^@EE-eahd +wK;lu@1x6%m6JsG& z7)v+ftj?tAS0Jc?)p3+&oFF5P!i00&t+InP%s4Tb^e@KG2d`@UJlq6+`1C&XRPNb( z%yn*Izp8?>_Nb{}k7h6&pM>X(tUx7JhdY%5I2_U{q&`MCPR9iG-j%Us5>%uaP(OqI zautjPS4Y~0lf8pHfcfHy%$Q_iY(7VlC*to%OpFE3pf1-Ss6(FBI{4f7!0}=n
E*ZB zM;&wk7knpBQeFkCe-)Nio1ucH(e^js2h6RGb1&S~wXO^Uen6?IYcHI^lgSTgW(GPk zl}kT ;r@l3V z)u|44yFS3!k(Tu2VHL3X9LzX>@ROQy7xOD&{&B0;z4CQ{;Wi?0eN`M?6`TSyPQtgc z `#hiP#8&0$3%6@u~PDN%y5sVa5#GNPh! `tGGvTzUf|Fy$ z88KO2@w5KMia((`*wHX}HNmJawKRfdnZT}T7*i%|<7tL- {tN(>{6|d-gN;~j{!|E0*&QBE>(bfn}NPE z0^wy^RYG;3BfipieloH(9$F zGt!t0y5SZ{&Qw)LYMN(a=j D4wJ03V5Owc(D z$7JK`RDl`EU^4lR?x#weiPdoqiojuJmq+cZApKRNvRD3QhQ?L`HLMO)b2xzba`5_g z6`0H=RdC91(?{-DSS8MVhiV<`c@a2#?*CF1r*jpUMP`_n6U_4Yu{zB1=YWACX5!_S zsyNnFaFWb8MU^ 7|wp zU1;YMT2&?w|Kn-`taUD;F$Q%kyRm@ZDX`3*;xII094_yKBS(=DyITS03P0zBpB3*4 za>G^@yis{Ea)Z{Jed!&Ls=-rQJA7qD1u`wlux7uG?}>I%{1{x|O _#t*RF$_G8N-pN!Ve+%Ye9Gc<;4z_GmU#l>a=f(Hl>EMDk`$0Tvbe7{1>aTfP`PA z%fP)f_5)Vzk^dm0w(H+>xOO7`rbChs;5$V=-S&`px?Tqx(%G4OB>zAfk;Bs{yY-Mb zYa|H6_^y#^Ei#plNT99VNLYpf?+iRQengrDMKOR-86buMV8xBbuX(c33BxmQ&K=bA zACVP;S21l^PJY5Ga^O2%o236!^4zAvjH#Vy2uae9v`*6BNz~WsWEgVXH#=%Rr*ciw z|0TVl){pTra4gG_`#YKS*G*czmG*m#-yOIHq2N?sirGr{KgJEfXP@ZR$9RkI8MS{x zJnX*zq*pxm!{ySx7^B~x;I!n_7W(!HX-}6wA?|*Ttk?!ulJSE`h3tPcz{#ol(??^S zy m+I!OSrzBSxQb@-? zBN570(E2UUNU&?pzj|&)afYqQSz*CBc|NZA=`-B05aM4JYhU0dtWc6qV_%X3{vY+K z|9MYu=FyYT!v06}@7e9|l3!@;SEPm8j7Q8QvCBMF-lE!ZmX3QxqTTBLS7G0?^yDiX z>)dyyZ(flAw}TJ=1L4&f8v2^l_V4(a6~aWYi|Ga4u};wn>5t9${lbg&*i=+4TtPEl zlUV_)2O?J96l7AQT+ostBbsFd%Ng4x>iLG$@;~ olP+68|I(&aaVjbK21CBe4JwR3{J*Q9JkY<*9=U~cS!<2QWSw9JQOZP2lYHRsk z4<+-GwyvY|-;!3grSI6YgM`@@n)MRPL^gY=lmqw8t$un^=U<}9e4xU40hR#fj`X!;mN+iJ0aAW;2e+#8mvMbp zG9A`iXGhh0gKpt23Xb_4@YdzX)l6-XX7)snH{)-t OOg0t!{{1 zm+t(R)U55w%naJaAzdue$5q{u< 8uWhXVM6>|}goW|?C2XIVsDFtw8|~Al$bw`o`*K5h^(p=56Y=b_ z7uk^g^3hm_4C+7eRFDF5wCk~6K{V}7!)k`Y>_?oQu!vhs0|=x>;~_9Uu ?nZ` zb~OF4O9kV_g_fRmaqMTE6?HI?**~>GI}(VwziAd9E?4mjsyV-9*kngFMXn+p3#+^$ z;YMWoVBCl%84(6`(ihY?HLWfd^ASKv!)rySa6hWv8C`_;zvcAYXW}QkeL|mq#t+Cm z`;1$+!E>M}26e(0>iGro4#=V{zmVgOhG(n|yluNH51J&MTR|Nw$REPIaw=8e+G6g@ z#U4V#n#b?YgjW!DDy-rF-~C&Lu>ZpfM+Em5rwTsS_T_Wn2h4f7c(#zIo%b8_o7D61 z6;@Ur$;i4sqP2;TAe^60#}dJP$m6ceQ?&??Mo#@7vu04GN_vG})%wvKe73@;LEQy8 z5r?K*>eWGb#);MUAJ`eGsuO!Up^C&8`(s*~itHaBViX!*rS{f>n-%s+swWTU(1F&1 zJM|ZYI*oUJ`#(*xddWJXDn~thJ!W48Dy@mdoNwv3g5d3ug#724Ls)M5;j+?Tb^izK zoL|-HU%E{Ye1uNV=tV)OZ+q@O?p)X!)W`1At)7Cb^SE-nU4KG#|G^ww7^@`}=){{D-E@gQ{eMq8 GGv82(&O|7h-WeJJhxJy@B3Ne|U6aS-kPB&$R z!|W@muf&mI>1{UWa(!S94O;8FbFg;i@L`Y8K7ymJ$+bWUTu(Lg+HoDg)1W<#WLjZ_ z_Bg&x2iuM~*j95pY^qOFtpqz^#XoekmEd913drPys`YJJXeERQ-zU*SR)R}F-HiX? zF+1wPE%aQI(-$3Nl6U-v{%a+KhL)kRcta<=>pzpl&sE?tJ1PlE!EY}vc#mfZ|0x9I zgTqDDxvyz&Yaz-%E&YG+O-lJa>kd) KFPQt$uhdJnLwj^}@vyUSHX zE=9O>q=<+pid{q$6%-W}jlIO47<&O5c2tBbiY1Q57-KiKSfbb!8}{BY8co!rB=*>d z@%_x63-Rmk{qsEBJ=@#t?9A-!EO?m7M_9nr?Qn*%KMI8c!0SgFSu-9cm$f}Jq}r%W zy$}UG{7mCdfB-NIK-UqNEFavz(b_k*u{ma}g@SFg{sw+aEz@}WE`47@cseH{pVN-$ z3wP14Ok *m6*-Im zVjroHsi*a}hQ07~ynP(Wl!}GL@8)qjZ7-7L;^9U*(8J!BY52Y+Mcrai!wbQfgN~LI z?ZlyB >XeH?mZFLaQ zA>T6~B$bM{Wbyd&O30g~&u{wF;NzGIuqZBl$!ro`g=GkhFo|f9Fod?6(BGi@ly4HV zo4a6CAajOrQHPK=pfMRjawl_{{D%!bkLPmQppp#d#vV^pBgRC5de1a|*Vu|sBL~w_ zM+|7cw)EOjgid^Yi-*MTAv>9->tW1<9pVcVna2D&?70!229+t}S@u{=xhh?agDRcF zF+^ 0OV-%X88%;4_n9z9L z^Us}6JWUEvTAE=}^!PkLT~e`+Mg!++%b+(OLE5M;z`n*uk=z?&28WdGWwlI~#6FMi zOimex4hHh8u#hLsctlP2_e!3uU4w`@3*?6Js~a@bS(I&5{{|Qhr!DqQ^K+)2NXkXb zqg?D+Ig{^VwkCnS^vg`dFxR+*P^5DQ1Wmn|blqYej4GgvWd3R}U3V5c%MTpz+1l4` z;ze2Q%1PCT1&ypT8#jP YIgeVt~M63fNonpDwM#07-3 zf(njAL0Zp0c+RE mXaT!TqO|wXme$lj0|mdM2UqhrlezeH zdg_Y1;IEZc@Lz)aaf2;2o?5*_b+2}fLfphQIl|bKZn=pnV$eo%G7IlA^LU@NnC2_T z{4G0%3sA>1&&4NH+4cs<(4A5h&93pi{ia?;KP)xouv4MNl&h3v7Ui9rt58!v6>92q zl{T8iPx6UuN}b$AZMg>@^WA}54**%l=V-VAt9KOOxR--0rnoC8Fy|3sW(M1-_L}N^ z62$lxsVaXG#LE^z393jv<1-Gj7O(MlZ{xnpC>OQWMgdM#*8>~T4-2T72X@DaO{qV- z-J4PdyOTT9I(GN{NGI9dzl|QV>$Q*UJw@q|ocKa@sdaZS_S3GhK3&U8ycm3;X{}~# z#kbVbQ^ZW1ei1-^qCN0GFOL8Ks8-O1$$V2?d~+v%Q_VM*Ro?l*=g~e4b+jM+FqU|Q z5gyE^`5EEYF>=8aMp!VJX8a5A$A7BqBk<__4QgWv2bV-9FX4|%1mRvHFm4m}b?vAA z7>;OUiW%vL7TMRe!u*`xpDhh;?~F4#X`of}(uvTNGc?ajw5+oSJQUj*@ b0d$j4iR6!Yn0#MU(L?j2X^>@9kTpx(6CTeJ~p zdy%t`DC?Qarrs@WAS8hyI0$AQp6Ahsy+$p3L`VBFXRdw3vL(D#EX9E(RG8v=f;$ z3)CWchxDAmYJ1@Mw0AwRgH=~Mm=Z4;eT8qaJqY~t!fIn*;pn#a49f|uw2o;xd=om; zb6?@=?1}#QT}rUp#&G?eEWV<#C$v^R8tWh#lMn%bN_<9|{LauLU*R88{Rgmr=SDKF zGtI!TDAsW>-lkTpW82^Wu#TH2P$j7Iit{~amY=9+>)Zpp+~#YJQB< Ndr3lG#od1?bg%X&1SFG~wQ7w5v{TX{`rZN}5g(jwZ9WydgcSCcN37L7#q zNpklWX^s<5DI&Y{$5WQ*-lu3iZW{=%Zgk&YG!tiFD?UJc;j-`~(!_xhZ}9P8ti?3u zBz+qof_&Q{IJq+L!nhNdCQyK07IP%RBF(i<(xm_~x&DV9n0P*QRCw_!BPX`-G3T;c z94EG60kIsyN@5@$(ZSl>ODcNFHkubGf<$0x$_^BzOHVG2!dNeXvE3DwHdL#sr;Xl5 zFOk;VCEf~YOc?zGqcxev__h=lB+7`sKT#{VzWt6N31}v3t$PY=K`k-ksGaXZvx3AO zvF0ufDI+S@W{OEMdAR7ih*?({?@IUE#*|UI`4>2VFE@i}E55K)$Kk03UM!97(xoz@ zda1^*P>&LrRCtdnw4 z*9O+!#ysL z+-Zo4G*9F8oQ91PfNukUx0ztnRzZh>k;75MrA9wEVTBIUM) kM1+gZF7#uFa1)hQ(T)&NdVpAk zB3MtE!Jq(nwX2}g9(@V=02e%uaMNJ&z+!Z;e&Vvc(bxKot13oM>vs&k-K^gM_;$8_ zdukyl4-LxRLG{ZCuZgSLqeASwHriNjDWEDs+YAMBB*`j_(vhS!I#ipZM^{`~)YMpH zkFv(&F_^O|`=#%!qoKpBk2M~T!RYaCS0LU`?<*Hja89p3Ky%R(wBJat%85{O%$5W+ z2TU$_$?DG)q-MrZl~Ca-@VtEEP*G_jE1rY=yvKVT1}H{>*NApdoOWyk(W!Awdq7fF z7GL)@Kl?ciOtAjF6XEe`kan9UbYP@po~RtZe(a>1CM(B01rAPE0gc#Muv$Ri^LAn} zbwUJdnL?Y?uO+_qLZ|A5>Yj;K55xQKZIv>s7S$NLn`+B9sx6FtV{qqJBsW$K--C2o z`-Z@SxyA~}&wnanIU;yT$Ep3W`Z^s_LoxB@2;~8e#7Rf~5S99G0ITMVVqjSipEgO} z$BfVT1MqMcZk0Tp<~{Q#xFBxdkxjI_yyz)*9U#9jFywO&P;8h8@aTUF>$5z=$k~@g zC_sKsDPf{c&D=0d%OOx*s))!h(DchOs(pRi@gPFVhmmS+{ni)0>lc(CCcMSDwp6?V zs5F<66kb6DhOawNxD1UYf%dWJs~mI|*vu?VE~b c-*ZQ_ z*4A@g)MfwiLjD8m#!vSuh-xu+7NZc{Lc{y2>Ujdwg4Km12TDzSW77olZ3kX4t+aY$ z_xyNVN~oTbH7UCGAs7}DRYQ_hDF>5a(VFc;G=^T3>ari`Q|)a%)n%_6w6UTn-TffL zW6~Ymz_8PdLln5cbndy-=rt+=td!~Mb!2;lJ3=}JIt*{oJa6T=7MM9z!7uRX46t6w zhU*j-F1%YcQDyzk*F3bDsvw{IE2+^DMO6&pVulx0(e=|RnseOM257ZnUA0q*G%sAt z5-G!|OeL|?oHLZ^l^fbFxKP{Y&rL(=StT*Y>|>2`Rj!io+YO}!l|?VtEH)Jp&X7{) ziCU X8oZHdQ~y#4s5s?BK;o3zg7P9nN+pNF1W jfR^EG_{IY?>J}~1VsQen2t7ovy7svii%>JMgyvfjiUN>@~$RY z`q~UdDFIyZ$;Y3S(u}576P-m(clxcGxFNcjX-{<#<~shz!lt%(q#DxgIK8bd{6v$c z*&a1SGehV6J>ar%OUEw1-lPJNR6M`Yqym}j#7pU5QB;{p1-8jyY9jX_5D#mpESzXP zC~WpPV-6s&w*F=sH+s{any4sj4c)AX!K)obZ);+iTuh+SwcrnGLUn72nkBYw0~lM3 zCFf8|EfHU`C%oga@7CzJjn38*{uAqSzzX1|n)t~74oP7r7&%NK?4%nz=nlk?KySl# z0A%@Hg&Ux2m8i^I84 x1_2G8j` z<1;f}q??jC4J5JbcQe3 %}qpZ=M z+Av6Z04?RdMzo!Z=IzqQ8Xusw*5iHW&}CeN^7wr{(m8R9YyMsc>DsA= UwJDlj-r%|p2s zb9*F;yfhr 952gHI24u_{a zG!JmG zbw#2W(u*ob3y(;9>}*T}bhH?y^)pd3Y*j;e+f;~3hVqz!*y*9I&Q?*5;WRN?c-6WP zgwbON)9P50B;xv$N>ZteHA>Bo52Cf#TU5-xD|9YeloJoO(c5UzLA={Qt?Pj+aM@2w z>WK @pa2z3>$$1f%38Y|+P{}lf5IYOxo zM0c_KF#XX$1Xo&ln1^Z()9dOq4iwKE1gW&6@u5`%^0Jap>Yj>a?=!-Hz9Pq)FHJ*R1GHW))>sqtoey3JSdPJ@pr z-}CJ-eJ4U(pI?sWo9V|PC9L>73nt)(Zl}ggz_B`Sr`1g`f{oWxZWD1+cByWp(*Kn5 zq`mRN-u>vR|Ei9+Y-S<1CcdCs@gmyZ;?N#54Ere6s7zB4DSrNmzHBOvi~DOSw3#?0 z0@u=?U_r%-s xUt&tQh|Pbr{0=^~01&3BtYX-^(~F zh?W_uS+%U$b0@Kv|M0fR655j>COX|)qIl$5AJ4{Gj7OJH(-vZoX#6wnY#}POuc=3R zd^}`{_QrSQHK!>bksWWvwg#rI1yYU;t9aoRb9_b`U*Na!Y~+6~{gr`9uOGQhuG*m% zRJWyA;P`l>z8CX*BlT9$Z!N)GHN8nrt#H6pY&wOt0$-c{j9RtAzWUW4G`JPW&(+f? zgTtR4rk`7Z2H8H6PP7tX^?m}Sr>*o+i)j_UnSorw)E{UJsE;!P+&IW8pB>L>Yx}Ep z!uOWLD^Zn15i&6j;nr1&f-I)Ki}*;?Y3c#=mmk0g0E(@GGzk`C5S*;0xzl+a@*iNv z13@itX6n!){Y49Xh31!Rkq&rDH@(D;%Wq@^u;+>Ln4SVSk$yr=9F|?;9XTr9d>Jm| z5vF`gfZIsV;0n~@{s~c9pVA*cs?*!hZikr~xm*kwHPbKiJ923)LVWwG>}sb$LUk$y z0tIQclHv44Ye*0(A%#s+?Lq-LmV_y3J!P~O-tKP~p@NrQJc1A` E>@$^u=Um%QF{|UmM`hK8vVX8{ut=;kfjZSi9!v zMKr99FgG2%PG5v4u;y}j%^gQwW>17NWo56r`(hzlv(Z=05jvodFW9KX6@U(~2iU2n zVqo1Z(4FqL5qpdSmZD=6Fx%)(dvNQYuejd)0w}FPOKQ;;&3QP7# riEO`|hU}?L>$;w1$$~iN&H-7L{r*>I=s#`l7vPERM~l#qGrg`K|pF zYSuyY63HKEQwMRWgijN+DARcU1!Z)E)S>DKI@u9o)WJ3BF}rJblYJ) YYS& zG3h4t?}YHPH7J8!yWO-7@qra@0+sS@3mpKv94RCNbh6npF#BaE?3ltUh~m29JjP=# zjqED?JvtP$g923io5Oa V*55ThO6!4jdo7c8^bjotD4JqDG2Zs+RIR6&9}=AotPmZAU#IEQ(K>Y@ z6snG85%R2oQ%-H*9KUq>t0x341HYrHy+p$jq1Zk#qBRV_v$7@57R@_GgsnN+Z$hSXULXS1m-2UQ1 zxyb5hg0%uIL3z3cC$dQ?KEljPRXd{epo{^S@h^MOI(DaSqLXkv-@S^qQZJ7!AWx3! zsXx41Fc4@kfYuJg27ROyl^O&n zbXZJn28oX1X*1d|2+-XyhE5JbooQdwV|MMoB>TZ|^XpUCU=iThzw&gDb(bd814?gS znK}-}?8jE4rGt?- O#f=b= zjz6riZs#yMvu+KHz@d?kSJQ?OqMviX+IX9 h;@$@E1)Gt*tjX9~uIIdCm=*=xhQhc%q6l>SffMg(>TV9lrj7koB z(K>eh^XVkJ^Sjeyc4J{Za3n^=&dv&2!$yjij+<9 Kn#-bzD;;H{wF(^8DX?&pt?Qtjs2)U!?!pE?g#?FONIwH%n#wTje$EtYy zYUGw8Dv95#Qf!K-!*+fqr3f!M4q)|t3NT9lMB0%8&N(rWZlz$y$IkyYMZ}0(gQ?Cq zQO>r&fYSrKA8)3y K?I251Ib|`+TC#=g-jGr#p~hZF-iO)X8uNJCIL8xf1p1n zi8Qfr7$r{@^TikcP{}D`xcGN0O`L)QfIS7YVhW}@cql!Zf`Mr cFHh) zZalRugVop{iKC?HU^l(k$fy$eETF=DMqB@ewoMn`37Su>(uCR0X1>0PX!3dCP16x1 zT;|b|G*R85-ff^P#bEdRk$z1Rjf+LTwzbJ8C`x)zKtC5(=S*YA2sFbUV8s}4DfONK zEuxQ+^vetpUMdXC$DaDUx?6wC{L+BG>E#TOBF0~%q3OUR8#J1gj=6n(nRcX$xnjjt zYL)@;JO7aSXNXW=&&w#A@8Ie%ws>AqCpN#NO&MZ{ID3WsEhy>31B$kYvflBRtU0vv za|;tQFQ>tDnMFia&r3+NnfwkVPQsI?80=a@afy@Z@Mwn>WIJ~1Tqcsn8mZf zU(+Lt7+!tZ5cLe*TTm(}&{Jz2hqY-j&P6bYtKXHw;a(`*N{l_B*)xToW6bO#G-Z61 zNxNr?z%rdsMHb9jje@GiAsis!OsmG as_Do0H#g%0L22QPPF3qyn;pZAcqkM)Fn~vzW+C}VfK%>4y>Qc&o?N&=6>dDP zJkB63i{iKI@i4)|_F@~)5?(DU_F%wtV2apT@u2yxTDplvj?a}0D$!1t8nIbmD2ig> zDr{(Lqct}2Xg=-EnUz*)C`?_qHqpje!l&|K4(3N%69cq(lm%TCWeUQQ7=gl^K^`tY z+79b9F#w;r1L@5y(W^;S&V+}MaG$HeXf4@+vq@A}MkQ@9IzDyRB#gREa!6`)F;xNh zp~)Pi#TO<1_XzzsTbN_7e#tH11dLrZ&!PlZk8s5*v`E@_%oPhLfYT+;Dg-C3?-P1A zTXc-J 3djc-{M8ds+9)JLZk*JjeYQ)Ho2@MB;JYWYsEG4_(X1?yDw_XAu5(0u z=?fVQBF=av3wu`1NSIV}Hto~HjF}lUW)2p|g`;GeE1rw1GZxGf4FekCDx|U?t3Aso zEEl^#Y_PM!?*-Ir9yF9zJ*Hjruufp(BWyktDV^HWsQDsZbW5Y0`5@mS(&)*2thm|j z$?;ne5}t^&fKd)O40m$QDe6ZTTq@PAMLwE=S2TnD6_QDvM?JrVRXB~3zlAnlW2`J~ zGA|G85|}+d X`_S OCJdmFY`?bTZj=#?nKSl z9h^e_*{vKv84E?Zi2nD1Bh?{YV0Rp}Xa()r0u;`Nq5oEOQgnP%X2hCmQxS{~*{9Im zg~HW6n1l1n>iy}W$31i-`$gCwj>VZ|ZV%_m9SO za=EDQwW9H4AhGw)nmTPstgS0O;gH5WvoQs&fc(xikD9L#X)@!cHS^;Y*qpzK%Z^(q zS{sCWEG=Ax^RdJ4s9=>i5G3BIrt%BjZ{8NJ55;4#q`*^~axMGTYSGc)G~-QSLZJMV zHx%);^sv -SPN?HO$=qP73=J~VE5w@{NgnY_(@C@LDBT*PuP7Py&?N`=pd}4 zR$m8tvG`@`uuhEii{dR>iF*wg31uKvs|6h`%$e~GJz0mLoqvGb){8)Dw@$cb$FCP3 z4JF#WKrOKKw2u-u3SYys>_IpxF_;RT6?Q}0d@g&_CQNCqvrkphpbl7| #;1wK$45tB!3Ij-uaby1G@wwI5v{NZM)E74!kyoUu+*Ks>I- zDJ3Z0ZY;)fr`d84upPcD@Hf;5m7*1dFTkEge}pM?=&8MmQX@X_J`LLjR%?0~&D@4b z8!;2M_pp%P+0sdNJA2aOZ6d&RsTqS=hDR^7zZ%{8bII=)EQjEeROc7bxPo(Vn$4RW zV4jIi(`F-`#kB4uEQ&!|jAP1P@tJNh@j3U30R!ei5#<-rqx|!Vz+yA=@VI1J_d? Q*nyVG~x2;O-k^4+yeV6MWQ*KAj&=*Z?nkX0)D zCqA^|JO0H@i)Z+RzByaS%=7~bWurZ9juTPTS#CKtxlF% d+T`slH7A>p& z8Sp>4jQ&cO(eElkq08u6q{}!gcLqdmtj+j!E?vupVBzgiDz;O6E&Ow7$WGzzSCR|* z&q`bA^kb9HVyq@X?D5Q>mhTi1<@fue_4nUF!+1yAU=Jus)=Z5)!Gkw}mBG3$<^3F| z5b_8W?8L;|lqdIHkR&WvMa_1J(!LK$VRf>OgVw*ERcB|J4k}GQ($rldxKtb5G1}wL zDKh%-46QsuyLW*oODavJcMC7SPNh}1YU$lNZ!y0*qPkVWVt#yt+U|xN$gVVH><0R} z<44 i)hi_636o~S7bs#2+gU{g{L z(3gjChruTYJWB9>s*{66bN0}n9Ps*4{poOys9)y&Hz0$Pk26J!hj-&G&HFL?$s%MZ z |Uuz z?~i~p>spCQ9~F^))A>BnnKPzT1 Gxyep4c5mxw#_EY4A1f z4Gu-XEonWkWp_I++8IQ%X7tMm>?N !`It?FHm4OHnQ zcz2IqV7^XlD|T-yzYR|T*F^}0oB|^nw3YUr644XO__0DDnC2JBO}Qz~N&x#8j#RZ7 zOBI=BKnisORqKE|co<5XqJU%2g;eSHaeB`cNUtA^XBuy^Mq4nq=x%FXB`J_xLCL<5 zGAn$lhqC7S+v!U8(@#SdGpjfqJ`GKlJAcD$9y)lE&E~=53asCeVI14nq_YRFe3-Qy@gS79gSn8g@A~R+3 J6_roJ&tZ3c@G~tu2e@xv zhO*Czl`bwn&)^NkY^cZ`tzrK&4LlDK*r`pl?K}V^Z4=!&FFb>iH(^7;uIJ2lf)786 zMPDHC9)M8(n-u*jki0I4DI#YBEx91d)jnOU2z8o}aMeaVVg3lzWl9Z0UFDC*<3`6b z;9!e+IHKYD_1Z}PTmTsM*ht w<0x>7#tI1FqqitfKB@#!icVjL%-pb&K3o?8 zfj_$-$Jn`CB18blv4aCngj$nlxlp|uBCWEa02I6;S_j4Q02? D3KUv6QhfpiXHRltQK~t>Q|mdJ`nz@)gwerYKvi%ZfrqgKvwhx+y%W z9(O|RU1q42quaym5LZ}8pGHMvItDrQS>8JDiP?jUdB_{Uc?;4$$$P*Zc@?s<{V%WA ze|hOi4NrfparEb; i$N{D<^Iym` z0vteF;68e4bPz&qlHFBzoJ?tS@K+Ju$Z6?kkMJ_g7%w<*L$GL3 L#pdoqpJvH?4au2~mdIIH^k)9xj- z@;A{yJpF+l{w5|ntQ^Ti6doI`(Z3@l-Nk;?sw2@|py?(ZDVyDL9qAgo#XHg)b{}>i zk9%-)J5Vilmv*2I?51^~QTIfQZ!~l gv> g~QR_$<;!sI-GUb$!ig~7W+Rhlz zm(IHzi^(hVZ1p3Ub&tg$d4CQb24ySu5&5E&@SaDp`QQ}o|DqZBIO1}dOK0*$jlhCA z0J6FOGA*L&|BN(0@&IP-CYAY9oOeBeJ-e`SFh}rZ0mFM+pP%|m+>4mg8wFv&a343q z+G>ys0NusdZ9l>5I*S*QMYW$mv19vYdh`SvT+3_O5l;ae{-g1ZPF8G&d8SReO&loZ z;&HgbcQHQ@$`Iz6CDUpBbK&Rf_AhLzroR7})E+BvWNd<^Y}JzKIM)u3LW)10i@)5q z^=t HZ5)l-vHHsFz}ZoK+&7etIdwWj%b{cq#m4Fg^-i3NQD! zb~=?2&&Yevd k`IFu*zyb}LmETY!^&sgvn>ra}B3y=b-Cr#)5E#8aSk+{(>28;Tw>Emm$NtByG zKfe)8EBpZjphKh%2EVL<5M#(*40?b3u;ha&PE?e#hRVFfV(^?!jo*rH;_h==^;WD6 z&6U`F*ImQ{ht1ilirmtoKt?k$p^Szr6L;xVDft}^c@I3J+;^f}<4VW{%;nFH;W#gb zjzAoC?8SG0*79#PMmywx2x|}abw(mF+Vl4+vQHjWe-D}*YEE6>i`JoE3$&!!1=W&9 zRrHqR&C*+v$b`3QN%<;t iUn^Ar4I; zw-4ZcR)3_?A4F-lksp~}Ii i)uvMO0@0+R`Bz1GW{!lsglRzi6a6#G#r~WhS6UI z3@r-i!~un??(~oJ;$Lhm8%6;=DT;14u6}SgduT)XE7RyS0(&(mDV?TSY>kFmI*u6; zZFdII%+l#Fl!ADjLf@hfVeegtXKAe--^H3A@8{_8TfK4KMf6dWb#*?8Mkq1B$kM9O z`})zjk05e}P00T1BZMzPgp!j%dI{rr3NuI?vW}x>>?Y?>e|EQwqYQ%#4Q&1lmGVw) zZIti-0I6mfN0$t8sTj0{l7#FeVxH1DA@M9kO7 mu+&%9*9xLnfLTA~7 zH@R?fX^Xm=jLG&e%4&ELZww_AlanhyUHD1jd+f !{_M$tdT zWZN&2?m|PnNgo9?JMZATfGv6g25YOGt{q2fUn2 rQCxm4_T421JK0mb_?3p($xe;_;lj`L;*v~5Zv%`fm?Gf-kC}S1 z*J5g@9DY|b-5&dRHI8L*#39bv?yG-4(y}V0Jm|+BrjoL9vLa8tsaXjb-8-67IO}C^ z`BjxY77mxaoV}pPmBZw{Dm#f|xopWf7xYD|KGpf FB=R0yL7-_`ntdS4f!5Ha~y+w z9F^jpvNmW0J-3%Z^>!gno7zJS(RO?@`LYo%mj+sb>4lK5t(yIroYs@)O;J>uX#}+{ zDWel=qGwtOE+f-;@0Plspe$b&&8V3ZtnIB581||+DVaXCPOkuOehpgDZ`y|^r zMCbII48b>PxudM=-}C~?D67^V=x?XOVswIMzz}-rDAOi3Lw+E3pRTGa3D;Fu%y1ZP zqS >#S-sX ;itv=d>PMHOaBz&CnihNA|Gy%;Fv{5Md(9L %X$x`x9uh$G{>cr8M&!4#1 z&4r)4Mdw_lxBH&L=yc;|e5$ymx9Fp*^c9nDk)NCNZ(Z>baI$(|?sW-9l+SiO`v|=F zjYY?r>_PSL>EW%5zM9|*J;m|^*8s7t!UvCBKIlU1)o#+I>wSQ@75%kW?SI8f0K5!z zI?U(Q_r>HU0IMVXZ87nZfbXpC%hr86;izj!YuJxFQQSjI9=V!jp!*Cx%{Oqe@|SB~ zXvd?r`khdnWc o@HnH$dv|B0UB+7@=@5N$CF@? z!{Jbi^ixeQJ!+ADr0FFsAv3%@f?HU|9kolqsKz5;;bUrCS~mA8iHHP?{?<~0Wu;Qy zL3H)Uw63(gP$O`XmG8K#T~(iVApzAa>hqvhM!DGA(HqTOPpUaiqRsxYkJH+TI#jC2 z#S^JafD9>D4T*5`Cn5cirs?rI%yof>Nn(|_ 2Lm(jG2)X z90n?B5LwDd{1F}q$M_H5xXE_+QGInK~%(O6WKYkLg))JML6mHO6h+|x$`q4%!W zG6wPL`4DdWKzQ^8^2s#3p|8rycoEW>HkXx+%H|vfVCc+$Aw9EW%>QK58h0em5ZSpz z9ZqVAjyg;!A##-Hf0tf`$Y62gE_s)eeTCoM?8)WiCWuQfQ 3s*;F+o5P(yCQleC<*x;dB zYdyYaZN%Fa#rs&}J8G?SReq}aKluwza4j%5q*dW~+f3uAs`M&ch6j9umz#7%wne4U zTcRD&i}`6jHK>Hq2 *X5wfdo`2XYRCk?8mzNv=FSbbCJEKn9#BaF zj??%WvP|{Ny@f59i`xf<7)dko* rd8AOL&TM zH~5;y*OqVm;(`9u8dFRbJVhxgeFd5~s+g-`X7;K`+1Fs4+XuDi+B+dp(#^ZqnMp_u zG>gN~FY(Q)Au;&wb%xqT$-3gzCYl>1hnmv20wp_5g&BvB8V+#kN`K+Dk|OF#4`FUd zP3y{oV%{k#87<3*N-*XZEjx%08z? 8z@xyx3>d7ji(FyXY zFXxJ<$LZ(#a wo{U5t^fYNmY2{r*iG0T&%gNPnmG!zUEp({s3^T~z!% z?Gjwgag!SEx0|U$1He$yC>qrOvsEo&eH#NxVixPhD~8m`TbZ7BN~#LQh>nKvD2 zB$qfwbwLTQ*QpYI+ekxVu@=5eqRdzs!pfW5;mXO8R^j%`SlQF5)=wCYBsYE8E^be~ zT7P zi?x&+#ZMh*drLVsu!TzaY!|mjADooLPqGe9q^wBkMtxezG%;fl{nbi(*x7%;$*lRC zMdXkuTX=XcQa7yi8xJqzopv72x6_`KprMJfrf_dXYZGO-T?v(C;X?W~QMQYNk7-ia z%*bhmyMsE1#Kao6LK}$Vp2D{4G%5l<8Dw1)_8@yyYiSXpb6B=*TRBUJljUfBdpS%z zyhp`5$ROXdt{^GYfm(@NwhO|voz5G0m7};0vPr;d4WsVCRjxi(m;&zuqjogTdKjZ@ zLUoX3gIXO&Vs$VOUzC`s_y3!`Y)4ti`+cr8x#~gQ(W3I7(V&hpu2TOYVEJH_VzeRv zZRdh&yH<+N@-3!TD(XaX=+3uq&43O+$Gh}fN9pDs$`MePNW(i~c&tw4+&d@Rz7xY) zY8Ex>Ecc5pElGBf<-BhWoNklvjvMYWxdb3AkG;k5adIHVcEL{DbvE_yf-TT#Hf48_ z{Y#|av;onz>QY!&Sy2`Xvhv E`M43LR zzCIsCXHn9ZsJ_NbTK1)Mb ^-DG`h76G z-|j7T P3&4D#1P$sf=L?@` zl6~a<@?D~AZPdM>Dkrqr_*S@8J6gxKaPej+oY-&*J?;a{{%kop^_4-gf|nH+Htj1j zO^u(jVd{k7P_R1Bvw!a^YZ^RKYx9l-W6# Ii_v{fq6 z*YdSESA}NxlT{rSo2@J6(UyO8cIiPsIl#7L70{j$FO6pE|BVd8F{CvWb^?kC_Ycg@ z`9_{Kh%=>V&HyyEOd9PNfEhV~S7istAH*1Enl@0zRJc|ZJ!XnaJHuZf$85C2_|kj6 z3t##yXoFqo*+7{hd~494L2_L25get#;^iRlGCxnH3WLEfB#)zEgXK}r2TItE(}EjX z7kpZaaCV}WL$DE+OQAJGWQy O|Voi8^I;x5;oE?D;I^O(w@KhL>o%SCr8xaS%tVRy$6N~ z?^BKCJ L oz!E&+;B%`)p=EYvwpKddpD#1Qat)}t_< zg)${*Pm*lqb#^=!E3l0H*Uiy{Q<^vlI WG~yWVpi6Ynva%a z?T;n%Ah>Fk%h0*ea$+T1{$W2ZR%&Ra&S3`GLh~4x-zISo|Do|6(fD4rG;WOS>f6&6 zf^K!%(|Kj#Eb3cHe_MJr2Bg#v)o909SyoP#)}ebjREa}iN+m<-i^;O%#OHoo>^tqJ((Jy_dRpC1%6+HJQLb9x)Ab-lh2m4& zfvnmV{;3Er*iGD6WYiJ^;!P!etIgxsS^SfZACP(4WVpb g5+fn_Kv2x?|RIjGeq$yz6)!hlX!PmsQs1nX ;vlQZ($$-D&wZD+bMRc3^u%?Z>Gv}{1p7$si0sJ->q?+CUM824>?blKBCH7 z3ZE`hMcqEMb-E08+YSp=>JfTu @LO6h_=|O37P?_buCfV%t1owm1ID+=ps$fUd`=m$@t> _TC8I+VRH s@MEsyzne$t6PIzu;1SfqXrh~ zXFsbCqHzayRv+qTk-`28$AZ%6Z5s9^QaSy6BVPK=;*j)?iNHB4CenI~%y8;(x-Eii zgBg1EJd-rLd~sjuF;lh>C%b0 =YR=hK3@vb_OD z!{^GULOV>i=gG#dPp)EO6and&p |vNk$Hja zFK$$$$qQtl?e2%tdMvqT0eG3o%jwqzGQ{r2$pjecIq-p8%Gr6yIuE6;EnSDO5)8|! z8zD_6PSdt9&F%-Erojv7zjB%zC%Bybh2<2bStz6UivOsEa&+wXFvMh& b^m$}u_Kve)xGLbOwYsx1PcXuMCI7Rkh> z9a>DXnRakowXArx9rH%afNiUFJ|h2jkAmhd(rQpk=S7V>6G-N(jcBJJ_1P_Yu}GFH z<#wTPbiJkm?6qotP=)Ux4DOIX>%YTTHu;@A7DKl5V{_`cSS}DHn$x?*@{MqAMlZex zGrB8*$}W-5MeBy-`GX8@ID&5oMRLPmPh=MA_^ufCG&KNI*|t_ypZd0NrH$x>fZoQe zcr-JugNkfWizfUa!^$pOhD3@f$Ur$dR4N3x_zqJ|phh1J`^QS={2=Fvt5YatsVwLI z!~DX+vnC*)B3oDArkzXWQ8BU`P5e=o55D7%HU@FCGR9leSQ*k^rEU x_t;-e1)x{Oy&5t-yy_K?BX^O)t zIEEB3`%=6yzB^YHY;on%4QZ2qL6;}2UMaIg$PKE!N-h@Z*XhbCImq)y2NWI3MQ3#} z*yP# w$S@m^z!Vk16@J+edUW)&{2mXV%LMQM(8{;!12J1BS!0R2FHYO+So z^o?(Ctw#-RL8t#x&fZQ>*8o|!xk?UeK@qNSqA0k tv9_ye82$>S+V*`d)glPF8Mmpez?KR22ZDJ UG`$hnOVfOO z0_b7B13UXpB@A=<+d9`e$sjIK*Yz?^r2IrH*2^iP) Xb9%+!t)}IiIrP)a zDeDR=cHzte`+rt(7i;GCtEl16$UMXElbZ8>D$G0#!P@C>KFhr4tX^~HRdkOtYrdak zjw;H00l`|u&ojd)ry8%_D{0DRWRCwd^WwFIHCN%xGy8p3Gwh41%-$<0XbUp0_4%ac zf;EMi=O9@7^Xtzt=bhFwk6l5BIJ4cSnY$Eae(sIT37=< +lH@P4TCLMbSWzr?1;D<+nS;grNA6S>gCyB1JE|7HTkKCi4{Em$%FzBk zffc?DqAOR(VH!pjy;h!S+&;b#-7ZrlnZCQmC7s}snu0a)o6G+6 qlKrgA;XC*bXmef!$DXOR>U7Xf KWJyRtSW{dqd&7{N8j4N|KCy2^<)! c03 z>IY*voX}}%O~~IBfvnQILhO0{EoXS-hY0TG@aEKYxAfv$fxBgJ#pl(K4Oe0lER8(1 z8pwo3#^*NTqfzvr5qfZrQzUt69q-by-STUPFO@$4MctoFkuY8z*Z|EQ38IQygH~~~ zUsvT!5P!#jllzTU?2+Z{b5xj%7WNxm-XnXI>Y)7236`#JAiKY*ExbdG_sR&9S%tfD zFH-JM>RuVv)xRkeQyy=^s)xWKek$%HncWbS8hx}1>e1IhVt%mpHE1R_TMu)IP1Czz zS;DLaK5%GV E0~4mP|ba^gW)~R+J}8J z{UBZ0Co77AMI`rwo3<}S)%WAz i4_p4H)b1HMsowcxE>GFOV z=K1CSMo+LtKP2}9vVw!p0UkCc^5$4&SzjH1IIeDET6X~K)sb^_=>XJZIysQjL0LP{ zyuUDcNla(qjR?5tN!_zp;$#@?iMNLi$|m+l!u5uP=h20O;JKDq{l)U=?LisrGDP`t zfq82dFWD_ODLh98RH|o9w&tdFD2HMMM}X8w1TTi0)rJeH(cacHsW&MlM+VtHsmN7@ zYS(VknjG0y^xR7ya%8uXRXCg_DT{7U-$SyF D01Yg*%}s9t|!bICL=*2AZA_-uqD zC@q1m=0Z->6BO&5$B<3B9+%0Yp@}k%qX|CSu}Lh#cH>1oP8yu(>2XQdSpB{HZBiCr4Hm&~2N!YQrzk%#)Z5 z-z9YKq^#yMvP@C;5}`72{k%db+}lKQ`MRPjH97^&h}_LYry%rNbB_+3l3o+Py$5*; zIA5^O(3Dk@C2c5hJo+|rzE#wsV@YdtsMcDK{`J3T*285*TWtX(8ps)EgK1Vb=8SFB zFh#)lx^AxK6~@gv%_X*itL<=Fju)Yu>FR0O$*qkqx{%}xCIMVLwkF)!z$wHTS>OBp z?Ej1NSqrY=X8Qh&9L`tD&dRb*Z>JZE5Mt1xP1NYDTqNv#==NFA{TDWo>6{ENHOB+B zWF`A(UID7LJ9<#UIoY?g|2Q;~5u+9u$|OYrbXd?7K7H4I&ZKkaaMZaVleBZPycilw zuIFWVv$bBhgkET)>Su58Ma>p}z!iY*L8xOQuHUucj|uj=oO#o~DC(zp8(r+IZ{FIC zjeyhn>Jce-odQ^WUe*`2#?Zs_5TbrOPYxGkC2{UN)x7|j=DrPtGriJc#Rgi(Zmaop zlHKC7>G1_wRv66WauMfOxBY3^MLDhA7w%|4vN;ZKNH`xe#=&RM4h<80SvNw-LbhW# zH0SR>eB1?;128vdAr1HG;|Y*I{wmEPPE!%DyeOZ=gHkR5d+lDAz4DU$+8|u;a{LwP zX?Q~+S7bFIf1)l|(Byd&$#O+bwIAn+CM0=l#$)7lRd(`wyd7`f_1(wg (F?|t zc2%}(+`SlNy}LmKS@+In&Z*ILR7p pH|Ur&rP3>vC#9vYCU!n9K;!ZXDvWVNn{^E}HWt zjv0rj<_#I+5mI!#r{%5WX7O&|^3kdYb^~kj)+%~`Lsl!{)S?A?;#Yey)x0VFqgK|d zXQMSdYT$F-J-*1P__YfOEx-lTQ_JcozLDYfcR)xt5M*6gXID_xP5D^3xYD>hhzs`o zNR4jEBoX%`?Ybq0S6a+hc*-$Y7jK}-v1z8tiCl mwtR3BQ?T_yzj_bqU2Kg;*J~~BufBbu3E66XBxk@!*_-U zq?Zt4=qi_g*v+8d@5nA?p_V-G1q=X*T5JBo<49|PV~ZnFm)kJk!0}Mm$3-*5 z_X?-#4`pceDkV_}A~C2n)s#(gD4fHi2(V84``d_9@O2($GW6R?s~=*|bO@j*O?m~0 zHAU5d_`*iasROhvz}2X%UIj|huoo@#ryQgf<5trxc9&M5HyTijr2>_H1VKufZz<}L zY~nV2FyQ6yx!ADyMxpIM_#V=NN3wpcG{C&p5WGEuF6@e9;@yyBC=iTR0m0g81Y)_l z8StpjiTKo<7);yNkL2)J`o;%LMqibjbR7?Z#hChWqS_4d?9u=B7%goWivlx^Q|con zb3OX# $P*A>H zYAB#X`O@Mr)CEkXl9KgJp-z9w5QkPpA=OgI@~6D(x%C;w(UGU)SOmij&N%@>TS2ZU zdl@-dR%&3|U(kiN`G+3=C2PCA_y@PTYD@;is>@8U8hQO6s`*3)xa~kp^GsVWs8mMg zO!xtU^p*cm|0lAHbaI+OSx;oM#3{RZYT3p-P-Q%8(Bp!1^ae-P#>Mp&5ZS>2&?~OU zBiw!q(z41U%fg$&^9cm&$_~|MQ`l2E&~HKknq(NK)7^F-)79HEx^DRTS+wn`jPwcR zBm*X@Rzv))k64#kh1{>cV}(4EE5y8=bn2OG UCY62}+>BdxJX#Tq|SpbH>zu;Z~R~@V|5m3e&L`#r@~fxz3K^m ))v2%qkAu8 z8TSL_n!q;P)0}(>D>ty&z=puS8bUrVrC<5BDy~w_h 4e8f{yuv`iAa&da_`BC{* zV9nCmYzn2GFJ&`vH-t96lzaF*=@n#h`v%a;S6ETY2hgckpaKV_)ALudhp4%czW7_t zGNr65971jA40`f6sF%oK@_Q}Imh_%sUE{hOgMKWKC27EG8De-%b6?{~=jA)v`x>h> z?iJm5EfYLOtp$Yk;n5g`FDs@9N~5}OWL$|n#f@S_)bR7Lu6iSVODz6B!S~;wc^=cL z$y=GwU`(KOauj74#bg8U2y9)kwH`du`d>6thOnKg;+?fBdi)e8y8IT(JZ+|t!#gNv zu6a%)-pM{<=T~&&og}fLGYx-_L3?YW{qKQEhx*g)_Yn2I=u3tI;G=(^l5c^mZg=D< zK(lz#2fE-~%3a`SerSOl6q^6nL>rrv-$mhSsm7o4Ym7Q(obeZ1y1+YTU33CbdpC(@ zm$P*zpMO9M`@Eq>|H$CFN1vpDzdz_S^&hO9)aXI4)3Cprn_6c5h~WcCtA`E|)~-VavN!(=!$4TJ(ngmmNU zlhbfrZOosXY$&da#+{qSJia4phtEUzJ%zv=z6QDvFL1CgO83EZHT(WPtMbh?05^hl zc0Nb5K1grp(+K9qyi^afhV-GGA7sr2;V)1fuxd?I{{Ip7-*HhL-~Tucm${0_N?io0 z0xF6H6ja1ju=|i@o<)z^ 6=1iYCbLPyMGui;d`=aB`LMz*8w8ai(NybB)cFEOJO{3&TMc{So zh9=84wue)65f7*pP^}Lbvdapn>j#Gr=LheKz$Bx6>~Nl*{=uPg>9@et&dsD nv~l?&Kt@rz0pP z?&*M1tmYQPfQvdn!~?*GEplKU(t+orOm+c!-q5fHq5k1J49K+KQ?Y+IFbj*t--Y~Y zs(dEt$07$W#eNq3T;x!zPYQ;ET~Z~qK}~Ke`&G6sRI9)%~iGRR3g>HMI+mEmZ*o zzKLC>@7*csGxU(Ym+&FiS2(SqxPva`G2uddZBj_)8Mh({?f9qMsW@xQIi?*1rmpt0 z?1=EJnTug;Gqo1Pt3eP9zId)=-B{h!nsMP}E?H*`E<^fdQtU;w$PNH$qei|j$})7t zXZoq+p*cA)d=B{!p6>x9KGT)iqIt5P{VQIkKK8=fSd9notSo)+_lKO<$+@_wCIZ~= z1)!Cs>RJ}qQkXlLK?m(cWa$H)QTqAQ=!Lxqc8_zCdCqJ5tVIc#mmRSrHu^S~z6V zR7KQw`ISdllA*1&%aPYw=%;j05xs+&l(UH#v7GvXPk4zo=LZFG?Fkl|hOeT!4x(b* z7$s9*@})5D3RlJ2#4*j}CzJHmHmoQX#x(_|O&Et)#HBDULdhg@5cPtJTH%r`*gjrS zJHWK^er$vBy2lePmWSrLg8p<6VF}6Xm#dyjx;w9~S8=cp8Pva$w|7u*myG3fdq}ao zM(L|*2Uwfi$s22z3}~kEi14dV1BEb!en7rGWB)hbYx$h7PAp=HjtLR&v|7U4v{FQ` zg?JqD4l#Wi=rQr)gRR8N@tA9I%tBI1iAbj&66B`kEhAGYF~a5HV@5F~Si9VPtyNt{ zdrOHZr?nF3s+C TLcjHu#5<6GEyAPVz?L7rnIQw(+{CG zksAh_e+PJZAjN&4S*1lt%5?MsyffU;r4SBa58x#Msnaoh{24G+2RuIu0Fw}HxDNPZ z6#zjD=&l34EdjL90qvQ3RA!859Wbo~BNTufh|DO+QMh^SC`sF%;hOIxOsJbIlEK^y zuJE4|fXO8( USr8z%OFx0(mD6LTE8{O?{40F6Kt~>Xm7#n`k)-^v zh5D5dRh3golvPH+$nQ_IrHn9_AM!I;6c&W({8X$br*L&5m2naw%Ei%mq*OHRdF(rA zLs?$p7VfUvy6GT1;gJ;T%CdWxiI^Q*{*P1yd?6;Y)i4iH%`wlDL%Bm*pDu1+pI2zH zq=j_aNmO?~bQNHxz^Lm>!0Rp~$Fibz%KcxktTyk@ MonDh{NU9zOpHzI5jNyFiL5RI8OVVMXYyI;Ale!BAoRSa&)ugTG#PZ#vp2zQxVEB zAfEPrbC8-FM1pc=94#@3FvraYGw=vU<2!WBAnG}eWS_s?9a74PQObo_`lOtw7rbu~ z3dwICX=e{A;B;_NL_3NvK7RTH>((_XG_pNV`=}h=(OZnR;T01GJJsX(mPEQ^AH*A- z2pwq*p12dL@nwdcYZZx9Z1uC|9d06Kki P;H!D(ciLyvhyi|BfA1b3pbM^_7IFui>PcR$m1>m&8Wpf4YG${H#XhJ{~z0 z)t$W0v
4PwnKdnY9s+xARw0Y2J?xY}8 z{=3t9B71Al2qfZE%9h9{S+o#-WyD{!-Ax1sMgN5&@*~_4c!3FV{Sdd)M$BkzQ0=t# zUi8#WG){T+0wc3(A08Yg%ZPL|cybiVJ{_N>ftO}#h*p;m`>KNgljk88y|mfth8YdH z{;d&!=+#E1+u4HxM F zncC!xqVw*eN`rbRCf>=7gM;hTcr>-@Nvq)z-ZEu37|@u!8KsemH^w*W>Z#SeBe{Vd zO{kWK@U8OfG%7Cl!t;K^@;FEjO?d*S+(ln@;@mK)JVa2VmCunG-nfUsq!d4WZdi<& z0BVuNy9AjP7kFcLOin2WNR~+~9Ep3IqElJlo=A}C+LLEg-BYx!?tTmHpiA)Q+IqVU z4mFs?ZrULo4fPyj4(AlETF<$(!Bd2%tlG_lYA=KJ=QMm}#Ik1V5;Hg>eVADJ69i|0 zMB|O+5Jb}=Zv9JZx&Q!LBTMt_DFW;CdJiiinRpb+M%UsBViEDqry!Cvi#G*vNX<|Z z=&h~Iq~1oX41Is58AeedCG)r(gK{)fWqR0!?HFR>nk~y&Q3}oxIBBM{7<)`+qp?@} z|1-k*apsRlcvx}j%`i}XZRrOUr=O~TVjzQgGK0~!46bJI=r2!kUcyZ&JDfUuiK$BC zJGtk*M2NkA7Z!!EcuTwYi@wk6uXX1ytUHsboVTc;%qyg7-l9$8`%i7C*sLeokj>hq zyAt__NeC>BbZjf4Ej&ycuMepEg|x?8gee;#&G*J!95{sDd5buwI6RV?X`g0ldXrlC zh;E+d-!trrU~@62M3=Ab@3hlLv{42OruRN#Uy}hhF|Mk}oZ`?3KkKEA(-!F&ZC`?d zNX9LY8>tXbY;Mg^svQT@jHuSKCG<}P(OG%_JGJ&j&;2=(MzS0BnzDRR%{jmSTg^g_ zB4upj^~i%KepJodws2R??WRn8&TI1Y6Jb5yG{9_);%0qmkCoo-iVO{VkD@a#r8m-a zTWp96Z^>}O;*ZLnh;UokFY3wvvxt`Yq3nGM=!qZ7+-?Fn`NN&}lB)T07xA>U2`dvh zO+*jVF6ohf82?e(V{PHC+W6}-_xmqtk3YKTVQaeUFMO3j{i)DjWGe@kQC0vl8Igu7 zt_VMKg? _RANrELt-#+vpP&`oT_NJ3TV2Bo-q(6d0 zj&ePpQYwn?l@AXnE?9I`s!SpZ7R!{Ky{Kl0XsGPyOrt|EHY~F!D@23^WG17z0{?BU zw^%zhBMut#SrRE9V|o}OjLJZb-i3(J>SIi3^t#;W?m%TBuvE1lGQF5LfY?xf?#aCu zC4`C*%IkBK8!G&jc|GY`s935rJx8M}q3TzAkfoA{QCj5D50ymSz@wfZ6xQAfj;sYv z9X@5X<22KByeH37_&4&YEaJPa?e;&1Tv$ODoWja%^ bV_Eza=@=ZOV-oD3lf9)B?Eoe|j4rd@id3}J zws)h*Dx$aYNmmw^gu7oljuOjv ffO& zEeJ!GcRNh`!$j4x)4LW+;B2Ppj<^`eP*pf7|9nS2Re|Z-m6}!+amu_?lu=deQ10EL z=xQP`aOd}2P)|%m+*Py~GHzqDk#hje$SmH(+cdG7XyjNA&{R{GlXRe(2zJZ+3XN{r z6S@LOkhUJg6HC>^2BrHgS`scUho;@+K4HeD#!jRHE7RYx?b^`*W1S1dOwYbSmg=HY zo!NIep)*>~!1qN3E(l0{paaYRq?!J>0bVsHIRuO$ZR9kgS8SwmHAG-px@EG9yd0Mm z-QruSUqb}A?)VPePkbZWLE4w!(a;)Vc1la7kzFg7=I`3#0@pz{-nCb1OhUlh1Q&=4 zHbGJi1$^8V$`8P})gFDpl~ylY*i6WhP#3h>m? +M_>8vq&`m`CI)+Dzm1DP=XK9ez++;4zcA@+Z#NA*RaB^ZOB^F z&VXBu9}dpN9zV(Xg!&p^{3}o_mn JRRNxki|Rkmdtc@+(f>p{}iMz5&ap(Xd)#kKcfY=xfc_4~@?U4FjJb!~kEa>Dp1M7a_h@o_$SP zgs7~vYfG+?;ve7gt^a2xX+z|b)M}$V3aX76UnP&~)fRzDsXXdYTQsUrkB`A6=d7(P zU@Eb<4X6a$cw;KjB)V8elWKankLPUpRMQIn08i$8T+PO(z4ij9D3M3BHlDDPz~Y-? zSvgX&nG%=RB`env9!kg&imf9$DIX5f!aBmMTD{@Ch{MQ#d (@b6Wqd8%*4;S=P(Rc;E z+MXfId+A=uT^Y6j( e&-Y(eBgr*z-HbPVOJe92{{K_S-V!EP>l*g~4=z5~Ivi?x+h tq@W>-N z0koHcSKVWP2y$T$ZjAcqdAnpR#OR8g0)sZSKMjc$)uY~iQvwevFk;m8xAE1yH?+Fx zdjfmjPF!S6>?UIR(~q%YxKe8`)oLi3IeAOChc>$(&1@(locr!W`I5`#WEscoqXP|v z$)QvnjtC!{j8x7fe8L9r;&eQ;bA4?&8P=UF8DlH(DQkA(1hqE_Kl|r2+9dibu5onU zB!a4+*vgTkQcctNBRQN&M(P#xOEvD7i^rty3NMe^;6SR-NQ_aIC6c9)2y*}aon-4G zj;B_T;e$+cs1dgF;d|(QBhf ?P6@)-~rB%klVzRVnv4xZh@ z(a-=dsBFAwqI`{4MdCq}uN|Xt@nGXFHlzjdqOQ_%7aflm9hDl#$ft=|=rd@itz8Wh z@P(yBS7hmWl=7MgFU53}ZZ;8Shr(_+g*_}hseV%=_G}|{Ybr(tr*C53>8*WI3PdZ( zF?f9;8X|GG5>~= VJfwX@+|!wXginC6M`kQt=#_!?bV*+(^Tshm4%AvC8AA45 z(4jEv9gUs@T?#{neK^DVXJk1mBBt5m3|@)lVn6@~iY-&e|5<&_iLfZo(Spx%hHSr# zd4o8l=E~rL)0`TsJ;e8w{L0(Sfd0dI=*U?33>exhsgoPyYb8`Cr!JjuDe5aPzamGo zXr+{OrOsxI%paoZGqW(Im>><5ZL1v$#_6Nlk;R4MrrJneAo~VZeh*_t1+|W=k1;l2 z%>IP>03ZC5ZF&?QjOJLNp}=S1)4m4x!4qy1dj=w5#4jh2mocORAn3(Ko96n1uRN8s z5hRkWu|fEQV3{x?kJ>~NTcPN?qG)?7F(^PBLSg1s 5P1dq>Km(S^$fL8V0OV*(>d=|iV!U$W05xhO66!BL0ODfK zc$rk*Y(2~a%xp2u0<6f8ihl%1fnQQ0W(JHKL)Spot;+#A+C~iXE7*^M)(qi-@}$l< zvY)GjVKT667iyjW?Y*u0X;gw}S$ZI2ZV0Av2_lOANDwK}wHwtN4X-!)!q$?xnSX(iCh&h*sYsMR}AgQJ+>)}Z%Ezh$GoIz@D1CV~% zW!X_!E$xcc+4?yuWR0G|PRzAr8)n%o<3K=ch{;Y_#&t4YQd!j0YJ9nta@t|~1gxa5 z+ljiK-B)s}T*kAeMo%o!F-G@Q8I&_i@xtSzqI`wgAoSMgF#OxU0G0_?b#Uo6+gM>A z#kI%oNbI9t?L~mws=YRrj(OQEL!W(QX)hWNZitA*E2h;@7e2X0*1$*c8d(+J+GwLb zHp0?OQ;-tcU<2CSYD|E~8vXK9a5U#(w7m{0kiSQE@a3e+vge-cq3Rt(UnOe~&F_Hz z8N7$S=^)xvDgauxxyWL;kB_w1`g(i|-&%7|8%6nhHwAYT!Oq?_n3(fMVZl2Z_f9EK z!#awa0Ylg>1xqBf#T%rs!4ra#6KmxxemaNxc7n`% 2_$$yLpt3FeBa3<^rRDn z4Z(ZS(>7tl%JqnX O7Ap%PyVSS`ew}s>FvNbY1IFFJ#i?HgxO7VbNep(Kw zef ;5ybD&TT07}+7g4YGX{ OY!Wl~*qBA>ztg7jdpN%+^(*Y#0Ee zok`(3>W;v2ceWwYtU+?vjo(HadZ6iAZKHENMBUnXIgm#_a!&i;oIIGXvq8NJWFvYD z!16c=Pk%ImspjK&qZwE3tkDO?Qglzz%3+ovoo4qG<&_^A(`P*em20w zH_{hSbfSoG|7$aLGR^UvR8I5ABMI4t$D3(#qL`uF$fkc1MU