From 03d58045ab33037b48a392b1f6c6e4f7a9432d88 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Sat, 17 Feb 2024 13:02:25 +0100 Subject: [PATCH] WIP resource usage Aerogramme --- .../copy-move.png | Bin 0 -> 33277 bytes .../2024-ram-usage-encryption-s3/index.md | 195 ++++++++++++------ .../2024-ram-usage-encryption-s3/refresh.png | Bin 0 -> 23696 bytes .../2024-ram-usage-encryption-s3/store.png | Bin 0 -> 23909 bytes 4 files changed, 134 insertions(+), 61 deletions(-) create mode 100644 content/blog/2024-ram-usage-encryption-s3/copy-move.png create mode 100644 content/blog/2024-ram-usage-encryption-s3/refresh.png create mode 100644 content/blog/2024-ram-usage-encryption-s3/store.png diff --git a/content/blog/2024-ram-usage-encryption-s3/copy-move.png b/content/blog/2024-ram-usage-encryption-s3/copy-move.png new file mode 100644 index 0000000000000000000000000000000000000000..aaae369f4b7ecacd4b57ea993232385c0d40b5e1 GIT binary patch literal 33277 zcmeFZcTiN_*DiRPhDM-C0um&HpyVJ*1|^A-vt-E`L2_(FB?%}|K!SjPsxvg@S#L;p=7Jc(stWo4|KLXj2K^ET|SeOlhh(Jwxp*|H8gxk@i{p; zJYTPdp8jd#w@-p%WpYQ`GvP@ho``BPAh!j-sT$WbnQ&@94ry^N=-{c55j|7{=d+vC z8a7=&^e{0seKp(YmwoB1qB?1o^w(t{S&?8~IVIe@xkN5AvH9~o&dOLx=BaSL^khh_ zq1BP?WF>d}BU_gBVrM}riiZ{`Ci!^roT1;<8%nLVOXPNsdtcYMf0*dzowQ4GD4QDe zI*suV6Sz^C=iL8at4v%95~{G93jW(1z#t$%P7#W*9?38B(2HQ~N)ovndiSxkoE(ye zhv)TN3s#Q%)y2NzM=GH^4h{}kIu#sD3SR>wB5sTMU<18RZM^jxDl9D})~j}EnrjW& ztiM{zDKP3!mC~wqdf>7-{(ij7+IVNS={_qfZ!fRQhStSiC+BFT1H*8hPC%Yc#at66 z&B2HaEw~o;mq2mSMk0v-yw<*N5}Wl*vbXPW=mst)dEzlhe}o{fi`_OL^A>PLhvO;N z`S#BYqlK^FM;l}QTT?Y~Xxiu87J2s(^7`2KI$&YJq`~_RxGKFb&TnK2Z&g)QduOMF zwDbpeZ7(ljkHfY1R6;Hg?j&TV7F4?qNerY;1sZD8YDU{!6DQZ6DX^(*(}lf8LIPs(p3Vq~`}l}bJhrn*N&?EiUeGWt+}j#Lnm3&} zvc9{V>>EF0-`f?(%k6#Uw7=NnJ|**ANyK)-zezrokVo-1gJLrFK&kU^8F%tnWlbMshnYJcGo~ zk2bkY+6jbr8sRsZ=OjqQq?q)vX1hK?1O@!{{RIqDsM2*?f6{3{erY+wY;1SF&A2s~ z#BJ?IrjoXHFeZ%`0R{%f%18mtBb!mw%8JFlr$)YRP)8)QG4KnwaBw8d%$V-5YcCx4 zKE3fL_D{$mJTfjQf>FRrFRkBjYqIK#kZXRk`|aDe3$2D&42Z*TqDcQ!JIa6Jhhy0P zhJZozB8KhBa!(>5DQQ4uC4YKm=KO?x17CxvVIySmkRqo|0$+r<@pjFfsEW4?K==1z zGvpKIqBZrOtPkhW$=(({TVeP}#*KDDjN8J#2)tp+*RP{!RH^=jya|&(R2&?*gM)*+dec%<2}npxU8jMW(}{>snVOnr zsb=C0=f3nWEqw?ziX2b+FLfu}xFt+{>Xwh>ystM#xxIE;FwBUT7lOW%VK0=KEmZTV{gIbgimJumrezp*WLj|zY!z9^BS>s zxy@>4_$>E70XzM0!9qgpMkt?mc~?Z~gg}&{sic>>Q1}pM|fQl^T4!DTUn#1~TL&Kv?Uqdb2D}Iz{(y zLZP5r>qa>LE42AN4k-Z*O?XeD&^*xUX7-B7w{Mnv{+@3)w1L>93{=>xJD!f0m#A0d zST`kPllb4Xg*k>@XKAMlti9@tVfSGR73RnLf0ekTJlCy9dL62#ym(^fAu>Bl9bwnd zkSmu|92F~(Hqu$bCUdk2$D>Af*+g@6^s3>Y|ISUe@S`B6lbgaXN3-=>kV;8ena{wz z>dVn`vhYr%1QJr8OY%e!GN9>U^Q@2H2ZkM8Tvp8BwY0RW5Zl_YA>@)dI*TdShH+Q^ zV605tUFrK~btZNN^V$otACV`vNR#eRG4QNEV<~lTnCl4PL@Tonxz;H|TO0fl&n-x? zGD>(dG2=GN96$zTOX};Vyb#xL+1%T@obh2*6kush6k%Q8n>@NYpBuqaz90DjXJmA* za(6LS{W@8MmB%M0j0SUW-}EKtd!~N`@=Y!RO%F|l_MbnRekG_wU46 zVCG{@HyPx8ttz5P^3ZxtOpO0p{Y88tfCG)8%PIVmG-7LXK@m5*Li*miP52%%gF0S- z!}!n!qfaIHsX)8%uL?9}Fp-Ntf<;o@tcjrq1wOsSi~7&n2XgVf+i>ydzxYp7zH(82 z2owee=N>4dA8lyPr9wH-Lq<(K>PUdW@Lv~y>qqk-tcmuD2mWk90K6w5yqAp(ho_SP zg%xfCUk$qXDiPNMJfJ??-0)}AbDv`a(fnbwpO+^)pm;9$GnbwA9G(lhXTjhp+dXSZ zDF40PC37ptkpH>pi<^tWpQs?gp(N$VG80grbl_3DtG{i7sZfIVri~Gwgj*Om2{ArA zfF527($OD-JLwxiSvoC$K=?2^YY8 zdlYi-MNA4XgTRmw30+-E;D>fMD`w&iI9XYn(`6%XEDOX8%(%F?_TFB6!yvu?`!(X? z&44gA%KqabU0fa=ZB2zF*w>STe4~-G;Q|f%^2nB={_4!y>*{oQwAd8K=lat1BLyEz z<98Ph`aTR=`e>tnc7qBd7jGaF^{O1&kJb0U0&cnqSZaT%r7D|FIr7HPyC2UWA+35Z zf$<9a@I)ckRM+ikzx%~6=sXwr$dEU&Ohr|dkch}180=gtslhuFWkN>TpBrN({lKTR zw6xGNFu<7=zTPtY;T;YR@}I+Xcnr7riA>2wBH$VY`k{aRsDO~bAS85GFcFWOoP5b0 zE8dpvxxi6@b6F0dy9t>#bztXpp zm9+3r@$tbgOUzz@^sT+4e;-C>8C0xw^>+Nl$4YV`Fuf=212LT1(q;rv3#SV*yTeI3j6Z)gx&=NG#hfw zevj4vIa*{4Yy27`FDF;(kz5jG>+UY_yR);qHzXtk26@y`3nnTI?XsAyQ3HGFY#u1cEW>cjgWOF}}UF%J$fd>wx6i8eYU#NHw^F8p zy7$nkWL&zY9TO~QDrg4|0R#eG@=*1|$DH`jfXF}NEwi*{8~yMft}c>z|HIw8t1UJANmEDP|L4h^c);LX{L8W zrEfBPoeH}?tFrdrzn_9c5Sj%7gHp(P^!uRYtsk=v;E2nEY5XxTk6kWdDPHL@U<|i4UpEWK8t>^edGAdmh zG)QmSo0R?PSj?-+h5bV~#d|KyZnhat{f|einyDQ}nC^j2+4e z2>hdB0lm{y`;s{lVM$XzUPxzkxr>=!Y8UE(C#Y^&P=hD+;6Wf*Vvdp%z3?~_E73GapoHe83D$%M^z zmRa|&ULHG4ogMPK&WBo*o4zQkws17*A}hUKAcDl*y@Vfm9T1jENs&FWqr}!JZCrYf z)4h*(mlrW^Jpw@n`FbHPIU3(K&65Q#*cS72B(U*iHtZW-Du##4v<&6+4dsX8tgb%0 zJklX6)qbag&K@I{TAHV$c{x**cIs=KqY+qqOT77L0|wcg@5&I5k)*2LK)wi*;N9k>~^-A$!+ok%$qDUKVB$Ubp42 z9B_}4{$r8iFuz0ZyoT=WQcm-nk+W*uf@?rp`l;36Ef35mA1sqc)YY_XE40h36EcN# z%7dcfvE}VJoMghEPUP#AxgQF-(Ee2TC8eqC7Z^osvA0M2{{0ikj$Q4gM;gNII*B~NhdRA5(QVv~l&^ovYLgc(=voSh$Fj~Z0 zAJCQ9?O;w$sja2-$He~ylJiccS@BAbLzbU5fBOFZ{mZ3cW(i{Z=cuT6xw&j_AT2dD zllsa5>WS$m8A%eLIuaFvS(ItNjIpgImSpQ)Z+#HoY^x!_juijWy?(Sb^5K0`V(8-9 zc~GInbn)YYO&_apA-||U7V(cU6_Q;<4BXt5FqIsK`VBMtEp+WLJ4dK4x1FdmPN__m z7$`3YN_6Xg^*r=kFZ3wLu*!ZUJZVRix#^X(CpG`$5&h3R<2cHPudmM!m?u0a{`Qz+ z-nl6l4h}&9%%)#U7DCE-l;!0|Pz;;h`P;k;NHu+cDCN<;sPO(%rf&Ots43(O1k8D>aX&3YTn(6>!xpuNRuOT!$>gnI3=I_ zRMv~3gGxI08ZE1Tjc9r)kNEGNJP{=YHv?5|DA4l1pJk|A*RLOaFXm~!h$BdyWF#jw~FWrFAv+By<6fu8X#W^r^DagGVy88w5vAB^&%nof+>zq>7{ zldF$($7ejbB!NCyA^N7EPvmgN*c|UxP3MkB@Rb)$NwD;kCP?X?);0U+1lf@SWxfwz z=TJU%HjFj_H6(@QS4(MHSb^+3TVA(`=UnsPDyRL_y9-k8CNi1!j0~FTDTA~8r8mwh z*h5USzju*(AOXGE&3O({Am?dn{`q`k!CK^t*K?mW?~P)i_iQJwcJra8lL(&j!B;pC zsBcZl{+} zM0`pVZ@)?4rH7mc#yXm(VG-ow*M<-o#l`1S?jb%In7lk%V*H?v85CWF7eNwU%hFUG z)MyIn*?O5la6PoW4`TQn8P!V`iAf0Oe30MM-Bc*b&a`A%$dsD8phT=i&M=taYu?R- z=k3riBY&h2{J!R=#Sn-$Dx7A4`=)kC6ep-ersRxxJ0GLb``#Kx8p{qQv#jbc9(a~q_Vfb@ zaV`_+-Vcvc%I@{GeDS7H^e#bZ7myMk-deJTB*+yNn%D^v#jQMWQ|eZ05uel)7R{*- zl@F_i#{%$85a4)0{W*Q>12Uya$y@AA40~y-^*@Ie{kvB{<8h%%UI^)g)qdCS!K@-IyYfwiVqd0z<3nXj5Ktf6!6!{0y^VN<}gSowF#reNCf?0)WwUTHkiQ_cFzRF zMa+w$2t5}{$aeirkdh8G0IfM59d*QmD&Kz~0GTiow03r5_*@Y3zd=-bkXVcotc;U9 zQ^ZV7^Da@idGPw*&~Q4I7CU)k`?HkV$vSs;aLP$Q-%qC(Zyiu}Z`(olWsi7K<(+DK zTAo+A#^2n8_rFE6`c+J$9c^LUCh}V_p=Cmx>?_U=J|MgZrNZg@0()rBv0Y96U&5(G z^yx!n!3NlH@xz^i^L-}hV1Yt>qOnD}t}HK2nt>O^*L1c~p0C&XZLj_ub$vx@G2C@_ zxaVlthG%$amE!3-JLT%vpSGwY1`gAZnc)6Bg}5hkqSA#5J;PM;V`8y}cytLwAyaeX zC<2A>zeE~xVSq9$^;tnJ8j^bB{sc3C@^*!ovooP5LHt@i*n9!)Lcw?U8U_4vBj*4OTvztQwe9Ao|fiJ*0f4;4GDQ2T}I3jk@ zcY5yaV6S8l671+Z?S0--iMfy%jGdy%Ion6KzAEI3w!1sWNy{M|FQRi{pml5VHN4Qb zp_1NvjAyo_7Zpa;s=iF)jn1ZrJ?Sg9(?-*HI0AQY7(QI{!)z%Iqaj@l7WD?W5GqN; zPdc>af{Bo@kLlj4mMrByZG{nw7O%rK^`VNML@C#2p3)x+#k}`S&IdsEp}n&t$&96f z)%z^aE}m)rS5PsZm5Inqr9-11e2aZxW)wYFOHr6k!Ps?%J$vgD-CRXW7*%7w9zEoB z^l~OQLB7$-Ve2upDX}dxPNW!!%HJDtHFA0M^Jt62do9r++L>3tNB6>Z2>aPH0)f-1 znki0$nfkewH>(kDTPxyTBYKUQ$%6V}8agDm%B?WI3a|Q*vpKIbQD-EDCi`GVMKuzT zV|6FG(&t)h&R)2uq)R$I2?-&(4hRUb%^e6j=Chy`Roxt?cYE=Sz;AbJYObtH&hXNM z_JJ(=AKwc)v``McmP&-}1RBWYaY%!UyS`d_M|_VLa#gUo*3>67e({A;l&Q%cnaLnbG)kB3dz57~7zybEHgT`PPyjG-*886TWnZH!5`w3F%tKDf`x zlMMt^Xb5|KzA36*B}pyhy7d)Z93+QdH#+mPvOaNUD+ z-Hk3^#Hjh&_R;Q+j~3OxtibQklc{r=dp8<$JZUTf6qx(6?zrVm=jGp=f|lzaKl0Zb z18B}N?8ZFhzR=3jc+vJ2BR{MSO#9B9ddf|JmUDJ_T8RgvY=qNE;UN#(y21MJaDnrR z;pL=Sc*FJd-|B;25oTFbxQDC6aQDeqQ!Xh5Vn zQf>KgcpD3+#J8w+)6q6AK6jJ7SNT+zeZW9&vGBM`J`U@96d&=Zo%z7N;cv9}0W}SZ zm1|x`+Z5WGhr`O=uFE1vNfR;L^gplOm?yU$XuDO;ufJ{nxzUiZuui1jW0C7KT0V*E zHHP^~zA>Bbh`!@~+%^6Kgv8mLdJ_aInrnh6&4)z4^jE)HYP~a|V|3L%3(n&y>oQn1o-j{)7QSW?a5_ zC3-=Sr7Ck#Fal@Q2xPT{+Ab3p8X+aykJ1p`7h7dVMBg6Druy}COb*np4z(j`<8B^K z^tK%H3J7@_>#ElDYP=|j7bVIA5X2jNgx}-fzLAkpU#21rn^qwNP!YafUJwgx#)@0l zysuB%#0s5ORRTKYWnrQxDQoU3w|5GB)sx#uZ~S~a^nqYNmR$*U6S-{>eab|kHRR%+ zop01cU5l-*$c#UMj4xZ3sL=AfhKTZv7nN%XX{lb_f^2EJ`f zj5(S?rmDKSAL&E<{@mbLi@*3Y-bc?jGBGl0$s1HT-n+Wo_GNhR01Mz}ZMiQ?zM8?r zu14z|!|pCmd)+)HADfWhJ6cs}CC8xJ@eu7u9np7Cohjc~e{s0Q2AL2QdOc-_lWo9K zO7g#k#iJ52#$ueMIz}MGfDeL}oxOYQ^sB&|os0cmA@A^hix$w@?ys;naM~E{7rspL z+SPfSEQqa=blh#b_#z^&OfMdlE%1XsMOj$=`bQM6F=$ zB2#)59H&hn+vM{-3UPC0D(1y~%lV`dBuMY}up*Et3q9Vc-c-QG48vj`Xo3w+csk;y zSdu^A#@Oh6fnh>$_ihM4Klhu}A%6EglU$t&yo5)#PXT_G*fWu{=R(b#I9atCYk;z^ zCwv^YHe)c^W!iCjX1adjos3>I)*+-ebVF;6NC)Yc;ys{ouV6|hU*0c7%TCuf7C zjSbu0-W~+)?(PN#1vULp&Ab7eZ>SH4>mzMV{+Qgh;|~wEXJ`_qY(_$Z2uIG!EMQ%6 z@LYY|+I_rP>6}s-w?XyL-wL#d_a?A~j6qNxft1~_dx#HJ9w$C=4G)rUyjr{ux3E7S zNw05LuUNo?M8;e%5@Dr_V6Vkkqhnr3$lC~@!}rf0N z;otPQg|ANL+q=42Mhtv6hxdAuG4*}OEv6_c&+SrV@cV^z3zD`)iFi@O6hI-X6JSoQ zU=uN&6~_$>em#(O(qOw#k_lw3Vz7WsKZymwj*qbv^9A;0Ad3$0!6To>F-K;2);p$I zf_qgbUO+fGE~EsmUPt7GUIK-tI9zUAJ7?>Sc@<~NpW1Ky%(A-~Br?CQK$~A#P4YEu z`T48@l-1&hnG>%I*NSWu&#zwG5~=ZaM;y3979r%~*-pn(a~k#o8L*(BxgOdOQq5%h z-^8aQ-JpbjNPrpsX&Zem2cD=)F0N_pCNO6QX${Q&p%FQntU>^nxh-&461gJ^MdjF4 zt@&BcZHfMsUFsl(r3m@+Cyd(pE44!rGAb%9Bjr}n^X?BRfOTSE`B<#sFqWA?n|j7s z54)hV*tE+|{i%YE9a+J|Wz%BfZ1TqVTdhdLtRx*Twok`sOUjyjZp;J){1lm;2EcCp zjMx>Qmt*RgK|`JWSfdZ8ULyJup>L@_OB}}{gy1V!zL==;nb0&mhAk7q#ONUKkT3*_ z_((9*~XT@5ve< zFAW272oXAzGnITiDKMLvyr2gvmoluOhjl7&abHu&7XHK)LlEB1WO(|eykOIHO#z`) z;93V71B>%3<9e>3Fmd{7%sHDP?1{vXGca|>V<;@`fUoq^B zng%fY2HdW%ScCcO9%wQ$aLs(k-Cf)t(dc~)3&0Neia4_zRJoR&>xmI*u!@g_i)vq6_zh0mt|YFki|L9%+bCF5dU|gz!J}X z9{7rgeLl=70O-2walbeMm874u&Y_6b_Bml!E-Cghn8iqRFOT3D(dQohDHs zCGebPN}9SuPpaVJn(MAH_Z}Br6s5QLrI4Svn}RwuBjKV(;hNIf_YA9YUm?X#Z+0oc z?}w@%sR8;{9jV0-HtKUnkvPA!iS<`fOoV65k0ApYdumX%LMB1oSww)p?XenYkcY) z%aaB4rI_0|LrqZy3&@n)La7*jbP_kksr!D5p4dgxF>H3T0`5A6QECCZ*!HDwukj*3 z*?jyNL)Zb$ZA*Zb6~|%#F_asdN zZ<3HZ>_7i}e^F#T!Z8S7QjiZwzkC_TW~!8~B=Q&W0$KsvOtgN-wwz;GgeF4p(7jg~ z^vD!wpHm=yP0{{Q?Secw)Oxu^U9N<=+nP4^sE2yyF>Jh>Ci8BEmmNx=Dj#`mBAWc}G1E0S8643Is6 z`Rnwh%MuCiwKKTQ`e8!Q|3w2l6#?OMWhjRfFaTdYhS)ecW!&AXPTd_$Bg^y)0u=Js zjalMim}eZN76;W=OgOD+-@my16Ix+qNf}u6x&vw3@pdNjc+^c>-utuabc>hbm0&a( zBUVJe)~1MHVvkjoiW~n!0x`9RkP`_>9~#&5+sHfn&!yA8;M2E^=&((c+Z@%qhFVg~ z?v43;`@t6Zq#&T*jEXQiS<#+L9J}~ZS~QsTy0wV94{h2E2lYBQTjJQX-$v}Ze7M1Ol|W#Y;>4iW*~PMpO#IS(nIKQdhB>} zWz27M&xcBl@uC)sj%hAU0y$AaW@w?C_ej0>%KF0P`bdGyGOxMeZ;|CB(NOv{ z!pEa=y^d9yot?^e#Q~XZ4H~VrB(j6;cMV#oTYhp|2O4k15L@G&cs`8ic)GSx$BsRyajtpBv{p@I15J z@L3|)b$-pDU|{?B1w|s>rFmE5)dN+f!BnZTk+ka*xIe4!WX$!l7{8wG$I@ulyd^B( zW4$Qft15xY`)iZr&OOPlLJ+c~(r5f`gF$T|G3h>~fHy_e^*PN4A-B4REZEL0*PM^Y z2$oG=mOFR$KYYRL1JJ+&4=?k~>4_Yf@_ndr+8?vqIY%k&iC)M^7_}H)=bMu_R?Sb? zhMmKC_eC6jZdD6jo-*gdcLwtH0(-lq@P*cAirz5)M1HVpOJ|Mcc$E;ouBr9}_5r%j z!tu)tW7u@U!(;W&cPP4rI}z_>?*-wG?c^<|Z9I@?a+x7POKi@nsy|K2_y=3MxZ5(7 ztkvMN2xnO6q-XIN-flZjP6!SX%yI>#U)>N=JY8 zCj&pcU0=gM_#;IqV~{jPEPnH7QN&fh%=cg!>dy*zG#upGWsd9KzXES{kWq7x3pssq zny7g3p=K+BQT$JD61)1w_`Ow){3sSjN5(1hJT z`|e7~UJt59*qyt`idn~K^}OH=I^GyJ)i-aQu2X4U9f;uOP>8zh5xOT~mZ7GsOt(7Y zqZ7sYNaN4taYICrkGE`vN12JuxLWpowy2NJYtO3LbtK6}ueAOsCUdOTpGt#nQH4+4 zeZ`k?>AuTU9iwGAYP%EmMpVroWC3k?!+w2#`Cgg^tF3OWR=IcHcv`LQpN7L2HGqp< zmd&?GozD1*&7Oa)3$SZO?CSM=QQqXMTF)A2D>9y|sa@x&DOd*-%FQ#Q(>}!{Hu7I# z(a6V>v(-tVa2$b~kaV3Yl|SAm-_j?FnsqUq?>-82{7A)GKM~E^dT{RrwjU`TS8k&*Ws?;9j%H@iUTG&KGB{(?$9tNg~7NI{HaYv)=;J|3uvW0Ss04`q$lv zt03mw`n2E+uOF$kx;&FUH6|a!Vw? zln!WU9Tc8!R(mG0*#-s?w{J797PT?1_I+F12cc1xBGhaBKoN2~%01k7*<@S|7t2nv zpW%?jrD(7I4JcZcb1gv{1JmBedJhByUPds=0@`X6y7+j5Z^MxA<@s@JhFsj-upnTS zEtgPbrKUdBu5rn`(WuTnyDV0;Mw)AP-I&GGuQkj?QN;T?auZ#kGdWilYf#=$TU!fx z(bD|xK3v;$+_vU3;tJeeXvV*6uyggguDd@2x`>_~1rzL#HKUBX$j%EIcAj>_8%Ygv z>%S@_wpjC;sdbyX=K`~=_9$E9BO2HTJkB?1$`N5yB|3w_!Pu)c$J01nS9e;3r)QWH zqSE#2yj1VMaCbMNS(zL=UeAWfOmxRC+bd3bl`!UM-;*^p4O{MCWwhKkI~`t4er3qR zg97Y?>Sv`s-iFNxZVp2S?w!kHBRO&M!_5iOHgKDGmx~jJhxXHys1<^Ue{uBvbtx&S z(K2gNz`!wO58-(SN}w0{9$g>CxiDPf(Pd4AtDqTuW=v1#Hsx@2Pd3blb_2iu+Kf;> z%#1XaPCJRez94$-@;!tR1{%9w7u-AN+l{^ouFc1q3w15O{|0w32vYUc3iQ=HCLmdK zs}H<2`|IwaPJwSeY_bH??acB9B)B|oowxUe{|Y6-3_jZQ3m1)Wj=o{>0(#jF7;~5h zPOAlsChP)?eE#xy2J?oaEte=r0{S!(fRO$9Uw$1O;5swNghiFHJx>jW`i8t6B-kOO z*#*bKU)g15PgqJ_^?X)awg_dP&K+q6B{lSxU%}Q5cQ_H{cDQYeo!-hSxBX^(;Ll&Q z&bJd9u4@<`+YwS)l^Lm(vEWPO^fv{h1$~Mw)#ldvo%`}iufP|rv68?4z3I8jZ2ftQ zVV~I5eL)l%(g&`%N+};MRq*mZc>KUJ0NAg^Pjp&A3aw(szI#8m_DlhI#_u9`F;jex%k$Bv2sGk5 z!2`evG%_bcZdxFAO-9 z=*r3ETVIJW3A};>n)gEagk7_3#njS{bEvdGpidhCGQKFQ|DP-tI4Js0PxRU)00OK( zg;k844JMhhPeE(E@cKLeC}nZA+YO|>1^OfvXI4Yl{O&4UcWF4$#3EZm@?sZl(r=qL zfkyWnHIC0c**-cn!ifD>?(Ox%c~X7X1BymUQR8KK2FW~9SI%e5(BQgM$@XUkBgSU) zBtlnA_Z2#2of&t`Sw1>ZQw1pd0qF0&-Z4bzvh%>p#vYtKW=dZ(+mql!NFS63&% z*vF)9TeyMmVYlFAB*r6-kcc zmjGc-#Ckm?=v%*b4G=jh61i$8Lh`ES0I8CV-Ff=sLa(Y7o1)j>ZlTL(GKn8#Bnqlu zT%Rt_*|&umku%Zw>N?*Wc#F~ak=$ti@{F~wlAFuBx*ZSAs4ztAs*vMNZxVfu+vOoZ z($ojmM@U^|H^+$F4wM0i6|glWWo5tkyua`cA)OtaMnO_LQ@PE9Gu3IA1Tx8!ei=Vs zWKU~Pt(wgY$GPEMjiXC4Ea+KKsV@VDWAf_p*Mgi#U|KDbv%c3vp3C@Rfg%$sY0{0^ z>OK#GwPiDiX?amFG1<>lR->HW9kGex#IN;|MKJM$r}HD3HTm4}?rI!XuP&*8usKgD ze4iTH8PcSmg`?7Ba^{x16Qro;0A7P}8eI|e*m~lQ+g}V?-Vzo9uQ@CLRqmdx^wT$R z+mLbDC!I7nE^r@gvc|Yi*cy45WvtxdaVyjso^pko_XG-K(ei}Eux*>T^ooR4bnf>8 z?phUZ;X+1l|6yb%m&K>~=APv6nd4m1$ax%1& z=!z;bZdLsDE7Y%7bidQ;hoBh*N`K1}Z#TsUyQ}pVA^LEHfwNwJMO2;CMrW- z%4eSDnxM|xzE&CC-@uD5KGfJqvZN#ri>PJBWwWKs@MsB!s+j3{nkM}?l__(JBb0+S zbMbXl{?+*AvD?C&)Int#;m^Mb=S2b4kEaQm8|9MNeApm*-itnoxi%E12j)35RJ(Ym zpKtBYy_uzy4!QxD8VL*tswse6{21McjEu$%;xs_`T)q5=H0zC23}zaCvnvJ_eeY!?zpug+LZM{dAv}8goN(9 z>CKuKk>4w3?|3eAakIo~vz@w{@MK}TJ6ZdyM?UPX!HGHZio7fu8I$b}c~Y(MYu!tQKR4yd4kqnKVZKd?*x`pT$Q zSf=TV>_Em*rnz~@qPc01GhpkH3A<17J6N8*!=fik6f;1M82!nP-amZcbBv3#Kj9#T z=CKlrghU+vzFko>$x)=)jpsZOh4Y&P-ZJn!b`dpjC?aF4R-iKc!{AzcV?(VgC(5(6tl4fj7Olnjh?u*pn3}!kzwQoGJ%#!mQuRgF z6O^2{*r>ttfjObAi(%a-PttZbFrUiH-ljJMj#wg3J1A#9$^DndS!QxDH=6fN2WF*z z&T8but$(7z)0I}>C347T5&Kgl14Z>n0jU_KfoJ!!lnS3OdZ1eaI&Lst4CvrKd>UsNfoWK|sa$`*(}|={6T(;_F-R^}s97#6C3g6Y7R~ z_G#BS^qrG=dJaC^SFhHja3IZmNgWLR@+O0c^3*oF>nqUZP?PsvApFeC?|J8jCL#jN zuxom~Af&A&2#gQ7&J1~>f;99nO7r5-K_l`jNGvN4709)FP4)zenkfC0iI_ zpll}&0)vCa!>QG`J?Dbf1W>C3QsORu-&U&r?BopbdYczT+)oZCpn4!D=v=JnGxBta z>u&*)R_?~?lG?j&#)hW7R1fZ8N*v)oj!EcMByt zuOlwbXX?+;hcK8l@6y;`GgF?1#c!b-{bZV*ZQO3=1F&?*`iI}v#ViDtNiNtUe`oVe zoVM6JMwgc1y`nf@1=XYJYCod0H6p#D_~HJDAhW5X&DO?d3H=)K?$>zNN#1C0meG>u z6p)Q~#92QWSMB#?3n`9jG`G<_PW3()fj-dDKRwt3qqt`TOp%Lc$~58Lxd@(d&yhEp2VadkY<8d{)Fa<#@%& zo845m(W{L0$(KEf424Ddrh}hg4~-FAZdt1VLCkU!ZAL=T(Lq8o2V1x`6N+esNTOX@ zQ3w+LAT^4jvk0Eqfl;I15f^3|%D#7n*Zi1__Yox)Yk?sw>DSv@@}bWCaVBUkpY-w! z_89-HV5qaBW6QVneCv&`{+_tj7a9PaZtmiaP900_XKol7lJ=xjuS!Z<-68>~P|!mWx*~b6qVFQ3J?ytNG(-&X zz{w~<)H3;nbeJe+)kIa_VLmA%^XuiN$l)p<_pEO%v>Jf=SB;txDXq;CtzsfGZx}9E^cN5ZGYfsuLJ2=IR9< z6`}O>bVE?iaKIbSw@F8OICPlol9s}o=>cG(teWwjTpXLkWi4+tj09fJlqF28m zdj15|z@I<4NxgBrn7umFioJMXND;tWMAT1tir?exwuqrhxS)H#tN{}!5bv5I=?d*J53WmA1p@T122p2nUcekyINPY&fzJJD`JQ1Te^(Ay2^g&ePupQ$eNL?8U{! zpW@=Mpc_QKCrKm(u=!&pxuVVD<~V<-jYwM@Zs= z_6otpzjOY2bujLh&ChPP+{MRVgpP;Tc-&I%Lxgdh3-O}bqz`VV7DVV5FfTf6KJs9}OCcUFH;IryC-w-TuNMu`&X2=Yfjp+6T zK0sI=7e1_&+CDF18`xhKqeEPPbds~$8Ozz`9c@frce<4D@AP!Wka*u#rPoVj%2vTF zzS48%Pj~H!(*h#4vxv$X>_Dt1AdDkLoI7x>QyirjYRC^&rw@Aqqs7k_8|zWG#Uvl+iTyx+q%tVYWBr+W3i1yu@ry!>FK+DMLs9$n)>p zlbYAB4i~`?$!U1D$^f6H7Uc&wV!@;*`N))@;5CKz{d4g?KYZ4={Q)#+&TEiPd0@c3 zP^K^NM&+~(MNT$!pHnHXY8u~z7s`VniQ-Q|b96~P?+zEPD5q>=PojF-Z%!?!)S6k} z^Dl;jUy(G!bcI>ym#evuInwjJMRn#&1{sv5L7DzcxvhGW!E#UP12ERJdod~CfQti} zm<7Y+ryLfspI&)JNW4-ug;rK1w>q$;;u>8Nw5EcY{zqwV0afMJ^?hHPEnOlZAl)G)B?z)XKtMo1 zrBpzakZuJOHYz0&A|j!5h)61eQrkczBm@MdQ$o7?otNI{x$o!w?lHbGzVD1P#&I0s zigm3u*IYAx|8{te>UH&wSv-a?*WV@a@R=-(t473&y;SMk>3tIFPqIGB{zSZ|?+>|7 z8PR>2^5QYge|~UT&e8ZmD916id}?{pNatR~y{DHeiKeEk*>|_X(^k4n>XveJFAQRd4AN|Mpk$R3-fNK?uQ9XPjv(-4;~issgL8cVi6c=We>z0P5M+vczFf9O2#M- z>Q`HZ&Q}GSex=m-Ogr)Ygihd;h0%f`TPuvBpyivnDVsoJ-J}Cg73+|;YZJQeq7`40 z3qEE(fKI1hcNLJG)Y;4fF1Xt)$Y3eYX6I^cC8`QUAfh3Nv7+R5@9%x3ElRWkP?CV zVX{U6{R49~M|!Gzt;+I}Pp3KmmfE>p|t_5tR zg_bHaHpVn@(GPip3I^+s@8dCEiW01}L#H}7^Voi3tOkGiiN_~+PHQ};WE&L!S&rAiaokizy5*)6#3w&Fvdk>c?c z$&vcMJmk6{*4EcudBb&Px;y*VshQQmNpnj@V80NIkqzxgS9Hnwo{^=}9pQ|CRO^o5n8>e#}8e za^wZ#2ZL>zD;-U`_T%3VCcEDEFiVnD^{SBUce$8JXXDa_Z0vYSi7A-vIQJS~s_!nz z6pGF>aq)XcH`8q**5R=cl??3@e$fnLA@i z!eaD!)sa`@GuQ8jzO?9=S~0ENyNH%nnfFQ^8H@L1m|Wn-pTM(7<8KVOpA5Y8bl1Q5 z;`fr*GWGMcl-Pkl&W$1Lb`dQzR{(Kh)ndr*yE8$*>KzeGMYVWAJSHt049ZElq`3I4 zx%C7H7hSDaw|8_9^xbi9-y9v$*iKEjrPE#tczHB4FQ z>4u~qk85`+`9#szN0~)$XLf{3KbY#q^TuOURTl80{;zun20VYhp03r`V%h1TtPo&E z%x4BJv(@W0V9&L!4~LHQ4N>lqBM^+O)zahPt$SFTbq|v^D5OAa+HkD#Sa$4hnRERf zlt^ctDA}pw_@``(7r~)@;me0)kDK=?eyhGv?lN0t>NydHljO$O_ZVDicbiR`94ih` zHn6bRg@TE2t0s$50oe;)+qE;|?T+1JYrXk?(?l7*u%LH^%7fnnj^0! zDug=!##)sxNMhZw6w{T=(rsD)Eclr^&bWqoD(0n- zBG#S-NlNMzIjiMYO_oqv`og@tB~795E~dPXXlL)l!eTwEQ%@U-tBW6-%J608Ikzf* z*It2AoA~-VRfSj3N(zur?0*~rX-dzj zGDmBLoPh$(%;UC+ExxIN;(jG9&qT#doChv>W!Mk&DQ;lZ?I<4A?pMEfyEo>OAe9+Cv4TQ*?O_lY>YOL9rZk$O%xiAW53sTYwy)-3g3(mm@kVjQ@ne<*^Vr-RSq;ILrE3A8AQvDIJ^^wit{DJf*uJKS|F2jsJM!}U@@%yV?2j5II z(!u*GGfXNq+1m1~tAjH*IODcU!=Wg$ zDO!sA`vU>JozsKt62mOIQ*SA^eP-H-avvTapAYl%C5~C*Iw5+`xMsJVE%YKcO<;)f@Fx>a z*LQ8L+7d$!eG00=lUAqK68)q_WwAF4c&OTiD7~brI7vQVZbm{lnyAtwy4*G&KBPi0 zQhS53{1-BHUYcQLoJHoUUb|us2TCv^{xv%#7pS5=ExBiklMYS}(+m`Zts-d^zb}9_q z)kMtsgSJS4#%U}>$~fM>wQk$tKBaCS7c-QMrl*{~srMC?UJ%_b;#4A&arylucrHFoz`R*{;woa1lPIqk2n$exXF7n`D8xwNi?M>tb= zF1W*iR~f<#-w$F5(*fIhRMAz|!OUyF8w8(4vkr^xAHaVM!Mw5!cl*BbXmISOtkhba zbNMDZj4^i!Wl#jm60dv>o;I~ua%lHw2cEpubWq4lxHJkg6OaAYjC=A)1?oD{J3w#R zX%P|iSM#MdglLufl|e@@3GMm$@rPEzIrZc^+d|!8T(Vq-eDQU@fy~o&VU;Av{o9wb5bo-4Qzu|r_lPZ-4V)7Xq+^# znHEvN+AAEb%Fhw9jZ`D8ZAw}k4}XfWnp`v?iP_eTG>g1Lhd}M^2e13=34RnfBd&;% zgz*IF_!|)=p{m%taJaIQI2Ak9G^69@5}`14)?S2;!&W`e>3zPuGntnm+bgB1ggrYF z1NNI99xa32$kH|$`(6zr+uuiym9Y$6YTN`obH*grOG*JCXH! zP$I-J-;#4<)x>JjVDRN5Oxn)_O+n8vX?_bQe7+8@6Vb$v9(bG6cJV!NG7uWAHx`Dq z^z}nDGv5PEsKBBY_QbSy`gd{aK4B^<-cE*Nf zn;enbW}!b|_Az%hW&9g1$=)Ijh`&n}Ztr(C#vYyRv)KFb3YU6vWIur!s&;qw%WE;R zrn-^$c4YDXYro(7&sT@GJS%X;pMZ9VTgzYNH=uKd4!AyO8%O7J!;PujRHE}nD&+BZ z@%fHOc;~0m0oGeL*(L4CEtCcODe0ike{C)sw9q{1n0jq-=tNky14it^uc^Q;#viVjvAK!citbD#+yoR zZ~Of2dn=9SUt`z)CM1oWe6G}tydbR|OFlUnA(C`vb!!qMT)u(1(KnpD6yinV_AN^r#V0{X7mA4|5+Q?UcPh7o zo0s>aQo-d)AC#RK#eSl#^2R)lp*y!(kD!yE6{Qc+-4_wx*3M*KL8nyOK;FoRH3K7K zV(Mv#V~dEq_}s*D>>3%sE`w1V22?w>DlJo?I6EL`aw#eGjc*SI)=rBi$!L2aKWf-3 zc7298_n*7F_Z;Yl4bP3k#P3 zi%UPWih!E=swyJ*iH9c?MSpN#bs&Lyj8M&UukJ2Zud^=pdCEPm_MjuF=FntmnlAgG zWWl{=(RpxF=N!Rd$qeGrj{AhZe{R2z)U-{ zJ7Tv@e{<(;zlnW&l!qS)w@CTZ*CR^wAX9n6to2*6Ah zW)~rhSAQ+D{g$pV(dk}2=+{HOL1;baPiS3b|5jwTC$LD9_vbtF=ut8VR2*AFc@Oh( zx3s49&|tG)C+2D{D%}$1!xB(jUr9a3N2nf$Cey*&u4r!Qu*J>vpDVxxk+E;Xy;)^o z)EEglV(zyxfF)%GtP6=t#g&MzmC_{{d#+(!7jc>bONrA`Hd5AOTKT_#s}#vMoV)zX zofqHF&tEZ_R>g}vb?#>+b+Xv!7oq6JZVdlQHT2o5lDN+v3#cLHm{l5a(T`K3_3q82 z+cvGhoyzNVtsmEarsNlRH#Jbx5`hk`4|JsC%k@6ek54T(NfbLvcAq}Yo6)?*6g{Kd z7q2}&K1n=O-;rxLHae=FwpMOs(lKj1KWVr^x-c3qCbYL|GRQ!I>no}q5kTtr`Fpa` zJRgM5`c!&N9YVMS1xX=BEp>LCZ`-cbyZdq|V339&X756bM;1n-36M0;)eo1#B+Fp- zRwcM(87I5X##@__Hz1M#H9IU}@rhc#&nm@MlDXJ>#<*&^<-`VL+yE#TbmtCH{!y!d zfSL}<<901i!y(k2oSF({{MWBvM?Xdv4PR)pE;|fD*hQDO#O4LnY>Bs*e}!IY&ya-U zeY3+>gkdcfNs@PsvXv_m4jNvp=eDs`(>a6H(P_&y zueDEol5<@C>DZ>c$>-wov(vJU)*)xsxZ}2-IGvP~eg8XI^DV2|&M3Cy9FUIDk_g%99&k{^irr^E7TH-&l2e;PNHelz5W<$D(*+(VsCH8IsK%$q#6bko12F zpZt|I;49j;eX)4StMWRURSKNyrk!kiZ&HV)VM9<(mGO!F1F@O2J~hV_{?!}zqk9_= zD#KuN?E5N8E-vq{*Jjku_mo((;m%#XdW9Rx)9@13(=k*CDGgf~SUNMkWXUT;C@v1z zHfexf`R}YNcJc1DpGb!{_7Aou=6cyrRx{nu6sSEo8QM@3^ee?Y+sbjU-Zd;YLefTw7(usMyGGDJ7dJ$JIh38_-Y|H zE9-#Z*%TR-)~{bt5@<|J3?9h5C{`Cb&(s0MrvFSa7^TJ(n3sKkG;P26UX?H5TQ&h& z>ZiLdbZoCN7Hz6&k>E>8N+2ne+4UL*A`|whi79&EOhF0zL%1Zg94c*1W@?>1OS?tG zH8q9%)k1jZ{k>yG^YW=w$6k!~XZql$eHB{qYRo6tkK0w=Hnn`7V_IKT`fu#)cLIu? zg|@llHy5~27%OC^xS;&+E(!IA2#K0WpGQk2S8@A$UAgu3SYl$2TX&|_jv-$4u!n>f z7fW8Vwaxf9X6VSIwQs=%QD}pot&+ShzA#sd$&7wS?;9Z~vud;i=N{$jr8O~?Hzlmh zs8CStBj=6&8-u=OJFt(9X{TvW&P?^b*%TKpN%CgTs@eOL0Q09Qq%;Q#Ef~MPH#7u9!HVG@pTk^88T$p3+NGDboo&?P z!ukEM$CKJ*yx9}wjCKSv;7XfW_7vj6m~Y?kir#p~?oYcxaj5&*Y2l5K31($*QFr&(A+o}g5>m2E#hPH0ZVtXbo`ANX#2yk}4GlMH1o%x=9aS37*A%h2y@wCE=XOu{ z$-v?$_RRgV7s)YOIo$%Kj&bJNzUaFOU4nN_8IhE{zqa`c+FP)IE`?r*&x>6%b#5*- zCuK?jI06I6e{Q-#J8#_jHunv1pI<}4<~whCAQuSv?dc~^qz={rT|+aE6oWoE3$7a- z^3D7J;nltjHwUq7d`HQKTTH#&Q09sZWf$EJm+MT z2wdyp9z`3`Ws@(?O81`!f0M?;Wh1*0#oRa#gN4N#^pfjcD4+>GumTGx05n98{_ECy zge)1I8u~D!d*AH1_pKit{d4P{1G+k&1+0F>8PQN!^o4#w2LQb#JZZPu)T@}le+>YW zPAgJslKD>9yY{@p+pxYmcccN6;@zdG&4S~IA%l7(_Vg9AFSUT@{rgG@n3vDVyvT*( z7Flr_BLBLwp%FO>kmRR5 zm!7png#2p3zz!)+Oib@X#7zqA{=tWm@p`QCG;sB{1dLb9iW#dc5f3l+A`=esvTM}@ z)G-P{eei(l>2Y@+$zX5#)+)GXW5Y`l;WBbl;Z>-TK+o@`LSkYXPsA@5gTbmSs@9p|8#rc92Jt6v%`*r zOr8W(qX8AWV&|OW|4XZyO2o8Wif@-%gW$)5%2o!{LhiK(;?9XfGWr}G*`69rKj0ky zLl31z$*b4@-CagUh*hYkO8Y5P;sF#XmzowNM6E6Bli!*5!P_yH>+0%+L`06MMBl%! zcAlE_V(b6L&F82qEx!nk4SW{-fjp_|BOKEyv#sKHB4ENk28XVZtM7eqN1io8VGor1G`Bh??PBr&!;HV!_d`TQg%g^xtGjJh7@<{I zGyHL!9$`9Xj1z$+7n}8aR=u%q_j4Z95dh~pku&AMe*oZp%?%CdP`W=-k~R-n0glAh=?R0 zU0<4(5S@jnx6YX}i$iy5Gt$zK-K|xC!5uls&d&avrxIFw{~F(sfIOL(f@9=9L=Wqr zU!6`q%w?+eJXFMn5zfK{ec8-E(^ zDoL9HtfeqD)JPbPgsX?!@azxE;{R?_0#@i%%;5=iCLk&#-(+lb8<5H=fMW)W5JMDA zN@Mg6H=hZnFt=hb1~rEQZGy-A6ENrHE#)zxAIJ^DSL5$Q)UI*Q<*Ne5!d&PrxhZ-J zYr%uR{+QfK0Dlp!YXeU7fy;npXf~9C?Y}*pX0!Z zpcpJ&kT|}`si*k;^yYm=(YEJ?yw~jPG6VPbP+&o+O%qB?=!2jDf*)^sk_ovXz}yS^ zt^gi3VBENhw(5e0%5YMcMqNHsaEeS^J>H4tGZd&?yheSVW6s366) zYkbq+3mj!#L5~EW4!^~7!ND6JAD{RIh5hvutBoBmJ5Kw$aDc&3fJ0?J z0GAokVuenBAw}u@pP?xZJsQe5|Ljy!1{4b;BcqUzP;n#C#IIj~W@(r!wf%pd4!M$K zuJbs)1tFJzpAWyU9=Sxezi=udzFjxtVV z)8Dcw6}R2?+t16%b}wesY~Fzr9GG$>UWY|Z4vFI6h-|29Xe6c{W@N-5ApLO5hpWS(Z0YC;-Ai+M5BY4^ zyr@YK>t5A~r7v&3o)@s{6+22rMtLfsZzk$ssC=a6=;kj9+QWe#J{+90VhQ-+!b&~# z^_KzH_j9eCH!Cmf^+b`;KG`*O)QH-eIQ6DijECpiN6zx#-%JTI*AE#NmM0#-60ph^ zYwB2iRTv`(J|xXT807c}&Y!?5 zfEaSsa5Q2d>>b?q8TECIv;i^s$coH~=&~#96g-KGVHr&DEU}9ggcjKJ2H=#`of5d` zi>i#Au7oP>%SVe)F{Uv)9R+mL6sRJBel2(z$Qm4tpkY@Wg5F(umFO_Cxq~7VXU@*S zE#q{Bx3k5vY3Vg`4^PjY*8Z zwnZNN!Ur76tbpqO3?YM(fL%X0tONG%btxb+vLx>P=SKO=l2w#TiHjgy?!Yw`F?RRW2Jg&v$J&tFU77w7iAgrycAbe9X z8g=3z2S=3D)z1gs*>eCs6lU3yG<=jAMFluL@C4}*EVe-yLDIIF`BKd-7V0B%>a_v8 z#h$+ccJ$u{c>HwP-bXpgx#lhPVQYYQ;8<7`$bbOi5qI?n*GT{T#{EVhmTds`#Szh-g~vvJfmj-!bxo&7@bLpE zbY^$=;;m~W=h^uZy0}Q>3RxmwiZZYEw$Omxilr5Q>Sj=(G%DlqXP{9B&;f2QOSa%F7=x2I zMWe|(L*W|*E*d+mzHm4>CU&J+RRDk18x0VM%qz_d|>Q< zW+l8A8kW#$xEd$S9|j~|2=Q?J7^2hAgV`xdo}C_oF0Kv#!7B(e1H2Ac@GSKj4ie2M zn*;A!;ERF7mMXD;N-%#3~=i4#FWR|40W{`si?{E`lh6HFHnSb6_x1)ItciCSJ5 zQU27OhQK(;6dOT~XN>xQhtDdrB%X{(+dD$j{3|KaSaHPF0=;jNrPE{ z%&B%bOcJW#+puWS)nP;DAazPTjq;!ncvfFpT0TRs@YjwHA3nrD?g{cjJ-5&PBV9pB zNr{2j!?U{Z@FuE z67=Vu)lv3ed%c~a;5ng%fXoyveTsU%*v;KwAVbVEux{r8x5O*fZ@~Q%oz|xZ$uZ zb>+i7+~G*rz!~^Dtw}DB;&1eO9|qDJEh-=g*}e+k5tUr|NCLWfB=78@BkTi^3(tEi z-zl&7`bSdn-};CiF7o{KR4Hv*v4=>4(R=d*0;S@Q6sH4(V&NYDMT+w|?!PXO4D_I) z?6-mgL>{ZG!@Y;Rr$@kjFkX&({P+qaNuOKRo`e(F-R9?>A1^xY?2Xq_+>eAcoi+yIz^Sk?hXa??W3Vx1aNAZQ7;2l7AL0wxroKq!uU!m6p z=DW0QGY(R4C@d4)pR0Wp?i&COD2Px0JZlTy zgi+p+B#1&lj+y?5yvsfP+>dFhcR}9HA;s?J>+2g^GewJ=zf!M4Y8t()ltbrpB;H&B zRZxW2rUh5$O;U@q?cifklQsZLf+)c)a2udE>^*1;M)@(x=LW8JnUvVK^Bjd!7kGhc zKwXi#xnKpuOI$n_RA%*_=qNbv^MHSeVpF&SopM86CYE)OigHc~?WO)-F}uoFk?2TR z25b_;vwr&5!3~vc+uI_;3_Dd`uJ&UD@8%ajV{D*N04KyybyFU4wofZ8r4=ibZ zI)53!LfKGOkeGUeiUdVxB&h@jAZN0jAX^xRXaSG(A@F1$w`s=bo$}ef2X{o@H$Sjio$mB>1VZD?c5J z5_1_D7_^`y;G1CTt&wORk#C@^A<`eXziZq9nR5O}_7ldjd@l0-h!&6(q*QL$9T^`3 zfx;{>7YV;M*Lq#~BQ<%SsRRzV+R*a#&f2!Z%Hl`9B}&`zX^;3k;?uS!F;E3Ma12m} zAPTzt8qND$yN33SVU8x2GBPm{A^*`^X53ryH^FbX>+=+jVlLII#`(@zw`7H782NOd zmN6^)$)IZiC= z4lvT^GUsM@WVWXS>pk;b19qXW%kVHJ;a$I z0~jP8l~GJ?s)|a-E-WlKC`2pD_IE`>9<^Ta%(9p6;u?6W}5Hwm@SwZ4;%|NmYeR$iitUI6ss->q_=2!h! zImx(p@vmmmONa7N;4ipOwsEr^cO&df4pg52OW?Sd+S^1ed-RA`84QmR6sTkaEeE_N zDUN`RE5avFTKuf?edRU$fp~coDq1FdIs7KMh57k4wtxYf1+Xfesi`R=KR-X@Oo38- zHJ(4bxA`F`4WEH;0%9rEe9w-%tC_#`$UYCe<0+8oDF;FyR8hYG9kiA4Czd)Oav7)j zfSEfxCr1ag$|$WGu#PadjUZ;91&c}>7+2p81N%T0%0v7>tF(F9tuj1i69hb;fWEN= zCT8H~DD`!ajhq;GG3S)YeJVr??7?G*&GSS3ke);TyD}Nu<^s z?{AJ)a6u%rWBq$4p`zg%tlBJ~BWb~@`P)5m`YeboA-7of-QV=XIiEd6P|o@1HH#3| z@?`!<((6l+ErO5O&8*X3XiFd#RWKhRB0nx%^-D}dCj0LpKbPj7sQ;f68`QbWe<(n*`!haeOOhAj|0Hl<4 zm(xWHizvaAn?z8VqYC?Zd%lSTh*ABxo`^~cqQx@p?d=oSRRDhH@@`7tuPho3TG0mi zn6E{&oF~~}m#KsH;%ogU)z#<1$hG!Ct04=)>eh+ItVqLe(m(b zD5v0*`WOeuP%@lHBb6*H;s3&ePgQ{f2FOAwQq#cQ8Oz0@z+Fo4vC&#ZDEV@O%+nQs zJ5|gSR=TbIHalur!v+qq20Rin6fT%TfEaNxbe>m%z_m}e=R`Bh@{R!fK;5IWC&OVm zV(|S#Qc&sv#YuUKa$G!1Oz0OhD|6^7Z7k#$5P$(;f?Gv(y#~*g2!RON0oci4Dw~R- zDFH~J+^9$anQk-LeIf!1Ra~##XW!rIu0;=C?U|=dnpWyQeL~CbI08@d@SH_wVT{d> zF$#n=^7EWbhucvoQY53LJ?-P;Q#Mc)ubNqa7GE_!7B%ib1ABd*t;!n{$*v0!C$esN zs$g2}Cp%X$O0%ql`mC&SPLu6+ygW+~=is4GggNRGS#EL;MmzYu6#@1lG`yCrIS)XugORflRiS%W*+ZESc1Iu1xW#}eg^9rmXT4Zw z+&H|l73ftm%e%0l^m0&Sw1zDgR2@&&0Ou`q{s{QHutVDh1VF=%Zi*61vb^hOaG%gq zFsj*WKUh=kn*x@LM?{1ItaEAHv#{sTY;?%5&37am#7H@!;8X>1uY>S)9y|X)8^^_)G(0{uJk8eFcPz}4|>Zz%) zu$K_mQ0KdAmwKBCLj5=L6@W6)frhtPcIXVzXcE}3tYgjpKkXN4{F?W%GUC(ehe1p|4)3W_9QP03AcDIsgCw literal 0 HcmV?d00001 diff --git a/content/blog/2024-ram-usage-encryption-s3/index.md b/content/blog/2024-ram-usage-encryption-s3/index.md index f149b88..505a2ff 100644 --- a/content/blog/2024-ram-usage-encryption-s3/index.md +++ b/content/blog/2024-ram-usage-encryption-s3/index.md @@ -51,6 +51,8 @@ Below I plotted the empirical distribution for both my dataset and my personal i ![ECDF mailbox](ecdf_mbx.svg) +*[Get the 100 emails dataset](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/src/commit/0b20d726bbc75e0dfd2ba1900ca5ea697645a8f1/tests/emails/aero100.mbox.zstd) - [Get the CSV used to plot this graph](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/src/branch/perf/cpu-ram-bottleneck/tests/emails/mailbox_email_sizes.csv)* + We see that the curves are close together and follow the same pattern: most emails are between 1kB and 100kB, and then we have a long tail (up to 20MB in my inbox, up to 6MB in the dataset). It's not that surprising: on many places on the Internet, the limit on emails is set to 25MB. Overall I am quite satisfied by this simple dataset, even if having one or two bigger emails could make it even more representative of my real inbox... @@ -65,6 +67,8 @@ The following bar plot depicts the command distribution per command name; top is ![Commands](command-run.svg) +*[Get the IMAP command log](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/src/branch/perf/cpu-ram-bottleneck/tests/emails/imap_commands_dataset.log) - [Get the CSV used to plot this graph](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/src/branch/perf/cpu-ram-bottleneck/tests/emails/imap_commands_summary.csv)* + First, we can handle separately some commands: LOGIN, CAPABILITY, ENABLE, SELECT, EXAMINE, CLOSE, UNSELECT, LOGOUT as they are part of a **connection workflow**. We do not plan on studying them directly as they will be used in all other tests. @@ -104,6 +108,99 @@ UID SEARCH BEFORE 2024-02-09 ``` --> + + +In the following, I will keep these 3 categories: **writing**, **notification**, and **query** to evaluate Aerogramme's ressource usage +based on command patterns observed on real IMAP commands and the provided dataset. + +--- + + +## Write Commands + +We start by the write commands as it will enable us to fill the mailboxes for the following evaluations. + +I inserted the full dataset (100 emails) to 16 accounts (in other words, in the end, the server handles 1 600 emails) with APPEND. +*[Get the Python script](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/src/branch/main/tests/instrumentation/mbox-to-imap.py)* + +### Filling a mailbox + +![Append Custom Build](01-append-tokio-console-musl.png) + + +First, I observed this *scary* linear memory increase. It seems we are not releasing some memory, +and that's an issue! I quickly suspected tokio-console of being the culprit. +A quick search lead me to an issue entitled [Continuous memory leak with console_subscriber #184](https://github.com/tokio-rs/console/issues/184) +that confirmed my intuition. +Instead of waiting for an hour or trying to tweak the retention time, I built Aerogramme without tokio console. + +*So in a first approach, we observed the impact of tokio console instead of our code! Still, we want to +have performances as predictable as possible.* + +![Append Cargo Release](02-append-glibc.png) + +Which got us to this second pattern: a stable but high memory usage compared to previous run. +It appears I built the binary with `cargo release`, which creates a binary that dynamically link to the GNU libc. +The previous binary was built with our custom Nix toolchain that statically link musl libc to our binary. +In the process, we changed the allocator: it seems the GNU libc allocator allocates bigger chunks at once. + +*It would be wrong to conclude the musl libc allocator is more efficient: allocating and unallocating +memory on the kernel side is costly, and thus it might be better for the allocator to keep some kernel allocated memory +for future memory allocations that will not require system calls. This is another example of why this benchmark is wrong: we observe +the memory allocated by the allocator, not the memory used by program itself.* + +For the next graph, I removed tokio-console and built Aerogramme with a static musl libc. + +![Append Custom Build](03-append-musl.png) + +The observed patterns match way better what I was expecting. +We observe 16 spikes of memory allocation, around 50MB, followed by a 25MB memory usage. +In the end, we drop to ~18MB. + +In this scenario, we can say that a user needs between 32MB of RAM and 7MB. + +In the previous runs, we were doing the inserts sequentially. But in the real world, multiple users interact with the server +at the same time. In the next run, we run the same test but in parrallel. + +![Append Parallel](04-append-parallel.png) + +We see 2 spikes: a short one at the beggining, and a longer one at the end. +The first spike is probably due to the argon2 decoding, a key derivation function +that is purposedly built to be expensive in term of RAM and CPU. +The second spike is due to the fact that big emails (multiple MB) are at the end of the dataset, +and they are stored fully in RAM before being sent. However, our biggest email weighs 6MB, +and we are running 16 threads, so we should expect around a memory usage that is around 100MB, +not 400MB. This difference would be a good starting point for an investigation: we might +copy a same email multiple times in RAM. + +It seems that in this first test that Aerogramme is particularly sensitive to 1) login commands due to argon2 and 2) large emails. + +### Copy and Move + +You might need to organize your folders, copying or moving your email across your mailboxes. +COPY is a standard IMAP command, MOVE is an extension. +I will focus on a brutal test: copying 1k emails from the INBOX to Sent, then moving these 1k emails to Archive. +Below is the graph depicting Aerogramme resource usage during this test. + +![Copy and move](copy-move.png) + +Memory usage remains stable and low (below 25MB), but the operations are CPU intensive (close to 100% for 40 seconds). +Both COPY and MOVE depict the same pattern: indeed, as emails are considered immutable, Aerogramme only handle pointers in both cases +and do not really copy their content. + +Real world clients would probably not send such brutal commands, but would do it progressively, either one by one, or with small batches, +to keep the UI responsive. + +While CPU optimizations could probably be imagined, I find this behavior satisfying, especially as memory remains stable and low. + +### Setting flags + +Setting flags (Seen, Deleted, Answered, NonJunk, etc.) is done through the STORE command. +Our run will be made in 3 parts: 1) putting one flag on one email, 2) putting 16 flags on one email, and 3) putting one flag on 1k emails. +The result is depicted in the graph below. + +![Store flags](store.png) + -In the following, I will keep these 3 categories: **writing**, **notification**, and **query** to evaluate Aerogramme's ressource usage -based on command patterns observed on real IMAP commands. +The first and last spike are due respectively to the LOGIN/SELECT and CLOSE/LOGOUT commands. +We thus have 3 CPU spikes, one for each command, memory remains stable. +The last command is bar far the most expensive, and indeed, it has to generate 1k events in our event log and rebuild many things in the index. +However, there is no reason for the 2nd command to be less expensive than the first one except from the fact it reuses some ressources / cache entries +from the first request. ---- - - -## Write Commands - -I inserted the full dataset (100 emails) to 16 accounts (the server now handles 1 600 emails then). -*[See the script](https://git.deuxfleurs.fr/Deuxfleurs/aerogramme/src/branch/main/tests/instrumentation/mbox-to-imap.py)* - -`APPEND` - -![Append Custom Build](01-append-tokio-console-musl.png) - - -First, I observed this *scary* linear memory increase. It seems we are not releasing some memory, -and that's an issue! I quickly suspected tokio-console of being the culprit. -A quick search lead me to an issue entitled [Continuous memory leak with console_subscriber #184](https://github.com/tokio-rs/console/issues/184) -that confirmed my intuition. -Instead of waiting for an hour or trying to tweak the retention time, I tried a build without tokio console. - -*So in a first approach, we observed the impact of tokio console instead of our code! Still, we want to -have performances as predictable as possible.* - -![Append Cargo Release](02-append-glibc.png) - -Which got us to this second pattern: a stable but high memory usage compared to previous run. -It appears I built the binary with `cargo release`, which creates a binary that dynamically link to the GNU libc. -While the previous binary was made with our custom Nix toolchain that statically compiles the Musl libc. -In the process, we changed the allocator: it seems the GNU libc allocator allocates bigger chunks at once. - -*It would be wrong to conclude the musl libc allocator is more efficient: allocating and unallocating -memory on the kernel side is costly, and thus it might be better for the allocator to keep some kernel allocated memory -for future memory allocations that will not require system calls. This is another example of why this benchmark is wrong: we observe -the memory allocated by the allocator, not the memory used by program itself.* - -For the next graph, I removed tokio-console but built Aerogramme with static musl libc. - -![Append Custom Build](03-append-musl.png) - -We observe 16 spikes of memory allocation, around 50MB, followed by a 25MB memory usage. In the end, -we drop to ~18MB. We do not try to analyze the spike for now. However, we can assume the 25MB memory usage accounts for the base memory consumption -plus the index of the user's mailbox. Once the last user logged out, memory drops to 18MB. -In this scenario, a user accounts for around 7MB. - -*We will see later that some other use cases lead to a lower per-user RAM consumption. -An hypothesis: we are doing some requests on S3 with the aws-sdk library that is intended to be configured once -per process, and handles internally the threading logic. In our case, we instantiate it once per user, -tweaking its configuration might help. Again, we are not observing - only - our code!* - -In the previous runs, we were doing the inserts sequentially. But in the real world, multiple users interact with the server -at the same time. In the next run, we run the same test but in parrallel. - -![Append Parallel](04-append-parallel.png) - -We see 2 spikes: a short one at the beggining, and a longer one at the end. +Interacting with the index is really efficient in term of memory. Generating many changes +lead to high CPU (and possibly lot of IO), but from our dataset we observe most changes are done on one or two emails +and never on all the mailbox. +Interacting with flags should not be an issue for Aerogramme in the near future. ## Notification Commands -`NOOP` & `CHECK` +Notification commands are expected to be run regularly in background by clients. +They are particularly sensitive as they are correlated to your number of users, +independently of the number of emails they receive. I split them in 2 parts: +the ones that are intermittent, and like HTTP, closes the connection after being run, +and the ones that are continuous, where the socket is maintained open forever. -*TODO* +### The cost of a refresh -`STATUS` +NOOP, CHECK, STATUS are commands that trigger a refresh of the IMAP +view, and are part of the "intermittent" commands. In some ways, the SELECT and/or EXAMINE +commands could also be interpreted as a notification command: a client that is configured +to poll a mailbox every 15 minutes will not use the NOOP, running EXAMIME will be enough. -*TODO* +In our case, all these commands are similar in the sense that they load or refresh the in-memory index +of the targeted mailbox. To illustrate my point, I will run SELECT, NOOP, CHECK, and STATUS on another mailbox in a row. -`IDLE` +![Refresh plot](refresh.png) + +The first CPU spike is LOGIN/SELECT, the second is NOOP, the third CHECK, the last one STATUS. +CPU spikes are short, memory usage is stable. + +Refresh commands should not be an issue for Aerogramme in the near future. + +### Continuously connected clients + +IDLE (and NOTIFY that is currently not implemented in Aerogramme) are commands +that maintain a socket opened. These commands are sensitive, as while many protocols +are one shot, and then your users spread their requests over time, with these commands, +all your users are continuously connected. + +In the graph below, we plot the resource usage of 16 users that log into the system, +select inbox, and switch to IDLE, then, one by one, they receive an email and are notified. ![Idle Parallel](05-idle-parallel.png) diff --git a/content/blog/2024-ram-usage-encryption-s3/refresh.png b/content/blog/2024-ram-usage-encryption-s3/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5d66e59694ee9618486572cba12f9a64d2a36d GIT binary patch literal 23696 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 CJVMI= literal 0 HcmV?d00001 diff --git a/content/blog/2024-ram-usage-encryption-s3/store.png b/content/blog/2024-ram-usage-encryption-s3/store.png new file mode 100644 index 0000000000000000000000000000000000000000..940aeec04300fe38b7d41f33800a1b3191381d7a GIT binary patch literal 23909 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 J{<`<{KLF)PregpA literal 0 HcmV?d00001