[Devel] [PATCH rh7 v3 2/2] fs: Allow to mount ext4 and binfmt_misc under non-root ns

Kirill Tkhai ktkhai at odin.com
Tue Oct 6 02:35:51 PDT 2015


https://jira.sw.ru/browse/PSBM-40100

v2: Check that user_ns is initial for the ve.
v3: Be sure ve->init_cred is set.

Signed-off-by: Kirill Tkhai <ktkhai at odin.com>
---
 fs/binfmt_misc.c     |    4 +++-
 fs/ext4/super.c      |    6 +++++-
 scripts/basic/fixdep |  Bin
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index 90c306e..fd5227f 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -735,6 +735,8 @@ static int bm_fill_super(struct super_block * sb, void * data, int silent)
 static struct dentry *bm_mount(struct file_system_type *fs_type,
 	int flags, const char *dev_name, void *data)
 {
+	if (!current_user_ns_initial())
+		return ERR_PTR(-EPERM);
 	return mount_ns(fs_type, flags, get_exec_env(), bm_fill_super);
 }
 
@@ -748,7 +750,7 @@ static struct file_system_type bm_fs_type = {
 	.name		= "binfmt_misc",
 	.mount		= bm_mount,
 	.kill_sb	= kill_litter_super,
-	.fs_flags	= FS_VIRTUALIZED,
+	.fs_flags	= FS_VIRTUALIZED | FS_USERNS_MOUNT,
 };
 MODULE_ALIAS_FS("binfmt_misc");
 
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 5209777..be7efb8 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -39,6 +39,7 @@
 #include <linux/log2.h>
 #include <linux/crc16.h>
 #include <linux/cleancache.h>
+#include <linux/ve.h>
 #include <asm/uaccess.h>
 
 #include <linux/kthread.h>
@@ -5642,6 +5643,8 @@ static ssize_t ext4_quota_write(struct super_block *sb, int type,
 static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
 		       const char *dev_name, void *data)
 {
+	if (!current_user_ns_initial())
+		return ERR_PTR(-EPERM);
 	return mount_bdev(fs_type, flags, dev_name, data, ext4_fill_super);
 }
 
@@ -5727,7 +5730,8 @@ static struct file_system_type ext4_fs_type = {
 	.mount		= ext4_mount,
 	.kill_sb	= ext4_kill_sb,
 	.fs_flags	= FS_REQUIRES_DEV | FS_HAS_INVALIDATE_RANGE |
-			  FS_VIRTUALIZED | FS_HAS_MMAP_PREP,
+			  FS_VIRTUALIZED | FS_HAS_MMAP_PREP | FS_USERNS_MOUNT |
+			  FS_USERNS_DEV_MOUNT,
 };
 MODULE_ALIAS_FS("ext4");
 
diff --git a/scripts/basic/fixdep b/scripts/basic/fixdep
index 2d8a408aef61f56512dc8ac61eb828492789022b..fed811729e894f1adebe228a44d5ed17614eb92b 100755
GIT binary patch
literal 14344
zcmeHOeRPvmn!jlZgaS!G&?1byVo_ivv?vVaLz9xi8%=@b%b5{;8`_jc)1)VP!-s=T
znYIquP-R#2xH`Mbp0n$^dv+am)<t2EmTz>{IjG~uDs!yPs)@A at q9TgW{XO at +H+>V5
zGrNDxf83trxzF$UxX=B}d*6HelUo1c5{re&RKjj!#4R1+=8*Bt*!D`!3T!U3F*m!8
zO<+TT48h0EB}9#!q&>p5q&A^v1udm~i2zF6Mn=$y2FE0o5fY{H29sN44Z7=UgO!vq
zg#%<qu?iNnp13US5pkR^GhnGmFxizW23{`gBt1orktCJ%qq@;&qVPMh#0`#kHxcIL
z--DF51+e8G>W!2?I at VA)I at ZlIk`}Z3bJ+3v8D at X<+bJ|=hC}P;+&VMdI3pa2BsS03
zJa^8FIk&pvQP(UUKj~2wmn>b)Eo6Hr;3!TCllqe6>i)m2Dl7eD-k!7f{U-e2zSGnH
z<=?&{ed>~I`%}i^EFtU~e5QSG$HeNhDcQ|Ha?>xtj>&~Mrxd}b7s00#!8?oKRPRFN
zZYhHAE`nDT!8?lJ&jVNR$xpWfC=}1)B6z3>zP<?llOp)|BKU|Rc&rG%qX=GC1fL6h
zG#k%)Cf6g!u-+KyZV<vx=HU$ExPgZ492VRh(wXL4rnM&Y2G$yk#iB8We4Mqk1X@{K
zkA;H~))H)KXd$jKn$S7dx`nj_!r^EG)3gSCOKVVDuMr0o_+TxG2$^eI)8 at Dy&{@-_
zSV#}DhHx|<WYJc*Y-){#B6?HST#tsMn}RX!MAIlh4VE!oYYBv)9Sa7bx}hZ+5wOOV
z_<c2tv{|lOvbm~Tv)Ng$+0+Il1^#Fb=HjK8orG8*p(!Wl`&FUPD4My)1-9!iAIGv`
zWv2w6xHdGL%6Jz%rS$dnoYLAteJ+#i7g~$OlFLQ1UkIo9Et5_3*DwGSk4#PzPHTls
z<tCig7nu|jPV0|MQ%yLPEmNflr#i?q*Mw6{GPzB-9CIX7O*k4To0gmK>`w=zKQQ6u
zcB?nxBePx at Yc}ENploV2;r1-b*k%*%FyU<`T=qGMx0~?MCjFfz+`PU#VZyI6>F+k-
z;wOqrpE2R%O!{j3r#3Y;<bm-DQ#*U~A?aU1sJ0)q9Wj&!X2&2Jn4;s`G0BY_ at y#U6
z^bR0RxtDkg at uxVyo_HE6nI6vnh<F+znLV6eK|BqO%x=!#K|BqK%udeN5KluP)5iIE
z#M2PSv~qqH at znL1dd^QLp1M4<ob!{3r>@SpIe#tj)Ww-f&W|CUx;CS5zKnS4(u|Yy
zCB#!#W*Fzc#iK<tbz$brB>+>-5>H*1>E-+<#8a1LPI3MN;;E}LJ)D1sc<Q3e9?ri;
zJatWGH~7^n)oq_X0j_<Z)Y17FGHPm#O--IrQyZP#e}|_FH977r1-+A6US8FsCTG7!
zOmf`oAn9k}K}{`u9{H+sRXypY2(Ys!dBm~(Tk at 3rAbGsof?RqW7dW>6k{6&?RH~il
z^t#%rm#PLl$+!1WckSnje)8CUen3qg)0e9$(oCL6uYrPK{*eA}s3hM at uOQ8BM=AEI
zp1ao_QB&h)A`XP(L=6u<i_j6#T0?mXNZ+g7%K)bL8PFJl4yvh9?_Z;^?jKy`X8ZpP
zz7Fy*{u4qY@~4o4(g7&#zh26_pMiRMCl at W;Hwi7#NCs4m^u2~biVP-Y4YtFe at 0F^4
zU-H#^&@O8G|D0LA%6FpY)EGBYPaLY}<V5dqxJ_Oh82HjLiJkx$d*Q_7dbV1f(F1~Z
zv8%}sH%@qgBs5({uj?kkKyQ=OUw4FNNs~+R2T8tK-S!!GaOjd14ybnzrEga)$JJLa
z>Ep8AMo4dtNo?H_xb!mCw(zB^6~+>ySHmzJK{u{DK4dQ-%NM+)Zl^+l-Odt2`W}T{
z*4gJ|FmP&J=6=`=#)I*eyr?EGVBVLfu2S2Nly?1e;L at c_U%z(!sVQwpdM0^TO at 6H=
z^$OdePn`eU*2b8_dsyvSS&}@YI=t_&Lu&iGR&`om+WFnUK=qNW6>7r;wc!+v51Tse
zEi4}8YS-3<?Cy1$rO+_yLFfw>G#f at r)6T(oJa>84cvgE>d0y<LhFYn1P5izu`5h)j
z8gr~^r!VyYT6#dg#xV(jpw&||)0;0~NObnA$v-5{_)gRk%zW*~Y`$$5d#Bg4#IJqT
zrycG0V$G at Q_gDY^gtvmP<c^0vLjWGf-qMN%YaP1|El?c04%=SUE2zhO?ME%pb#$D_
z>Og#m6rq#oT~MZ<Ua+<<`LW}%!!UfTr{i#9e4nxt?uJ3>G4l4<;f`1JQP3RjYd-;R
z7dE}`Y5U2*JV!@6oYtY;yAD+JB3OU&qq=Dy`jele*HKjjdhis+XwC7Cn at NT7`PJFu
z==cCkR;8cD{alQ2lAJV4%4lj`CnV3BC6h@~DkQrg>FjrO+=98%z7-9Vn4_j<KR8iA
z8M}CJ-8VrWGk3+eH1TFPK-67rK(_;;)<kWxA at OzRO$e~=cq?p<?bpDwmyd<6RTazm
zB=#oHr61+)o~vjh+s<>2&UR$H$*-&W(>93ex;F6k{~0Y9DU?AK{3jHI5PBydgf<?6
znmn7{_YDv1WkUbT2<&NswjHG*bN4#WTF*MqJs$0dFL at drW^_U41Mo|Qyhy=QPyg&J
z=6T;PFAB5qh0wGLE+&7dPPy9NV{vqRN-;yPTum7j at OQPAs$F9%)h=)4H~#9gYI0SD
zlME^y5B(!4C)ZZY^(VJhxchEixNPZSUtL$zfbLp|+!ACj={GDyPDA#hUhZo at Uh1#b
zE1Vne_N0a`Tm=2Z%XP^w{qq|uDmT5qpMLueu0=)t$&b_Dou`&g{JO4dYsD}ODSves
zh6mFBfQWsLgLR0LohwysiQ#SEXpYVUu*KA{^u48~D5MlZl9f=wl%x5F!xULtx(&WF
zakLX(ry+4jNfSwa2#MPDoH0n27!5yz1fQcJu|$s_gAPe!A>Dr?MNI9S?uXo1$6rSd
zN?(q~vV4P-cROi3pCpl(1nH;9f-mHMkDRZo<r|{`8c`r-eEP!I)Brw5ZNGoohid!9
zp^k at tg}~bThgJ1>UOe_U6Sq|#+jzCdad1`XFzP)|)f=^;{zom$()ST2>oK+Achpf+
z)l}&*T5^a{R4i?sFX;~N{Ln~8M+)Joso{N}s$D;Jre8*ZSnHwU=-5k=t}W>5cl^mq
zYSLe!rk^Bv3OO1fO7~pUNKIOZnd(i3MkYfTU0AC|^3pJ`zCAZE;H~a|@SZyz2iM*_
ztnGrP`_pf5CoHw#35 at rXPK9?``aP)jy*@u=b99EWiszSn24Vz8Wji|WghJ-u(G%S>
z5oF&B-S?xx((9m-d5X|5vA3ZZqdUCF(YlBAH#y*0<4d0Nto9|}@T~H8P1!z5!B1A#
z45BO1%2n^Ghb~&_NiqG(SJW8&`gQX64U3pRdCm(T17lC)=ft8`_a#1|2T0RIG_Chv
z96<}xGpBgOv|ukosVTI%G1xj!X${2UL51%L=PQw at g8kTrpdMG6qKQZ&p6a9?*HCC%
z7m9398lsV=&<3R`6b{Z)xIYD{V(O+)xUnG+Yg9s!hH#=WIMYx>3$2a^HbB>Krz}9(
zWPF>lz$g%zhL%RWatYpM>>3J}E6h-4uDpqMpf^!ugBm<6CIi_Jj09r=J=i!ikkF$P
zmaCZsVhznR6D>2PQlce1!-yC{3G(+qGw;jdu8qMMi$@c&hM+bjuFPAgOo^A3F%%pZ
z{Ms_608~I_n0%*AD-Bj5rqwO;uJ+eTq1a@*nx`piS=p5MJT#>6HVuvknR#UljbtuV
zx<_H5xDsq>)wiJeEEBBr-Kah-WCy+&7}x<i5d&!fmWaQ=09^}y2gc)bgk#dva{F_P
z*)ZfIF}I%sm3tY>{VSMdv(qwR<S^S#%P=S5^m6J(_?ZqWQ(=9^Dxg66QxQi!{4%?9
zvAz5b$B0d~Hg@~9^QYfZF`0baiVq&Y*eUq!Ai!gHK2+kdm$zH*uveD+sLWoz*zWY$
zZFi3F$}Fk*@!5*cRMclH?P_Z5&PPgW?Bx$zYwSu_X^nmAjv-6zl at AT|*ypwnTWa4u
z*?LP!nSHLuUg at z<g${IKQ)9PzM!@`LeEticw-IlI;vI}*iG7cy<NyL$!~@~#Jm&A9
zHWg1^K~SUoS}MPm%CDvJRVrVl^6TvGaG|n!dwWsda`-W3C^@^5uC&0F7P!&^S6bjo
z3tVY|D=l!P1^(16pp0}IMMx?Nq(?zYl8!W3R&R6joIIoWE%xJ-#`AA{DfK)zLGbbn
z<yy%LIXxp&lJc)E4Md5rFLC30 at QnXtslm&$o9!hAZ|s^F`xv^E=vkIhxj~ru41yr5
zz|UM?&vWvb^Sr2_e4eL01SNTP)jZVAd5J56mvO6H%9uP8lI3Gt!RymI#IVQine(ze
z&j@~xkPA0|aw6|7<QMd~=+~zO-7DyELEjYgBSFszI&`>EzpDkkQP4SpE*5l+piP2q
z6!alM9~bm#LH7!JT+lZK&5wJ at qDAwRsovoFP#~hrcFl5C&8YhRG$W_Xs;rt_SzT4d
zm at B@eMGve8)nf*2mN^{R24k(v6^ZIWm#4-zLl0~a+=fWPwLXD8{)|u~a}n1Zh&MA=
z<CX~g8B~uM66})Wp=czB(IATj!vQi7xz at 1GT%ia~s9kz+GrpU^Ko)Hb=mF*mHfv3>
zKub_-ZiKDm3=1s~iv_kA7BYWt1JvL>&=P7u(NQ?Wmy4HTcw8TkGgm{jr6m~A^BXUZ
z=O at J_?mW~uTb@`Dx3UEV at zU%(HaoN8=8l}dx%f~f=XowZj1`(6R;(IwUghc!XL5e#
z;$=ATbDJTaw_??h>zP?-Wg}Ue7~i at 0C`KnZ`N_)cOs<1wnUy(MuUH>*aVPHgxXlpH
zTXD0&Hm(qk<36!&nvJaNDrPH)k7aahlb at _u6${OOD^Bp`IltM)id9gqm$`U3+cUY|
z4Dr0xbYH_Pv@*H+52CaVma at +W1`#7izcUuR9mtQLeqT!1DAqQ at Z77Owm%w}SaF4)Q
z-tXF7z%7XLl!%|=pwxtqr9gXj0jF}azmuel^w;=U=tfRnJJb1Cp?VzxPJWh)c=$UX
zU at r;0SK$1e4zRcJp*ZOkGEd?MhvF^dzZbX#<7em9ZsZ2jXUG<6Ptqvl=UZ+%=CW}$
z0tH(NjGwU-P=R*1iR)iJeii~BgLa^EQA+Z6xQ^o-%K6fOD>;b4{1|wl`$3Oz{maMa
zlfdcFJU{&_a3`J`dM4NBi2j4?Up}w*74h>*5&XR(_!mX+;b;)57acTGlFu2VfftIu
zq6ogI2!0oEs&D at MZ3Ir`rt`|ZuZW*E;0lj0_v;bzQ&P at em|UMD_<0dOzaV|nI$0{L
z4s!ibj1JBz at pp}&zbWG9gCh8O;7-)*yr>s<hOdjlzr5!v at lvaypFbX)zzeoN#|M8G
z_&ZcMn^r`Bei3{ba76}Tq76m#6GiYOaBBbj_#Z3c{}-f>_BoT+ at 6U7pm;XM#$Z=DE
zB73?B{*~~5Qj7;Vo>@aokL!u1CKp||yJOJ`&F@>eO4D$z5DRVy#qmt0=`9*=*F}PH
zRshnp#;CR-99<s>YmIs|7S{ra%?uAZt>GY!JzR6DZ>@so0!kV^av2X$8Xk&bTW}SR
z9=RG5EiGGMV&XJ<Qp;84=ST<|kB>3BK*$f2G at M_+Z8*s20g)asHEr<<PhG86yVQ$H
z88wvo9H)&;^ZszDr_Q$sS|$m<Daf=X{$({DzqV}g;+3_lv{jxOe=WJ=mkAr<30 at a|
zmC)^$mj~&dpypduhoEG;t*To at 4Y?|?9w8c69&`2SS<$$K$ZtyK3bi1Alr+jRu21GF
z&}mODV%&tx#pIRDTvQxj8TTl2MVH-~%oQ6qICC*{_+U+pqc(XhGhZ?1;w9|jQLQ-;
zX+#5&<JK*M`nZEhv7_BW5iJo9qRR$5fVxcF8y&RZT_7%s=App|%thyFcsLh%<92DT
zF25#9N07O&aicXC)9%=)tq}8OQ8*BfW75z)*jz2+%4#mAX&4-Gn9`^zIA+9QCF3I$
z)i>_Pnl88wI=v+;=GSM<0^=s_AR=zGUcQ?A{}FoMV8I8=x{*rUf*M4=Z!kDRSLTV{
zfDi5QrM=wm$ou;WWacD)rzD0wW{$nw7cCGDE2N^J`SxDmI0}r)^6N|7K<Ir4Cv2)g
zvj6*#T}K7J6m$eW(tdl18yxO^3cxKWy+@&TlJ at d_#TsB(s<ZZTKXy_C`Y~kYL_W;v
z9x(KdLzXZ1ZF}g95~<Q4+4!ZNr1wEi?@S~w_jkR*-Yx9&;}<Zy9~lZ&+ABldT%?E>
zM=IwA-z(+UzXNizuMv83zsPTj0+a8FC>+|O<l8?CjM_vLm)%#^3&s2$5S3+4Nib%6
zx&Lev_VsxU?i9w7?#i>5`_$gyhT>TnaGsrD*^_zpazFc9 at z5jONOj&;Sq7Qi_)v(l
z{d>i8Td%PHeO~-|;jm}&?B)Jg{vV7Na&yXWzr7He%a{9Tn|Kkp<Bycz1A99 at GzWN6
z>IF4Oe!TfSouNDMk at j+5Zd3km_Qrm1&|dC;aaD(>{PObo-$9GUo-AMP^UD=(p8fwM
zIX<Pm96ujHjhaZ>%l854>kWIUZ*YU-U*dgv_VT^K8DZZe4F#2Ul75+IFZU;VCL0Da
zPU%M4NuKttgvt2j^KXx^pPOf(NJByCMFiEqG7p#bH|F7_OG(nv$jh?1Kzw~9%C|{H
rf#<O~W7lkd<_3e?F5>?lSc*|rN3P#AKMR$=`DVj at c;1A`FaLi5pUS4#

literal 13875
zcmeHOdvH@%dOwm47-J;yaN-aGm&BxY5`@hwHeezd8Lp^IC>S;m$hEL#tc@*sq$|ML
zOae7#Q5C0jH{G&3ZI-6HX?CaW&<sNfO|e-U*kscw+1YN=vfEIW5DAmUn+I{S0r&Tv
zdyaG^teO3z{g30({m%D0-|M{Z<M`PI-x{mM!ep|tRgAcyDJ~8fS7h(ztiWp6WaeUX
z*qv-5kO}y?cnMJ>C+Vm#EoqUED*!FTuf}QsHC7kTNIKhqnWQp8qU0}=Tq0}GtG5}f
zq>L#XAU%rJF^99D%{(LNQ4vSc6r)_~5lng&La##TNqSBMCaJ6+)s22l!fun*1&(+Z
z5$5673?*4g8{XGjDL=cEv!E`Xku;y)A3=}e{C$%{2yPVq^0mu|sGp>QWeYok+m|g_
z*wMP6BN&S9Ua-4n*@9(DoYAmz5wADdC)u^@H*-(29Tjj?znS>a7 at +cB{qDWPw_jG4
zy_l$}pZ?Nl>1fp#_mezzCE4KhqKw61CG2+mD(`x3cJ0RrIXr-5r&qyF&xSas<iYRD
zgU`={_vXQ=-sAc0&VwJ$gIDLl_vOL=3Aln^Zh8p7c=4>sg9r2A+w<Vh=E3jCgVXdH
zFP=yq{JA`MV;;N)_%wD0yPz~9$C#Xtk0VcbG6!cE$1OB$m$AU^pw2Y!!&+BNZ(&`5
zNF*F#$VXXcr at xCu^+-n`#5x0=EuF-*hGRPCy1H4XzoR4E!ZfW#@9qj{+cn}K0voI|
z79w>`Yug>w{W@#g6$$DA*3uD<23WWYCfm9q!I0jTR at cKF;a!0UH==12pa#u|u66o@
zkd6cb5Z%!k4hdLeYkl7O)!HKG;&iThNjkg8xs+PMI?f->!EC$`vy%`DN@&W-bz(*^
zIF)AZ8G*g<XWzlJEMVsZADb1NOg_$or!+dZnNym(=_M6;*)Oz)i=~>&$$lZ6=C at 2`
zqQ52qpm=0bOt at HLc~ON4FOb5ZRVJL)ADL=QIQf>zWx}ZrGN~q<Vv=ct372Dz${sP{
zXrOdzHsQr-l(BXbZf>_O6JBDH-)+LtLFu%|gxk_6V+TyQ-Gm=B;j+)E_>c*oW|BW_
z!p-yf6%#(gB!9$&)7mf7aT6}KJYJ;sTrE-)6E@$jFtv9;pO72`to95Q5jCZ;rS%XQ
zoA1HZKG%gD@$Dp$x-f<`e>w3qbW-OyzleAmGN}R1-$#4_ at kcm+H}Nz?QinM|i+CCu
zse_!KPCN~X)E>?k6Hh}S)x~)$@iYWd&7A-8Ht^K-sSTX}n0V^)l#BCMh^MYjRdN0z
z at zljBh4cSOJaui#!TFyPPhFZ~oPU#e>dMr}4FL0hLOgY0>H_Ca5Kmo~I>-4}iKi}0
z4RHR)#8X$Lj&S}Z;;D;Lhrw^&r0%_X2;APf|3=WOA6~!4-upTDp0PrE?_+3JHL;~g
zjgP2_osRyGX1bUfFa6s&=(WU#vg!dfzVszx;-!BBl6(;s)kNJlk*~g1J&;_5fO`kx
zgZ2ZXFsa5b#?SOqS0yL#0{ej at 1Sj<JDz*2T-q=w6M)jCG{_bnkeJ8l!O0w89I;O@?
z>l+No_}S#W5D?5q$u}Spe=k{2l6!}!F4Y5%ZyQt-rDJy?v_##7QiYwofzT0=&k!yJ
z8GgI}`v8+aG9W8KCn5fi5Kol8gDySUHG?bNj-q~wDcOgdnwa`LL{7{DaFT-TAB9-*
zk9kpD0zQ*l(h6G*g>9rTH?8n46o&s5h8lqPzXI;W{jxAwOUk_RbCI*pWz`>g<8MEK
z)>C^fjcjQ0o*lR_-Nn?ir at A;fs}#firt4#4pSB%5{%@FYo7DwB1wp&n)cE_mtlI{U
z!#ba6pKj}?qOlA1xqApZPMnlKHCh09HU1Oz)Rl)+%Q^M!(HN9Zkf7T8bN$n8Dmsws
zUljU#>f$pM#$wYpLo at jdx^>%`2|EE<J{hF>s`k_!ng#)VPCA5{oBI{qWkY`K+_uy=
zpn^K4q6T$0!O-<hYW$OA^;c-?_<P>?Q1V`6-L*qc&r at 5@HMU$*<NxKY{Kezz`ktQ8
zwz;>acA!|q^Z2&o)O7BxgKhS?9%R1e-s0Zu>wDlqca!^dHjgSx_V->*Iv8s^=uNCF
zS9`}|#lxjs9uC#S+~lAC4!(QO$40zo3(H}Td9gHk_kP7Hn_28<)#rV+AD;D;^M$%G
z{*fC0AA8Ro1>9ck=l1=>7%L(k`>}~D6}@ETR=sFtvAy?uG;n*)SbViNVwb$}Yb%%A
z_eFsD;-9H~ua{qdC$;i3HGU;IND&C=q=IpJX5Rx;%##0sQPDeK-**`mO-t0#NbVOU
zZ<$LTqmmzrl2^?o5h_WDl0zuzJ#XK)3(@pEjjF|#sfnehXDRUU0uQWz7vwR8Ui*^f
zz|tS1s6TE%F9V|XfQ at uWd;zFKEwBK1%8Tp=mccTndXd`KRKCF&;5WFbqvd- at ulJgL
z-w-T#5)kK0foUCBLXxoKP<sX}_I=-?dO*&hCJb#~Uwfh2S5l?+d8)qf)uz<Aue^*D
zs_gq;fpuT}>GB$1TrYPGKTwB7&g<>lHl{DELvAgyH}vv4<TPZj>vwp2P8a%WJIc#;
zKH*L at usT{5V{iE4!|IBy<yE^boS^OC<lmw07%s`w7gWdCo4&qpO!CFAt6cH*<hKy9
z{n%!N$yEEvH?I|{MX||yzSQi!Pg3wbr!B+3 at FgfJG>S{sLj~ffKA-#)Mv*N_K8cLC
zZ>PnJf%VN7G09Qu66*dRQJW=}-g5`K;T-P<HU4pOHpGEWCG?`vIg<(6J4ECCam*I?
zHun>5ZIEpKGxZlY+yKMFKcwvbQ)D;(@o*WR5B6jA77XB-7{HE|#d?V^{;{twVriuD
zYd>a9t$?Ea*qX7_LS&5f^idHyYVi-FV`HgRnAuqB9&;chMoZnj)OzGPxgMg%NLWHa
z_8m0_+FuxfZy at czhh1pThW3ejq+)*s>?9pr$Cx$A-$2+{qf^LHNSI!!zr at Pm>kE8g
z^w?3@^~FC(J_w240k7S2RjvHB+H-xP{rSn520b56svdB^e)_Lw at 2x$(v($dFsbCTf
zH&69NPw?WmEzC0ff!ls;$k&1y>M5^K6NRT~MIlB}<EPZ#H*~vag}=nUua6orF?sl^
zx9=H8auWREE(ap^eY6a!eccXf$oLH!rfTw?&#8{c(U4a9H=uHA+(Jx+C+;ta2QeM6
z=#_A9n1K&M-c$SjGtKMmC-r+Kx%b at A^v2{g@{(ZniIqn%0)AstXwkAHXF+)Q?G?cy
zd+*n&Cvtq>k79&I-tE0!2&8VH&H5K2%;DqxZ=%JLhpqul68bu^-Ow;P?OEj7oc6i<
zAWSQsvEIhV+*{E0?#<r#zq^}!ee(}YQLyUvEg-tdSNVSRdG*xw0=ffCe)bu)%!m3M
zX~Y-5;)`GNz{c3jU#UHV7PWRbc7<*XO=Gt$<MflkwuAg$5)y+5!h&ZMb7~9jZVhxT
zSGxR>Xh7l5d at GbtSi$qwj({Fj+QP9=D{g$G9G6h&u`L+dp|pfUZNVK%Td*UrT;XOF
zr1FYg!H(7zf236jhFUset$~GxAR0~Di3Xnvgxf0c+*hg0t5cRJ;fS&;5{At{s5R&h
zg#yv&L(2SncEdNN%~Agj_%PI!m57;~u2NPSfg;n=*@{;&fmMcr^phR0P(!TQ<!$t2
z`Ug~_jD+D=R$xaU6o~lsK<h$(Ob=6aobAjXX=z^=>s%;>Vx1iejGCfQg8co^!Y9+X
zb7vsJqTyJiC7{iZD$DDX`O)HH2FFpsZ!KmDKm}BW$)CV!nZ+8+w8n=$n|%$kP&|A)
z+bfl=tayHOIXXaCtAybUv%Hw0k<3n|c{mG3l|W~g-i_uXKU90modqjgptPF*;FGa2
zdKXcM0l5-u(<>PBTfx78A$}C}66jUXCM-uCC?5hn3OW-QCCgJAnPs=ba%ah;qJx%6
z4#H>S=YgI3NI<0V<r$-!43c*sj%HdLZH_gzvUT<;yNdR(hi0v~Z*lqEWMT<^m}cx<
z*j-0Jz0L8Q)om-=U*NGRJ%xc{TiF_$quy5Jn*!8rbF8(|!-@~Tr|}zso}Zp}p!cWN
zdRy7^1@$(iuW*g6;<*WHZB_dxdTcd4lh)b}-(4_bEw<ITZB=et1!N!#9T;}g!^{Kt
zy at lTZ;{9ui7oPT096beVZAUEDw-Co_o5L-{dCXry>;i5G0-%Qf2J+uP{u{`@O8!;y
z-)M7njOUxTw+H@;upDL2bTWD?-D-hbEpV#^ZneOz7P!>{<F&w^5*LS?1(h<ig;SEW
z#9-N>A{Woech8sb%83$v|Dhzmuij~}>F+VK1Yah;r_#L*CAt@(^x2KEFwsL+7m>_2
z-w6gU-^mYH4IZ~`JbfT2-GfjnGYBgcRFVRjQJQ&9-YdxO)bc)z?)@m;ZV+~OqKoGw
z{)pgZ+^Ue1 at A{>GJU;UJlnHq}NO4}a=ZN5wqJF~6|2vW2v2z{$QuOO(L9Yoqak7hx
z-X`e1f-Vzuji6fuZ4-2-p!)^=j-W3KdQ8wWg8ov_%Yt4LbYijaFDM1GcJ=DzN(H_o
zS1L=KHO at uKqN?g8Rn?2Cl!}dkRz>ye2EL$rStVo6Xm_XX-wvur4B9Spcp3{tx|lN*
z)&ov=y?24`-yygip_p at f43BjSg00L+T)RKo&YZ2?A=oph9x+PrfD;XdLs^W5vPhuA
zPYNQ})uA(IFochePCc+2*ETRH3%B}pKXV4!wYG at AGoZD%LRWHzhUSk%{N09z%zwQF
zVzBP-47R{^7zS~1axaF(?a?T6wuC!710kJv;{U;g<~5CBIe%)bE^wK19dcfC5EnV#
zB~PzxXf8?pCaViv=G=tBxy+?7ljXT;T+RBr)x~jL7%b;p=8~)LK at lE#!qUH7Zw?8d
zLa54bgGCurJhvX#DfmhK0jmofo_hq~5|q{}s=L&e>%tabv=&KyCg;C!_yNkyDYyNe
zKq0LqQeUngNuggQlx6%<PSPh)PHU6o<@!`67Fd_i&y8Qe>?vfZO{KnE4<8Zwst}a^
zbL+n^M_;b5hlRdek4c~QoLv3qfl-?X@$`OlNC?V(1|mG=_J16xS${yRa|1%ZIj6z#
zl9VS&U&zr{ie0>1DdvO?$$$+u{XJc<?0d+V{mcFHlK7}9_Yo<d8~<UUFWY}a?7t&I
zzfu+m13BTaS90{_IU{-g$RqS5$@PCMN58q$#YLONhWlJj`{nu{fV2%ixgX2>1$iDR
zS3Z}gcMNuuzPz6(6X&&Z<#YLWp-Ul3|McaFlJa}%{~EG1_N2btPvv<rc`i(jPw8Kd
zpUcoS`<Le?M(JZ9l9V^N3@`Cv6qxmy(rkz-1{p9&`YQD#{S+l;{Q;prpcpE-{hiBy
z2{E!I>wiJ$4+;Gm>Bun01S~kLUC5FDsx)F`r2c{&oMb6UIt_X0n-_ at 7Zxtg`Bn1VY
z!*V-0Q-n+I!JPu7!y^8>kf*&yR!6SiG(X4luPj0V(u|x2%k^(ajen&RI5k$+O@(x3
zNA8p6!U9Ah_rGksFnu4LjZeTn<uXG&UqB;T?n9>10_?PMe=))ETEyhOk&RDgazDt%
zi_`bf+4z+7`kjrJFu5*g<5QVZ>@q_<Uw{=wuA}C{0<08reayxk>2sFZ_%tThvuu2N
z`ne_>pTXq%la0^BdeUr$c)kEnC33wm7Z%`Tlw1e0aXf{H`IU{AF*$Fu at yt26Y&>^Y
zH0Dzw`z=k!tVG+Gl}%+w#Pi at fQA*nj;cTjlBmA8)a`W)B(9_?%W{%4VL(|EE_Ma*C
z2YElR82EU8S8 at 59+wBj5li!gkF61()8Ck*=5vMGP3Ox6DHV&NP91-m)=j9=e-`tP=
z!p@!?`#<CIH;;#W^}534r?KR1F61(46j=-2UXM3U#%rHK9`N*=##<?H%Q)j|j*yr8
ztMpvW<!>HWYk^Nkd(ue~N^*_-8pk=5bqNAjvJivm1wP(+%<ppfo5$@BfQws~ENjPr
zJMc6=lr#SSh0EVO-v{&9c_$B^%7b6egU>*NP`&8D2PL^L+zEWV_?>z1#yq$mIMp|I
zUWb5_-=ZA9u{?JE1h~Q@%)We=>{#t=RP?VbeL0UEI%+Y^w0_EM?WbIRDx;%Dlmh&U
z?@xK`T+M at 9v57iRuQE|DVTMftPUBGiKZ3+<LOypq%;NG=Dnp&Zj@&Q!Hz^b^&LiKD
z2Y(c}k};dkb>@+OHV^)7;M1&Sj1Ehg)AxZZW<ca$BYCusBd6a_0iTX1Q28ECs-ESz
z<TCVf9(+vLPb$q^SdM4$k=04ZnIjQ8`OLqRYxuyb(HCe&uR-WFiXMpS&LvA~YFSG}
zkLodegQo-0>sD{neBMn>nuagDk-&~%6t7q`y;H;aXME#k<3O6$8rF7ngtz-Uv{pSF
ziE94XZie?3T^#{@fOalhym&Dzk0XSLLP6twh=z9 at k!~E8rZ*_9vChtJsF*m7Uc6+9
zYTBBO?#2eKVZ8^z8j;I<mT)W6Jddt-H+ok?%2dM7XftiC at 8Np4PkVUHnoSK&T9dop
z*Ffg at G47UVjK|0ial2gd*fyQe*1S!PXjR!BO^vImftvi=(Z<GM^K5x~rDL4`=4aHi
z3$*}$<74<T4z6bl(D(Fg#5jYVjmg9C*{C=oV4PsjF1qQodUmmKc0L<JM`mhb9A=OQ
z;&TPFj=V!J8rItVp;j~y8Sd)N$m8 at o#g29hhO}5TfG*2)0Ckx-v7gc4T_BF==b$){
z!9+`I8s4Faym78STb3Wtr^6xHu<^eH*_gI&r?yedht(baXcUuy{sSRf%J^r2Y)sQI
sIOH&;Q8VtC5ywFoAEBte at t+B%e=W!urP*Zq#|3kN at jnb1gqrDp0YDI<%K!iX





More information about the Devel mailing list