From d79bffd5ef3d30bcff0f2aebe35e70da96241eae Mon Sep 17 00:00:00 2001 From: Mogashni <90313394+mouxdesign@users.noreply.github.com> Date: Thu, 19 May 2022 08:05:43 +0100 Subject: [PATCH 01/28] Update liquidity.md Added Channel Reserve explanation to bottom of liquidity page --- guide/how-it-works/liquidity.md | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/guide/how-it-works/liquidity.md b/guide/how-it-works/liquidity.md index d3373132d..ca57fe468 100644 --- a/guide/how-it-works/liquidity.md +++ b/guide/how-it-works/liquidity.md @@ -306,6 +306,49 @@ Consider how you can help the user with channel management without them even kno By combining the business incentives of an LSP, clever engineering, and good design, you can build a bitcoin product that makes using the lightning network very easy for the user. +## Channel reserve + +### What is a channel reserve? + +The lightning network enforces that to protect users we should have a reserve, called the channel reserve. It is an amount that will be held in a channel and cannot be spent. +A channel reserve works as a type of insurance against theft. If a peer tries to cheat in a channel then the other party can submit a penalty transaction. This transaction will then take away all the funds from the other user's channel. Having the channel reserve in place ensures that there are funds available to take away should this occur. +Each side of a channel maintains the channel reserve, and the protocol ensures that there is always progress being made towards meeting this reserve amount. The channel reserve capacity is the amount of both sides of the parties combined. + +### Channel reserve amount + +The channel reserve amount is dynamic and unique to the user. +BOLT 2 defined that the channel reserve amount should be 1% with a minimum value of the dust limit (which is currently [354 sats](https://github.com/lightning/bolts/blob/master/02-peer-protocol.md)) + +If a user has a larger amount in the channel, then the reserve amount being held has a greater effect on them, especially if they want to use all the funds they placed in the channel straight away. +To give an example, if a user opens a channel with a total capacity of 100,000 sats, their part of the channel reserve is 1,000 sats (1% of 100,000 sats), and only 99,000 sats are spendable. + +Both sides independently have a channel reserve. So if one side is 100,000 sats their reserve will be 1,000 sats. If the other side is 150,000 sats, their reserve will be 1,500 sats. The total channel wide reserve capacity will then be 2,500 sats. +The 1% mentioned above is also dynamically adjusted over the channel's lifespan. So if a 100k sats channel receives 50,000 sats, this reserve will adjust to 1500. This adds further complexity for users as it will look like they are constantly losing sats. If a user has many channels open then the dynamic form of adjusting can become confusing. + +### Effect of Channel Reserve on users + +If a user funds a channel and they are unable to spend the full amount they have put into the channel this can be confusing to them. + +From a UX standpoint we would need to consider the following: + +
p4g@U^VYDLn1U`@!|5In72iyZ4 zwA42t%#t3jm-x@Tsk}b5)3V=wuiMj?Anv*847&RJI!-ug^=MXzK2u zx$EXn7v64vE1tiw`0Y4>p3;vz0*5EAB@A{Pm_6>+AvfMa?8j%}b$1v3cvr7*Znh?i z >w}OPicdRBO@xrjhfOe0SptGRstd;A{ z@!n4v>EWHWDR;kLpIs`~g}cRNU^h*04z1A4Udm@CH_DL{cGL~sCGr|w81&HE#R(t& zd{TW{Z??s&@%=U=rdb}}p>SSF0;Y*&zGZ+EBy_n6kr*qnhdUI|*lLeIs9dy_!`Vld z(8dc>hMq2rzB EKIHF*xt@H-$nSoUWb^lRTwrROWS)#LQHJ;dNfp95tNfK z5IAHq5igw7{ciZDpR =< zF+OU3#{Vbm^=y2#d2?z2VB!(U!*8{_W8uBJSE@yBlc0aXnW4W%LAHcTfW;V>I`?Jj zsL!q@Lba8d31Rc2oww(3$2dC9_t0_dsLL* lnnD0BS=`e;D(Ap}jGq8{dzDD=AM^(bGI4sPj zG(l^UV+Ee|M46+PzKCc}r7Z6K@mMXk6`JP{j9{a4;ed;M66`!@%a#pjlIZ*nEW*RX zKGMiYX8*S{=##~kU&UdCdmHFP*}o 94ZnqNK$4Q z$-~DyJ8czZ>bWNb7ZSl9KhloWen3#yv(24iU_I3dDOK=vm@tg!L8!Qs&sB*=T5rgu z&RzN0S*~nAZ<3B2odf0&Oe~-Hg)b-0A5qjoy&asZFd;45=HSj?NwIM!qOybRSe|qj zn-s%#EIjyfyKI>7qi*ogAg8@MsRq49`uKK<+K8VCnSX!QxKyqeV{K&A_@Le0?Tu{D zMnE+5C|@-SXAIq5H)~%Gk-6~9bq_wyvX@G39vi%Jl4+T%u_QcO2?+sw(k4B^J0X1_ z4kSxLNG}{WJ@Jn1hSjo>RtA1>fvF0r5-D!vcZFPtq%D h zRh~vVN_*sQ@mu@vCRJJfr0Ag5Vd$V8;q*sdfxhtw*fZE-7VBGN)0mU{VDm&`=X-GV zMCTg$i$K50Cbmt2&j!+RuDJ~vQBoI&nb@?sE4P1}hh4s<;`GFL-VP)3LSCH)+3#AP zVBeaq1=9|b2o-(s7|zL+dsN@1B-^;u=97keX3_E}I(zDi1Su9NlN0N{!a8io@57S` zMpfpP>FJ|l`)r3gdLs~~XOb5Ko!!DmSOOehg&e_i+arIDYyTT+^klQ)H-+0qtens* zP{r5Ej{eoGNAzr)7A_WR$GGqWrmMm4<8oJNP(fatjxGFaQxjENMV;s{wkNA515& !4G^gSGTcNpeyGCX%-0c;T?_Q|bMUqG=MW zKa*Uc%(x80TrmSO5eN0b )k zGqQ#CjGhpeZ(C6yXI%cS-BHijn=HBZ2ecYF?kSNQsfH8|)PZ^o=&%pTMnEb%VYEqM z; N9qhzq=@l$F_=>17PclY QNM|5>*~}8d zgmG12{2j1#8!vckIVRJf2|dT-@+?-t7aNDFAt$OE7Y&)@saO8pq_dSj= zbppz#+}+_Ey@n=kFermgSjk*Jk}Ni|rwj^%a9T@TB3kM(YtXfrIfTPI8{ z3i`4vg`7@6kF)hz@VQ^@S8pt|?@KOR6ygPjs`?_PiM#LyJaA(urCzmx-p+v`_}CXu z_4Mb!_H3Wf;}#P|pN6}J#t}CCL&29LC8U|Di?2o+7hQ5t-ql|%zzi}8DYAsTUG9Ai zo%A%EzOo~D+uthi+-17-So=+WwETKn$jDo-^@TUm$z`2Mbr6|5DRn`E-t3tK9m%kI zu6dAD`Bt;S6IJ{sD_`m2`i+Eok0g@o ;?AyexX %*t5c!=+ga{hLHHN$fygEr32QJlv%#&u84 z>VUQqA;cn&gp@m5mhM^uYe^HCWru=MIyjK=kH4cMT><=LMYx rqvWehyKwuz zVXrk?c3VYY>89A|*%Q(4nv)K9`R6EIItgnNa}mlVw>V)~dcis7T~dDSZ}D;%0Le@# z?a36&XyrrlJ#4Z`?^`l7+!kBVt4hM@Zo7;3*LF>=zm6_@BZwLJwtyQ(0*^)QwsZja z4B#$)4Gj$){zo!&zy+ W;~vt{ilCD1w$2d2t-#wfv$$|%fhUC>_Ur$B zh`;-PzI7Vw-;rq&*8RWpV>+E;7mzqedal2e^gDVZbZ>bNz6d%D;gGW>pWzUj;Z**$ zf=Fh9dt*DnS_%DmHt(||A%bSNB_3--*QHjm5dyHOW4Q%z$7Yf@)k${x!F)Zt%+U{a zn@0kct&f)dP&o^B?+=!l{{H!G+&P;>$*KM6etSCzxkj?!-kY1hDl6YO`l7P7lb&Pn z*LTNZ8dMN~KmmwFJN #ROQa>+bf-RCuKYY)6ZWOUk_W{X~kB`WnDhy^St&>btZq zOLnKg02aD`;xO3^JnQmB+a8F7uEMxC6|A=BPXLD=9$!zD54vo?0oH~lZ+b<(j>gDt zHxCT}E=QOln Qg!kP*!=j@HkpPP|tI^y31>>Oc_2u(0# zeEwlhba7A9R0E!iZ`9Z7pht5Xv|W wz_M-cla_NeUbInw?D zTw+}PS|VZlJ@^B&eW8I3;Pym)uR;+X>|wB|r#rPBe-~O^H7OD!U21&z_NAJAQU+?; z&vV;V$bAPMt#%qK%P *8-So_MhxQgH2bI Qh V3j06~g73u>^parO44sZp}v)XvR~CmB8 kB(~rHKQ6n-;8?$#P^FR|^8G3zgmD*Yg zQycN_EESR|Xx~aMCS1QC6n9RMYU2Ao(3cw4NW(U24a>?F!-7%$ouj#INHmw5C;w^1 zw|`VquCkAla rZ5QF0I0#+Y zt#Sn}VO0)GI80=x^Zc^a9g_ePkls|cFK|Z72YHukdmp?vHG>w+n7}`QRYYr-DMBgW z^Y2strsuT(cLFqZn6N{YMTdXmQCmENL~1SAV|TXt2* eueC% zZWX4)9yVQNzB@-I_6;U+4tFK8$TR;vSYZJslo22xGFZzQuES}pxR%h4 csXa{Gl{^>Qpv 9Hz%<=>h@*5dau&e`Hz`fXeYP!Ve-j`kc<*>m-N$$1o-SnOEDA z9C{P-Nm4d7@X01)E##|!Qyd1oa-UJ>22GCvFGUH#h$8vD>^OelvII_?oo!E-4Tq3- z&9lAus*?jU>{MO13b{GWoo7!lS!C=x4_IoER*Kyq!s9UNP!LiZ7j79eIFojR@Ocdl zK&AGpo0kci-B$#{vjV|iDm8a3`e%K!ITFZM+j)$gJEk!eC!`|A;9PwGuLVpo<%{Vd z+d6IXv3UX&1#<9&Z`1sDM;-1hR=uiF8DyaCmNFMBDSGVV{LbR~>4?bq$ym_#REhos z`MZthx%HAs5ncAtl>(sLG4-7oRCZqAk=if({60HH2?tRCbZC }`2p9U#jsu)hr;e}utC?eN}H)^=Vx=i%gJ35XM*e?k|N#m0&-x&R)u zW)DM`q@TqnXiUpJ&Qv wCyKaPXlXNr4=JL9ObV}&o9P9_BTA@O&>Jfdj*~$RZBm(>p9;ZOYpgkR1l%4 zWfix{U;3ipt3S;F7i44-V;@9Ho4&}iu9|E_H5+w@`5x2ls6COU1|hE)Rc|iLjpUA3 zaI4iF ?=&xd@o`64EN4 z4#^5g*y;o!k@f=*^2(lL!_wEb7-jt%7~+KO*r}TyeX4e=hK! -eUnw0@v~*c;?&$1P{tLslE#3!7 z>eq@AKs+@2a1U o9Cs#2%QyUXl6JF=lHo}?g_lG!#zb!O_G0Nkt zSGA)nOGdTw==`#>?quf6#@V{wVqZ9J9zLv!liEw Yvewr?Mf3LpIYdh(d zG&Z6+;Mfyypwc|Bxo)>xVV7Xi5_DQ=h!Q;J0nyrXB739j>dx98NaHOH=S7x4;6n{T zd6k;sGpe{YHfJ9T`-H695>uE`7}5@cb)(jWm`cmRD6 w za*tZc%50#o^k&Dyr1u$1_Y@RqIR4)i}m)Xb9|Gm|!B9BSrC0kJ)&=x$Z2$riQCO za68ue^p=l*<&Oy0mfh=u!yk*#lPg50V1P3 0+*a8^3bua@UDOy B$d)K* zxt+T-M{;Osgu|z1iOL;TK}h~*@2vw)NiTG*{vgdsIyPerIZwInf6J>N+2+2uy{q z$ah^SehGd+Er~o>H@t3BSRUx=5cTXS^LxtlV63Zd_t!?CFO}P0VlQm!{lE3wZznK? zziap%@NYV(0HnP`R$ Z#ia(`jx>Zu=H)`e> z4itSwP2WRVo)7vL9`f(^c|jkgjaV#_y~_{BqAD)wM6`gJ7w7&2u^B%eCcYv|?j_Ts z3F=graknzHe|Kh5|Kt0`p&vSE+|nxHf~7r6=kcSUoVd}MP_u+ltCn3GR*GO+MZpJn z(Vb(&TC1`xCu*h#p7X3}om-;(mXdm3&Wwlc`9SPJ%p{>BwmK>Yfv6$8LyC5KC(g1h zQ9kl_x!f*(HA=d}5W~g33XHxD2x*Orwbifm*o}mtic2LaFUlDy19`jBc*}hU4sQOz z#{=!_n;W-*&h)>29_=i*c%6|dvr*fWrp!$EFoSTL_e)EPCVcj8NR2lQ{3+R*1I{)} zCXxjdoyz1bn0yo*+2v};TIXB$f~?p#g&9TE^AQyg!{~a}{ne2#`YpyKWk}D>A3wbR zu*XARa_#PNy%)g+sw&lm?jZ6Wbuq7fjn2eR%{q(2?K?QK$vI&!AMINRmc2_UCO?Ya zs>0Gcz*(>))!NS8rKyo4#YNDL(kg7V_ES|Q*Ap$o4g@|u*I`O|HgULTiOHdD)2F`d z)k*#L2JQKJ#n`9lT)H2x%9jR2$grP!yeoJ$K0u}{oIPm@wJxc=y|x@?TC;w+cn~B^ ziY>eEx8_zB)B0%RGoHbmm*mq@K0 GY#{$GxX3oipuak2#Ekq^#J`*8bmrkhjY z5#>4(Lv1Z?8)W@MepJm9!-)eBH@@*DL7Ood@8ajW7I1C!j@wHR&jy=ZrL^GEn|B|c z(F)1YxE-;*tA*52G|Wd^pn{Hn82Ctd^JCwRZ9gCOE+MjjS6pe;A?;QYJ45RBsura# z
$RTO}F{|hYaU<5E7 z> eU!|Zr+UT}AyR=F%~qnD!AB%o8mGG0qnW$zWy6Lg^0{%^e?SDpq- z8Lr{H`e(n*cAPaCz{zb+H1)nDCdnlMl^~PqB!ca_oUr+KxdhYI!v#$i;NshSjMh$w zKwHM}42oxJZJz@qLt@1%4 ziSd*u zeR{u^u`2mUxOmextH=tyc=YqKjHcm;{IB$voq|3#Z7zQA35 6(j(?2G0&t-r#uGE$M5cc18FFRm zSt!VqO?=el%C2(y%@)W0ZuZmpH2K^xO)Gos^OW)Z;JR y>owRbj7b&`{2dEup(T{-j4K z!WV==Wso*BU_!tv#H?|k5)gdGVj*&tfnG+)fIk@hD*tNcoRYHO$ XC!S^wi}AI*(ti>Q8vb41{&nb&kjIr-jZJ&0>_wFY@89>vrbB4I znxa&%lB&GBKTFy#JQEDh$`<=K-7JTXiN03OnM#~tHBD&oa;IUvTdi>bYT0W~GBXYP z9}3L1`pv{RR*t<;WnWrn$CV!WbK^!!9lGX!RarandrXYHrJ-u$TN#+i7>i)o>2-0* zgNfHkNgGVtM!)g5^;-!^nJf%vk7UZzjTc$?{+`^5S62$ZD}kJBO}Ys=kZ?(?pI`3F zAc>VBr0GaY6$d+fn9=VT^X#0_hc%M|WRhd!^ayYrb&pASNn4$r_3_2#h8Y0&d?E}) z#o3|^$5Qi(T-7NjE$f2=%wuZsp6!mNxfHtpHaDF;^4EiNG1Y|Zz|#ZT=K?oQjc LrO=~rAD{HITTS$0+m! (+7HJ?I{hRpZ-Cl)HTEd$Ez$Cj%sIFj~ksd92j+NtrzH zal+a2`vx8K@0DBe>+QT-rvvw@W9w@Kjm>gBAZQTY%*7PGE4w?%`x_*FQ1iYX$dG{! zFrqIuhSRR(IKSNhNf%L?fMtbd?AEwHcKg39=59F! -J^KIs$@~)FYrkWG3+M}iJ zMH0XukAFGljdrAm{l|A{(LXw?y`AaGlorPQ&(E%c7{ycGA*`=sp*d-8|M965f_DJR zcl?n5-`P2P(sjKd*cWinVcePL^Is2A#OE|Cj`ZAf>YKUGXQkSz8iC8>`|&M8>gI`h z+~3WM8~&TMEJDbZ W1*?y{oZ1LPV0HOH+-#I``O-v*4{-%#!M!@TGMc<8mpIjips z!SVfPyPKm~fY4=OXoTPrnJ6#kBXDZt3y27ez17K1e3t#n0u%Api1Y34sWGBLF##XG zdZ4 ^P#>4yj_C> z8}}R3FLN!=Kc*9SGgb|%Xh&Z_Nm{Z#wssx%5>}4+08G{LA?E5Pr@S0enw7~LB{Cz+ zj6z9|9dDQA{T=!akWq(w-^U|(rd;H< tXbjV`MyzskKF*qA$8r)j%e3Awv@)-iEv^YX*4 z06KBF?<~rFXss_Yz;3~bexI^8`~5=%$Up~VB;0z3mNlZAMtY9_$VYwf+}Hsq$M4F# zn+0&&1jDB`vHV7SBPPjjdhoG{E91TB8C2iA* XQR&NYq%T^kf#xD&E~-@bCzsFV!f@KSLgJfC5+sOdbx#- znaB=XNEnk!W7p*V5$8{w+F`Z}f> ^n6`i2^r% zpx;dwJ3J!o11J6VoOMXYoXNB#+=xHEnXkn}^vNbxz3*;yb8o3u)}_U7<%XolqvxV9 zrVZv;SH2&~VY^_UlJhO0zAgQXBHMS7iN-7CDtDLKC$s`PXO}*YRMC(#QpPsctS7M5 zp-d-lAKC*jF2&3y?b1H`dpVKE!$&IVl?cu)i|fNk`Mo8i F`Kr#upodPPrE>Qx0a?-hPYrM7PwNijOuY3-lPbMvAHKSl{7Txn2B?>eG^$rS zQrYu#Jg6ykjie?L>vBD45~83wNO%oYzQTcCP QT2gql}-U_o17LUCWyjCFN zil8xfVD 77eW9{=;r9~rp) _Ix7aC<#$IH3H=#=X%=NC)RV+$tB^gNCy*<$Nuw$+e}#PCp+8&dryn8tAs&4q z`7Xzi?R}feg3+EEoKTq9_G9V(cL#LocdR#!yJqO@wQBTG5a7u6`(@PwM!bk*@s|2V zs-kdZvOsUVC&74uu8KxDX2i%#D?;=Id2a)|E{y^nx(;(0FZ!n_JPMiqi6^ZMq`#Qu zWNBXWVhKVfQvHn1ZiH*3Bb=GgS4NAV!PA0-Pr$UPr3$GfP4-BRvVLm-)t8f)?z}s# zX6g>^EEgNQfDktJvubA^QO9nJA|Gr;v1TSK9=F=jh;Q^Z@-O=$ ?-~XTQQ{ knYBKS@z^XU}FS2U*1TVA4p}!iu6DWt{9pYMA5mV zxwsmCSt(C1`~6NmUBANO3i$y7+qaGnbJ5GO@YBx)RCk?S<#!EbZ@}^hml~%CumZa` zo#SDKgGlj~oI$Ctp` #j#rQAgvvTA_`FREeWyr3yj&|L_Rd>v8&oEf%c;x@xKT! zd&!t$l;!!;^bNSLR(MVkGKaj>>$KtTH2J|@mTF Q WSIYm7cT9XS8|t1S{54vqN1zN*}q_d_FwpAXZG=b-S7W9bg0m2 z3IY%&kpBz6!igEg0de8ra5Yd>xF=LKmz25=I L~%j*A3}QYmxC0O;vSSE~asCS{n)_4;7a+TO448(05Tp1QB;2gtoK*Hz=N+Is96ED?;^qj#mpcOb*b`;G?Hr3ZjwR2XE;PE> z(@Am2v3Sb@Qp~SKHE}!!Gs2wO*?90o7QylF_QR=%eJr QjPs{Ffr?NJJ zN&5W>Qz925$cqaoE9K6EW%9a!!qzY33IJJws=NuoBVw6tCp>H4weV$dwsm|60Wtr| zK z(k?vFeT1i3i zT3;^)eZ@Tje1wo#_AT<^i)W0NBR<`&?OJwGkh%qGT0GUNAWS8;j|v0u${tm`CsW{7 z+9TiNQHcO0iV*FE?2_NuQ-&oakITT?<5ENxyi>+Ayb%zvtiJH-0=W7I?ia;Zh^sG~ zicqBXOQH)_Bg5Bz5A0tav+~bnjU|DwT2b2~y{MnzF0u1v8%69w6|3cxaIuu`e^}<6 z_%D=}AX+!bv9cQ6)7ZSnH8?9JOl;GMaA1xwqDW?m;~V-J-|~_B()07tJl;)!@w?SY z=E|%GKf30B9F?dlO2$p!rRYJ#goTfP0Y|pAkH?=4^)kH=wCuyru66r?85?IzmEG)A zR5SLR=cNTFNEQGs%;~EBIaAkuhWJ*2#P!a8wO6#(iIVO$#24FUc>7ZQ ci z%pO`!pVP(cvbw(rv?kN3VHyVuFda&vs)x+S%OmU%Ahvm@45`%CVkRZayb4gJy=wu3 z2 f(@CV%!a2iim#{EaC;j2Z5coH3#8#*7&zcRGx8*0 zCM!7D;GYmV0tj>Z-veO Ma*Q}|yg($f`ZrFx&H)gEz}kQfWu^{E%_suzu)#RWiQ$>Ule zSgoCbkvM8OgT|+B&m62BbEYp?Ir1yQu)HE#LhveK{ZG{^0I`?#_{&AV!XlX1l3YbeXF;0`c&GNWT3; zi+Glhh-$F_*t#6=ny>Fbir&juot3SnJk}{Q(H{nK T>iyV=6Q1_g&1;>+~{f2`2baS-783&Ksb<$22HQ z6O;5cGqltu$Lmj+@6MX!=3+CIDim-p{bqOd>6h K!M8+ycKSvNJvE9CY^RlVgt(u~!e*)kEVo z^Lc2gy`q=FZ|M&K&{s8xl&O(NaSny7ixUg~JZ7vtB39LRwtevv^C_u8{JoOkgYpyR z%15HDqSs)B&-5a48sS!{;KeP3)r?o+i7$T00#|}_&V$0wDjKn%-I{2?FgcWCbUvCb z?+HrPclp7ys8(FVLQApt7LGthbtpLdhF~t&IO&D%tIlj*)0)$By7Jh4WB+}e19H!u zcp96Dj!j>!=bFQhF||5GGK14%t0GUby*v+DClu9@iv9U5lsFoh&JN2;bBpsFvdib^ zph_DGA_JA_;74(vwo1ptVOdC6X2j=*f)eB6b6>ypa~B_v+Qmw~bDguz;r&M{ho$Ct zgBAu-Er$4&F%?SY^UJ2z|Mhj1?ZkBo_^|q=)Y)meVz(IQooDU&6~`Pcx{4>S#%a$| z_p?P!PC3Q$3Eht+Uac$*B&*j=W$N1vdYCRQ)-Nu{K$&rI^0VY>0X#kX@tcQSgcn58 zvmv$hYi05`+j)_6o4w(L_R5^3<}+bb$89S&HG#f0*1(>0!V$k{F3N?b$lP3xa6CQh zx(m9n;Ht<$85nt92fF=k;=ezMVjuPc9JBva7VEj)S!Bq0WRM?(ab?$+9ys)MIk!Q( z?$dR()CtRu$UqzCjw^P>dYKuRbpixJt!q2?%F4~sN=p15Ak8tVMhsj?J~Vb;It(oZ zZG)U{&m&oa=gmWnwhc*k;s;vm>Lw~By81%SN$+gt+x;Md?llZ^*MJKBVClis-QVUe z{^9B^zk+aE+Rd+7+NlBCttE3GUGmE#q22O36ln+d9O8w~WgM`nEJ7h=KGuVI$8vw? z?KXUXgJxX2U_gVte8a|nmKZ>_Vm&t87?=0dGNgu^DcOq{J0fr_Pkv=LN>?=j6=-3w zPx<*at?Sy}PkTs({wTpZ6aRDSgC7UOf?a$Ef_}yJ!Z#x+!#TJP{JT^PB3f@n$wfAu zUG&K5H7x4O3C#@td4$QQp$ Q zu1 oH4U 6A<5@9Um)(>Epsz HV@S8&T@V7T9yzoq7 zO((PC#7f$XF>^3L6fso;9m={