snapd-devel-2.49-1.el8$> !FA˰>: 6? 6d  5  +MS\ N* N ?0 N S N } N  N  N NG N{${@ Nx\l(89Ƽ:G j NH NI X NX ǨY 0\ 8 N] p N^ b Qd }e f l t Nu Nv 5  6L 6P 6u 6{ 6Csnapd-devel2.491.el8Development files for snapdThis package contains library source intended for building other packages which use import path with github.com/snapcore/snapd prefix.`%jbuildvm-a64-15.iad2.fedoraproject.org\Fedora ProjectFedora ProjectGPLv3Fedora ProjectUnspecifiedhttps://github.com/snapcore/snapdlinuxnoarch |n |7f Tn yxLi2u&fJ^d >  J*W ^*% (/$6 !'5!44= cUohJ/3T Sjn >5+4ZD!1!^;!.3Uo0(j]$%I`& w Cv OVN4 E4QeV& K B""43-<'q? 9 Bi;^hR3E *.Y=)q"SLF6 4M} v"n v2,G  ' &"V [kq \   IKFK0}F ][ g,6@}}  io s E3 Yif`k7e<7 89H!,k,: 1V^>j3w cA"n : q(G/? #_&  c\ ({I2%7-b7 "l-_ BjG!  ,HOMaH%3N kg!@ +(+Q (  eg_ G 6<::="#!ͳ ? R#  zT$R-K9Y #"  j6.9f'! 8i` B12J G  A\Aq]:GO@m; ._T"!Cva w'xv%26-A[1 w ~67T: 3# !R= M/MlBo .  RY=V tF 1 U?l  X\  > h !3F R$~&euc $ .|&9V 'JL#8Xy7 B 'Z7e,o_H! !4:] %#&O0?$/z> "w^s ]L2D ,  $ 9L We ~ (#6X(U ce!(." 8   5 Jp  ) g- A I q 2}] 0 2/x N q:N>P(   e > ,&# g  \  ; `Xe#. h 9< A H [ .(- 3 Hlu )X  56 Z$ $q# b  $ x  %`U& K ,E %{  `)Nqz&vs  $M 9  *)%U q  +  pO  e$  }*6 O d U7 -&x* @ 3"v   Q  }  v ' h  s8 QA*@ \TAYx !kP$oe "!)$*& ]7!Hk Q Z Dr @ w8 [#\ ${EH6($ (; "A y uC; m)3/@fO`rSY1  1 N6L #@J% ~ Q ~F*ZMGa C"YI(Jek8 N O^~)&+9X9 %(&>i$ !1;<3 ;% A ## !pSt5 8$#~>Z fG )TD*)u (5]v_P! +:4 t  m Q q X < ( : 3v y%  "   &)PgsQ6\  NCigc̓ogk % ](5,5s/^Bh_ 0Gd y V fE.$0&@ 9. ^P1>< q 6U&A; 2HZ pJ@{ 4C ! "D( Qj ,Tc$ U_!Jn +& m0LeI"RJn 7  !- G`([   w9am ?7 8Y [![@5+ q=, T  >D;/f3 !#}&1 SgLHUk.gse  7H j&$? k vY   ;w6I0d x  x5ѕ q!'~g= )Rwj+*%=8@  gP،; 7 O@#m/u*L]9 ,|$5S'*c! <{c'b L 4 $" SB c68f( #)5s'>`>[#1BF"M1g4^NS3 )e+S&  5" &;^E  M `d-e KN n  M!-j0 X# SDsr m2, W `b*;X%_~?2/ !.<0 3 P  1 .':;81PO,9 %Rp0>ELA `A `k`H1Pn_ /N).h vtF [! 8)9F 2ZEiE j#/ai } =L;+ E$Ph kW $'4 1M'&=3n ,f Hd[?]+x {dZi5#*?;2;==;x ZSV,_nT &?H&h0 4QB!  e_+ If.0,.8|`eD*)#>QFMK*I@Q/*/*,RM*n "ѧҨ#C#E#9#E p-,-~1~9}?@ACB@B| "  j jl!%uRyzKX &\JZ `&KX&\fJZ=&^.![4[j88JIF> LIILPP<8J _%_$8..m./FGFFiC.='{B//B4O4Q'N/1ffffG^G`G^G pp**))qT*+*J*A**y*{*+++,E*E%%%'$",/ k| T7EVT#UZ)>K 0" l mH0i44mR2D25RHx!2|+E Q42ea !d ,E(C*'WD ki SKA큤AAA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤AA큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤A큤`%i`#`%i`%i`%i`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`%i`%i`%i`%i`%i`#`%i`%i`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`%i`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`%i`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`%i`#`#`#`%i`#`#`#`%i`#`#`#`%i`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`%i`#`#`#`#`#`#`#`%i`%i`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`%i`#`#`%i`#`#`%i`#`#`#`#`%i`#`#`#`%i`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`%i`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`%i`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`%i`%i`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i`%i`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`%i`#`#`#`#`#`%i`#`%i`#`#`#`#`%i`#`#`#`%i`%i`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`%i`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`%i`#`#`%i`#`#`%i`#`#`%i`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`%h`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`#`#`#`#`%i`#`#`#`#`%i`#`#`#`#`#`#`#`#`#`#`%h`#`%i`%i`#`%i`#`#`#`#`#`%i`#`#`%i`#`#`%i`#`%i`#`#`%i`#`%i`#`%i`#`%i`#`%i`#`%i`#`%i`#`%i`#`%i`#`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#`#`#`#`#`%i`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`%i`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`%i`#`#`#`#`#`#`#`%i```^^`^^^```#``^`#`^^``#^`^`%i^``%i`#`#```````%i_________`%i]aj]aj]aj`%i`#`#]aj]aj`#`#`#`#`#`#]aj`#`#]aj]aj`#]aj]aj]aj`%i`#]aj`#`#]aj`#`#]aj]aj`#`#`#`#]aj]aj]aj]aj]aj`#]aj`%i]aj]aj]aj]aj]aj]aj]aj`%i^V ^V ^V ^V ^V ^V `%i]aj]aj_ _ ]aj]aj_ _ _ ]aj_ ]aj_ ]aj]aj_ _ _ _ ]aj]aj]aj`%i]aj]aj`%i_4_4_4]aj`%i]aj]aj]aj`%i_2Mu`%i]aj]aj`%i]aj]aj]aj]aj]aj]aj]aj]aj]aj_,]aj]aj]aj]aj]aj]aj]aj]aj]aj]aj]aj]aj]aj]aj`%i]aj]aj`%i]aj]aj]aj]aj]aj`%i_`#_s__`%i_s`%i_8_8_8_8_8`%i_Ot`%i_Ot`%i_Ot__8_____`#_s_s__`%i]aj`%i^N^N^N^N^N^N`%i]aj`%i]aj`%i]aj]aj`%i]aj`%i]aj`%i]aj]aj]aj]aj]aj]aj]aj`#`#`#`#]aj`#]aj]aj]aj]aj]aj`%i]aj`%i`#`#`#`#`#`#`%i]aj`#]aj]aj]aj`%i]aj]aj]aj]aj`#]aj]aj]aj]aj]aj]aj`%i`#`#]aj]aj]aj`#`#`%i^]ak]ak`%i^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^?^?^_^?^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^?^?^?^_^_^?^?^_^_^_^_^_^_^_^_^_^?^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^?^_^_^_^_^_^_^_^_^_^_^_^_^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^?^?^_^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^?^?^?^?^?^?^?^?^?^?^?^?^?^_^_^_^_^_^_^_^_^_^_^_^_^_^_^_^?^?^_^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?^_^_^_^_^_^_^_^_^_`%i]^]^]]`%i]]`%i]ak]ak]ak]ak]ak]ak]ak`%i]ak]ak]ak]ak`%i`#]ak]ak]ak]ak`%i]ak]ak]ak]ak]ak]ak]ak]ak`%i]ak^^^]ak`%i]ak]ak]ak`%i]ak]ak]ak`%i^^^^]ak]ak^^]ak]ak^^]ak`%i__`%i`#`#`#`#`#`#`#`#`#`#`#`#`#`#`%i`#`#`%i`#d560521f556f5f2b7ab625a9efcd466fd2d40346da5e4ebdee503e66541590da786bf0b05ee9f95d50b1373ad8bada003cb2c7edc04260badb3134a829886bf9e0e0ca544d91dec35b073e31b48ef786ed552d866c467c51db69ad3ea28ec6f69f54e72ffd47d112645313d6a89eb73c21ada1ef6054ffcd6e5e571954daa095f364ee020d414691a297f5820a44d85930b43921f5e7d05d68c3e3dcded5f9c49fd5a490873c57aaedb21e56a7bab48253e70939d3110abaed37336c848182d36b24d7dfc697c2c239663346cc4014f1eae4b173b3397f99c385cd4fec9a9cce59d2bb2f8c9875933627f11478ced16af4c2dfef02366318bf51d197cd5e5de313017fc78ee6c9fdb486203661ef21e64dfcb1482a9e161c584bbc780dd890bb6aa8663d242970b59c161b8f779a71d9e89b685939e8951933c3928a4b52390e0ea2d49df71a21fe356b860ef8f276a4e352666fa84adeb217e30d0446b084451c2170c0c244a2ea2617e5071152ae7bc7400f661e6f60d89514e2780e38127d7a436fcb7b04c330876f75dc77ab4218e67537e1addb4ed4f7890220b796b295557f6d324b145f85cfb54e79683a029a34b12e6e24d0501a57761f2f2bd36bc89296869ba6da06b100e874a49a253274e853f3023d455c1369f10bc8b2634bddc3ea6224feb4ab2c87ac0c103a009bf254ec502cca32a014c440aadecdf41f2e3b65c04d5dc9e79f4a3158e6cb60ef04509a12f90a39b093d20ab014a260dcc019c7c14af100d0733a413eae9f9516cf2e38538ec1ffcad5a72c5f793479db57512a69d20cbb33fcff0041ab31d2027709895312a0c00dc4f122003eb18bc20d607cef2fc2aa60373561277d7a093e21fd9a1326a97a0bab52041ce4277cb7b5346b8a69fc0cdc129835b5afcce3380ea3236c912b857fd564dc26da9870f28a900fe773bba07d1d568702ceb89669575baae675a755dc45cb3c0f9d524db9fdaf17b01df9c5d9fc728851361c2ba16383adfaeb628e727135b734c7e361100a1f3a18fdc52ecf139db17c077f0cb8503c3eab7c9a923c763239915a076cb096da39829e782c3ee89177f62248ee42c51c5cda2c406c2006ec6cc255b3c13d43ebab7120d586b7f7eaa0e500420fd3f624476aee3fe176c33083c8e7c1b73050912788d3c1fe5595efb9577ba0a2d0a59660b48d4a0f51e4f8e67e0a512aeb7f5dc9f23dbf760f9a7a0f2afa8ca0831fc38471d86fd28249e46a6adfda254a76f3116fb656b21c670a81363ee2ea99f22a3252415a44ce2afc9d6e46c3c7e3ea5941320c3ab35c3fd6194381a76da6d98850d44b536897cc200eef739b648ace4c68d75608d6704e46381d86a0a1d3ca921f7175fb0ef09e733d1d15cbb41399d6b3c85a9b914f10f9371a0aec518c8318850b5c035b57b282b91bb9149e090e38f1ac41e0f039b1969dff34a919a2ff9312c0064cf8775457a360fb05e55ba1261cc8a236851b1342f09c23336a2f15359812a83654e7fe66c81bf353d2117b2d231c87375ef14650ce158ddc8c2f6cb5d1edd3c739b3d68cdf089dfe0dc4668f55d7c102b303f1cd25d9a7a483bd89751fb5e80dfb0594c4621eb5bdc527a12f76db6652d4f0451c576f5497154a56ba83a37235a61d2b1c8d8b73229a8341d18be768b00731a9fae5b77fff21461067b6b208eefb8dfd71bbf51704c05e0f212303e605686c6c7feacc2c8924ebaf2f206d26f63ef816e951a2010110a0d5e367930d974ecf201c9d026f5c688a79929b71c62e165fa712d952ed45f0a664ee7f17f5d21c52177c03308208c4cd4ad5fc20e0a9f15277de4bdf48f87008df08579210b1c3bac15b390d43bd6a7845d93fab672c78fccab43a1e9ede4e5eec05e03ad01ba557905103a208f071d9a4bf9e4433b3b5efce73ad7219eeb0f4fb8a57bc31fae2affd5a7c1b9ade8b631180f344c95bf58b58bc18fc428375c32039cd9e308866b8d8543b109f7676fab27b70cf1ead44c87cd91f571716ac1c84ab808d8c1887ba74e50cfe12c3245c92764a2971120523edbcb4f1bf840ddd2009011766554abede24d7266da8432156655d585a3ed1519ebed351d3abe7f51e80502aba86d84ee1eb1284dfaa75ff3660a3f34ede7f6ef346dfadd3d5be4891c16d674a7cb97e13cdc267f178a1ef96880bc3ef30184bbb08a8c6e17f3a64290ba2ff630abc3383245ecbbe69e32e76e85eb8a92963c67034fa010557a66c1e9fdcd14b0d010c9c18303db3f50401d4af530344edb3619eab2ba2ac4eb51e5cc365022fdb8a7a6e0aad945a5790df6c6bcace98e8e18512d0dd14b57eccad8a5c4fe82b2fac181530c31db8bbb0fa726a986544035167532331d55e97c5ea70709bfd20dd4da55ffeb76fb6f4fbe3105dabb3af471cabc0030d086599f5f31d4939b8f642c6c1a11918339bce6284b1a7acd540f6fc13157f6023b5d8a9c56b176aeec207ab4b5f916f7eace722ada627483e32a93390e9d2314b96de609a3d435cbeaded714c6ccbe6321693b6f1c81221946d2445c0b08971556dd3c8ade105b8a00e0e3aa60a1dc2e3ef0ba98e076f826edafc82cc637492df4c3e3ec7663e5cba3f916853ce76dade7a056fb064266d467f2820922a4a2d84b22be7c7917da8560c0e151e2afb23efddcb25879b20c312677c480b963ad4728e084f023507a5844b46ba9d0bac0fa31172149cffb8bab875f4c70e52bc9b6bdb59df7e2ce8147d0c5be2d33c82660761c0feecb4366618ba62190efba37264cf5f8722099a20f978f2a843830e372633bead00f600a5aff5a02c06200465d8213f9a736bd999b9a7699d6ea06ce806f63dca3a898276420797e176992af2949bf283b480bfdb12c9d2dd9ce0b1ad60f595ec95a422272bc7f5737a46462f06d670877cde0163d53844241b4ac9f98d6293095070867c9df67339df6d5f6055c0f97f1664fba7627b8a0a27100d3338c29f135a13cde45f5c4f50c218dc28d13242f7f802cd2a7cb8d40ec1152cf20ed9252a7d3c549dd617064d26233fbce4019b03e2b98a01f2d887cdf3243fb0f2a83af850e45df3d6f9564155c2ddad10f2bf5c0521e810262466f624b77662297ad946160a8007d6075225642542f4e5a6993210ed740d1848ab57df8b7ef5d8b49ef5d54b41421ab7b5eeec5d7cdcb8a46a8ca13ed1c5cc09bc907fed465d88bdffbe1e62330bf3ea87bfba20bbff2db031672d960a9126f6602cb9a126e8c2957bdbfe491f5911415a94832914879e73cd794a9092cabf1af8b7dafbed5a57850f7361baf898e154b67364d7272344f0a0a7f6f913efd9145ac698c237d2e16295d424ad84332336bd4f1dfdc6c8515dfddda8d425968c3d19946dd1462429214ac8c51657ec2c99ff210db6a6826ccbd5c0d212027e29c00deef415c512bac482b9818d267c74f1f4f82bc62e77b18d3eba0bde007fe6b5fc656a09c3fbf70bd71ba97eb512f66320a0ebb60b646aac72368a991852a569b8fb2e808539665cd5f5c044cb128ed2c6069d265ec33586b60eca0a89e92325836f697df365780955ecc2836133a772f7376001838f35e52b5a0e624a06bc146d812dea4fb65c28d5a8bbe056a6036febf7c0688cd89f0f9946692b961e7753387432acfcce56465f04d247fe02a40b6de7a1b416b141be43cd678c4c7e7eee55d5f3d49cdd6d582fa3e76dcd35e9eb086cd220098535d1f2a218658cb89b3dbdeed58aec1877572e89e411eb63febc7a70fc9840069955390399ffb26b6e7cd904d305ca904fa72009972d17e97e9f6c0f0d46aee7ab3ba8b6f8b5117ff053cd52b44456a61164e55737b2350385ee98ec34f9d349dba841af07796b93fd56e2e74dd69fb2cf8a0730f79460f62b7eb620d727eaae07730674ecde33b9870b6a5e30d8073d283645f9b195301691641c3ab31c65c5af74d71963f5384792213f001c08ffdcd31fbd2efac90f2b4aff6fb0bdb49ad3fcbf0db9fb60260bc9e6ff81f4bcbbbcb3916965651426851ea0ceeb771c0b85566fff939e21eb2d9b83ed22b990389eb603ee203e6c36fe29931614d209ac1bbdfa0db6bdd8b2b69d560aed393967fb089f714992feaf367d6cf7ddddb29cea07fd9bcfd65730f635bb431d2bebee06824d03c163c42d53dcaecd46d17665e283aa329ca6ccf6dd5fbd9912f4c6480e38c47aac40ae59b0b8564ed53c8d15ec9a2094aa47ecce42450b0201aac48caeee4fb439d5b8d0deab1e4adc006014b57f7e95fae0b3046eab49fb486c80d734119b79b541ec80c74b0cfe8ed689930018dfd3dee014719f6f722b3c7473bc58d54b2db248d93f8048cb504bddd42f182b461f746ede415939627326ffbe429fc5c85788a0ae56e00c83c068b2e52cc15ce19a5ef6f9d2c83eb41cda98fbf445aac57fb9898b619af7a639907c80bbe25920400b13c707a9474dc04c8fc1b240f13d1bda237f0cd99646f77d1dd4d0d481620df6c0dc61e29a61f91ef34dbf074d3a9feaf60067673f6e8eebab5e01b68f1fa0bc3e4acbf16f15f4a6a11099544efc85d5b5c1cc2a6523f2a91d0b16215d24de52fd397d5582e92363819fc7df6960ce47a51a73fbd000857ac6ded7adc4b7c35be275bff63021c987b3f53210d8696ba8c51b1422007c6533d81e8f20c73277d6657974ec57e62d5071ed463245b29ad27323c1371450a48c06b0a1def6244da10f261713886f73c2d89c50ecd7fcea6520ffa975964103b0103ea77e6b35b05cd806abb175ffd9a7d867cc620f3f7a7145ae42d6d15e24c0a90a31331c80183f2ecc87bab270b0b3d0ecb567ac1a9fad62a3e05a209f92e5c6f002d5ce7f45d62d74554fbd4090674c6613ffeda961dd2c9e5531826f974a67a030fabae8865371145f24b3f7b068bf8a963f6245306529d0c493320ad7b183dcf7e4f2497dbaff23520246eb29719e1f08ff3370f7f6e3e33971a809b716f248d2409b99cf67587aae8f25927292c3fad12f4e78970cddd799f49ec366ef93650b01c83e70c9b3a72751b18c683242494caa1f6c84cb5496798781b8655f5eb9fc5b30dc401988d8375126eb298dd44d8503822851376038fa3aa7764a3662709dcb68f1485f5297aec85e851e56e9074887a48c5b565a6b68f53665a876d9fbcff3e9d50f6a104d2e8cce3fd65eee379b5ebeb4c8c4d5c86a25eff1fc1d401e632f35b9d6f51c2685fe215f922d1d8356f6a68ffe86732a521c0d4f0ec2ca481d2b4ab7bfd7862d697ae887de677abc6087c6dadc3d5196cb685c92c52c06198bf9a133d485ad4d953a4b548fb09465ebeec9ad136ea70fab18576479e21ebfa93b3a0df5ade9b158bfc43c989603870fd6442086b6c1b0b731f37ec331ec3c1b95f0a9a3bddc77e5cdf7d4b61d9a814a6b6aee02e317a29cdf6241a925a0d6d74a859128d4a42041139e220a461641cbc6db2d303c9d5c7c107c0f625996c3e5b8fa78cc9cf92202085b69550998fc99871d5fbc39f801ceb31ccb2a3482624e87bfefbbc78cfbe2bf7d98970c186eb5eb59d05c3bce11668539e4c650595bcaf17ac3a26ca16de05e900aaa9b1811cd7a4c3cd47a16ded8e80cb62ca5306c2aefba84dfa3825370ea80b4d9ecdb844677a6bff755e01b4eca96b3d77a7a2ebf10e573cae3388817b2778e1c50d809c427c8167b9837eafdafccde3dff442302f141f48b0d95fd4d75d9721463c87ea4dcfd58a74f05054f39bb807c2a6321ad96ce5c0822446aa84c36a01bad06844c274e459728fe1f69e1f9a2b84e9d0164a93091a53c5948b59bad63f4fb344ebacc37360b6601d4e1e6e5fd947bbfed918caf8aac7fc5d72eb30f320e7863ad14aa3eada92e729d5ff10ce2dc2994e062b0083c1e69c2b9f824fdbd47b18958ef03638d50b6efdf74ab49460d4396c0c15609fd8f2c55df7c3f78a58dfa0b2666dad076fa7d46e551466966f89a7544a7eacaa4726b34ac7fab1ac62a4bc0cd56e883aed4d8b09be68c8d6248dc70b925b6faeeebcddd2831c0a0e8b88efe5b8c9bc73611513b0d7859b669deaf338d3e9d147d5ec04f2262d2c86981af5182a353502ed17f7941c4f5e0ed58b2b4d861dab46367f8d01eb0496124279e64b60e842818604ecf6f296b4a71ca35645bff1790434338a3b476a7e632294dd77728c840a8c2bb1969c83faa073aecb676acfdf66f7adfcdde448aaa62eb39e47de878ba34c27d660f87e5c8ee4110e4805021db5d2eaca982b496c3a80ed87f0c271424b0705afe777cefb6da807aa640d3f5ba53a8acf523db2dcb4bfef58b6876611b5fbe0b5503546ff75aec50dd76603102e802c5288eaf2436ca8075dcc08001d414f7fc0fe67c492d402a250024766afe5c8e600a82b90a31aec89893ce5fc02680d3814ebbe5da516bf0eacfb4b770f865af906d3343d7ed2efc99f707ce86ed90f4978f9911682bc85a7481aa1f033fededc7d3b23234a6412a68d5fe9c48f3d9853f025bca00dd9f48a7da3b4dea7e500d9cb8aca4f5aba70ea6e0383e72f67ca237e0262ffe2c4893cee0be6de4fd7225378639f34dbcfb5b09a2e79b66919feabc47cbc71690f988bcbbf4d86c02f6bb4f206a664579e28f7a4725963bd8868b6cf11c69dba04d053f2484e2ea8e54acff0d19c13a5b6b815dcf2930bd577ca001a3309bf3b588352fe0fbde1169cc4d5e83f3411563d428ee896d8a3198eb5959f35ce98e444e11510b312a7fe078c3dcb2ff6007112155353bd78854a29d7296e8c05a5642c0f13ab717cf4def98c1daf9572e12173f9024469a7e16501112d609288e71ea1cc5a879e64c0fb55addc821c47af8961e8f85730e3d54e9f5a44a52c27f938f8092b3cb7b6a064323526ab38303216f322fce0d2868f1819a2cac9c175f6ed07f6253cd567572da322ded7cec61c312b141df448b388dab24e7db2b98f458b66c284dac6fa589def08257d1199892fa05995b9438f7383bcf89a84e79521455f519de6bfedcf0e9e51c57cd31306c7d4f2514567d0294529bd5e071b942f926d0aa1486c3723fa86e25bb286d0ccb571f013ae85d136eed7758a00c37b3d35108e767ccdfeba8d0fca8eb91c2042391897c6f1efd310fbc6af3d99913e84be7acad589f8510acc74134fd0fd010773943a41a901285ac00fc81bad6d9b3865786607650b1f3178c3385104fc3473704e71a157e788ec1d2e33f98dfb79c3766890cc9f27cf862a3de382969e856565be92a66b09044f78ff173f9f9cfd46642eae41e537599d63a7b0bf9633f49a08fd5a97eee4d9f1e04c2e5f95c4cc2cf63497ef01358843b332d876f348b4c59f2500ed01510b70825d80e536155a049f122bec57074c7e11e1d0ba5c7d224419a1ccc9a995e936d58574adc0955a146ca3d55225cc7312054314ec2b19544ab90a00700b72dfe856b3fc63e751e3d6d274fbbffd2695c343035ea680788283af2dc125dec1569c8d845a42bea68bb7120779441422300ddfb68ac6412693521971b6d01e2dd39ec0acd146fe59b021029e8534cbcf0428d63014614142f6149c9fa0ba33d007f83617806fe5f48b1c4ec8e711bef01c91f53ea2cdf9aa552672cd63fb0aef79c53bee97ada6b19f7046194966ab42cb9de63fd1dbd28f6f309e7831bc81ddb3874c2af81bb3b076e55decb5291b5caeb0d548519cc3cdd86d922ccaa852709851c69896acea3e31d7bd1735fb396a1cc5557d88975a95610b683d05e8bc08516b908d4208c4048787f290084a3ab31961c904f9937541b28cf34f3461a1a1ca2491e80f0b3ca3be0f56b24a61eb6651047335ea65b39b54fb830bbd30ba71762288484910a37196b84768d784b8ecc7e63785b17d8f3968eb581a83066ef2ec2c5dc815fce495e586539536444a74a7647d138c5ff0eed52a4198124945378a07d0bdb73520199cae05180563a1eec46d2ba0ca18276a4aa08667fc0225a5f4b274b3ed5ad10239d271be8e5e313755922b888a1f0932200f752b4e1717b2e1aca0bc840f6df878cf78bb17563ed8018c67adb98ec290a43bb7f074028d211477b34cd9aded22df27e55f6a09066854937e6929218ee9e99d852d780cad93401c48f4af57cdebe3f3d92b89d7f89c26131da0895a063472235f5220e9e1f925cedda5b412e909363dc00c73444a80f4ddf420433deb091a555061a62293a4e7afe84d64e732c5883a4c6db0c623a4ab976544591028a52d10db865549264ff69735b0558cabf1f40f6c2357fdec5661255bb69e2e7ec96c58f8c1da7590644d2f8151127fbee66171369cfbe5aff6b0efa563a88b8a68f602ba6fe4ba0a7d2c5feb22e8ea0412e10b574fa5fd65424dfaccebc8f9aa8df2f44f28b8478569226a4d4cc6023c62cb19b6f0e21051dbce9296d980cbba61e465416c763a6cf3f5ca7d2655a6bb3569b30c2049ce9678f5fdc571684dc235946ec0c8eb9d0d3f3d0998cdf07b9688e240d9aff197ec7b8f316cc2afc8a57522d70be1e3aad7efaa9c02ee7ad94d259da98b6dfe75b6d7edc54599ed7187c17b065f0375624a343983bd0160896bab060d5e0c864eefb5b1b93d7b83ec1fb13e0348030d630eefaf6741db3d67a3e327b0deb94db780e4f95af01d4ba03ece63861accf94be1bedec1aef0483601e1636d6c6384f953fef7f1ceb336e87a673db54b81d408b5c4ee93db0f521c680e163d9494e57fa65856b62de6d5c02cea1a1a3fbfb5648ae7cd5db8aa08ca9354b327d1096d2eec993f3285c4b3d2b0cffd2fab6507ac30b0f84bdbc4175aa0bca71c7302c4b48f3a0131297efc20884dad2d86e9ee8bee30763c324e3d2e2512f3ac1535217f1df16b1f2545219e41157923b67d8ffb75430d9d02502fd305b0f085cef2db820dbe41e5441c6fd3c7e2eefc991f160d3e27c63145690cd870c0de3ab25b990fd7b09631024b289c4c6fdb16e8001f2f196632645b1f7784f134fb5365f2f4c322b2af1fab005528e0c6eee7266398e9477f5a74dd3192dd98a3308dddbc473bf76182b95611286efd538fbfec0970aa9b523eea1f540700af8b14fdf99f3496924b0babed210f2e215fba5195859e8104d93409bb0c68e4546cff33d953eed1faf46f9adb2612bac6318df501b0bfda90b874070f22964ba6957af657d3ba7f00b4a60a10bb25ab63e43bcae794eeedeff3b35ecbabd153185718195d59c4dfc47a611d2f716809ef3eccb19b635b30c39344516e878236b0db0895584742ada8834dcd48f1e8c63b87a6650a984042144ddb05971b1d1c271ce80d4dd611d60599c55b4ccce664c518e690d94c36982b0b5755fa79300898d1bd8e2cd2904bec874baffab8a8cdc946bea215039f2d4a8c0547f5098d7846c622f6ee590ed0742b8bf0650ab21d61d925e083fbf76e398904ec3fb8126ddf808b360e4103d6a69a77387f6663587020392abf26f1872d60642a7cfc82e6bc8e937beead6670f7bf064ad8d7988579d85b54b327d09c7cbb22c706acee3a782f95ca0413ba4c85c7c81b5e308cf3297ed3d6003cb2f93491b6207dee2fbcef19b26a705ea855809dc6540d694634ef102a1d292a884dec16842f2384e28567db765792d3b919b8236c583ba828e6329ac16da57b254682d2dcc6c8734235ca0d0afb53c30b12f0017e5ef845c2e80e2137539e83f44362629ae40948d620d4b89a23b344a845fe1d1857f8fa1ff7155f119fb1dbaf41b6419003336df3d2b1ba86f21b319aeb19d03112b6bcf4bcaa60947cd13b06de225035f5c7790f013dad802e60f8b351f32180a37d2671d5b53785a30025c46de51b4380474416b04e63f3f0526b69b0237bd1295c1c2f3845a4180feb6b256bed81b463f8b59f4f3e7dfd93efd92f7c7e31e371f90dadc76085ca783b79482cad41fbbdec877c4b178ab20fd0ffc6788367583c756843e3d62eee325f4c2ab79dbbb77f4510a3fe807badd831ad8e902c6f4edc3d3e86cc78502caf53bbf2a5ae334286b04c3684b9c903e55cfeb0e794981ad1ed1ba1ecd9319f2c87b234ec65ddf8ef24e94fa0d099a87eb60c90d5d53fe0aa10b58914ea7933fd4f6b97ea9dfbeb6949b4d9da26a1092dee75e5189f49d67c1abda91a9aeb1562649d1093786b621c3caf413a62b76d4f5e70b0134d08537791300ba02981b38fe5e9f7f1a46cee7f2cf16beb60ddbec013ef02f11a60abaf2db296a39ab781b5b6cc3b60554453b08a8909461e5208c6bbb3de8fcf6310684589e74d51760de87b0e8640923a36098dc3fccd583d0115d13a0eb96f3b48a043004bce3e6d2e18b639dd0eeadeed4c943d68965886a6435416835af395c40c647d4eda32cbdc2f9d33fc86aba67699431cfff9c74706f774712fa1d625ce0260653b703d14bcb26fb931bbf16b1d6b5035964c8453b3cca790d47679ab280c657981662e53838fa056c906f4d78df8d7bda33a85160e359d86be8ae190623412b1ef1a191d323964c191f463d02b1d968a8bc6ce74245584fe6615c89f16975d4e37f6dc652e414647eb10d6fd5d9dc818086f460f7cdf8b0ad27744c15cb1eca58d227867f53d4537114506be2adcafbd6d21e1df1d061c3a2b64162fe71ccf1d8099a504faa68d34f950c6627accc12f4455c716452e5ca272e94afddf3771811033df4a2f88b0a666f14a282757b1dc77e4f7ead08097f262e8dc5e934234a1af6a5e3a3e419631ff2c493a3a0d987c8350518f0bcc363e4bb5b161b4066744ce308a3a24fa2b72a589b3988fc495b102668fa7a466339da4da91f59d5089cba40af3989a263761d9505cc4a4cad2ddf31d9fd6367bc965c986314ee490dfc5f3fbe65338af3deafeae74cc1762ee702ccb289fde76eb6023e009a1392b98b3c43d11d018cf972e2e2a394789e95935232051a65b625a4eb7d388d2a90adcbb2b5144b54e99abed816b703ae829f1ba20d19b9bd0931bf2966070b08aaeea7f293e694c2eb65cd31bfbea99d9226cdf4be84ca7c5447617151409b6d9897a7b602e95993389269ea513e0415f7b275a6fcb7bbd9648432bb3f56caf9df3adc04dd336d292127b725a425e5b751bf26a7739e5bc52da51a8080f30234ebaf3c6988a13bffa12404d0e9715d966b0836ac5806ba49b22e0292a8be948801fb60200a856c140532457ae63fc50515561078cf0e826f4e30808442a251a2ed4da78b51ef99735a9f71bb9ef1522b3b10d04fe24d430a08bc3d56989dd5cfbc2477ce6fa49a3f9149996b0082fbac0d3e3bc50d37474d18daea81e7f4d63273b53f38ed775622ca9bb8f90009c626327b2991c5af35f4bce789fefaf62ba47c4953742c49a194e33f778f1713b83d9fa9cd079c9a0a975c947d7abdb34568d57833fefa8fc639a71c406347d9d292ff361a19a954677c805260cc58cc43b83cff53612ca36fa731222166be8e2827117ab6df152a5feaa1859b6a9c45d22cd5f688148ffa7be27db5a7d7d1bd9a720a99911602845b6984159303bc5b01f3eb51ccd8956a52b09c902d7c742748c75b89851a9d17576e8a0d24abcc6d522c1b0f24da734c8c9eca9bb8f90009c626327b2991c5af35f4bce789fefaf62ba47c4953742c49a194a21b34e3c7c2dc8900ef8bca379226c7e089b81574d688324e3c76357564e2a17c02e6581b1939c5ace050028459d3000860f5a08a389cb1e127d2c86dbbabead85e708dc368ef8ddd70177252e5b3130f44c933d5c9af6802393ffa886014ab76a38faa29451ed102b2044020483a224bc0f87b3fa603329ca9ef916c4bd37ea38d4a72ca9e1ee7bf47de04034491443c63af7f62f78990d9e8a1cffc93661e4c78a7cfca29631b4206175bf6a36f70abb73e434061a2a48f901ed35f30fc14e8ed6edeee117c6b1dc08dbaaf932d4488846bc11f023ca93790e147a6ee908e065e087e4873cd3a168c928713491dc6d554ee26a196995f868270f1ae8cd3cf9da71e6072e4a4c4b5e959a0df16de4f51cbc2e3204c5349b6f8e9194504fa24c3a8705dc8326871eb365f595dabd9cc098fbd51f5d592fcaf959e53557153e901230b4acbebbfdd4c1dac5cb6a003228e3cf4c988244357208890933a10cd72873a169b7a8f239f2e746002d5b6e689ba8ea945b02e32642471b58a98f6ee3a3281e0cc864d7411b3e7fcd1f4f3b3070c3ba88f40cecfbceacd8ecb67c06f35437302831e4e00e215da16e97653679f9b7a3a2752b082148137a2f94496af9d35ba70600b0287090950a65b844adeae5804f76af84f141dedc3bc466e31d91f899a2fc87db958b76f6b0e70976b38b2ed6191cd3dcf3485ed7469047408d93fa64ddc88ecad1564403841ffa56931d6d8124c43f69f92efb79a838e3e4438bc22812743bc0f17c14b0956c07e7bc76186dec9cc83f9457352b5bbc5a709983684ed2ed7d893c370aa255c29556d8980c0fe46abe1e070e53f24682759e78df27eb325be2329c96af768fc5b7ce16bb267e57ed5c076e4b84007b9b23251df4bd0985a58cd4a9eb2c21f3fa8dce9e32bf3376c9b0bf028e6d3fbd839d16f353d460103ea229601b02a99481b5310507e8979505fa14a33033572292aa148f73ed38dbba4022ce78ef6992f469bbff5fd2e16b4fa9aecef1f59c845a6fa97445a9429cb5f3334894ba2e2b642d2dbbd67bc62b0b68dbba8322179d5de6bc24d336fc40d5e2c96165e11fe781e501e06cf5439cba99378302cb298a50d1eb3deee42baec006d5917405f7539f89a30dfe742a925f40ef6f25ab75ccc48c904be6c1c3e2b4724cd3c33dfdc881f0e4b0fe34cc188364718b4e4588b32471a84e861b6cace0caf1b72f04cc1d7730b28842e5566f90fe12fa029eb77916ce48afddf1b12d0e01d019c605b8891bd68dce1c73e8978dc769e11a973758a7d1358ca15ab25c2c0d78e86e0840873df5990c23df371c0943cdc33fece8ac93a0f55cf60b1927a352da966f4ea60384c046478cfb3d1212984fe9e80d2c1faf13b5720afa2c61230042fcdd1bc7ab113458fdeed0e365c8c1faaa78d7436091a12ac298bf39b98db13db22562ddeef733e45809427cbd871599a113935a5d78dcaff5a40826360ee3acb65335e6e8bf7800807431efa345b310c41cca3c56d10d46125055e514b32f7731a367042787ce001ce7a8148063588d3634fee7e3b5391fcd893fe6a3a0cd7e162524719b0b61bbc57756c9a7fba8de8d4873dabf0f6be2c7bd337b37bed114a54a716861a0074ba22f5cbd10953b6a32d25aca61535c513dc2fabcd26845bfdb60aa0a1ce01344035fd52ff5bc11d4547ce568b0d9d56de9997355896a5cfc726261bd59d4dd4c9c5c643033b32b8d4d0eb10e9bfdf7fd0bb7f66c38d0a41493981f8e2bd1de5e51300e3240befd402c3a080f815c69a323f69e6d2fc7254a1fe8d8fb90080113246b5f1fd11dc52075d9a18c5c5079eb3f3fe7be7afd0d75d29f71a15bc6a677250cc7f5b116596b902393337d01804f73b67224c360a83b147db97007ce8aaa1199f6c9943813cc9d57af4982d3a7dfd269aeb2546909fb586dfb62657622c8ef4b57d21a85c4ac75172f12e729c2f307db1e68d4a748fdf94cb4d83f77b59c525c353d1c34a17e19a755adba43c0392aa634094889d313012877bc37ef08511b69b1f0a099ec145f7857b1413afb715e8a9ddbf65e9ed34c0bc3e121660b9ec3789c56a9f88b33ab922c7d7d38729fa429cb35a131288819777f4507e742d8ac9fcd76502275c39fbf9d8ca1adae35741cd00580b4274330b0429042fddb3b3b372e19e7a7974da5e0d0bc0fda39376d54d1a8dc9f5a4cecc24d6d8b00337a8ce78848a342251dfd99dee994fd06fd8f39423e10a2f4ffe963e10189f66221bb5dbead69b764b8b3616fbfa96b7b5123a5e9ef1d62501d56d0f540f5048fd25bdc8a59906c7a66e26fedc100da6bef70600fbe4c2d2fed2753f406deccec210a3d0b52ec07289d49bb64e3a7c2aa4e44f9ea972121d14ddda6ed39bc58da6f52b4726da4d7c2599366448dfc9d524fb5f7e7068ab95e2f155465e29477e39a93cb436d3ce313f3ae63d4928c98da13e8c028fb01607f567c836f24ae97b8e5a461860f3278fe8d099e8b7fc8354dac2239f611f147560dad4d7528b3f6450e51cab91ab16914d4279328bfab8b20396ae55793873c3f9f815ddb3c85e2d89d7594d572374bf290c0727810ce892e662455fa42fbfc789c62662921557f5743edd93df2f606080d0e555765e584cadc267b4d116b47b23b88cb655c6d838d50cfba666d2076d934193008a180d12940efb23fca6255e2c8752556b871d727109a66daec0436a9c6f8f421e4a28bfd08a4c4e464f68a93d7abc2e606f679ffb7c69c81f6e52aa14b8ff1bb46248e5d8b63e6c0a74dd53b546efd2ffca70897daefe121d794ca6fb6f1427c00d9782c23e43b18cb9427ee0ad527a72dd233937a6ac47c6f53e295c8ad5cfd3793e15396e323cb6aea1ecea61799e13e9c0b48034794c788bc3028703b062841299944fdf634a3c3b7ee1ccab47d56591d6d5ed7c75de489a08da09f321a002b0ff9aafa5578fe043834970a86bd72fdedfca57aabee75c3d126e3ac80a3eed3f65776b2f26fe775274d474168df7e5cd52fd64dfaf4a6f36090d1f15011932a7fcf4a0441450c8c3817d41c895af0a4a1a46d9be783c70f2daa4d472e8e8558aaa51e90e6f5e4421a7ab2f555d80c15b9ebd078a59acf0c418f0a365e392f4a0d787ac102c3685b288e62aab022edc457f61157e93e6df8f138142d77a198cc16fb4a55b250d83c6883b40f4de3c07d7568931ad8ad6fcc26f18275e7146b19c08e09cf4b8dcda579f8a6cb9c0b907d4be1ce2c4f088a155a430f9dbabeed275ccdeda550c69c203ac3d378a86875e45dc9d093b085565df3c85b29f9b78c7166ce4f748e5f909be1007841068ba3d909c434a6a885619bf3a69e92b80222693edbd01c5a3076384ff24fad106753a98fd04ef0d47779c412eafeed17847757dd6c25505c0a7c819955e2e7a2d3a5ec7299129353f67edbf916f31836f25a992dc1e041be26cec729d5fa87625eccb3d02266de328bbfbbcd0dcdc1ad9de1e9c137491ad92f753972589de00e3d6c352b1db726bf3154445ed16aab5f8bf92fc42e82702bc55c89ab51b10ac16ead6562e40a9bd8674d83d7c83d89f63d49d800710aa59544f9e6cdafc5760b38b28fb0df1bf65cea0b9ad2a26541d1692829c683939e2ca1c2e948ab9ac231e03f56a1943c7d86811d1701258c236c0f74a4822179024627237cb62bd77cd057dd856f7822f8689fa9f01dfb4216ad28885fad0f151c73c8052a2979f9c7efb6c053ea05cf902932da48fc52f67c8218ec8bd8c3dd3071e7d5ebadffddd380918c76b4a205a323e1532fa9514c32d0e5fed6ec791d3c9d8921d1e0bb8294eeec10685753e32d0805bd254b25220cdf79048553602d541b647654602eef1f6f5e803dfed7f4e1280e44ec9f9cca7b64566ec4209c70ff17aad7fdcdb194545eb501d9af54cbaa3ccf56775d23ce02bd82c6b10da06f7d59f176d3e2970fb4a674b137f6b2b4096250aa090729024203ff458b6daa472b402fd0afb9f7dbba6b3987df1efae0e125622d04fe16f6c31b17a3273d32c2efc380a624f5eb9a1814cf3d40fe6ef5f7f5270dff3682b9bbce639e6ba27add2cee39719aa8b42d7d1a457ffb1b86b2e5e67cc164198030936145a97cd91470a373d9e0d5d981ca8f635a5cf6bb85dcd327a99ae52145838ce91a01d2dc872dc9c895e565ece704d57393c32c3b6c05c01d039d3bb484f29fec67c242d3d8a282a3345d2cc67ad9b3332362c314f1c7c81e7c6e86c3ecd3fad2c70864a7ee713243f4410e42abb54131c63a62aa08a2a19f457e8b576708132f2255de8e6183d99903588ef02cf1bf6803ed4142034b19399ce1db92d4bec0830cd4d8297a0a2f4a6a831ff66966ca2d52b4597ce9faa0e9398207492aed78bf75bacc8817ff70fc8122669a846fd3bdb9c9ef892800eb958f79b434aa453010b1967c19cf2a178b7b6976acca304bda068c14ab3077e90aa9ad4f91d9b660400984efc8ade29cd97aeb24443a9720430af01f2bf29213ff39ffe94f37b50d8ba0f73da7fa7704896e2e08fd758ef29cc84b3c3e00c3c35186d72daadce02e25ca0567f446c578dcd5b41264c14ada7708385df95932b0cbfebd2a7408c16f72f089dbe81f0a39ad9f6486d3a425a5411ac50cbfb6bd43ebc8369808266698e276b8641cfe4e2922235b6104f8c4539574cc397b1215f51ba7d608df9440e75a4f1e5643f7533c1bcd93072bb321c4dc1a855d68a3c7696a9eabdca5b590934f0a40244698af0e5703ee5cf34b5533ecf8b68509bd5ee4974a8f824c1cdc8b99d1d8dfc8233c4df68ac3843273ecd449a276be32e3887e57f5cdd4162c0eb251bbdea405c84d113e27ec6ebc627763086f3b0c1c93f4f0ded40377f799fbc550f2a7f0c7da66e0d192b1cce68bf8870155cba2e0a277a5ed883ebc9bddda851cf89d210d0bc75031b77987117691c2a73bce16f7a71ef45bfd659ae31b663a98e257bb739fb7148d260784f55499555bd00354949f98927c368a1cea262590f159273cbebf11f1bec71adac35ec1c517950ef7ca115f75c95f6c6ff057b2f75f89d82081b457a6566ff7e92ebb8407d438304832b6c698c307766d7a6130dc96567cb105bfaa5ba3320bccab9e1330b71d4774ee9c2b5033ff451347a8962f3b2fcf84e6815fa9ae9082fcf3cd6cf996ece285cddc8e242f86fbb981c477c3cbea819cdccc156064d66bc925c10b03864c6dd3ca223b3e5121a2434f8591e4bfbebfcc68351351e70da96c214122bcb0429d04fa048bf236d03c878836b2a30629aa3b869d3fea123ea667897d4bb2fda11c8bf4708893f3e28d87b8375c10d8416e5faffa74a85871fc1a3ecfc610e13719042948703517a308a0021f77696de6c0852d837d518cd55720c79c256b1bd79a8dc22f187fcc87d826dbab5fd31f1037c9a09732021306ef2bbda55ce9d7cfd0895bcbc84b8e18481444c3ce2d1e58255e59ac96d7c72096b44d72c601cccd277bed1f2118d84e540dd12d354dddfce24146ff1c20b5212abfe59b4e190587db587004e35fc7b36427cfa6cc09757fae9032046cb729bbf750c5192802d31f99c9c38cbf2dcd0446dc53e0425037f7e06c6a7b7a9307842bd71df5fe12c7188911967c07c825a6c4a92ad9d04fcef96179769b0c6360aae5c5ecc23f9beb7281f259f71c91d9a897c8268eea6124b77e69c1ec69665de5af024db1b8c6f5dba6ff7aa7a52c7e9183a7f4e88c02f94a4bfb7ed64e243cb95d6f03f0ad87198d4583dd28c17626432e6e20e8ca67d1afd9a3af394f1ee1368873cabb52f4e00f7c8083bb890ca65c657c91cb413c980bdb48b8c1f5ccf9c3287b530f62bc5ec886de0caf4320d8ed17773f22b1bb9c912c86d4faf9466784726c9ac50c5d4d1801b9fe6e4a99968f24952d3c29a2a2f51772fb1caf2510d38f306ddc4d0c614cae195960e210a0c7693bb7ed035e47cca481de5b0476d2771cfa390896882f22afab5f4c9007e25f66be0ac4905cf74aba10f8aa9c23ec35afeed4f4bc60b819d6f5a8eb4ed9694be10fbd95d6dcb5ac2d2f17242c128d1e1edb28649b81407c10598f16472d03a02b4ebeee9fe3abc635f79c25406cc443d91c300f9f04fbc02d8b6cdea938145f8eddabba7d3b2878b6d02b3d1bd23699600e27d6363de2234ae31a272c88b59f72621705069920bd2f75d2e7307d7f7cefc99dec1a6b292c946931614f167976a7196930fd22eff8c220e0d5b50f40e730debcca6a806758fbe242fff67618732da097dba59f6e00550ed2b4376d0d51d28ae2966ea5a55b0a422b1ff754797da62a5637521ca073e46d5805ab2a7f350d589065ba78bc9e7369b241df77eab99142b30b1f81f25ca148773f5665630184e99caa061fba731abf6a3d8a79343b91e90e96b3de67934f87d4e5b6a9bf21d8e76f231b79d2ff7fdb37482931e96be0ec572b84729b345c16edefe9b2eca4a985f1b5c4ad92243a0bc8c276c3d15a8b0eb990fd8dcd4217396c1175da5eb17f4ae85e2632fb5a620d8157d1226470db442c175d427cebdf3c09b2740465753ccb0b900be8b7afa84f7f0c21ccd9bcd2be29fab26eafd250019f4f04413c118112b4ce7ee7485398555ffc87a4fb606b83a379f1d662db731ab4bd07e75424e4eaee3800faab276a7a377612d100c5126e4fc7da764f33fff409fb8acc2deb111451d2261d68b62d03722b02b8523556b7aa03be558cc5cdd7dc9c54357ad4db4e95c41b1a1b1dd4fd8a69bf7612ef0da231b80720a60792eb876be549940b2f21a1cb50d4c7d71436119d3e5aede98f2ae31c4457c03cfbc483330d8eb1fe44fcf4acfdd84a1284d5fb3c744b946dabac61a98231c704f8abfb00c281012ba03086b27c860eb16b78e636a8a83f65be6ce68e3f4b4dc262930192f8d90f57b7b13d2707e4535bad0239fbd68b535c0531371ce2b5f5d098f533ac6d08cc0b74e7c6e05067c4e1dee3f436883de93c425ed87cf655d37f5a6c2e0b32b7099ca3aa92506d3290cb7523a5d3f85396518fe418be4898908f3a8741cf5f9071bf8e6b712e2eec768e3b51a3790205517a6e6ac4ea563d9ecde25d2284a7cb3f4090bf2504f3cce7aa4f31c9f15c1e31eb0adcf5184fbe89d6338b607fbbcce67e6c0e9fcde47abdd9ef36e364385be359c1c3662955a86d7fb6bd132b45351241c9ff03887062954d33ba76e42288974f07f546c8cf6cce29b5e4a4fa2caa14eeb4a021a7ee778cab3372ea521b76bb982911a987bfab6833c900fb67e02797408248035d86af875173aea694fc53b877cad8ccbf1494ff002eb484751c12c83ba27805d00fd17abc1ca9d5e4210d698db4dfda858a24599aff29646e3f6582fffcdff85a69ea6bba061d3c29e78d540718f9e633d1c0b64506d3eb1151854e0ee7b9c0ac5f741c1f491f4b0d7b94b32249678227e4e697ae71eec17d6378a2c19c61841b6a4a2e359920274484a57995e9626951f07c21ecfdbff95a9eee46b2fd51a3ae5463ab1b776e913d60fcba1caabf68963ba0faef2668bc33367b3f8961fe78204434b530dff58bfafb6362737a29182a050c768be804355704647acfcd092184b4233065caff328717403a46419fd9a196fb381ec6eaef987a458c058ff358e521947cbfeef64d8c46f3f4f2047b38035087cd159cf3e09f61c902fe4615d563f69c27f1ecc20f514dc259afeb99e312ecac6ceb0f605f3e5a4a8b4b655f4b465933f0b305f553c39f8f990109289ba4220b086b6d265910dde63189ad5f6a3052d5ccd037cb580556fcb13021bc3c5507a209521d2469e3ac48acdfd731f341b1df39d7682225e44a9cb2091cec6cecc8cbe4b6bd418f4cab4e4f177f84ead09314c623cf15a6e2e194c5bc297e7157f891c3ebe7e6fe0cbe07760203bd6d8a678b0161819371aa0d6a5223fb8477d3ca7967e04cec8eae34ebd8d87dff7989ab6675c751e7dba76c7af9b9660916e1655dba6ebc6fa3eec81db70192051b3428560cf1071c1a0ff9e22bb4423f33af59c8471320b66f400b0c623c11d3a0ba9017ec5d7ec83fdf8c7bff03e91d539365af7bf4d3cabe848f52428f7dec8292c59abb5f9900d596be0ec3a73571b93d27ed073d8ea14e2578404d5beca8db2ca8543e5d3fd958d8b756f020b4942fdcb7aac0f552ac3146727ab401e5e63eed5e424d51dc31442c8a863eb339e5950f8ee2ff9a45a1e7ac9828e9dd9b799e21654d18f6ac055879b0915cfa786d2ada04ab6efd4df9a6fdaded3414d6bd7cc2d4a0bb4ccbcba405feced12299ed90441f43bb238439e6b8a0b88925ef54e488318147f0f12717003e65032540755233754141ab40220fd8a28e5b5fc7c06f549216e4641af8de4d5518c821aafad9eb3d3668b0b2334f9605eda9512224fbc509940ab21696945ec8f4a89d33dcbafc640608f2557cd2658a49bb13ef35c59fbafbe2c1dc742f88cc1d02d63ed6dafb429cfd1dd0d80175cd7612fe3ff1c6f976421667e0c878c10be9a40142b25e3f81ee99354403a687190bf602d6b0d9d2f60434fcb6670ce7d682f32f97678f8204120de0c4ce44bb108b0b180a681de386af4b058d4db9fce3ec94a38d0632aa156e29282131e9fb8456be72cde80de4dd8ab5ed11b7e2743508339e106d796753d65e1c7d27dafdb391b2559da616040c85ed83de9a19c1003ca162b58ff4e4eb6156059fb6df0999ffe711b865651068ea23e16c3c70f62858de8dbdf24b3adcd6271f7dbd73a5e8312f60426d6a2a21f6db89f99d60db88e4027b3ed384066b57cee16576dfbd112c188b01122a8351da9ce7631a0204b18dd0f97d18850f32ba23f2f77916e93816307f2ca29f3d9a3dd7c77a4a65c6e20046977815c3cae8ecbc70f057404eacc87fff9bad583fa44526049bb77c22ee3b6e3c356c138c02be128c6ef86e4b2c8bff42d349bc5353b9e9e8966c46d7f966cff459eb948f111c60aa96c0f76b77d9bc67b17925dae8060f7354f5f202a3467ad542477a7ffb3b06ed0be4fb276bcabe8cb446b4b3991e515892442dd81782534034dfff4f928f7af3cf1d0a5424a106dbac7b3e54fe3945c9df9a515e9f95e8b1d856ebc0fc836e50d10aadcc049b219f362e45b845be4debabc6e3e672afce5b84bec2afbd2c4a971caebad171fafecba2e2dc29ab98c44d24a86a05a374e95046601bb1d3a14a185cfdb6a2049a2cc3ace5c423d97f46e4df1b34271247ad0aa0b0b9966d2f4bb99eb5fca605ef8086577c037b0c5ffe8bd82d091aa95d89571f84a4edab99a376cd08a0bb5e37c8d0423c2d90da4bf24315abd211f1a4339f78599892bc5cd83624e5fe39e3bcc5488e1d93d819a777025dc87372777ce50e8219f5ed47541250ac2a366205a46c1971936557e538e1f1eaf6a1c705a90426dff39e6d914981c31250c44495bbfc066cf6f31c45bd06279d64d223f5d2b8e4f9feb74ebb968519c014e80e2b06d5db3a3c6e696869a5bf28c67dfb3bbd821f17de64a3c66cbddf84d266aedd3b6821a133d912224fa6332d69b435013ead091cff7cab80e98d57af897ad936acefb2b2689d25591181cd412cfa95de657dc332e0c98e5838a284b373157ed02786d0a8352210a4725dc27d5dbc6915aeaa857d5057fba9c09e8486f5101ead38dcbdd5f8b83adc9adb2b2ffa792c60e2c9c6e74cb6268edfb931dc3fb2db998f6ebfe9f134f06e23480de5d90f404a820b32cdb09da8c3364180e37515a4e88fd8f2f432b01700fa91b0808f43f296045053798e288f9afce6120fdb4f2352f85f9b890324fe0899988e88a926f3b8427efb27806a7b1ee71bb942a0ca829c078f800231fa09ab3a11d15b900f9919ac3e47219284341a1396ada68403847afa005bb103f208fb607249407e2607bba64cc2a0581674c2aadc381b85e698282705aa0685f601d2fca56b14fd4cbbacfd9d8202817bdf4c3eee780930c75bcb7922bf3fd3c75011ecd886ba218141bda8c9db544db15838617d3c7516dcf0783ce31ff47b2a910f160b99e7d761d143720fbe1ff822f5f35584dc154ba3af09ac8fde401b8294d3b340cb0ba394be34fff089bd361dc0857731045726d6f732cbd3dfcd1727b29a4b93421785e62904cfe793ebeb77de341e50a0e167326e95b1d35fc5a56cd19a09b63d30b9c97c5fc125dd7ffbeae5e50c5f9378846bf6db22c4e362bd1d06b2fbdb39269735c55799612548b5d84845addbef5fa45f6847e29323bc1930c9090db51737298ca3f89495a9b25939cc058d8b8c12e2422ddd65aaa107a9714c0456863c11d9603a6836d6c8b5693f91fc5051753f152b783421184173b8ae29bc3dd9335b8b067e10b758b931a2dbc05052fe104f7ccb2c95dba1de8208198ee3732acb1042f56475c7fcad96856ee4ecb34819bc72b07fcf431de177dd31e3ecc835b90a6e4fd9d775a736893c662ad1656caf36644ce5242eef58b597c576a44bc960ac0d4c92da515584e90f758ced4ecfb2ae6e235df4f45fc65ceea5e487a8c164bb1460a58752418d9786024dba1a4b305a0ee4056bc1ebe6e229d1b1fbcdef7c4cdf31bf2237573ef6d842a0df5443924653ecae304f588cedf9188c7aa360e3db9f27092234f81c3b4bd3dc43756328cafeafdf00f843024ebf12c777ab98c29f13ff20815c31bc67e331e487a7ff3b64845ab8cd2f16548442b7d5cab8199d83d0547b0acc3ebbc864091edbadbfadc8cceec8d9f3815954ebfbc10e048c8a8051e07ed6c5ac5cf4b855f6f08fa5815c8ed144648921becea29ee422e2d73a105237f0dc371bc8db5a6ec5accf04f0433cb199a6770078a826e8effec631baa91164e7e560a0bdd74bdee885aae0e32354c19b1a2e8e848d916424bb9d3b263168646340e68f383509f738ef8793887e7bb791d9f418da89b4505b9a25f2bf3611718ad4db25e655d17f07a4325fd260f84ecaebdc75edc8d4c8c9e9acd037614b04a3cd952a6df91e39ead2abbc21d5af940c85e35de195fee7fc7d2a87d2dd20028772b09549cfc505a5c6821cfd92f668fbdb79f177a34005c9182742652374fc27f4e3848ba66c45224218623ee6e7905e5facfd72b56a44ed0111ec758c8967d3268b54ed1d2a9737408b3891fc6ea8625cf9a68ca4bea85c26d3c38532bf03464c2400bb38123716278ff31743613dd77619474252a3abb764835eb04155df0cffac6d0ab58a2ed48e9dc6cad9ed6f30836bf4c924dd86db8f004369af9db9ee55a54a8b3e0c4c792f4baac97771cc8cdd31ff0b5d13e6b93478f56a66879b0eb293f1192f7d42d64beb7d71c819cc35588f9a9e3e79408b4f839f5873668d03226d14c5069d1e4d45174945faeb995259706b878722a9509187a461213d768e28a033f047ba7f7fd527f910816c18cfc2912256c235d35ad537c25e9d993df1b5077a5e077d0decb15b0c2fe9255146cf2d27332bd6a0360f7527e7cecc556604425a3cd543b7a38d5cb708052f2bcabf4632ab2e8bcee362ea7ffee8d4d22a44e23d81147bbb83155c75fcfc7c8b333bba7f2a859f78bd93f8edab86866313d7dfa4df6cc16e13ac2922112f5fcf1a9eb25da3cb90e752ae25835ed9102bb74e6c78af2df1448d06337661affdf1725650662fa1df12531eb4b607a038270505caea6e6d29da087782c783cae840fe0df9a6c79e7e8bacaa25651e2b5b337a1e82f5ab7eb4ebfc18255cb10ff268dc36b90968c857ccf435747a82585af93d1566b6875e02bce576c84c80ed440f6f0101a0df71e5b63a80e59d390083d38e20fb7cf719e3fb3620b5260546f791593d5d33b51d6b2e491bfcae021a522aa52af579b68f611555b1057d76dcf56418cd80baad1693ae07f22ba0bce34f254500e262f96f8786e8c7ad2ed170e7f30b06a376f8a76c3ebab1964358d8efc2d8478f915035f58255736baa8d522126b70357269696a459794a5d0522cbde55a269ed419702b88d4c1a9a8a595fe129555cb0560915baf0043a50aa53551f205fa79dad8fba4f9f0c29294e62337ec9cf7929428acd9a0f4cecf4de5828f99ae369405171253767858b08b7bb76b276cd15b1d2879903222be68c0bf3bd94a3e4b09a2873041af1d8f5b7703a4e2ff7d35e0394b3b61fa84ab3373231851b4a7434bb3c334a410f8c7ba73abfe07f59e9ee193f9349cf30b9cb551e6c979c20a3691d3137f29a313941391d74f82e9edf16291267ebcc5147a3a250b6e32de69baaad1c9b5eb7f301d4b461b6917444766a289ef7fac5bccde754b60b6a54b5fb843858e7aa488a3ac598a09169ad6a35cceca7c0eb2bad5279dbba61e4ce19353c1536ee55b22f19ec3b8f01f8345d7c670e69b0daf5a5b6be09ecdaa66df56c4a0f06feb23459ab8b4086889e37cee2d49af819ef131bb126b377e40d32f64e0318a3a1acbdd180d997d9d6809689e3b76010fe89e22ec63e4658c3dc6f3da2c11921f2675a44a3bc4276604691efec476bc965fa6be81b246ce056664d692fd4bea237afcbf464fed33c2bf935624f19656fde531d5b139f7c6fb4ee467995a79e1ac2e9caee74124c07573029167d86b55f115d5ee6e76464c19480386ee1a40472c2761ac70231a23c2b03e4d721a2fe097f900afde08050077b552e012639895ac8c857f74aa6dee39dde69ed8ab3ab565beebb63bdd33f44b47b160c6fcf8e48a271f66f3d3c44c57e77f4548612dceda9c5c2f404b18e6ce92486298bd2f73a1330b23e48bbf1b3854c5a850faf5542d15d77f5c6ba9234e16b4cdf3180c42eabac4f59fce156684ebe0cfa6c64d744144a25d805e2a4f6c2ac051d47849c3e534edc29aa5e89c6210b096939244fbcb2b855b9086f06f61528f99cdc07ae8f3f70f4c6f8a017e405a298172257b17d76ee355b5e987517415cb7095ce0c862b4cbe24712c20d67edd47c43a65eb9daed3e910ae6719b995e7913d57908464ef67379717c592f6bfe67cb892cc9a75b84647fc2c30e24cca163c4d533aca2be86efd6ec938352e86a79476725dfcded5dbb47a2c50ff356bbbf9c57738037a12a50d4852a47361349e39267e7c5b8b9580d0d70d9556897e007213e8db8e3976ac80d9e872955d32831517e1cddb6f76e1d6cf6aab4d0acd4b354ebd3c8183c5f2e732d0cc651557b485e4305d879c9942ce669ac03163564c0a0518f40c2a8cb26f244fc2946c8e8f7762f7f0654ed62aa980d6e393a82f47e6b9a5e243f67092877230dd4e3be3f955fb96518f9671dfa9efea07054e13a35e31380d0e48da25aa54ab0bd5aceb9cc544a6ecd9427fd4790f45bb7086b657052b52747d53847fa531b44eccfe249a791f086ee1b8ecf5270bb7443611e27929cfc361954ac4137b90be6a0cbcf792bc52f209af0d19f190c5bbd85796fa327fe41dc65c55be5877e9fc2cba986c6a8d3f6254162b5cbba1ba9c9a91f1f4dc5d69bcaeb96098005e02b561634960253660a6444b5591e31477bfefd57e7c034476ac2105071c81ecb274e617bb26000de6d3f43f3ee3880314dfe322e4dd6abb195b263ad8d1ea9db3986d3358661178ae7c59c18f571fe530870b2557c2da39af40237a7e7505ed75d95e90a4349351e6067f9311269ef14ba0a13ce2becd4f791f38e5091d6f048e2210758904d2e29505f91ed1c18124de42eae6924250a08715319ce9d7f76690b3bc7fd199c0f81f5c66c54a9186090a16e963c3c6ec525c60c96fb9c3f38ad531200ca0aeb55c5ec23d9af899da692213eadc496e2ee6fe380e8a1c1175db3c4347f2e8c75440e8808a8e7f17a7f27d5b3c8b76703f949d5408debcecf0f43b7fa890b1c9720f826d9325a419b9b4df8db9fa9c52b3add8e20e8045b42c4cc47a8ad9e8dfd855c4e95c783700615f8d94374ed2b4231bd276c2211d33209f2656ff44029d69a78096c6da307347da17db8f8e60776318e088e72f523760996b63baba150d9f37f7bf2cf34d6c0b66934fa6ca7398181be917cd0b0b2e2ffbe672aad13c9b21664a8f41a1bd8a22244bcf9ca927a3d64eac777624f53399fdc203ad0af574328cfb4719ae22bcce8807f7df5f351205b3f42fb4d712901271b675db892d4a44a8a7038d95ce2ae13125a93623f277f196b25dfd8613faec9d3292919208060a58a2ce21921257bb946d3848965026318fb51c183708c9ba692434460de17856dee8caea0386fbec8a20cb8acc3c6bc08fb93eb0521d49796fe61c2fad04387047b37227cda5a8183c6cd401a089bdabac5e12c34aa98c793934bfc51d59171424b572787e078e6a6f5faa481130b9bcf5285ec593897ac3ff1440306fa3688120379f74fdc509e17e98730da8acc5fa504399d5681f336fc12cec5f82cfe4df3e3d3a57783fb6cb6c94e2942252c09b9dbfc935679b8540d83b2a776ed3c41d79faebaa20f81a42fbd2f78370107fc150a1aeba3f8aa2274b7217895d65e5123b1ea5fa9b4d208653432c5387755f720c49c2e24e10a62a27f078e1c53c2cbda7b40aeea44843880733abc1eabb5342cf487caec927a475d5ba2fc01f25f2de24701af46ce15addf3f7913c5e466ac1f2378a593b7c39f54707bfc39d8034769f944df932d9a9c4bf9e85f07eac7e205e76d1b23d5934451cb7b736432b2cb0a300dec0ee2db090e2ce2a3854f5e1f6d28b6ec893edc4db11b797a82cfa947462916c73f448c83f7b60c9b39705e76d51e6172c9e6b15916fb8620cb49eaa4d1b7e094cf6dfe9be55da3dc676a47838c8128dab61dd159c695d3aec9496bff9db8e18fb9c013c498d183168829c8ec5e8499f667d59b43f873065fd2499d055d243e047854858eb6871027e2ebbf8758312bdd2c521955fd38b53ed9720bb87ab2830e1b47300d73fca801224786a820dbd2852cdce87480d08bcbe085902d9711a763832e10ebae9a9ff5e3957815592deeccc6c43ceb5fa5fa7cb88b9c37fd5c309c7fe6fab92174c33696f892edb9573250f87812bfbaa10e156dce0eac1088e16707be5dd5937ac02d47a2e78d67ef704670cd7637e5d0d3f50a6db2d176175bccdebc18a6c55d14f377fd0bc4e775dd86633323b369040b07f93fcd6a275a283089de73e6707b8c7247800a75e7d1705663d0738c2ae5986f031bdfa26f9b84c9253d8e5a473b02ba0c59accccb7d151a7ddf1ca514909b07571591424377309efb27d454ab30a33609f9ff26f0eb475ff4ad4d2b6980d27fd48dda9887a68330789a60ecbc5b97c6ac4869a808aa2aeef44a4abd758116fda235ae3183291e2325b636e81033c282fa85e24c4ff40331f36807f0932a6201c66c1e19812781775d1e38229be400f670bb3619ab3200c6fdea274d562dbea92d327c4661d324570cfec4c685cda1276869be5d905b4814995b80345a1d5e6b2dac0f93786d560f2290b522f33b2549a704c05686a2a2371a808fd5aef7f621188602d54c9fe73f2955779d3be6bb32a6a0e4be99ea539575905a2f5e09ca27528da5890846b21c8228e730f2fb4e1aeb43e58dccda13f3764c516cad24f8d38a2a205aea4f577e4cf3fc49c42da396dcf6f46978bdb806095567e83a2490509d8f09ce1ba3188c259ef661c89ee1de7b65a3fc8da83fe154a92920d25d966ecdf3e536133e328c2dcdc4d7df803cfc68157353ef6c3c5b72a9874f52d70d5d5274a36721075721b02396953ba49e3a27f28b531b298c611dd13a714fe4938358ab7805db9e91f8e6f5deebf0267edb94a884d4b407ddfc9d6aa05d78909f9cc17f802bfe61193300ea7a5fb8467dafce3b01a05ff7b59b5d62605667d145c3467eb43a5f587065862d651836a8d24d90e6bdf231fdbfbb16bf49f554553ba3cea18ced8bc7d0b443f9f81e47cf542e8733902de08f67592dca7815b9ed5a421c513876fb2c87b40233b5a0e44404bd939528e30e2ee9e7aa09ca8d2b6577c329ad6f31a35c3e72e288e47c478abdfd3e96a5539350ab94d79e718dc372f26bf464b365055f6b0c44dcedc2cc4117e5f4a7a2d98f0390a1a44d735f8a7d1b128177ace510093312611e448bfc6d88caae37f64d333b93f547222f38d8faf099ee15a013ebd266b73c1c3e4b2c2af85556999f6cc2319e4d379be78af33145d1ba8d656cc456cdb0fff1d38bd6f0333715f2ebb9a1403bcfc30597c34caf6c8bf2a1f5430e8fd0357f4056e18977d1ed807de997e1fb6272f0f45191446c8286b93184f52cf3d95691d8dc3ae5ee2f0083c4de2189b6b4b3320886f081b2d14e5d81c5263e5153f36bbd31ca67e6f819de09e850bb0b58411a7542404684837f47b0c091a50e8039d45a2759e909fd1a2925292dba702c044c6f7c4dfd60156e9421df56488545ac2d1c8670a2b542b8d184afb1cfc7b1228569e39463d094edf49f194409af5c664e8628481f95f93bddaaafa3bc46a2bf42eda6b149f21ae617e9fe914417d82b71bc83beee03aa2b4a9e312c210aa7ce91775e6fc4df166c9aaf9c6bfd89e6223dda95d600d9ea327b6105e3144af3e373069d88bf2956585770ba8fc84f1a281d392258989990c6407a1fe15ec3984be367ecaf48520f3b5beb30061db9e7401aef5dab9354941532907084efca7ef6b75053d5b7403abc456ca3b5e7935dca82958041c796cba415fe04fa6207d1c272841cb6d1da65cec670ae95d35676cf8118a7ac177d6461eda7c41f6d8078c6d30a84d51ebb8b046b1f33c525aaa1687839b3dd18758fd512e846fdb63517b7372cb6c2fdab323b6ea2bff06077e6291c8cfb273cd3a4f8cd734193db54e588a7902c34a216bc696220e762400d44a8d5b7bd2ffdafae6a4489f5f68cd68f9318620abfeaebafe9b75a17ed01ff92e08fc12380ddd67f2d0afca0d123ffa6b4e89b0eb7ee3b2abd081a0fb3322e670e2cd0861904158dea861ac23d4d230db05d31418a2d6e06e144febe65ab6daa2c8b0f875636389a26693ec25c9ea06258bdf1de6e9b57e2730646d310ca5fb4fe4c94aa2735c97c4aa034b2be4dd99449a5b1b7bbeb9002c81e4c498c6222e3b887708e3ffb752e126693f58c23ab3feac8648cb285e8f08c8e66a136f86bfd2150aa0432d3b539388e23cd39e0f8c1f9bdb3c0e8dc945c21fc2ea451ba033ff2b043d23bf754edf53c6f7da1e28fd393350cbe5db776444aa7c340cafcc83fc2019343f9eb3f61a15418088365fc0407978e80e19c8cc24d845446a2249c5be2a5dd1bd5632275352cbb7995613aec10345789a4d37380a34ecfd24c47b6493ffc3c37931f5e4b6f9076231d578dc9775a1742b478330fccb64a3005225bee45855c9211564e55c0a6c33fce96a8fee7e0c2762670a30a9f19fd6c415e222cea010bed644730bd49a1375011c299568b1c81781951a28a5c86800b655abdc8735cebbaaeba2c27798a7576f9e1c60bfac979d279805610bcc14130329442c12b928c28f4ddbaa76b0321af3e6f01ed1f78af42baf59d29c72bea8a52e4a6856fe11d85d16eb586baaa36f27c5f328420c45a5415779c15e3c76b710df8f5ee38185da60125a5f3f95b6da01754c6f4a5c6a726e9b3213032649e23496f7d2e0d09d0fd31c3a449228e12956200a3e7b97bed58101c24a2b6fd1ba7c9e043ade50c533d1acb33fc599245ffec59a6c11a8817230a978caaa15761fc1e0a7999345363f7fe32411fd33d5963406eadf2692847ea07f2661cb3335ddfcf1613d2a6ab002739dfcb2978ce7d6153e7c61e1469545a8e0277f04096e49f2005f8a3e276b7fade2c138f4e9f6840fc268ec24ad2ddb63e087f49a407286e259ab07480120820795cb44253883ec60e7e7e77c676b55e1736ca2a05af3984ae395c8a7ce03b281aa62a0fa6fa321422b7898840c45532c3941e2c815ea977e9547147facec48147416ae745d6895e3d4fd638c7e5456f9a40abcb1a53320081d9b95d912a7a1ca08a657d8873d2cd6db3a628de8a2679432a63b0a7b8e99b97878dbadea22695fc45ec393b727a312d1516c73c209a55db7cd89e8b9426e9966a0fde699d43a70935cf7a5f77ce532e116e7434441111ddf38ad7931743995f3ba901bbc99c07cb075a02573c3771d15e28cacd1db5c880c3d1e13c71baa8cf8aed0a02db966e309bcd477bf9a85bb1b8526cf97d20ada375a061626c2453e8f56d077ed6875229b52c363f8b0df8a055c1523bc974a03e6401fd59d5f8958dddd218bd3a81c6017614dfd70093141332ee1eeca3bcfc5a60ecd87ccd4ac605961ec8b1679080c157d86b83c04efc88e57bdb225a2370eecea1bb9dbb6ca805e220e6323996b4b2dc0165a9485582bc4065826f830e04cc72921f07e7d425a7d8e4bd421089f7ecbc04482a1e7f31daea8838dd37b2d78a4d8c371663070674a654e50930b8d5cb004c4c1a9f4f1357b51d4274055463b2bc3efabac6a76c98e6467c2974bbeb6702e98a555d94f6c7de45bc0f71e882a6ed6da6e55f306d520fc6d428789331acba401b2a37994210bc98efd23851137d5d3c717e7df52a8f41a8ebb799a294918203a633fd953b2e31929448912859c96c47eb1286ac4c1fc82ec2ccbe26232043acd546ec44ab360efd7f122fe8b99d1c3c18da7a9ae8bca6c658e274089040c046535bf739a317e5cf80588c0d3d7fe8f1d258a66de34356bdabd6e326f8d45c64fa08135fcaba8cf4e85b4c7c9a2961cd6dd007d8ba87018ab6114936efa3f3a6efa7d2b191c7175c7f1e334676d5eb051b1d961056b94c882e0d351cb514aa7d39cf2c5d3418aae482966d33382dc3e044fcf2e954a3ed00d2f99eb2d60a2b5835407391b4adbad0bf723e59fa8998ac393e12bd25969fdbfd5ae50f5e895a5475d7b18fedff5ae64a05cda791775ecfbcff62ae34bf99b9e1ef123c9621f9fa216bd73d71185073313a7a871145ccb64cc1bd537694e66fb983364e369b3b5465b53a4c473c2dce83d9a1471115cebb08ab966ca65a71c7109df25f762c7a7c9d77983f1b865c212280fa43fb03aaf73bdf5a61b31fa6393439d11814804ef3e32137cba035147a131b309d15ba873c427b837a9518e63d0962dc2ac6675feb6d682b72854e1d56b7af4fcbe73b33437a3a6e190f11daa147abd63abe6b4bc307d9952fdd16e7bafea091a6c486297d8f3a80f165fe9b32a1adbc139caeadadd24d0a0d314d73953e5082c7aeed39dd5cef95d414e75e1defcc50c8b24ae6015f1e022e123dd57c85f0f9736fb9d98ffbe32928a5c77dab04a9ab19079429fc85f6f218f5e98613574521c15e77d6348f95ca84aaf625a1b3c230878227ebd1fb15cd240a732e22c88fdb710c722f5d4c4a055d17bf204f6f91d20f8a247f13afa969c7aecfeb7565a5a8a74615b28f2209c54892782ab46135a872a24e9dc228a83dc15cfbb1c7baed84d1214e39881a077479e9749ae5357b96989ee114d870b63ebe07e34a67609728285c59451080bc9cf403a28495d5dde38b9eb4bf39806a426ce313d51569a3236d04ae24c588b91231c050c832f22f3af704fd4030d176deddbe081cbe92893d804185b8f589f37d72d50413e55e0c264956a398f1dd16c35334487ff5177c5c95379378c04ac856bb819073385acc8d0ccf05e41f89cba655058f45611f5e2a9974ab96d309554f9e94bb1fcb6323e83f733faabc7df9a026500ef99880d52e9110ad503ec91397cacd0ea27bf15be1613e9723dc3c855aa3ebc127e963497fb131679006bec5f5f63ff98dfe9e1fe7595881263e50a88a6f3dacf31a30440976e9c69ef51f778c91a80ffe3a281521a7fcdcb1a32a6edfaea0f80c3622d1cc6f2cd5fd64c6aacfcac0862c63155742bcd8181ad8148f793574d138a001b78d2968ab9e1f01c84cd664df93d2d2bd4c8b63a646158b2abd1c5209e87a69eeca6c14197a9cd0520c6ca137d616b3a9c7fc38f75c7a456f1f94a1c7ad7864f4a0bdb6cae76c3ba1b47320fef96a7bdfb5ab3954a08cb0bb3437e4d22da2bb6f6a00204c35c2d7199c6ebff4819346bbef1b7e27ed8bb6a0735e54ea44d234c36103a004e0e068ea4a87d7e0a1eb3ce96c7016ec1553b20be368c108a2174883f7e6a0d0dbb0cee21a8b151ea83e865881149db176c3bfbb523a5585a22333aa5e99ce764d3ba2c04ca121e75ccfbf9c59a034a92f13eb658bf815488444a759fe487eeaf99de615c8b4d3a2dd0ba3b5bd7a6d6b31d2a080fdda5e840f985b26e7fe4728bee7964845cfe58213d9319d44f8d1063d39edb8bb968c9211d4a3854f6a18d2c005cb82d06f3b8cbc4f03eefaf70a7d4f18d5633d6bd00fa38e2113abaefb8be19dbc48b41a49f07423afbc2831f5a105d5fb32743808beee9b78c3f330cfbab2a21170b3975bff68a4bc7b927ce6d274bfd24626611d667ff38ac4a51efe63a3e6621e1f0380cd57a0716d063aa9dd5f262201875b21945fd35d50b7512ca5ad8f6afe2c30dafcc5c4522e2b153ce846d9d31d09fb47ab6bc5546ab854f9e6472619ed7de8d71498ab722b88d61c07b7d8ad8c0d3debebbda9f5e2041db0cd20c34c8acddb1fa89a4ad7e1e0f4a77494b22279ff2b67abf9ddc882305a48c45cbf9be9f636f968c6b3ca8b3baa72eac849b654d244e987148695a591e541fd6e00722e49e53a18214e5a8e39515175116355aeaa199fe642165d3eca29ab0ed20ee61310b47fd479f84be0fe82de022520459799a0ff7f3d3181f06ea505ce7a3830b37e619efdbd7058a3089a08dac461a88fc24b2f03ba63cfddfb7915c2dba8bfdf5579ec2a383143f500070b38a9df5435c7eda74739a71cb0bc6eb983921b3d4f65608faf4f4ba0b72dc41ca82b8b138090684bd7623571a9422e3b0589fc287e817ca988418b1cda571852ba2816b47cddfd831be678a195d027fb5cfc164ce991f8833832d5117af2b321e7d1af9631c4e665417ef82c202813bc4ea10bbe1d277bfc637b9e7ac27ef29aa4894a36c4c0f20f1e0fd7d797823d41485a4e893cfd00a8c899f8f78b832b3232a3e39b87d6c293341b99636750a572848cf92229d0536be02d30f593c18acc6a4650cf7188935fc46918df07292f01cf5f85c29680d7b4bbbf350e8d6699e7d91d2efdc9f95567b48d192379c23dca5f16d9ebef122299cdfd9c2a47c6a64a7e00800ccf1ebe179ec9bdfb04f6444fb53440498076f42303fe94eb98c1a3c4885dc58aa0133ed5fc62d10cf9c592b4f479737b6355cc3806985a4ea82643c2020f8c0bc33c90563e329063dae081d2d5b7915d4580cbb38258241cd0b5c78cfb9b391f1df07cf56c89bc8778aafe324836cf462d96417e38273d9e866c413536873b731eb414b5a78845e5f8baabedca8228b2b3b7af1acac2713dc64316dfb2b3136d1fc969c0d2fd9f10ff68fc51e93bbff9436b7cb71b962231b05c3486ddd6c641cc973cd82ac242fb4f3927f681860e689793db41cebd247fe8a2fdc4400c00a853cb808c5fbe53491aa3feac4afb4c4e180b3eafe8c2cbc20bd7257ad505b4c8a4ce69c41516dcb8ceafa55ca6467f28ac5f4049e0701dbfb0116b297280017f71165ec9e201a9a1ad26b8381a2731599081c4f6d3f5f0d8dc715de461ec3662aaa744b3cfcedc69324523b8c82cddefb7964a41ebf9e9cd4094203045a4d8fd2120b96124b9985e40ea20f15bd591c876a9b74e0ee03e7e717d8490ecbcdfa6323d238771a14c5be4fceef09fadf15a23e7b9874bd19f822edd4ab22cd13e54906873860a41d63ec6e262e29f70a284be5d4652b1690e5c9cbdc175b8dbb1510c9a776cd3bafa6f4e965e01ff083309af8b7080d2f67920c87f6748dbd1c468d96243c74ca38e28ced116348926f9235a911694d1fb960b5c4642e3326b5742bdfb8e3da29a897df6953cf6f214e9758662eddd7e7904530e087e57fa01e2e1f906101db1740dd7c7e7b935974fecbdd46e3dfad688e48b3f16daa9d45aac293d2779a5a1ca5040c92d674f7a6b339c28e51f5e47ea5c05237a1dd2efad708259476dcf8b9603d4efc7eb6642aa3074498016502dbcd75e7e7637306defec72330ece19156e381815407ea43eee2c992de60446a4d00f08cc1d4b0dcb8f5dc6e47f17b7d8f1868f6f3d9aaad4a4428c36ddc6b96d13d7a8139f98ca845679137605d743c2474939f24aace4cf9d41963791c73b00ff9a77d3cedda251532172b92808d3b6666722780d70389a7693e46930a481711fe4859fd2518def994d656de84d7f10b08e7ef3b73a91243f69d3a4b0df7ed1f0a72ff5a6a9f7c82acdc694777a7b800cb12e48f3ad3c1f0e9f3d3c8553894ec8aff03f4c54779a8c1d1cf9287860bd5a45a18a36ee7c22f63444062ea8e4e8c1737295e8cb92b3965caa9c7f9ce5af54d3fb182a54e2d39f374f3f5c6c70bf8228bada8ac7e0b5ffb35dc6beee023ab7efac3de2fd68d8259af707069ca8da3527df3eff7bcb8b5c6ec2e9afb52a177c99e75beb1a877ca53b691108c58fee9404e78ef9344f41c1e42da6333bdc39507948588521c1319f8efc95352d042302de32206015bcc151f69951697d7d910756f6acf33dc2ba1215f4d1001fadd05f7534efa11cb6ac38ab673048bd3bea60ffe89b2f36c98b61a0dd22e26018c35f4c1749c1ba7e1cc2ad43367be63856a6b763ecda11fe56a1bd2a0cd5b4727a0a9e4da141810f104762daeb33056f4a574c629e6be09e269b7d300f2e20837b7193f6130a199f7f2e4ebe3d764fc849629fe308873db60d7d328613208dc4f3f8c22344257e29721b251eeb35c3e851c935536bd75f78670db534a7010c2d06bd481a7b4b2aae3c79ec9a0e7ebb746172f73a73b1f9858a4483d021d4681356551d218032cd7d6e04dd8a46ceb8a7d2858f13115860710791b9ca42cfd03b70ee673db8f291f3bfd6ea4ece1077a775f980d25afa815882bd6874306266bbc7f0bac30cd73962b6ad03de6bca498dced128810978a6a8e25e52e001bd3ad4567e16fa7fee40fccd8c71943a15173f59f22df91ef321102efb03a68d021d25a0a4f3f033e1f8f3b66e5b76ab58a76d04f42c54ef77b1558774eaf6988aa4fb7d394b5f1b43025e09dcc621c4d60151dd0d08f49dc047062b60c7bd64ebc864054cae61eaa525f078453401b32c966c2f4f0300ae6029ffc9e61431a6be029756410c916e945ae9bd648d4bc914914c2c09e6a77dda1af491ae3e571044ed6e027b36c6f2e472fdfd4aa6a32cab66bcd49e8941eb2ec73e0b7cba8719a26b45d514f9dd19d10c97a80f901c684964c375d854d09649690927a3663d2b09383a26b3e9a793557e9c0aee266d271606b78e7b3e290c064afcca25187ddc8e8fde460ba79d45547c96d45104bd56fdd33095d33ecf16d2737a57b223fd3079ae3da3d89c377a20c919903c1affd0d64d920b4b47ff70cab2bc2fab7b6ef9e06a3cfa0a95b5c552f7756d5c14de8e2d2318cd80ad3f9f64dc42af1996f9b55e9232d3325dfeb8b4a50aa6143a41b2b8e290c7c28920df9156fe3ebab6e847ea451316175349bfa6f38ee30118875b353543df902f4089dda4466bd47e8ce4e63bad92df7f43939b92b22792dc60478c6731ed23a96a8e8052b0541a59528900d779f9454d5cd55ebb5b49fcfb7bad55b25a0aa31201145e0b6754c949144ebc8f4b21cbb14d906d2a5d22912710b819b73cdc1d7e6ed0df73962ef4d264e3db8511c5d1f30ae334473f00b71115715beee2bffa0ce5181d7d1996d9de3258dcc8ed33ce84fc1b51b758eecba61ec607023e8396cee5669fd6badc1737ac4cab2c3af90c8436794a8c275f502b21fc49a68b9ecd7071933d4353e465c7540094fe6ec7bdec45da37deba7edee2c73e58f5f19cbae57d2c5a10d1fe8e1b7afb9fc3b15b023aa7a3f035af1ad7d2c2e62951e917e4c86268d14b53530f8d5945d7e91074065eb60d932b67bd98f6063e803aed8973aef536efdcce79ea9c360e58a87ef6827c8f4a3a128b34005ad01d2c8e3e4e11280ce28923a12e08e55a423bb5c00a3c2d11756384bdb61530ae52f270d54b1fb76a3cc5fd37caf025a420422ef0a0b74c0e2ae241aa9300dc45c5f8e09ad87204726cc9d16be1c23088165567fe811eafcde0b8a175bed200bc3685e25daf37ded02b6ed604ae1bf4a12d8261b8b3f2d31e3ff4e69843ad4db3efd132e3eacedd0752a6557692a797d5ce6a5dbb346717500cd82ed2ced95f437b8e322b4d9fc1c2f19b5e43b3d3fffcf06d6b67be2925ac162a994b86b386b204e678de7165aecbf7a18b781e8dd095a7f78755d72b118a3065e893ad5bea2516593cba108128e5bbce86a128324be76308ac9de8a2f03f0706a4f66a62a2c65de4f0477932fa2dad23647cd908df242dcf9bbdea0fe9374024be135dc773500073e88d8d57c9a40e67d428fb7cd3e2771cd64da80f336684daf6e1f6caf97d8891bbdfd4f506979b91f02b2b339d77d6f0a076ca832fdbb360970eb66f1c6f2ceaba66c28f1e070e8de112ad7e026646034089b86dcd195b7421dd27660dd6d58042f679155786cc291eebd34508c1a1ef981fbafd92547e7198d9a72896bd45edfecd0c236a1f07562ff6952b11b0c1221fd0f35f5f5c7a9d257dccc0f2f1879561e7b979a2992ddf0b459714731168a942d3b313a2a31739fb913395ccca1a3441e6249bd578a1bf9c18628ee1a67a5490a5c9ba48b7386a27215df1f07f44abb1206bd7bf3cd4eb85e287b3489b7d368698782d3185eb9fff5ca2de6a617a98088cea0f202b74cc85e05958e0b2b0426838cda03f9c1a68aa0546a9ea12babb7de8c86ad721629755bf4747da6339759d9ee6d5a6e87ae8c2fc7490b3be210acb6a2ddf5cc6914a70af7570d0b90912c60dac3c0f9f3316e49d638406e5725d61711646a3ec3e020f3bfe34665be714f85a54b753beef5ccaa0fd4497735c4b0425d00f1de2328cb3f77527379628ff69a2c182305089c96d5dfc5d3d81b1bfc24ce8781a2ffb6a9057a5cc830872d4fdc57bbdcfc8a8d0008b2899a78f13d97a09667a81c91489543e06e0e4f54626f06aebee61fdd8db3dd1097dc55c6f91f31a3233155f07df553d2bc9c90284d192773aa3ad3eb3acd5777a1ae99ca79226d3dd5a8f2d5134698b786fd022fe7d35f48ce5ee610ce8af931debbf1560e6c412d2cc4e82848cac207b48aa07463a30cd8b36948b713074105529dd282887a061e1a6eaca762f353386a874d8ed5f14134b0d7d4c927471879ddd6723e119b6fa2e0e4a35d415252aa7f42228584739c8b6e5ae1418f45ba2eaa168801897394a89027673533ed88ce9ed2c4778862b0165c326cd3cc209e383f1e5e87f3914af84e23c6bdb2ec137f1843cf918ab5e983991711f32ad825be3e69cfb23fe55354ab6238c0198032b0a530b73713f8af70df26794361c8533aeb303446d7df6c72bd30187360bf744099cc637af680a047d6ae74f095d69835f177694d43c692cd5da2cebe4b1728062fe67b666985a1e33b7775df96fcda7751e39c2dee2c7482186f8b6a276c748054fa555be1d266ef6241adc762aa7526a69adc2c7998a13d54a97384755c9e0f1f29a82fe756f1959e77a94ea3afbccb3b71d0ee983288a11bebcc0b0cf2eb46cff30df4e0068fee64d52694c35c714cd00425296d5e186246d7bbe4a4aed25373dbb9ac0d25aacde597061ea5e4458d74ebce2343d974053fcf8ee5a450dec29ee0a3dbfb1eadee133cd36b2ef458f745bafb3dc231dbe36afce1abe9162beba0f15f30e5f0b64a9af523c99eebe188af20c21c8855d492767d5f4addec6f387218f0dc687ed928a3f2cad3bf2cb6b896e2bd5efb3d381fb5b6d8be276092f136f412cfc88091577a572ea5e2604b9bb7b7ab6e4c2a5f47323605cdf64214dc072b53d2f65053982ec484a0bbbdf967a54f4f0a0c44d3dddeb0c1e0de98a7e7c1e7e636aa11a9ef680a03b5a978dfa88a11773d3a416cd728df2e05f8099a6bfa9dc32cdb59efc130192619c693f8dfcca5ee9f9b7931ed65d933ff357ae88a03c0f6f033469f620a637eec2ed3ab47a6b008ded155d0c4b394934cf416577014ba2104d2860052bd3d909ea3f25bbbd67e8770d5bd0f9f2caabb43dd65891882233f86096b5c232f089018a4dbecc490c602efda3dfbaab42d82a08a463e823c09754ed710ea4ae64f2fe84cf384779a69e392249ec38f1f53967a5c5e4d45426865e143170a9d7e6270fb2fd370387df768319cb4a290f71b7e76a1d7fbac87ee690dd3d2fbf2b4edd92a4d91017006d5d6eec332771428a3ed4ba4600b89a84f0a830efd22c8ce01bbdf6dbdeb801c284f502ffa10ad2f42a9291faea04e45e4b147808c4891cbad6f9955b1298b35523eb5953d376edb2e01614f25843210caa9b94c5c21f33cf45ce8fc4cea016cb8e809ae66b0fc1f35d1c4d1882d3f3c4832c11566928f2baf47d4ba8a7251ad6bea8e76e2ca47f2d34d916e23ca6c4ad0416084290ec688f81040e3415ece9b871f5c2c3da80f7f32b0968bd2ea094fc23bb7f087e0afdf92bad20c51b281056e076b095581e5b0f960dccb6471e5372207b72237b10712e078af204bfb97e06b543ff3b8b51033901542510488ae6ff803ec79e3a3a8680397ddd83ed6ceab746bd0afaf49c05fdd099c632fa35aec8166d51a121289c9c4f24fb12c6c892b3646115ce0c36227ce75a29665dc5be3fa8403a984d91f5d7c9d5ad2723e090ca5a06cfa1b28be844230dc21614d86fba0f1904621c8ac969495f67e69a5005198875b307d6f4b7597bb306cba2197c93600f0171c325a71ec93cfe2a5962f6e552eb4bd1a8e52df0845594039f572f3b996de6e69ad73282fcd9930e727ba5ae0ed970fb1ae13c3fc7bb504c790b2fe02ade67bbf2e9affb0f5acb1456e2f582221f071979e45fcb5104df73fd397fd42dc89fd3c0bc0fee63c7196ba149a59b51f1a1e7735b86d9086e368068208476b95d8c9ddc1d0eeb0fa212616b666db42a8033397ff30c8622172f075a04cd937dda8ab880b10fd3fd603788c24772c3abf696c91027dfaee3bd28c9132055b0a12d49c22bca4361faf4f4c602cc1050dbf508a5c27aad60ff8b24f3d262aedbdfbb26521a729fd687ffe5bf67e49239fefb4d3e889446057e60b9238a0d3db3ea06bbb41912140a1bbda78ce4d66f3fb127a04699b87bc5db1d7bc58444166e025ff061b7f6a721feff76161ef5acfcae00d8bf57a9a9787bf2f48678e8d339cb1dd877f44da2c2e406013d1b021d26c50fbb85caa0a00be1d9c4c9268464b300f3a9a51e8b14bed34eb0140278b7c2b2cd2deffc3562b92138d9253b6247663842b2663d8082e87b682bbfb523b0511ae93ebe7d74798ad04a49b4cb9c258340b0dd7c68cecfb8bd6dff3d5c5f0d9505267fbea89f53920964d377ffc5bca50a609233e04f2cf8e7289ea69bc3c2e0706861e981908d46e343c28d2a02d3fcdbe7621a653b1fc8ca79facbb8574d1fde301e31fac20829ef7ebd3c8e60890bde1963f209825bde49e3fb64d10382dd863cd96c9b5b606ec67f197ba53a1053ffc555027c315bd5f0c521ac537a871fa56bd041cf94190b21566c112cd585bda14b611c568659dad79186c4873acf1ba944696c799be3b29223be1b4415f1aed63d70650ae7b87abce5ee3e86f372671bbf91b4f298bff5df253ec40b25d56cb06d477f7a43cc12772e53c2eba98290de24b5590ef7738685bdccbe55f6b63c017e6a9658f8e5ce4e76a8e4afbfdbbed7b2d52cd63081edad2456aa702aeb7a4db8126a8d6df2e99dcf559ae8b0f51fb5e82003242716c936c19476a224452e5fc7a317208f6d2692c6d0c3d8b4585ad2921a5fdc738692d9d31b988f6b7208637fd7d6ef6996343f04c5f2f216a99223e0963bc4fc43ae6bb0c89fa36e62d484ef083a4601e0aaf7283bc20f17be3825ea9b828701b493648fe401409615fd885b3f838069045850b81c21cc0a35b045a3829970044202fbbe64371ed77cfa28a238553ee24a2886cdad1b483a6ee351857abc8fb6404d9ce66815d23bf8e91d9a55a428598318cf2b1f533d40b646122211bcefd1c9a897e5ddcc47bba5e6a1f9886cb217e8fffe424ff0ec6b55eea866b5b4bff9e8a70b53e32af3ed25bc69ba1436a9f5389ae010f70e353a2cdd2da2c4aee3ae84b6113052232964c8a947260c5dde123b4ce9b4ab97415f01639e852d07ae9d0729ea1f6f9eb6e7338b309dc052cd24cf376e14b5797406229caad19f5a549c71c8c36ac73d620035d7f95777bf6310e7d940ff38c2af43f7933625984ca9c2af847e4cbf4a8af6c41ea2ae0b548236183eb07ee821045e19755729a4e8ce1db4d62f8172c4fb6243aa00d2e6ebd176fe1c96fb6132961c978774a1f0b7e4dd7dc0bf420f5a16817c2e902880f0aaa8de1c2ed42fb8c1f64213820c523bd5ce42387d161844de5e6412ba42fa9e909a49c21ee7b90dd9340dc29b2df72521f4dd616fe32fcb8bfc319718fa3e4c1bab445fb8508b7ba23ecfbbfd704f7b89284d46997867a843c5905c4df36de31b11bb64efbdc3ed24322c7ae2b34d9011c3530c7486588449fd72cb85a7f177c277d2ed982e0a989e190a0ac92ba612de4c1269ea82518cba0bd8d93c8fa074fc9442ec1636c889777ccb290f9a272f526e74983aaceef7d83e9e68fde8d70d75400bd177f0ecffea4bd5653cb77ffc822a96d20d615f74cbd62cb8d960acdd2314b296f355f4ced0f0f8674edc30b0858385d9a40ff1340a0c8fc2cd64d76d08ea9b81e56b297ff628c2f4d12efb0be402635b46830b7446e644b58c2c976d40ed0faf2a6e5919b6a2b670e2e6a215b7e45ec56291830d4c83184d3b449fe83b26da39e8f9675f3e832fd1d19023be4cc891f55bb0226b45018071158819324f8cc63ca7b89d3570f6f37629444c4627f45e0c3b5d742c93f1031a17d8fc068e37214fe822903d4d77b9f1eb1731a4c64635411346a6260f08b4620998104c9c8ae4b8fccadd496e696de7bd80c0a170b5e159a0849366cb05f8c630d51cf243e3fb5b7720d8e0c16bb74e54613a8be232b0cc497d7e28674e17aecaeefbdfd87e9f47cf7ebeba1f7820ab76dba23106a05a07708a1decbab452546338db53c7f38ea2fe6dd152164f76ebab87f6fd9bc13a1c0461f81d448c0adf4a2409c9a1a22b24b0d850ba9b0edb4094f0eca21e7b7cd43f1d92329a8bfd6bceedc1daa2539f716c6b4c97649f67d9afa2995c9455654c35db0363b1d5670f72d2369b5d92a72610b98d1fd21031fb14aa51a882ae72ff9fd23bf425dd9f43243bf3616a6d56d5fc9c22080680f355f542eaac31452175de6dacc771230ec419959b7d4ebccd2da93374f82ca2afe1a0b3093844fad0e73308ebdc6ff3d12e9c2acf9d3d709f912593648c217fc537c51ccf522b998136705f5078d12fd799d140caac8423b67c29ce6ead697d09cb59888434332f2e682088ffa3490a5a4e24af6c843f221e198597aa93ed6f277af4d03137358392e2867d88b12337b566b1e9368f1a1055293c1d32ed259469b85e01cec6fdaeb47cfd370da9b72a63638c28ad635160c9eafa567ff0cf6431d549bd5e0f7feb52d93d6d88d448b75e9fad76cd5144c756aa8c1723963fe96141c0ba124180dabaeb78f18f92475282aa4681bf8d4fe5016854a71e0d23db21a5d0450bbbd13bd742d093559c30793e1cbd46e9d7580f97e2c1855c37e158194595dd783a2c57c4ab38e86b668a327114b5494738650a694abfa3ee484ac235ec671f2d8b7f4d169342d980f9ff22a8af52bffc72997818b5489df276c7e05be08e32cade52633a1e88044d96b49ece9cb2344c97842049f7c47cc02763549babb7594e693579726be048d7290c7f7ae7302029f27c5e4a9397c2276a13ee778f5f0540588403e8a1af49843bd5d108866a546e313d80bcd4c8eb3c59051877a7f6424711ab26a78ccd7469fde425858dd7a365af936785cc95ea797a0a83a78d01d90504a896fa7803cbb6704680bcd9dc576a112d8722cb93d97a0d64728a486e461297cde0f47941d33ce8789abde7c5cba664c6e1a9118f56eb0fa859ba9812bc2b81de2722d93d5a50cdbfb20e126f6e6669e37977008d9b0e213a1dbb209ef5a98c6bc9803095ae8e08acb5d0d93d468d721371fadbf0eee15cef9d5dd17c2f775a87bfec0b853f6f5d2ece4ec9d3044c9249157857e3b3a1f49b428450d8d23eddb71fd78ffbbcbe002a9992ae46e1ba4b991c87577240b5462218e0be519cffe3e379af68935cbdcc56bad6dcdde165891c5f46dae9cc83e74394cf29a28e27de6dd4366f84b7da4206b73506b96b11ba93a8199b58a9a2946df1aa289f997c90313f77fdbe8e783425479210e855da9f022507f64467e09587989b9742b7cdee9571f3308c1165d9aff0897fc4a8c81a79392901225278e575dde511207c5eef17c9ea20ba27d40acfc174a2da16e5940bb8ca4c184bdd5d0ac6b2562845e1b532718d7444d730a0529f7b0c5059f67472fa8f5b27fc3e94a94debfd687fae52d79fc9342861460354bc2470397074072c7cc4dc7d2f6f4b44404c9c11ffabe52c644cc16bc259801d8a7d08a2a5cf4357f14467c7b9c2126915a49ad2d71eed9fe1ce5c5b49d9a606a19bc84d1cb2005802cbcf7170b2b2619a084e969dbc413d332b5a1ee790334bde2c833aa0607dcaf2e29e311013e5d0c8f89b0836dfc69ed466e34c6abc8401eb5a80b3114d7b43c37c5f4f26e9c3877d133bae5c44c155daf06bdfb96405276cc14d9d5843f11d564338c39e1a86182a6fb125b33db7db088a0961b623c120dd24fe68efe3210b7ad05a9a58efe8bc6e5195c4a0ae08e658ab23acb32f12ae3e48bb04972b80155269f24bae3302172ec8663c40683ccb720236b969233cc9c634228df9d17acb38853e404da86904a06cf50d212678bfe406847ca371c9118b1c4f693d79825b5d15cd1e7f8b5b199c37b032422bc4b97b6beed4fbc71a6ee53d72a158849457e91523057e58cd83b2ad3f914e6b6b49f7012e5d953f879a29c86722ee79b825ddf03ace5e41ebef6871d87cea6b99addb8f11fefc89163ffad742593d11d45e4b9e51c0bcc757461c024ed0c5b025d83db28eac2c2bfdbd3d0c50da22f5f9b10ff858966b58f15f584655a300381e67d273bfad0b69b21e3db45b0d5470a273e19ded863709f0bab4936753f0c4c57b821039dc58e3ad2779b64213b066f2c010bedf5746002988df542c148e31d98eb81c5fefed5d5b0201beb80366c0a8321dbe4de6db9a3fcc77de422df40a682769a72a35f22a49356bcaaad7a760c4e636b7283371a77eee292f8e8688b8100e3ca49c38cf3ba012286ef8fe55b2e008080595b7236ded3babc4d57f2874e5c7e5f8a7d7eadc7672dfed868990feaff704ebb809a0e1d11d9e293b612271dba7058b79dd3e47f2255eacaba724919e799f90a2ac50cf2959fcc2d9366ffda99f4119e272869cc6eba970254e3cb4814f33814556036e357aa69cc2ff1ce6f53dd358d6dbf2d4324f763b263d4f190cee598bb22bcc7332f1cf20e6393d78765a561f145ec931755adabec433bca47b685a14842807b9cba7ab9f0a89f46bb9e0f188b05d4bad961fcc967636676a7b66e9c0825e1b55711cd90f64bfc3f3dba8e77bcfdf9bc6d099429ade396b294d45b5699ef4bf10d9000cd47a79a300f52744724de49c84e5cf39cd01466f79dd225dff4c5b314a1219f086ac829d013885246ddb4721629ee427472bfd75fa06d9959bd1a8b53143e6d8f0e7aaa21a01907b8a43ce4f69e79748ce0d8657e9201fbfef526fcdacffd47218ac70434b82838f9097413522f81c1bc51c6d90f43e8a0eade7e778475a859dcc4dc5d8ec63b0248e6da406241d14f1ae85171d229097d29bbd02500249997e1684e91dab0584b46530ad55ea80f7a529f3cd7828cf087f61a543d7e78aa1f4a8b1a6f6a85e05e47505cd714af1e667126b5a8584fb640ab8d92061f147da114f6ddb6c57e0e9f5158564a99522459abd22547161bbfdef72949afa89bbfec629ed8f753900244cd0bca32b25103fbc9d89790ad8944f565896a14cf23612833546ad01b2faf2778ce0fddbb4f08c56c454c35fb9a67809dd84e5ca93ba7b3850e4dd0a30c75eacc2d4fea356028b20df7a883bf02b4b56333d508b8ea4b68f288d01fbd47e458d80b1fcbc0d237a94ddd3a25420fcafb358db20ac135a337cc4ea5cf82a9cc32fb7dd1c643460bfc6a6a66b6ac834d1d14d2569f25c3b72c1efe65133e20dc1853ea8b6f7a106ccf0027baa5ac93ea97b214433ebe9311765f7687f34268f999c91b3d361f0879ad93c2e81b2f298504f43c99ccfe5f22924cc9928f648bc51c47b23889d6827e954f70db1eb0ab240d8aca77e60e93defa616f5038d1f5b9e8bf7ecbc4d9bd5352247a68d53cc114d3dad1914fdf54bf5e45ed3c7dccd4d357f6b31903960c4b189058266c293f2658c9d8c01c026ca0cc6092adcea4f3540aa649ad3a546de10ef87bc1291c6772c3ab13ba4783bcca6c365cd03a9040792ea7b3b8c2575edc7038c12df822b72f9915012328e6ae44b3c32b9883a67d6479a0e08b5979b4de5281e4c326b3b2af0b31da4bfd89c733a0413af13a61270f390cab88df7d7643e0b3f0591d791e94ec86062d166fbc12d40e9007fe6ee3ea236a9c5ddca0c3c25bea13625315539019e254bc7c3180f6908b7537bc59adff49a491b0dc6571681329ed21c4f6ffa264fe7d2d49fa85db498a8e1dee20183f93fab402e6032e58401cc9b30dd6e849ec294e6edca42a00b06981f833baafbf34fe306520aefec497fac7f0968574a7376c8b5a610fed2d945049b169f4f7f58841a92c6f074e5920ca3bb34077ec0ee38ac4503c4e70132f3c333d3de1b4c81115a087251c563ef8e1099c02400fa87862634b5188b3e2ae04f84282b363b68339ea2c8dd5c615e55df5b121824eae90bd13391eec8f02f8785d35d5815302e73ff643a20e564b7f3ad43a7c12e688aab9c3bbcfd088c4d5d29aca5a769cec4bb4afd46a349ba1b64ea6e996c1743c0a9549f3dd5f253a70a1f54c658e77fd682eabe4542ca1057f9cac9bac9dedb9195c1088b79816a77a18b27f20f867ac1b45bdcc81c9d6fea5c186a0a210a02194f7b93ba60444e1176a482270d11aa89b4a33d1ab7980987fa3005f8b871a621d5539f5dfefc8e6846e857c77d8a57dc5b135a903ee88bfa5f48f232b0a8224ae5ed8f0bdde8a19caf819f7e9cf207a51c981e1517f181b54975ee5957682f86a555178d3db9b0ba6c84451d504bef88774ea4a1e6cb4b34407826410efbb85b3eb78d4388660aee1beed014514b818f74eaa729371f990ce42d0997036bfd40de278f4a38cbfadb042b0c088837430caadc1350d1ece755a367de48b263a6374483dca6bde179aba0cdd86548388fa89ceec95a8047614d9314ee8522ce52c8d953a90de790bcd89cc697011f4282b5469d1b6e1f419cf583c7a127adde6fd9bdd7019686679f0925bca4fddc9629a9e693bf9df7310634785a5f89def048cc8764989b88da274b136f28715099a58fc715beb588f26cb48678965d8228018bf136c7641e19278a1ab5c9f548f2fcb09cac255c46c1e0764abba843273483c7a0b488b5040ef595fb043d9bbcf42ff0a201dfeddb39c1ff1f15ab283e522beeec556799482cce410cd6a41f183fa8105a6b7bce6d63c890691cf7ff62ac7e26cd4f7df0c0c1456943f957ac4a11c8a1a9aa462008b1f2abb9b82246787b6aaec51e76388d64f277df7fb67078d1f8113a9ea9546fe482bb643ff75ba83587b66c48b626aa4afe6615531d218b7114887cdfa7dd98e42468259b430ca0d964fb5316f7affe56ce827d857404f193496d2e6754f4dc8a0f1ab9b56d663ff99d7cb9465b42b3a5e73895b48116b1e069d9d42d3c2160b4992dffa8e04b0c54574e096054829c27fdc13ec429e55e28566a621964bc36686b007b8ef4e593f626b0039f28dd23ad15cabb8bf1fb3594c372181fcb6183d6d6c92c562495fdf0818fa0768179f23dc3b76937e6f56176b68afae28b23605bd643f3673fe10ce8c8eed20aa113a8289931b6b81b43cfccdff77a1b09b571cc1974c6640b357d3e9433a3cfa1ab92b9f4dc2629eab15418c585542dde8ae84b2eec6e9295f3cfb9a4558199eb0fac3894eb6d06d0b78000f394661453e2a5b80981e4d8eab55c931d280af99109df67f290ddfc76575417d96befb9c98f2400eb1970c615ff50952504f7c3c0513c6e68942cdf0d7cf1e3332200113d8d85fa2ceb190e5b8c766e8d20fdd4504f9c482aed976243cf3606ca6e39060a0403c62a5a817cb63f7b8e727800d45c8c35a7be35fa57eb506e6fb825b0a860e5bea90d78d1d1d6000a7d91271087b5623117241be8563526bb7066ab0c081706cbc9db0da5d18e798f0a41b16f208b5d3266d60b47f75f64d93a4321316ced3e530536a7340a324e7b173279491085ba22e4d6189444d5ce25ff7d7808cd9a1e233586d059ac1d8bde49528836b9a339e80b5f8ff7f22aa4c232bab782d812f03bb0600b2c9a9abe9dcb2123f9ac2fcec3bdaef4b52ad56b2d8157b4bb2edff81f6989d48094593f55d534f254ba58cbd92a4f261bf7faa63eb3107cccc32a1ceed5c2ed20e9298694a11a4c2b644423836c04559880f9098647dd9f6d4e9864e7ee6761445b8a2d7829b79c19490962e381ad64b0d7a48c9eccc363988928a225df087e9fc138633a3a81857c21ff551af4f12f92c44cdd3b63a278fa17af31d867fb57e870ec165cb98486f631bddbd324bf4133524e3980881b595651ba95e3abf1b7461a53bafbfbe04ec771f0d8c34e9bc8289e1ec3bf57bc899c6834acc3e3e756c163a52d08f84436fed857e05fb0fc91733100d1c882bca7b3842cbea44577094bc2aaa16facafa3200df4ca57ae40af0e29c8d4d8f508290f01fa4d7d51236e3b9b14a561d9557be71bd2cb80478fa6746a2200d30eadb8e0bcf1f345ce0c869e997957397fcde8c40aa4780cc32985a3d77290737c726fdf47e0b60db03447da26641ca6b2e26cae0a494d760e8f9081440cf73a6ee97b2ab7b5f5949c364456371b3d63ea0f874633022eb952e1de329062f1033a1be0ef550cb706e5ad57400061955a8157569264e628f3144fbfa94ad950c3073afca0833db8b4a784eb26321d5c0ec757528af9a7205836317999e439925e95c399c649eb835e258c6f2ea9882b6422d060e4f4b3643061d3e7883b055e5fd1852d95e853118b5cb415b46fa2252e2d28b08a0586b0ec76a1b2005367e2e995a3fed49082c16d1ffad7f0dfc7bc13d44e5940f9b525591108d581a4a9eba7fecab21991dd92414572d5ce3051beb8b8601a0db054baa0f81bb0ee973d50951da82be4b486ef1e8d717d202580374da8ea1088521dc07806876ea23f3027e5e9d3014430b694f93b00da98922767f73d975cb1a35964d6f173a554878e58511d2e3317a6b920f081976be97ff2c0d6923fe1943f98e9cfd0101818aa9b3055aca338618b188d569547ad7f350904fe7300e28f2e65994e9218a5798eea2f0d0b1d944d2bf09812465b38ef6c394e8f02d0b8fab2096e1a14c4adbc820ed7b4e04fa8bf92f4df8d8b782c24b3d85214073e1a742ceb6e69a4cd2bd5cd2095a7049fdfe50a93c4a123c24875e76829e049e1903724de4df57f042d53fa6a6db9de7e0348baa10463e52687d446263440ddc4515b823c6f428dd1d4d6ab0f24ef3f132e5928a676e6a4fc8ca423ec89653f8b098c3585be2bfdc578deb95989aaff6ca86cc1c85cc92139dd5c47237c9d7abb0a57d8ff3494a028f6c9935acd255c1ce0590c1968da5b23e7939aef0b1b91973c82e4d6cc4fd542d549ef24da85ac36c799ea862bc5758f9502f6eb4ebc7d912ea75850db12fd145a2690a64330dfa77ba6def6b3d47c99d0390abed5bc5ad8a9ba5c605c0fa4575c8025f4b96c70e61421af6f95df57758d5d40d3c91bef02079557f075930745e4e05566be96fe7c93d94ecb560ba89e7333086d8f4dc74f4c85cb18f8a2d3ff48454a08fb8d26ae2e969e972cfd472bdc129e9ca415d39ee41a1e5842b17625578f605ca49e1aa4b8db0a844e57bb9c4ae0add880db990faa208bc9c1441e92496147aa241f2b6376735a6fdc89af5372ae3bd4dfb35e382a8fba3016bd4a0bd9542e591cece69ba847691116a68c7a50411f7ed23b4a0b55dbae08489089772382cd7e89eacb6af2c5c1512e27b356c00b499b3e1f1ab44a2f27dcd4827cddbfd534852b77597633ce0aba9201c34fdd64680e2038c4616c7eba0fc8b588b3fc49f55a42262d0e829e958be78a801731e7ecdc12e7a0db054e9740219fd987b0d4febff91b80600111873dfaa5b5d56f8d43f2cca391e8ed1c6fafd7ff4b19c8c5ff87d9966e03aced45a6a231c9f1d89708253b10cd62e2ac6d4338a0e42e69cdd5dcd228b6af622d05550a6010731273da065a8b49d6a637ea562902db81461355327641749c0fc6059763bcef8620c1c2ad2410dc8fee1744f887c768cf2c584e968f939d432851d367b504b34f44bb63d1bd0cf32c3587756dd3f3946c12d0048e6729e00ff88557c215ed4913065adfc8c613a9b0a69e7c0a9fec407678a50eed7586a9141442f82db29d756bb090f2889ba1c21af503f7868795b4fbcffc61061fe32c978f1348520928d42397ab9cb6e01ec9e850c46dbc5f90c4105129edd61fa44e8c34911eaba8fb2248ba1f159c160c0aaab964fe3d04528ae54e257e4841f3976142a827069bdf8472135a1c550ed87e698cf8f5e6ed860c4eb73a9def8f3ae4c2e1bead6556c9eeca457a2ded8a8349b04096aa6c405dce7cc79751aba9932d1582cbe747c7b8eb7edf8933c48ed26ec263d95a48ad1cd06edf21616927ef8b2fb5ccaa1a40ccea358f6af4f71829052f6ba4d7055cd67e53d991b0bea7695db38427135eac33d7f122df0297a5200ce4d531c2c82d7dc74b91a3805119a7c0751a3aa1bb23c3aecb97cb1215f495735589289e18eb9fa136f8f7cb5b48c391b6478e55732184df5474b401afed83af8b0b60ada069b90fea618f4a4db8cf7b11cd269b59c8d85d593ea7c99351053e300e51001434b432e11da552154a6db3b7566e35184fb22716ee78c3ca10351c2f20aa901b21bb3ff6948f1e25ebc914c07cc7d657d42f54bf47af66bb6269a2b045e6e0ff12a8bc55fa2688458afa667b0f8119c5f1d8b545bba82c035a2f5100c865771e4ad8f04649c9ef4a0394caedfae79295d1db8b63f5c2214c16d6147bcc91ac94becc66befd534ca16115681aa2e1990ad0c1f8f4a850b432767064b6049f32aa3f8c2250a03b8ef9e74ca1c3c1faa0ab37e12dbda369d66ecb6bc59047c0936327f35ad6f3fdab4932034743886c32b4180ae0c9b82e5eaa0390c932fab5ad56ef6c264c51d6db5f64318eb63c9361102212526605e753353c1833c7eb710f155fe50fd9357b7b47d53d8af5a860c6c9a57af19e64b2f902ea8b2fdc054d9490f80c8053f4a996c0e68b34bc06e069189f329c0ef75e4ff8f6fcf4dfdbb7b0d44243af518ec7f25f5f6ad3d0bfc9c01ac8918c9d3866d94de30990e946937942f8e0ae5df03825f26f4213fd847d78e7a9c42869fa450d4beab8e48f53fd69c9bb2e6bf034553fcca7330204b90746ed28e2783cff384acc9e9da82586153ccfd152ced121a98fe247143574f327e281d81f0087c24dba9a2883a3abad4c5dceaccd953fcf16ef563631eab22f84f58b17dc08c662fb7f2de6761cc106030452838bc9b8cfad363141e7c7c063d6b4a54e4461af233cb9105973a75ea685b0cb495962e1a468bb483aae3fd0be7624d5b6aa4cad9b4f989a2bc1ebb64d3a5539652b1aff393cca3781fb76f66da82106c384e577514c402a540c424558f08c77432004022d8af77387886964a1f77157e454893366cd2e3e82e57a9d97701d02cd28dcbf84f3dc6d03c21b45084f46d6b790d7867a4013fd71b224b48512de3df7f6ffcf69f188fe6e4bef96d1ab3109e64ac335e32876e097473ed4d2c4e1d657c11273f7ebd63bafdea3fbca1b878ec8778bf01c85bcc63f0db955f2441e72a6b5f9eb93e2cce174caf3d062ef0d2a6fed9fc24d6fe0a03853e46ebd334b7254e1927f47d255f9f43b0ffe39e061a7ca1520497ada220cc55004d3a334af6d87e70355959d7163b067188230a5d0a617c53f12de902f8020822e18bc6a305f6f3285d42dea20c0ba309ee4cc4e47b2a27a007a1cf340e64febae09c2e5395622c8f2da17d07e757c3bf79478be17a734f852e38eddb67b849843f3e114a5513c378bdca3f25689ba90b0e4971be776c498df7b47d848b87cc7b28dba7c7a8dfdc1e78381aa232f08794cb5b7d5307c1615a3a23a982ea3148c9c539631f548ad59dc92dbeee4b1550f07103a507537e0c9663fd75903887944b5e601e30819d3d0c783a128feb2a620b19199471f5dd812959ceceeb44a5d480581afd21af1b67536470e9d535bcd4b38adfddfc8f2303197b1ce4fe7728d0848a447bc0805a58f3c8d7d1d5b9b3499cc950f6874c5e2528be09d143af0f905ef9767e5fc29d35157926c65c8d368100a0904e9cbaa7e1befc41b056f4aebe345035bf9893b7db6f5786205a7a2482dee33ca1a035c5b07c5c4f3ac0b304feae2f38776ecc2838c21ef96c41a7939fde19214b6feac8bb702eecc64597118d9143107a34013593d88f64b880adefad0ab6dd4916b4951ea6f936b5d25d7c5005b019b91d37b1d01db19a522fdaef95690df30c72587bdb4b344b340feba28b5a7ac6e5691edcf643e00b84a501778c500284fce29b49c227c2b45e260b333c50c1c7f51a7f36e2a13b9f9828b37b2aec7b10e78c8d9fb267d568861150ba4a6e7da4188d9fdaf36e226d5069a0fac223d2e2f211101de8fb9d217f25eb68fd576c2daf8964792c9331357c4cab8372287b002a8546c56c36aa546a97baae48c814d03b1aa8636e9626aa4be20fd5ce8d0ab5b1aeb6e8de03d88e92b04092c6b63be2e658b95295f7f9e823150b93a507705238c6d54d8dc7b01324f39cf563f5769f7aebcd0fd7bc5984339cc4186a6d26779e4800b9125a37ad6a2cabe98b38078b47f781185d20a351d3b537adde668363ade8e9feab70f25ae0cd65c1a06b2e096d4b9312ff3e00e5c161df6d067cd4c8bf936765567665e0d11ef4e1ddd693dee2276ea8969fe35231577f41494121bd42d0701d2507d83e715acf82e32a019c83fae051b4360a9efb39b4dc6a5afa6dcd060482ce529a0bfcc2168f8134cbbc289982e6df9d235f4cdb11a0fec5900cbdd67998215e97b5ba48e361d316f4628c0bb6b7d163f43bbee069861b9964dc259b91330400514a9b2873c4e84bfeac76ef4759b4840dc36e2d478df444db071a4cd7b0d98b6ae27d6de57e7ad8c116b3c1cfd6214e8cfdaf46ab04f51b5611a7a3a80f8f82207b89562868d60bc3b3c7a02c7fc26bcefa9e42d125561f5c8638a48dca03d0578e12482d5b00e7ff454e9488da04960cb2e76e63882d70b3cd7f0a994f80d9cc7ac2c7efaaf6b69692a1dc1a26093e42d9e4328bcec484d0b7b92988ffb30d5d12ff1b70ea60a849ff9be7bd81e5f75f89362d4eca46f0d45baa2cdf5d4c5a4158ae1d478cda4b74f03388e9529d192839d436d1ecc5b5c36ad573dae2a3bbcfccbac16837add749ba957d4fde43a901d58ead8ffe1e8aee1971d494d17595ec86efd2ae15198d4b4a1c25005116ead4f57b0d9033facc19ce8ce2d2d7a243af2c3b6656d397a35f75fceb3dbf8a77bbe942612f9c5e30d37fca51d1454a1fcd7da9ba356f545573621c6f8a666eaceffff414b8cfa5be21823de488e6c3b683b5a5034489937538b5c04dc388d9376e7f107a797e5be5d8373f26a005223cfe2c4d435ba01e7fae674f69d2267862f8e7f35810e49f830ba41f303c2d9d60d01d356ddea59d5df255ccdcf768b4cefeaca41c93a96206ce4b80c34818bd15b6dd19f1e5ec9947169e8e051296775f866870501b2dc34105cf39a1e80421bfae89932d97216544f9019f2e51b26e02d6163d42f287445447007976c056a2f2441cdb8c3db9dd38cb8a5b797d652f4af800c3329b92df4532b4224353078c8baabb8a6545445919d2e6847c899990d2deaadd50596dd1fa27dc9b3674652ba376852e52bf4f58a849b9856250e1d3ec2228588a6e9c16b56c7205af65318c6bad7a3574f9e5611fc95105e17cc0069d062bd4e3c5caaee0e010a3a0d90b4da6a6c46a6ade703c5e1f8444f03eac331fd375bedf2e08d62c53c192896f19bcfb6ee9b3933378fbc02c536da2ddf04363ff971735dafa7caa21c5ae681b0c7b9783fe6d3b1d94dcc7514271fad1a4c5eeb5154b5ea11bbfa0d3297ad312cbab328fd6430fa0c3b7ff296fedf8ef88bb56a64a1ccac2e82aaa90d7ac9cc0a10b5a7ce114ca51163cacfb73db5de05aa01441e0d663a0573d4c9df010d955f36405c886555216fd8211093cead0f81f026cc0567fb692f40263e31a577de1141432c37f975c2eea4c9c540324a1e1ff48c24729cee639ed8aa4042b65949b2d2ac43fc5aa1f3d40bd5c6196988b38b5d819f036a697733ded9ca73d234e464d2d969ee0ded5678a0435c1b04dcefafd85b4278b278899105b3b6537aec4104bdd887d8d1a549697d43df5dba5e9f84b25a6354021bb08666bbc52a699adcb37a189af481801655d689592cbbe3265bc4923df8659ee44f7aa18b5acd1f0b43445214ccf5a182e017680f7abc68483c3259c6f9087f02a3d10ffeed4f9012d7e7cf548e99f046c4db230d7f436cadf0ba306b970b7255d030a390d8e6e7150ef233d60476d9963f9da9fbd4e218a3216808b7814d7e76a148f3530a4956c634ad7749ebcd144d00bc1ba0bf229239fb22eb8766101f9d6056fd2518203a68d8336449b059cee3340e8234a7b145802c0f1b88a2e416d4ec42cda9d1ffe63a0ac018e8a66ad24232395d740bb5deb163fe98cb7ffb2e4843898273af40b6e68e75f1b0f350dd5eae6ba21ed90892a13b0f00063a61b3c53559337f55331e837a1464d7455ef408496fbd618b259785fc25de0b6f7e55a3f3347e68e7a85bc53f77bc97c83283d993b0f16ae54927d7a2f8809e8fe31efa368a5eb8a1e46075a01d89283138eb416cf579f1a0ec882f85baea46479b5b1b1b0f01bde374c768fde72d95528f4693b658b6e1d472d3faef21035ccc72016be06037e4739bf35e62e1b55912bbe58a7481d523c9e8adf85d0519a12659d10cf22417b8d3cba415380d0b9c9be06c3927d9bb108b96d1304e0450c8f22d0078df4c170163228319f16cc07a7791a11ed89fafb902d6db6e8af63b7df5ef938357234412a29fab1833e32432e3e1eda7e5f5bc946032263d0aaba65aba26d31f563e11aec712fbe2e0248434cd1dea1026c804e9d8754979e52d52805ccb672826518759a3a7c4e3114b196574bcfd86433ab86c7830c27b2554b45c935196ffa837a93ad8cc8ae849d62983ee79c09e9938d89ed565792251eb3cfe7340f024ba9423c7f8013103c43f2a2f3dc08bb5ad2e324fd8ff76eb108e1893b092ccac903b6091ad08d2c93dd73053a91c28bc93ff706812a3852e6f50eb01c27f337cecb56b390e6f94cc6fb885b37920cc6236a6559aa24df22f8d8d6db0060008fb7d64fe0fce147a8d2c5b8b16f7b07ee1dae025ccafc570aee52645615f89d3687d583ee2a6be0dce7577430c0e4b44759418b68575eb64ba47fc26e61e9e8accd65e5421302f0e30c04be42cf2f61e23a2f0a8740942db681ce725fa6ebf01d94522798c192e63ad5e2495fcb27ab211fa63945018a2dd98dd48017ab808cddbf224ec326082001ecaf8e9b2f78cbd6d42a9cbfdd4f92735997ff02d1d4af09f9bd49a1c525c40a1eb5f8449726d84de115c73601c1fc9e100cfbb0306038fccadc6b9fefc9d2ba181b512b7b867f3ef4f33c71564fc2fe6d9f8b60f4078df93c2825e7e71ed86a279f99b671d5f60ddfb301090f8a3ec045cf551fd8b9df4525f2441960499a340e6e53f912895735cb9e7d0d215f78929e1f0105c1faa6a44dc23538ca60011a8240842b3a41db934de01762570666027cdec01285879ec6c869d2c2dfa8197da06e70d745d06dd8ecaab7c62a60da5c3a793947d8868cfd92b23ec741cbe1fb3f55e396bc1eac5446fa8b1fd4d3b7eac00794e69647ed10b53ef258d6c11edd431704487bd932510d70a95311071927eb38c154599d7dfb1383fd835e60b09df25f67c46fe398b9b89c778cc8b2fd20c05a51b061fda00eb8a87525773907ff302ced6765eef4054a83a07500690251f9ac18b733a8013c251b0e03e65882296f7f4dacd840c5a96639bfeef16ef7dc45f701b1d0428ed3cd7c9c55e16e0e47c3e01fc9bcccb1aadc5487b798c272755a29e1afd68d330682c07ed48aa60dcfccd1d7c573f211c63b018f47c141a3ba7ce9210cc5c8de7946af9aa52adc0d051323711b699b818a0d90495f2ee0820523adeb23e9a797e616dd924a6ab95acbdf1cebc2469536c28eab11cc1611d174235a8c8f5149a9f18fdcf051d69f4717c044181799a4c3a00e37a74e3d94f59299f8fd14c0a12ecb32637723bffea4c6b5b30f1f28ac2963ba78d77d20cfea1136b81fbb1cc261177eae14e5fa5f5b7baa3d9ed62e3214544a2986f9cdf38ff666dd780efa7e84be7cdaa8747041a226b17e49765f23a63312c87d5dc2b718f58b95bbdfdb9fd8b85184d0e21a09ec3d4b0b5bbc2c072d80fb717e8710f50bad18f17542f2a85918d327d3043b4fab8eeaef4ef02e240cec39e26152d0922b5ec6f2f935e8b9d556d3cb48cddbaceba749bd1997c5382a5b877bfe57bfed9f6b4cd87df9f4af91d623c1455a4070d51f31ebebd92b01b17ea8a497ce98866686ac979a2ada76392429ab473abd189d04c31132bcd6d8dde52bc07a8e18df42ebdf457d0a3e9d695dccd5a24bb4ee08e0f7b9f8d0467a4d6196d9382cabd155fc9225c9eadd03db1d3f6c4ef9216603f37a21f09bd1151e1562659fcba9764d056e42a18405937695c89683cdb2e96d6eebfe3969be0b9d13b9fd7592cc7d5edf147ddfe9e71876df907f3bfd1f65428d7f5dc7ec5228098fd3426057f0b0f7ec8d05d60f9d62d2aba543546d99710166caea936c51819fb0fee2f6f84ff69d197dd3002c0e6599ad1af4ee4985b0d8717a05d1e90607d642619cb63ae73662d978a4bbed07c73995a1fd91b6c985e0ef072314de552aa01ea1586b61405f90b227788d8b2327b4514f5f63bdf7dba5bf75245de12785731f02712bcf944b1c3b1002278fe92855d5f3a28809322cfe137b36158ba8377a3002d70f33da77ddd91d0069b5a2bd362dda7dce46353f50be27e401fec6c51318bd55a159b83190035e3b00d344d28ec9bf887b9d7a093e37a2129785f6dc0da4978691b2fa28042763f27bb3bbfb15182a4aea2d3ccce7c6e2e09b483fd0df335ed5baf619609a42aa735fb65390186850ceb0c4a262376f1e03bbf52f387bc8eeb529d5b764c3848b563bd5e688c326e4d50866e0d9df6bc5db7421545ca88a45c2fd75d007945a9e75eece19c2ece9c481c34ece4bec5cdec12745ca4123d0584ce00b670772cabc064680096bb5852620f8b83744265835d05b92cad69acbb4cc60f180a011cf4917f6fff56212e86a0cd804b0734290afd85cf2e92ec79ee4b86ff40c9eca190e0b5bfcb88247bd2405756557339a8311197eef7e6f3c9b4b218d22d4c0a35c1443fe0bfc6efbf8fd916f680d4b1481606fb8dd1acf10a3b787503c3ca9889bbc4d2c0d8c8a599f58f3beef928b9feb8f2ddbaf95a54524f5b0ecc36417bfdce9ba2e249bdca758b64f32e7f5b878f34a21af6d074b62ceb5f3645e885772794fcba086b9bfee12cb6c89e2005165e2d52330d26d47471aa29149cbef97d0b88ecbddfce06e53c2a8d3fd0ad7649007b1fa7052d75073ef1a3f43a761b25a81fb30d154e07d4c263e1772de88b0554fafcde9671c7c03ae9861c703ad1d5f43c13ea22b07e5243f424cf42f28528e48ac120f4628a693fd19e6242732f50990970dae6ca66cef5337162884a29d632174812c9e7258305bf223d783f178dc235270b34e58726a4be370b0e26208d4721f478027f219a15dc5608ced0c28d0fb49eb98a24ff540a629efa40cd00b0787b2fea651d7a3e3477d131f56f382f56361127f08f3192370d52f4f5ed9b1c31f89cbf515ab8d4020ab7ba6e3f2c01404cd318714406b246294dcb14a558bb100dc6a2ddf2b102feaca9e97b6756c359ebb03b76312850a5904d4d362e7eb873cc11ac40bdbd0f539d779813f8ba48b2b8811922b3a4a5531901083d93c2cceb3c77edd0919e4c91c83c45798f81153a7d61229a77304e8a89a48288c3ff9903ba639739269816eb46d081d5e1f226a64f38fa3efbbe376c45c52db9434e2ad50c407ca9f8e63cc5e4f2d68ee3dc84039e20b249e4aed4fda18b7bf1cc108c3cf90424e0b3d50d7427dea5463b3151851d8b3b4e0ee5e4ef01d721dedd6fae45122282c354c9b6cb1a35ede2fe34a0df48b61d8ae594ed4c403450270a23caa9acd012f3a12a61c29ba7629adfbd3ffe2b1cb9fff9f6c2f9f7491469645dc2644480a4ed3126cda9df4a23dd4a2d1c6072b360a3b1262457956bd7f173cf18556c5279e45b9e2af86f65479aaa9efca54398190a5adeb135b2acec956c82bf75c02d2a67d8cffb799bf29e2d8b36109caab90a07e0ef1863a82a4991b7253e753e0632992546bb33741b211ae825333c54d6ab39776342832bf1eea0b92f33c2558822056c59376b0392d5ce26de30f3e86247a926ac7a28b93c29d54b674920e53a1421597c35f5d765f388d9c43859a5865752216e2e7b3a10dafa80f11bc3824fb778269a3ad16c3d5c08300e41ce000a61fdafe58209ea2c1a2323bcbc94d53acb4521857730284ef33ce4c3746a22c07ef9fad272a9623ef79a3268055a11d22344ef4f0a969264f1b163bae4838f839af719c1098dd9136618bc3f5a1e4fc2aea2b6c3178efe533ea40a0e1763d7ed60295b4a663fc35fed6b6caca9d5bf140c36e8caef81bf1aa541070236d56610d8f37b60a829059df500fe915846653b67ea138af55984e451caaf50f71789d95a4514adef24170dd09dcf4a07aa313664fa08f9c6f5a1a59a2e359e3133ed08424d10eacdf7fc400c621724e561a4f503f37a09912587df96a3ef292f3d1823ae242ba275bff8e34f1f1115f714a33069f00360a36531de2b21f98bd5b038c01ea1f78d7c197de9f8e290b42541053b02abaf0672df31ba1304355771b0a40b830e08a94b08e4956b264b4b7d1ba5afc43d7df01285ecaf0a661bebe5343074ebb047b7afa0d66d462efed0d0661f46f048854806929c03151190c2b97af67c6518b65e6457f3e75006d93a1dfb1036e34de12480feb591dde0ce89f8ccee5541beffe029828b41056a45c10b8a2ce3212ba8beec8fc8670a868fb4f2fc5e7a96c4f1306e6951c7181a9e6a58a068b321154b47b52bcc68fdc4991452ca7a6003e71ff3246d9f3ca17632b81f60175819615d2b026c2fca6f3f55d19732be37c436b148e328f2a3c263d0c6388868b15b34dfb1a26d939ebe5950178b1d88476ee67bc9e143ee02e856987cb5588f076ff91a40682e9b36284a8ebced1d9cc8ca6a437643ecbca97888c8c33ca51a6e2ed5301229bb24f1c2c1913842f5a3b26cbed205d582a5d4702dac9c9998dd04efb8953ceac435d3a2f3bb4a96c79c78edb7deb1bca4aceca5eba7b6205fb28ffe9f21cbab6afb14acad7bcca04c42e401fa191321fb04fe3ba132cb9d27695a21cd17207a2a64791981bf103f3fa24f2fb9b590e2cbedf6919f64da70e359a5a72683233b1f81057c01ed49e2a4f1d840dd0dacc3154d08f0c9aa119a8970a3610ee11c7ee553b8c4cb799b197096f56ddb787a0805edeafa2c45b1c35dfe534eae7dab869cba2fd6fa42d37307a70ecf8691eec1f79ad41b793d14c236a18a3be2d643fb66b9854125d6b9d46e8a420da4eac5cf12471e5366faa8b2a87ca7f6dea94ceabc75acc06c1f6158168a3a60b2b994cc33de28593327f6f0305838569a5fbe43f9bd05e3155c67b9766e799d8c66434ca17344a5cbb737f53710a6a93fa9fb84cd0375b533de31dc01a800be10610f5920030c50ecccf47d5741688016e2bffd16a6dfb98b5fc36b4845a77055fb1e781ee11bba20279ec481c21c874c9b28f323a8107ab8eb3ed0e2c5df83cc420c3132f2926e01f41403dc8f6ca6265b18c2cdfdf246bd93f29a57b3776e981f7443f12daa86dcf62b3f92f8a8cf1ece48ba9de48522773018fd8d96809d9295baf3c080dace0a1528da87f4d428f85c95e80a33d44b11e51c0fa67943655c86500f0259010469b4d9d3f2853a46d5d132c0433ba99951220b0f0c54510c975aa30c9dd842fa709b5af3ebaf7fabd67b92159bbdb3521a2349b8e0aafa214923cf285c8399b0534fb5b7b6f3b36f6a89ae0a0be14b52f011d058b96ff426da666fc236cac2f9e5b569433e40c7f3864642275753c5244d8a8f1bda7f51e42e57251ca6b87494e1fd2f64eb109c9f4ed0e8bad0973327b2c264a494e102fa0bad6279cd51e037d8f12eb11f2e24913c8107908cbf8d3346d465e7235dcea6351aafc410f3328fc27418cac03c5442e215cadcec325871c4350899befd88826a6f957c58317868a575e2bbafe836d820e9be919347ee42730a07708839dd5e0d511174256870d654cd22a3aa8e84831a3dbabfff7a02116d0f64c8d0d2dd7a61ac7a56a712735935be01348bab515e30d93f1b32bc73fecd35ce641faf30c5444109c8bb7d3c726b7dac9b03002f0a49d03802f761b47c5a0ba89f61b7ed279395dfd16e9d38796f176b1a2cecc9c1ef8cd3158594e0499e5cda74e6c203187d56a7faffe394e91855d64809956e0d79e82777e5075ddc1cb7a2c8443d8a0a1b463c91f0892390a455ece37a2bff9e8ed011b847cc866e29962c73b2f3d55fd68776ad9b88240c14870de02a8940f1c0608d200c97ee9d961f5cddb01141628aa9a9854c2da7acccf849501af0046ac4f567e8db2267e2f1ded6b4c74316e926ba7f8a58630be58ccab729496036c4aabe7e235509d0dac03af999ab355b1de7a5389d6913501893d60ccebdda51e5e078030497f857f30e74e481a3ca00ee2ace6b9509ed1c74ccd6e6cf66a3305adb03e3cfe73f3e250459962c94619e704c74496765a4bde3e312a2b7c9dbfb29e44c0b490f5469b3e0298ad2fe8cdf1933f75ebae3d93ebcdb86c61dc85f5d3f4e509d693fa983d2ac1b91d971887ff4914455e719be86d2fd0ef33c05f606df10da3eba58a69135fcf0ad45ddd67f61346f2d2f70ef1c9ee1f9b945bc2c27fba0171b34706eab81151a024dea83bc046eae09a3f00441f2a6c7d55a7de8dce3490b7e99125c34afb30ade89864112e7ad37851b20801202100d45f7bd65166c039180a6c75f94e4fbd0048086ab2c04f3a55f3b61d09e0d411fc72f7a4beddfb89b37c71928f3abaee48a171dec9392eb10703357e436c3a1892da68d8129efb5de82d1203f634927ddfee0f491f3c896e1ad07fc6c66a41e2a71b138b89654a4305984881526af6ef191b07ba1e20f1ce4a100701d40389cd1fb6c26bb2d99ae5b009991a7bcfafb80a21d8095f1c80ddd660e2cef2a48b37fddac530a5894a6cfb2c9b0fd4f11459507d87c7eaa5ee9df730d3ce20683eeca7e083b36d995f41e5f40d723916e9dc5b178dc4920d25fec8a7a67365bd32a1f463707e315202b744d7661a35c331e5c4f485bebc42d604e7059936cad791fa6416a9ea708c902b350f3f568212bbd17dea8255d689dfa44a026a6ac1d8f70e0a7805e5d4218d0d9d5a98c7b9b3309a8f50e34b1172e89f6fe0e216bfb028332c81764ffecbed68bf23b903c17ab9cb6467a967ce20f977231496251cd2eb40d3273f3158f3bc8e136ea7c3d1905145f6ffd7cd57e7a3156a724e11729899e9c3589c8adce9583c597743b63823e6d4db7b2124ee1b805d9582a300b145e76b54ec1771fecfae3a0a8eb6d28574bc729b8b87c06c9849cd45d56eec0f520296c1885fa8b1f41d79f140c89ab242c99b0ba6c86bede86a48076afaa8ce0843dbc9f1f501ef5c847a069936d3f469c183c0bb2c39de1b1b18b2760a022b70fa5d4d6433c716b38319e1b20b2c3f60463411c7bbc80df6d6625e564a7fa8b97e2d080045f21bff2924f78da4cb94a7a7764e94a800d6c731c343620831dc230a04fd09ab6617016d5ea009013043179ffc4934ce2e7f1da3609d83af36f62f2da468d187a2e2c4aba540e5883d6845fedde43c901b1c19a66c383c8c688ffb95c46d4a656d15f7ae1e96230bf86ae377276861787a23d84040c642781be6ecc2dfbd6f5e2eec427f1f75153e1f850cd811c33c15d3fe2f8b4d638e3912d2849037456aad8a2e978748165f19444a2615b2a8d84b970c971efb1de3cc0f5e7133338aa93ba3cc9acb8a5b7f167267d1ac6862e78694d0e6f019591e99248936212d42cee5d857e056b7e1961d2d7f84a91c29ae9c82770ab9cbc8c27af5883665cb6057a219967e4f61aac11d28fdd68d22f629cc1a55c39693b3814d79e354d18461734d42572c44d4e5cb2bb63c9df97f1623fbd4cc0c8248fb7d6ab6779ada3fda2a812abe045e170cee41c892fd5dcdacf4979ed58e0bfb026fca71dba105c1b23de4161541904422ec6522a01b70e05a9069962c487571a675e4f1a02e005a79dbb080cfd80b91a2965368b2d220ad25defa4d5852fe658fdc3d3b3f27f6d4ced278611e384b92bda3c228d3a5e66ce0d6c61f5e906e8200be5f1127f64139a5775cb0d022b1f4dd7b63c8ad77f6a9bd734ce04fb2e2c50571420d858172aeaeab379729bce21cdae1dcd7a4967869cf1628edd041d291fb9db91bbae73f93d2d544a8cb2dd2d3f332107d069cbf75872469859f89d09438757dae14e31285f1fbc799f07bce1c95db653586784caacf4a3ade5b3458784da838818dfba9d1b8a870dd85230bc195addcaf81ac42dd63bcf919086f33dbd4da72131db35f89c060c40205694a58d0c2a55eeb53ad05dc3f0f73e8865bac67e119b662efb50e6cad1fc2477576afebf1f2152b708020878232eb4ef2702443b9459dbcf9e4f12b79e227cc554dbd2d280769738283e8c5dab97b0252625e627d4f76793af5bc689012cf5673b5e0f85c7b50dc5dcc67922c62558c3575ba5773673f0e69bf6a7f3b9224131cae86582bbb8de5cc3daae1d2910cb00f8ec1eb3ffeed8e1705af57129f8a7a057ff53147ac2024059194ecf62e1048aa24322985df6486e86f77ff5cf5d0d17496164e340c49b9e8ac0b53781c75a905a1f34b5d12db41ced914fc4caf7601a5fd3ee0101e8a5aa80e8fe7ea8a45932c4ea2e5af9d58d6eeeb001f945434f240b2472ee7ad7d783a044a20ea3a670a2820abb3475041d88d407bdaa136ef08a6709931819ab7541549f33a2ac7bef477bcd147738b02af305807ab3eb8c3dcdcdaad5b859083e7af9406894c8a77ceede09ec17a6eb49680fc4ffb62c3179785f64264c2b8441c2f5fe3401345a254c6a4110122558a44b19104efb855a73ecc748910feeb4efeb735b80e0fec9e9ac51e36a55b5da45e27c039ab6745eb7c63ebf2d0d4c70d8dbb539875e06b078fc3ccd5a71be8d40a296b299ae0a375fc012b0c14c6aa1465e57d3cead334b771db6369056e2d621e844839b5dc5c1f5983dcf9753b500160979990c75ea5c163f3f64fc7014efc54a247bfbe1b09c8a9e52a427c7e8f33590415f2011cd6f341a305678663100bf4ff26f5cf40778adcfc126dc83d356fe3cb7089f8597c15665523a73ade292cf899690d2e4d6e26038a5fda8a0f66e5d3d6d53ffc9f7a50988c6a0f75526bb9892289f5c9a80b63aa5a8e6586071e3c852fbb73af3b0c0fd49a3d2ab6a515851478f330c8bf37183224582fb3fd8252bf059a3902d51b9a1787ea27ff8fabf0b929567466f2c1f1d5b81e7b3e8af4650a20112cb8a1e61a6d4c6ff6ae023f63324a922fa045ce5cf46c332f554086b2a738e6ae068ba9b69c332d5459b70c3da164ca8e0a9b10cf0152399711e82e1addfc5def94b06b6b176322bafd9940926c6d284914ca0d54e6a0d096bf73d5f07cbc3c1c234a6cc8d8c820ae1454354bea0e1835fccb1e76d7c185b5eaf326a324ff4a9c0a705ea7f06d0cbc98a9b5f904c499eea221eb070b25f0b325b0aed3bbb746d1e6f5a02c850b0618bd664ff7bff701cf37bd960f5afd23553c5f7ef09b873fbe6170accde1fd0bb082d24b50dfe44aadc13bffc963f1abf67ad681d805815fa2797ad806a258d827d52b467a7edf6a99265f68751b720518807ed7ac6940659f850af22929a73d96624a5ebe917356073e419b8d8bb3e79efc506de2e0a8ebf5f6382002f916d3e8b56c5f7ebebde516d1327f1e2e5b297a642bc8c590a1a07466139ad924408fa8cfff8c642605018b19af08f6b62bdf4454a2b1efdf066d5ed68925f652fa3b38c9944fa7d8412647c21a30a9e46ea565f5fa0f4b0b2fbbaa553fa9a109493148d03f5b5b0b1d088c5630027bf9d65ec1dcbe030fa6af97633c46218576257ed248012330b6f68165fada6a33d5fa8681f494d9e4b1e7b3e25c789f5564072ba1997c21e025f6153e3768b9d28d44cf204410e454397d1edff203c19646320a9533ca68a026f11f9d19046b8e5a9865cc31238bd67bb3d3a018fddbf46ee0f4937f4a2194fd73c15e8589cbcb0fc4c044a0498f0dfecd085ef84f7da931f55bcb93e38fbd3dfb941ad727443da40870e6a0ef77715b57d02ef97953589c965c35f8cf220b4d0c39102e5b4b893f3859ef68f9bee42bc90234a3a9d073745653ed7b0df1da28f660943c02e4b5ef6f647b174c08f874a13001037b47bc830ff8b0aba4a85ef9da951272ccf1dfe974fbfefd4160dc7d9d2f5632f671a1a4f639344803f7747c84f6e84e9c30145c09be3aa9e9a4c9b393296c132ee9fc90b6d8f01eedd0e0eb79ec6100e563fafa06a40c3118c9d636bba41e1fc8f17cec09616f2de35e1561c87cb386f94dd8910960bc6657ac9a8f92491fd328d9aabc0a53b491bd0f42611960f9ef12f021721d22485080df02de9bf6ffd03976e251d65a94502f6662d5a1d8cfc3cd396634deae76ce42168327175492d6ed7d8b468928d6e3985be3aac8593e4f7cdac19887776ea20b4210516797c21280303ea10fa28388c07405984e4dbc66807258c7675ded24db62d9edbfa64976026e7e04adc0233735daf3f65f2efad22ecde158b1cb99b84f8b98087779895deeafdf1f7172d7ae86338bedbc8cd01d43fd32bbe57751cbc4d30c7ae2c3764e47df50c23027fd2a303f49f7feff37011aa0a43defa8cdbf0192b825a6e763fafbb431c90633be09707a2c20a6e3d408b239ffe0172ca1b44816fa89d829c184c54c70d8e4eadf828115ddd3bec145c7900e7062856286f3465369d951294e28a79f000033d9a35fc3e1e1894604ffa491adbd55f6bd5ac8e6fce346e92522337421406a8a81925de5abadb24f848f7327f92c9fb29d6b63d3cb29c39dae9c0311445a017ad0eec9bdc52a3fdae6f1f36b9afff54618c4dc7bbeba99a39cca533bdeb4233e9c7e992acb9f2e4cb829f8c86b0cde936aeb5f1eb9df98c1fc8d0af813443169155416acc54ccf04702693e87c6238f1194a8fea57e487698b6e16a1519d6785fbf253593b60899ed2dc776ab6764e97548e1c12ee3693dc3b4cb76c3e55f032b4081022219feeb81f6259fd7fccf1be7e1fff2dee9610d9748022ef2d46d47d91cd7eb3d7acd9b6b86c90d5d9fa39e5bd0c27e70fcdd0055cae52cbe5051ce64e2e8ae76b249a60d32c2bb249b264e8f9a2feafcbe98e2efc5e4317085c384b8e84be2010cc0a41cf038f27ce8146cecccaef7f342bc03da623104075ec93cb6e3311b28e7f4e7a72f7429db5b71ab305c0c8d8c547237eb0b088169c03415c465382bf6380513383560c6aad2edd2dbd8744acb51d8bc848b05f83091cc3586d2dc74ce86d7ec10f442fec51ae3d1f2811cc27cc42d0f9950e6b38dd8d2d5862059860a4a2f0db82e865336cb12baf9ae0e9a63f88cb6ea8261505cdbe69af2dcb82350fd0214948f0d1888d13bf297bb3383fff2b9ad757e3e7d4c71eb5099cb3873b6de5f24b60fd4aeaecff72a8ae6e56d701b39033299b273210433eef7dc5bef323c5fe922c555eb92633fcac97b04da1d637937ef542345f0952cb5538c14e2c16f07f8d87c34675c8d2387e4489842777dd94e066c1b9060ec180e7138c75526ed9c17ef6d82566123b76bb7d37ae26e1cd48de0234e5daae37ef7eb3398752c0f69034a4174ef5f182516d40cd940bf572c6b5e9c05f1be89c9032291d25215ee04849a736a7d5a627befe239648f01a260f1853dc85b4e9a0c82f67e8c93a140624b3c2a141cc2b49974d9997b84c89785aafd05b565c0bd6d4007a9cd547eb3876830cfe84dcbf9fd86fd748f4d6cb7f1103cb495a77373f8378213094d8a9a620eb474e649526cde08a2d08c760ab377e351a223fca41b7c99c2afbd34ca8a6c4691ac9feb49c8779e8572128649b1f63b0165fa38c32eba54a41ecac8b63f29b1ec5e5f068c5013068d74c934a6038223617441533faf1ba35fb9a20afcee6f7004c41f4c9377c0302ab1f64db4301741b437b0bb4b229c6a4d0f8e6177ab4100e73fe56c01e161c14204a6ee4cd0e032215101486202a9593d96d6974203a1519cb694f453745c9e12554f49adff12834849b8a017856c699ad1e03d202c02dac425fbf1519bd5051cd63560b00cb4bcebe3fc1fbc9fa4725aac8ed4d0e2300b42d9ae659dd7ac409b81ecf3c6abdddaf0dc47cf4d05a2588ceb29b3c12ab5ac3119055cc280cd3e55c174e4695260bfed4c7c0319ecedc84e5cff7abedfc63c32fe75c90be47caf3d9193f2bd893883b43e18ccc7a9138fd2a4d2b8437b305a42d99f5bc6f03421f871f80ea8c145cf81a795245eeb8293d64b07f0e529c188c76be2a51c721cf232a2e3f5fa5aaf3cc9ab313c4ae04e9ba5e98daf021e0348356bc34b1d8ec269333f59f0e9643e42e23abfc9bcadd5fc7508ce4abcb2935c33eaff270d124d85daf74cecd81b09e47b8d595cfdb9b57140c3e70452914f5d58dd4a66c954689415a7036c3806e6fc5bbb0c1f23ced3de1477c680675a62359dd7f1633802a86ab3d24670a79d2207f35b5cbe4665e3e66b39d137adfcc7d300fafb5d4d11612dcdfbb6a347ae1588f36369c0c05262480f0b5cc7eebfb5f22e54ae1042596b3f14db22e1ee623fd1c12e7de219b295dc6447353555fd8c2ed804d64364fc14b48f860d88f70c5effd8e8c1ae859f893ea3a40e55aab6950215ca05b6942ddfc0ec8a76790c12c719af44869fe695dbe4669dd98bc6b9f9aef0d3aaa23c53c062560d736babe882f13fdce6582c7a614ed983652603797f6e7ae334470fbe0f3f4f636c70d21da67a29b027261627c49ef4057f631db226c92df5d9e1f32dbeae59af7edfc742f1cc93c7289a75cb29eaab5cda84c00971fbbf4c524f1e948eb3d0a3207eaad45b5cfc9e2acb27f785953d77924e8dd514a8244da2e925219abbfefc8b32d38e9fff1d5d050c5182bf35ca02cc3bff81701fffc577aff10a8bd6ea08d6284bce97ca46b3c85c352d24cb71956c977172d83e25776b52884e81ed16c91fb1f674f152264ca2b5d68303441216a3cac22fa9438ec046ff7c2fb860acf6f8d31b04ca868b6083a2898f68f5d6019d8148c3bedf3b59bcfb080c360d11c5f52cb3dd5b5043591d549fb6b3d8c49938db7d4bc7d57a818225e670a636c59b3ae7a241eeb00dbc42d0b56134eaaa4c53b5b6709e68f994fe87a3016fae58d4a91fe970a17f6f4c6e1ba548707fc66bdf357717f885b29649cab5c156cd694c6f7244dc0656c54a59cdbaf4e7af7cfe93c14534728c3dd916f4f4cebc513a4c45ef3b2270f84d637e187bf088baf74a0a88b93a86aa42544e006e5f5bff087ed06ea2dd430deb7df358dbe84e203357f0ab423aacfbefc4001b6b25c0c83c8d20f781108e9d45d87166efd650c3b958f5e0f6de78d7d8dcb95a6528f9a7862bec0a5b36e5fb2983b4dac5f625ed8b753c740a853affe44c2e2b1145dc1aa4162aed997d4fb7f20615fa819c6af620de07d269d56f8a3ff657eb9bf1724afa0b1f8cb6f50c7112257e7bc97e70fdca784844449872f9045424d3e07bfe62a31b3002f2324748a0b241482a1849cfef0041bc6176a71ec92417ab328c1132033b17dabdd372d6edfc69e09fc8d8217b784c8e9d2650087f773616ee615dbc01a1d06c38822e2280c83db607a02d8b8cc6a61981c1f7b16e574d767bfeaf19a8512d709a64d1f0c7693e4597838d563821297e2373d5d5bf9d9cbfd7d5ee902111cd952c98b51c01ed6a17eb213500eee15950171f5ae56d468b0d9c9eafdbd12d367f05874bac216754eff9cfaa983c23bd791511106f68145e5dd929fa3237cf6dea07e1261ae9ffe14c424874bd25313278a01e114237c433f9829626d121ce41d4050878923b6826040347f2bd2a8e91cfb78454b60efa5953646222e02051535bd68accc12084ee6ab12d5d2bf727316e85893bafbb7209a8c6a91f99e9a7dadaac7637c8bf72f016a2799336a01b7f3bbc0b7e251038f8821d2180c83090d2fa428ef6906ee2e59e0b505183b9309ef28f7aef5b04b59d501e5782a4760e54e74688b42fd9730c5c98262e938b3e70d1a7fa666df77d79536570a2a2c873b4449b55990c2c181764f68adaa56542c26e4900dd6d05efbc6ed4e8d6f783d912dba825de991d21bba90d858081bc05ad3be23b223c2ee1e251cda01ba7413d3f68280a824e489bdead6de8896d8213a72414288a6c49a58e8cfe2c774ede651af465741e4acf91fa478fc9c235d1cdadf6670749795daf35b0abad4c59defcf17c69952bb779c207b80b1497ce82a3cc0e171155350e4b5d28ae44f90ed0eb9ecdf0cc0e4adfa3c1717b3c4eb33ebabca62f2c89540307b59bd8c573dd50f17a35d4ccb7ba406080a96e6f039f9d2fa81a9a83253356ed227f023dc6f5c74e3b9b94783fa391f9795a8d582d1fd3f44ef48833e7275aec912f06603a399097cbcdf8019c106d8e1f5788b45ce6d84cb32d7a93fce697d91fab1b1f7c78ee938bd29937a4444857d81039909cea68304419cc7eae83ad70f02b9adc48f1a8582c243d2007836d819c20a5b60c66b2d7076794101e6b3004984c63045ec6187a55cce8caa4f5eafc5bb36c474f7a0405488b34f750e22efa59155fe3dc00e74c9b90b4519ef112eafc348fb6eb599c556303d12bc4edc2d329136290a7532a7f149913ff1b25da4a0dbe2ab936579f72430e66acdb6049fb323f197358e1cb9a72f1b991f1ca8bb568553d3711c82405b846e5e35034473926d0bb03d4a6740c2081aa1d47cce64a6aed6ea420a5557495b5243de14e038c5c6c1a1c21a3e6910c5b481b5efbe3b0ac2aa0e0e4ca4876482ae106ce331547ef7169116245954b93ebf3a909a1f62f2e9d31f6c57ccbae1cfd16899f41d5c9c4f31ad3b15980f17d7d81a30553d49c380ff5f29c15eee443d036d638eb91d72f45615737a9320e8ef3a1a9f4b0ebc06f5effbffcd5cc415ed55ecbab8a434e65cd5f9c1d599051382579a4dee692dc70aa328db7af9f922357e1c526fc821534ac78c17cb3b8559f499c002fb561556b5154105cddbe19167a6315065679302fbb4a02c5fc73837364e9c9d894b6166ee85da04c0263d55f073a7c24ae2f20954bca4b35d3ee4bf2ee64a1bc99dd84819621778976819a753a1d448e663542bcdd523d0d3f4f8a4afab916b117ff654f58ab74614cb0177522dce9032be06ce7b053ad33d97e735604fc0eb8774db529ebe8184c7a973cff2c4bd33d97c9c084e6500df46df42e269cc42ea92fc639ca8f9a2fd542320fd70128f64758d9decea52b10daa042bd5e126f2d968a2f082a126bc54985503f9312687a0e474df1dd83a7ff66815245b4692ed532d15dc5e992d6241794e67c8f52cf57d2011cbb99030dafa36260263692fa5f9645fb50752343c431525b1685dc05346e03071f081c458d31fdb2fa83614d4ec9ae4e346aca6571057d2190a44f0a00cdc663eb2bc0e6c5e2102eeceffa66545fe50ed72325349cc0b0848f492435b4951839db9957c9c4c8a3c398067a0ec3b04b3c3303638ae6494e12388ba6665c074af4b5b77bfa8142967ed5d3ca66c2be17c616be84a0a815c1e1359760e47a6a9effd10b3c60bbdafab1c7757f0cc3f98e8ff43b482456ca7fb61e5b1245f0db5638d58cfb97af5263857336ab6ec3aed696a20a0afe96a1fcc6100f6f21b393945c190fe289222e0dcf78cd0c22978c0929af108f13c66dcffc1f72c8774ae2fa342f7026a088dd9098b3ed925b6ebb4bb818ccedb722a464b58734fc9bbfe3cd6cb759d58e3831a94470eb87d1b830fcc61ada97ce1049bc3fd099078fddb50ef4676869aece57287c90e6cf5744c833083e556ecf57b6e24c4527ea0e9c59e17a78b26b3a27e1f4448771003be9a41497a56a02660d4dc9f5a60685eee35996e4c2d7f4142c5725fd55eaeef2c8203b68e775d76bf80b18fbe05b658f75127e3da4e715c81d7098b916a34a4df35e4871534f832d8587c42ed338f28525b43ce91a64a517f923d4e9255fc7e4ee45a17e7b82c412ae3b866052d4c708b0b7f13d149e1136090a60e4032e8fd1c98409115b7b8c1de22d42044f08ae8b24da5fd1d04914307f0c0b39e612e03f92835a85f2db6bd9825a4d830a3146967863c42f70e691270529ab36b2b5de309135dfb45524c586e158a8acba22cee0e8a76b4aa767e368d01e5ea7358ce9ddcf03025b253d404fd3ddd29a111a1b87d2062d35dc6dc552c1af4ff081dcbac58363bcad51996208a9100985ab720eb6fbdc17a9027e6694ceb5e311752fb31d9bc0313614381b5e5f811ddd63b064817c2b0dd04aa5a14e0d89f75c3433b5998fa8f2093cfa70d1f3bcc3c356ff8378376e9c6b295e1c11739acbf9983623c707de12fb283db3bfc5625b3c1a856cdd1798325111421409290f212d2ec8a85be7171bdfcd1b6c8e25d95e1673042dfef523690901e84c8587a39768c8a883044c97c5d2ed60d49b366b3f59469b4fc29cf973b766690cb4bb22a5f7de8dce0b99faad4b29ae58fb7c26b11c54ae064f6b072dc618b8814008042bc00b40722360c0cecdee3437f82f798109b3618ecdad099fdaf56308d7e1c9717339719a45871a3b0d7e1eb3ca9f180c1ebf8cd5f09e91114e1fcfe43b1b6807366a4d9a3efc28113bd7887a1210be4c48fd46a7ce5e21f06a4e89c627470e648552db9bde4db3d590968013aa656b3211d1386f912ce40241f022d86b47bad800f355946b348295f7f721776eb02b1ce6a637404d4f6e112f9920fd53ae1ec73bc46c686160b9ea3cc502598def367be73f2ddf07406be1fa7b5484210d6b837585071f4b0e499f316fb0c9be2e87b8d59498c1fe3d8b722ac4dd7118f5d84699a34d5937586bf8fb4176c7e446de7dd97c28810441e36c680bbbccfc3fd15e76a92b3f17f9c7b362fbac8bff034a77c35771a4aa7e3511496fa36755bbb150666d0a04ee4dff655de18a45a00db300d7b0ec39a4deed36ef8e9cdc9c0b15529c0c2261ebac8a05095577884aace84b3c3b99d1bb4dbddbcb7fe797b6bb1da8edb108d551edac54fcbd0c2a2cf6b6e78fe7e874ebae546d78afb590cefa3161c86b749c8cfab9373f883b85f089f025f3856577258ffb0cd44647148a4ab591f8efca0b5f318f399c52f4f50ff2eda2665a6b95bbb1cd99f2568fa311c1d65d3b9c8a048063e2c4681bfd4184cff8b1df591a033a6c48e48e91d6f89115637d8cafee422f1b57bc95ba2fbae9492da215a08984c2c231c553bf1b9c0df0c0a64404f3d237fd18b081d425e3cd7468449c39ec1e899b17ff0e05c7fa354ed7a6a0bdcfb37285b5368643f20183fcb2b6ca000614174d15c141bc022c0e5860d8c50c96c68fac880d209d728d2dcff8697ab2979121b0f46a01f57ba3372ccf5eb229d927903e7d8b20a969e4888976eddb279edb7ebf2d01a2f5d7e24f17a1a2179f61c89e1eb562971b735bf0a17b03cb4a8e27b08d5907bef710e1095c3ec681e5b3d4a2d3a87313f8ad1b25678d836aff05f37c6e0d74fdcff34bce2433fe07879fdb99a45f4ee62bd85b11952cc3b0ab9eadd6e55aba07dd2631c1f1ecdc65ddcec7d1dd8171b67fb996547c455945c24c798e719ec8c90b108316448089c3a1bc7093fa412bf4350001e9aa2604c59e4a50dd77d1829593e9d117a8295121a527ec7412640d01a861ac963113c10d44dc6203fd8e9279c79ad9b6eb11deb7c0cad12787decedd578f810ffb7b2a4f1e7a42bb38f09c44a9ff5800ee16b52f4faba97c836924a6361871723a4a4367401dfffd81aff43992477bcfdb0c32b6090134ceef586cbb01c0606920f6673b0cc52ac2d7e5c4db71aae2ec7b970b4184c286c45f9d67e7c2cd793d34c7798ed8610fca6e6538d9ae94531745512f3b7ad291f1d9dacecaa555e8b459d8a72678c58d36e921c4e1e477b74aa99112c66bc51b830d8dcee5c6df5dfbe6b8559fcdefab362bfc29d62fe330ab775c7f19dd9c6d3de7b0098f76279402e769510d3054554f34a63ea05bd18957c2bb88cd74fabbf898fc4b658f71f2d9e16c0412a8d2bf11702a291c92381b30eae2727ec86613f8b6130853637c0f1f58fb75ed90857c9dd0a1a5a53d98d34c87a65bbbe33664deebaecc3752d6d1f7410ca899d8e5739a8fa28d28b908af647258d72dd200d78b431b359adb94503ec5e927901159384c7f98b280a610dcbc4e2a9bd6d1a9f81f59abfbfeb05cd06bc493a5969f96dd862eb569d257e6ec797a031f8b974a7093aa65642ab22759adf71bcda6f00a145116d1343e13b9c592a0ba361c424aaea11add32fd06af34780369a99eddc56bade88d0e2d4910ed0d7840877e368f12a1c9bd5131d79970b1d554529a219505e242e77f965ca42f21e0f96bbf05c5d5c41c7c8e70c03b5b48a7b1e555dbbc97921ef12b7332a0e86115b75f0f92d2a73f3d77b68144c1cfbf0c140286bc132a49a7aee04a8f5eb2b16d566da6460306a681d373d36c2c4d740209de66264d9d5e9f114edb5d25dcbca37e2e6529f1972d5072fe9fb6b1951bec518bfd9b28c5e8d62d0d267c888b9f305c801240e2409d1fe4ab13c0c6b9335a5f1b4aeaaa312f393543bd898dc216efeb4db5fb89e6b3a5b598783a26b847b30cda25f914f2902bc73b362c2430f8292fab4eae15e648d54932816056fc31093e45da6d251bd6b33a29a3bbffae94b2427f3a0f04b479cacaea0a873d7c17332a0d3c1ebe65e8ca2dd3d2259404995b2c25d59232971b9bdc20d7f63eb66fe5d39526946ab65dab1e9def0ded24a54c341180537d6ef5958c5696db841b6b6ef7fb028089dae610e65b02658b892ea98ab50f0065e1f22843b3ab9faa77ce643e51925c64b078e92457924ee187f85b7dd18ab9658bbbec3026b036cf90349297f645e9e5d0be3a67e383d131c0d3af7a9c466731f04961148a97de2ec6f06d90f6f7b399e93eceb9b300f509e56749dacc80e83402e110305ebfaa1a9ff0d4163906c937b2ad33bcf645d026186b2c0a0ed7abaef81b6059d5a64c27b7551262b1ed9b50e3e11d33e2ecaf95afc9c24d1af0f76c7fd0bc28e9362bf282d306d5ade0ea8bff375cd45f761978ba7f50cc2feb026d0eca3a0d69fecc1aeed91ae89c2a2df5297ab309c97bcb239dca962eed3f621eec8abae3e271ef9bbbf751fc94d724677677b20f5067c07a20f0202fb6acad44851c23078b8eb3159cde5dc76655eee8dba85a25afe77d520be37fa5b1136c26d1a5c0353f04f348a5c2ad81f730cc2b823521fe745d3b6681e00994e7daff2d636392ca597d641df7c20aa68fb690de20c770f85a26689a1219a9dfee859c66bb86e60a64a35928b10e8dcdbe431e6c4abda2634791007fa6ac0de8d7b54bd05ee6baaf63d238c350e7f63f3197f2af70722a5e540b4b2bc545d49a86d3381f8b8985ff53efb5ab8fd077383a5ac9b1606d17a39d2542e5810ba98e5f09486af2cfc0c3d18ae208ee0a9915ed3edfc26b0a06e0f6ea322dead57b7bb4f422bfaee1f5ae172115006a51468d30a8026d69b0e588bef459c989c753d0997f66cb56acff0c9a773ac90eb5bf658c479e6e826b779d655e00898787b6d63274c79a064c2aa1087866e551fcf29aa79fa0173781bb7c2631ec5a776d0211864e5c38d672a6bef66b3e078b59331b4a80f087b4b5b8bf7f6c5b9212e97f9a57be3ba111ebed29b4fb074fa1ee68e724b2e57d06b959bb53ed6cd374671f41f3d36b5dd0f554be2d16a5641f8eeb87b39fa6d7d60c33cccba664465c7051e970f8c485d06995939a9f3ab523b80042d7f9032cedc0af72f0af95327e0c2c38d1fb3911efbb38c86c37b1843a757433fe00030476741b697091e603f487f815381aa4765b41d9e948d3bbbde07630e77074458c82c674e58f2e9fb3cc12e749e04b0b01372ca578f54445b91970dc409fa77b15bd3087bd52e4782bc4c751b617c4b966c9569df6cbef999ae5a748d01ded8cc7700e99ee3887c53c2b8a36c46e7af780d7a18b1e22ce8b45fbd135ba8fb7765e11406c4e344924e905d08fabf7f40d0d6e218f9069172718c6a3e92e8622fa040b9afc14e7743985ad88c74a11589fe278401ef131a17f76a7df1aa43c1f506f50ec1ed12097630f0826cc679130bd219e4a84c060f20ce3381fea266a10d577d5d9eb5c4436cf679c2c82063820d8e86951003fe5a5692a6544eea870f0c754926426eab44c1d7ad60112190a4340ceb2f918592130ae36d4387ae5f058c6adfcca49b9d47f04beb8d1541149e65e7b5619635343d54921c879788c4fe49d34389dca05fe82a2442cce6c027b82c1077cc7fe508c27215d5b029fd19a66183b74bbeffec26e1bacd792a6d188a1b7bd9fc516fb4014078f63386ce274986d193585f595a6c5c08b3ac22b93df3d6c91e5f90432230ee47cfa69c420f8750701db169276ea43bb3bdd5e1774883de455a9093995150086a8bbdeb08a4bd913c48dc256eb3ee0297e3b119b29fe1e8f6dfbc882400953005e3d9179c3598b62cd6f5f423e9c552d7955dd991c2b02dfc06964c2c4bf78072a149bbe299168c8a572591d6894c2e96da3aeb757af706723a03c27758cc74a9b59577f7f55de9de54d06ab80adc98e680898567347d21cbae2ff83587ec9cccb4d82c4a445f7b9782e887dc28760c8592b275b595a117308f22ed56af0b9e01142b82875e76699a553573abc23c448d5723f8b0848204cb84b62ef9dc656fd396debaa9fa17b1ffec5986ffeb35a09862063db351e58859a9740970ae01a4a328457ef76d2a8d0c0e48caa22727aff2b972dc38000871bb523b40c8868ad7884665f30c894264f2a25f3df746869cf646cbb97bec08fc6a674f800afce5e0ed169fdb53736979caa69d9c1fab63449ee59a64501cd1d073aa18bd248aded80c89aa8b5649cd01c7d12b968e80c9e106dfc263add9e2724200a59b5158cbd20832f4c18829b8c13c9910f4d35c41e09f810614799a533e7fb38fc097386b115efa07aa419a6f6f145eb036291aed195ea4d7590bed9bce7d517071c7adfabbb93e8a0091f79b84de97bc7b618a06f9752278a486fa4e80a47a33a02767542eb3fc7b64ae397a2b621d9120a38955c3c9836fb0597ab522ba24e96c26f8d1b4c903d0610c1046c5ff77e47d92cbd8a21c41b666c2c6d2ea510cf9fe2d0e2d9d87fa146cf650661f7883261ebc7336aec0186aec82b6ceb68e67637e6b75602587314030c60668f120b5a83b37b4efe8a9fe542b5680229eebea1c1a2ae4c57a5de109bc536b8f0cbc35234b81a76f25f50f5d7239b45ad35817723c86b4e14c18f39683fd8310f2bc9b2ea9461140b30ffb3f27d3ad89389d1c657b8da59a1270d469944aa7f5d7c94e4b4dbca4068cb96ff4eacc21b5d222993c786d18fa5f5b5ede195bdbf2c7953f82c5b7ced3ed69c3c1bcc454c310b9aa260a3c11d76cc6ff06ae3f4757cc0ece0d64920968007724805a56d25f551cac711d18be1e59a1d4801918a46345ea5d09c4544cf204173a89570da3e55003c31a8fe2f2e457c28ad820cbf24152ab10ff23e2665a58ad6d1198ae3fbfa8519dfce768bc4ac7d79f6360b15e5aeae2cc02f1f641e737e6e9b1fdcc9e194def93529bfd8cc98973ac3e9cd8ef0d20f799d36ee5fe60e246714c48b0e94f2a60560d7c88a1c6b30924f33ee3114ccb420e54ad263a3006c7e5c9add98bba1595fe912989fa65c6b114a98e0e571e0cb8e132aca47f229648260f5d5fb789914a4f9cb4c66b9b14381f72b512b1ee9b46427804f2fb4a39009d04d9e74c2e90c06d1a6915145ffafd1ec5a29ac24e8e1e127071f2e10123ccb711d5c057be9f2606fb7b60e20d0d5fed1384d95dd15cdb8d0fc77adf33996095b03dad0cf301986e1dd67abbf1d57a4b7c1f1fe3664e6dffed95d73b7c873eda265cb52d1633d4e98900d61e1c423b2db67afee9718d0da0313114c721faeeee1599e8a618627fdca7e2274bcafec36950b23029e8ce3829934e6aa176b34e5300eeadeab54dbe05dee39e1594f802f918d3dedbc32969e33b5a01d592051a2e5ec43e24b6733abe8c4f31862cbe380fcc396bf3645c5c8e82593fdd3649d0fa3a0775c2408e520ae22f56ed5143c0199944f0ef46200d11ee0b1b590bb318587eea5eaf599850a7ffa992e68a8ea8a1b4a15679662390528c803e6c8a2bf7a66e60b38b436c9a41745c285796e70c0c1aed1c25b7753d4e2d792d077e6b435b1e3812e9f2bc377eaeaff448128891d512577f7c3e9751d205be54f7c7b45ec22746c8bf3501bc2414488cb570b52dae6bd3cb2eb0888a972703202c9104ca6f8e3f36ed84e3c9d9d6f0db5f85113ec1924b18a7a661e795fd6bd5cfc61b90cda70048152c6abc9091c1ec7d93cab0763e31e387799d77da8ad005a53b2f9879592a0bb53904f9f2959e0e112249c42e420a734420d5e0579068814e47e3edfe47391321475a1e496818419faae6cc07553df5334c54614e64fce938697f7c3087980385fbaf4715830aeea12ec77d1767c9df49c4d2f4198de173b0c76b752d535725b901edd3f3e08adb564a481d5ada44bb8f036793d998d2988f8a81bc5f4ba9da67ecee4da7e52f0ae5caa238a9c47646e93851249315bc9b094190d8a1d1d0671ce44c55e3f2a33c4114c352efb0957c40d69411730ee58567b2ca371e6672625e5d870953f1f02103dcd95ea8c61632caac068dcaef4b987454f01589fe130168d13764a788994e2d1e8d21babb5fefcaa771714f337be3b24ac14fb6333eab9b61522a223ab758ea8dd41549344ee98c0e583f3eadb7c3457190912eba20872496da7f4d312e2c9ac48557094ae9312471938188df3897c9df254b77eb0cbff8bd489edbc27a4e39690c18c058c0c5ab210ee211ebd2fcb34824b1d549c5f2aad851b4d5c1ec06cd0077541df226b1e130ea2bbdbbc63fe84eccb028f993669f497b030f1b8f333ba1d54761620487df40b1ab251e0a0e3d6fba9574b75b5e8de48722304541881536c5aadad8337e39249edf90bb8e41695eeb7ac470987820b7b636fd337be9f23f4b82a8a8483257130cd83323909416663bdfb74b4bf0572fbd6b600545c24fdc15f478f978977ba3d95795e772b2f1b6511879fbda9cd7c7e956435f265adce7584a9ecf9f06c3b7e5415c88adc8f270a62249d9a9ed296d8088d23da3ed8a990868b924c1c6a48c89c15bdae2592fbba75e1bf222243a58896d9f67e3e89590a27cae9e28b4c54ae2d9b6bcce1d85a37363dafcbf351bea5bc90341ee38f577af583a67e93f13bab06acf7d5b1c7d31203cf395da2fa37551164d3ae28021dfe0f5a9291bc3d392eac4860debc707d67fff205ab8daf39a3d505c7a84d36b431b21b729bb3a4be1d39ccebfe15c1b1ff5e9f1da1839b2f5fe11b2f7a3725ea71020985bcefd2adb43734f40b78df1bb844e59bb709b5ec2dc114178505b2ac2071f825eec386c6617d6fd4cff86c5595f6c9cb51ac18dd847e58e4aa7837b71ba187edd6b7fd9eab2b66c7a3182df276169e1010c80d9c21b900d623c3e2e106ad9319d505404d1efff32ca27938796df25988f6d117f5ff828e543267f2a3786109e1750050581408d00131b57dac715328fa6a6c2c350028a2ee6c4c6bdbbb76fe2221bcf568968d179ed7bd23f2952746264c2892d25a613bad2ad725461bec71aa0c6d52381624ff8c9a007b2737074b7bf6fdea37a8083d10b1ae583e14393183394d934b51104ca73ee5a4dab7a3b62a8932e3f7525701792d3b07df103c3a6b4edf0a76123cf1fdb5f4817a22a5c1999933a5ee89d0adb2352c881315fec3b9d233160bacc021a192319f17998c2e0cc09ad017306de85cdd25c4fbf7860826a853d4b25c70e7bf4862b2efe34e003ec8c628e28301389ad5c516dcfd3f781d1308b9c3bca7c07860a2e81957ff0947c65b069899705ccc27bde0cf82055ca0cbf4d31746fb814a61cf6f9c3cd5b91fb3d6e5f103f73d8dd27d05dc092417dc8b6ad761f6d8ca88b5a906e54473ffbdeaf4dc340cf2bbfaa5991321b0df2dc93bde6235625e12bd829caf2d1af0517ee2c8d79ad59078cb44234b49cca25c145461ea29ca27bc4b05ff90bb80149ab3396b260fc41f54b5e33855d1813bc23e604010d82e7c6c084fd1ebe4ab0d96d5ed33cf3852b67f793e1eedb97fb5d114bcd25a2fa395777c7798a4d9d02eb116a297139e240bf243b2ae149d1014c1e9e5646db2fc5b307d06ea7a7a135a057dfc7016e640ea5d5eae0194b42b55ffb4849f772c4b2436cea59892c6ed7a290938b287224246ab66dda70bcd579ffe753cc3f4cef3932ea608d885e1e920595fb653bbf76c922fe6e3bbcfd2d8513656782beb80fb870fab7a4b7bb9bd0b5aa6f1d02e6cf7b904f7fa8ab8f1945ab9fe51d46f8b5db4d7049911bbbbb6cba08a8c40b8a56c85671471ccd5e8660c7351fe9e8f34b5f71af79bd9b44111d0986ca1510b7baa0b2b4ec25a255c0f600755374cdf8c9a2d46f55ff31ea08caa062f6c05086eb46558fca7cd0a6833895f7cea4b6810b884de38e1937d7f6d498495ed283a46087afdba10509741b179d39d8bd0022b22b3ebce426ac00a4f378aa13b99028e342a815b03e2a9cc6ddf6757c152317f62cbb9a60e0a29bf59d606e0da8b93a339fabac8f6cf55307506fc778b9b8498b14cdc1a4a74eec643f3cdf7d04e200dfea65707076847d5d763fc38d75861e8595de0fb9db056e3d40649210a88c78f64857ab963feb44766ec941959b96e381636498d4853604e8f3144720cdb248ee3e5da7acafd9aa6f77bcc3c2e1a405a9a3f442bf2e0c1b6803300290fe47f9b287fbf81f532ab7a0e14c3f764cdfc02704a98b036bbdf926933db4b1994340f0e885978e31efe67ce9069bd0a5b01bcbdfde63bdf6f7d5259d43c8aad994259c0ef4434eb39207603ec953476e230d8f677a4a8bfc1c1a95958e346ad8c1490117ddd39d3483231183ae849f4239459ef1b9ec7f32f4137df8a05e0fe37c52e84ef039c5050db44b43049b577605d6d1dac3f5c38bd72862818dbddb068ab073b883bd250e269d20d093493cf5555daa2a63bdf5fe76b1f00a3fb0922f16b2ede7fd640f84a16da5a65307148a34cff2bc7f03e3e271f21de9478b824ee92d0bd3478b68c0239d17d9c7f2d60d9c03c31c204900a0c99775118b0ad9376a8f11338d358ca9c2c9c3f5d60e02d9eb52d0ba1504bc3a6ab51087e0119f698b9dce7cbf46cff4e866669e7e4dcf4373680b119146da1d3b831de4fcbcaac95c4487d71ce9cd9a019e65d9450bdaa75da33cfb7211743a4ecaa9218348f5263a8d7bf5888af3e5c5643011fe862e0f4ab7f17f036db642bfa86a41fcb696f1f7053f5ed0aa844107d0130ba99bc38ed0197b22dfad03594dc43b724bf68f7d1d38d51f1baebdc0786410397743c41d5653ea7267dcd0c77532dc851df028e93a23bdd1dde42e30c4c71ebd52b5eb905d45eb34a22ee977c2f6d2052ac4bbc60e5e9a1a72c7eac4a2994c688714be697b919a9dd54a889a5cf213d8f5a513094b176ecd675605b55912b8e2636c287af7b04b1721e81dcfb635936abd61b2cdfa81eedab023e774ff7a901c443f3a3613b24436470053407a9ff853f7bf1a582d3eb053f8d444193e6d10c5a94b88af49c2f08a10b098cc4ee9322afe5030370e7e4aece6479b9e2d35b22ac2e74fb8b310e44e6bffde04cf5034cb131f791930304c665a9e8e78e562dea33ed76a92a26f555f7c0b9a47de5e6ab0e4b1c98b3a02b677a4b3d8e710f0d4bab77e6c5f69fefda98f8dd528115665c9a2f1065e07efca8fc8b63a0f75b6a85291f6a72c6bb3dcd86b583d21ab4345cbf99fce091b51a29b27e648e4891350b298d55bc1702a215f254238e088c6a403c4e23f841c9bb89c4c0da1d11b6cc86b05c555319a9f7a07aa8effb720cfbb299af3c4f79d380d30b961ee9caaaf052bebcdf313d68710e02747bae9e75778588466da8d6933d66a06f03447c8d32afa8ae634800b980c8c35797491d0fe97100f66179e20df30cf3688555ece9a845598c5946a35faacfc2c711c1b1b2b7ddc55e7f1b6d5c8c14f3329ad628c830b645da09c64da9aee05123c08e544e926e586d6a0fdb1db640fe55cffb533493ad7a6db0a7fabcb600fd2e8ccefe8f0a74fd36bcd79a941ce5761b525b9131aa9de92cec02dbbf6b287a6fffe2dd706777ca548cca02869d2fd4a1878c3e8b02c0d0726d622720d061d4c644abbd7b4007dedef4483974e90c414d1d1c3e4acb4738dffa99dbc0d62e38766e997102bba04b148f2ee027cae26e5d525cd60001e910aca4672258ae0040bbe3553e6068852979dad135142c2d8edf5f13ee158307a57869f37340dcdaab5a7aeea7045ae527b9c1d1553f964cd15d419a1ae347f1e3dd584253079213eba2aa831acab377ecee5b9b375f1fc0b0e5f5a654aa328da6c9011d343c290a9426902bca6e0383d82d383af5560d325ea3004629a54ec995463834cffc3b5126907eb6716102191fb2dc8d35598183fd2ed552c531fe159a8ee3632406cc4655ca571c84322932b386c221db04ebb00e08e7c4a73343eee65eedb4f00a761ab471c18d2a2ac64168c5fbb9c00906a39768481b4c36b67251b0c984e1f496b4484d19d6077a1bf6aa30ff43b61b86cbeea8bc1f19aa430c921a7210df401f16471fcd65bcc852cd8264d1913a75c9fd1b423f9109013183b7cfdc2041108617177ce18a7f74dab3b09cde2ef3d1921e39c4fb8e5843d713480ce6151dd0dc99394aa1d76e48375b8507d9de183ee63e1dcafd896b0d0018d5a576ac583a1d7bb2303a448fa82c75b050f478f1e1b141c094770ca286287b0dd1d0c72b2821aaa041ed934f25ad320304418aca37b77d62f612744d576216d179c3e42ccfae1eae1d3ae48e08e8fb2feeb8071a449c33d2ba428ada39d81eb6fee143d0d5949d97df2441dd3d32b66f3abeb06070c70909eed841f262bc7e30523c1391ed05daeb3f90d57ad0fdfd1d9bda68f41a50ff781643dca96311f2573cf17844dc285d1b9ab817fa507b9b343b2450cd49fbdfa8a9f795857e624787b45911f43f3291c5ad980a3ec84613054f3e4599d7f57075770b78fc42444c582463cf073f26c096e5d24bbe0c490a0104e88b501affa0a2aa455e8b9a7b3f9fcec36a9483fbfee62585f13937e65aed71b437c57fb6b02018c0f4320031718eb420cc83b42fd813153fae339ac68873cde6de2e37b5ca133dcd75a88e73de0eda4ef265dfaf03406c3e92330c5bc15bab8970bdb6d98dcbb2494669da9c0679f2efd29068da75549ac74850f1b11f564046249be7b0b5d2970582c450ef47754813716e71701d548b83c875f1989d35253653f1f00fd1b5955648ad6190b8f2532b1a5aabab2a427ef4fa86f87d06b3eb59d6f048ff1a7d8784adabc7d4ca54b0aefb5f04785d2a4e9f249b8f005b6720327f8e099ce722824d6c79ac8d6a464a36072a235942146d38fcb0e8b0c5dfca31c2ec4370b166fa27d8b04ef0fc8adfccd6bb0931bdfb49727b9211b25f01928bd95b7f1da9f6121fbbf1e5c95694ce0cfa76eff468bd0c930139e5d7a9811fa79a6ab92e9a1cdf8ba5efd855f00db6b07beefc3b000f491171778d13a6791f9d9a11e86a7b4e93e40da4fa50b6c774620d0b741b5391bf6d6f56f1a2dd5a07767e74a9b90c0d3f6194c5f380f2b12387fe7a89cb815c957da9bd578dabca918f59dadd278cd4f0ab28824c6698af11bf40fdb40917246d0f0036173779452b092caf27eb167617d4fde319190a0fd7c26cf93ec02885acb215eb52aa933278f18bafb0344a2b3027f95dc3f70cd598fba80531a16162fbfbdceae93f8bb94f4bf9feed5599a962b9342118a076bf9815bebeade6af8486f8b3681e103f2519a07a1e72bace5d8a891d5ba5237e43a8c0bff4e0fb5777d16f495d875be95bb2ac7fa739eaf0c916453723edae54b21d7c203c937e362e1356814effbc5bd133fe0356d84f5bce72702b052d9201d36f34eba19909d2f6faaf18e9e79078c455aff1eb95d75d785e72b2b554197ceb38c192ec6eda97000ba8cdb1e2b33dc3be56b50f0b3de2cc19bf72000f9aa3d559ff814fc1c152a663ba463b9259201a559cdc3fcd3781568b81713f7ce3cfb7400e45fa3a1c52e8885e9e70ecf5757163a017bd1227b822092a4d920a6fe7f5ac04274ca36366ce587d85da8d4d0b4a8ae9bf1b4d164112dc473a3d9c393346428cb886a9c347149dd8d38b458c53ca25b792b045c0316d97842563d6410943bac9143f565d5cdfd93325a5f234dba0bd508b46aee89977a2c597d4c5713ae183270ba74a6c433dc2b9e6869da8beb2d17a215d62a7341b22480c3c34d50448ebedfca57d04056a6143ebc5676e125556994748ba8d58af2e9530b38ec9f3afd7c59dd14b64e09838b89b12a91b9fc6856cbafd9bc43e500db80bdbac9a18d2f7450df98d1efdb37d302bb791c1957313a49365034e47e7412660f70b1951b3dc7857e0269612fd0e1653ead1503e2d11e01241871ecf688a9cc09960b4fda252e0ed26a4fc7d09f0e4c91486962535aaaaf8a663e5a67a68c88f37485b5e9a38a45ae4c3dfcc1635ccfaddc1e73aa8420115e39906ff681d2c1029e3ee257a46a53e68811ac75fd154dce698b76055caee670fb004c0e43c5e8557d72fb6ef962ee41c66e8dc04035ccd7fab8105c5583e4878a8b61841d5b5593966893a5c438384eda825797770bd7892a2f9c24e4b3e1aca1b5284b9886f3ceb26832452d3d99e2bbf8480136b6d19380befadcf6085afdbc0e02af4f5e69cc6daffb89d0bc5ba48e511666c413494857aa03e94e273f423af5531a71d2d0f24b664fe0b12f7e4e3a23f3329c21e9443c3bb34d049428b331ae42d86d768e788fbcbfb05b02081e5e462a080a5abe301366d1239c0a9fd62222966079a4f07a38456790de13b2835a29fe14b711db2c84b51e5468af168b85055549ebbf88ce1aa4e54e223ea023083c48e48b5e242d296f4bd512fbdb1399fed9444ed912ca01273bf5cf04f8dedabcbcb70ad278687a5896bdf738c7ebe5335190efb6674d42d00e7ac62602f99d48a5fd0bf6eed2784b58ef204e239493b53e1a21e7ebb892929ee8f0bd84ec5386c55a0cd4665095e5ead976c4f5186c469b27224936d29c6e17d18ee341f39b26ce98a657f451c5a6b04b9e76128671e30429c4a71f4292e9d0e066af1e193fe778afce9aa571dd7f5cd6574e4cc9e2c44706ef71d2d28611123e595d9f262bb6f8a2d4c0578d22d5cd192fa6dffa7e5882a2578f9bd181e7fb8e9974a9359240236620adec5a70403dd2843e545c576bbee532900b2cd9487228d4a56026087d86ebdf3879d7fe0908423a16685d7b7d8997da082f7c3b624aff6f68d2d9a85b309d657982051d2e5136148a28cc8f0325d56fb6cfdd5e6e0989d49ee17fe7bc06fe9f954cb37b5d69c52c866ad8dbf42b8d010862cfc8d9489c3cce98fd0f8a95d798ec4f37f5e2a9e9032d7ef9a18f7b5981fb24ece172987ccbaa2542961d22d65ec07166584e0af1e4fff1ddc76decb22c5d689cf32613645d43b46884f2898f4dde26ad17d8ca116489d52231419576236e418b2860c7c157a0a53d85758ddff2412ca3309f8c1a2449288a6fcf51330f03ba05cf43c481e4a48c72695b4d19d13c60b2d55635390816ae2042409307264fbe5d4bd85b942a42a866c86a2be48becd5d4342a2749efbfb0c9664d9b418f1f1c87621dfe1d7bf9e109a3291d01a2235cc728b71b978ee8369b56482da138484fcf5596b9fc633c89fe024952f08a82df50feb7e6a53b14f8564d04730273185d6d4b2495c97f8ddb01a3aad66f97d83d2acaeabb1c2d3083bf420745c5fffe8f3a36c1dad8290c1c9a811c37710c55f727eb5ad75d6109df99c28335458ce4677a83a058e534db7eb6770bc3f76744c56ea3baebdfd6871753b073a5d55bc6c1d22e180ed33fafdc24c19d3b3ead5f35535994c7038d75783c0bb2a9c17fb01b45f820521a65b81f6773b6a7c6f6791f15cfb13e950a69a6dcd638dc6dcdff21279bc4fe7522e76291f347a7b012128f31bfb98998f9b4f916025eeb6f65cb696438d8ed1f6ca552588d53c88e24e8477174e3d566c158174530934213396ec6b78d165c7e53637b316df54dace1b376a756d9d0fe0e8109f055e0494eb0c36678297ee769fdc44487a64c0a6781fb78e827fbf1a971785eac6c1f02b13a2924042ec9cdb13863cb50df9f4d2b8302b441cc0b37a225ca5745ec5a9d759029dce92c5c21f61a986af96a94cf58b85209d8de907357aece79022f31858e7d57240f6051bd505de0a0dc38639ba67bf4cc572abb4f33589b691485e83c06f40b1bd5d142d554ab1b66a1d7832de424f480c63491709158a378b43d9b7acfb038e48f9b3816f5ed2821c8ff9db4fbd7909a7673626281ba75a48da216c05cc688c850190107cc18dd1db541fca01f00f33d4aaa8c6eef17bf7afee39257332fa156c7096be1ec9c1785f6c8912bd80c4d4b26e38a3bb87d8c1c6e85ca0a29a956a458e343da4985234685f1c3b35093dfd3ce9ddf45b1fff83e4dcd5cbbf92ed8dab8a23ced23804fb11c5c9c4153194c58cdd3ce78098b0d5d6226bbbc172d5959266c68077535c6538bb28156e0d567ce5e49925ac642d1d09b435f027793fb08df5d25e40c3328d07b02b451f77f31b67fa6aba59659d87e5ae99afdddda863fd077eb473a279b96a5d067d31077fc3d76033d265bb5466ca358a8eb62e63b8ff94de2e5b1a67f7445c8fa1b899bf58a615145a4c0d37ca8649782a6d47ddb7faa37c49ecfc1a8fe2dc47ef011bd98a581ccf4b90052f023a72d6bf7bbddc17147f2f1361d74ff28f9760eadadb14bcb692fa71dca14f245fe633349919b1d17972a7f64e83ceec05da6ed68d2b85c14cd9fa2f5735dd3644f73391b91aa9e2c36def28cc428440ae25c09aef929994803e8e81f339c7c2baa4bab09dab3e5f2dabeb08e92cd8bf62b80018d955f809d8da2136ce3bd3e171d7a64e70898c4d6d64447f6625a83758b59fcf6d1719be1c9c4d9ebb4c41bd57f071e9b771fbbbeb43ca0bd622918eca0f4d24b164a08fd7d816ac1d91487c56fe173362236607c241c292160b68c6fcc01dac2191d45f7902a131f45dc1d525d98e5ef61d579fcc07844a69558db577db0c818b78c071bf5ef27a158072912bd841f56200a9fb1325dc7d3ae6a11e60aed21d927edabe7c81f0a9950f926ad9fa741333656361a34cc08097528ebca58439480f86507ba6ad447a7e3edb1637427818d9b351979e7c60c38285b6cecafc1d4946f5fa93aa273a407fbb65cbb990c0fca3ae610e1518cb633c8daa8386ed0ba511e5c09ea1bc4cf4b8d002251657621b6db23373248b9c8759944ef82979213066156e2f2336b1a5b62488e14f0bf6973783df65a23093aa5e245352860386581c38c3da6a188bbce56f688990a4ebef40c54a908410ca3e682208c158e27c456932a73edb99587e3ff4c38fbc92b45e0587f2637006205755c11dd8423c94f75c363f3708ee31ff3cf9246b7cd25e35aaaf9a5a320dd909f8c6478b9e837e9d3ed9095cd407b163828a300285d623462480805d5ebffbb0ec984e45d754f35253f61b7e90106ef0bd5813e9105b96660fee6834284ff5d39a009388be98b88d45fad2b9e2f96866614256389dfb950711983f5189cfd89d9c3283f69ce922462cd975ff5790be4ad53f10eb245bc37719dad1abf1241c50cb5963683e8dac29e7b128922aeab88e8aaa27cc33f9832711f0ed07172c39e166946e96542ace6f759dad13f8889c69700c1d53b0b494826cb5e4ececb2572a0291ba59d5ad86aad7723860e6c773ef3aec545a88a8bddce25bef65c2a4749e2500f772cf68b7c898c73e640cbbc9ced3149b41e7110ae40e739fbbf991e1a6bb6ffe1852d9636fdc2cd61e9bd2b3c1a3f46942ae1b7167a61f55595436be8ce1e1301c12c453f793aa6605ea41b8220fb441efdab553afedbf479181a4787b5f516a6b21f6bbc8adc3d419ab679969bca2dffa2a6aca5a9f14b481da72a8870bd3b59acf8e0281e08a771e6732e2d61acbde5d9d0df612bfc01878c4c2cb926252d5ab467e8d024f5f51a2188855006335975339b56b887e87df5cfc3e5f08cd6e4d2aeb11be4a0b844d8fb079688236d3271208259231c1fca5ce8a43a77da4a6549a0f2383a0bf198a2409309088f57396ac5ede76937ae3bbf15397b05bdd44c143f97601cfd5fa2e700a257c0ee6415eb7c994f485619ba82313ca63b09a6567f67f56965348fe039807f8e2caf9f29f336a407eace61c52ab406141dfaafb577587eaf86aba34df6d98be6ac0a7b54124210c437bece52a62d633eb4eaef4125ae1b6a4eba98eabf7d306070d5a1cc5b706fba28950763f0f3f7a36f0cabbbea64c6abce292cb3c6702b62b8ed15302669535f363b07572d4295f9d3502b6cf73ff765126225b60398f477f64c11d6fb93e192761999ea9fd794853720448309019605df6f26ef097d00f0825bec1851d8376cd10ead00f9dfab124a0f3ca6cfaa48e10df715a3040df45c0ff31d54e7705e57cde66d32e3f8c712cb9c46c83a89a6900dc487b068c95e070bcc41465ef49f4716d4a1755cb3ea7b3540551f226d8bd4b85ba1230afb09b86f5d9cb22f3c45d6f4807f64e24e65a5b20be2da15c9f0117b9a30b5b9caab56f2728d54701567fa42cfe1ddc79275935fa703489944a6784e57f4e8b3b468698907c466a0e9d9643884c9a4738456e781b95e52d2994f6018cb8c7b14cb6105ff9e3497895583adf716819d182711e6df7d870592e1bc74ab684b2d474c6ab85615dd89d55dffb3ebe39790576ccd3d79485c0156fdc6086182befa347300ae0d4a2cd81a17d7566eb7edb3c43d3931b820b052a9f74428e46ca5fb702776497b0fe79200516d16a294a44c8448f549373be55c2e8b8e66ba85aac91c7d07f0ef1cdc18d3610e9b89f6ab61a1a16d31e165ed73644910ca888e93682cc60b215e41fc6f946f85285a043f17951f671851fd229bfbcbda48ea64f451b0aee72c8b021c0dcdf4c9a8640b4c229083e12d472630f6a41a1614c8856483702e344b6381e352ff93258efa965d83a1dcbb04aa27f9fbcfed4fb96020cf99b0540ad71b023ec18843289546eb9614a8eb20b1e08479a79e3b2c827e8ed47ef8cb31fb72b0e6b1d8019274ad6c18c0d877dcce30785f964998ccca0e1e9c6a10fba72ce744fb8f4762e39db2ae53d1a25a18c120fa2990e9e7bea823d04ff9d0af0a863e9799d84e4de94c582072dc277870463d7c8a9062d637c0ce3a377271f062957b00458954cf6ce228c6ee6326c5662e2cd4489de382d88d819dd107a4f19961aabf275b1b25d257c9030ffe299eaa932e50d7cf25957ddec3980bd3bd6c57ed4e9e192a0a9f9158e11d8bec75baecb48a5e77c15adb52d01254fca6698af7aaa0ef6df1a402dfcf088a2b1b0b0c297fc718f60442e0e9e818fd0a91eb760270e1167c29f5826089dbd2da31300a4430a91fdc2a59b7fc2afc3ecd723bb2905b4ce0e03bff9f335dc09e45b7dcc4a2fa4cda2728007140facfb1fb9ccf7934d4bda8130a139bac59170bfbe2f27f55ef634d56a6f88586c234e66db3a5cfc857d149120ca9b10c8a57bdc03de4bc4c03a8e8b1f92d8bf555a55413e40618b453ea8e9cb7e6e52d84fe614878746c72311099f8df6ed275f14dd792a919612779d30516040371e7cad7af732bb178bf1706de172ecba15d90fbdee1f07b31905afee5d2e3cae03d459e975379e721a8ba1eb9057dc15a861a9fa7dab33a4da445f39baf96e508af9521a082829746d806dcef1517d8950d8d065e6b7007058695104a3b480e831b86755d36b525c84477c16720f4b84edebd20472c0e31f9ed3735d3d3bea67c55fa327c3a500ba043bc4db62e0f2a606fff87ce88b4c3fb1dfb0c3872f5c81b246cb92baaf5b0abbc0728553c675688d4331c60006cd933d7f879a7db427e05f005ff55d8ebc448c43fab66bedf3bc7779c3042a3bfc28f6ab1bd7587a0cba0d136d78158565df25c07194f8e7051197aaa75ddcac37bd7150858424afd552a51a06acd3a5f0c88344a358bf3043caf0f93ce8a08e86f4689e5a94862cfa4aa97439c9570526005c6d991788304d2f5e313e6a3391c8cfd494f3cf046f710c271fc0a0c2f0a2d14a3569e00877465ba344d30a8cf17d5b2edd9ebaf81fd002960be79e209d5b727dfa0e23e4e82eb17259c16a72c84af2d876a1c47363bedd895658b3b7e710e4f2f91597c5159028b30c4ba7b44008ba3fbee3781d378dfeda1c70089e81648b07fd143104105dc247cda808856b0cd3b4d8ceec20190d8f5ea43ab7f0be55e62e05686f805c81401ce1aca0c7af9af28ba5175f7af3edbbb7dd78257528c3c4925474b647d37d128f4c63cf31c80659895cec5636aa6791ea1bc733e21ae08c23d689f8523d365c9019e0c12943ce120b91295712d57e33d793fc71acaaea339d815945f5681a059edc852fc60042f0094b534d61ca2c431796b04fd1a29f5e67699dbaa54a36f6f456dc304d60553266b5ebcacfcf7fb2692489b6727cc031946ce83c88c512ff1539f6414a87d1e8f0b07aca2439f6958f15728c6a403a37300a30add4cf0e87e1916bf83252f13ad54f74a256233c70e28260f60e3caa3651ec9ce128cb31ef03f8734733581bcda1d78a4d06af2853246712352483cd5e2b8cfcc2ddaeaa5d0faa239e66dc2adc5f2d6830802f6561d964b01a28b9193dad06b512911ead139339dfd42056c67410ceaa1defca4fd3b15bd86d2d2a03252f3c764265d6ec9c83180c4aba8cce74db623dc3ab65c65b9df0b7a82670fb4bbc2edde84f7d6bf21ae52a1bb12e79dcffc1456bb3d514b0059c1fe4bb26c115639b52d5524567056c3bc72704450775e1b0fe7e1720b85ba48fb97bf3e5e683fb5e92498e14f380fb4c425aff48206c7675da7060fe215a92d53c333228d6cab56e35fe1da3244987a77823536db2ff80c51fee03021f7ecc8eac5fbf45fefaae624b3815c96b97a96d8658086657be72652eb5d4bc3260532b17732fd8e6f3f9cd82af9bdfe3da6b45467f059a2be9e8154a2833acc865b220487a3fcecf81056d1586c2391582760f49af69d54c7b18ec797d92869b880897f2820c9cf1de6709eea2a353009728acc5c915d1eea2a39411c71943bb73f75aeb0962d9e08dc7fe78a9ba4ce917aa7c27e783784038af7c7fe1647287ec1b5648e429884a4d8ce3a7f4b3358a9b926bfcf4f49d2f2498e8e9ad1efca2d8a96c96b87ab6ba3937849b77c06011356b70c62490275288cbf2c690a22df9b57c757b403d0461277e7a7dc3feb7bb8e19fa604da7fd2e07d9a76c1d1d3fb51106d8bd2cbb8610a4c8d5e2e3e76ffe1aa0ec2e842021b4df3a5117cd255b2d76f97c2903a592ae0c765632c6e4f81bd3713426c78ef79583ad0401cc883aeca6f48d63169e1a088e9546a2ba00c6974bde13787594a0e87736b7548f30e649064cc57c4eb2a1a12cdbc5b365f5eb518968651b60572bbf31ea42e77c2fa77426908d23d5f6f9d3949ad5059fdd305952298c1d89cde3da24d945b1971288afdbbb761237dcac379f93373995fba7145a6796ff918484b85b5c2eeb658791e2a294877f65d6a145b6244cfbdaa52df406e77bb93a883307409a7a41120892e6e350027584ab334ca0f329fe70a5fdc1467d5c425f910bc2dcd4b1f5cebc39f76f1745944076b46fdc8893d8cbc8f19748f13d21d61f96b033aea3a23e2c76dc72c0f941cc578a617bf91d2d7edb456fcb7f5024052b232d8a6fc0e0bf9f974f60607a2c633ac9d1bf73366e44340f5ff81e7913a03e3c9d3ab786308bcc213f2445e964f790437ffa40385bd994e2ae116ec8808fe60250ac3d6e3b5aab810ba6ae356f0e8eea2312a11e0c7959e9d565a265d38f386719bc7c8d0a39e7870583c5b64f60d6cbd724bb099a29ecddf3b29e41bb3bed6b87d161a765860fde06b82698dc026434bdf19de4c3987df15ff1522e719d42e76de61d1243469bf394fe8159c306fafe11a61de56253cdb607818a0950ecdce52fee4cb4f55617f977b0d9d70aa726138683ec8979ca7c0347c71dbf27dddc2ef1272f5252c224dfb9b8ec972039a8981f1300e013fec719245467f1c11eaf93676ee983ecec6f849dea28b255b076fc013a3e171901e8f2d6e6f2194262bea8b9df7362a70648ee15483f4e48c16ce61edb1f9aa8858001a92e4bc5d2cd24abb164d33620757ae8af15415b8114622a0993c49be4dfbfb1c86e63fc6d1d324ddc5e5bd191f6476164ee8aa16d29149ac38c16a712b6e7f9b407400c7be587b143664bade9a0b69691951955ae88d80584bd7eb905226a64bf0fc65752ee644a75b48ecada17107213988d88889cbd0bfb382673f1515f96489ef4dcfb63d5db2ed6bcf519103a2e45e4daf5c42c9f1c4afffdbfa25fe27700fdf07b1908d3a776c27b66cdb43b7b5c46abcd40bd407857cd1f60f0aa096ca7093ab302f6aa4f7fc38bb34e8fb7c6c0467df1a2c9a383c110ae97be14c0a7984facd436b9f178e5967ca6b8c4b86b4f636d9bd7f5a606de79503de10c4d570d5461d4b85419feb15786fe6d8aef2cde1fce5df73ea97dae057efce191814b3f27af1373611bed57b9cd1012e9a77e14f77a27e7120364c53eb7db45d1aad822329cb1345fec970a1e54f3b73fb8dee9444a0e497320d1596d4b8c9f6c0d67b983a4e9d7348e278c6a559d5961195a9a2424104a184749d463dcc6d1a9b4f00939d31a71483490e4d741252af6f7bb3548e1ddb3d54f33e943f76dc0fb66512d2552690e73855ab02f7b6a2118673214639104bf163033a50a9fdfc6f455e49886f59da1132ff1618ca2ee33de933622a292a5cbaa33abf7d06e18bd41bc2eb1b122fa71f2b246853a3ae34f16b12cf1b46ca789a6e673a83524d41bd25bd270d7e5abdc6447f039f3ae4851ff28901e97565f83eb11c59e11ebdc4eef614e280a84330a2339e85643f3e9264f27e4965f2a0945939c950fc6af9bf4764d5b30b9ac8e986afd269ae9e6c28a30f761a9a1e5c4925951c73e2862464bab54611032733bd1d30825cddcbcefd0c97f83c5a3d76122baf10694abd6800ad5de280b484bd4e9b1766061ad72269cb7c5d8c831c1800ea0c617bfb1fd7333e1178ca89796ad091e0d69afd524f400ee12656d74de94b5aabc100d07f010528009ff3079c62b98ebca49c4bfa4cff07ed54a499022a6b53abc16e4fbceb7883817f34ac8deb2e6507516e1791a5d04091fdea151f156f171df348c8cb4fdd91fc3aee33969cfae3b753c23b1dc874fdcdbb16f7ab62bd0677df99740b3f72be6832b8c53145b84cdc847fa1636fa657b545509c88e300281ceb5b0184a3fa7c511b2b8467803c51467de3b4f12e9f70e9213e087e18d62a7662f26264800b8c810a07a4da659add0ee39a2b29ed4e171b6884cd6a3a466c759762b486d5986ff57bcdc7d166d2635db005bc3059f3ee920edfef739614e07aca0a86de0d242387347fde08701edaae8a44dd76ad3ff822529e60392f80995c0bee79f80c57748b20a8e27c57d5a3387e1dcf38d013053910f8faf31d923e0c72ca07f5ff6d8d1dfd09da3333221d885d7bc9b4aa7e672e47c52d0a7db2f7fbdc4448ebaaf63cb99d1cc98de3effba55314d35863a95af50b3b5760f300933970059244f9fd7df2ee5367bb1be554a3119883d3a4f0dc4943ca0edf20ba1fbf4ff00edbe396a2bc52ab9825811b855293ec22717b70f8e5bdfe926b7c230ba7b0175fb719505204f918f0f0dd2cd1d16da7fe5bf2fafdeba634e85e088430b0f77b69271999e076d7594466069e220a9736a565264f5d1c9671fdf1f7d23a517935e8f10f018ff212e757237bc3405d2a26e00435e4e15da9fa06a7dab609c8c21fb8b4971342c9ab6d1bd74a427368662614541673a45b9ffc769cfdd72110409301f4527e553eb9c404a924c4a1fae2715c8a501901d9569cec4d101b80380d499673a132d70107d2a086e3db3154e18b5008f190c9f8cffa3cc6a911bb0ddcb7f049d809cc261faae54867be7d8e6e64427dc6a70e82fe4b49470f5acf62c2f07cda6657fe9c2b57a09f03bb604fc903c88f291b96a59ddd01915d7260b1e26fd652ce29879a39cfaa87afde06e65754d7ec1717b65e0fd8dfacab800486c9462e47239a339544b43ea664a0ccfffa281508767a230abab0bd9e9c8ed3a61c2688fabc3eb2bc6115fc78b15697c5910bb216d9d9d638c858ded461c70503618732ae095d7b2556b98dc944cba9e4be7c07e8691258fd0a9accd953604b2b85dd564ded34c5626658f8a5f9f3ebf259da5a40a3f1817b6e8563e5158943f5d78e3309950df7c30686e0f9aba1d0c6d796b57eddce2257ce003fa9e28d852dc7a9a93f85c69458441c776a3f0fb95022e6577cd78143db40139b827614cd8bb240ae503e1797c5bcbec2a1d1ca6bb46bf15b0a3a51cc81f8283212bebbb5076965b6c33408ceab50581f47315c9a4c434d2d0f39f130e842b8c549478787a05960afd8bd54bbba65e325dd21b5c99e1da60c304008ddd11bed871814eb28a9d23fee5ef376087220a62f44b8f67a01943ebc585ec103f77bdeadf64a260550bcb071f4531d762752166bc6cebcefe11b0ad3d7827460b9e82b01b3eae374b7cf4fb9752890deeb151801897d37e1d5fb0e0bb4173380340231827cfdb513127ef9c38a23d8fe77f60c0318390ecf90af0c4306d505e7d839652ce4526e33a399342345df02a235dcd95acb234debcadb0ff0b6e533749daa4dd6af718994542b35c4cdc555da6349a3c7d589e68079f33720799d0f82fc3b7bafbded5b824b3b9c5d4c4d6730958cbeb9ae9cd2dde2132d670d2cc3f48836304ed61a9065c40792cd8bcacbd6c8923ff0dd1531e1ecd3a77f879ea23c7aa624ee81675e4bccfcc2267d38492afa6e0a816b62b0a57a9385e5cc0628a33fbd7f78e23e6d37c52e5f5e6dc0271fda88c0eaeb605268e41a9fe772f71f5015e77ada13caacc371c96937a975e30140ce74325b94845dda6532651de29a4b41ec057aba6e6edf870509c09936a5c65504b34b73a258a8fc391105c23c937fc07776bcc13bc4857cb78b556927f0156d689a3c9ae19ffc73a2ace8e2c9e416a42f09b740b24ca9c98325329b6274513e5e4ce748e93ee1535dd43cba5647fcfec0be0ae3217f48c812af387e8763f915ed129745f9d12711a95eeba505e1be3269423037681f1aa129d3bc3f2f8e05029fbc98f2929f458ae4053c235b6db5e08e8aeb1137e1f9a4de4978b094cc92e0f931e1165aa1b837701d2c7676191087b285ac4773281c5b8452059800b67408f376555d05c5b82fb6fb9116ad44617f9f3bb4c5d8ecadd7701445113363902c8f36ce2b8a778c70a24f8012bc9b13a1405a882f22479d514f7656dfb03ab44bdbab52f3c176fc3ebe6da6d166deed80f57abe0a68a504f17148996967d034379a1a304c177de7cc1ab8a26c1f2bddd493467c4d6462f018a13de285d931b80138af5de7296256496af915e20d26a98b257d864fcfa3c71b901e8bdb9286673205caaba0a408640771caf0e1ab7757c6dac422f3fcdbf2d753187b8010fa93a47339d80b1c1d066d0bac8b10c1f8bf15e81c76846d6d4829a87578eeb1927c8d61c676abe993f88bf93931613e403b84662fac9f911886150abf83a7ff76445614da3a7585778a4934766a6854d7e14ae229666b4ce442b29994dd2e5240f418c1d3d7cdfc88f4f702e6af7740e156eec280fd6e0f7ef00cd361425f7a28260b51dcd93e4191b80a61c7fbbaa2bc2b06f0c429a5873a03061f2eabaef3feee7c33ae1cc540b765149bf32ce231e869e32363005b2e562a2c1681e654d332b32eff1c7813d97e8ef90f695a775057cf75120aa20745c3c879f1e693f809ea0448a12abbc7ef315ed987fa5a9f38e76e4be97f3500b1cd195ae7d94d3f9cc9effda16d59973fcaadf1608804db247623d1b87c947c6bffa604b1a80c4da9a8a4b68bb7dac25ef8ee4e65c30f057c20b113b17ae3c256fb84d2c66d68c9032aba04333e22bc1831cb64f1b3bc887686adade5ebb6205c91c807785b3a886d6fc694c9c9772aa52835f0f5fc09b853c4b8719558527c19391858cee50e8bec84054875b5f9f57942c9522f9b000273057bef996ee05e6a97351bd6ffa2c3b9009f4fbd8fc41cbd7b92a1e4ee80d56825e595f612894e4bccf17b523a1e873fac02d38fd63cdb6bc5a7998b4af1a0d36d8999514d2010d341f1db9a8e755bba5dfbd8f248152f5c0d9d9aba66d59f02ade1c446f90c0a56af481c633d197a890ddd1b12ac4ba20032dd4641fe7c8c74b5d9991f398cc3f6ed8d1295a7628f2ed82f2af4162e45c7c6585b7ebde45098ad1ca3602469e4e656bd07f6d5b3e114e9ad8f67ede9f7e3e5d36fbfbe78244f228155e0a61d85d3339aa5af76ef2e0828e8348e61baf883bf70b1f5ad28b3583dbab387ee3b0ebd977a702f8414f672415d9e047e0716cf1f3662a3baea91cbf40e72ce84a68d3647cd34f04e9040861333ac9e9f9ac5b00008d41514c79da664d8fae1a8af18386a11fb86bdb212bd64198fe63209524919d5ddbe560d582a4003a7034e2ae43d6530b8ec28e07d645b918dc747448a1625547c45ae5542cf4f3fc2923a64bf5bb8c49da291d2f655972d563245d668b7032ea7e09e15e685916f43fdf5e18ae1da43c73807edff6bfd7d8a75b4af05ba7d7796f49c2c06a4eafc9a0bc8af77b4325bb10b651e00b8f7974cc972d0e5456a370f2c46a56181ada7125802ffd01c98daddf86bd57960f51f7dadccb15b530c48e6a24f4f1c697fbac246eb43233fd2e714c85e84407a084da2823d5a64e61313fd393d34589ef0f3eec381cf025f58965728544dae5df9394d6bebc7e68572e429814c87ee6dd284f712a720bab3f9598c897c45e389c6666998899b963c05892fc2e12179cf1ca4bc0456ed97d8bb58bed6b4b70959e04215d3393596d92b33a7aa515238349dd1026f8a6b47789a6958299b183c8d045fefe7ba08e91879a2e3bbbba9f681252107489e8cd37eb6bb970f0cd9aff6102417bfe69554ca45974d2ce7d74dd22c2e3915a255f0c76f38d1125d9909697c87a4624377733cd62677680a12bb931e7937e409c6745f3634ec41dc174c31fe7948c1250cb9bba2586552883a94d3bc419b3c5ee7d1b4da62d0c18cfa39539fbf4e9e46ce454e1fa69c2e5ae901ec3b526ae8df82b37d768c3ce9370e460a6d85491c9843479b1ebff22387b6ab00d45a06b313cc0ecad484868d8d940a6a2b50ae5bc122f2907fa5cd9bba44e27382fb69089e460230321aba299ef9447728f82d91e46328628b3a0280e6f9f2745ada17d765179cdd928346e0588df0f0bb8163e04a2cb1afe894f7dd265e443eb942c40d35a73d88dcd5f49e03da2f2a1307db52fe7e25d91e2eebfe41b10921a0f105787a3d159717daf92678c083dc767890d8da6f8e8ee9665d2e9779b3d4690761a524d60d6052a4bf751740e8a4f8833b0621dfd34573f1d62b9e3fb137df36ecc5184d887471f6d3d3e57badb21e007c7a7ffe63a6d5f806ad2157c9b921bf743d504a2e0b8f36ffb9618c184b518c6bf45302f9b01a9d5b269bd22d7aba10a4ce5a7b7d602025f004f3eee5a46b5f24b6b2920e30679c571e5d23dd2ea16fdd0516d9bcec4a46829ecf9b5899d7ae1c4dcc0b6de27933ba8dc9278c7856cf24a7d5dda838995f3423b131dc6d23c35e6377f6351141437e0e52655623734c2b7d22204270835d550741a4d1e143d7fcaf7b624070eaf0bc3db43af02db17832e481eb1663a60e308c7b8273f034cd210cd152ecd085d8e6f0469e59cf9d30076c92911fad7fa2ff9442726354b43bd5bf1a749a99e98c9db83ff4c4cfc7f5974b03c0069a93097e71ccb20cd947db188e833dc4aa2e5d7e51a6c2b6c88207ca6c99e3061644a02a28d20b6b8e6eb4aa50490511528a6b34cf7070f0f44e2c861f08abbe14e70dbd6c87e4fe88e1fddbfb856f7ae1347dea13bc1db4a729d3a9e9828680bea53c9ac39a1eec400ee2fc320aea0ca4d12991eba833341f55a37f3468464562278330aaabda82ccd07319c9ae982a1303f36b4bc532f23a1f72dc743a40166ce093b6051af2e8e2e53d51c519dd19bfaa671418cfc15613733acb3651548d98c708433e41bfa6f3f223aab0c921d8b6f789669cf24edd762240ca9e2b7ff2bf4d56c613f1511504144fa7c498219955f93356ba15fa0fa78b8c8b11c4d356fa50c8492661d2e6724d7abc72733bf72c6c9f91e6ec760a4ede567217223ab97c825fb2c1ce77ec96528166999b8dcf5ef88a3a678bdf05809bc8a17f7d7e32b34fedab412a245f4b167a20640a68a6ff2874247e27bacfc79470d1623e96e48d0f60d84eb276e9dfc3c1692f1c6efbc0995ee7d43f977858adb28f9fe633ad271522f34f8071eb2da70b62ba986d19f6d478f0983c137f62de979d5edc113ff4a8303b99827516df8937e377497feba3d6ae68de10ffa3a737cbdff74a61ce5aec98345553a455bfe7bffa687661ddc090d35db0bc5f23c88425657efec31560c75c224c48dc3714d843cac670073036f6a72eb97cf1c9049966cb4145ef871ed7f88d9ac133a1c3b74320987ac98ee5343deb24a61b188362395c2e06f64d2eb989b192e0048b278aa8c262139099ea1c448503223f0478463571e569be580271e661729f5e22973655e92b30b95fac710228cd7ed0d2d1b783c63c8ec3652eafbd98d8e43a8ded4a033d3b46a90b2a3dfcd69ab3c676d55c7389399be0c027fbabd46e33609eed835d676793e0fcfe512cd46afbcfbf53e2dd651e55ac053a5c36960ba1c6eb43aee0e84577e3f22fff1836db0aeb95534dcc4193284440dca25ea755489ad186d69b956661efca75c5503d2d73ea118eb179726ae2af5fd9db8e3a974ef1a40382d735a86c5747816dcd4991aacefdf474859eef1978aa056c3270d4074c486616003a12cd031e0ac29033ff7b19d63a2f911123297da3bc4992c3a1129a385224e5b0f637e3421337d18afc61a35a266ab1706a82892440836f15cc9d930666e617487c8cf332716abf33df00fec46986f99d38b8e300ae1f28420f842d969f2d4e742fe315bdf87e892e2923cafed201599da72e5fcd95c4bfe37ec06348185b69ca28c9cd313f0da6b3f1e29a701003da278d66e92a4bf6bc043bdedd2944fec7785b67052aee42faa208b14a1ff4142a0b0bdd5a2882b7aa294957ea872f847042a2d334163c9078c85095a3c50000015a5106f17ad644191894b8aed92fa5664b372046407cae9654567050c88ddb429f5452e22d24a288f3abfa625a88351e765c74c3c867629a6a12695b20826036b3dc158541844e04e72ae43c26cff1b8e4769eda02681bba99a32657ec6ee8ef8b643c0f69d3b05c3a365bdf68f03d3b3fa73270a6cfe1c13dab86397edc968ab573301ec3525b996b898bc6ff97d05287b14089f7d0777b021e9216dc5cbbc82b37b6a3bf4ed5a9a055b8d12b2aefdc16d101a8c817fc5aa66d759267be54f29b9137cc0e38dc5452969dc2ea5937d090827e008cbe192b6d74f383003a2b357250992b24d849c6317ea5960e8e4361e3ab93703645176c98cc42736aaf57842911ddba99bc64de127a935f11800346f1c2c985d6f32dee903fa31204efc614260633a1233cbfc7920b046ae90f8efda6a380c16e85703c199e4b3b4306c40f770ddf95f7c533829879a2bfbdad91e2d43544a0dd064c52c7ab6a9e97ef70a955f5f4375a835b1d7dbc5b1818050e983d73b6a6e2ca9faf526b4dffc9bceaeaf7513104426c907e2210f00e9dbe4cc1ffbe20cdeaf100349d545e98458bc26593b778699f072488c14bd55816b49d83eb9c07b97a00b35ff33bb8c7263c54e62c7ddea61fdd1b305a59cbfe2f387476144e8d268897f120df8a849f5c5b8e39209b69f4b02b35abddb576ef92a48394d87a001bd19cb58a4c57dfa79a6c9c1a82f4e68a2c3e307543194f612d6b2565b7222cccb7039b7d3790c0761e3803e0ffc1bbc48e74fe2325c69f1bea951dd9b112e1879e8fd4d3d889a96b1d8bc97404ff6110b1b9c4bfcc54db9e260b9c7d0e9ad5026c5e73a0c75a5a41d0004f7498a1dc68f38a4629b99973a7c9675a8a58744a5a9b672ea6d3acdc0b277487f28407debf792390edf14e6cc52fb8604fbf1c65129bd3ffae4c7afba6a790aafada774b22cc8e4440fe796b752926abaf32b504f8c55c0ee64ade242fc358a98b7337cc3535052788228a2e9d73f489d36e67df1dbc95823489cf714e05b8086bba3cb3e3bb137312575149617c1e0f7e593ac2a31edb2b749897306df1b1a9a480496e2f494a31d8777f1f00a109b353b82830bd7532391c8f603c4e515bfff9b8a8c5142a4ba81447d0e1ccd5695983c773976339cc24a05edc8deb0e677dfb7e779d6c57bfa6be2713deff526ff522b83e88ee0b87a51689f119b474108747d7852e853d2ef21097ab8793ab070d74625f0f6d53e4caed0ab3eb7276aec779a6bcee778c0a3910ceb84f0b5ff515b7f0578e5c16dcefc8e4bc03b13494d5fd9ac2f0df3b6e15aaddaa7fa378982ef77c30321284fb67c2319bdf47c3de6af49444bf1c7bd87a547a28517917e4a47a1d0ecc77e032285214b8864cb9933554c66825e94bff118443361c76775cd3427c707d435ad70cc75269d29cbe409d9ce3c34fddb424af5d9e25558671914cfa3b592b42fef42f94ee8f1ec1cd586770ab64bc91c5768c35b52f04ad5040befaac5da6353253ec1069e7da06430649e26af9ab5b66801d9aef539f4d4bd6ea043da344d39cc100307e44f59278a53fa8d0de1a36136e7669a5671e6621cc6448a48e953ee03eabb7b2a8bb2bdaa0d852c716111213a86fa41181befe641233f3e10a2e486815bc942db128e56b3db222ad160993e39c0908bad0cffdce25164923933774187753dcf988ad2e6d41bff0fafdda92d51233def17e870f1290fc1ccc873e2298f4862fcc07529e6463278dae00e346c5574c92fcca222c9ed6781cab91960010a541b40deada18e0a0d8c1032cd0c43074c030a6acdd3fec6cf7e6e84c009c316f1783aa88aa25ed53ce131bb47a8cb0d01739a08f331a2bd81bf2d5a79593515ea0de53c7aea5b38acb4ae34e1de464eedf8aced54913a8bc00e6aa1abd97da969f0259b198fee01d652049093c970e67ec5cc0869268fe24cdb0e4ac98f1cd4e800db76f0d4977d05a31fcea6714aa6c1fe6001d8529f583bbd2f9602f3815bf73b726dcaeb07ad966832cc7a9b5885280538832c419074afac75ac4ef0fc41cc5ad4bda9764a217ff1998655cdce6902db25c5c871ef440dc7c8f29d5c2520127d48c26b5336f90f2143a89662aa72dabfdcaf1f280597bbfd599fa304d96b951e0501b3cb777d9650d179d2e1bf6b1e21b6ec95e1be5b5e24711b1c30f6420f2ade26498fead349c934183bdadb715f7795951d68ab804612a101440b4e856ecfebf5480790e5ce637e977641f36b942d7df01ab0c0aed63ff50dc69bb0ea343446301c6338a0f9baa9da02ea1de0cbde8a05a1b4468a221cb8986ea0aeb0c498a0e123b29b432afa9bb9a157bef3602360f55d1189afebbfb08ad78ecc015685f35ec26ed769e4e3f68cbaa8e8c46b524b134359336074034b5620d6ce54d68da48b6e1e19e2979b866d69b12153fd679e03543a864e3790c5ebb80634b0fd349d7ebff1e7473a6b10a37a73a089430799625a1475f9272e8b88d1690b9369e18b20e0065d4532cdf45e3e5811791619301102cb3ac26e065b731ee9a6ee8e2443b232b8c4023c811e4c0b04366211ce2976de4b86c00d73f4960230def625d32b13f44908635a03f5cedd9b738f00167e30b351053fd2f8bab4bb34a9c32f269f46f3b48995d43ceebb8cb6cb31f9445e7ff1073fdbcb82907ab94fab58f68a0a37cb11ca9a1f63491fa4df4ff0c9c7d0989668e908945854feedc256a2d4ad45eaf690d213577e865a457211508632bd3a309724e16f89906b13a3fb83f15443e46d4ca6a66481e47edd1a2ce9b4bb0dddac01d433e92b7c6440b14bc4b0c45c5131c82ee464f76665b951b4c3252affebc5f73ae701fb17e49e836bec2554508ece615ba97110c9dd99930d5463867556cd2bdcbcab4c218deed379283eb28ec4e9a2eabbd5e45052add16951be54a87737ccb5f71f8e62def6c68bd2fe18efd2e6999d9e63edeef00ccd8e2c117e6b7ffca2e460fa837bcabff20b63dec6736a650ddc845e266700df4c07fbdd7e29a6268fc564c26f18c177bf6e000d76dff17ce74a843e0387d3fbfc769af2b1cc05b45491d209900872150976008a1f0e1edecf89f774d82731e8904fff8c05b1b90219bdf8e463411bb8de8cb2a94228332ea60974f2c954d160349cad85abceeb8768a93a03fb15b2c00a0c0467ad2fc30038ea6e10b8ddd2357dcc25d87fa8c859763fe25132f2e8efb32c13ba391d8d360c0d493fd04650347c4f5479953b14f52388e61c528031210fc831116b7fba46fc1d6bcb9a5fc0f89b78849924fba83d2dd684d430e5b8ba1788a14d9a691b064c68d80a26833afd55b417f08aa08e9994e9eef36184ba9505c4b55a1b5f8fae0ea771617846af5d82ba1d0a74473c40f09b81777eb6f64fbb214ea69f5e0e8d97d2379bb49ec315284c437b19512264894baf9ce1c7c64340a9bc053cefe0089563710bfc9892032f2d8714dc94c3d49c186f0b9aa3f023dc1b0c2a1d6f4a03aad6dd1b9b80293c22f49f3d0f40c82cd5bfd6cce65958d47b34b44d658616e20e77f51d1240aabd07db08bf8ff83c6154fe98c79a35d1b0160b2390e9039ee1400ad860f5d148af198511198af0bd880ecd2212a8ca4aae59e991a727c5ac32c402105ab8805dcb1a9869d1e129219323a5781a8aa5345b02c655ba3484ab82123ba2129f28006f5f02ced15dc34784b710ff7f6bdd32a8ebfdb00a412dc58919985d1d53c60e9da25ae12f0b220554a993b965ad15e8c1415936f89ca2b6add3a831de98d489454dfc0a7553e905c03d3871ca6f6638e0fdc3ac5d107e00beef26882445c47287983986aeb609a6266ad2e74523b7e790536e8b7bcb0d00e3828caf4e68c6b9435cbec336637c016cdf7d8cf4fe0b3aa63f6691c81f1ef63de390efda1aeb62ba9fc634ca2ce81e7a7b9cea08a0b5f3428e51d0d8ccea6dc6874fdaa9ca8447ee31f3ab0bd61f6cff6a3ba7dd4e9da7e381ee1206ed5881a4138c352fea2d0378c26818b831c4e80123c812332f9ee31e40098cc5a769d52ccba5b54616aea1082de104332cf0ad61f5f620cd71eb56178ade65c82c12c3fd9069ada74d408f842fe8b415a453f98799a01e93aebc2435c47008f47e3368fdb866c8e8db4a4553c9e39e00381a40aeeae467dfb08ae533f1ce555c3e3c07b88be6f529ac8358cc3fce35d633ecf6c34abab0e8e450644f6236052be3afc25d6cd05874ac1aabe9c06e74674ef8cba4529feeb2c4641d089e7fe6b32b28ec31afd3f8d3cfd7f91e9bdf8b787712de1a3686159fe46bf5432b7b0b5f3dd0242eeca496132957102eb2f45584428ab535a58b3d86b73e1c40a0fd08c1d5d7604de05c12af448455da5992bc495296dc52acd7b2adf5d9f9dabbb9bef8ff8cd0a04ebcbdc7a43fa85949e2bf38264ee048cae3e2c2d3dea8901ed152a8d1b63336bb628cb7918b70ca41bebc47498ff56b51dc741b868ac394c2fafe46fb032dd0ef324512d00799ef6d19b021a40a998a9183bcbce04b7e0636cb89a9ec486ea567e146afeca102525c0b60b93e1b86bee458ae000a334d989e2d5ff2bf82f350a110f4ba147fd3ef491bad8462d47ee0745f8771d677ad4dceacc9d52c1ee9d712da456f71f019081f775091c23608d11ac30420ce3d7ee10659f38ab3cd2fbc0b0ffbfa63d451e04b70229ccf28b025b0e639e54e9890af9c806081a49218fa310769199491d1d16e2f0f4950116e088f2011b6230c76c753cfe421857d5facc38c8fed8cf3ffc53cc24bfdc8d05ec303704eb7034a20b82063c21ba9c2225e9680ab15baa91de719d2eb9f92f927d825f1231cb80cdac160626fe6205b2551c60d59cfe0be7a94ae773e150da07174ffd2fc5b40558a981d669ae3d74e5451d319f895d8fcadbb89b6a86887ff88eeaca3538d5a2b7337d9c1e6d299964433376bf9398bf9a587a19b8fccfd7dd39ded375d07d5d0ed966d81fbde3ee2aca36655b75d52b3d55b69ca89d045b980062bba77a03119bfffbb9572537d7bbfcc2cf1839efe66f73f79a1276037d4dad7a4142efb877ff5cbf70d3737bf10f0f566961c5bbb995a009f36bfb3540694eef283849821aee3855abfd93d8b08617a07619a35771020b58e6a4e58f3eef044f70d016fafe807447382ca3507c88245300706aceea3d51911f554ec225761ace6f43a246e952dd44e00e9c2eb618eab9f86f8448d02894bf78c46d8e5ac1cabc3da6cb4041d94144d0937ea0f4685731af447b0116d450e32217e9b0bda189d50bc70727f9f751d208e22b7d2e4ff5c68c2b65fb18a2438e5186211dbe9f1b1f31069a9cc34f8868042549c3eb546c0a89e2cadf6479efef2cfae2cdcf27d684c3c1735e7e55b98174fa32625506fdba4e7e718744106801910bda1bebada81cd8d7cc238677e075582d0a602d344dbae846810193e5dc95300ffc17ff740685f705cc6aecc6976c405302752a7bb580936e7ec32f0f0adeda090d405ac1e24cf953ec72bd3397cb9f7bc48623e9e63cf72c01b61a3f6079e4ea3c96073e388e23c326d45d215e988c122837c254668d1e51c5d0fc045c1e97da08190638a56e3df9f8030eb5e397065bb1db6e0e9055724f71691fde99c60d356b29beec0c57d9f54403615e5b58d3b3000ed28d94121451e1a1f7a37f00d99186221c91a2c9698581e1a2050203ad8ef69e8f096b3fe6de39b9cc053c1f94e66ef85ae19c9bee94305952425d155bced4450ce6de181ed8d7c92942064f8947ace1dbd9c7d7437ddb660ce8273c2ddabf22574caf590007befdeb56cce95a55b36e0f687abad2a1648f60e99446c4977dcb641e6afc18cc7b7322dda2afbe55675971946a559088e022ea574c17549ef769a5929751caf70417f0ad01d7b9dbe266d68e19326f2677c0808ffb02362538e4955283456582f44e8053b91f800a9ae5b229db5347db8558bab29be3c49424a0500af22e0bf552d033d98c890a4fd632ab8f54f4358edd891c21a8865b561f9898f38a446182fe546131a56968811cb6a661885e69811f697c61f2c75a3b689fb50f0be8951cf1efd46eebff45d6862e3b93ba35ee2de3865e9ee790c493798935abe7f62d2979a4a798816fec33552ec235329da5117040c4b73ed00a1b69346b22377fb944457395db85858547cc8b87fe22b8351398487902bc83d532ed3fe1bc2fc193596809c03f2ad505826c380f3f55570670c8e397f8fc5ea4102e40b617ce74c43fbdf1534c610518a5a2418850a031eda321e4e8ec8793665779ac6533ac422b712676c8013f8ee540e384c47b30c1444f9cb0bee19b64a6bd08d42094a33895910d90ebdc285a99d06398721cc7153808787478248a9dd4a4a80bd995eaeacd2a330196241cefc5214520b6cbef5dd792e4a7d614c872e18b763a1da2c737e3aae480da02d503fa1eb835e56dd345fcb54c14385f711cd8806e744fb230cf4c6a28131be1434c31ff9ca83932af2af23025a77dbde7aee26af612c0d51abb34e5aded49d996fd1d8e752fa8653520402fee0b8ddfe7b79c02ab3a9dec16ce500380a185cbec55bfa0c78076e05694d90560b537e4299118736cca29fcd312220953c9da8557828b16dffa488fc855754aef413cf0c1a160a5cb74bc552f1532682c9be29aae046fe3e0991286fb6ccf853406913a1a998dfb6b1d3e0f3532c25277734b7eb0a2bacdce471484861c021e6988bc475b3fcf100dcf0f90b7c3bdadb565d14afccc995930207153fc179abd4c2839abd2879ede60c2baaaa7677570cb02108f081dbe1792928f99bcc27cb252cd03ef84dbe70f979fd80da5cac750ee33482dcdc268848d468653e4aa384280f819af4960a85f8b17deec510160a1d156dbf80c40f86ae780847739af6cf588e139f689b4c0c247b8573134a25c14f47f7521960dc0e4addd676c8f2bc5eac521495dafaae8a3ef9378b7e58b13412e8061835abd953bdd9e638a1eb8a362ad6e93458fd9aab7cf965dfa662883afb4b8b41f1a9c78ea3aa86d00c14150ea1d1d5c7f81f4a7bd04b507eca647c216ffb4b8c509db8feb0ada3b098d571d4010baf1e6141368e96de8beadf0f6a486f754faf20e8f2aee152b5254b72589af04ab7588d45421ed2f7a38f24cc19c7393d9403dbae5a96a107a885f62afd1fe1815d2fad0a1b8d3400450e9a480a34f7e47b1bc74b31a0e1c7dddf9cf46f7b693f06a311f0f66a369cef663a80628687c6af84e7e907cfffaab9d21307bc28931db4f86faac1d94fb60c5fc67cedcf6b32188a3ab6938a24855977ee93f86fe6602f73c1b4c5df5c5eb9fbac26d7687b1a0696e143a302040e808433f3c883f6f587833b890a7fc9d0ae6adea8cc1e3b968c87df7ccc7c3169c09e56133e2d44a1a8c0f37e20c713d9a8e6b9e299fa4054193363c762ed4af848bfc4021fb5583106ea7f35850250946b85a6314dd1e2e4036b6ef64fb4cfbc468441118d9917a06f4c392d9c5f471d982102ade838a7c9a9bc9778ec3de7fe95b7ad5d0a82320b19f33bb2f838c45cb364f022eb4f00b9693008491deded8566470f104ed688fc1e4205d623961960c739351633b3644943622ed24b82f9439fb2dca94c0e729583c5b952f69ea49cea4dce0981a13331de8f05eb0491d138356ea9d0a369f626f22bcabde57708ffc05250cd367038daf4f7c83db45748f422ed368a46fcf9fd9ce94c9a75f56650549d6909374dc4d032eaf5438c74f24d7b7d46bdb265f1b5311c9e2891c51eb9d17c19bc4ebdb77195840760f3134b93007645c868c8cec14eb362d430e1d170d6767c2b73e10a589c89c0ccbdee2ec5ffd7c0e2941b34231e3e530fb84c2cad485a6d000de3aee5bf63b52399db2d69599c41fc02eff426c68ba8bd9f247b08074acc2c5b95a58c9c09ae676fdeea7ff9fcd6908090ebe84f263d3d8667667d5829dbed9799386f0165ca6ce0d349332c1aabb0d80b091c1a85dae7348bf8da2f7d0bf1b50b4586d1c69e3cc1415ac53812e4eee1a8c1c78470cab0cebb69743791401cbfcadeedf8e2d122dc0b05a7d535afc46fd40f92ba4099653a6814523bad7edb5fef4c40fc5ee5ed8662487a14e25f7709b8aeedfeab74af2883a51a6c972ad9f5efa58ea51f9e158ad2a54680ba797780e4c76fc73319959a0ffc62bfb581e72f030854be3ebe1c736ee9055cef064a89e69ed95898669fcaaf39d55063b69f6efb66e11b747d379a9b212c67e38d5c64a249e3cb0fcd43c717d64b9df1a6a1102f5bc32de47b86dabd1a76279efb0d20716c682399abde3ec875750a0eb583a1f0791bb817f151028967e43b0736cd5cbf28ccb8141431d9d0071d43fb34e0a9cf70158cb2fd474c806420a79486659d6d788708abf1984ec9d02db2e3286975f3cecb60f685f5b25a6cf22910c12f77ae0c5cd1a5987e441c1657cb42c96d75bfd87b6ff3ca94263554f7353cc1f3bb9c20e4f2de38972bde9ec7dfb81006042526a3383f17a0d21e5db9acc785fbc700a0395759ba2398888d50a53472a24d6824ec84865c69808ea92ef8510915c2856c237f8eefae71e60326feefb97addefafb007e618422436f8659da0da2f792ca8b3779aefd783966ec53fda0af7ef8e837b44890cffdb84cfd9fd2a1cbbe4d4c3c5b6b3d680c3ab83345d11b09bf6896600b4589cbf006bc203700f58d857637794f5e234897bea1b57ed5fcd273985563248d30abafd25cdd7a04ed6fa99a7c6cd5315612a6a6888fd8ff7d4596885f43f3b41f9be9afb155f5f3c5cd902968d8d778777cee35a67e192a617f208346a432c3c586895ab8940ddc232e93fd1d882d04f58bc0d04d56c5a53fa09285cfb3b56b41db812ef32a2f0584e5b9837fdaefeb057029e65abb4abbe480077fc31003c1a13a0ec293b4591e1bbf212f005c952923055a24ab5174da0b69438f4d07213fc54035b2bee1ecd22d5d0afbd7c3765a6feaa4177e7bb08a60fe0073c53b06f28812dac4db4b1fe949ad574a7f59dfe8a806b4342a3dd26d0adc92a4dea634cff7a1999cc7e08a739e319d69a6dde99c4797dd3bbc59bc444e6a89e75983e7bb447eded8497747dda2be986be1b8f8b8cb6ea36a738cd86d2d066085e60fdc7416ee7f769b3c4e93baf985bba2c40f1278af26012a5896d08ce6136cbc248a686fafe65ececa14976e9c56be0f085661b80a92ddbe0f0b934ae5a60f412dd312fdd6875931abb011a3814ef095e5c30ae63667f25fb8db7ef6798a8d92f1a4761ef93b9dc3d0641bbd442378602428314535692187774443ad621ef3d752404a1acb9b8e190fa60f2bfd81a680641cf065135b455fdccfabe8fefbb3d271110568fd0f9dee52b16af92058ebbc3e0ebd1b5fbadb97f95ca79e12d232280348dae34d9003a1de2860ed6abcb921ec9287568e723aecb5be646db1d7485795b218524b4af2e4ccbd7d6071a672a1993a755a2cd79a46414d970f5ed48545ae67f57c0819bb4b318dafbc448d3dd49c86276dd04521330f56c7f2b6108d4720bf3a4928b5d1d2b0e15d13b57635b7f664ef039b1af917e773a5f86ed46e539943101846d38991ff233a85f2a8da940ec108dfd3a3decf1acdbd2ff2339e3eef9611854fbcc60d2baa61a05a487f72371a1e1d640cfc0d212880cd160812c1c996a75ca6a1e1e7291bf1de92c06fa3da4b281f3f58d73d3fc387752610f6ee7fd573caddf6ed47f89290af24340175b3dc02fc8de356faa5bb6dd2221ed3335692de4522a55cf79d0d74a39a98db997f9160b9941e1d26226175db8c9f0a7f99dfce885b975dfda1ce58645b32d1868065752ef2ad2edeae0461a01bea913251919948f05fd31ac7ad7beabae4e6788e50a704bb03e44bbea92dd95f8dbc504b060655eda9a0d069afe9ab6c5add5c85f3a349cced0942de4701f13225c5b19ee512a0ac6eada13972e2b80f960e34f746e7eae6fb79f53d87bacc6407848a9fdd4489fc72f72418513a80728418276b95800a80917e6c40a0702df69abd7f8e16de7c874a1622e2206a54a9e8919ff644b2e59435a85674ce6d7b4b751242b91eaba7d5e3d2f1194de5e242d4d3b9730dcea5b688a7d0a3cecddf7570cbe367faee2fa51c15e906895f21a9055bab4571573a68091b795335a814f0d4ba87403658b5c5dcc4daa4fd28c8eb94181dcd60854c0c33a5dc24636addbacb1b48080afd90f04ae82e32d40ddcef7183f8d8076b18d8d46a372d8b16201a0e750b637eed345cbaf623f72074a6fbc185fb9118daa435387a928b155a07aef36774ab182c708a51760d355acf49de4703d1f1654251f972e609fe3366fddb5616aa51782c39acf62cd504a40ad5849e223b51e2b54c3bdefb55155e621c830f3ac386149558234ed7920c6934f05a9a5975ece6a5348de0b16cf97b6a4e54e810bf0d51086d4351e47b0889285fd31cfa76fe375f2d04a906de95ca032fcbeed3428b1f65943af178c8420baf054600a8e1832dbc3426817f717596e5502b141e438ca2ce207ee9571c2df7253c1b92db6aca364ae782fb99246a60ce95099245f51211d7a1e9b9a1dfac4a7e35228feb13334f1757e9360c2ab2505cc53c8ed2fdd45184fcab0d75ccc598cc1198b07405d8b0ad9f055b30ffcd1685aa4068f5d7a6a68178f2801e3725bb753c3f6ae089f7ec49066d72af5c14e7ab487fb2cb70b166192b82a4fdec34100297dc522d2fcd2ae61418530ddcfccbac6c863d1a279f2a41748ae91952715b8aabf3d8aa481e8061ebf7d2aa017c91e6d885bc16eaf43d3f8a54102bb13577cf0955133efc7b36e80b3376a67d564d000b7ae3fad0933eb5db4e41cfe88f747f8da7bcee943ab1e96cc33fc7d6a4b64cc2ac9902a0b3429568ca782bd29c03d67a91c69439d04238390829f9f27520fd1fa2f0f208049e599d99e68049942f1e676dcd7f993222d9274d1fcc9b541bb46c729993d320a485c4cc34b5c7bafc41496d132cd0cede8a37862196d61e4f032884b6dfd3f8597b69dd002fd057894a61545c8d1144f1baa1d9607870269208fcebd10d7a5de44afbdc6dffbce4d3bddd5a872b8396b0a31eaded2cdd394f8728dec515d2620f7ac9d4383ff41d2278b39242ebb350b4081e42e360a3b9aeca4b50b34d6d5d8e4c3996da5a8d86504a6dd2d1d38cd92fda5a06eedb4af4ce201cfe7c338899df73c46816f21e39a76697c4caccc8534cdbbdba930896786cdb7762d29867f38a5c118d93863940b076a247af19a993950ea1b736e2281209ea23f71c7b3df75bb9a84b7bf1b5ea18d92145a2fc6c696d04029a994db1e2bdb440e3be7852d8b19d39d8d4fff27902b81865123e21420a9fac6fbd4733ff4d9d4a503a7d9cdd10d7cd95922853745c61386e46b53176cef40dfedc08b8f8dafce836b7b668fdf31ca05de85f222a8c4f7e0e7e8ba558070150613f7c667f0e39a10d9ecb9e8a1c02933d41c2a3647a6f8ea1dae40f209eeb24178a0abaf3f12b0d50b2ce094f0499f1eae963932c33017e3b35c4ccc2a1f8bb0f4e0bbc5bc0852ccaf79c7660e693d7d67b87f44bb8928715688c2e5c48ab4dd14771d018ed48668c1ec28ad224ecd1a2a99313e3d0695b581b901d3bc63681ba059d07c0bb02dd55631c5e6b1591758574a3143ec1267930abc686193f457da32c50adaa365096436e250d0724010759a4f534325c41515484da0c34dbd68c3e2d65bbce0c4c9c0994e9200097b4b39551a91e980ef62c48825d5f69908c49c576358df7483f8129ea318e38cf5d012431aa2b37dea3ba5fd4890f52e744222444cbc0ae5a5d3d012334ce64ec1e857bacc23d186c3fd76423d1c6504575a3c865bcf287e7a1fa1c6da1ffb46b978a7a694458b5c8463cc986f6cbb7477f2b9f84933ea89d690128a85716859338e2381b8a02a158a1e2dd9fa831fb74683559f9a27bc14e17a9c7b8d7b0c9f29856cd003ebccb4b0698a90e1d2a0fe00e9d281a7dc29dd4edca9b38a1dd75daf37d02eac215e9cb6862f95dd21552d913d3ffaf773fa49a81455fa745ae5606e88ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootsnapd-2.49-1.el8.src.rpmbundled(golang(github.com/coreos/go-systemd/activation))bundled(golang(github.com/godbus/dbus))bundled(golang(github.com/godbus/dbus/introspect))bundled(golang(github.com/gorilla/mux))bundled(golang(github.com/jessevdk/go-flags))bundled(golang(github.com/juju/ratelimit))bundled(golang(github.com/kr/pretty))bundled(golang(github.com/kr/text))bundled(golang(github.com/mvo5/goconfigparser))bundled(golang(github.com/mvo5/libseccomp-golang))bundled(golang(github.com/snapcore/bolt))bundled(golang(github.com/snapcore/go-gettext))bundled(golang(golang.org/x/crypto/openpgp/armor))bundled(golang(golang.org/x/crypto/openpgp/packet))bundled(golang(golang.org/x/crypto/sha3))bundled(golang(golang.org/x/crypto/ssh/terminal))bundled(golang(golang.org/x/xerrors))bundled(golang(golang.org/x/xerrors/internal))bundled(golang(gopkg.in/check.v1))bundled(golang(gopkg.in/macaroon.v1))bundled(golang(gopkg.in/mgo.v2/bson))bundled(golang(gopkg.in/retry.v1))bundled(golang(gopkg.in/tomb.v2))bundled(golang(gopkg.in/yaml.v2))golang(github.com/snapcore/snapd/advisor)golang(github.com/snapcore/snapd/arch)golang(github.com/snapcore/snapd/asserts)golang(github.com/snapcore/snapd/asserts/assertstest)golang(github.com/snapcore/snapd/asserts/signtool)golang(github.com/snapcore/snapd/asserts/snapasserts)golang(github.com/snapcore/snapd/asserts/sysdb)golang(github.com/snapcore/snapd/asserts/systestkeys)golang(github.com/snapcore/snapd/boot)golang(github.com/snapcore/snapd/boot/boottest)golang(github.com/snapcore/snapd/bootloader)golang(github.com/snapcore/snapd/bootloader/androidbootenv)golang(github.com/snapcore/snapd/bootloader/bootloadertest)golang(github.com/snapcore/snapd/bootloader/efi)golang(github.com/snapcore/snapd/bootloader/grubenv)golang(github.com/snapcore/snapd/bootloader/lkenv)golang(github.com/snapcore/snapd/bootloader/ubootenv)golang(github.com/snapcore/snapd/client)golang(github.com/snapcore/snapd/cmd)golang(github.com/snapcore/snapd/cmd/cmdutil)golang(github.com/snapcore/snapd/cmd/snap-bootstrap/bootstrap)golang(github.com/snapcore/snapd/cmd/snap-bootstrap/partition)golang(github.com/snapcore/snapd/cmd/snap-bootstrap/triggerwatch)golang(github.com/snapcore/snapd/cmd/snap-seccomp/syscalls)golang(github.com/snapcore/snapd/cmd/snaplock)golang(github.com/snapcore/snapd/daemon)golang(github.com/snapcore/snapd/dirs)golang(github.com/snapcore/snapd/errtracker)golang(github.com/snapcore/snapd/features)golang(github.com/snapcore/snapd/gadget)golang(github.com/snapcore/snapd/httputil)golang(github.com/snapcore/snapd/i18n)golang(github.com/snapcore/snapd/i18n/xgettext-go)golang(github.com/snapcore/snapd/image)golang(github.com/snapcore/snapd/interfaces)golang(github.com/snapcore/snapd/interfaces/apparmor)golang(github.com/snapcore/snapd/interfaces/backends)golang(github.com/snapcore/snapd/interfaces/builtin)golang(github.com/snapcore/snapd/interfaces/dbus)golang(github.com/snapcore/snapd/interfaces/hotplug)golang(github.com/snapcore/snapd/interfaces/ifacetest)golang(github.com/snapcore/snapd/interfaces/kmod)golang(github.com/snapcore/snapd/interfaces/mount)golang(github.com/snapcore/snapd/interfaces/policy)golang(github.com/snapcore/snapd/interfaces/seccomp)golang(github.com/snapcore/snapd/interfaces/systemd)golang(github.com/snapcore/snapd/interfaces/udev)golang(github.com/snapcore/snapd/interfaces/utils)golang(github.com/snapcore/snapd/jsonutil)golang(github.com/snapcore/snapd/jsonutil/safejson)golang(github.com/snapcore/snapd/logger)golang(github.com/snapcore/snapd/metautil)golang(github.com/snapcore/snapd/netutil)golang(github.com/snapcore/snapd/osutil)golang(github.com/snapcore/snapd/osutil/mount)golang(github.com/snapcore/snapd/osutil/squashfs)golang(github.com/snapcore/snapd/osutil/strace)golang(github.com/snapcore/snapd/osutil/sys)golang(github.com/snapcore/snapd/osutil/udev/crawler)golang(github.com/snapcore/snapd/osutil/udev/netlink)golang(github.com/snapcore/snapd/overlord)golang(github.com/snapcore/snapd/overlord/assertstate)golang(github.com/snapcore/snapd/overlord/assertstate/assertstatetest)golang(github.com/snapcore/snapd/overlord/auth)golang(github.com/snapcore/snapd/overlord/cmdstate)golang(github.com/snapcore/snapd/overlord/configstate)golang(github.com/snapcore/snapd/overlord/configstate/config)golang(github.com/snapcore/snapd/overlord/configstate/configcore)golang(github.com/snapcore/snapd/overlord/configstate/proxyconf)golang(github.com/snapcore/snapd/overlord/configstate/settings)golang(github.com/snapcore/snapd/overlord/devicestate)golang(github.com/snapcore/snapd/overlord/devicestate/devicestatetest)golang(github.com/snapcore/snapd/overlord/devicestate/internal)golang(github.com/snapcore/snapd/overlord/healthstate)golang(github.com/snapcore/snapd/overlord/hookstate)golang(github.com/snapcore/snapd/overlord/hookstate/ctlcmd)golang(github.com/snapcore/snapd/overlord/hookstate/hooktest)golang(github.com/snapcore/snapd/overlord/ifacestate)golang(github.com/snapcore/snapd/overlord/ifacestate/ifacerepo)golang(github.com/snapcore/snapd/overlord/ifacestate/udevmonitor)golang(github.com/snapcore/snapd/overlord/patch)golang(github.com/snapcore/snapd/overlord/servicestate)golang(github.com/snapcore/snapd/overlord/snapshotstate)golang(github.com/snapcore/snapd/overlord/snapshotstate/backend)golang(github.com/snapcore/snapd/overlord/snapstate)golang(github.com/snapcore/snapd/overlord/snapstate/backend)golang(github.com/snapcore/snapd/overlord/snapstate/policy)golang(github.com/snapcore/snapd/overlord/snapstate/snapstatetest)golang(github.com/snapcore/snapd/overlord/standby)golang(github.com/snapcore/snapd/overlord/state)golang(github.com/snapcore/snapd/overlord/storecontext)golang(github.com/snapcore/snapd/polkit)golang(github.com/snapcore/snapd/progress)golang(github.com/snapcore/snapd/progress/progresstest)golang(github.com/snapcore/snapd/randutil)golang(github.com/snapcore/snapd/release)golang(github.com/snapcore/snapd/sandbox)golang(github.com/snapcore/snapd/sandbox/apparmor)golang(github.com/snapcore/snapd/sandbox/cgroup)golang(github.com/snapcore/snapd/sandbox/seccomp)golang(github.com/snapcore/snapd/sandbox/selinux)golang(github.com/snapcore/snapd/sanity)golang(github.com/snapcore/snapd/secboot)golang(github.com/snapcore/snapd/seed)golang(github.com/snapcore/snapd/seed/internal)golang(github.com/snapcore/snapd/seed/seedtest)golang(github.com/snapcore/snapd/seed/seedwriter)golang(github.com/snapcore/snapd/snap)golang(github.com/snapcore/snapd/snap/channel)golang(github.com/snapcore/snapd/snap/naming)golang(github.com/snapcore/snapd/snap/pack)golang(github.com/snapcore/snapd/snap/snapdir)golang(github.com/snapcore/snapd/snap/snapenv)golang(github.com/snapcore/snapd/snap/snaptest)golang(github.com/snapcore/snapd/snap/squashfs)golang(github.com/snapcore/snapd/snapdenv)golang(github.com/snapcore/snapd/spdx)golang(github.com/snapcore/snapd/store)golang(github.com/snapcore/snapd/store/storetest)golang(github.com/snapcore/snapd/strutil)golang(github.com/snapcore/snapd/strutil/chrorder)golang(github.com/snapcore/snapd/strutil/quantity)golang(github.com/snapcore/snapd/strutil/shlex)golang(github.com/snapcore/snapd/sysconfig)golang(github.com/snapcore/snapd/systemd)golang(github.com/snapcore/snapd/testutil)golang(github.com/snapcore/snapd/timeout)golang(github.com/snapcore/snapd/timeutil)golang(github.com/snapcore/snapd/timings)golang(github.com/snapcore/snapd/usersession/agent)golang(github.com/snapcore/snapd/usersession/autostart)golang(github.com/snapcore/snapd/usersession/client)golang(github.com/snapcore/snapd/usersession/userd)golang(github.com/snapcore/snapd/usersession/userd/ui)golang(github.com/snapcore/snapd/wrappers)golang(github.com/snapcore/snapd/x11)golang(github.com/snapcore/snapd/xdgopenproxy)snapd-devel    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)3.0.4-14.6.0-14.0-15.2-14.14.3`%@`#`>`U_I@_إ@_@_^@_E@_~@_s!_R,@_D@_)M_%Y@_!d_ @___X@^(@^3^^^_^^v^p^E:@^C^2@^0"@^@^]B]߶]e@]@]*]µ]{@])]4@]?]nU]i]:@](v@] ]@\\\]@\t@\!\-@\@\C@\|\|\w@\w@\v{\k\j@\Z@\Z@\V\P@@\?\@\@[[H[H[@[v[@[^[ā@[R@[R@[["@[D[z@[[ @[P}@[M@[I[?Y[,[+@[oZ@ZZZZԐ@ZJ@ZZZZZx@ZZ=Zw@Z1@ZZ Z}@ZyZiZ7Z6\@Zr@Zr@Z@ZC@YZ@YZ@Y@Y@Y@YYY@YYYܶ@Y@Y˒YY)@Y4Y@@YYYY3Y3Y3YYYJYJY@YyY&@Y!@Y;@Y#@X@X@Xߖ@XDX@XۡXƉXX`@XWu@W:W@W@W@W@W@W@W@W@W@W@Wm Wc@W_WZMaciek Borzecki - 2.49-1Michael Vogt Maciek Borzecki - 2.48.2-3Fedora Release Engineering - 2.48.2-2Maciek Borzecki - 2.48.2-1Michael Vogt Michael Vogt Michael Vogt Maciek Borzecki - 2.47.1-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Maciek Borzecki - 2.45.3.1-1Fedora Release Engineering - 2.45.2-3Fedora Release Engineering - 2.45.2-2Samuele Pedroni Zygmunt Krynicki Maciek Borzecki - 2.45.2-1Michael Vogt Maciek Borzecki - 2.45.1-1Michael Vogt Maciek Borzecki - 2.45-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Maciek Borzecki - 2.43.3-1Michael Vogt Fedora Release Engineering - 2.42.2-2Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Maciek Borzecki - 2.42.2-1Michael Vogt Maciek Borzecki - 2.42.1-1Michael Vogt Maciek Borzecki - 2.42-2Maciek Borzecki - 2.42-1Michael Vogt Neal Gompa - 2.41-1Michael Vogt Fedora Release Engineering - 2.39.2-2Michael Vogt Michael Vogt Neal Gompa - 2.39.2-1Maciej Borzecki - 2.39.1-2Michael Vogt Neal Gompa - 2.39.1-1Michael Vogt Neal Gompa - 2.39-1Michael Vogt Robert-André Mauchin - 2.38-3Neal Gompa - 2.38-2Neal Gompa - 2.38-1Michael Vogt Neal Gompa - 2.37.4-2Zygmunt Bazyli Krynicki - 2.37.4-1Michael Vogt Zygmunt Bazyli Krynicki - 2.37.3-1Michael Vogt Neal Gompa - 2.37.2-1Michael Vogt Fedora Release Engineering - 2.36.3-2Michael Vogt Michael Vogt Neal Gompa - 2.36.3-1Michael Vogt Michael Vogt Neal Gompa - 2.36-4Neal Gompa - 2.36-3Neal Gompa - 2.36-2Michael Vogt Neal Gompa - 2.36-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Neal Gompa - 2.35-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Fedora Release Engineering - 2.33.1-2Michael Vogt Neal Gompa - 2.33.1-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Neal Gompa - 2.32.4-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Neal Gompa - 2.31.1-2Neal Gompa - 2.31.1-1Michael Vogt Fedora Release Engineering - 2.30-2Michael Vogt Neal Gompa - 2.30-1Michael Vogt Neal Gompa - 2.29.4-3Neal Gompa - 2.29.4-2Neal Gompa - 2.29.4-1Michael Vogt Michael Vogt Michael Vogt Michael Vogt Michael Vogt Neal Gompa - 2.28.5-2Neal Gompa - 2.28.5-1Michael Vogt Neal Gompa - 2.28.4-1Michael Vogt Michael Vogt Michael Vogt Neal Gompa - 2.28.1-1Michael Vogt Michael Vogt Neal Gompa - 2.27.6-1Michael Vogt Neal Gompa - 2.27.5-1Michael Vogt Michael Vogt Michael Vogt Neal Gompa - 2.27.2-2Neal Gompa - 2.27.2-1Michael Vogt Neal Gompa - 2.27.1-1Michael Vogt Neal Gompa - 2.27-1Michael Vogt Fedora Release Engineering - 2.26.3-5Fedora Release Engineering - 2.26.3-4Neal Gompa - 2.26.3-3Neal Gompa - 2.26.3-2Neal Gompa - 2.26.3-1Neal Gompa - 2.25-1Neal Gompa - 2.24-1Neal Gompa - 2.23.6-4Neal Gompa - 2.23.6-3Neal Gompa - 2.23.6-2Neal Gompa - 2.23.6-1Neal Gompa - 2.23.5-1Neal Gompa - 2.23.1-1Fedora Release Engineering - 2.16-2Zygmunt Krynicki - 2.16-1Neal Gompa - 2.14-2Zygmunt Krynicki - 2.14-1Zygmunt Krynicki - 2.13-1Zygmunt Krynicki - 2.12-2Zygmunt Krynicki - 2.12-1Zygmunt Krynicki - 2.11-8Zygmunt Krynicki - 2.11-7Zygmunt Krynicki - 2.11-6Zygmunt Krynicki - 2.11-5Zygmunt Krynicki - 2.11-4Zygmunt Krynicki - 2.11-3Zygmunt Krynicki - 2.11-2Zygmunt Krynicki - 2.11-1Zygmunt Krynicki - 2.0.9-2Zygmunt Krynicki - 2.0.9Zygmunt Krynicki - 2.0.8.1Zygmunt Krynicki - 2.0.8- Release snapd 2.49 to Fedora (RHBZ#1927314) - Include fix for CVE-2020-27352 (RHBZ#1927428, RHBZ#1927432)- New upstream release 2.49 - many: add Delegate=true to generated systemd units for special interfaces - cmd/snap-bootstrap: rename ModeenvFromModel to EphemeralModeenvForModel - cmd/snap-bootstrap/initramfs-mounts: write realistic modeenv for recover+install - osutil: skip TestReadBuildGo inside sbuild - tests: fix umount for snapd snap on fsck-on-boot test - snap/info_test.go: add unit test cases for bug - tests/main/services-after-before: add regression spread test - snap/info.go: ignore unknown daemons in SortSnapServices - cmd/snap-preseed: initialize snap.SanitizePlugsSlots for gadget in seeds - OpenGL interface: Support more Tegra libs - interfaces/browser-support: allow sched_setaffinity with browser- sandbox: true - cmd: make string/error code more robust against errno leaking - o/snapshotstate: handle conflicts between snapshot forget, export and import - cmd/snapd-generator: don't create mount overrides for snap-try snaps inside lxc - tests: update test pkg for fedora and centos - gadget: pass sector size in to mkfs family of functions, use to select block sz - o/snapshotstate: fix returning of snap names when duplicated snapshot is detected - tests/main/snap-network-errors: skip flushing dns cache on centos-7 - interfaces/builtin: Allow DBus property access on org.freedesktop.Notifications - cgroup-support.c: fix link to CGROUP DELEGATION - osutil: update go-udev package - packaging: fix arch-indep build on debian-sid - {,sec}boot: pass "key-name" to the FDE hooks - asserts: sort by revision with Sort interface - gadget: add gadget.ResolveContentPaths() - cmd/snap-repair: save base snap and mode in device info; other misc cleanups - tests: cleanup the run-checks script - asserts: snapasserts method to validate installed snaps against validation sets - tests: normalize test tools - part 1 - snapshotstate: detect duplicated snapshot imports - interfaces/builtin: fix unit test expecting snap-device-helper at /usr/lib/snapd - tests: apply workaround done for snap-advise-command to apt-hooks test - tests: skip main part of snap-advise test if 429 error is encountered - many: clarify gadget role-usage consistency checks for UC16/18 vs UC20 - sandbox/cgroup, tess/main: fix unit tests on v2 system, disable broken tests on sid - interfaces/builtin: more drive by fixes, import ordering, removing dead code - tests: skip interfaces-openvswitch spread test on debian sid - interfaces/apparmor: drive by comment fix - cmd/libsnap-confine-private/cleanup-funcs-test.c: rm g_autofree usage - cmd/libsnap-confine-private: make unit tests execute happily in a container - interfaces, wrappers: misc comment fixes, etc. - asserts/repair.go: add "bases" and "modes" support to the repair assertion - interfaces/opengl: allow RPi MMAL video decoding - snap: skip help output tests for go-flags v1.4.0 - gadget: add validation for "$kernel:ref" style content - packaging/deb, tests/main/lxd-postrm-purge: fix purge inside containers - spdx: update to SPDX license list version: 3.11 2020-11-25 - tests: improve hotplug test setup on classic - tests: update check to verify is the current system is arm - tests: use os-query tool to check debian, trusty and tumbleweed - daemon: start moving implementation to api_snaps.go - tests/main/snap-validate-basic: disable test on Fedora due to go- flags panics - tests: fix library path used for tests.pkgs - tests/main/cohorts: replace yq with a Python snippet - run-checks: update to match new argument syntax of ineffassign - tests: use apiBaseSuite for snapshots tests, fix import endpoint path - many: separate consistency/content validation into gadget.Validate|Content - o/{device,snap}state: enable devmode snaps with dangerous model assertions secboot: add test for when systemd-run does not honor RuntimeMaxSec - secboot: add workaround for snapcore/core-initrd issue #13 - devicestate: log checkEncryption errors via logger.Noticef - o/daemon: validation sets api and basic spread test - gadget: move BuildPartitionList to install and make it unexported - tests: add nested spread end-to-end test for fde-hooks - devicestate: implement checkFDEFeatures() - boot: tweak resealing with fde-setup hooks - tests: add os query commands for subsystems and architectures - o/snapshotstate: don't set auto flag in the snapshot file - tests: use os.query tool instead of comparing the system var - testutil: use the original environment when calling shellcheck - sysconfig/cloudinit.go: add "manual_cache_clean: true" to cloud- init restrict file - gadget,o/devicestate,tests: drop EffectiveFilesystemLabel and instead set the implicit labels when loading the yaml - secboot: add new LockSealedKeys() that uses either TPM/fde-reveal- key - gadget/quantity: introduce Offset, start using it for offset related fields in the gadget - gadget: use "sealed-keys" to determine what method to use for reseal - tests/main/fake-netplan-apply: disable test on xenial for now - daemon: start splitting snaps op tests out of api_test.go - testutil: make DBusTest use a custom bus configuration file - tests: replace pkgdb.sh (library) with tests.pkgs (program) - gadget: prepare gadget kernel refs (0/N) - interfaces/builtin/docker-support: allow /run/containerd/s/... - cmd/snap-preseed: reset run inhibit locks on --reset. - boot: add sealKeyToModeenvUsingFdeSetupHook() - daemon: reorg snap.go and split out sections and icons support from api.go - sandbox/seccomp: use snap-seccomp's stdout for getting version info - daemon: split find support to its own api_*.go files and move some helpers - tests: move snapstate config defaults tests to a separate file. - bootloader/{lk,lkenv}: followups from #9695 - daemon: actually move APIBaseSuite to daemon_test.apiBaseSuite - gadget,o/devicestate: set implicit values for schema and role directly instead of relying on Effective* accessors - daemon: split aliases support to its own api_*.go files - gadget: start separating rule/convention validation from basic soundness - cmd/snap-update-ns: add better unit test for overname sorting - secboot: use `fde-reveal-key` if available to unseal key - tests: fix lp-1899664 test when snapd_x1 is not installed in the system - tests: fix the scenario when the "$SRC".orig file does not exist - cmd/snap-update-ns: fix sorting of overname mount entries wrt other entries - devicestate: add runFDESetupHook() helper - bootloader/lk: add support for UC20 lk bootloader with V2 lkenv structs - daemon: split unsupported buy implementation to its own api_*.go files - tests: download timeout spread test - gadget,o/devicestate: hybrid 18->20 ready volume setups should be valid - o/devicestate: save model with serial in the device save db - bootloader: add check for prepare-image time and more tests validating options - interfaces/builtin/log_observe.go: allow controlling apparmor audit levels - hookstate: refactor around EphemeralRunHook - cmd/snap: implement 'snap validate' command - secboot,devicestate: add scaffoling for "fde-reveal-key" support - boot: observe successful command line update, provide a default - tests: New queries for the os tools - bootloader/lkenv: specify backup file as arg to NewEnv(), use "" as path+"bak" - osutil/disks: add FindMatchingPartitionUUIDWithPartLabel to Disk iface - daemon: split out snapctl support and snap configuration support to their own api_*.go files - snapshotstate: improve handling of multiple errors - tests: sign new nested-18|20* models to allow for generic serials - bootloader: remove installableBootloader interface and methods - seed: cleanup/drop some no longer valid TODOS, clarify some other points - boot: set kernel command line in modeenv during install - many: rename disks.FindMatching... to FindMatching...WithFsLabel and err type - cmd/snap: suppress a case of spurious stdout logging from tests - hookstate: add new HookManager.EphemeralRunHook() - daemon: move some more api tests from daemon to daemon_test - daemon: split apps and logs endpoints to api_apps.go and tests - interfaces/utf: Add Ledger to U2F devices - seed/seedwriter: consider modes when checking for deps availability - o/devicestate,daemon: fix reboot system action to not require a system label - cmd/snap-repair,store: increase initial retry time intervals, stalling TODOs - daemon: split interfacesCmd to api_interfaces.go - github: run nested suite when commit is pushed to release branch - client: reduce again the /v2/system-info timeout - tests: reset fakestore unit status - update-pot: fix typo in plural keyword spec - tests: remove workarounds that add "ubuntu-save" if missing - tests: add unit test for auto-refresh with validate-snap failure - osutil: add helper for getting the kernel command line - tests/main/uc20-create-partitions: verify ubuntu-save encryption keys, tweak not MATCH - boot: add kernel command lines to the modeenv file - spread: bump delta ref, tweak repacking to make smaller delta archives - bootloader/lkenv: add v2 struct + support using it - snapshotstate: add cleanup of abandonded snapshot imports - tests: fix uc20-create-parition-* tests for updated gadget - daemon: split out /v2/interfaces tests to api_interfaces_test.go - hookstate: implement snapctl fde-setup-{request,result} - wrappers, o/devicestate: remove EnableSnapServices - tests: enable nested on 20.10 - daemon: simplify test helpers Get|PostReq into Req - daemon: move general api to api_general*.go - devicestate: make checkEncryption fde-setup hook aware - client/snapctl, store: fix typos - tests/main/lxd/prep-snapd-in-lxd.sh: wait for valid apt files before doing apt ops - cmd/snap-bootstrap: update model cross-check considerations - client,snapctl: add naive support for "stdin" - many: add new "install-mode: disable" option - osutil/disks: allow building on mac os - data/selinux: update the policy to allow operations on non-tmpfs /tmp - boot: add helper for generating candidate kernel lines for recovery system - wrappers: generate D-Bus service activation files - bootloader/many: rm ConfigFile, add Present for indicating presence of bloader - osutil/disks: allow mocking DiskFromDeviceName - daemon: start cleaning up api tests - packaging/arch: sync with AUR packaging - bootloader: indicate when boot config was updated - tests: Fix snap-debug-bootvars test to make it work on arm devices and core18 - tests/nested/manual/core20-save: verify handling of ubuntu-save with different system variants - snap: use the boot-base for kernel hooks - devicestate: support "storage-safety" defaults during install - bootloader/lkenv: mv v1 to separate file, include/lk/snappy_boot_v1.h: little fixups - interfaces/fpga: add fpga interface - store: download timeout - vendor: update secboot repo to avoid including secboot.test binary - osutil: add KernelCommandLineKeyValue - gadget/gadget.go: allow system-recovery-{image,select} as roles in gadget.yaml - devicestate: implement boot.HasFDESetupHook - osutil/disks: add DiskFromName to get a disk using a udev name - usersession/agent: have session agent connect to the D-Bus session bus - o/servicestate: preserve order of services on snap restart - o/servicestate: unlock state before calling wrappers in doServiceControl - spread: disable unattended-upgrades on ubuntu - tests: testing new fedora 33 image - tests: fix fsck on boot on arm devices - tests: skip boot state test on arm devices - tests: updated the systems to run prepare-image-grub test - interfaces/raw_usb: allow read access to /proc/tty/drivers - tests: unmount /boot/efi in fsck-on-boot test - strutil/shlex,osutil/udev/netlink: minimally import go-check - tests: fix basic20 test on arm devices - seed: make a shared seed system label validation helper - tests/many: enable some uc20 tests, delete old unneeded tests or TODOs - boot/makebootable.go: set snapd_recovery_mode=install at image- build time - tests: migrate test from boot.sh helper to boot-state tool - asserts: implement "storage-safety" in uc20 model assertion - bootloader: use ForGadget when installing boot config - spread: UC20 no longer needs 2GB of mem - cmd/snap-confine: implement snap-device-helper internally - bootloader/grub: replace old reference to Managed...Blr... with Trusted...Blr... - cmd/snap-bootstrap: add readme for snap-bootstrap + real state diagram - interfaces: fix greengrass attr namingThe flavor attribute names are now as follows: - tests/lib/nested: poke the API to get the snap revisions - tests: compare options of mount units created by snapd and snapd- generator - o/snapstate,servicestate: use service-control task for service actions - sandbox: track applications unconditionally - interfaces/greengrass-support: add additional "process" flavor for 1.11 update - cmd/snap-bootstrap, secboot, tests: misc cleanups, add spread test- Explicitly disable go module support during build (RHBZ#1923716)- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild- Release 2.48.2 to Fedora (RHBZ#1899700)- New upstream release 2.48.2 - tests: sign new nested-18|20* models to allow for generic serials - secboot: add extra paranoia when waiting for that fde-reveal-key - tests: backport netplan workarounds from #9785 - secboot: add workaround for snapcore/core-initrd issue #13 - devicestate: log checkEncryption errors via logger.Noticef - tests: add nested spread end-to-end test for fde-hooks - devicestate: implement checkFDEFeatures() - boot: tweak resealing with fde-setup hooks - sysconfig/cloudinit.go: add "manual_cache_clean: true" to cloud- init restrict file - secboot: add new LockSealedKeys() that uses either TPM or fde-reveal-key - gadget: use "sealed-keys" to determine what method to use for reseal - boot: add sealKeyToModeenvUsingFdeSetupHook() - secboot: use `fde-reveal-key` if available to unseal key - cmd/snap-update-ns: fix sorting of overname mount entries wrt other entries - o/devicestate: save model with serial in the device save db - devicestate: add runFDESetupHook() helper - secboot,devicestate: add scaffoling for "fde-reveal-key" support - hookstate: add new HookManager.EphemeralRunHook() - update-pot: fix typo in plural keyword spec - store,cmd/snap-repair: increase initial expontential time intervals - o/devicestate,daemon: fix reboot system action to not require a system label - github: run nested suite when commit is pushed to release branch - tests: reset fakestore unit status - tests: fix uc20-create-parition-* tests for updated gadget - hookstate: implement snapctl fde-setup-{request,result} - devicestate: make checkEncryption fde-setup hook aware - client,snapctl: add naive support for "stdin" - devicestate: support "storage-safety" defaults during install - snap: use the boot-base for kernel hooks - vendor: update secboot repo to avoid including secboot.test binary- New upstream release 2.48.1 - gadget: disable ubuntu-boot role validation check- New upstream release 2.48 - osutil: add KernelCommandLineKeyValue - devicestate: implement boot.HasFDESetupHook - boot/makebootable.go: set snapd_recovery_mode=install at image- build time - bootloader: use ForGadget when installing boot config - interfaces/raw_usb: allow read access to /proc/tty/drivers - boot: add scaffolding for "fde-setup" hook support for sealing - tests: fix basic20 test on arm devices - seed: make a shared seed system label validation helper - snap: add new "fde-setup" hooktype - cmd/snap-bootstrap, secboot, tests: misc cleanups, add spread test - secboot,cmd/snap-bootstrap: fix degraded mode cases with better device handling - boot,dirs,c/snap-bootstrap: avoid InstallHost* at the cost of some messiness - tests/nested/manual/refresh-revert-fundamentals: temporarily disable secure boot - snap-bootstrap,secboot: call BlockPCRProtectionPolicies in all boot modes - many: address degraded recover mode feedback, cleanups - tests: Use systemd-run on tests part2 - tests: set the opensuse tumbleweed system as manual in spread.yaml - secboot: call BlockPCRProtectionPolicies even if the TPM is disabled - vendor: update to current secboot - cmd/snap-bootstrap,o/devicestate: use a secret to pair data and save - spread.yaml: increase number of workers on 20.10 - snap: add new `snap recovery --show-keys` option - tests: minor test tweaks suggested in the review of 9607 - snapd-generator: set standard snapfuse options when generating units for containers - tests: enable lxd test on ubuntu-core-20 and 16.04-32 - interfaces: share /tmp/.X11-unix/ from host or provider - tests: enable main lxd test on 20.10 - cmd/s-b/initramfs-mounts: refactor recover mode to implement degraded mode - gadget/install: add progress logging - packaging: keep secboot/encrypt_dummy.go in debian - interfaces/udev: use distro specific path to snap-device-helper - o/devistate: fix chaining of tasks related to regular snaps when preseeding - gadget, overlord/devicestate: validate that system supports encrypted data before install - interfaces/fwupd: enforce the confined fwupd to align Ubuntu Core ESP layout - many: add /v2/system-recovery-keys API and client - secboot, many: return UnlockMethod from Unlock* methods for future usage - many: mv keys to ubuntu-boot, move model file, rename keyring prefix for secboot - tests: using systemd-run instead of manually create a systemd unit - part 1 - secboot, cmd/snap-bootstrap: enable or disable activation with recovery key - secboot: refactor Unlock...IfEncrypted to take keyfile + check disks first - secboot: add LockTPMSealedKeys() to lock access to keys independently - gadget: correct sfdisk arguments - bootloader/assets/grub: adjust fwsetup menuentry label - tests: new boot state tool - spread: use the official image for Ubuntu 20.10, no longer an unstable system - tests/lib/nested: enable snapd logging to console for core18 - osutil/disks: re-implement partition searching for disk w/ non- adjacent parts - tests: using the nested-state tool in nested tests - many: seal a fallback object to the recovery boot chain - gadget, gadget/install: move helpers to install package, refactor unit tests - dirs: add "gentoo" to altDirDistros - update-pot: include file locations in translation template, and extract strings from desktop files - gadget/many: drop usage of gpt attr 59 for indicating creation of partitions - gadget/quantity: tweak test name - snap: fix failing unittest for quantity.FormatDuration() - gadget/quantity: introduce a new package that captures quantities - o/devicestate,a/sysdb: make a backup of the device serial to save - tests: fix rare interaction of tests.session and specific tests - features: enable classic-preserves-xdg-runtime-dir - tests/nested/core20/save: check the bind mount and size bump - o/devicetate,dirs: keep device keys in ubuntu-save/save for UC20 - tests: rename hasHooks to hasInterfaceHooks in the ifacestate tests - o/devicestate: unit test tweaks - boot: store the TPM{PolicyAuthKey,LockoutAuth}File in ubuntu-save - testutil, cmd/snap/version: fix misc little errors - overlord/devicestate: bind mount ubuntu-save under /var/lib/snapd/save on startup - gadget/internal: tune ext4 setting for smaller filesystems - tests/nested/core20/save: a test that verifies ubuntu-save is present and set up - tests: update google sru backend to support groovy - o/ifacestate: handle interface hooks when preseeding - tests: re-enable the apt hooks test - interfaces,snap: use correct type: {os,snapd} for test data - secboot: set metadata and keyslots sizes when formatting LUKS2 volumes - tests: improve uc20-create-partitions-reinstall test - client, daemon, cmd/snap: cleanups from #9489 + more unit tests - cmd/snap-bootstrap: mount ubuntu-save during boot if present - secboot: fix doc comment on helper for unlocking volume with key - tests: add spread test for refreshing from an old snapd and core18 - o/snapstate: generate snapd snap wrappers again after restart on refresh - secboot: version bump, unlock volume with key - tests/snap-advise-command: re-enable test - cmd/snap, snapmgr, tests: cleanups after #9418 - interfaces: deny connected x11 plugs access to ICE - daemon,client: write and read a maintenance.json file for when snapd is shut down - many: update to secboot v1 (part 1) - osutil/disks/mockdisk: panic if same mountpoint shows up again with diff opts - tests/nested/core20/gadget,kernel-reseal: add sanity checks to the reseal tests - many: implement snap routine console-conf-start for synchronizing auto-refreshes - dirs, boot: add ubuntu-save directories and related locations - usersession: fix typo in test name - overlord/snapstate: refactor ihibitRefresh - overlord/snapstate: stop warning about inhibited refreshes - cmd/snap: do not hardcode snapshot age value - overlord,usersession: initial notifications of pending refreshes - tests: add a unit test for UpdateMany where a single snap fails - o/snapstate/catalogrefresh.go: don't refresh catalog in install mode uc20 - tests: also check snapst.Current in undo-unlink tests - tests: new nested tool - o/snapstate: implement undo handler for unlink-snap - tests: clean systems.sh helper and migrate last set of tests - tests: moving the lib section from systems.sh helper to os.query tool - tests/uc20-create-partitions: don't check for grub.cfg - packaging: make sure that static binaries are indeed static, fix openSUSE - many: have install return encryption keys for data and save, improve tests - overlord: add link participant for linkage transitions - tests: lxd smoke test - tests: add tests for fsck; cmd/s-b/initramfs-mounts: fsck ubuntu- seed too - tests: moving main suite from systems.sh to os.query tool - tests: moving the core test suite from systems.sh to os.query tool - cmd/snap-confine: mask host's apparmor config - o/snapstate: move setting updated SnapState after error paths - tests: add value to INSTANCE_KEY/regular - spread, tests: tweaks for openSUSE - cmd/snap-confine: update path to snap-device-helper in AppArmor profile - tests: new os.query tool - overlord/snapshotstate/backend: specify tar format for snapshots - tests/nested/manual/minimal-smoke: use 384MB of RAM for nested UC20 - client,daemon,snap: auto-import does not error on managed devices - interfaces: PTP hardware clock interface - tests: use tests.backup tool - many: verify that unit tests work with nosecboot tag and without secboot package - wrappers: do not error out on read-only /etc/dbus-1/session.d filesystem on core18 - snapshots: import of a snapshot set - tests: more output for sbuild test - o/snapstate: re-order remove tasks for individual snap revisions to remove current last - boot: skip some unit tests when running as root - o/assertstate: introduce ValidationTrackingKey/ValidationSetTracking and basic methods - many: allow ignoring running apps for specific request - tests: allow the searching test to fail under load - overlord/snapstate: inhibit startup while unlinked - seed/seedwriter/writer.go: check DevModeConfinement for dangerous features - tests/main/sudo-env: snap bin is available on Fedora - boot, overlord/devicestate: list trusted and managed assets upfront - gadget, gadget/install: support for ubuntu-save, create one during install if needed - spread-shellcheck: temporary workaround for deadlock, drop unnecessary test - snap: support different exit-code in the snap command - logger: use strutil.KernelCommandLineSplit in debugEnabledOnKernelCmdline - logger: fix snapd.debug=1 parsing - overlord: increase refresh postpone limit to 14 days - spread-shellcheck: use single thread pool executor - gadget/install,secboot: add debug messages - spread-shellcheck: speed up spread-shellcheck even more - spread-shellcheck: process paths from arguments in parallel - tests: tweak error from tests.cleanup - spread: remove workaround for openSUSE go issue - o/configstate: create /etc/sysctl.d when applying early config defaults - tests: new tests.backup tool - tests: add tests.cleanup pop sub-command - tests: migration of the main suite to snaps-state tool part 6 - tests: fix journal-state test - cmd/snap-bootstrap/initramfs-mounts: split off new helper for misc recover files - cmd/snap-bootstrap/initramfs-mounts: also copy /etc/machine-id for same IP addr - packaging/{ubuntu,debian}: add liblzo2-dev as a dependency for building snapd - boot, gadget, bootloader: observer preserves managed bootloader configs - tests/nested/manual: add uc20 grade signed cloud-init test - o/snapstate/autorefresh.go: eliminate race when launching autorefresh - daemon,snapshotstate: do not return "size" from Import() - daemon: limit reading from snapshot import to Content-Length - many: set/expect Content-Length header when importing snapshots - github: switch from ::set-env command to environment file - tests: migration of the main suite to snaps-state tool part 5 - client: cleanup the Client.raw* and Client.do* method families - tests: moving main suite to snaps-state tool part 4 - client,daemon,snap: use constant for snapshot content-type - many: fix typos and repeated "the" - secboot: fix tpm connection leak when it's not enabled - many: scaffolding for snapshots import API - run-checks: run spread-shellcheck too - interfaces: update network-manager interface to allow ObjectManager access from unconfined clients - tests: move core and regression suites to snaps-state tool - tests: moving interfaces tests to snaps-state tool - gadget: preserve files when indicated by content change observer - tests: moving smoke test suite and some tests from main suite to snaps-state tool - o/snapshotstate: pass set id to backend.Open, update tests - asserts/snapasserts: introduce ValidationSets - o/snapshotstate: improve allocation of new set IDs - boot: look at the gadget for run mode bootloader when making the system bootable - cmd/snap: allow snap help vs --all to diverge purposefully - usersession/userd: separate bus name ownership from defining interfaces - o/snapshotstate: set snapshot set id from its filename - o/snapstate: move remove-related tests to snapstate_remove_test.go - desktop/notification: switch ExpireTimeout to time.Duration - desktop/notification: add unit tests - snap: snap help output refresh - tests/nested/manual/preseed: include a system-usernames snap when preseeding - tests: fix sudo-env test - tests: fix nested core20 shellcheck bug - tests/lib: move to new directory when restoring PWD, cleanup unpacked unpacked snap directories - desktop/notification: add bindings for FDO notifications - dbustest: fix stale comment references - many: move ManagedAssetsBootloader into TrustedAssetsBootloader, drop former - snap-repair: add uc20 support - tests: print all the serial logs for the nested test - o/snapstate/check_snap_test.go: mock osutil.Find{U,G}id to avoid bug in test - cmd/snap/auto-import: stop importing system user assertions from initramfs mnts - osutil/group.go: treat all non-nil errs from user.Lookup{Group,} as Unknown* - asserts: deserialize grouping only once in Pool.AddBatch if needed - gadget: allow content observer to have opinions about a change - tests: new snaps-state command - part1 - o/assertstate: support refreshing any number of snap-declarations - boot: use test helpers - tests/core/snap-debug-bootvars: also check snap_mode - many/apparmor: adjust rules for reading profile/ execing new profiles for new kernel - tests/core/snap-debug-bootvars: spread test for snap debug boot- vars - tests/lib/nested.sh: more little tweaks - tests/nested/manual/grade-signed-above-testkeys-boot: enable kvm - cmd/s-b/initramfs-mounts: use ConfigureTargetSystem for install, recover modes - overlord: explicitly set refresh-app-awareness in tests - kernel: remove "edition" from kernel.yaml and add "update" - spread: drop vendor from the packed project archive - boot: fix debug bootloader variables dump on UC20 systems - wrappers, systemd: allow empty root dir and conditionally do not pass --root to systemctl - tests/nested/manual: add test for grades above signed booting with testkeys - tests/nested: misc robustness fixes - o/assertstate,asserts: use bulk refresh to refresh snap- declarations - tests/lib/prepare.sh: stop patching the uc20 initrd since it has been updated now - tests/nested/manual/refresh-revert-fundamentals: re-enable test - update-pot: ignore .go files inside .git when running xgettext-go - tests: disable part of the lxd test completely on 16.04. - o/snapshotstate: tweak comment regarding snapshot filename - o/snapstate: improve snapshot iteration - bootloader: lk cleanups - tests: update to support nested kvm without reboots on UC20 - tests/nested/manual/preseed: disable system-key check for 20.04 image - spread.yaml: add ubuntu-20.10-64 to qemu - store: handle v2 error when fetching assertions - gadget: resolve device mapper devices for fallback device lookup - tests/nested/cloud-init-many: simplify tests and unify helpers/seed inputs - tests: copy /usr/lib/snapd/info to correct directory - check-pr-title.py * : allow "*" in the first part of the title - many: typos and small test tweak - tests/main/lxd: disable cgroup combination for 16.04 that is failing a lot - tests: make nested signing helpers less confusing - tests: misc nested changes - tests/nested/manual/refresh-revert-fundamentals: disable temporarily - tests/lib/cla_check: default to Python 3, tweaks, formatting - tests/lib/cl_check.py: use python3 compatible code- Release 2.47.1 to Fedora (RHBZ#1872528)- New upstream release 2.47.1 - o/configstate: create /etc/sysctl.d when applying early config defaults - cmd/snap-bootstrap/initramfs-mounts: also copy /etc/machine-id for same IP addr - packaging/{ubuntu,debian}: add liblzo2-dev as a dependency for building snapd - cmd/snap: allow snap help vs --all to diverge purposefully - snap: snap help output refresh- New upstream release 2.47 - tests: fix nested core20 shellcheck bug - many/apparmor: adjust rule for reading apparmor profile for new kernel - snap-repair: add uc20 support - cmd/snap/auto-import: stop importing system user assertions from initramfs mnts - cmd/s-b/initramfs-mounts: use ConfigureTargetSystem for install, recover modes - gadget: resolve device mapper devices for fallback device lookup - secboot: add boot manager profile to pcr protection profile - sysconfig,o/devicestate: mv DisableNoCloud to DisableAfterLocalDatasourcesRun - tests: make gadget-reseal more robust - tests: skip nested images pre-configuration by default - tests: fix for basic20 test running on external backend and rpi - tests: improve kernel reseal test - boot: adjust comments, naming, log success around reseal - tests/nested, fakestore: changes necessary to run nested uc20 signed/secured tests - tests: add nested core20 gadget reseal test - boot/modeenv: track unknown keys in Read and put back into modeenv during Write - interfaces/process-control: add sched_setattr to seccomp - boot: with unasserted kernels reseal if there's a hint modeenv changed - client: bump the default request timeout to 120s - configcore: do not error in console-conf.disable for install mode - boot: streamline bootstate20.go reseal and tests changes - boot: reseal when changing kernel - cmd/snap/model: specify grade in the model command output - tests: simplify repack_snapd_snap_with_deb_content_and_run_mode_first_boot_tweaks - test: improve logging in nested tests - nested: add support to telnet to serial port in nested VM - secboot: use the snapcore/secboot native recovery key type - tests/lib/nested.sh: use more focused cloud-init config for uc20 - tests/lib/nested.sh: wait for the tpm socket to exist - spread.yaml, tests/nested: misc changes - tests: add more checks to disk space awareness spread test - tests: disk space awareness spread test - boot: make MockUC20Device use a model and MockDevice more realistic - boot,many: reseal only when meaningful and necessary - tests/nested/core20/kernel-failover: add test for failed refresh of uc20 kernel - tests: fix nested to work with qemu and kvm - boot: reseal when updating boot assets - tests: fix snap-routime-portal-info test - boot: verify boot chain file in seal and reseal tests - tests: use full path to test-snapd-refresh.version binary - boot: store boot chains during install, helper for checking whether reseal is needed - boot: add call to reseal an existing key - boot: consider boot chains with unrevisioned kernels incomparable - overlord: assorted typos and miscellaneous changes - boot: group SealKeyModelParams by model, improve testing - secboot: adjust parameters to buildPCRProtectionProfile - strutil: add SortedListsUniqueMergefrom the doc comment: - snap/naming: upgrade TODO to TODO:UC20 - secboot: add call to reseal an existing key - boot: in seal.go adjust error message and function names - o/snapstate: check available disk space in RemoveMany - boot: build bootchains data for sealing - tests: remove "set -e" from function only shell libs - o/snapstate: disk space check on UpdateMany - o/snapstate: disk space check with snap update - snap: implement new `snap reboot` command - boot: do not reorder boot assets when generating predictable boot chains and other small tweaks - tests: some fixes and improvements for nested execution - tests/core/uc20-recovery: fix check for at least specific calls to mock-shutdown - boot: be consistent using bootloader.Role* consts instead of strings - boot: helper for generating secboot load chains from a given boot asset sequence - boot: tweak boot chains to support a list of kernel command lines, keep track of model and kernel boot file - boot,secboot: switch to expose and use snapcore/secboot load event trees - tests: use `nested_exec` in core{20,}-early-config test - devicestate: enable cloud-init on uc20 for grade signed and secured - boot: add "rootdir" to baseBootenvSuite and use in tests - tests/lib/cla_check.py: don't allow users.noreply.github.com commits to pass CLA - boot: represent boot chains, helpers for marshalling and equivalence checks - boot: mark successful with boot assets - client, api: handle insufficient space error - o/snapstate: disk space check with single snap install - configcore: "service.console-conf.disable" is gadget defaults only - packaging/opensuse: fix for /usr/libexec on TW, do not hardcode AppArmor profile path - tests: skip udp protocol in nfs-support test on ubuntu-20.10 - packaging/debian-sid: tweak code preparing _build tree - many: move seal code from gadget/install to boot - tests: remove workaround for cups on ubuntu-20.10 - client: implement RebootToSystem - many: seed.Model panics now if called before LoadAssertions - daemon: add /v2/systems "reboot" action API - github: run tests also on push to release branches - interfaces/bluez: let slot access audio streams - seed,c/snap-bootstrap: simplify snap-bootstrap seed reading with new seed.ReadSystemEssential - interfaces: allow snap-update-ns to read /proc/cmdline - tests: new organization for nested tests - o/snapstate, features: add feature flags for disk space awareness - tests: workaround for cups issue on 20.10 where default printer is not configured. - interfaces: update cups-control and add cups for providing snaps - boot: keep track of the original asset when observing updates - tests: simplify and fix tests for disk space checks on snap remove - sysconfig/cloudinit.go: add AllowCloudInit and use GadgetDir for cloud.conf - tests/main: mv core specific tests to core suite - tests/lib/nested.sh: reset the TPM when we create the uc20 vm - devicestate: rename "mockLogger" to "logbuf" - many: introduce ContentChange for tracking gadget content in observers - many: fix partion vs partition typo - bootloader: retrieve boot chains from bootloader - devicestate: add tests around logging in RequestSystemAction - boot: handle canceled update - bootloader: tweak doc comments (thanks Samuele) - seed/seedwriter: test local asserted snaps with UC20 grade signed - sysconfig/cloudinit.go: add DisableNoCloud to CloudInitRestrictOptions - many: use BootFile type in load sequences - boot,bootloader: clarifications after the changes to introduce bootloader.Options.Role - boot,bootloader,gadget: apply new bootloader.Options.Role - o/snapstate, features: add feature flag for disk space check on remove - testutil: add checkers for symbolic link target - many: refactor tpm seal parameter setting - boot/bootstate20: reboot to rollback to previous kernel - boot: add unit test helpers - boot: observe update & rollback of trusted assets - interfaces/utf: Add MIRKey to u2f devices - o/devicestate/devicestate_cloudinit_test.go: test cleanup for uc20 cloud-init tests - many: check that users of BaseTest don't forget to consume cleanups - tests/nested/core20/tpm: verify trusted boot assets tracking - github: run macOS job with Go 1.14 - many: misc doc-comment changes and typo fixes - o/snapstate: disk space check with InstallMany - many: cloud-init cleanups from previous PR's - tests: running tests on opensuse leap 15.2 - run-checks: check for dirty build tree too - vendor: run ./get-deps.sh to update the secboot hash - tests: update listing test for "-dirty" versions - overlord/devicestate: do not release the state lock when updating gadget assets - secboot: read kernel efi image from snap file - snap: add size to the random access file return interface - daemon: correctly parse Content-Type HTTP header. - tests: account for apt-get on core18 - cmd/snap-bootstrap/initramfs-mounts: compute string outside of loop - mkversion.sh: simple hack to include dirty in version if the tree is dirty - cgroup,snap: track hooks on system bus only - interfaces/systemd: compare dereferenced Service - run-checks: only check files in git for misspelling - osutil: add a package doc comment (via doc.go) - boot: complain about reused asset name during initial install - snapstate: installSize helper that calculates total size of snaps and their prerequisites - snapshots: export of snapshots - boot/initramfs_test.go: reset boot vars on the bootloader for each iteration- New upstream release 2.46.1 - interfaces: allow snap-update-ns to read /proc/cmdline - github: run macOS job with Go 1.14 - o/snapstate, features: add feature flag for disk space check on remove - tests: account for apt-get on core18 - mkversion.sh: include dirty in version if the tree is dirty - interfaces/systemd: compare dereferenced Service - vendor.json: update mysterious secboot SHA again- New upstream release 2.46 - logger: add support for setting snapd.debug=1 on kernel cmdline - o/snapstate: check disk space before creating automatic snapshot on remove - boot, o/devicestate: observe existing recovery bootloader trusted boot assets - many: use transient scope for tracking apps and hooks - features: add HiddenSnapFolder feature flag - tests/lib/nested.sh: fix partition typo, unmount the image on uc20 too - runinhibit: open the lock file in read-only mode in IsLocked - cmd/s-b/initramfs-mounts: make recover -> run mode transition automatic - tests: update spread test for unknown plug/slot with snapctl is- connected - osutil: add OpenExistingLockForReading - kernel: add kernel.Validate() - interfaces: add vcio interface - interfaces/{docker,kubernetes}-support: load overlay and support systemd cgroup driver - tests/lib/nested.sh: use more robust code for finding what loop dev we mounted - cmd/snap-update-ns: detach all bind-mounted file - snap/snapenv: set SNAP_REAL_HOME - packaging: umount /snap on purge in containers - interfaces: misc policy updates xlvi - secboot,cmd/snap-bootstrap: cross-check partitions before unlocking, mounting - boot: copy boot assets cache to new root - gadget,kernel: add new kernel.{Info,Asset} struct and helpers - o/hookstate/ctlcmd: make is-connected check whether the plug or slot exists - tests: find -ignore_readdir_race when scanning cgroups - interfaces/many: deny arbitrary desktop files and misc from /usr/share - tests: use "set -ex" in prep-snapd-in-lxd.sh - tests: re-enable udisks test on debian-sid - cmd/snapd-generator: use PATH fallback if PATH is not set - tests: disable udisks2 test on arch linux - github: use latest/stable go, not latest/edge - tests: remove support for ubuntu 19.10 from spread tests - tests: fix lxd test wrongly tracking 'latest' - secboot: document exported functions - cmd: compile snap gdbserver shim correctly - many: correctly calculate the desktop file prefix everywhere - interfaces: add kernel-crypto-api interface - corecfg: add "system.timezone" setting to the system settings - cmd/snapd-generator: generate drop-in to use fuse in container - cmd/snap-bootstrap/initramfs-mounts: tweak names, add comments from previous PR - interfaces/many: miscellaneous updates for strict microk8s - secboot,cmd/snap-bootstrap: don't import boot package from secboot - cmd/snap-bootstrap/initramfs-mounts: call systemd-mount instead of the-tool - tests: work around broken update of systemd-networkd - tests/main/install-fontconfig-cache-gen: enhance test by verifying, add fonts to test - o/devicestate: wrap asset update observer error - boot: refactor such that bootStateUpdate20 mainly carries Modeenv - mkversion.sh: disallow changelog versions that have git in it, if we also have git version - interfaces/many: miscellaneous updates for strict microk8s - snap: fix repeated "cannot list recovery system" and add test - boot: track trusted assets during initial install, assets cache - vendor: update secboot to fix key data validation - tests: unmount FUSE file-systems from XDG runtime dir - overlord/devicestate: workaround non-nil interface with nil struct - sandbox/cgroup: remove temporary workaround for multiple cgroup writers - sandbox/cgroup: detect dangling v2 cgroup - bootloader: add helper for creating a bootloader based on gadget - tests: support different images on nested execution - many: reorg cmd/snapinfo.go into snap and new client/clientutil - packaging/arch: use external linker when building statically - tests: cope with ghost cgroupv2 - tests: fix issues related to restarting systemd-logind.service - boot, o/devicestate: TrustedAssetUpdateObserver stubs, hook up to gadget updates - vendor: update github.com/kr/pretty to fix diffs of values with pointer cycles - boot: move bootloaderKernelState20 impls to separate file - .github/workflows: move snap building to test.yaml as separate cached job - tests/nested/manual/minimal-smoke: run core smoke tests in a VM meeting minimal requirements - osutil: add CommitAs to atomic file - gadget: introduce content update observer - bootloader: introduce TrustedAssetsBootloader, implement for grub - o/snapshotstate: helpers for calculating disk space needed for an automatic snapshot - gadget/install: retrieve command lines from bootloader - boot/bootstate20: unify commit method impls, rm bootState20MarkSuccessful - tests: add system information and image information when debug info is displayed - tests/main/cgroup-tracking: try to collect some information about cgroups - boot: introduce current_boot_assets and current_recovery_boot_assets to modeenv - tests: fix for timing issues on journal-state test - many: remove usage and creation of hijacked pid cgroup - tests: port regression-home-snap-root-owned to tests.session - tests: run as hightest via tests.session - github: run CLA checks on self-hosted workers - github: remove Ubuntu 19.10 from actions workflow - tests: remove End-Of-Life opensuse/fedora releases - tests: remove End-Of-Life releases from spread.yaml - tests: fix debug section of appstream-id test - interfaces: check !b.preseed earlier - tests: work around bug in systemd/debian - boot: add deepEqual, Copy helpers for Modeenv to simplify bootstate20 refactor - cmd: add new "snap recovery" command - interfaces/systemd: use emulation mode when preseeding - interfaces/kmod: don't load kernel modules in kmod backend when preseeding - interfaces/udev: do not reload udevadm rules when preseeding - cmd/snap-preseed: use snapd from the deb if newer than from seeds - boot: fancy marshaller for modeenv values - gadget, osutil: use atomic file copy, adjust tests - overlord: use new tracking cgroup for refresh app awareness - github: do not skip gofmt with Go 1.9/1.10 - many: introduce content write observer, install mode glue, initial seal stubs - daemon,many: switch to use client.ErrorKind and drop the local errorKind... - tests: new parameters for nested execution - client: move all error kinds into errors.go and add doc strings - cmd/snap: display the error in snap debug seeding if seeding is in error - cmd/snap/debug/seeding: use unicode for proper yaml - tests/cmd/snap-bootstrap/initramfs-mounts: add test case for empty recovery_mode - osutil/disks: add mock disk and tests for happy path of mock disks - tests: refresh/revert snapd in uc20 - osutil/disks: use a dedicated error to indicate a fs label wasn't found - interfaces/system-key: in WriteSystemKey during tests, don't call ParserFeatures - boot: add current recovery systems to modeenv - bootloader: extend managed assets bootloader interface to compose a candidate command line - interfaces: make the unmarshal test match more the comment - daemon/api: use pointers to time.Time for debug seeding aspect - o/ifacestate: update security profiles in connect undo handler - interfaces: add uinput interface - cmd/snap-bootstrap/initramfs-mounts: add doSystemdMount + unit tests - o/devicestate: save seeding/preseeding times for use with debug seeding api - cmd/snap/debug: add "snap debug seeding" command for preseeding debugging - tests/main/selinux-clean: workaround SELinux denials triggered by linger setup on Centos8 - bootloader: compose command line with mode and extra arguments - cmd/snap, daemon: detect and bail purge on multi-snap - o/ifacestate: fix bug in snapsWithSecurityProfiles - interfaces/builtin/multipass: replace U+00A0 no-break space with simple space - bootloader/assets: generate bootloader assets from files - many/tests/preseed: reset the preseeded images before preseeding them - tests: drop accidental accents from e - secboot: improve key sealing tests - tests: replace _wait_for_file_change with retry - tests: new fs-state which replaces the files.sh helper - sysconfig/cloudinit_test.go: add test for initramfs case, rm "/" from path - cmd/snap: track started apps and hooks - tests/main/interfaces-pulseaudio: disable start limit checking for pulseaudio service - api: seeding debug api - .github/workflows/snap-build.yaml: build the snapd snap via GH Actions too - tests: moving journalctl.sh to a new journal-state tool - tests/nested/manual: add spread tests for cloud-init vuln - bootloader/assets: helpers for registering per-edition snippets, register snippets for grub - data,packaging,wrappers: extend D-Bus service activation search path - spread: add opensuse 15.2 and tumbleweed for qemu - overlord,o/devicestate: restrict cloud-init on Ubuntu Core - sysconfig/cloudinit: add RestrictCloudInit - cmd/snap-preseed: check that target path exists and is a directory on --reset - tests: check for pids correctly - gadget,gadget/install: refactor partition table update - sysconfig/cloudinit: add CloudInitStatus func + CloudInitState type - interface/fwupd: add more policies for making fwupd upstream strict - tests: new to-one-line tool which replaces the strings.sh helper - interfaces: new helpers to get and compare system key, for use with seeding debug api - osutil, many: add helper for checking whether the process is a go test binary - cmd/snap-seccomp/syscalls: add faccessat2 - tests: adjust xdg-open after launcher changes - tests: new core config helper - usersession/userd: do not modify XDG_DATA_DIRS when calling xdg- open - cmd/snap-preseed: handle relative chroot path - snapshotstate: move sizer to osutil.Sizer() - tests/cmd/snap-bootstrap/initramfs-mounts: rm duplicated env ref kernel tests - gadget/install,secboot: use snapcore/secboot luks2 api - boot/initramfs_test.go: add Commentf to more Assert()'s - tests/lib: account for changes in arch package file name extension - bootloader/bootloadertest: fix comment typo - bootloader: add helper for getting recovery system environment variables - tests: preinstall shellcheck and run tests on focal - strutil: add a helper for parsing kernel command line - osutil: add CheckFreeSpace helper - secboot: update tpm connection error handling - packaging, cmd/snap-mgmt, tests: remove modules files on purge - tests: add tests.cleanup helper - packaging: add "ca-certificates" to build-depends - tests: more checks in core20 early config spread test - tests: fix some snapstate tests to use pointers for snapmgrTestSuite - boot: better naming of helpers for obtaining kernel command line - many: use more specific check for unit test mocking - systemd/escape: fix issues with "" and "\t" handling - asserts: small improvements and corrections for sequence-forming assertions' support - boot, bootloader: query kernel command line of run mod and recovery mode systems - snap/validate.go: disallow snap layouts with new top-level directories - tests: allow to add a new label to run nested tests as part of PR validation - tests/core/gadget-update-pc: port to UC20 - tests: improve nested tests flexibility - asserts: integer headers: disallow prefix zeros and make parsing more uniform - asserts: implement Database.FindSequence - asserts: introduce SequenceMemberAfter in the asserts backstores - spread.yaml: remove tests/lib/tools from PATH - overlord: refuse to install snaps whose activatable D-Bus services conflict with installed snaps - tests: shorten lxd-state undo-mount-changes - snap-confine: don't die if a device from sysfs path cannot be found by udev - tests: fix argument handling of apt-state - tests: rename lxd-tool to lxd-state - tests: rename user-tool to user-state, fix --help - interfaces: add gconf interface - sandbox/cgroup: avoid parsing security tags twice - tests: rename version-tool to version-compare - cmd/snap-update-ns: handle anomalies better - tests: fix call to apt.Package.mark_install(auto_inst=True) - tests: rename mountinfo-tool to mountinfo.query - tests: rename memory-tool to memory-observe-do - tests: rename invariant-tool to tests.invariant - tests: rename apt-tool to apt-state - many: managed boot config during run mode setup - asserts: introduce the concept of sequence-forming assertion types - tests: tweak comments/output in uc20-recovery test - tests/lib/pkgdb: do not use quiet when purging debs - interfaces/apparmor: allow snap-specific /run/lock - interfaces: add system-source-code for access to /usr/src - sandbox/cgroup: extend SnapNameFromPid with tracking cgroup data - gadget/install: move udev trigger to gadget/install - many: make nested spread tests more reliable - tests/core/uc20-recovery: apply hack to get gopath in recover mode w/ external backend - tests: enable tests on uc20 which now work with the real model assertion - tests: enable system-snap-refresh test on uc20 - gadget, bootloader: preserve managed boot assets during gadget updates - tests: fix leaked dbus-daemon in selinux-clean - tests: add servicestate.Control tests - tests: fix "restart.service" - wrappers: helper for enabling services - extract and move enabling of services into a helper - tests: new test to validate refresh and revert of kernel and gadget on uc20 - tests/lib/prepare-restore: collect debug info when prepare purge fails - bootloader: allow managed bootloader to update its boot config - tests: Remove unity test from nightly test suite - o/devicestate: set mark-seeded to done in the task itself - tests: add spread test for disconnect undo caused by failing disconnect hook - sandbox/cgroup: allow discovering PIDs of given snap - osutil/disks: support IsDecryptedDevice for mountpoints which are dm devices - osutil: detect autofs mounted in /home - spread.yaml: allow amazon-linux-2-64 qemu with ec2-user/ec2-user - usersession: support additional zoom URL schemes - overlord: mock timings.DurationThreshold in TestNewWithGoodState - sandbox/cgroup: add tracking helpers - tests: detect stray dbus-daemon - overlord: refuse to install snaps providing user daemons on Ubuntu 14.04 - many: move encryption and installer from snap-boostrap to gadget - o/ifacestate: fix connect undo handler - interfaces: optimize rules of multiple connected iio/i2c/spi plugs - bootloader: introduce managed bootloader, implement for grub - tests: fix incorrect check in smoke/remove test - asserts,seed: split handling of essential/not essential model snaps - gadget: fix typo in mounted filesystem updater - gadget: do only one mount point lookup in mounted fs updater - tests/core/snap-auto-mount: try to make the test more robust - tests: adding ubuntu-20.04 to google-sru backend - o/servicestate: add updateSnapstateServices helper - bootloader: pull recovery grub config from internal assets - tests/lib/tools: apply linger workaround when needed - overlord/snapstate: graceful handling of denied "managed" refresh schedule - snapstate: fix autorefresh from classic->strict - overlord/configstate: add system.kernel.printk.console-loglevel option - tests: fix assertion disk handling for nested UC systems - snapstate: use testutil.HostScaledTimeout() in snapstate tests - tests: extra worker for google-nested backend to avoid timeout error on uc20 - snapdtool: helper to check whether the current binary is reexeced from a snap - tests: mock servicestate in api tests to avoid systemctl checks - many: rename back snap.Info.GetType to Type - tests/lib/cla_check: expect explicit commit range - osutil/disks: refactor diskFromMountPointImpl a bit - o/snapstate: service-control task handler - osutil: add disks pkg for associating mountpoints with disks/partitions - gadget,cmd/snap-bootstrap: move partitioning to gadget - seed: fix LoadEssentialMeta when gadget is not loaded - cmd/snap: Debian does not allow $SNAP_MOUNT_DIR/bin in sudo secure_path - asserts: introduce new assertion validation-set - asserts,daemon: add support for "serials" field in system-user assertion - data/sudo: drop a failed sudo secure_path workaround - gadget: mv encodeLabel to osutil/disks.EncodeHexBlkIDFormat - boot, snap-bootstrap: move initramfs-mounts logic to boot pkg - spread.yaml: update secure boot attribute name - interfaces/block_devices: add NVMe subsystem devices, support multipath paths - tests: use the "jq" snap from the edge channel - tests: simplify the tpm test by removing the test-snapd-mokutil snap - boot/bootstate16.go: clean snap_try_* vars when not in Trying status too - tests/main/sudo-env: check snap path under sudo - tests/main/lxd: add test for snaps inside nested lxd containers not working - asserts/internal: expand errors about invalid serialized grouping labels - usersession/userd: add msteams url support - tests/lib/prepare.sh: adjust comment about sgdisk - tests: fix how gadget pc is detected when the snap does not exist and ls fails - tests: move a few more tests to snapstate_update_test.go - tests/main: add spread test for running svc from install hook - tests/lib/prepare: increase the size of the uc16/uc18 partitions - tests/special-home-can-run-classic-snaps: re-enable - workflow: test PR title as part of the static checks again - tests/main/xdg-open-compat: backup and restore original xdg-open - tests: move update-related tests to snapstate_update_test.go - cmd,many: move Version and bits related to snapd tools to snapdtool, merge cmdutil - tests/prepare-restore.sh: reset-failed systemd-journald before restarting - interfaces: misc small interface updates - spread: use find rather than recursive ls, skip mounted snaps - tests/lib/prepare-restore.sh: if we failed to purge snapd deb, ls /var/lib/snapd - tests: enable snap-auto-mount test on core20 - cmd/snap: do not show $PATH warning when executing under sudo on a known distro - asserts/internal: add some iteration benchmarks - sandbox/cgroup: improve pid parsing code - snap: add new `snap run --experimental-gdbserver` option - asserts/internal: limit Grouping size switching to a bitset representationWe don't always use the bit-set representation because: - snap: add an activates-on property to apps for D-Bus activation - dirs: delete unused Cloud var, fix typo - sysconfig/cloudinit: make callers of DisableCloudInit use WritableDefaultsDir - tests: fix classic ubuntu core transition auth - tests: fail in setup_reflash_magic() if there is snapd state left - tests: port interfaces-many-core-provided to tests.session - tests: wait after creating partitions with sfdisk - bootloader: introduce bootloarder assets, import grub.cfg with an edition marker - riscv64: bump timeouts - gadget: drop dead code, hide exports that are not used externally - tests: port 2 uc20 part1 - tests: fix bug waiting for snap command to be ready - tests: move try-related tests to snapstate_try_test.go - tests: add debug for 20.04 prepare failure - travis.yml: removed, all our checks run in GH actions now - tests: clean up up the use of configcoreSuite in the configcore tests - sandbox/cgroup: remove redundant pathOfProcPidCgroup - sandbox/cgroup: add tests for ParsePids - tests: fix the basic20 test for uc20 on external backend - tests: use configcoreSuite in journalSuite and remove some duplicated code - tests: move a few more tests to snapstate_install_test - tests: assorted small patches - dbusutil/dbustest: separate license from package - interfaces/builtin/time-control: allow POSIX clock API - usersession/userd: add "slack" to the white list of URL schemes handled by xdg-open - tests: check that host settings like hostname are settable on core - tests: port xdg-settings test to tests.session - tests: port snap-handle-link test to tests.session - arch: add riscv64 - tests: core20 early defaults spread test - tests: move install tests from snapstate_test.go to snapstate_install_test.go - github: port macOS sanity checks from travis - data/selinux: allow checking /var/cache/app-info - o/devicestate: core20 early config from gadget defaults - tests: autoremove after removing lxd in preseed-lxd test - secboot,cmd/snap-bootstrap: add tpm sealing support to secboot - sandbox/cgroup: move FreezerCgroupDir from dirs.go - tests: update the file used to detect the boot path on uc20 - spread.yaml: show /var/lib/snapd in debug - cmd/snap-bootstrap/initramfs-mounts: also copy systemd clock + netplan files - snap/naming: add helpers to parse app and hook security tags - tests: modernize retry tool - tests: fix and trim debug section in xdg-open-portal - tests: modernize and use snapd.tool - vendor: update to latest github.com/snapcore/bolt for riscv64 - cmd/snap-confine: add support for libc6-lse - interfaces: miscellaneous policy updates xlv - interfaces/system-packages-doc: fix typo in variable names - tests: port interfaces-calendar-service to tests.session - tests: install/run the lzo test snap too - snap: (small) refactor of `snap download` code for testing/extending - data: fix shellcheck warnings in snapd.sh.in - packaging: disable buildmode=pie for riscv64 - tests: install test-snapd-rsync snap from edge channel - tests: modernize tests.session and port everything using it - tests: add ubuntu 20.10 to spread tests - cmd/snap/remove: mention snap restore/automatic snapshots - dbusutil: move all D-Bus helpers and D-Bus test helpers - wrappers: pass 'disable' flag to StopServices wrapper - osutil: enable riscv64 build - snap/naming: add ParseSecurityTag and friends - tests: port document-portal-activation to session-tool - bootloader: rename test helpers to reflect we are mocking EFI boot locations - tests: disable test of nfs v3 with udp proto on debian-sid - tests: plan to improve the naming and uniformity of utilities - tests: move *-tool tests to their own suite - snap-bootstrap: remove sealed key file on reinstall - bootloader/ubootenv: don't panic with an empty uboot env - systemd: rename actualFsTypeAndMountOptions to hostFsTypeAndMountOptions - daemon: fix filtering of service-control changes for snap.app - tests: spread test for preseeding in lxd container - tests: fix broken snapd.session agent.socket - wrappers: add RestartServices function and ReloadOrRestart to systemd - o/cmdstate: handle ignore flag on exec-command tasks - gadget: make ext4 filesystems with or without metadata checksum - tests: update statx test to run on all LTS releases - configcore: show better error when disabling services - interfaces: add hugepages-control - interfaces-ssh-keys: Support reading /etc/ssh/ssh_config.d/ - tests: run ubuntu-20.04-* tests on all ubuntu-2* releases - tests: skip interfaces-openvswitch for centos 8 in nightly suite - tests: reload systemd --user for root, if present - tests: reload systemd after editing /etc/fstab - tests: add missing dependencies needed for sbuild test on debian - tests: reload systemd after removing pulseaudio - image, tests: core18 early config. - interfaces: add system-packages-doc interface - cmd/snap-preseed, systemd: fix handling of fuse.squashfuse when preseeding - interfaces/fwupd: allow bind mount to /boot on core - tests: improve oom-vitality tests - tests: add fedora 32 to spread.yaml - config: apply vitality-hint immediately when the config changes - tests: port snap-routine-portal-info to session-tool - configcore: add "service.console-conf.disable" config option - tests: port xdg-open to session-tool - tests: port xdg-open-compat to session-tool - tests: port interfaces-desktop-* to session-tool - spread.yaml: apply yaml formatter/linter - tests: port interfaces-wayland to session-tool - o/devicestate: refactor current system handling - snap-mgmt: perform cleanup of user services - snap/snapfile,squashfs: followups from 8729 - boot, many: require mode in modeenv - data/selinux: update policy to allow forked processes to call getpw*() - tests: log stderr from dbus-monitor - packaging: build cmd/snap and cmd/snap-bootstrap with nomanagers tag - snap/squashfs: also symlink snap Install with uc20 seed snap dir layout - interfaces/builtin/desktop: do not mount fonts cache on distros with quirks - data/selinux: allow snapd to remove/create the its socket - testutil/exec.go: set PATH after running shellcheck - tests: silence stderr from dbus-monitor - snap,many: mv Open to snapfile pkg to support add'l options to Container methods - devicestate, sysconfig: revert support for cloud.cfg.d/ in the gadget - github: remove workaround for bug 133 in actions/cache - tests: remove dbus.sh - cmd/snap-preseed: improve mountpoint checks of the preseeded chroot - spread.yaml: add ps aux to debug section - github: run all spread systems in a single go with cached results - test: session-tool cli tweaks - asserts: rest of the Pool API - tests: port interfaces-network-status-classic to session-tool - packaging: remove obsolete 16.10,17.04 symlinks - tests: setup portals before starting user session - o/devicestate: typo fix - interfaces/serial-port: add NXP SC16IS7xx (ttySCX) to allowed devices - cmd/snap/model: support store, system-user-authority keys in --verbose - o/devicestate: raise conflict when requesting system action while seeding - tests: detect signs of crashed snap-confine - tests: sign kernel and gadget to run nested tests using current snapd code - tests: remove gnome-online-accounts we install - tests: fix the issue where all the tests were executed on secboot system - tests: port interfaces-accounts-service to session-tool - interfaces/network-control: bring /var/lib/dhcp from host - image,cmd/snap,tests: add support for store-wide cohort keys - configcore: add nomanagers buildtag for conditional build - tests: port interfaces-password-manager-service to session-tool - o/devicestate: cleanup system actions supported by recover mode - snap-bootstrap: remove create-partitions and update tests - tests: fix nested tests - packaging/arch: update PKGBUILD to match one in AUR - tests: port interfaces-location-control to session-tool - tests: port interfaces-contacts-service to session-tool - state: log task errors in the journal too - o/devicestate: change how current system is reported for different modes - devicestate: do not report "ErrNoState" for seeded up - tests: add a note about broken test sequence - tests: port interfaces-autopilot-introspection to session-tool - tests: port interfaces-dbus to session-tool - packaging: update sid packaging to match 16.04+ - tests: enable degraded test on uc20 - c/snaplock/runinhibit: add run inhibition operations - tests: detect and report root-owned files in /home - tests: reload root's systemd --user after snapd tests - tests: test registration with serial-authority: [generic] - cmd/snap-bootstrap/initramfs-mounts: copy auth.json and macaroon- key in recover - tests/mount-ns: stop binfmt_misc mount unit - cmd/snap-bootstrap/initramfs-mounts: use booted kernel partition uuid if available - daemon, tests: indicate system mode, test switching to recovery and back to run - interfaces/desktop: silence more /var/lib/snapd/desktop/icons denials - tests/mount-ns: update to reflect new UEFI boot mode - usersession,tests: clean ups for userd/settings.go and move xdgopenproxy under usersession - tests: disable mount-ns test - tests: test user belongs to systemd-journald, on core20 - tests: run core/snap-set-core-config on uc20 too - tests: remove generated session-agent units - sysconfig: use new _writable_defaults dir to create cloud config - cmd/snap-bootstrap/initramfs-mounts: cosmetic changes in prep for future work - asserts: make clearer that with label we mean a serialized label - cmd/snap-bootstrap: tweak recovery trigger log messages - asserts: introduce PoolTo - userd: allow setting default-url-scheme-handler - secboot: append uuid to ubuntu-data when decrypting - o/configcore: pass extra options to FileSystemOnlyApply - tests: add dbus-user-session to bionic and reorder package names - boot, bootloader: adjust comments, expand tests - tests: improve debugging of user session agent tests - packaging: add the inhibit directory - many: add core.resiliance.vitality-hint config setting - tests: test adjustments and fixes for recently published images - cmd/snap: coldplug auto-import assertions from all removable devices - secboot,cmd/snap-bootstrap: move initramfs-mounts tpm access to secboot - tests: not fail when boot dir cannot be determined - tests: new directory used to store the cloud images on gce - tests: inject snapd from edge into seeds of the image in manual preseed test - usersession/agent,wrappers: fix races between Shutdown and Serve - tests: add dependency needed for next upgrade of bionic - tests: new test user is used for external backend - cmd/snap: fix the order of positional parameters in help output - tests: don't create root-owned things in ~test - tests/lib/prepare.sh: delete patching of the initrd - cmd/snap-bootstrap/initramfs-mounts: add sudoers to dirs to copy as well - progress: tweak multibyte label unit test data - o/devicestate,cmd/snap-bootstrap: seal to recover mode cmdline - gadget: fix fallback device lookup for 'mbr' type structures - configcore: only reload journald if systemd is new enough - cmd/snap-boostrap, boot: use /run/mnt/data instead of ubuntu-data - wrappers: allow user mode systemd daemons - progress: fix progress bar with multibyte duration units - tests: fix raciness in pulseaudio test - asserts/internal: introduce Grouping and Groupings - tests: remove user.sh - tests: pair of follow-ups from earlier reviews - overlord/snapstate: warn of refresh/postpone events - configcore,tests: use daemon-reexec to apply watchdog config - c/snap-bootstrap: check mount states via initramfsMountStates - store: implement DownloadAssertions - tests: run smoke test with different bases - tests: port user-mounts test to session-tool - store: handle error-list in fetch-assertions results - tests: port interfaces-audio-playback-record to session-tool - data/completion: add `snap` command completion for zsh - tests/degraded: ignore failure in systemd-vconsole-setup.service - image: stub implementation of image.Prepare for darwin - tests: session-tool --restore -u stops user-$UID.slice - o/ifacestate/handlers.go: fix typo - tests: port pulseaudio test to session-tool - tests: port user-session-env to session-tool - tests: work around journald bug in core16 - tests: add debug to core-persistent-journal test - tests: port selinux-clean to session-tool - tests: port portals test to session-tool, fix portal tests on sid - tests: adding option --no-install-recommends option also when install all the deps - tests: add session-tool --has-systemd-and-dbus - packaging/debian-sid: add gcc-multilib to build deps - osutil: expand FileLock to support shared locks and more - packaging: stop depending on python-docutils - store,asserts,many: support the new action fetch-assertions - tests: port snap-session-agent-* to session-tool - packaging/fedora: disable FIPS compliant crypto for static binaries - tests: fix for preseeding failures- Release 2.45.3.1 to Fedora (RHBZ#1861024) - Fix FTBFS in Rawhide (RHBZ#1865496)- Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild- New upstream release, LP: #1875071 - o/ifacestate: fix bug in snapsWithSecurityProfiles - tests/main/selinux-clean: workaround SELinux denials triggered by linger setup on Centos8- New upstream release, LP: #1875071 - many: backport _writable_defaults dir changes - tests: fix incorrect check in smoke/remove test - cmd/snap-bootstrap,seed: backport of uc20 PRs - tests: avoid exit when nested type var is not defined - cmd/snap-preseed: backport fixes - interfaces: optimize rules of multiple connected iio/i2c/spi plugs - many: cherry-picks for 2.45, gh-action, test fixes - tests/lib: account for changes in arch package file name extension - postrm, snap-mgmt: cleanup modules and other cherry-picks - snap-confine: don't die if a device from sysfs path cannot be found by udev - data/selinux: update policy to allow forked processes to call getpw*() - tests/main/interfaces-time-control: exercise setting time via date - interfaces/builtin/time-control: allow POSIX clock API - usersession/userd: add "slack" to the white list of URL schemes handled by xdg-open- release 2.45.2 to Fedora- New upstream release 2.45.2 - SECURITY UPDATE: sandbox escape vulnerability on snapctl xdg-open implementation - usersession/userd/launcher.go: remove XDG_DATA_DIRS environment variable modification when calling the system xdg-open. Patch thanks to James Henstridge - packaging/ubuntu-16.04/snapd.postinst: ensure "snap userd" is restarted. Patch thanks to Michael Vogt - CVE-2020-11934 - SECURITY UPDATE: arbitrary code execution vulnerability on core devices with access to physical removable media - devicestate: Disable/restrict cloud-init after seeding. - CVE-2020-11933- Release 2.45.1 to Fedora (RHBZ#1844628) - Drop cherry-picked patches that are part of the release- New upstream release 2.45.1 - data/selinux: allow checking /var/cache/app-info - cmd/snap-confine: add support for libc6-lse - interfaces: miscellanious policy updates xlv - snap-bootstrap: remove sealed key file on reinstall - interfaces-ssh-keys: Support reading /etc/ssh/ssh_config.d/ - gadget: make ext4 filesystems with or without metadata checksum - interfaces/fwupd: allow bind mount to /boot on core - tests: cherry-pick test fixes from master - snap/squashfs: also symlink snap Install with uc20 seed snap dir layout - interfaces/serial-port: add NXP SC16IS7xx (ttySCX) to allowed devices - snap,many: mv Open to snapfile pkg to support add'l options to Container methods - interfaces/builtin/desktop: do not mount fonts cache on distros with quirks - devicestate, sysconfig: revert support for cloud.cfg.d/ in the gadget - data/completion, packaging: cherry-pick zsh completion - state: log task errors in the journal too - devicestate: do not report "ErrNoState" for seeded up - interfaces/desktop: silence more /var/lib/snapd/desktop/icons denials - packaging/fedora: disable FIPS compliant crypto for static binaries - packaging: stop depending on python-docutils- Release 2.45 to Fedora (RHBZ#1814552) - Cherry pick zsh completion patch - Cherry pick patch disabling fontconfig system cache sharing due to known incompatibilities - Drop sudoers config (RHBZ#1691996)- New upstream release 2.45 - o/devicestate: support doing system action reboots from recover mode - vendor: update to latest secboot - tests: not fail when boot dir cannot be determined - configcore: only reload journald if systemd is new enough - cmd/snap-bootstrap/initramfs-mounts: append uuid to ubuntu-data when decrypting - tests/lib/prepare.sh: delete patching of the initrd - cmd/snap: coldplug auto-import assertions from all removable devices - cmd/snap: fix the order of positional parameters in help output - c/snap-bootstrap: port mount state mocking to the new style on master - cmd/snap-bootstrap/initramfs-mounts: add sudoers to dirs to copy as well - o/devicestate,cmd/snap-bootstrap: seal to recover mode cmdline, unlock in recover mode initramfs - progress: tweak multibyte label unit test data - gadget: fix fallback device lookup for 'mbr' type structures - progress: fix progress bar with multibyte duration units - many: use /run/mnt/data over /run/mnt/ubuntu-data for uc20 - many: put the sealed keys in a directory on seed for tidiness - cmd/snap-bootstrap: measure epoch and model before unlocking encrypted data - o/configstate: core config handler for persistent journal - bootloader/uboot: use secondary ubootenv file boot.sel for uc20 - packaging: add "$TAGS" to dh_auto_test for debian packaging - tests: ensure $cache_dir is actually available - secboot,cmd/snap-bootstrap: add model to pcr protection profile - devicestate: do not use snap-boostrap in devicestate to install - tests: fix a typo in nested.sh helper - devicestate: add support for cloud.cfg.d config from the gadget - cmd/snap-bootstrap: cleanups, naming tweaks - testutil: add NewDBusTestConn - snap-bootstrap: lock access to sealed keys - overlord/devicestate: preserve the current model inside ubuntu- boot - interfaces/apparmor: use differently templated policy for non-core bases - seccomp: add get_tls, io_pg* and *time64/*64 variants for existing syscalls - cmd/snap-bootstrap/initramfs-mounts: mount ubuntu-seed first, other misc changes - o/snapstate: tweak "waiting for restart" message - boot: store model model and grade information in modeenv - interfaces/firewall-control: allow -legacy and -nft for core20 - boot: enable makeBootable20RunMode for EnvRefExtractedKernel bootloaders - boot/bootstate20: add EnvRefExtractedKernelBootloader bootstate20 implementation - daemon: fix error message from `snap remove-user foo` on classic - overlord: have a variant of Mock that can take a state.State - tests: 16.04 and 18.04 now have mediating pulseaudio (again) - seed: clearer errors for missing essential snapd or core snap - cmd/snap-bootstrap/initramfs-mounts: support EnvRefExtractedKernelBootloader's - gadget, cmd/snap-bootstrap: MBR schema support - image: improve/adjust DownloadSnap doc comment - asserts: introduce ModelGrade.Code - tests: ignore user-12345 slice and service - image,seed/seedwriter: support redirect channel aka default tracks - bootloader: use binary.Read/Write - tests: uc20 nested suite part II - tests/boot: refactor to make it easier for new bootloaderKernelState20 impl - interfaces/openvswitch: support use of ovs-appctl - snap-bootstrap: copy auth data from real ubuntu-data in recovery mode - snap-bootstrap: seal and unseal encryption key using tpm - tests: disable special-home-can-run-classic-snaps due to jenkins repo issue - packaging: fix build on Centos8 to support BUILDTAGS - boot/bootstate20: small changes to bootloaderKernelState20 - cmd/snap: Implement a "snap routine file-access" command - spread.yaml: switch back to latest/candidate for lxd snap - boot/bootstate20: re-factor kernel methods to use new interface for state - spread.yaml,tests/many: use global env var for lxd channel - boot/bootstate20: fix bug in try-kernel cleanup - config: add system.store-certs.[a-zA-Z0-9] support - secboot: key sealing also depends on secure boot enabled - httputil: fix client timeout retry tests - cmd/snap-update-ns: handle EBUSY when unlinking files - cmd/snap/debug/boot-vars: add opts for setting dir and/or uc20 vars - secboot: add tpm support helpers - tests/lib/assertions/developer1-pi-uc20.model: use 20/edge for kernel and gadget - cmd/snap-bootstrap: switch to a 64-byte key for unlocking - tests: preserve size for centos images on spread.yaml - github: partition the github action workflows - run-checks: use consistent "Checking ..." style messages - bootloader: add efi pkg for reading efi variables - data/systemd: do not run snapd.system-shutdown if finalrd is available - overlord: update tests to work with latest go - cmd/snap: do not hide debug boot-vars on core - cmd/snap-bootstrap: no error when not input devices are found - snap-bootstrap: fix partition numbering in create-partitions - httputil/client_test.go: add two TLS version tests - tests: ignore user@12345.service hierarchy - bootloader, gadget, cmd/snap-bootstrap: misc cosmetic things - tests: rewrite timeserver-control test - tests: fix racy pulseaudio tests - many: fix loading apparmor profiles on Ubuntu 20.04 with ZFS - tests: update snap-preseed --reset logic to accommodate for 2.44 change - cmd/snap: don't wait for system key when stopping - sandbox/cgroup: avoid making arrays we don't use - osutil: mock proc/self/mountinfo properly everywhere - selinux: export MockIsEnforcing; systemd: use in tests - tests: add 32 bit machine to GH actions - tests/session-tool: kill cron session, if any - asserts: it should be possible to omit many snap-ids if allowed, fix - boot: cleanup more things, simplify code - github: skip spread jobs when corresponding label is set - dirs: don't depend on osutil anymore, mv apparmor vars to apparmor pkg - tests/session-tool: add session-tool --dump - github: allow cached debian downloads to restore - tests/session-tool: session ordering is non-deterministic - tests: enable unit tests on debian-sid again - github: move spread to self-hosted workers - secboot: import secboot on ubuntu, provide dummy on !ubuntu - overlord/devicestate: support for recover and run modes - snap/naming: add validator for snap security tag - interfaces: add case for rootWritableOverlay + NFS - tests/main/uc20-create-partitions: tweaks, renames, switch to 20.04 - github: port CLA check to Github Actions - interfaces/many: miscellaneous policy updates xliv - configcore,tests: fix setting watchdog options on UC18/20 - tests/session-tool: collect information about services on startup - tests/main/uc20-snap-recovery: unbreak, rename to uc20-create- partitions - state: add state.CopyState() helper - tests/session-tool: stop anacron.service in prepare - interfaces: don't use the owner modifier for files shared via document portal - systemd: move the doc comments to the interface so they are visible - cmd/snap-recovery-chooser: tweaks - interfaces/docker-support: add overlayfs file access - packaging: use debian/not-installed to ignore snap-preseed - travis.yml: disable unit tests on travis - store: start splitting store.go and store_test.go into subtopic files - tests/session-tool: stop cron/anacron from meddling - github: disable fail-fast as spread cannot be interrupted - github: move static checks and spread over - tests: skip "/etc/machine-id" in "writablepaths" test - snap-bootstrap: store encrypted partition recovery key - httputil: increase testRetryStrategy max timelimit to 5s - tests/session-tool: kill leaking closing session - interfaces: allow raw access to USB printers - tests/session-tool: reset failed session-tool units - httputil: increase httpclient timeout in TestRetryRequestTimeoutHandling - usersession: extend timerange in TestExitOnIdle - client: increase timeout in client tests to 100ms - many: disentagle release and snapdenv from sandbox/* - boot: simplify modeenv mocking to always write a modeenv - snap-bootstrap: expand data partition on install - o/configstate: add backlight option for core config - cmd/snap-recovery-chooser: add recovery chooser - features: enable robust mount ns updates - snap: improve TestWaitRecovers test - sandbox/cgroup: add ProcessPathInTrackingCgroup - interfaces/policy: fix comment in recent new test - tests: make session tool way more robust - interfaces/seccomp: allow passing an address to setgroups - o/configcore: introduce core config handlers (3/N) - interfaces: updates to login-session-observe, network-manager and modem-manager interfaces - interfaces/policy/policy_test.go: add more tests'allow- installation: false' and we grant based on interface attributes - packaging: detect/disable broken seed in the postinst - cmd/snap-confine/mount-support-nvidia.c: add libnvoptix as nvidia library - tests: remove google-tpm backend from spread.yaml - tests: install dependencies with apt using --no-install-recommends - usersession/userd: add zoommtg url support - snap-bootstrap: fix disk layout sanity check - snap: add `snap debug state --is-seeded` helper - devicestate: generate warning if seeding fails - config, features: move and rename config.GetFeatureFlag helper to features.Flag - boot, overlord/devicestate, daemon: implement requesting boot into a given recovery system - xdgopenproxy: forward requests to the desktop portal - many: support immediate reboot - store: search v2 tweaks - tests: fix cross build tests when installing dependencies - daemon: make POST /v2/systems/