changeset 23869:5a4f9c5c1b99 v8.2.2476

patch 8.2.2476: using freed memory when splitting window while closing buffer Commit: https://github.com/vim/vim/commit/983d83ff1cd796ff321074335fa53fbe7ac45a46 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 7 12:12:43 2021 +0100 patch 8.2.2476: using freed memory when splitting window while closing buffer Problem: Using freed memory when using an autocommand to split a window while a buffer is being closed. Solution: Disallow splitting when the buffer has b_locked_split set.
author Bram Moolenaar <Bram@vim.org>
date Sun, 07 Feb 2021 12:15:03 +0100
parents 1a97398d5e5a
children 9d77df979a7e
files src/buffer.c src/errors.h src/popupwin.c src/structs.h src/testdir/test_autocmd.vim src/version.c src/window.c
diffstat 7 files changed, 23 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -595,6 +595,7 @@ close_buffer(
     if (buf->b_nwindows == 1)
     {
 	++buf->b_locked;
+	++buf->b_locked_split;
 	if (apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
 								  FALSE, buf)
 		&& !bufref_valid(&bufref))
@@ -605,6 +606,7 @@ aucmd_abort:
 	    return FALSE;
 	}
 	--buf->b_locked;
+	--buf->b_locked_split;
 	if (abort_if_last && one_window())
 	    // Autocommands made this the only window.
 	    goto aucmd_abort;
@@ -614,12 +616,14 @@ aucmd_abort:
 	if (!unload_buf)
 	{
 	    ++buf->b_locked;
+	    ++buf->b_locked_split;
 	    if (apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
 								  FALSE, buf)
 		    && !bufref_valid(&bufref))
 		// Autocommands deleted the buffer.
 		goto aucmd_abort;
 	    --buf->b_locked;
+	    --buf->b_locked_split;
 	    if (abort_if_last && one_window())
 		// Autocommands made this the only window.
 		goto aucmd_abort;
@@ -800,6 +804,7 @@ buf_freeall(buf_T *buf, int flags)
 
     // Make sure the buffer isn't closed by autocommands.
     ++buf->b_locked;
+    ++buf->b_locked_split;
     set_bufref(&bufref, buf);
     if (buf->b_ml.ml_mfp != NULL)
     {
@@ -826,6 +831,7 @@ buf_freeall(buf_T *buf, int flags)
 	    return;
     }
     --buf->b_locked;
+    --buf->b_locked_split;
 
     // If the buffer was in curwin and the window has changed, go back to that
     // window, if it still exists.  This avoids that ":edit x" triggering a
@@ -1718,8 +1724,8 @@ set_curbuf(buf_T *buf, int action)
     set_bufref(&prevbufref, prevbuf);
     set_bufref(&newbufref, buf);
 
-    // Autocommands may delete the current buffer and/or the buffer we want to go
-    // to.  In those cases don't close the buffer.
+    // Autocommands may delete the current buffer and/or the buffer we want to
+    // go to.  In those cases don't close the buffer.
     if (!apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf)
 	    || (bufref_valid(&prevbufref)
 		&& bufref_valid(&newbufref)
--- a/src/errors.h
+++ b/src/errors.h
@@ -353,3 +353,5 @@ EXTERN char e_missing_return_type[]
 	INIT(= N_("E1157: Missing return type"));
 EXTERN char e_cannot_use_flatten_in_vim9_script[]
 	INIT(= N_("E1158: Cannot use flatten() in Vim9 script"));
+EXTERN char e_cannot_split_window_when_closing_buffer[]
+	INIT(= N_("E1159: Cannot split a window when closing the buffer"));
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -1941,7 +1941,7 @@ popup_create(typval_T *argvars, typval_T
 	buf->b_p_ul = -1;	// no undo
 	buf->b_p_swf = FALSE;   // no swap file
 	buf->b_p_bl = FALSE;    // unlisted buffer
-	buf->b_locked = TRUE;
+	buf->b_locked = TRUE;	// prevent deleting the buffer
 
 	// Avoid that 'buftype' is reset when this buffer is entered.
 	buf->b_p_initialized = TRUE;
--- a/src/structs.h
+++ b/src/structs.h
@@ -2633,6 +2633,8 @@ struct file_buffer
     int		b_flags;	// various BF_ flags
     int		b_locked;	// Buffer is being closed or referenced, don't
 				// let autocommands wipe it out.
+    int		b_locked_split;	// Buffer is being closed, don't allow opening
+				// a new window with it.
 
     /*
      * b_ffname has the full path of the file (NULL for no name).
index c1d3639538c08fc3564c6e3a0f1cf1f6322c6b58..3109f88bbd673a7f60829a5f2f3bbf5fc66de7ee
GIT binary patch
literal 83371
zc%1Ehdw<(Dw&4C7eTjuNZ74aiY{||`zu0p#shi2(Ow!w=O?Q)A{V0i&Igv<(q%6CS
z{p@=l00@$xMA=f?%ueszSR{di^TNTw!2wVgZ@oB)#W;+FyGX)eIGee_D6ZAwa1jkX
z5ns5GH)>z{GxcV8;SE2TFA^`B^%sdhrI)qwA{dIeH=KHIu$cD;i}Bct;zm=rgD^^J
zg4!Ack?;c%xxvJ1bXo#R1yRHK%4s&Cgb@B1Urj@I<c%6oxGC=5RfWEGnqu!1K~Pa4
zyen_GNIc;TMti~$ZT-m$M*g@)f1%MD{sH79ib!}LFz%21QQr%IiUzhlbf;6{#<3SA
z{jocZy~brPQ>s~mQg!k6!jDBfjQn{bmOj)8yh|?<k>?ICL~`MYnF|C?!*JdLn1Pcp
z<B+l(Kms@Lfc0K1!oX{%h}H>9;uwN_wus^|`g=GXv9M+%gOv1RUw$Ndo?)xsFM=Qa
z*^A&Uh{_M#siJck`H467r(WZ|11&o(;UvqD{#-<!=X``;KjC)=K~22`@C0N$ar)$m
zNFskG&R=~)td8N^Vm@*cFY#yIY3GREx(gHM{X(NtKkyn(+i6lm;UbwY5^UY2_84}q
z4kLiY{lHIBycT0|D)MwToP#%l3JNBpC4Tu$OPLfm24;WquHyzkXo>psdiL|u^%MSd
z|7c~!$)u#Fe)|qyd>ckjNw*rm9GodN^FA*C)%Q*Z`3(v*B0@Dkn(q%fy@Srj=4#CU
zxrO$Dt=&>2y1yq9@Xv86CdWBU-X!5XD|c#AeI9wBAqYWhO!l<`T=*b0Uw237yBBWU
za8Sjg*r67v1D;>`$%_E#_(wSM8vcl_7(p9*9&@Pv;mLVCJR=TikP-m(;30LD3+%x@
z0c$Xrx_AXJL=uWwc<GTP;G%6?E0f9dI!NLwsS|$OJtjTqt&@odwj8>NrE|W3-kC3W
z?^JYbox6LKwo9z&$B7Hrc8`ugY*}77HcmkQhJsgn=Esa0z=&WV!lf2L4nIl6o=JrT
z-Mf|9-Cz32MV~41(K1Jixsm~y(QiFBS%CHXXE@k~VCv#o7>xaBMm4Ej7!)tVPXH6f
z4i6aF9}Yw~rti?G7=>PpL&?aG0TG3SDMc8Bf~370xp$5X!2>!{?9?TeesJ7{f%&h(
zfsscX4uv<o2z!p`2?u{UEjd`@e;>pzj-<}%2{Z!h)#$h1z9dZ=CegHiC3WX_>wul|
z4w%&v)FTmuiI8mxcMR$-p1uA4<-t!j-E}`ad3NyAS$#FLkA4qkzn&+47`*Y4{tU<?
z55mAF!6MKZqsRwC>=0l4U;<jwY3i0W2>E6bg^M}1-%s2@41<Z(RS=LaD&!{%*IT5*
z(hF_WQQd{}cW|Spz*8*ljU4Rx_2zHQOpD5SD)?gHANGhJNqqWH#LLtBqKAqegO8Y8
zAU*6b5pq!OACePNGFVeFM{D3^512BGC!l_gQxM?T^{3FC;`tPPr6OR|t4_C9D*A^l
zaW{#}zB*7}wJ(j|Dz5KYxinb%b8k-*n8bI}*3z-Oge7Z~<0vyI)4V~{b7Os~g5X_%
zTEpaoG*97~WIpxjr6h#h@jdfF{B1G*feI?O*d2`;ac}B_qG%xXX1>lhM5w(EGoe`L
z9q<i&9DAiDf2^C7AjhR&jRiqt-hYJWz+2Xc_tOvnq04>Yk49c_3U3FDaLp$D_Xa^3
zOhJheesiP7xbE-Tq;6;+xwToFSw@=}pfM^@8!3yD@5T)A&H3{mML5JU2)za{r(ktJ
z$7AdVZ6O*@6QI<EY2?H9NgD>&`vRtuRIF*}wA2@)CH98gLEv4n7X-h(k)QA{@LS@f
zmRJAPP^$NdCmc376S8JeIX^FayBNAHtTcBgo{lKg()Kn&Gb@9NmEd^_+*T-Bf(~vp
zVa)(<p|80MgALIC%3HSJ&pEoE_~WJLUV1I+!~wm8Ud;6iu?jNa2u`?Szy`Z>{{fq9
zRJ3Z)tq7--gP%9WN}6`kgPeM3+wRWhQ*Wibp<zNIBXQQP{0KnQV(-Ku9|qm`?EDd_
zL+2w|aA<!|xb5UhYUywq#@;P@%W=0;vA4LFp+ADbq>nB1k2=H>9!_0_5E>lR4GvbM
zF|YOAsK`TbH-xjI<6s=Dp&Gjf-VZ!G%6{!R#SUdrCS<1=3=n(Lr^m++drp<^w7%~s
zW4f1eM?Q0Ve}v4sEHlIYC)acDGziHx`?Je02&0)h-4lLig)m($%ln;O$TBOsBJW3w
z+3dP6sUUXO#XR!nF3hUY_l;{7Z<w83s){uci4M`xtXR6MOaFi4t4T+`$Ta*0j0(U`
z!YpF~ycdTs6P&rp@WLA%=Bn&h^mJ^_P2O43KKd$2+6$QiysgKSDkY3%ID%!u<vdx9
zykQuPn3p-N0dt`y?=W`3fNF|L)dUUXk51Dltj6z>;`G^R3Zn)Ojioi{vr*%%J19qp
zKc)!5^D`VBN9E=Dd#1`N8r0`Zg;gY|&yGc*Nr8C~XTO|>a`o4)m$f?|4928VFd5t`
z6w+vvRM5OLX<Q8^WnK|dS$$m$zkF<IHPmyJtX?YC2n-6K?Ne{k!8H9;kzG6B#0uh5
zCfO*qce=fTTc`p|Ts7Cv<KENJ=xOlO=;5k1Siiry5gG!etzdq?_uSF58FmSd;#_#s
zX_y~uZM-~gfrx?zX>CJ=f?#|%nsJ(7D?bGFX0vItMxGl@uloZxlEWg>Es_hD+<7+=
zek_p0N#OqseO9i+VPN<diuwMgJ>)7Ri(ko-{<@Z~&SrFNgaqNR3l!EdkE5M8<sG4&
z>dGHX05!dufISoWoL=7=+pH#k@8L?wbHqtDE`7^47;Ag|pXM;FURm8mD$`%OQ2>2E
zBZ#*b-aCG+`t6VYObts+9WAS4U~gr|C6}jBPvN!q6(sO#Ov=@3&Q6HHla9pc8T^P%
zdNPP{q0&a*bsqQXxVjnVa}H#I19l!q2bGW_mErt?`cv@cE}*m#<aa-@rI@=zPc0|0
zqcsx1tLWO`ldN8abDQC4a7wj7Xa}K?Vx~NYc^D`2Fz}!>y2Lu#r?5#CDKC4%u&97*
zh>-AZCi_vSTz6G$h3J)+otHj#P+i?VcT=3BncK<3PS3FpA*oUNyEmQ7afA|87BR0=
z4qf;q+~LrRV|*S*o+oC&GpPf)F;LvQfY)Fw<|<m5eqWEk|60tpgv2id<TonpUx^EU
zaxsPfmwthTVTdv_>-a=ZbJt<7td8s&ChCMT*j+J<-1tI`zUPmRAAs^=R3eGO(PHQs
zvt@BrD_LaG{oqPQRUY(GmpNz540wRC*@>>U)hP|_%OxHa^TI?Jh#q<1LcVI(a?%}m
z7^I=8-ErICE@c$qoNE*=W69fRm?S2EHkl>X!aOL_4gi79D^M7N6-%%I1ci$`g4ozj
zhrB|n85@>&7!(lHEXNiEpew?;7oY*00aGwl3mS3-W7U@Oh60liNugjWe`^U0c$&Q6
z(V2B6X7d_(mwvdANn8l)n~+gYmj2LdQJ4bl92Q25u#mSWenMvb)6;PqBgW~-Poy8T
zIx$zpyXD2Zmg2|d#gBDypcReTvX-5Isup=xku7Ig>{IkOsCRQ<73J*7PFR52k#iLj
zPc_xs2)0a?BZ(+3vr3@Wx<ZC<I732+7h{&q1c%9G6mpHoBS@6dH{en8>D#yGuin0R
z{R#ve&gPU|;h92Hvywd{P?ROkZlqG0&FJbXvX3ofd!|C9@-B-4R&8nphldw#FhLH>
z4#$1S2woYz#L8&)aFN*p1Ant=A2m{VQ4~hhOApcPh-YYP+nT{)Fui7aUG1Y}<dD&$
zZvMrw9$OTesf-rm0-O@&$fhmKk?7H2ndu>&(xs|Z;FxAl#y&EkG1Dg4zI02!9GChH
z=Q;sa>ap@>m}Q<Ek|>eDor+WXw=JA|jt)-nd&(`~=;JGI`7OsKETrFaT3n}DGnV#k
z1&xxVI8Uc>C??RP!cr{JWMh0AmC_a9etE-$y$J$1`vk8rrs#8QN(D##sI19+o38`$
zk2eSJc<>TSPp0%zOr5-G)nrS|(A$nNO$>^W0%Cy(-4z1Gou;j+W;_Z4LtLS&j+}x_
zj6oX1CrmSsQeuY9C<iM*mtl%d7N#LX@$*NW6B^Qa2?d7zxNMbgPK%Ropz=#FXWxZ#
zjgJT>WvUsWIULKxPdYiJ#t9lh7%$zqj7-fw!8nc!HhU_XH4K58AW2h+-#>f(&H2aF
zY0715EPQm#+-pqbIZE?ff^ay`Hl@;C@D+GaF!F+0*1dYoOe)E&WJuKP3pL8af5U|o
zJJ3J7^5h~=Jte-53pMq@axdGSjB3h6CUQ;A$=u20rQ$+{&L^5d!|ue3>zE~7|B0=n
zTscs>kUEc<cx%2L$>Lg}H7N{SIe}?@G)yf>d>tp=tnu7S0QfUD>J42=w7~|5g99*Q
z2krr;{L;gGx_|*976)$>+i-7yI2elIXPvSw&HbtPXXpnFBhi;XuzOnca2?cQ%!cA(
z)Im`Z3=KdPC!K_W>AhoM;G_iNFWHcxbF%wkWt9;WW_sKY)Zcov#83WYZ$O!H&?0c=
zn!Stsd?9sf2mN5FjEEc8>NG!xp(65TXktguD<ZTc)9bdaXJV`U0Y=fA6?#!Fr{L*m
zWG?lWCIaZ+?8>zCjAR^!`$8o*koKW9fVZ6;HV53zwbm`^FwX1$<h4JgKeF6s22n-#
ziMYSP=QaAT^`534sOGk+S+xc1GU@CJ%Y!r0|E48h-2zj8(?nKYD6eknyDFbUXGGn`
zn3q{;HJ{rPJY{_mxbS@Gfhwd{(Z~i-mK|OVrap8(xeP+Ep#S-q9YsbCkn@$J_7!Qp
zftejJuAyM*^0?~=o*TZdAZ<X}&cL>FDc1(?U-GU1RNNS--Af1=_cPIR1MGlzWnciW
zPfx``NBsILL3L*y7CrsHe*vfJzY)F$&wHNWwOV6^pSbTy7f?H&3It$G0h2)M`QhxF
z*RRg&=9q$_QR7N+>?0;x<@WDUZu3!2hEQOBIdBKlYnn?4+E2#o@)UPj1pZY!XIpek
z(Rl`*#s$uP-4WD{{Ye1sI2r_Fq_o;4n<D%%qpPtN2Gi{8K1Nqbp!h?4__esU2WCtP
zOXq1fh%Ci@5bAvDCgcHfk)C++b$r$mucxCQ-D&peCFcEPUp=3KNc1}x+KftXhT+^(
z4-yZ4{1DV70-$;`Qv6e}{TP~VOnNd$S!NxRl3dMU(5I~d^T-d9aYG^AA_(t~KFS{*
z^`onP9IGEE>c@Tc<H1MO0Q69p*$^6q2HYO83^TMDvpx(Q*(XYf%D$QqV~lq&Rv1s1
zIb}S`Xh51_0q>bB?-lJWi6rVvy*Me$7qd=eQ!T)jXwMG6VlVze&a}{j%FF<G=W4Yr
z1Zp^|<@N{ci=JA7v#F(=-`AhG#O<@X3aNB@U_BC=x(18c0Hak@sc!NL^#z&r-r+Ks
zvabGzfjpK5Z4vMi=i^6(=fXO{eNSuc60AK8M4w6R_*dtnM7Nuw%V}~OA>Cng8GVNU
zNTm6<!d!w5cR;{#N&s_hV+tJpbCl=1d{8tf=(`}|BrgS2WOOLN2U|%;T28BwBxkKO
zTz~6i+%L%DrgTV^D)a@rOm;xZgYA&gQU5DwSK6yx-ySNv75eTr@joiXKM38NM#(q2
zx6sR7k@@B#Tueta>!xuKrtsGkwrSz|mFPk9RPJF9oDPiesSR@4ke4vQ4=&xQPw8H_
z{Asdjh4I*KlQ-w+qf~EV^jJZLQj|1D!w^Xo`-+9v3~HG1ztQMN2<*W4KK=uh1DUWh
zU1Ns*J}S3uLT)b3&Qa0y4M!`C9r=-)51+%5t!lSHy<@f7ILj0b7uQLk`B=ILz^R4T
zTtOFBtJt+%`^w3!XeoG>3a9lbcTB%*y(D&ke9^1i2>Z=kO4Rxt&|o-~3;`xe!%s0~
zjU^XRxR_js-n7)p>B0`vqyOIvr!966S~Qt*?0SVD?+#*GtjX1=Z=cxv6^I4Y28;0}
zrsS@mc`>hQ3+gapT&rXd3Tx6v@|K9nEis1_wO}A|!(brhfJ%GUB4DvM3^5OdK=_G-
zqCiN52QXx&o0YyUM5j3~psrFwB)wP*(7!wF4L;Gt7kB=jAK$;vX#@3KTkJi_wF?tx
z9bYRz)|~6uC3h>~J}8+}1DfopfDEt?Rhwh4k*Xq)LE<3@&fRpnxC81Qrqq4%t|e&}
zB`To~>exroj`6!|{602*pBTUI=j<u~J{?Tmi~PGXZ(^&6+>D>h&_~APCr%>6h-ZD)
za5~~72dTZD-qmR}3m$E?<4VQ9&NvK9EFq4t8pJ7-+rADx8uY~XUR;6b6{IN=GJiCE
z>j=BM1FD9FVfcomX)4U$12-y2%sxV=(i`kzq<%EY`$}bG*2PnqJ_-MGv)}nWd5D;z
zBEONFNbA_}7KcHC($hU!rh4ufGlx{9P?EGtJ3%l$8Q!O8U=}5=S4k5^$txU#ZEoI`
z$h#Q0KRXqiK2st;??576DiL>rNB@;cBpdHY(V{a1_~q@Gm<h3D;q$vXVrt5~vDakK
zdlmY;hO_!%yjWDTZj0?s&{-Uhix!<QJCH1GV4^Z5Vl_)`eBw@GJ3sKtD$5Sv=WcSb
zf_{W>DvNDj86Vq>dqw)~q?#mIf3CCo2xkWd|8c3oUqh}~O|RAbOKLk6#{g5t`E1;6
zkX|+hY(>zW{BPsATgBd*)OUA4eVM(jKz&`j3KOVrE@$Gfh6WLTW(GoB?asiI?MS?9
zoYI--%BG>F-4j3)<@kzEK5d{FtE%n7V4!%mgK<EErpL7^&`<SSSF(QkW9{5{Q!9_V
zIxsI5^9y8^Kc`0QTo(YK$%Rcc;!mXr#P04<$#`FBppWO?bUJm*n4mwe8uGpAr5|6k
zK24$NFj&C|4ec~rW$V48dsONLR38;g+ATCzc(cwi&@F7=JLn#*_6}~w2CHkpWLI<y
z@+z<c!dLnRC3GvxlS*X!v$<7$iR_A@O6xp~l#RRVLMy$DFU`G38AiXhKd|H)SmA19
z>`Gd=<SFe_t7B$q``eD0u{v}r%qls(f5l*vxXB`xC$ri(qrcxgc9_E0N${}SsWiVV
za^g?aGuCnbMxo6V!VU(rPW7p-T?eZu+6}{<hQjS4-r4O`p6eD#*TY&WoE?m7t9tDw
zVag0Aw;!kMb}G-C|J2<#H?U>YZ>u9(UL0%fhU_#_-16xUGuJHi?yA|*x&dnpKmAD%
zMkNDQ`hE3)wSoaD2w=eWb-ufLB2>v*W~h|Z82_#t8Pe)I7#X@1ra7AvdCMWekm*i_
zgzow&PWf11h-3R>!O9M?$yktK;SR=v?)uqHDGQ5I#y8tEy#{D_QKeTxG2;)S;QVox
zhgp1FOskd&DNJM;Ux6VP9`5BoeY8!UreHgpuLA1I$VI&-klxo+!6>BdZ+}Ukdps!F
znzCjI_RHY4W_YF5m)$aYn714Ma*Qs~>eO)TmcgS98N5Z-uH(_8>_2}5kC;g(rKXji
z4l2YtWxWLqa#Qcpo5tJKOapGm&f2tu=I9F6+KsBw$_{k#WVKcO0=awxbGl;|uePUO
zG>g|7i5;`HU`cOkDz?enYKEYik=+^pn1T1#IIvZ;av8bvnHx>~V7pprz%9|rw8YKL
ztI^616!d<XdHwR(djq?=W8Rk8)i0U1YYoDVdAi1+R<Wd8WNNiOU(J&4jB(7l;+~Yk
z;FFEE@DZ|a7Q+jbyhJB@4;NA71<CZ9b}`ctLv7W@!wS~AN=RoIP8YK+tGofXMCH>G
zH@DVCD?8BshwH8Nm%`o~SnD10cD=R!@_4(}=<JxMXsvnSV~w?59V_1wQ>*p)YSwyZ
zjAPC{Dq7M(7}9BfYoc6uU7S0Qhfs3M4ugcbVT4Q7EJkgQD%#YPqU~$wqk={KS7Ec}
z^-&eux>Ft(EbG4%k4tpfI0b8$ye;#G*Rgne%w5B%qwGJ$-78rSc<XFpK0RJ%PdA8i
z1))CVVvB02VA?rq9M`~nT)|Mg6*b^*SqC4lv7uiOYj0#ZcgWc_mh+3`>{>IhLw;7X
zmX+eMTVrUI-d@dq?u2o~x#Od9`?-k@4&{Mv+gyHSkak86^}%pAw3;dO?W*GOQK`}V
zLil+jQ@J~KmRia$j-6|}`R<sw&OBDLi`(I1h2C7vD(-?^%rE2gv(f=18`z+F&x{DF
zh>iFvpVzLUsmI+aHg{c23dFI9;xOV^#a1=jfLkIjqr@#taJHQ->wLF@9sZJdd^5AW
zTNYQa&0i*q*V~@mGPb(CE|0Hnm9tfiKt;>FEABD-j(dEcT;_sFy2}e#CrvU_jW=+H
z!6iWTMtIq#7X{GJwYgtjpWa7VfIB#ZNFQw|4<_`&>AI&?@#_@d9fYr+@r{@@zB%kQ
z0Rcs=@u`97X)JUX*gWBz90EG9$MxyoA<cc{UKYwp(FgW{MiDu~dHPzO4W!Ns$Zqe<
z?W;3Wwlk@P*&LYcI&OBIz>II1b2Y<3$*4WwL4o&m$=eU=c%GH`I=*}9&+0AY0kT-%
zltR2NzXyQsZ5Vk|ym(+w*pB;Oc{xFU<d4U*5P&w<x7FeE7CVo6;+eX4G3_3F^PRlz
zS|D73fU#eA@)l3sEPw9NF`LsK2oZ1blNyG%H>8)hr#FOx>hlenWG3)!SN%9vKTe#F
zcKtkR$%cqs&^VqqW-ZxCOTza{<I+PLE*b^n*Y2>vqTzVF9;Ox0M4t=UZP9s}*m>yA
zm%(x`f7^4RdEL7GB=j}SADPW}?9H#T73+IJB`xpMb*`J}`ePUv@SxO?Z-S*20-5%p
zE;=k%e0?@4rbooyWb7`c$%+oam(6ZZ_vJ;aJ*8q;^!(wYM`ahTqPVeaa|fD#8(d<^
zATSUIr^F=g1*kaXt)Q-ETiJ@DLH&yMR^CyIBir8=<0;(}wer?x$=W5~Me7d8F$n3l
zxpwxBR08%6d<VYwiZmJoCVrLIV&c6<9lpEOxMXr5E27h(Z?iAlGMU~psjkP9@YE%?
z_|UBtE|j#$Aw`Ci<h*loTz=Uvwc)h%g=5D3vy5FC5qUgo#?|Cybn9NIZa(FjHrW+K
zMwbp}MaI{rktG;~Xa?$Z8DrfP+f%&e4sRozPWb{;Kma-Zb@s|x^BO_Mfvz;Yy6W(i
zg7~Akws2P!?p7##tO_4H>S9~GmB_fRJPGsE*7V)AfDpDIFUr<0ySA6<mD<$IJ9Q_m
z()<g)5nVllvyGRe%e(AR&fk0TZZK>?UXQHxX+Fn`^zhW<40$Kq`Jsq?l<VS+>H(ff
z{Z;X%Po<s6_Ea~aJRf6iRHUl%vgJhHn{1+76t%uVF(Xsst?l|`mXcH-=<sye^G15B
z#;^27a(#U<-$;(v`Qn9Dcy}NUWoXi4vPm@InMWQ@ey|N14&_<f>Neq`#-}$ruh4a}
zvbeWC$tr!Tc89If2T}j<<gGh6OV5zSqIIKy1AMT6Slw^z4R_6k9q`S2YN^K;z1t&|
z>7QD=SqQA!k-qQ}T2xX<#c_&ViR~+Qz`A|{eO4BnE{`9Dq9?)WA~l|a)M55BgW2fw
zziRwHJbCv0nLMwTIusy&h0acLVcx?-76Ho3oA@N0kk9dDuV=u+-2vC|>}ydb`%3E7
z$$2CX#A%oH(BqcKl)#BMUUH{df!#op&oPo(_Bw0D7*OQB>P&KTOj5Vbr+flX<s5?f
zt_-)>59X|wm#@T^lMG*OY=c-2agM50F!MmuSF0KF<9OkTzubQaFF_O06(+gxtQf7&
zli@*lCZjDW<M=#i^QKt8|LpDeFZ-`EqbDOKV<j;R^8InhXGPRhcHX_yC@0DAFW_Ab
zN8b3ulk<3Z*1hmapzzPZ>$A}jzpYoPlq+uuo;Xwu-5;o`{(MYD2fg*AsV}!=9!qlW
z5-E}>O>-q%Z@QIMd(RG&w)b?CJy|HKi7pIQrMsoMo;uZEOnmHBf-YI)a~q46Up3Ij
z5k6=6Gne#=GW(k`zggqztTV2Tz6-&6;cCf9kSUQd%hI__J&vs9&A2>u$$G_Yw#VSo
zr(GE1RMIYVlm}YL>tK(#WVU3wFg(eLJiKnyg<dtKFr`Kc#X)qlf7}L>Wp7`7HF5Zh
zvaga(3viw%tOi|~G^fybQ7#?LM2%Kf>8ZP=$E}8R<XP4b=K0B1v)m)JAkX1ic<Tq$
zb0>7w2tG7Q#WwYVhOT3~d3yujP>U<=aOn_7%wo+Ll5<CPLLrO$Iq<#?>;$-a;EH)j
z&K@f27$yQEF@y0my3WjzCvG%wCmsw)Q}6)$LAY#KBQgKA@RRQ%HUx4`NT&-S!$5C+
zyloc#_JLvkNcz;oQQ5Wl*cK#2LK6Fu*)H|@Qz7p(b)L|RGkG=4Gaa+x^P4zg(-N|j
z(I=%7+m<#Tk?}`e_|qW#nxZY7&raFQmCjU>$Uw_bY!Mjv=`JD3mJdjkg;~#LBhtO5
zBw0RF$Q8uUla!OgK{_@xDrCMLDSXEuzfazE+^F~H)@|Wjc++X<up0vw?<y&ome(`o
z(c>WCcHC;KF{T(9-7IXAR=&&@kav0{774Qw&g=+Q!`P_CmPl2bdgEjRDl?VJ$i5BL
zrDd?qriB3(;%cUg6(cS&I0qMWj--C7sVwKrs{(ruZ^qukEwR@g*_8Zk7WscjUn(&E
zuma-`GmO_mP!$PCr!d3(oH)vYk903R+Rai&5z2wh3f++z*UGtc3Q8k4zGPb9;h14r
zzvja>*15QJ4;=RQw41ldbe<>iHW2yAHxEfz4j=T~ZvebWU#IhIYEAeU@WbgflZv;V
zAye5q4*1e~F^eZTHIR|fCB;L#M=Ro?jDFt7D8rS96#2e@qjZXl(Au_fwK;Rr^H9Ry
z$h9d^<R6&X1vOT>ORk9?@0r%v&|-MQMf<J{!&VQv*4LIc6|1f+rk?9Od4kLQGx7e}
z>u=6^9heYfnx0OlKwnHa;eS}whaTRM&&vyJ#1~KW4SHWWs;t0BoiFyx%k{+FyZD5l
zy-~wYi?W9U#lfYK{nXJPf$jcSKQRvXQY7Fr;Zc(hBqCliFr>53Y_ib><$m;MY|r;g
zxcM!3Twu~h%uMCaX6IbFS(gx>;a|zvl~X&i1{OD4HN(Tgb)0y!#&a(LWaR=6tr<1I
z5d^l0gID6<APAEK_W+FbOdPxs3UaoCB+<faAP$%p;0~s`soQz_xyEu-7=7nWIOCaE
zOg)G@#6g;|uaaG|U4*{(W#r88D+hG><Ed~QWr--XWzNQ)a1&>_8gj6%e_dzK9D1kM
z%5-By@9HXdn<H;LA1pGNIZy_P#z>MopHFFZR$4V|ZKQE%D=cH+f^@_!)(e9T3e^%?
zZ3r_KDp<)P7->^XjH&DBqp=X2UW%D=&_2I3aH;}nHI-R-9y>v5nnLfbHn+YHK1jVx
zSKwR!DI*r!t*JR20}AyIi8~l}>zVObSxq?_%gA23-~+92_j)RhD5CP~SHSMfVEFXT
zojY|N>u4Va&436xW@$lhF4+o^$4^D&I%b@K1~3B&bG3;|*T1Safi|L>6r6tDNpX@v
zVwa){YBjA~R#e@<#ukQ<gELXfc+oI@^5_JH={uR!11h7gm#^01iHafxnBm}w3+UTD
zdeOOKvW#AJ@7zJ5((mItsa)yB$sK|%x%n;7oDu2Yg!4X<g}ae_mlGy@g?=^#OgQ1-
zMiM=~IYoufC&uUdd4eD0Upy>uAgfT%fCVk*<1n0Gi?3>WrQqcGQyl3|TKAW-T*?+I
z%gb^n<jUPwN(F7(C-U6!%teDor8*_syM;p4Qyv&CKHk0zIvWZBe?Ky-J~m6H(?#O#
zsd)b}l^QRHX|a97WP_nWJ0Pp1w6bAv-lJuZzdzRHBC$9-V-SXg7>%SrL6DS06Wha0
zk5$Z&%9M%lD=EWoZXv_R>w}<%4bNLEy9GbbS@3u+-xDX;r&D=VxZ=1vh-__Mc65sz
z&DEUl^U#e)axDiJa^A^*>m_FYe6_eS>p=2p3FQpi&r>lo0J%=YCs`4<6dff(Ksp><
z=zaHNGnah;G~{Mu=^Mi!8*eOywD#9lts$nV3AxZ_+{0E7P(!XKq6Zf*-8oI3f^ZhX
z%)|H8{!x4@J+R1&!|A2hP(Gv#`1Iy=o)KSp!v%1dhC)Zs6x54{?wlQO<?(bzeW?Nt
zzAi6FsDTHWT+h8zcgSWVPYf|gQ?nVunFh$-E8k9&!o%@qC~Br^PFjM?sYb~7vd;8U
z-E_ZAYiT?W$_mXWt@}o{xXBiqHyCo}b+V+Buqnfcoj(BE)^i$m>(r~9($Cyvc+p5}
z)Y&QMpdr8nM9ISjOS#$91L~f59*)CBq}(%WXR@P6S>KBYQAH&qVoaQg*pfbxp=@oZ
z%!=%dmvET+A8zz1ZqOLm!XaMjy>NRxF5;wg24%#1M}I-%sNa8dOz-|jFY?FN>@UDf
zX_(NZ7E-)1t`Ix#$*pic8oI;zLw$tT_X9OOjP<I{o{m4|0;oRcOAP4WA^kf-V>>xp
z$fa`%s|LorJV$xAC61e`1=neb6Ohk)`?&jYE$CdJa{oqcq!{L7Up0!+T(~ecF9QEc
zhBSC=AhtoT;kd7Qdv=!jKwnl7fX)oPp-e5>TcKRS#D_N#R-v_Wc&E@*&JDD1Ytj(`
z&>LK*AN_L?V~!YLfWN?dhq)xjA9)6ZF+1tt4?PS+$_WvL&Lymoo48pNDV44a!;@+l
zzBL-6CJ<qAhWsFt=GYP(T?Af2-yeEHr@=``ae@TQ!P--7Ddx(|W@N&cmQQo_Ed*gY
zqm`ojEz#+&CF$$Ep_>$Rs4kxB_O0Z$I8GY*6F&fdD9!OpBN=7=?9p1Bq|;z%RVyRG
zR+fCKgL`huwH)=YxrxGJx2S+;70o){98{@HK}$QGwZOWqW2;o{bUyw)<dF$Ia&hVG
zVZ^w^xGJfc^WNJ?4ESQ0%x>Oem4<eWnNPjhTN`?9q)k*b?224jgUcptxhXmw1D$nU
zVV(AxU~bh7j?>tdNspnjo}sWxU2PPeNQT$NJC$Kh!w{H4n78?flO3`;6`4^%ODZv=
zf=NC4|AiM7%vt9~yeM(cOBPZHxMNLbV%yi3Ne+oOo0A7j8T02f`M`A^fR~uj?0mYx
zd&i|ctF%Fs(n6h&I&PsM>+}kIsL4Cp^s|m~@Bj}Uxy*2|4Uzeha#hbV0#+)?0xT&?
zE{WAmKW>@jo2FaLZ|5K-=^PuWB#PWJf;S?06QVaFJ0-kq52Q)DF?4P|Jg1o;QcX-P
zk*aRd-M8LV^1t2S6GF+PQ5V${liEHSku*vbHX@=XD9sX82;<X@OMXmeUKw`$@>@&j
z64n?dg1poqfBB6=nGcFt2*vX4*)>c(Q8{=A;7PZ~lS>Q*h`M|2FRe(C=sx`7MBYTM
z8OKgfF{6bcrU}Mi;2n40aPCEJ5=Qvq+Tj8il)>jqe7^K!fa~B*m1B1rd%v}~iAhR1
zp>*B9Ek4lNYJ7g&1fL(Te|LOvsoa82E|!3CgCEbXDPmBPj#7%`rYP1wTy-Acib(}D
zS+TB${<7?j!3}tKmDjD|ZFH+X7;UKTc(-B>r9mF0(Tz}AZwibNVL0{YgV2pe{bd+^
z!X3Dj)v`w)CkwwHErNhvtGPXfB0098d>h6HOdDn><2eO5GhZa(%uRg6<Qi?2&%Tas
zPl5yL{1_+EZr0iX2yf;mnMrcqb`lGl>6rB&`zn_}9%!Q4Iz?<4y_!nSp+$;4F_~QY
z%XD)|sRYXv%Oc4AP3@MU@C8{)+U~8VZ9ZMZzYBf$wo6}z9=SIsGj5xjQA;x_2*%2>
z*hs0sWVAljhzmOf<lqJ)?mqk<f#bc@o%{Dohe9fSWhtG(gZe|<`x^!4`jpW>@*@uO
zs`UY5`*`|II!1caxVaNtda%8zubc&bhT47F$HO`6%QUZuzkxK-jY-S3g>y)$^@_yV
zC-~OTrL)!Xw&h}V)DK&AcyH$g1<kCiAQ;1o6b81EpEzjb$f37?g|_wA8}PS?_1kRa
zzC6J?&1PFIVP4b8eG}jKk;>m!hp)N3Ox-})wnTk6>eX)rA-6nMZ(7+bC2g515(ceQ
zeLl8G?Y0Mn77M4tk#KM!#axUtwCF~tl`GnM@ltZ$_M|J9r1R39ZXjMeh}(*HJA#;+
zl7MnMhk9%IBE!>&0-r0wQb4v<5<8Vh^dLj*t|&_^QcwnbSy>xw5UjdD`(1~Wu7oR<
z)wF=thCyJ)sKEmTuJ&3%7&ciAJY`~KI_>>d?*1R@6wkd4ge_fD^c5tVUeM~2@!~r(
ztx~>H=em?m&|CT*^wi}v#jg*ssRL3`-@OF)pf1C`<k^I?ISx&yZT&NxC#N$nSl}MX
z8fU2QnRv={&jtc)8X*~_8SPWy_V8mZ%@8+SC8Z@gPq;_eS{iU(=_T_F-zwC6VXOIF
zm73ofYtXzy9Ya=~G%Z+>DIMP2>@@uF#FOjUiCX2gWbC})?Skr{zly-$jMu`wDPWvc
zzgmy>i|=j)zj7<vXr_8&+iPuuHj9ngl2NREoPU{T2z1iqGq5zTzj@sg7cd~pY(FrV
zpyeZsNgI7U2>k%tY6WtJ_E+O<tRLo8%*c_YmsxtOr7PCtp@o({sOC_6DSL9piVmJI
zNTFF-jgR-z7KcSB4Q8L|AJH*`6qwNYH80`wYq@#WAB(+09qSao-neSkP3vcC2q%_$
zwpbF3RXplrwqswlkTd(a^T<*eIC|xdHPvn>)hdulYCc1!ArHV%**Hn5_BL`^^7bti
zO`}woO3^w@>CS|80CV6<IFmoAt$gw=xzzvGkK*L5Kl4(L>s!xF7MQH!MKer|Q14%b
z$@7IzedLX7hYqCRQW!sq76I;Vq7c(`>0Z-Ou`ytVxfkQ9`-zT;Ra>+H3qS7DYue^T
zkiUz(IVNFHQY7xbFvm=JT8AaCPA1WDxppGAsA5Z?1OOee>=Sny?|E0#cTqTLG@;hP
z!4P{qT9pF|Gs<NbnVE@@e{raO6fQCFa{OC~j8rtP#m#}d_`KBy;2>?&JJ(P2!BNp-
z>P4dAbD)mP(pq1WcJ$DZ8B2Nh<cmN&3xn_8{%=ZKi8#S#1im0R$2hZuF5wOnIzr4J
zUf|bJ<Sqk&b8F7aS^A^oLWE-iM-2`m&m-_U-WUe+<XT1(i9p2n+c0`cbT)oDILl=r
zet7b9I&JTNWzbAI3KV0$L6cbJO=E9EkZS<SO?to<T&~3vz=#>?;lVN+$wf)B+K6z7
z{!BaVIj9i;i3|XNulGuww1UFD3N0%4;mI&Mt2b9Qfg|LH4|1UFeRlV9bxOG-b!@Em
z2HKUZL^ZjCn5mm4+Hy|<bpx@`BVU@qnd??-LVB}NKk#t*+}Job^3_YdLdy{ytj78G
zw5ayZ4_<jov0vEGrScQ`s|BcW>Y)t7Q8K-i9kdde)+V0GlltUwh`MFsOo&?sxFI*1
zEM}-qocxAy`M8vvy#iSh%1){4Y)Bn8dhcGIzD+695dK88mE*qt=uRtbDUo<0#eh$`
zK7ahkvNPNQM%G;cVnvq<gCUR6cxoh{vUcwtzEtq#X2@71OMj>iOJHX4wvuWcFJJ54
zDgl)Xs@pQ5<e5Xeg87P%hVvJ0Tkf%u(##x^3FB4?t@v_7Qf;bBu(w2cXC>w2d{-oW
ztyU7+^3R6q1fvBG2lL2uw#i@WrJrQyWIXiYqLkp<=o}p#@ot|z@spgosKY)Z5623_
zFHb)hF^EEIlHt5IcK_&TG9gCmSJ))IlZTAXwd9xaWrvSY!t+2beQ!xr*~)b-<?5+I
zrI@zN&0=(7pFB$rPwfMr&GU^NO*NHSorH5fr_#Na=Z)fFTQb88kCmE&h4o}DwLd#2
zYd>HXGrnyF@<5PkW!~KreDYaJj{0PG1Z4GTu$blR;X8XJ=*y;@a-1z`q@xho9KX)(
z@q<wf=l{3|AQjp?jD21Lr)w<?r8Jfzsd58dMuAp#azPMuRm$0?V<<1(sZUAd>G6~^
z_mf8xpvaR=vtw0kK7S-vJIhm=?a#w|rxOCO4Do2PQK+{ow&+NJgb!xVQ5h0(5<h`l
zTh|e}cRl33wUxeL-=eaasuoI@E5PxeTtO}PWsQB_<F?vUeGVyT#sO%C5nRWVPdR6K
zgL!Zi7ohuDI6{C9k@DgxSj6%8SWiXA;dB}<^#n>DbkKux2bt`0+C<C~e+)o@p2s+~
zM}JEdRY`hxklOO1>=9yxJ4Q*G_G1>`)J=3b$%8w0MxKJC&gbOvG+CzG9wicK=HQ)p
zF@VuOSrFEGnjEW6NZErX{zjT%X<gpg!l{htSY${?L{UoW)*587fp{1cIhB4+&qYXw
zY%E6n&z>|<7vC=eHb1ljk!Hcr`F{xftAnWzmWWSriD{t)rudVe{W*mVFmi?|x+<`P
zHEP8KUM$ZZ*gw#&ef9kRy!ejKkA!*b!6lj{Gzmj@foBYYj|7!ee1{94ih7+P{1D@j
zsRcF79AgCL?K1T7kcfE%?BF;FXCfm<+LNF8B$9!L;!vAB1$e?3V#1AGXnGr9qQL(h
zAuHa5FxvWYvt854*O}(`*=urugvmux`0g<7`X~^TjVZTQc25Tqk-iAkZAu`ooG+^K
zYPBbt0R#W-1Fi6fPDR)wF%$|ScwJD27K<6?Hdx|dRGa_>`mpVRpWZK}UB36mfwO!B
z#hs^g6!7H2|L3RaEC}bHqc~YyF0ZbC&KyrmrH}7it^BW8<76ZF_cw<BU?cbsH-`Uc
zBlwRuhTl07D;h{k^L~NWV|m)G*_mqT5&C+@!D@g<hr4`Wc+N7Z>b1;<j1-_H^7L=b
z`9d`(v%2=U*|h0PnN`bK7mE!|_k1a{Dc`KHo87$KOnnH(dcQryKdEN6ho)If+r*+6
zL1D8P9|B#6ug>2cT1t}{m8H`yiO|s5nRz&eEudt^iw`O76h@rCtKdD|R|9Zpk%7J)
za!8rsJ91hMTnpPnJ{^R8a5`cxCC?V^t=wAf5O$i)8-!u2^5`aCZ>NU$^97&xkUQcp
zrn4VZkU4W2vt_v?gC20-Ku^J=vpm*U&eEnU-~U)VWG;hLR-en2ZM8a^^T;5bVy#f*
z<BTHHJ%I2fbN3?f+OWNH`?&U#p_#}#P@g3f@=BL(G>VP>p)iwv0HqKqH-OWK(9@A=
zU)C(85=g|=h)(1vobwUkrnU9JXyeQ}U=~mae+4ju#x(>gKsov521@J%=NQz^Ph<W)
z-u+9DcUEiobd5DE>*i}mL}N3a91+becgm2oYq>p;G%y5sJiVUD#&lL=4wn<loWp2R
z4{@9I#5$e}UvDS%<{GfnCu2OpClPztf#O5&@cgiX1>y$8S-rBYs)9l^tJbvBP8<td
z(<zWH#MR+XhZCzUN!3RglDyuai~d#VmeHI^IWIRUKNY*oIhd56R{mG4QEF1G@b7O7
zztp5y;Xm9MeyK^Z!hgIm{Bo1>(^?n$-y_Dq(uiSmcANQO;G|?2$XRlg#a9+^GNww_
zVZm(jzAeI}_j;q3l(B}J`-25|w{QouXCfdlX;P<$FAvK?RYy_5N28#{ras!sje6Y6
zjeFe7je6Y6jeFe7je6Y6jeFe7je6Y6jeFe7+r}jRZBYL;4QeLtUo@)s%YAEg9*P;t
zFRZX-pj*Gn5KLM0z>-^$Ttwj#PX^3i6;if?#d;c~J!1rMHIC4SkzuTlchs9Gv3(<_
zCv)$}K7SUDyn~QW*enc53EgmoNA#*T2%ThjL9Z#;!>c8ntO0CDBKuhhKq432l%iVh
zUKmZ+ihPzg?$~>ixQUU+{QV;M(Vx8t-l{xi8LXPpNpJc#3Z(mvOkxKhlshD!>5@#|
z{%{BQsoT(LQdEJ`Rx;n8Qayb|7d^Gxr+BVG?GEAo4A_BL*SIb1j!GBBXPKnjIckYt
z{E;{~OV9JnL#ros2NOQ;r1wy;40FLpq89^;8oyj}be>TS2d{HTOSi;de!<-5o_O$^
z%oW9J6%gMTPqChcA!QlMO%|^B&;E<&uU>zD-ZEH*2{8jtB^S{8+z^l7BXBc}ZiVB7
z(~-;bb7{Gb+0NGyt<Rg4S;hbT0o)r~PVs|g^S2hI7AexQQZ#QKy$nBLiX^Cz=h8t7
zctJF=p$gU{xlPd~gSsB=^2YO;ObGD)FGC4)XrU$`Y7FH5(aMzO-mNO%f;m@7b>6&5
z!g*H7F<-i1_{}b|!rDBWjo!gbP+#k8w>P={6i^YY*a|D84D6scTFhqG{Y%=?@4VHQ
zf6{9ekKlwJ0~0VfpBH|j!O%5=ob8t0mXn@PFiy{Fc78IzIHeXu)u>=SoVF@lFdn6<
z@VRH#p$htAaI9)Rz3O0j?v^W5mlSF(E_da*)Kw9I!C2uEgmMXEwN9@^fh4{uBRbX0
zV}6%FrH++q&WcX8bmRU4Gkf}U-)5ih+br%&0wo`Q8vArv!92Y}CJ<MKHv=s20(ELA
zXU(ck;*X6kA<jfs{7M}M{-}*5ww&K`;CmW+(HS)^!;wD`YhG}&A5YGyKGSgcX-4N2
z(n3}7bm=Nb>D5I~!{Kv!qf2=wGQHC>v>z3k)?IPz^xD%o36K5k1$=nO_C%#E^39{1
zB1?&{oZVQ0If2us_FlTvg_owWE#iy}G>CjS#PEz;g;Vn^L{>WdxzZW0$5oDr%xKWo
zqyT#F>FlnC15Ul%>6Nyy>iE7Y=dkL7fl`pit&`k|wKqf``<W?F$)@bf;xumKvn{>1
zV7&YB+>`g?;igzW9{H%GXpfx3WHy(a<0)1B%_n~jmZ%5QS1=@?tpdvkU8iocrp`Hg
zVC}>(a$`*A<*Po7tX(vK>Y507b_^kecJvfsAA+a6NX7?`+V03q=OT!vgRo~l7zq<C
zbKR6`Q7R?0H`ZHda1`6Px)>*?Za}%sRv3!IB3FnE8ePjqlopIIpTqDfe1?rRn!+7~
zkvuRAhX7)VMx<t5&PT%66_qL}PT4qIIJW}rH7BUbqh7$?V6(g!Z{D>Cq6=r)RLAdM
z%b8IG;Ajs3PJ1a`Q{EV!)jwUWk4elpQsmAwN%#9M{61*4i(X6TC=(;e0D9}mBdt>t
zm<l7sQu~it&ZoJ73h%;vp7y55i)DO1aq`h4xhE={Td`-s?AB<@E45khzccc7!90EW
zlJ{U|ZOqGX@>E?t!bpthDxDDK#G}k@L)Pu`(d?OV$c?!vyOy403g*2m-ehwV1YNmB
z=b38oYUnc2mDdRorslzB?1kdZho|B$K1g=s&(kaUqI^hIAa%bq(2y+<RK16rF9ObQ
zK{Xal)N%q|&Z5pwC_0-)DI$+bsLNi|%WNL3mJayYmpuUDMiWeN#>11;b2DRkOs$rU
zS#-L1Cmc7M$Hux2Lb-1D?hU}MDECml3PQ`v%<Z|Vt~)yY<au-3`%x5H-yh^(j>o5X
zt%v3HD2y#{XYR0oTQEGOF-?B3>y6_WM->Xk5CpSf)n{VKsshNKmGC92)|ElFtt)e|
zs(@tYnj*m3H6?(}E9q4%w;raV4B%cRRnFR7I^87OrL4Vm?($|1<@u=n$CLqA-hE~9
zJ``8GA)eY!L*Shn`_z;=k<z-Yk_VQ3mxmE{WRwi>^5>2`YtmeUC=iXuG)OYkg;wj^
z1W(Ex49#|v(@TFQo0X?Mmq2EBLcJnXRyRg`uhgO*@+75oaV{_Ca@EESPHeQaHqsY*
z?PFscR$}N6SL~FQ4PJHJ?%<fpA3s=C-gHXUcDB>Uj~}0j`I7g+K6rFgwf=`@LFl;?
zLk+DRp}7orTd{d_ltojqXkQl1Un0g436?|3v+Rd;9L|=OTz;fv$a8=^$Q(&Le}3an
zet7eJC#zts^gIzhWkc;9!tFJ<q47%XGHP3BkNwFajykEgQnJ(N5X|!7Cx5D!XeK>b
zwU73}I5a|IxnEXJZ&;RhSUVcHIEV$7r8EaHc5~l639mFhMtjxs4K;t$4vWO7mL7eZ
zEn0SyduH$HY{b)3b6;EW);cJT{yxQI^Tz1uf-h7nddo&ztZLcWFt555Y*{{ool?_v
zS(^t9oygF^BTLVdx!bDLe|%lK^YgCq){C?E0=_otbF}a%R#6bNQBnzFxQHS&w1t_P
zArjtM2_<eL6!y$;>aC~6+m}hFTqc>8|2)EZ2Y!CINc<|&;X}`}n@Q!AJK&9rx**0|
zoUwz4Qlakw6QX(OWTpEJ(UcP|JKdE<EU}l?3V_gp4E)7;pQGX|P7_1Vcr5sUXA@Mg
zz$iNF8Kysdz!fK3@TX>M6(8GGARQRqJLiu&-ClYjZrR=njhE5_nuT$z3W05jSna_L
zBR9In8|b_UJvbR=S;TxWy}B24#W>3~NJw7~Xd+BKDh$+F6g)2$$ug8L<jwC>KQ^xQ
zV6@$Z1W9L_7WQlE;dI}e#S<i8v&?jJWTqR;7qtV9E;vGk(FbE*xKzSR5rsNUYb=<D
zeQZ*pV4oyWY6<Nb2VqMNp^N|Ck>ulh=OfL(3GGbmsGRz&ShdGitnhW_EJ9P>(KU76
zkd-1Qe^cz_vXk67%4V4j5Qtl7fSq95HZx=Gs30nFdMY%(p(l5kGW%-MDtFG5EA`Sx
zonv`z%X&;JiKbgi?=G$^9e2Pdsa?3SU0hO9iy`lYPes)(l@$Qh3tOusR6_VIB?Qfk
z@!UiHNsjGSr6qxu%577zl}Jr3BhaELtr?62FPgTqLmA9(aHgCdoUR^fihF#bkn!3^
zHpYUkuGDo35439TNeHVJcS-!Q*++H5EgC3;mmUTY_k}0EM$d<wqU-DH6(t8QtrG-*
z6fFibkFqG~2UTwsk{JH(&tuPxh8Mj20;=qa!JvvHGm40qQgbbdxmqD^DLh*G9H;zx
zbO+a?OBbW(u{bQZ2ql_j9u>0q`Da|F2p7SKR(eF7@RhB@a0XK)myW2R4o@dL;CT$R
zR$`mran!s&^Wr$;`!Z7UtAUp=*`hfCzyI!!MqYrweh6@XYfC#|t&AH*_xU{heE4}-
zV2nj$!xN>fkNNNv%6H!rf43L+4DIF$a#i4Yk>N$!R^C%l><pOaz!^bCZ!nZwo)Y)j
zifUc*;jbTpI+-30RamrLxvXT5R-kn0&nA&Kw@6WbQ4;(wnSBBN9<H9J9Wxb|zDZrg
zgBw-*{P=$q#QSyj%=z5SXP19<|N1}q=(Fwv>zJ7(qf}VXL!e|&#25ZJp(9gIyU;^o
M_?L$ju<f<~2h{^AW&i*H
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2476,
+/**/
     2475,
 /**/
     2474,
--- a/src/window.c
+++ b/src/window.c
@@ -769,6 +769,11 @@ check_split_disallowed()
 	emsg(_("E242: Can't split a window while closing another"));
 	return FAIL;
     }
+    if (curwin->w_buffer->b_locked_split)
+    {
+	emsg(_(e_cannot_split_window_when_closing_buffer));
+	return FAIL;
+    }
     return OK;
 }
 
@@ -793,6 +798,9 @@ win_split(int size, int flags)
     if (ERROR_IF_ANY_POPUP_WINDOW)
 	return FAIL;
 
+    if (check_split_disallowed() == FAIL)
+	return FAIL;
+
     // When the ":tab" modifier was used open a new tab page instead.
     if (may_open_tabpage() == OK)
 	return OK;
@@ -804,8 +812,6 @@ win_split(int size, int flags)
 	emsg(_("E442: Can't split topleft and botright at the same time"));
 	return FAIL;
     }
-    if (check_split_disallowed() == FAIL)
-	return FAIL;
 
     // When creating the help window make a snapshot of the window layout.
     // Otherwise clear the snapshot, it's now invalid.