From 5e0b50b473f9ad89159bb600766657424a6965a1 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Thu, 11 Apr 2019 00:46:05 -0600 Subject: [PATCH] Add merchant transaction capability --- api/actions/getprofile.php | 10 +++++++--- api/actions/gettxcode.php | 27 +++++++++++++++++++++++++++ api/actions/gettxstatus.php | 22 ++++++++++++++++++++++ api/actions/send.php | 25 ++++++++++++++++++++----- api/apisettings.php | 14 ++++++++++++++ database.mwb | Bin 13549 -> 14413 bytes 6 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 api/actions/gettxcode.php create mode 100644 api/actions/gettxstatus.php diff --git a/api/actions/getprofile.php b/api/actions/getprofile.php index 3e8f420..0e28ad8 100644 --- a/api/actions/getprofile.php +++ b/api/actions/getprofile.php @@ -10,10 +10,14 @@ if (empty($VARS["id"])) { $profile = $database->get("accounts", ["[>]authkeys" => ["accountid"]], ["publicid", "name", "username", "type", "verified", "bio"], ["key" => $VARS["key"]]); } else { if (!$database->has("accounts", ["publicid" => $VARS["id"]])) { - sendJsonResp($Strings->get("Could not find a matching account.", false), "ERROR"); + if (!$database->has("merchant_transactions", ["txcode" => $VARS["id"]])) { + sendJsonResp($Strings->get("Could not find a matching account.", false), "ERROR"); + } else { + $profile = $database->get("accounts", ["[>]merchant_transactions" => ["accountid" => "merchantid"]], ["publicid", "name", "username", "type", "verified", "bio"], ["txcode" => $VARS["id"]]); + } + } else { + $profile = $database->get("accounts", ["publicid", "name", "username", "type", "verified", "bio"], ["publicid" => $VARS["id"]]); } - - $profile = $database->get("accounts", ["publicid", "name", "username", "type", "verified", "bio"], ["publicid" => $VARS["id"]]); } // Make sure the name field always has something useful diff --git a/api/actions/gettxcode.php b/api/actions/gettxcode.php new file mode 100644 index 0000000..f971f4e --- /dev/null +++ b/api/actions/gettxcode.php @@ -0,0 +1,27 @@ +get("accounts", ["[>]authkeys" => ["accountid"]], "accounts.accountid", ["key" => $VARS["key"]]); + +$amount = $VARS["amount"] * 1.0; + +if ($amount <= 0 || $amount > 999.99) { + sendJsonResp($Strings->get("Amount must be more than zero and less than 999.99.", false), "ERROR"); +} + +do { + $txcode = substr(hash("sha256", random_bytes(100)), 0, 20); +} while ($database->has("merchant_transactions", ["txcode" => $txcode])); + +$database->insert("merchant_transactions", ["txcode" => $txcode, "amount" => $amount, "merchantid" => $accountid]); + +exitWithJson([ + "status" => "OK", + "txcode" => $txcode, + "amount" => $amount +]); \ No newline at end of file diff --git a/api/actions/gettxstatus.php b/api/actions/gettxstatus.php new file mode 100644 index 0000000..73bc7fd --- /dev/null +++ b/api/actions/gettxstatus.php @@ -0,0 +1,22 @@ +get("accounts", ["[>]authkeys" => ["accountid"]], "accounts.accountid", ["key" => $VARS["key"]]); + +if (!$database->has("merchant_transactions", ["AND" => ["txcode" => $VARS["txcode"], "merchantid" => $accountid]])) { + sendJsonResp($Strings->get("Transaction does not exist.", false), "ERROR"); +} + +$transaction = $database->get("merchant_transactions", ["amount", "complete", "txcode"], ["txcode" => $VARS["txcode"]]); + +exitWithJson([ + "status" => "OK", + "txcode" => $transaction["txcode"], + "amount" => $transaction["amount"], + "complete" => $transaction["complete"] == true +]); \ No newline at end of file diff --git a/api/actions/send.php b/api/actions/send.php index bc48ef9..b2ad21e 100644 --- a/api/actions/send.php +++ b/api/actions/send.php @@ -8,14 +8,24 @@ $sender = $database->get("accounts", ["[>]authkeys" => "accountid"], ["accounts.accountid", "balance", "type"], ["authkeys.key" => $VARS["key"]]); +$amount = $VARS["amount"] * 1.0; + if (!$database->has("accounts", ["publicid" => $VARS["to"]])) { - sendJsonResp($Strings->get("Could not find the receiving account.", false), "ERROR"); + if (!$database->has("merchant_transactions", ["txcode" => $VARS["to"]])) { + sendJsonResp($Strings->get("Could not find the receiving account.", false), "ERROR"); + } else { + $receiver = $database->get("accounts", ["[>]merchant_transactions" => ["accountid" => "merchantid"]], ["accounts.accountid", "accounts.balance", "accounts.type", "merchant_transactions.amount", "merchant_transactions.complete"], ["txcode" => $VARS["to"]]); + if ($receiver["complete"] == true) { + sendJsonResp($Strings->get("The transaction has already been completed.", false), "ERROR"); + } + if ($amount != $receiver["amount"]) { + sendJsonResp($Strings->get("You must send the exact amount shown ($receiver[amount]).", false), "ERROR"); + } + } +} else { + $receiver = $database->get("accounts", ["accountid", "balance", "type"], ["publicid" => $VARS["to"]]); } -$receiver = $database->get("accounts", ["accountid", "balance", "type"], ["publicid" => $VARS["to"]]); - -$amount = $VARS["amount"] * 1.0; - if ($amount > $sender["balance"]) { sendJsonResp($Strings->get("Insufficient funds.", false), "ERROR"); } @@ -34,6 +44,11 @@ if (($sender["type"] == 1 && $receiver["type"] == 2) || ($sender["type"] == 2 && "toid" => $receiver["accountid"], "datetime" => date("Y-m-d H:i:s") ]); + + if ($receiver["type"] == 3) { + $database->update("merchant_transactions", ["complete" => true], ["txcode" => $VARS["to"]]); + } + $success = true; }); diff --git a/api/apisettings.php b/api/apisettings.php index 34cde83..cc0b0d4 100644 --- a/api/apisettings.php +++ b/api/apisettings.php @@ -110,4 +110,18 @@ $APIS = [ "token" => "string" ] ], + "gettxcode" => [ + "load" => "gettxcode.php", + "vars" => [ + "key" => $keyregex, + "amount" => "/[0-9]{1,4}(\.[0-9]{2})?/" + ] + ], + "gettxstatus" => [ + "load" => "gettxstatus.php", + "vars" => [ + "key" => $keyregex, + "txcode" => "/[0-9a-z]+/" + ] + ], ]; diff --git a/database.mwb b/database.mwb index d48e909dc9946a409db84003b94bc25f8115a901..f0fe8800f45271fb0c4e219f4a74235e66721b90 100644 GIT binary patch literal 14413 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 M&iqT5+8M(BFS1&)D*ylh literal 13549 zcmZ|01yo!?vo1QgySuw3$ye1%-yk3{0RR9jpxr85VJa=4pqL2&Ab5uWpnmq6I+(cGnc2HC+j$r> zd)nEa`RRJ>v^DSh_=lz)?8!|gXW?AVSMG4Aw{-3t(Q6L4Q{~XGpaRTFC{@VH>G^y7 zza})8>5_w?CQ4h;Xk%$}f9Z{hdGiB2?4^BprT>WQZe)y`-DMftk92w!E(Jb^ZiAD= zG;A}=Ho`H#JKJ6v5KbqLQ!~f^t_Z?K`bOq-!QO;+;PRk5D+TQv#`P~ zxMd|b)ebvz+VeAs1M=2LXeL%B2*#Y*>zI1%amCu0q+Pv03H8+AU-L{p1;}J#>Tz9s z7aH7NNgd*iyQ1w&@}_KhrW1ZI_rg^+4BxfFb!`8Ekl7PkKUW{~c4`X?=Rsw2A$E|9p({w6b&NT z7VI2rDnU&KT#Zx$2)LPR_4Ka7(S-USAfmM{%}9ZWT3@Bvr&SA25{j?plrtH{Cz)^))=O4hU)^(L$uC1t#N#SBepQxpA<-E2MHy)nt~uy^Yp= zFaF!sba=oflQaY+I9!=$D!GM+FXW> zrvA>BNWCA>6IU}!LZZ!1f4;#Q(M-O*8)-Nv#v{bF%;L{aq!u17{B5XFrU7^AHQcut ze|NJsl`k&^RhR5%&23f4;zNd6B3GYwrG@~*%vgx2ZTAQd7lG@FK+maBW_{P{G3TUx zpOWN{Mo~T1Wr2Z-K2LOK)gnA%w)WmGREcw^Fqz&40u8G{`fY^a-+tuJGE?LARsry78%Xr*&TXJ8ZY6=&HVoT{rg;0s+r!t zX5*FCVz!2yUgLr%+oRS(+hQmhGM zE8J15iw@f(uH)a60-w^T(0GKXj*8r~@sMb|-n@*WX?)ejd?ef5*vh-|8^APIOys2b zzD1?ekI4+($|@vpW9x-Lah5kaX+_~iJPP$9#PC9I6B*`%;kJPxo;u@$LsROz*K4)z`~GA@Kb<6@>XNzvkxhAW2**SH4-1QC1{IaT@EOZJoWzH2K# ze-D6o4-0Lwj1IEDsgp_~=*iXHy1P8bi4Zwug(sSVwXPZqS0vZw%vq_57lC_T`0fi3r z1u`hm3IZ0{2?aOZmB;6+bYK~4Jj*+IZe6G40xQp;SMQtDs~|IRr%Az&CPDCiT2@inE<+y!X<=a?2M; z8k97Bz+{Am!!hb=3o}4@rs^(k+3rgt4S;xngP{96MobOOj=+k_sssixYg&W=DIsyD zK45E(9>kWvNnBufC>anWCf+-Ru!%(0MRs}_=Eylw_$UH;5n%p6nPOGo>W^wcI3l@>Y?1UWzNg#@-lg_b z_4BKsEcyOq!EWEFpIKL{cM>=Fc;#{b7{|z*Zu}v&Z+-ajXp>p*nS5EmNH{->ga7=M z`I`Z~-?{A2n>X}5MbM8OW`$ilh?yS}j0{=*Gsi2c+v5FAsH*yqNM&0dj7jwCWiBy7 z3KH<3R)K7CW9U@NU@s?ugAnE)LrzzVp}5y>!|?8c3R@~ z{TmR%84OWVj}8t-wqy3UMyWk%a^`}*0kg(C(1?~PF(hYemjD-;YLbz)UNUHMSI)`{ zo$y%$vxA6O)e1as=uKui@jGMrQj>sJyq*dHjlpzlXUCPP{}(g5gBXv!jeTtu0?f`q1@k$WUQ&Qq@c3v!tMLhbsfZcB0Pr zX?Onk`DUB;7PRFeBfS&;Ob|@nVZ=H#jJJkA#kXO&Z)Ka(kiW~PH(c`3E#1~ndnNQT zVlA{=VKBAw?NFxpx|lVHAQSA81zme9TFvLk?Ff1+I<>gq9s5zuX3h$FD^jX;il`n6 zbeq|~8$^kN$J$1>H&wGf3W;ppM}k8V z;SYfcg?sU*#cw-Z0?!JPDkdwtXebZndo3CE+gRdB)bQLH>rS_4bs>4~ujJU349JFF zFLD$^ro*`N_ZfKasI8!s8u>-b-}lmOP&U7Kd=V*m}Fnt18ebv?-r1&q!Fl1Ef{jpzgud(sg0VBHA zHi|k6U)TS}EmX{wZ*{+8YUh7l59qpk^R)BMqjqf3NNO(L#UZu%MQ!uPyc5oTpFj2j zDK@KK#JN#+;rB$#@Pwn~^Iwm*EoY8EDEL*xHtmgeysS-6#MP=G7Wh?L(p9-d+b_Q- zj!*wc^L09=t&Xz~qqb`o+n9f)rZIJfci~9*FR=^Igt?LS6~;BRH6%h{F4Eqi+#hGR zg?8T~(iCyI%RaYf3e8`cW)$ujj-^_z371?}Hxo$U+eLj4l&1xr2I^HB$*cpry6RUd z-N^@-77}{fGultNdiALmnAW772G|t57RuS4KMmO|zq$QeYj)k}wxQF^%6m4IwFN;+sO$(> zzM~Z|I_Q7xrkTIZ)Z3@+xz%O;tisY^FTdeAA>Ss)8<4>hNT)n{f^p-$Y2I*R{6ZKV za$65B9uJM$KCwL=;nM0YJ*P-+Sl?CLMrU4-cy{xR)~Lmkuo=>9l4W})gf5Vtv?$?kYvo?QF~=wpm0r+76hDk(-qjEKSvAB59{Oh%}Os1-@Bx_tV7M z)-T1wO@wiB5^NVPyVVw4h5)Y5(5{!LA$AGKua{DV z33qK)Z-|kv{f4yL9bW?c_hHCb?SWU_4~ zJDNURal&(texolMFlgbZPO$%8i-_c?PHh)x;i>4Ius_bk38Uhi#L&XW)X~U}mFOO1 z#e*{`P$*2F_7Xok;a40nx_WNH@LCcKi-=*`@xfGcBxt90 zHx;DOaO4KQMO?z1Z%cpgdIzTTsrpscDxK-><`dn3s9c8Dk9X8|d5ZV8FqM;db*@ow z4{9#|zgCU)M4g`Mqiag&DF2NMO^#kTGLLM(2EvNOdURz%gB2CDbmP#pY;8`{?1g=uVy>U z=bY1OxskeWOe>Dz5+gjdc;r--u4iCW5VF(?Baqm%O6>WjzZ@p@LQlm$df_cTDlUuseN zU4L!hc54a+R2LIah!k8nqQjylA5sz7QAzEL3{b~-=(IL&T_{xILaU$_of9w1{9I|+ zYVxZO6_F)TMvu0Y>KN5I>hind#8Ffgwn3SgrR|bG`^clisF|^j&irEfQMW|?O1qx@ zHcM}tX$0p&f62lol*F6~3QxzDLqxF_M`C1ZgDGZvlp-=?3+borzD5`MuuJQA)W$SC zUh4cKL>pNTc1j@vSo|V=+Q)53VwlHxk5tB}#=DNo)O54G(I!541pIP$Y zTH-?okizs{@GxlFqi_f6v;@FF`v1LlGE|$G@B{P+f(cuLKO&*O>KrHhhDL?o{jwV+ zD7W*&iguWSwhYJ$JBRi~iHOa0yjNYS3e?PWB=~k&Nx@FD>gFb%&OnQV~pW~ki@2AW74Gtv>om_R1f__l&qC`_4#Ig;>L;%f%!M!5y z$YIpXTU>>Z#{+GqFYZpOwBV8fi-p1`>m4Pn?2AMl^tQrmX|9B$+t2DA z>Z>$m3o#sy2odiP@kxA@h7a7qg(^|@#vlKMEC*cGGSGbuP5EGlGexZR45dSk-U-=!vh42moW7Gk!q5V9??) zc!Z#3L^C%`{rr6g_0^j@XF!dNTLWqW(5-IF*(CQHjFx@XJXgv*S2BSr^B3ww#Dx=Q zlTRmaG)API?J%>5s?(e*12bU~F>g~*Vn38c>HywL{6^uh2p=xJPOsnj zb-hJ;oi9A`EVIikb`bm;dbhfDcLMxc<4*?EuHEA9L=g11DMPCjq*U8z{Lc?P1dMLc zuEGC0;qVznf{P_l$(T8{mN%fkohRVE+Gf#*ZE5RT*Qv!!uV@Dso5`ZcrzUTsh;x>; zPovjI1dEz?xqvTJmn-*Yo5h5^%vg?GN^c_loJPM|19+h&EIe5bvPI{^67 z0Jr=7uWm&w)a4h_N3nTsA7uPGxW57Z64?USr$z_-B63zoC|tKhm>8e&_%Py%N0}G^ z@&OuB9tDjDj))XCbCGRYBrtyg4g!sHU7ysjy(Lj32q*Lvy+0n$_$>z&(rUm(WGgUbb5ju?L5bs5&KT1UaOv&D%25w&8ErzZMUL~Sh6cY&&3 zREf#L;TW>5|7$!2d%w8Mkb@T<^qh0P&Sb@P;42Ov{a(a~vhNF3(8tOoa-`_O4|0@> z-BaZZK%5R*{sy2?Odv|HERlor@kAyi`x?g^a2c=(V)f(TJbV=lg}H3S8A<4l2E2#C z0HMu|c9Cg#(Kl-~FL7K{kC1`nD$g*$c&u_>hQz{%K%|~8+6iWNm~qPx!%i>PL{k8Q zUTsT~xTjfATvp= zj>p5Y)0~m?hr?DcY=`YF?BkK(mg4{OLMjdDmn1V4JNMx(qH(|tvx$co3+rO|09PUB zFBWe(RC4)V6v)(vEJ{rj!uz{R8bqDIAJH{ztpOV}wde;I!$lqf0U>Gza83rH1 zJdrJTn)5Ew^p@O+@o{9B9etx=O5n`8LOhiU;oo4+-5ux!RT|bD>-v#FILvtciFfPs z9U=YG`pkp1mB@rr+T`V`C#A?3^-fCNjjY{UW3jht;3wn_boY6Bl7+DRCF`=ChqL^^ zZwZ`u;!@yQES_OIW1)0y(=y>iSy;Wk{u?4^Gv>;+9r}#DcQUNBw6`P}t7i9qpdQI% z@%kzRrG}rNM;Z&x`MJ~kt@`_Mnz=_!$xT=XGPXt^TfGm$(6TpvSD48@UmK0%j~4i$ z)e{M{8?acLvrfR!TfojWmDpjy`){WQb4|cd&X#AEbQSWSnNE)d6I<9hOlume(H_4= zqvKqwIx-E_GPg776MU72WYvcb)jFcm^GL?2*m578s%7xX^$v9c!@2l)?{v6wC5j^9 z_A<#`RQJm@-e$YZhepYWVJo=}Zv0`Rz%Q#YVKB*v-1rU2Ppq^*88b z+ZKTyY<@hp>tPft;=fnIdRI8{@AnULgbBTeCN|&;9ouf10p2h)_6@g_Fy1h?=YT_f zB3HLVLI+}StG=bxTqgnLlQ3&%C3yu4F5WNBO8I-zm=z;;ZJBzlt&K|Z$Q2_ZT)bt} z3zy$xbjE}JF`mnt(lq#X%~?B(2!D>U@ur+5ro%718m}!>A||mdJh)D+_Y9p%yiIR`+o=P(5hPH2(tQ2U3QDQcnGs$V&T5JHO1H7Nj}w~P z(5ZM^-lcfDi8AL`5I|z9xfI2s>DN5?M=*->v6~>(&tgfcW&x_v|9N|k&wwAf#DwrB zq}5kJKdtTb6=B+Gv*xTPPyaD$RJC@4pk`cOR~x-FIk9n@@`uzUJw|GpINsHrG`Z>q z+igTgo;Ch#E9X6j;7?ghdAXPdM!|+_lJQvzxC6@AyNJv;hDk2LTyB{M#_>fI!GFMkL2R*_y<=Bq)o%M^L! zZYp=SqrUw8B(a#?PNtz~I=8YmUvH$4VKb*rMX3{ACcarazL}NxAghAoec8xb9Vbf} zcLUa9D);Ntf@|W53r`ZN6^41ovUv4O+BmUQ`AF*T-r`*6F#J(mc&tOp2iqV6*_s|z z0VBOiiJ5A*UbkmG>jKEt^lkeVFN55{P(S^*uQ+_XNb7G!HdcJ)ditB)g(CO1t z@6(k?J?_9EB8pY<00JiD!K4CD`5Pw#{j&H!aujK^U!p!A;=2m)ykAh8ChH1;EbP!w zzLpLF7x!=BaX9d8QhH5RtDWtSo=)!koQI7lXwRaf_ps0VEI$?6xGhKb0MPef5IGYj zq-3UPxYA`Dw1}=K#1M4w?y-S3HJx1@?QI%u=l9RotsBfW;m{qEWI@bi_v?Z70w6l@ z;WLO`@2qe=*>QbQW-3pm_!AO=UG^*@;@z6|%agR5hgO{Hg`680+pd~4)C(f={@JMw z{)mI1ZCLlYUjdJXH>e;{k2F-!A4?_FxCiL%T4CU?UtKC-Ps1%=kgjondf9$N#IVre zutA8kg5bT3Iap4A6c!;U8iT-)kNZW+P4SoEaPd2+Si02|NxhEC$L05&*NnLBcu}S)iYyt+*D!hl>4#-*1%L_y0KIA2*=;{iL6;!ql=>C~O1n zS^XUAbgIzo$0*TW)h|-c=l01u#4J8TBgx=a)Q)9fxiqcN&20%Ms(1YZZ@2D|c}&6a z3a{a0YZpu)9NSd=H*{Z`kNBo1t{E2gSkNDb-;M6~ zJAz|3gGG0E0^QOju?A3n+=GhnCmCA|RSs}0((=}UuPn2V!eJHaZ{ANs15bg=YF=ew z&lYMnC@-HpJ^rt+?;3N-qc+oED~TIoFwOTN?gZ~gHw$-U8lv;NBqdxE2A_w1`G8T{uU%Wy0Bk zXSpQ7))IEUEjq@M+E*+6$NqWPzu|Ft!n8UILm#ifW!_~nlQ(^=}I@n=|C&iqksowc|lBjYtNe<@T1OQ{{D{6)=}4g(L5EFa-aQ< zKe^5JD^vcDGx2)HS+pyi3-$-Y1a=yqisssvE}rRT7p^Rh?G_x;50@R+q&cr*)VKmV* zsB?-e6vr!X`bn$pA0~nFqPpFvjRQavGJ;4i0d@r!N!_mBCs9zt6hx!iAR9zZMQaMo z=n9u7^3C zbcb;uWi{^;jQfqS0{Y#&Yf;J^Fjx5JEB7_ZdXJMBfWgssK_#t{_LqwCnXCQ6yh z0!YiJTC2fraMwBHq>ny)X7E zUx0Ag2*eZsSJ9S70nLpa0py|A3^}NtDXnd3)5@|aMQr4pDU`mmomud#^Ag5ApC_-Z zmsQ9j@S%N$^~W}Wp*cy3S0GyGO-?B$6nzY z0L6e}_c#^iXmB~fN-Gh7EYZCGs8NE17>8N|+*dlJmvTTBS!0YxZ0|<~1GrB@Jyi1c zJI#obTPmD1l=NKbTe8Iyb;DYT1emm&mh=EqFPuI;{SqXpx<^q%^_1u^g`fyMLOguD z^@H>P;#kWkiUI$5SI|hC8IILK{GlOrJdtOLO>eA@ko zWkG-SZ&W`rQ{guk=C2qU^jGR~+F@MGN{c!C)z2{)mLNCNxL?Ty2Ur4_18Ua4;?#q6 zJY%^Up}~ZXLmuK|y2|V?D5WMb+F$dZ6kax2~y%5J}QGe{#9uDyA5pMyZ-op(*8)Fr*Ba`pwa;rBZ zJqI;JIk*vp!EwujcMSx~CG;LX7P3%SY;W zP#0RY05#6h?c-m1Wi9`o{{2mD2OPfJi+uZ5UnBk|8Wg#x-VLTiiw6fWYy>jY(u95P z!ky8Hq+VWUyu7ltxGZb`Re`I4UW;N1VOHVp?4U*j1Lj0%=x$$_?yg+i{JlzFUT_N` zfQr2~%>MY$ktL3h9_1~e?<2CWryyIKOD^o=rO>0}LqE~_h^&RAeMY!@lL`&d`Jc}@ zy8{1fPG}Eg#Wg9-bDiLuy-$sOJDo<6AyRw2cV9r1#6lx*x?85VNhI`mqfeNkiD5zu zr5PX`euIT{zMAT#+Buq2C|0hp_9KsE=Hx&$)=yK41>N&qn*dV+>z}Azv zwAhWtGk61x4;I*6irso)c22N*4&322-&`zFpA2Qf(N~S0r zSs37mS@bND*ydoC?T;lxIWdEshzAnv+MKCd8vBC&sG@J zAPiY2BmOSr@QonNrQVR;{Dp#a8vUNisBH2MTouQN*K{Sl#SY)wJ57PRcq82a)XUWP zZL2BKiT%x#W!FiKw_3-suoYjq3l?I+yFWToH~lcs{`^k7&R=Jt($+7j7Wu8&e=I7C zd;)imLc1;@1n9f8^lkI6;X3_k$0=+3rt=M`az(M*>PO4{^iPGiG5dW)hkD$7Vc2HI z8$=H*0}u(uHPyF5&vDb27$#2F8^)i^`wC27*nP$Lv^a0OhLJ~;cb*o7QoP@KeD}7m z{4#NbS6a5-U;o7=?GslYCU8R7&Z5X47Zu?oJ6(^0Tayp3VoRzlY59j?M_C0TF@r9@ zX49*zEEj2YNRg!(PYvIgz{AD4tvd(ABL2G<3W0y&BY}EE_m9b{NFDM9-KLNz2r<9$5=I%m1qd+C1klHx~EGc8v z?%@e{59f!w<7)>4mfef5`nC!CGdV-0o+{LgV+a;u7UUZ?wn=U}K@vv}JwpS9w@l*8 zJCWS(w!gkj`KIY~1uZRHNB&i%)yBk;4;r?e#yOD6c-4!*WK3h}*zgvv-SgMxQ%+CR z@hp2}l})0U5&71Qpm*}7Ghd26zwi@cKuTGaq#3V;Fjm35jR%23$Y;kssx4hPR0_S! znbDxU^UmLHQdphsT(+t3kyf^`?|}r@hs?SKwi_ZLjZmjXp3W-cffKJ>zDpir;|}#; z(7m7jDX@=ZxA>J+p_qz-0cRQ+qV#znm2 z4u8?kEDpi9Cm+acUo!m2Bk2^F$fB3#Qk-h6i{-#ER;R3i8)5bIJso$K=r4PM;n5K$ z+H(k*sR@uzF$XW>ojqTkus^!f(N)Elm+pgJN)-1=;OrL7tN9HneZy`UF}MkkHH zWU*mMZTjvTQH`psDcu#+Vg2Oa=sRb2FgwhK$DUa{%PGTg7mD+*z)8p4FtxEtAUzo; zt{jiF#|*mU!RjX?KPo{-MbLlBkmj!;c|P;Y8C`H&Q@7<8E$OJAxpGFPtn>(8?3PS3 zhKWk)_n5C;AKp*ys4B)yJU`pl$`q=ko0;mtg-;x|K9ldwf&;$JDS3Z9Aa*6>Y{@Zw zS6`vKr`cyKglbalqmd1?<$3DtHd-<-3R^H84|SCnx3`nsr7desaDeLbP_`D+|F`)7H- zv=V;3E!Ey`kV3rs1l_p6e2$?Tr!urN3oP+pEz*r(g-O0;b?eh)15Z@OpUwJz8M#n% zb*v(uh;-#$Jo4iUPn60xV)&osM0`TlOSPQ5z8Qx!L#~b{o4p$*_dD4VPUyABS>Ins zi$mBix3f|19{;kBZ{`I42ZsF6dk3Xep&4x2_DA)Ucsa?mMNv6+7n* z?aCZVZq93@6EB7vVycGy5y>}z|0_a);qveYXgI>bqj<+E)pP=4s#0uBi3*UjIPMg? zm;7v$Is|6{FSXEkg+JyHo#9;_qd@jbWd8RQy>SfQ*Eu?G!h;g$OACEh(s;v<4a=)y zmF$CMPj>X`YgW@#oTCsQ7)Er${h7($k37fwGrABD_74$S<_WVJL*mFL%|pxD?#J7% zw!1MB4I%eksfZT2m88=-r|LXnhxhv{f!Ab}Zav_8%vFNR&`mcj>jTtn2{NKD#v=pO z8KcST##l&0cxytVO5$XrYoR8jabRPIjeyNfn=0>#eK2IL)I`S{z$KDL<0Owa8k$eJy{{|qcK6VJ zMlTG~8+1`{g`rzGs@go{EA=jpKB6xh)3QI|+*=^mc&dgzh%B8=x=9`%J=aZ>NoH=u zCi&Kw%G#gn5b~~y&YRYDJ^h_n9u)P$u71A1vV&_Ol_t?Uw^Ecow{}~z7+2_ZUT|5w zhrRW~;atj0rPt<}iN@^QG_Pp!g7IM3)t_76i4MsMcv72bZk6)wbMqE*^3k6!DZdrh zp>}Ie9JF#NB5p;~x4r+-XMNDU%1TPG>um}81?;78?~5`%Z%R88jBoLXLkA%UIIt0n zC2CeUw%-tKs1A&TH_=w;A&0E)onrQRFfOn$ZNSToH6e~QAnh)ey^g@zg0vIpH+(DO z+?;fnO`e3AMRWH$Tg);=egn-sp+83NeHZ+?lgQjkPv|%72wFRsk_NdQ3vpV$+e0Qv zh>mkkL?I4^R`qI@3~7!rePq!DYrl3S$6ZqhWB?6D`FanrWb_y6<1fy~WM^npP+AgQ zF8q(U;vIpTwolek&_P5HlLobc2h1$QW=GQz{iGM?MlxN+})Mx*4 zB1QDSEGI!V?Hvf`puM;PD6A`Of>Bf@fenMM&HntT zjpqEgK3ntfM)#HI{Tb+uh!O&rrizX%PJUkYZ}( zt~Fpo;WUlJt=;#hNNvj@HZE{#9ML&4@$PJKdO98*jC~qhj(s|SL&?4tQ8la4tB0RO zV2JL}aF96F5T2k}@OOVS@SGi}(3=OK#{SQ;TFO_P9Cw#pTE52$nf=r8GqqfOcuBam9` zYY=Egb0K;fm>{K$J(0Ny0NapU1bI^S@>9Bsedan@QDgigOuZog{6-NGdKV8m01H6- zK|Tf*@!+}b;`sO^6(0#EnrajNJ+CyK$p5`yC-S_UF%Hm3MH0W_m6p%PGi#CVT{G@tGKZfnaki%fAZV{}kv0)*jjWY-JqT*h4 z4Wud_S^wZ@vXft7_Wjx8MO&g7o4TxkRMPTy@2~sRVuVIm243vFnV#fNKUvY!OC>)1 zQcU!H75a?jb=o}~|DLq{wjcb;mIq$-z=%df7u&}_pS&*KxSl_h9J*!!7ol=`>?!+r zI2o}hW>3Stl&A$>gC>!IImCoov9{1oocA@utc`sT3_I-Xb*piN*ll0kC9hb63ZfGj z9bn=i`oWicr2w3p+^O3P$4|9IoJ$~J^Lt7%wZ|JyQ!Ce-kMimx41exOl+SGAuR5l4 zDsW^s<>7!m==EL=YKwD2OY~7zkWeD5blVSV@I{1p(2{3qZ$DW8s+d%2964x<`^MA@ zn$(>lP4*_ellauY$5yO>V*N}HLS{2s28oinqKQ)MVvT_2JZI}$l3vlF6Sl)yZ0I>_P4Ve@&! zA}wU=*6ic1sM7*jX9ezLs%Tx|#AytEhtqDCh)Evd{S@y)1zk0DmDri=%sn_K1N}Eb zP3MwbW06dvhnDxHPjlN^P3t|QY@%yDZJnycv^9l-&ChyJQI3wFOxlmCIC#AnUW@Tn z%ve94#!id5ZP)VnoV&3}=#!$NtoZp}2UpekBWTxevm)rQaY-3 z)vrF=;PIEH_XR>e44CUko2g7#25{FeFl6lT1^m=2nNON~dZ)m`<@_5>?(ac&Sn~Ej z^{Y=!26=*_^bHIg6XO5>z|W`R|IgJD_>cU*kN^CS^#9$q{Ff{M&=NTNd5GwrrTHI; z|GSm>ABmSwiT}gqD1C$aXR!bfpLh8uz2E=*Vtnhwr3#%A^=mZb6yre?OJ rM$RUdR_>qTudy@?2KIaNG;859j)vwK8cyV5&ZuGNb(>Y