From 099f945fb955eae63782abc57e3ee430939f25f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Wed, 15 Apr 2026 09:21:48 +0200 Subject: [PATCH 01/24] Add offline PHP 5.2 downgrader and pre-patched SQLite integration plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SQLite database integration plugin uses PHP 7+ features that PHP 5.2 can't parse (type declarations, closures, `??`, short arrays, traits, class constant expressions, namespaces, etc.). Rather than maintaining a frozen, hand-patched binary blob that has to be regenerated by eye on every upstream release, this commit adds the tooling to rebuild it deterministically offline. Components: * `scripts/patch-sqlite-for-php52.mjs` — the offline patcher. Unzips the upstream v2.2.22 plugin to a temp dir, runs the AST downgrader, applies a short list of per-file surgical fixes for shapes that can't live in a generic visitor, and re-zips to the final output. Requires a host PHP 7.4+ and `composer` on PATH; auto-runs `composer install` in the downgrader directory the first time. * `scripts/php52-downgrader/` — standalone PHP tool on nikic/php-parser v5. `composer.json` + `composer.lock` pin the dependency; vendor files are gitignored. 21 `NodeVisitor`s cover every 7+ → 5.2 syntactic transform: type declarations, `??`, `?->`, `?:`, `**`, `[...]`, variadics, `X::class`, `static::`, `__DIR__`, `fn()[n]`, `(new X())->y`, PHP 7 error classes, `#[Attributes]`, `declare(strict_types)`, fully-qualified names, namespace stripping, reserved method renames, `finally`, array class constants. * `ClosureHoistingVisitor` lifts every `Closure` / `ArrowFunction` to a named top-level function. `use(...)` captures become extra parameters or `$GLOBALS`-backed captures; bodies that reference `$this` are rewritten to a renamed `$__pg_this` parameter; the host class is opted into public member visibility by `PromoteForHoistedClosuresVisitor` so the hoisted function can reach private/protected members. * Every `self::X` / `parent::X` reference inside a hoisted expression or an extracted class-constant array is rewritten to the literal class name (or the parent class name from the `extends` clause). * Surgical fallbacks in `patch-sqlite-for-php52.mjs` handle trait inlining in `class-wp-pdo-proxy-statement`, `ReflectionProperty` try/catch wraps, `WP_SQLite_DB` polyfill injection, `array_column` polyfill, `Closure::call` proxies in `WP_SQLite_Driver`, and a handful of WP function-existence guards. * `bin/scan-out-of-class-self.mjs` is a deterministic post-pass that walks the pretty-printed output and fails the build if any `self::`/`parent::`/`static::` token appears outside a class body. Catches scope-leak regressions that runtime-fatal on PHP 5.2 but slip past a plain parse check. Committed artifacts: * `sqlite-database-integration-v2.2.22.zip` — unpatched upstream. * `sqlite-database-integration-v2.2.22-php52.zip` — downgraded output so downstream consumers (website, CLI) don't need PHP or composer at consumption time. * `get-sqlite-driver-module-details.ts` — updated to expose the new `v2.2.22-php52` plugin variant. Verified with `playground-wordpress` unit tests (80/80 green) and `test-legacy-wp-version-boot.mjs`: WP 4.9 → 1.0 on PHP 5.2, all five phases (front / post / admin / new post / plugin activation) pass on every version that supports each phase. --- .../get-sqlite-driver-module-details.ts | 9 +- ...ite-database-integration-v2.2.22-php52.zip | Bin 0 -> 266160 bytes .../sqlite-database-integration-v2.2.22.zip | Bin 0 -> 263816 bytes scripts/patch-sqlite-for-php52.mjs | 625 ++++++++++++++++++ scripts/php52-downgrader/.gitignore | 1 + scripts/php52-downgrader/bin/downgrade.php | 123 ++++ scripts/php52-downgrader/bin/lint-php52.mjs | 100 +++ .../bin/scan-out-of-class-self.mjs | 311 +++++++++ scripts/php52-downgrader/composer.json | 19 + scripts/php52-downgrader/composer.lock | 79 +++ scripts/php52-downgrader/src/Downgrader.php | 199 ++++++ .../php52-downgrader/src/PrettyPrinter.php | 53 ++ .../src/Visitor/ArrayClassConstantVisitor.php | 300 +++++++++ .../src/Visitor/ArrayDerefOnCallVisitor.php | 61 ++ .../AttributeAndDeclareStripVisitor.php | 55 ++ .../src/Visitor/CallableExprVisitor.php | 56 ++ .../src/Visitor/ClassKeywordVisitor.php | 49 ++ .../src/Visitor/ClosureHoistingVisitor.php | 588 ++++++++++++++++ .../src/Visitor/DirConstantVisitor.php | 36 + .../src/Visitor/ExponentVisitor.php | 39 ++ .../src/Visitor/FinallyVisitor.php | 72 ++ .../src/Visitor/InstanceCallOnNewVisitor.php | 68 ++ .../src/Visitor/LateStaticBindingVisitor.php | 33 + .../src/Visitor/NamespaceStripVisitor.php | 68 ++ .../src/Visitor/NullCoalescingVisitor.php | 140 ++++ .../src/Visitor/NullsafeVisitor.php | 106 +++ .../src/Visitor/Php7ErrorClassesVisitor.php | 89 +++ .../PromoteForHoistedClosuresVisitor.php | 158 +++++ .../Visitor/ReservedMethodRenameVisitor.php | 44 ++ .../src/Visitor/SelfParentStaticRewriter.php | 180 +++++ .../src/Visitor/ShortTernaryVisitor.php | 88 +++ .../Visitor/StripTypeDeclarationsVisitor.php | 43 ++ .../src/Visitor/VariadicAndSplatVisitor.php | 225 +++++++ 33 files changed, 4016 insertions(+), 1 deletion(-) create mode 100644 packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip create mode 100644 packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22.zip create mode 100644 scripts/patch-sqlite-for-php52.mjs create mode 100644 scripts/php52-downgrader/.gitignore create mode 100644 scripts/php52-downgrader/bin/downgrade.php create mode 100644 scripts/php52-downgrader/bin/lint-php52.mjs create mode 100644 scripts/php52-downgrader/bin/scan-out-of-class-self.mjs create mode 100644 scripts/php52-downgrader/composer.json create mode 100644 scripts/php52-downgrader/composer.lock create mode 100644 scripts/php52-downgrader/src/Downgrader.php create mode 100644 scripts/php52-downgrader/src/PrettyPrinter.php create mode 100644 scripts/php52-downgrader/src/Visitor/ArrayClassConstantVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/ArrayDerefOnCallVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/AttributeAndDeclareStripVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/CallableExprVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/ClassKeywordVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/ClosureHoistingVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/DirConstantVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/ExponentVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/FinallyVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/InstanceCallOnNewVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/LateStaticBindingVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/NamespaceStripVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/NullCoalescingVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/NullsafeVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/Php7ErrorClassesVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/PromoteForHoistedClosuresVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/ReservedMethodRenameVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/SelfParentStaticRewriter.php create mode 100644 scripts/php52-downgrader/src/Visitor/ShortTernaryVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/StripTypeDeclarationsVisitor.php create mode 100644 scripts/php52-downgrader/src/Visitor/VariadicAndSplatVisitor.php diff --git a/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts b/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts index 56e5c8ae6b..b9b94c2295 100644 --- a/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts +++ b/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts @@ -2,6 +2,8 @@ import url_trunk from './sqlite-database-integration-trunk.zip?url'; // @ts-ignore import url_v2_1_16 from './sqlite-database-integration-v2.1.16.zip?url'; +// @ts-ignore +import url_v2_2_22_php52 from './sqlite-database-integration-v2.2.22-php52.zip?url'; /** * This file was auto generated by: @@ -19,7 +21,6 @@ export function getSqliteDriverModuleDetails( url: string; } { switch (version) { - case 'trunk': /** @ts-ignore */ return { @@ -32,6 +33,12 @@ export function getSqliteDriverModuleDetails( size: 84250, url: url_v2_1_16, }; + case 'v2.2.22-php52': + /** @ts-ignore */ + return { + size: 268892, + url: url_v2_2_22_php52, + }; } throw new Error( 'Unsupported SQLite integration plugin version: ' + version diff --git a/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip b/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip new file mode 100644 index 0000000000000000000000000000000000000000..4947c4836255027bcead929c7a232ac4088489cc GIT binary patch literal 266160 zcmbrlV~{W3wk=q;ZQJ!L8@p`Vwr#s=mu*|SY}?vp+cx@t?(2@*x8ub-C!#ZA<;qWU ze3@(H%#mX#NP~jG0R8J?4-VG(uZREpMhb)n}X@@VoGmf=wfJO=xj=F zY3E{U?qujZ4?* zO$Y)6R0{?KMEjo=x3M=gVQ{c;_%9H&^&QK9t^W^5ipq`k1{2a(ZtuR9FlzXE-~bkx zu`V$-Y_Vo)*!3Wma06othPV?smjKn{ST{r2lcU3G#-NF#BMJ!fF~^Xj)pX z(2!nA_ymHF8xgi?0e~EMHZj7@Q=z9+kEWtFZT4<+;A4LoyF6OLmVT~Or7;pllHg(5t*(* zaAD1ONHX(A22tZUle3AcGvm(mMCK=b3(2fiv&#nyUK6?iD6OrUjTlZwRMxGI-0S1j zw}=^`svQXjYO)sXl;zRz`61;dyS<_1UXf@@YvREmZWU(zL{#mD0vyI!iQ6CNxS8Tc z5;12_tuWqJO)PV)x=Ol+kmu#b4$TO_gEE*E})MEdNjxT|G4 z=OBd|whk5$(q!yrg_NM44nBqc+$#$I6Oq4Kvz1241CB1Hw*mf!r8Iwih8NnB?w|1RMdkt+YKZy{{)J{>z9FY*& zc(W!7MZX)|Y4K&CSj8oTkty!eMdUD^g^W zZ)e0-cYdWaPS{T(*_t>S$$nzYOK{p+S81J-Vw!e=L3NunjK~d^Xp9ecpiL*%Ud=|M zI!lle8fuzxy@xY|V=8(HD!;HzuAIt<_`bG2`Uw`Yt-_4bW|Db-$}p0|&$E4^xPjmk zCS^Bj`iuGx#Grsu-kFGa7|!nyd;r-_gS_ZRL{jhMY;*0O^-w(e@t6ujM$EHn+H{CSAJLqt|6_ycNdaRSg9EELztxXq&=7|; zQoSAQ?j3Oh#wVcXNAeMt&2*Vs!v0YTm?GH@+TyEM)C2-9QKX$6{rsJuJ~w5l0UWEN z+$KyQyofjfh7ryrR)*Msh5XSz#gv5Biw+pndE*tAiq9$*t%DDF#F9ZHe7dOHu`QZT z3u(z%y=WAIL?}wG!m9C@Eb^2DN)RwsWEJ;C9=dG#+qtoRh!>Nbt)jo^R)D+5Q*SWDJsk#F>Bs-U#^*wLM)B$A}5^PIv8=I+8XNDlW;m z(&-MUczr&Y$M8-4ltm>eMu5VY!n@k^3An(1jEX$Wm$hCpqBiQ-E#~Nn=}>+V8u*lo zg=~u98s;1m0|Qy8F#LKb2p6ZV+b+qzh3MlG{4&lk{V3#G_^m0n&gT(G?*$s@U>o{8 zb^$>KHMRpmA!{#_qWb%ub~5!JJMi5)hy6l(jQHFA!~1agaPjX&q=w=*36rVxsChdE zc9?uGqEYTPEpW}cCn+Yak;2fqUpm||LSn=abJl4`ENagH(R#21BC-J_Tr*26Bceo> zpi(+$=K$u=w~X{#SyW%@HQL%S`9fL^@6svW&wI>ScTiLOVp_N~R07z;P8Ktaqa% zQOEgME^pUe`&xUq8YBcW)->5y;oisS(e&|a z-_h+Ef*Y1gEKHzOgU>96QL5EOVVGqCI@0KRRIIeFNhHk}EUZS2m`Z)G#Wb9yVogk5 zlSo1+G|lX$tG7;k%#1t^HWcJm!ISMHQ%qs^>-}f_n=FWr}m*2?F+A>tfQJ}6?(1y>97n!O@lw!DjRk0S0Y!E9IH^rKMjTDRYlJeB<^1* zeqI1Myrqmu38F&pq}IhxKM?wfpk8f35L`*2g?(4G^Yzd-Oj^)W-PIz@lf@-3`CJ)@ zv?infeVga;s7N>XLTT>L&&Sg+n`6&=`tqUBRi##Bn-eRxkMK?oud?RI^BI-y63&d-&ds7POz3W*r*s7dBLi3E=<0{-|^t%)kTeA5j{N~5w@#~}Y!!`I^#WgNR z{#hr+7LI;1P1?Rg!3f~+Iq3=XMT=5_J5qlIoND47a~$nKhWm^n108m#_p}8+5#&pt zy8n9M-nnyCtFq6c$kvLA+pIzT!I2Qyk)I}EaFd>nV|_T0Z1fODDGXO6Bx&8|BN+i5 z>|CasY-FEbu>*^Ia$2I;-}PsGmlQ$E>61PE&BQ!#Ho{=vv~m~MB{AR${rmQ zB0;KAe%Du2JMl?blhwv+JyN)u7e`hleq^U0uDeQ=Os))Z597sL`vC${&A|k6Sh67927h=B?Q$cBQOY2ZckydcpCH!pjNHrdDZXe_7CiCFp4+{$7A(Uj z2LlG2l|FO9P#mnDTNQBrR1=%F5m!WB*k)MYihRUYvu*@8HqCQZ`t^51_0s$%VW za{d;TB}go~>4Z(I?7I9y?_Q~EkyAUbcI5S8)6_SG>UUJ@SO-92yd?d&7oBC;sb@}` z7Vk-JMEGZVh~TOrV%KLpeje*duaK#c58@P&#P9OM&iemePv zCMBIMxCUl*DSU6=KfLdZO{~1{h>!@u+;He_bMZ<|Soc+3hNCj*Ah|N@rHZ+u6Buma z?QvxAixD(Th)$|&ZBH=>zaM_6`yocpAW0S>`1@b~?93~2Y<%$TVh4h0%XtLciQR$d z=#}cpo3+Lhcik*zqcsm{dHK>SmK_t?n5#gG?yf3A{7sNZzQ7ptS<|#1EHCWLSOE0uX9H^Jk)2;e6-Gvd9u+btX z6IoREg#No4`nQg_&{$bTdD^NH`=iSMIXf@UeiRXy*W-hVHP-5Z zKb$t!2}^&oFMOw#%7RLTx?ONS7@AQ^uy#VUQRD+A4^Ay}0bq|I-W*R~S>BmDhfedm zD3FSPh_-#@1hU7*_UXMmSp{-Xh>v$6xQPHk34kxgCz#Wak&zZNJddB!I?SP^%gvfg z`i>aeMOlG~BHORIV>{v9Eq^(s|!6F=ah>ZANST7k%Y}ql`K@m)mYAQwrRysLV z!I>HdFw>Ufx*uJ|@REFoeXXYEMUkb%iN*3AU?Q)WNWH_H6+cKm*Q{~o6sV@DiF^#mS? z_eZa}B)Uj<_}dP&MtjGUZpWD^N<9-og2oqu(p>-A3sG)XSUoh6Ef#BOb4nO`;7>T0 z?Twzn%=~!4c6wbZ06GTlwu6Fx&h0%g4W?b=wbZ$T*A+ERZhS*lt43ktEs3*ou6rPK;yu|1i*gInj(@h(Ilcd~LEAZIlTujnm=xNw%Kz@VhOI zJm-q_RC4^IDRx8Kq6V_wQ|?%y+CUyI)tjGV!h)RV5)w!mYj?)?18NxkE~ab^^u z(Jae6eHz{?b7G@5`4}3o_Iy$tA!|wAR+vsVDyZ=8CQTS$dz9w)c!hlK-{AkvfdA5G z3m(PfvT%Tas>OhSX#O(>l#%=;DyJ;^f0Ai)bhMo}#v1(c^qEUArBzwoud)wK)GKNV z$tH|Ql(iBYi&_H?6-3}b;2`2tf4(38Zh^vi++9b~;%bvIEiV48V6O-7o7=o>xYA2n%G^GhTb}}*e(q0^&-@MchdFQ3;Z7rK>ta-Ht=BWVuBx?n z7P{!#ANA0>+s~80ue*bAM1h{4+cH9d)v~j`)x9cOcW}i7uTIw^iW-{MCRIaBkvQ4= z65Y}snnh1tF6r4B%M17(nH-K5jWsJ-d$Y5FqwO`*hH?&uvad7GP7TU8>CE2Mrh$7; z#Wk|YD2~?4Eaj;^f!`(4>ICEN8P&UC0lcb)rgmU{?aFlX*y%IiT00s+KqoY z3mK-P+8XHCUq|ZRJh_nZ)Eb{zP!CmK)HQoe;Y0yb2fqJ9tES+MTps3%fl=}QYzVZ z6t4+tHEx-aA=}J+8uqu?Y4r+VCT5iI2K=%#&-5>0;w)=vssqRCGF zTvyKxWUB}9LDy4hH22i%+U-QtX{Y&svZPl8#uM~_2$g8JHx5}w0MqmmJTBQtuje7W zD&!ST5ti%GEffbSrMuqKfW#$}Hc~Pdfxch1SIWH&WE!lFL`c>(HOs1NtoM}o`OaIn z6#k*pd5;o3cM2>?BTG-je%>GZra{#s%PAo&QooC#u@c8Vb6wz*W@QMGqD$P^?1t_R zyh$tkW!P@-dACyCNmpMwIx%EEyO4qI(d-m0MHk+kYhH24uy1I^|`dL%yZXZ@%4H`c^cXc7{ zjCXp0MwKHZCA8?cT*O%JSuml|Uzu(ZeJM@TQCh!kCvlp+DEu+9X!6agp+(Yw>(1)R zz%|UTQi-3r6Ry*#3F$^T3D-kX^+$q7NsET^xUZ&3$Dn5*hR&s#QElYrx`L&<(HQiC ztrDXG)7P40y2urx7zG~RPnJe#)+Pv`P#g%muPSPIs&8o-WMMFPot_%Mt*leEEm4}X z@t$|}77iPyio)HgL)pxFLdY25Z*o#eq1fc5T{fh0JNA&4;Z4kPLUqa|Y>jm}j8e+x zze_b_6!T(S37J8OAcVmXIJD}W*tuL}po#^HFM*a@!%WphlWiE*iIibYRaL z7r!|TwAFPCKz3~({<~H?nl*F{O{QusjE2^3$r$y#Ybr_{B45|w7+psjqPf8Hs`gA& zC)#oNm3A9flAXSb33pF?p5wiG%vH8F^{Lndv2-8rUHh=v0DC}`yO03l2-%BI@9O}!qF zR`$F9<+wehUrRu+p8jx0gJHBRNRCPm)p|hT6s&v2x1ttzz9lpuP!$-=1LVh-PS{2=&&P)#R^aJ!+JZYPrZ)E$UEuX?&&-9VgJ2ib=FK=y zafx}gxMMuK>;S6NlXk-XoFV{4GHjb{7Zv1=U0TJnfVc)x3lp0pR^Bbjmm@?>608PQ zGqVF)Y+w$k__uLv&)Dvz;wcZQ$5li$-yl#aah|b=3xvX~Ts+!i%x{4FP?P6LedZb` zjMqwu&*3R9|Ck!uV1XesFWv^df2s?@fH|U7SfM68 z!%IvcSFngq73EREXBgfAh*Z($HGU~`mMjNXk~!qiDzCf&Uo8KETs=tT3$^dU;ZnVa z9;Wac7U}CA3+z_!A~u->4)nFsa`b3|j4~UTIXOh#!r-JkfeYQljL6~vxwsrY%@(KX zInAmIaIeB$6l!ywKBa3_=ZTN z7vLR3BM_K&7yO*BhS5Bf5VXJ0-?=p|Yqy>D|;N|BV^GQgY*NJq#qtj8E6 zEa@#oLI~C_$PAnWc}&KXuncsm9(lkc_D-_C|>A%PMBrv`;3XLfTts4_3 z>yQRv0P_`#FtV1JH2njEc8Z1qRiGc&+XltiW9SR@$aRJuEECiwU9sp;8K9(^K?IkO zH$RwEL=K5d9x)(wO64z^NQ0~tj2R{>`1JZ@AtV-KSqoOMt-?UPka~-eO^)J9o$Ui% zfTR#49L;~^shH$0l%f#Kgey9FuvSFCxCj0iycjvh1;jwk(jCx;^QAzG#GQ%Buzn7% zzP`Fo8pDV~*fzbtkNylVHdsE{h}2u3eKgftUsvJ1@etW16@5Ds-b;_yS(S%uz(d@5 z&!8RpZX6FhKO#-E;wWLyDwNJh9^5r}pUc@02MJTgB?9$Rv8Z&;+_=AO^aZ=Pr0_Z) zi-y(4U)Eo&sJ`9Uj36f?3qvKiLz#@Cb<+ej_$g#HUI&H2ZJEJ`AYJ}zN=SS^I$Q0a zk|ADk9H=1_-(!^rz+aBdehc%$KD4iXXo3z$%r1mX2ZX3?fyhQ*Yub83N7cx7_=o)J zjkMO6%+KC>Det1vv;XoeTb>kDv?b%sN5c$ z(xd|~UdurnCm~y&Nw9AqS@<*Tye(>5u&KljmC0jsd}NC>?qL)crs6~ z(LQ29i7IP8y1P6UNU9x8pY2=eZKwgNjj9qHAor9KIVtg&PUcR|O#lXxu0ahm=bV;W z+;rSkuod+O_rTA&q60pb@!|+8+&iE<>CP5Us+^hs)V< zcm%EkGifzJdIF>#M{n|6fbk*zeajfn#;y3eLrmQaib@8ti^ue2jD!2dKxM4k%q_;3e8T$%oZ`;?-9NO?wo9`ywew3cvd zUE06T&je3MA6%}C6_pJxYvlYBPyUAv3v2(p|Cz zT;7^U8q3GDc|Ws_D{01gq$ar6wqa17thW~*mda+SGVvRQ*I!T*r~{=G{UIMd)$#I< ziEdg$M*#y9P=_e5iHUw{9u?B?n5DgR=7pL67&sdXbj%yt5ugZO{7g&w!~|$$FVwO^ z!VW2mP}2@7!%xu>L4SGkRiKJPi0tiaCL+_fzp{ujudk$>_eDuZas^QFlAGE>F2^Z| z3eF9F!22>Uz55;Qthv@ zCZHk~Fqf%r*cpj^9v+|4pTIHCE5%#O=(}-rb=qKiu|T@apEOCvs!-b|VMtvzt~(ng zdg#+FC?JxeO60%Vr5sl*=_Z(+J?w{1y3kIWg4v+%V@60f%Z$`RF5lBh8|}{JM#y=J z2l<09242PNaHqDxYP7gJsE$#0PZYipd$ja z8MLHV$$reh>WO2`T)Y@4!G?DvVs$Czh6ZExPod$5%axqedLPh*IBJ>u@7!j8i$u0* zoy2ITADht@mGddW9&tOTd7~YwLs}4P;Um#D0=d{V$&5tFJz{I+w5|lgi;YIMlxX6% zN!66IcbNkJ9cK%k=mtk-?uA zn;M5Z5@W3jLv+eu>{fu@u|giXy)3Ez!_eTv7&n?WOjE@P&sl8|_5$O(mZ1ouZ`3A9WW;nbre=i?l$6q~b#`}6< zMaqc&XVRD@QXF!3<1g{wH`#4bC%DgW5-Eh(PW21#DtGkI2UYw7bFndsWCjFWG7h=in;)j?{ll zEg*?h4JAMNf^s$BR==q4M||SCLoWS4+?o>GW|q+a^QDXdSb~xty%$HY>i1wpBI6ZJ zdGNrBV0f4WS{1y%UVx5pycuFoWGjop*E=YjYjS!|GbCWKVOa<@k@I;@xM6~SL92p& zV#O=8;IZ5BJ&8gsV!e~HRG^)5XkV^L$YS4JAgu21y57A`3WpU}GVPIiptR3ci z-Xa?%AkbY9xJbMSW@uerQ6~gdz@KL#CHrQS!lMrG1lYq_L-%wQ{&5ICq=vOE}Mr3r<1B(_Zal}GbP!S zlHj(IZxxo3SF;S4H79gb#)dWu{khLoHd|cB2`(kZW66}QeU9^n&WnW5b`Vtar{pU; z7Wc8$F9xP^Q_qX-;?;Prz_DvhCzH~)rvFA#uyX2(7@pppDZnFqDV;~9$eFafxrz@3 zy?M)eE*C5KdZ0kxX=Beot@j=U@nV@>nWq-fp1!$pk9HYU22W{q#n~;I?Au%Hrfmie zg3~*%eB%Jq1F~Qh}7>`!m;YM&Ftote;RBY69tlv z;+G}>997U>{H)tUHANGPw<#kogB#6?~I5wya6)F=w>5%i19*2Xp$dC@Vap zmi|#x7zfP<>fjj&Fp!a<>>~%hebk>}>-sA}M(Vz@+bfaIoltu1HZdh{`(kF^-{SG`;>b5%Lz;6t#=2`8K28VPwc(HOyA-(KTEk(m*kt{kA z8nQm{XKrlWC-fNK0OAdfOaOaMJXUhCohkl{Q1~IHW1cjov3rT5GPvJ-K%f`HX}GRPvsV$UPdPsx^#oM?pu z$PZVh47ia$=4w%hzTRwI1iZ50Zf+b+zmvk{llskhGQ+smaJ_l35v~Snx_fYC_~E@h z>;OZkcUtM0u^9Pf1g|H10_KBvQ~U^&dE$StYuuh}Ab?WCChtl>>>w)_KhC3IPk@kekUD2)ZoOz$ z7{+STtfUY5tMWjfrhyRX-16T6joT>)^q_XF6yd zl`PIWk1!WW>U8sk!=o<*vah_L8+#j}&b)|`OwTK^C4=9WfTp*M#cb}Y8y~SQa=ZU< zO)fl%vB>(iUncB#FmeN-@?sLSnkQED;M;2Wt%P)#emlpya~knf_%^4+qi5 zm~=W4Fu1@7JBU2Uys*Vw%jAI8mAm`g9Dam4@mEM+`AYG|9?aT!^sjd?>IKM-2>f_X zN7mDVC^&W~U0g`~g6@~A`>ri-`Ja5u7er+$Tw4IHMrrzY56=GCxP#26ku#2tzJTml z(=FIGkyWX@iA@nR?C@@v&2-VYY(3@ipKkn^>pTibZZRGKB-jSB3oX+4e3Qj!f{OtB ztp&Be?lgQG4eRFK;)QKE3&z1&jHDg}Yoqb>GU5|Skh(%|9uph$mTy<2px;{@*Cy#! zeVSD&M&@v6r-SAm$IJyJ@Zkh?R#3W1U^7wlqK=`mS52laITaYc*hqVUjilOxI0vYc*VVv4DKHr?y_U?5adkx_NB>M%0pa z4q_Am0YXYr>HLQ9yZHM>V87|oApAGCds`k*#7UoZL=a=w$&Yq1~EEO-qyTk^K8Zq-N(w5A^kReH7x635L$$IKUf1l*STR zjUTo?K~lytPA@ElHuh4Iku1RzjGx1`qIVm=_bv&dmO6cEpX!I|Z{;DEm}~rVcyujl zPLdikcDB1*mOb}cRSYaN{By5tKU-)x*J3>lY0pS?HD_HGTy-|cN1XU^f+efps8%k# zY9&td&DeAM{#?6*Gtwh&QG^%{nr29N>pClR3*&WANzEF%c?HX}yA>o{oa?H=!DF~^yUuq(nMrD0B2e25ny;1YBy3IRt1RGA5uVFBm|-S&(TR$v zmB1&Lwda)-&ExCa%#an5?$JjA-)RGBbo7*kbH@Go=JVk)-|CSo0p0w}1nRaf3_rr= z-!wQD$9qdQ60ge%pS+)5YV7HDJPJ*@*eSUidty0@JOsSNm9o}uG^=(!7tUyU=aCb| zyO=s{*1kB6KggY|p~h(2u)yH*+6>ShFWG7p4NWAQ_;! z4s>wQKh{ai?i3`96os0^>e&H%SAo)}r`=)7KE<+s@RT>WkMC#Eu0emxQph>zXE&L& zkV@0u>w7(e7BmBKI0Jc!m~Ypg40j$ zZ63T~GTn5rI}5?4HyZ^Rac9i*7HDPJMnjmLdPbo~8Rw%ml7*q))CfSL-D7BOd$9GH zJ3PwSBb7a17mN2OUK5FQ+svI`KbWWPc78i*fPD%4_wTQNB?unde(x3kV*nU|{g2(- zCZ>kQE|zYFF8|iO9ja!nOd^iROD8wR78?fzFdK3M_3C+70_*m}eY%5~3&jk)l!I+KhU@wmVGe%hdk=n}!-;Qw z$Et@D3hd^H0es+!6Thzle6M$6csPvR=JAD5yHaK6s{ZynUC{nYF~6(u)XVC9V9K~f zLP)KM6sav97{f7ns7#Y&@<8_bN; zmNg^*(&sqMvSH*Fse+8oUm$wj$O(^`O%XR|aD98mMQcSGV|v+|s-|hy(2|x`!QIBZ zX*1c8bnc+jMEl#2rW)UJi|%oDnPJFse(qVk%}kO3Sz(b=mIiWT77lC%x|LFOU+%sv zX!foa9R05JgYE278k*3nB$C%(Mgm^8TCtPYuHnKPt)?C19WuxDjXx@3M&ngZ#w+u- z_1bK+$1}?hR<@~|Ux$RZbk==BLLKHS)Cq~m=^Q)ViM~@l6sOZfb`b<<((|x zOpuy>o|d3_c>XPkS(B&b$r{|>d0X#vNE^$a2T&H$1YBHYDMs_Dv9`x3F_@X)H%zlz z5Tcpb-N7ve7!vu5He*n9N_ONQ$Nfv5qp7XT&THEeJK2dkO_HJ|Ao$tBWrI+Uv)+4~ zJi;?XdpFCi?jYdZ53@<4cpXIdN!%E6;YFLM>|V!OHKygdn8n+=QN|Lt2>pthE7}qI zy^m39nW}8Zp@LP%gItpS4lhSqMYQ)*>gAm0ilxqZ%8WP_*HMT2+>lwgc2s^z*t_gbJ(@(^bg0(^^#>s)KR z%3MGE|0f+{uY0U2|3imK{{*=HLpOkl5reV4gXjM#PgSGl|1U@7*G}F(3|I=@kP^V4 zZ

Od;JQIGw!5~KFrX-GNGkip;$`MF?MOkS6u3Tmh3bPTf#(nA(1D>ju=23(E9uQ-QWAsNULT1*P&VNWdxSV47V=is(SxR_X;AhtUbr9alGGRiIQwTHH-#%KRn_+e--F?~=ZEGz^T#{++)DFyQTM z9?JmUB-TA@b@tyll;n&`W)dQql0RcCWGwX99Argq!0Jf6YIGkQMM5{F9N8`u5(!`KVrXPAN9csnWnyNlGc>374dx)3ABAO_^n#U z-e3lj&I;>6OOa`q9RuKhmF`vFztMVpgMZYN^L7?A84|z`T;rIt#7;L1l${1`4OLPO zv}>HCQ-&LH(+eZgmN=b@BdAJ2fYnqXO8hjjTzHaZTu*AnDg0x+v{$uuK7K1Mk;lra zcJkLUm?~ZQH;uEM!SB3;%iGp_y1?-t>%%ma*8TKT+h*(KMN=C`y1}3PR5rHSQ8w%Y zmnhh^Udhr+mMuTaDXuDtRN&Dlw%C9-X^j;^n8vh8*9-(Ss&JyLI~^oaOvacz5c(6@ zNa^SkMJ{;;R_L?|C)d&?>+4ieQDG`{)|lgiJQdxB;5b822Km~)M*!@qu#2UcLTY_X zQ1yBt{3Wm7tVq>$VzIv8aDTqaI-f9`gwU1ryvClC!BA{m_9An?V<(m4d}BScJ-^|w zG3BH1W`}`QhiJSysitv`L%UBlSE2!U+OwCZBwD?^@A0m&Eq=ATjCc!o$h^3C1Wt~f zwl+%5XITg{$bXMp=027fIbK%01xK5#q1EI(U>ru-b1rx|;IgUbQ1#00MzB-nrL^&G z{FOXwtTyw+Ojut7dMLKOS3Bt(el8?c__c3{xW2t(ogineQJ1wgG~b%)J@E$cOTwS8 zW_KTium_G$DidD;z=$dsc&r^8ZS5spjl{|Oxt*+DBNmIiJRw`p1eac+Cfjey9JesT zB-0V{bwd7V|zPi7ehOje{124RoSpx6h!i!RfkhjrBpo!LSYmPOa_Yx zSy&JeEf-!HA=r?%ty|Nj6e<6inOe8YWG{G%X7oOGn!%ghcrn#-;|?w=Lcr^XGS(yt zsbo?^TM?{gT}3l|zN%`10x+^nHPjDCslK8OC=$ld35Q^QJO8wMGm3i9qlBn>+W48H zdC}=aYa#Dj_z=_?#o4ncMR)#TUsj8Lf(! z%-@V*b`o_XOa3cN2VG0qMfE@s;r=y>Sw)p6*}z0N@!$G5?IOxqzNj zh3!nQK-L}aKW%fa!W)=5(7sr366PY9A3);YiY8+gPfDGR#SeH&TG5f2>YzGj30F8$ ztC|`_uE)zks9ZKN{-H^rd-nJ0RQIeJ9Y;@sC#dmP0thLaVTB7xZ5oIQu()PA?g!Y&{%v50(d?Fklc#=U<04ay@{Hx2LofiAMuQe zTEw)^g37_ckgdaA$TqDVVlP^d#FY`;zqhyQUKiy(;K6Hh+=zH^phQz$5tsHcLr*M} z(c5_=*B0RpK%I&aI29K)7Pq(Py4k1wttfdLxXYI+H9-(4X zH|@W3C(52PG;Y?HDs!LfeZ6<*l9|0y)$w-{&}UsRl1vN0g!@i}|0*(+iuF4RYTwzB z92c{%q9x(vLlvp8s~^RT=cS%fm|4-WOc^5FIU&^2ZRPeal1}*f?-AfJx-stnzbZm-17lHf|%_qM- zr!^YPBiwPEzTFXyLt?nl#PH)3fC9Fu(G*3;)0ubn`N#JGoqmoUoXJ|fpaAGjd?X^Y zUR}#;j%`5B>i4S_Bv)3gF0eaH>8Es%Wrz4a1p5RGE61y&Ol#g4sYCm?ct7Vcm_(mLQ7Srrddt(&YnDa5|D8HW~qiGphE z?Iu%j^yA9)jE>77+Hsx~fVZeA+x>_IrmZTLs$hq1>!UMS0+tl$330O+1F#K>i30}I zsWAIc&FhA#Q!cG6PEIl926Neo$7g=$)_qR`NGXKXxC?_u^HLRAD0WxCqFobGj0z`b z7$-lp~dpaxpteP4=sjYs_;x?z_+XH2@jTOV`)H-@dWeH%GimhprS5} za|_i3-PI<2dY^(Yai|UXnKNuPUaN z6J^eA)H~NnaCnx@>?3WSEyIlp>T(=Z6~;sl;WzYE7}i*Z$%2eHh51;6#d5OgM0I0M zKh-)%4*%-El=GKqY_wWQY4VmQ*A+POfT4`x;E#RWK4zJ+Mekn%p{r`CtHmQNoI5F# z3k0&nxf0BVA%@4`Z2uV81?hD`fbqeyYqyIsk4Te0IsC=8uSwV4%Wx9imW4bMn=p8#`Wa$ zT$z*%>{(9f8Pu60NmKp2$8@N?IxY_ZD{DQg=~ni>Y$=oE{P`y}D;nuC)9@^aEYkcM zZtpYvFV7<>y<4^+?t3qTU(q&O_!Cw*d^gva(Uz<+xA~3$lM9@7Chk}a5vpTx@C+8_ z*ctp?KihstmcM4vH+ea-Xe8X}=w-)Oucn=C?3|+!%nQITer)}+_ zE?E|n=*H_S!>CqSNGbC1dF z5WSmwvtA+9@I-4HQ-gm$C#_}5KBlXRZbb?d{z*(-p; zXa3v2##0+C1N2-i_Kdl0+v>?ZdVOA*$i3dwn^XI;q`o_JDQU|uH)adUXH@RuOEofo zHksQ8KlW{wIhocX4A10mUWQ;Y<;tu=AznH}3kZPnrJR0IXLYIV9Mjynl;y{2=Cwl) zF$m;mmZ24w;7$Se$@qH^+h$(?en*gr}NA^?Ece_Iud z?Co9t3z{ImErIYmSC3J&vso!r#C_2>um~l!C58@>@LW|@rH1XDY~$Et<}Q1H@b|~e z?Pde6kp4%=cK(a!Y3BHjeUoW>`>Nlo6}joR>x!`jiRLG;I#O_a082D$SYF zr~`RRL3U*)Q&G!kjc4<5eaqB|XoQfac6P?Fzdyk(bKVO><8QWB8FMCyMVr608Jyal zjDK2%CO?`xk)q~b%>j$%_*&BCVH7&#-v$TLi#2Sm7SQAgmaIRFrwwBJRP71aRT0%= zZaoaDB@W?xZiHfG`y$7elDcYFEtZASv@)R%yNp9gf@i0fIk~w_lV?wh_lNmtZKR|j z8c5c&o<<_oXH7yXAzzId(<&o|3ky(OxE?#e-)H^y{m*G`8B7CIfvW+k{$0rZEkd}u|xoAPLIpN63 z%Zmp!7XtVF!?&XGEBv}lhNCB+O+r5U-=<>KyH|rL5&?1W@qte#VCG4rKcqtB`W3$} z4487i83LObyNvAX$Igrrg6ic6|5+0?8aN&kUpsk_UeYfP=YQqrul3`|xp78z?6&vOd?p8#8LQTf0xyWx zq5x4ZlFAb`{*+*j%gLJ5McVd?9~06J%sT{^tx4bo6sTLw98(yl?{LweFYmKRj--)K z0?ReFB#}SzRbbr$z;J6L>}A5&RGmpGKyJF(t5!NFI{6UsIXgJ(--c z2~w)fCmZI?DB@CA&|P1v^6teW+0B5VLkue8?P|;tD-JriL$`L!mZHfNQb&}!C750B zIJjiGOAIB)BTLnOg53sAnRm5ct9o@t2u7>3Jc zZv~^M7&HGWR69LDBNk|F2L53`AUi$fB-@}*W6`OITFOA7c-qbBSJkVPqA*eyVTZQs zdNgwQm{)a+lcnr`{hor}aqPI=vaZR){kUCBK~^JnvuR>qbiu2QlwKTv7mnVc zYPDUVYXof$8dpdd+9z;8<*WF7^KQh|k&$F$+ax0(*k-RDYH-z9_p!p`s3k6k6uv0! zRa@R?3}E<~j!(A>w}%pDIcUr$EuwM$V-+~Hl-!GAxvsiKqTx1{#2%zH3T=R**km~FgTn@eH6$Mh? zy5xsAvSi}%w8*O-w4^CY%*4oxPoBqPtwv$Hq%);~LO&doz2(j`DN5QjFw>$HK1w{6 zUpU{uiWviDUw!~R+OyPs^}xx)CjAbQ&j(WnUP`dYfc1BFz`}zsX9%B`gfX9$T5b~J!c33Uq0DZ2< zw@K~M(N^xkDx%Scr#&iT)pM_NI3f9)cU;NTlmw=>kqV$GNS_H2<)mhZ9qB#ril{Na z6Tj`T`t|Q*Kk(Mc@Zj->eC+4A?3-@(TxZ|rL$$`5pO|s`)X`149k~AAo7{<}QGNe^ z&J_WBx%vmC4e?s{LfV7xxTKA~-0g(hkwB7NW0$xaF`kroNi5sHiGWvNBUR7{jZ7Oe>Ht8{eMqDgP?+>;C`0i*V9cb(pKcG z2PAffb-+0KePabGsf}jQ zmn;HB_BH#@3KMu1M99ZPu}q;6y`%mKhfxvGq^C^MyJ>l+{-m0SCFLO~XWQ6BOM|qT z%tJ=4$NUJx{2>4>5;k$GP>YMGDPCUwwpDvyD};`b+_%nF<})F8@kPR(PK@2fss)ct za&t2?x=6N$XnBuZrIE897sFX;W{eNLeu3u)c(a zrc_X(y8>jsX_R!6NfbyT1fHh_-W*e{A~_+ET9&9H97{3iIkS*s&?s6IPoqSL20v3) zHoHw4k0TO^BZbT!L@OzKYhi? zG@%K?*Gru;YH0L2bI6@W1{K(insNDhwYFA_TG&0&XkC+<;aK+(*3*fV$MQszD3In9 z(lJW1eR#5OwiYQr^2ndJw{BcLxl4oRdm#q02KzVf&bU47&Ybe~NetVLd15P%(4tF3 z<|N0?h))Y|WW!(852K{Lo!CA&@c8G$4qUjqdfv89a&SGw{z&k-!OB*>l$Q)!6G|5t zK6D*(_TORxxaWG4Y<}I2=QM1g^dbD-gv&62yX^tNm+UM`2?yZ2DezmeZ6jCWDUMpB zPvs(E$djo=)_^2~Ou01$=)eQNr=V1X(sa}(fEw4CV5=f2D}BP}VtOM&>J>dE1j4(% zPN=3XG9WQ+Xc)Pepz(C@4KDB zCA7*|B9L+*pI{&40=i6BrJV}&Ixg1!Wqzb0fVA3Ep+sJOSI+kQGZj&&{ zooAc__!RFH;5Eh&u!n1API$%FnU1+5CT!^wFSdMM7vGSdkp#Z%5@3ew0jO3F4cIR@ zw&g|tIy0zU>5jJ18&$BHBpP>ijC_C26sR0t67 zZp%SLlbjopEp3lZ%&h+omgef{&mP$OJAeOc=;D5rX?xM0FM1C#V5Oi|2K)g{CfYkHY3UiE6-z=429mhptJDQrw^=n@KJv%?cQWYEDG3S3yBQ@qFO$7}QWrZMyciRU`;~bf&Jusz#}-XOwgP zzB&2S%(r{gW8Wzx#*Xah4=ls`D9V9g{q0!rAKuX@8^w}imvgtP)?F-+kZs3ogSTu?zLT;!4l6|)EdnwmgUZ#V; z{|SNfAFXYL#2(75e~w}+3;+P_e@!->O#hK9OzB)aT>ig`+ofu{_B(6{KK=TQqWagb zB%J2#vOpN2e^?#>-7Yuif`-n4<+qj@#Ur64KWctI=ajnYS7f2zzYQd`oZQXL!g+Xk zOSj|Gxfps?1!q&tv(^Ho%Y)ijbMx}z#Ln8_a$W^P zM>F`UKby6h@R#+oVyRSE%P^0c72z!}q;jiC_gJc++r$!#%*EKhOIJ7IRS1Ts!r7mh zcrkYy;dKP*hKR)FNS^8*vK+V#4m_c%v{Q)`n%cvV7ohA zQ>&culoa3ipn)4Iwu#SI6aAqVuJ8(hY#q{N94p3{79U6>J=uyzUUHY_x1 z0C7&*s$FyGT@*kwa@;G_F^QFN35QX5hA+ z8I?ILVi=X&EmH}($^8V9(6-$H+UQK&V@qD<#5!Gbq|hl$`xQn`%4ju=pvpR%Rd;Y$ z^j*zGLnFpE=X1ch?qSco;20&V#5xa1fBald`!hiHd92vHPE)Sn##tO7G*?0SCXgZm z-BuEoP_0B*ouvT|`PoZxAm$VrM$?)Oe|zE3Z?5NqTf?LdR_2rxQdpzQE?3mKabIQn zofX&sM5N9AB9Zvpgc56gNq$rKXjSA1rL45pH6+;DV%>Se`WFfk#xA6+wxPX+IQ}XG zi?sd()iSIh{bo7U{6;;JPyPsB54^_Ju zb2=iJ?%O!AWSWTAH=`%dINV2$kY;y`%oW1ZhLZN#VqFOVjV#K7p;E|Gvx)tVw-Ava zoUbu_&tFUMa!#SyWR<)`*2p&OCXg?x8g~HkI2JVxXA~gWp4_YW!8ld{y!Nmv+Bv{P zqOdM--e-xCxt*hCRLLn&Z}G%ciWffOI_Yz(f{jj)Zz`DDWL9ZlBw>Q2y%D>sFUq_OvMwQ$nJJ5k9nu28M*#gdptD zuK+KQ*AHvND~@i$5%Zw|Tm9v}2_sBau!L)nci}O70Ws8BlbJS*+tjRzCj0aFLt_}Ejj44k}ar)J0=0LZ)8;PFbNlo z1yX!*Ae0cPTKde>FF_&PK-FF34zJUG9j=Kb`8Q!{=HkX1%1h63E6_~}-CP%UIc8gv z2#u;XW>}9!5+owtm?J3JC;U6kLB$+q(CYeg;et09$P6E@=--J%;8(D{XJGmH=XE{1 zdn50j`^Vu8o3<0#>-^yN>nL9?Z{?(H-2Sr3GIp|I^ba9Z9;zq{Ile5bknCI?60k9& ziA`Th=5#EO7~d&hCJ*=9B*|%>S_50A$xbBo1A@XH2K3j#0^0>x4mvM~dRrS)#*g_Y zqE({wty%9z2a3nHk3*cdgB?Z$J-g?zA)UET$-(&t3eG6a-E* zm}FP|G2Y)J^?Ca{RHVPK|B-nAucNI0;t-~a#u|BV&@E2QVv6#M@mJ&)~wDen-hxK$uwT+cG8LCtCq>MqqP zjA011&PA$eI+1!tQ-0hgr*z;FW5P~8i{-rR+~MW__Hb9DyCyl%gbva4<}Oy(>(`OH zd`5m=JetXnFF!>;m~(OWe`MqVmEzNp8%sSYGF`v@qt%Kq!`THgbY~2yUNuLkjmQrX zIuQF60hVzwjQU~V;VED*HmS2rZ_jimvZ94IDX>2SxByKfq%e6{!zq0 zO8;sxp*G&{`^51l$)~)^K+&S4+0hd>Wv@bc8e=Gje{1dI5+6d)LDRrLArGZ$t<*3; z)TU`LI<7-Z!XLasd-i{^UAW6|Eu)NUG-O>bflRmg$#7C)qspu1#jEXK4D95)8Fba* zflLFi)fDCby>NbZ{-cDd*3%Y2 zWQ4K;?ULS`dkJmqAwcoM_2P7Om}a? z%gg^fDOs}hClM*wr<#Cld-i)q4shEj5n2PistuCNCBRar*Eg2*j3TC>VUR>7ZA%8} z5d15byh_$%)IT9rK0M(%Bk)Fnc?Z#AA*GC+eK5nKMrkL$2jEiFNVJ$Hd*oqjqwH0d)JYoI51>k}AaV%zaHL*}tceX=9kM21U<_KhGET6`6jL z^_L~!`1@mj7G4+YFZcN~peqsObex}T=+_x*MOeKT_m02Y+n7CN>-W=JgT-5tzZ$ls z|E`Adj(31s%LY+O^;GHGyfX0%8;YCbiRo`m30j$FoCEnlW@`qd} zEZmo`=-a>3SepH#qWQC8MHCevO`A$ZP#W1X*Xn(lKL=Rr zM=XvQ?)$gpx8rmLODmM7=$+yLHYPZ+Ox*e-@`yIin5CH)!bkl1u2|6!kx_xHK5o?< z%R7zSf@Z->LD%#vATpQX`)Q@j9&@4lu4_^8p7E4#LLIz?VDZrIU(xs zfWN6(?C48bNzaKs5FUtV*snIVH>@zFqKA!i2fPJ;Q=Gj|>|ge1daLuXS16z>Ei7P; z_PKbeK!f5U;z5Ui4JOi7&A^K-i2H@mTv~hT4jQH#nQytI7p=u_E7~=VrI>GvJ>pWQ z+o?NjqZeflP?=9!13n+U!5)l*rF$?q*`^J2ABQe99N1_{CDAfQEnwU{+~pxPB>#{^ zY#ktc&_P%Kt0l*qJgQKKXx7y8f>Pl>fi+ z_5VLVGWb7`H%nKvyX83m09$+z0R8{|!p1g+&d#*|B-g>jp4Qg$-{a8Q|Bv4*{O|I> zV;*bgZH}b;H8K79P{_e&5>GeU~`(w$oGxBS5w(cXFPyBVcnM_=+Hy#to5n?xI zPP^tl^EutP{Y|2WnvDluv&=edS4T2{#-h3#5tj2@{4I9E_@dVnPw$~(4wssYZS*=! zz@Aqt;O< zh-ARl4fu?HgR=CYRAU4@>=7C`S$ZS`KY5SyfqB>S5yrQSBgqbsZAM+YK@WZ4vR(_K zp41Bu#_#BiaoUY`OuLP!aWcBC5Kp!v{f^WFBgO>|-EFybHIPn55d63z?U4mZNt#rm$7|v|}K-g`Nk4gSKhIf$39akE( zQ8O5RxUf6Np=?Qej%(SN?7eGRZezW}E_w@=2RMG9KdDEY)h4A3ZI}gUg(U#gOE-%S ztXD*k!ndQhWs_?euGk|m>CeNa;u8e2QCsd0Q>n~c&&!X!6lTMN77RVOM7ChfeGl6HOt>-P4f|aK zMS5G#@FAmM&$*$%K2Sn^4t)vdK^*rB%)2ryKOg?VEh3{oe{I?NaNIXb=Xv&DM|t&iIG zOcuENZ{=e#e;LGj4f)4Uhgzm50V0YaQsn$S^z7G|&F<_!#~R$5_XUn$&u4{?LQ{rn z`W#vFV7!@)+0<-6Ak>=&?-8xx!r0e?qX%a?uJvE+>doP2doc9(;l#%bTtK13G6pV- z_h2GK0LtS52^#$%gajX0c!hBhPo=en-{)d3Dp|-a#C`4m&>*iUB&;RL>}8V-auOy} z;6ohIu2+wUW}-C-LNy;^nats``~g|8?3^=)Te<<~iD3sa2cM;E2b5&#d+ReEzRzxF zx3LYws|r7&bm-_^xoY6H>ndP~Yro$PQG%V>C(S39K0a22LBKWYd&{hVt@ z<$1KJach9P_Pk2v?YHi2(gA1L6)0d`n?i^OvJ3pxp2-PLWDGTT>HP4Fu3DZe=H_>_ zWjlju!DNFtcC5vdl`*gRI*M4aA5LeU3IVY`BCZhU-Df1F?1 z6$&`9b6G_uK{zGV)e$AJSX&?~uFlZwxqx3S1@1?yF1CU}=G)iOusj^*Tk0O-4A1nvEtPL4UXrvH{RSs*};#%FuH6 zF~vHIJlg6}T7bu~^&knGAH7F9Tqg^GWnyS`ZS|(n9$*;>Q=rY#7bIE_Y+a&Yfc0Kp zO>~)H19>5!GQ-Hq_Gi$jr(U!wDrHbtRPQm~=kwW$tNdp;z?mD#9W?;i#&nQQRT@E{ z!gFqEysL&h-}5>ellrtkXO?YnvjH8HLtVRJ3rIwR#-KzaH5n`PArvj9r06we88d-s zE*K3m0vZ?g$E7H40gpeyHh&C-xMp(`CUFLiGDm~Q3%(!`to2@y=>UdgwgSf(Yu8h; zt6D=JrHlch3<;zl7(Sj@bE_b%yC*c9sHgBu*vHl=jtOnQT{50q+3eaz`{5mg7X<{O zP%sj=^4T>#E~zlkpLkDzL!P?ffOr58-X$DLw>D`Y*diY)bYtzu(Zx=_@1h*xr>>ws zc!Y!087g=$cK0zfNwS`tgxF*NGSRvihzFg$b4B^aFy48fEi^F3z^%)TWY0uiEh!2G zh#NCsnl!Zm)IkYaGi`)Yo~L%=D~)kL_DVnsk>nZOMI63CxkKy!!Nh9U@ZKa^1>$sN>2ry*Hz`f~e; zce!ll>&bwfX$=Tib)D8}qcT7yA_#_y4WgM&N#nVRG9+)u9_QWwR2sP_Zws>CK@{CX z=z^VUKe1smp!%hhL)0mvCE+kAQ3Zew9FjOhPMYD-DGdkiCW9X)yoq;~GFfby$Dc^Q zN`yrXec+nr-Dz<3+NXvEwS>o@WJDAvIRdV}gtM zom^fFaZ*-T3t#G{fbv^(X6W89b28m|9somM2_^9071B!Kr=Oir#6 zl6vp?ZLRS1JVSSz8@CRKGoNv(V3pLENr&J%=AAAi%!*}9w(;T}(ZBz+8t3!!^Kp8r zaSBg&8Pfb(8_wYXm~xNH%m03UJ9-^n*Z{%N%CJ+Fb5KT?kVSl!UuoyJN6)7y?{=Yu zL)J$sOs9z9im@- z6Lp}?HJ(7HQ}s5!QRU+2Mg+X!pc0&xlBSmMKjoR0SIWzP;Q+Yc#*>4%NWAQk7^r_# z`7=WPnl5x85ie56F&f4yqrg_L3gFQ}?6{MZ0BK|>Wfoyu#nHBxFEfTrbB2{3ybq>g z!RK%Pt?tiM$FAwi!uDCr9;~>Z@sA&69=u6gw($rHS7g=j`(=>AhZSG9kFDOm?$N;5 z*9+M3u7X2@(JX0C0{v&%OI0ocHA3yW9b{dN43}jx>I#hJ3+f${i)d1P=`CPX@PW$K|K< zB5iH29?tT~+p$Vq3~}fL4&rI*naf~;d*>2XM(Wa?fnm_hZo?2^sKKRG6iuH(M}W_h3;uL&Na{1@K1{ z$%0T+O-NcgSVSR$R=aa}CJD80qN_=*9R0M(gP&F~t=bm{={<&X6r^NeC#Zf4?$3yN~!05#tN^dZc(~ioRQ?7*kI?Rv~iXHBH!WxPU zF^MQGm^=_uRO5O6pKYmpbU-MGPTn&z4fk;G#3h7TD-1z(`Caq+PyzO#I#Z0U;v-HJ z2m(%UR)p2#AXIbg8HFdo=4E!U1t!OeGk>aY;3&XzPaNrSbCh0OoRvcQ%>lhepg-rw z!MzQ1tT3$UKrw_sDRo~X3dCn+mz`7lLfh`lLsu|6@Y`w&zykb=L%jQ*J^<>!QsF+x z8sRDj)uG(CHerSu5lzw(lCnyj$d>@*Qbzdk z=Uf>tpKB9pg-r3F2D&S%^6Suau@ePs3A&&VWyh+71vBXk2odAomiU8Cf-athS>OV3 zF#LwxMK8ZEp2LG=UMjW*fa6b~H4vp0z1~WQK2cyuM{-dn!XXt<%tbPg=s#$(k%ktG zKvU))CZ>|AWDX%IDQK3tkGFzuw`hrWbDU7uV}O0 zqZ`0~o%_P@kKy0((^-Y~CXB3aVn%s@ral0dF}wAIoRRxc*J`PKGE4UNER`cY5N3mF zy+fJ}?RoAj;00qeuG72)xV9d1$3tc~95lj_eJYHbzo5u`0t~El6UCgbu_~(eRRfIX zC2KDJsSt;d%nPNEF9!s<)eA@n=4PFgv*A`q?n#K2ng^cP;-k@O+An&q=e%JC(mUD4 zW{)k>8 z+IpbZ^#1`+!EU#PV0w%bUc$GBwA9ecc0#EB3Bv(iVF?Lm@HiEcN<s`$^@sP5dc8@>sD;+R%N$)U_7XQ^PKBzx2j;K&8Na|4p04-#6N8hz`MaRHcO@B$^ zAl6{8$q;3|6smKWyRq2nz7!6U(p9|QzL}l%V7k($vPjTq>i-VqH4{q>1dfV4${YtM za>kb1&2ejnDzOkkw%b0DUfx3K0F*rDiKLXce=xwzO&gcnCZAs#5(yN8PwJyHTd$t% z>Ax2ReBbjR3}J|8{i0N26~e4@=$;MR=0Y<(msjkb+p3w{O9c1BNkk3Z9FyOm3e3O+ za+f6G83TGITo&Yi!eHc~=_u|2E0y`~lyTqFt?9+*@O z93cjb$$QYDAGcj=wgpFpI8>#)`=BsoA8!C@c7M8$w~VeM+`~L1 zJslQgBbq7M+>)n|jVoeuXTbBUlmq=B?&E%anCvk82uj zI4UbTvHZHw-yZj>&VpI225^;{FF{R%xQv5& zxHI8&i~WYkYhy0!rGw&8{jDC2n77s)DL9{Jtg}FVZ)2clPSfj}c|X7iUCT>^bVHwJ z>Z+vC@k%wX8mS-<05FtCnX+4#3y~z+YMlyoB}W1+=%_SAn}%C2ieailsknPr0f@<9 zR18!L<57@mfn%m#9tFL0%V(bgc@Tok5aj~u_S9P_x=?&IgC>50J&$eW1(dVW$K6PK zhg%_3aIWQ-_r%-euU@3+w)T%y=G-gUP?$iQgLi=@TJUg?gQ(<0>)vC_iOL<_x`H03 zK<@^9u^XZIk@Von=`i++H479I2C)#8tXV7!A}@MH0!aj9$OV&*e}@R>Zy4Y7?7OOj#0)piNTT5Wr-ktV*AsJe=VQaAG@)La z4qS+a&Uw^Jyj<7PS`QgDxIX}zt3y-RsI?M@BN#AvKSJY@sDnuaz++ne#}I;UeF*t)JUj?y z+6{%7#HAb*6nIc66-3baVju>dz<;nToF8_*77F2oj|0^J}PTxr7V;Ik^B(xXnz55DN3|mgK>X=T zH|bO=owZu1DGKX*F(P=ur*{ab-praMy{ctwEIInF(XD5+pBogbJd!v}*yMMJx5dNc zMmH6zJW`F4@DN|71>5OZm_UbBW=h0nm1B>qfQ6WW5kB^~*_sZ>vuOtpJezjt95=Bv zsIUDU7?z{3MTLAhsMK@tTa)RoC=K5qSW=yA^n{@g49Mw9&?u*-*i?v{oUu8r)fj&W z<@DdmmVGg5H`mgypT8O~h4^esgIqtlllUqp-Rdt>eJlNW z@KX~SW8^_mD({B-mXm@fBEJY8G3gUExEkSW8e(X%0w;>xpsL zI5Q9>nCB5WI!oX5zCZydi0_>it5c>5<)Mg^Gf!YJ;MTe0>E#XTS=y0=q+<7N7_8IT z?2nX9IPxn;-5Zrue|{@g>H+b}+&wbQN&Q_65^$PT?rwkIHWJrAZFHGV2sQe!goSU? zd8hmUdQ+(FGo|70qw4pb%1UI8+QHL{3l)FrbK!CKeg8ygE%P-DDDve|`Tle7;}dJ3 zH;nP_r~!~pzl*Qo9%qf6H}em^7@`vi)^&Yi_plV;^D}ixY4&n>wN}mG*m*7+kl4xY zZdO8HvG0HxzTWqOS(M@OcQt&-WpQ-FHCV{E4UfeJFi@Qg59K+kGF1Z#lAH( zD>+56C#v=G=VYS;@`oOq7`1tft|yDL#u+^TdipRQp0Of3ONt4I9W#LlPF5{E;Tj5e z55c6r?w(zZN9R$D(uLP14ad!~ys1OzKw8(IS2bkBsrTjyLfh{IW_dfJI^rO#vLYfi zRifK9nyks8OTsXbYRUZVTVd3+VY2!~wd*{JJJR%DQJ2X`WMQJJ5d6fiBx!nW4bpdg zbl7z;3OA^B*7IO&k?wfuL&t4Qo`l zfqE|XRg;`H8qnylrpX~Dxzoeof-cpULyY6#crfhUd|kj@L3Jb<+R6Ccx)b*GZ#C^FC!(v(b8BN6~^LHx%jP+d(u638`8+MQ7l@opExD z{l;Asn;s{+yG|?hq<2$OBKOVHaMT|%!1YML-dmtz1u>LL<4$iXC$9RAGrgg9+af9k zxOWB3eZ88V#@nIyK}B``xhQDuL`6MPoF9L_prhXSZ+dOLu*H)Y-oJ8{Qy5nQT!IlK zCEG-`lL(QL?z2EP04y|%*Mvk1B-F4)8WjU5D=+{Y&jW4;&uz!mzBtC@@NZZY8tJ^LI$!?naL;G zWw%2)?m&01o==Mvn|%+G+(g@86>Ay&VnMb1wMJEJ|P~m&fl#9 zCPjm^Q=Mf5j*kaHU1owv3QjX+{*v=zml{8CCV!Q6Im7zGsILzsDNId($G4Aj@8|OE zdEK86vQGvlKd?Wnt@{@-&u8WIO`%<7mw-s6v4O{XY}YIvuzjys5#kw+Xr>~IUf^rzk$3)a(w8kB6gR)S zk!sNZYmVX2-ve~aBZbDd4H`Y!kKm$CILnmF3**m_Gbw$(D6eDYC*6st5^4Zi0TDTt zEuc*2aDh;lEvuY&DmmajGqi9c1#WjD#J-3S7Cxhk-dh>X@Lh0HhM6Ca6YPG8q8ulD zUP!fUr>?_?&qQzz98pA0d?!r_L#;@|(y}+Ek@U+HobvF~GKBgG#lHZ;3m0mfZIt>* zr)oEEP>^ufHU2JCX*`{B-20Q;Z2nVnRf_lHM{O>x<2{gx&>)P`Fs8fJf-v@}<}6*7 z9v*MK+CoFL*8uJLGW7(GbmX~shdTuOc%^>h$9lmNzZR?z7UkE|1<1Plk_v3XC^w722PP^E9;OkLYJ zQ-_L4Vh>Rg9^puFbihcpmgzJi66y?<_^2-)Ig5)Ezt!MWiaTsGFja0T#&pynGmf$r z|L#bp)6~ccpHZm3$%X@bZsaLhp$7f4T9uVr40^(}kKEo^e>4EplLYyhGlljf+7=>B zwWqh#kSkghIAw+zo})JBZ*!kzV5AX@zHtjiN*>4`+T?!TE>}o%y~93RbUn8`Q=wy8 zb&5?2jY^NcX~u;;Kba-#a|82}lpBdIr&+p4lZ$=?P+YF$Za==E4le0Wv)DxP$;xxh zokn!XNRBW_ML9jy#2qYtW(Y+9?~Fi*g$q-$fl0+POemZE70E_|a>c`lq)sq{NFSn= z6sBnn8IPS9cY7?{1s@9himw4MVHT1aJUi9$Bfzo6nPDegS4lIB*N{@1%$+Yo7k)#tpsp*gBHFwH$MLE1 zW)9I}X*Ju+@q^oej{%89p%DJLSJZ-G>pHKosS#7S_1CFqf{JA7NBmz=d?m|~_P?u` zFCR*z z(&FodOinj1yqhm|jEl5bm>ii`y3d!+txjcO!_6&_SaS?8t(BU%T))a&CO-67EVmcBJvo-sqt$;INxK5t|!}N_3Cpf+=Sl(jFF46M3E9bQNTO|ME z4L%^rMa&%8=YXm<6AJRdhjszlu4y@5^NPl;*%%XX#=xd6IBV(m+h^JSY5G$<+$IDL zQMh$HqRuFEC*=$`fXD|7{W@1HzV|aBn!dPpR9mY!vnNT76kHx}kLS@{kcgfTVYfHJ zD7r26bw2o{WulJBTBWqGA<()4z#Com;DkXo?>XE9IcS zJ9}!bnjW9X%ejGT{D3IagJtTxfN(_lp{IaK7o&Gj$-cX2!Ml$LsD_K78B7gl?^MLJ zHW~5<^=r>Rj+%_FaS^jZrxcY}`gIt6)JQ6CcR*i7+ppT7pdL9-=k3s`Q^AS zcg68;wjVy(RY&Ck>r{{;p7f~>(LfBg6V{*>hhaJoe8xiTaqSXgRJL=fVhi*yt2J}# zE5d@3FhgqvD~8xRvMN|36X*&NOqIJ@g;$aw`Jxc%3U=THb38ZvRO35$`bjMaV6}MN zgmw|zJRq$iNCEbuX4^)r)!QSMPR>T}hjXJ?;o_JvWd&t>hf#V;BPs-`PiOhV# zc3`B~Xd?9$B(dSCfTFdP2E<;ITQ+fl?r0G_}J z?uV1qUj)Tt)+3p1nz?NPbVgZaCOrZuDMIY{^}C}C!VW#H72pysMmUWg-vcKX*gzsd zw*dzNon6Md8*nM0IGzj|P>yzE!n{Sp#}9C- z55`cRDC|E}t$-{vpA*F9g@yEq9d8GwT3v#Ch{2$IhBm_DEJwA3-|diI{7Bcaspx+U zp<#!$9BK_yyU&{fTt@MLfj@F`&ScH}Of2(4_V%`{TVYOrhe7BANxatxc*x-7#*Rid zCGp7Ksp{PVadt%^)RG)&M~;4Yy1hh-xPg7BE!_hp&-hr%5KN9gJ(naf*#&e1z=_&( z;eABd4+~_7!CN|Je5>XL(>!%!kM^Q@;5kX?eduyhURh(FpK$iz%=0*_;UfNPF%hhB5O!&vpyE=PStY5~x z)v7P}a8C8Ns(lw_la#M_wcSB~{VU`#Fr|ubjODn4{MsbC=>KcJ(k_;5tQTN<3&-KE zcb792Y5Asj^xza%x?HYjQ&C$CKsy5ae*sxQroW4?HOK5EfJe4Z6rjs2&r?X)gnq)9 zUIlTgs;w&Ip2rq;Q&D4;4@ten$Us{Po*sg881Sa`FOEGynh3TE%!F>1#3W=19&D+A zDO}^0f?Gpb2v$(4O&GY=`|TI)e!sonP`ioh{Iq}BJ2)P6er^}9_fRJj?s@Hn$?zpX zHt}+fA95N-w0WN-=kbS>kSyT26A-^d7YTb+)z;G?0hdD@vhPc%&I-t4+-^BzVrgJ; zp@JyLo)J|oRTp|1p^K?SxMOn@fJRf0mkB#0+n}{@8rN#zie*d4_>m&Ng!_JHHxcrX z1Nufoe#2e@z~h5+6o=BZA=zgNWOx$qd1h$i2GS8JXq%xDvC|mhc{Sb)WnwG5$27?? zT+v`v*^^~{ZFLXc@h8awyw{lkf*ul>Wa&y6Z?SeUN*+-65snJ6OO3VBX$a2cx!B}6 z)Ujm`H>1B&^$GN0$9fD%GYF;l2Dl)xIkq>ifVC({l>0pIc^xXl*LiCp5K(C-=8b8! zjEZXzL3f!kfpjEdU{!P-ltY`(;_1k2v|i^Uu;U`Fye_);!R0)`V(BWaix7LFdpTCC zHM+3Xgd(ie<*S-Ys@Lg{2WYrwWusVzY1&ZiB&?q6TalX(Qh}Nk0xM$5qu4%+>NvDI zI7V56bk?E>V|qr+(4F#EJa-M3cG$jx(;(fn@gqu)Mg!>w0!Hsa+76}qhN^$rg^LuasM zg*ravZX#N{)9qwc3JvU>H6JYno%&E$Lq1glA+t6Zw)#U|*RDCq-5s~GqEp)Cy4FS$ zj{6aKlTd9a@@oC-SRu{B7UbOa|8u`7U&I9UiX2E%kLB9#`FOqq946c0_xytLAXW8HE_D8LJQ6>7 z1@sl23N3P@xdR5ZYDX~ z-No00XEMpSFla`8lW_8o6U*s33jZYzpDKZXtjd-zf*w z2F-&((vO!;>ncx>lMsueSTLUZ;*V(9)AWTO6ojYM)2bD$5|CqjU31AH;L@H;zk$EZ?siPvJl@02P@6iQE4kuCB60u=DfO&eY3d- zc?leCC1=7x4`>t;Puy334ys`eUhtz0LX;H)vTJ+7usUo|;WRnG;6;jKyz~IKh4mat z2SX-1zYFdf*6CyGfbm@>|I;I5wEq2=SE&>=h>$)}el6xZ=vy^UPBG1=cqPP#v2{N= z4GjiCN*&O!4~eHn20qqrq2HQJ*{5JFXTc0|&Z(k0Dd+_aV{Y<5vXEf{$Z2*3;KdAr zgdjeSb%$=Rm?Sj=zw$*^TvxDQtbR6&eR``&>YtFWz4&|`wHA;LaRExUs4>W?Ihv#p zM>@TZ<}tTOK$Iy^z061)hRci6;{<_ro34Pqv&Y1i9 zw`vCty%9cg)_rFVX;?NWo_iA^VP1|EUmb{d3(qhzGuzkpXr7~h3Yo?XQK2rvgOYG? zk>JFwWP|W5`HEVO_GZNbxnZh+&y6J=)!_5^Vg?)wSB(GWyzCAQEmlzD?`K*GL_pfM zxAM4ZYerUtHIA_T@p8`H6}Sm!ZwglG1IBKjneG2!!+V`B&O5V3<~1+FEjNg1jY!Hp z3NH=e6ag3BXz-@Q;#xsq41CtYY>R^o9J$aaTfPR&2tw({@pL>gDg!ImiBj{Dqv)|e z_gV*gqZhs7?*6FXdo9`7_c|J0ku2b8ZdyO#cp!Eh7_L*YkZEfPIL=`tUv!!>+{Kdc zpj+ z$tKq~LeO*eVhBAvpMlklre4kyJZ+!4X%)n0)%9K^^9u{Fs?We=hU}e6Qvl%Z=wTOc zqcEYjvZ*^jS1XZ;>c2AGenxWgER~bfj-8#;<%A9g-0#sCH@wQst9Y4HA%LxfKnO4J zp&juiZ$W`0oirl%DT*QHFqQSfCV#cgXwAT{A?EfK&)gyF{AH)M7{Z9eU~^jT4ns%^ zXMYzs*nA3CzwE4_1CWobY?++(ph6%^@X9{LvX$s#t!mkejwxWTBur1JoO|rd8?Jx7 z!DOmv%s`_8x?Yc(p7UJIXoLM;-*9|h=ndl-=V_E_Ojf0{GUpo)xHYX{l!+uHSasQI zY3@}@$~lpXU}9cmbECKkS|Xa{(r`geq~L#%2)PL-2p5e!H~)D$KGy-}30T`8j%E%9 zFZ8a_jT_)NthQAyJXiT@(FW9}MbpV)lup5x5$sbVUX0pxsAF zrr$m~XzjJ{QW>yvh>+)yoiyb4QxVFOkyzRS)S+D>=ai+)Y6ud?~%dtqnf)p~Pp`U~=ZsAf9>=+bf$Iv8-lDN!!8uax7unu$Dg zu-u)&`tA+YC5PVN*YuKez@b<-U?MfXwz!_nW)pvB|JI`XdbWr^x@m zE6C~1e?#UMwA|#%g*|p&c6Jj-t9L%2L|Xs>)L=ss2h9hMnp+r)Ap%eNZ4ToP zK6v_wxau-VPfrteEG{5u3uKp=r-EW<(HVsrK`4a}8eD5DTQ|k~63Iq*Dx;(6hj^aC z!d0E}AOXp7ItAanMO5P!DbK)96>fgun5dZAcg?KQZ5|+Y1#kb^!G9h>l30vAF<)y$ zbsABf{q;kEo*WivoNb}~TwyQ3r_iy*;CvxMjXX!O_3~Ye)3b}cspx~9`VV>qS97}* z##wN1MJW@ zkzAJ%ll)H8k67~J&j*7cW3_L09&BxGz1xjCvqf??PZ!r-LfMVBA4kXC&YzFl`tPS0 z<+SVL)u`qma4z(aD7c4?%OD(;l)W#SK=>X!n9dPZT9Y^=RfKoOs!1b^aD-v>2CA`o?=g%Kd_N+KW!M_ci4BPWZhthJlXziVj_eOR16(X z0SNd^XZZ`HwjR?^1VIW=;-n`wSK?CEyMn}&Bz%lHIOL)d3*UVqm>{MH25AZ?%_aJ1qh3o6>g zMi=qr`sniP(GDhB8^@Q6B?MlMt}f~66{OX}yNX;{L^y9_ygSda2+rcnFKVF_+ zvIZF>G#Wjqi~6zk5d%8{PN_;hKy_JT%EeAbH|M`mGm<_W`XRJ_FW<1FRrI!%f?We8 zI}aLR8LHEGvp|s@*k~< z%83koj-v)$6GXK*;S>p|{NKG!SG#axfcVE2quD$z1bfFzCFkw}jH%fi1YT*lu`gor zXW?dGxsA}3WbjqW5PzWiDTEZBKvFFo6}|p`yB|G&b03{F45{+9lF=z+7h}Y#=m=#7 z{q1<+eo z6)Gd&bP{#C(Ym;fq9?ez3t!iI^%o<;^$KDSM-ox?g$5e66nTLAqFiz362pO2cSq;D z&m4(Ucb%6FuVOm{+tHZpY8#DWb0dyRkX}h!gU(CZdI-BpeUG8x?B#GkGzo+V)9b@# zu{?{4VAs&_p7G9vsr#V!dUVw9^!lCQ8~*HBWLU$WMJ~E+#Y;2TE4y)|;rv;oA@y10 zVC|WgGSRDb3eI$N!%mD(wg)1p9xrKUid(K1Tt zNzmtF!YJ{qOpihSwx7(d#TZYEoaqY#_?cA24jiT>&oj7eWKXzfKZv*UlqXPxT3SrN z1((H~XCW{I@2^1+4i11FG1pfVmpt>*X>f#im~~){k(@n8nwExgn*N&X+7tyJv5<|( zy~b(^8^jnnk&*jAG_=0OrXx2h|{pJ)|*z@p2by1Tx(RZD0_4#WFJ@ndSxF*1_ z$IKT(SfY1AH)RUqNVqO&&-lHx>5iJ4@wmb3w`@M*n?aUWvN}UNV%6T2Z|H1LZ?~WZ z{I0dw8ktIQ90eiT;gUs*^p1a9vJpeFN!?iMgT_RC@TS%&p2JMl0TZNjox-%#PzKh* z4hJ&WX{0ps!b-%nCL$d0cq=2h=KqQxM7#E zTUtgdhew?(Q?RWwim+xyA(w{PqaZAV>({>9VuKPt#M5O`5vX((5F;y#+48RpT@^V4 zED9Mbi3G>K{KT_*XWm}|;a!^f;zqaejP-a}M<{%5?E*~PFb@;0rL?ZId*6xxv)U>o z--4c3i5t|&Q3Mc@Hpc59kcjn!@y%9uUvG`d9BaLSKbUBLR&RJo+eLiQc7xMEb%+56 zY`=3+st#r~%Yx;{37#~c_?Zwty>1VjScQ>+L}(+v6T0V_Hggji0ag@l#@WN zlD!pHArSvIs!k!kzW+5z1ZApX8VMltiy#t{GDa5(lPTAO8@*Am!Xb7Q7DqX)nL|O5 zDNLW+C`$O>tdIvl6WOe{nS2#MVA;7-P_@EEzWc{(PN=GwAEi@Re&_N3(V1s7ztAlvX>_oOBD{(=|r<>Ddfo zBRsbHfE%@L4Fn5@=B?^zY!rxonQ=D~?&ZSC*+Gjz?X-^I9!16zi^|`ct>3-X^%SzK ztn>yOy7_y^1To^)MZa#LpRS(iYFRVG;4JlKw+ZQyt6Vq$E1{niE{%DX+_C%`wDZiaF3nb8)lwyZ4@qDC+nL?g29 zIMUv2EqkI#rIV_P-?`<;OqM^L2+fz#8VC1~6GF7>Hg8)SLMpjJl-)0cGcn?CRwo@g zDLrN)wHTy;%I|L5D#*e(?X%@Hp8IBR&Ztbx4Qcw?Du1;S7FXG8K7{=im`oUTznN6; zy_VyGqJrjCVZ{4&dHZHb@Y?&O=NsRpU>rp+y(ylP^JJQQhAopI8r`0sHIjM_A2*kKU#|8-j9k$2S}L^s0y; zoYmOD!)Aykiq>rY)EGLEB5uPkH#NW~VOVb%oQHG4hB=FdNudpstn^DOuWP@tfZWf2 zg^=G*L7F z%vb6>$rJrG%8JM11(d_l;wp&7PDcD`=cQZ1Pr$kU1vzCVNAvMi?&{j_KrG>M>BOT==Rk3MFHP zB}SHe=!gSxJtV6`u?$2SYEtaLvyh_u@^}%VB0{S#y5-Ol!mtTBbmLA1RWWHJcNd^1 zetq8@GNymfTHh$7mQW!Q@d@tld>tmR!??I%{;GUhYATdp^ZSe>F4?N0D%` zv&Qo;a(-HJ4w=W6^eOQUT?34#jl4a*mp4f#ZVh;L^D1_rjf(9+p&lXpvYDroRWE$+ zgT=>AOY}+TZEPZ#C{y=)X{H4FKZ!(8x|{YJz>1XG?)N-l^l@UqoFN^BYant z)|^{(Q@v+sYD6_2y7e0oWo;wuGh;5mpLn_`s7G)k`(al)FpY4JgwU94*|J zUwQ&KMjEXfn}*CeneT-|m{cf@(t-Jkt9u0}HpKA_zhVB8o1fgb&k1yQ=dUMWf!})e z`9cxja{;<29k8*&V2XI#8oYCI@~&|oYN_0n)FZ-?bMNh-PESGW8em7Gw_>cn zW-FUg3S%Sq&Y1%{bnLv`dBcXK8I$wuA~|QfJCzX?9#umNvamtPIuN)ao+{AwL7|B%)o;F8bve#8rFC@r=&vY6D~mnoi~(C1{kzM;P6l>&J_r& zi=NXrI~HVT26Oc|IIphnD9~U0!K3zn=S9@*4Wsriox#vb1Rk#Wlb&|7MH^ko-M|{c zMlQWgR`-eYFh1cm@0d!~biei$m4@vVokJ_SfNImP=%lILl5YgF#>!>UXY4m@eHP&o zKE7fPfiNgc(xbCBD6?B0npc5(=E<0yo5qRl$WO?HX2~1`oq$jyvz1gC6%bUayCrMs z#X_QkkE;Ei6l(?uDJ1ev4Oi1Om0M+`21VLV&LkV2eL4mE(zYv5`XxrUd#@9ar)$t9 zz4!Vn<>LA6CbDYlVA$^8y{H<)#*IRCkMUP z?f$y<9P_zr-$&SDuQh1n3!mbYH!xV?m{$boKkrLSh~#oL{#8Y05}VR;kOLSt}j!!dvk{j43tEw;z;+U$m3i;J7iQc ziFeFvYul=VQ-&EnvJ|rhB$)CT7@Vz6@ArF0T$A=^7F!Ee?+p!<_$(u+>7-L!!B_A) ztxix`uxMpYTN1FjoS`XPkp#Bq3$zW1utec3KXdj^=i@v*Y%+JsER zs8N5SQKVG{5Lh6AoejLp6QlIQSY>7UZR8S#D`SS^uZZa?n?Q9?xD{?kAzCLz!P37s z0q7XN4G~n{wB8iFmDM#(ZVg$xSxa3JAunnNa;aj~(9vR^sr)Vja=fRIdr5d5*G{1f z+-1Btuc6J&t6Pu{nhuVCKrfOxakJAXy9C7(y;IR^jnsj9Zi403%;rsWA2^%tUiF#G zv&*pN1Hb;BiVyT(P4A%sbx=wH^H7|}von>9)7AEGVti18@tGbh$3_&`Jkf73q&Oni zA&wbbSnCdr0qlsSHGHB4RiM!2C5b$NrC%gd{Yp+Tn(7xAN*kk$D6&!6bspUYc>LrX z*tYhh_i>A>k2T9mQWW2W(^L65JjcxKe2MO+Qpu;vVubSx*6T6xWfMTv>SQ-B%ENbp zte8@8k*1@&uu6$dHWdn$z-N_GbjXXa@&&&V!5cMM87=DnI}bI4oarwj%Gm z^3n)iC9PTo1A%)bg95+`)sOJc6}?1+!50fTAVW8T%e>VMe)Dj%FTgrG>>qdcK8Y{E zV$LK3;Vtk5#7Kzo+=Wf{(>cWadzoWb_FJoZ&&Q2;TDNYcf?N3R7^C99h(xa3oT=F? zg$Ys{n1+suwGChiODYG{XBh>cEXdtHRKQCn!oNt*&KKw`fCg>o13>VJqA1;RAmEgOz?FR$Bc!9v9R#@DPdJ!X{UNT<}No6*8hinMg{-AzZpE(<`Y! zi`SnHot)VAW7>zEUV06RP++!GtU)y6jw*#D%3c9E{%8JzL8%fPs?Gq*=^&)R7b@OL zV6=JwxzTv!P20;_F#fmb&7A^>#=9lz2sQ=;N{fW`wly(Fe+`xxD+XMo1?$t(rX+z? zosw7Yupm`10J~bm+9YM$Zov!QRe~tr2nC-h4M#Q&syT9kn8w3jPg_AL)q+ZwupE)a zRt?dVt7hV>m*WX`zjso(j;$uv& z=B1-ZuPzr}olytEVyc~@Zq7o9V99!KV$r^H5v<&z{dDqmszkv6j~*O*lQcd zj)aOL@CHyr*GkSH(jIDFQq8waAN!1)vh^%(oA#MkCh|&??sNkse&u{ot>byze z1(030u+Bkgq{_w(DAzct-y!-_dxL2td`I`D7Vv_)R=?X3sgYqNn~i(y-SBuCyz0Ha z%Y!LD&#t}z+a(O6++qo;QEr|)n$l$6Q_xBwwEhV+u;VCD@HzyOO zbm$UY_^xRDPDQju47Y~lm7jI$}PB4{J1nqR!%sjM|@J#P)#gO!FN&c*yL zheBR_{(*R3c+qJe?5{R(;Wc@e!$v7NI11p}&NUxgK^Rwjf(nan`EF;aHz3_Q0fjc6 zI~Fzc58hRtLMSh?J0otQu(DDk1TN0u1gES`G7A$O*puWmou%X@6VthUk-7PK^mV=c z)w%dM^5lfLs}dQ-kyArdjI)aiI2K6Wz<`_XVcwtadc}?GCp%m|yl=-C^k%?kGyJ{&F6RG%E8fTl{!WMlHw|FdiPo z++a$>pxqyeVulT##G=6uxdz&w8d1M}&};2C*!g!n-0!{aHkdBi+iMR7jp#+^pbZUP zwEOKYd(~!0FZ0alj`FH>$YyXU(7{hw`QXeS}>8Q2W z*1#Qb4B?-k_kZ1lIQHm0;QsxO@2A-~o}Op<;yvZ-C*1drV9vmoCCq+u!P>Uf!wvP4uz)Q0{aPKezgwO5^zb=_{w3F}kV4h<1bE ze&&xUe|?GQvGoZgk5z{|T_&Y_VykS&e@4k79L(<9qg&-fsbql488)Q-N=+CRXg8|e z%WKh7{HHDpBg?zRMx@y~KoqCCd$+P-Nn6ORtyxv4b>Jh9=al2f? zVt5)7hg49pG$@V5xPNDQ>_O+JHsVxIGp^tGL**W*f+Vv97TF7+ac}+_n%aqSOhArh zd7RBA76!D6-+)fz{gG^M0jAJhj`x|BUd5BI$``1stZEP#1`)aM_XN!M6uGc_p_;SrO?_IZyNm+3SS?+$wX z;X%8LKMmL}WL%2>a@5)%wT6sGK4)?k{(clsM)6`XPfr+uy#EgoHw?F}@P$@-*gtM_ zQ?nuznJ!SG7u7AbIH+`KM$ZcQ^c=5S-Z)=mY#nX>M(j}AFwnya>BFG8)7oH!G@hID z87T>WDSReuL$&z~v4=%`i)eXK-B(BF#`h{t>XtjcRe?G- z{(>}>IC>y!wI^e>!_rYj2&buDDL=JwK1j9==~IX?Vqc|;qyy1Iz&?BW9K*MTCt*a7 zD%LQaorS8DypY*-rjv;7iFN}`d7{dAxyWF|<9Ir~j$)=zpUrZftA}TwjF1HwQFUKO zud=IzL2pEpll^46h=E7FX4>Boc-KPFqh!1w4;v&`2I|D|hRNZVSVlX`j6k||uNfUA zi+XOnDjBE*e-e*>4dG;Hpd*@O-17&^s>mWMY~?>d*(NG}Q*jvh>=}0&N@)w#-)h%j_=;`acrL)c3zE z$VMr(JiMfO-_TohnXU*3pTHJN7uVJZkDrf@T76Pu2g?(5 zkTshewf27En(PtVZlK2+_&R3ef!lY)7UTRrJPqF*Q3GUVX!)~eb$HnB4u!r95{D0t z-i$zvy^RN>pF4w&7}d{do;vH?{^h9O9t;E`ReZpE)rt$?>VZF7m-^jJ+ogWf;RtCy zKvC=vl1_d5?ZIA%Kv}yjPYVs_ti|AnkxT2KwB7Szzuhiv^@1(;u>H%>(-2Ey1nFNq zuT{`iEFMBNdDn|!urC^l@oQ> z@6}Q~nggfj)m4sFlm#5js!5-Ww7Q?obfgrG&t^kX+#{G;`~{V{L+M8odTec&Gq?Ok z5|S}LvgFw+uDg||n2#DWK+Uq*W^wimk=t56ERwl&o4a=Yp-6xd4E~bLn4C{f+xRDc z&INEftLbn43u6Z(!U_J^mtXnsT(JeF!GF*BFY$*ncs^nR?AhWRe{C6$cstlDdZT^y zowvA%KaT8HhvqZhlEizhSx0-I_jfu^64e`g6Qf>Yn8D6GyV`W?o!O)#WH|CK`Hap z>fs*YsBV`{ABML_?T6r(VpG{=?48oFLA24{d zMS*ioEXgwk)snl0#BuWXuMQ4FVP>z?C*Wd@_4F$ z%5zpiGLl7^AB1$qz|TYkPnP5m*n_t&t9g8RgTmY+n=WbEzYN>m{q}wXdGR0jqyGZ; zqo1u{#-1n?tpd;Jl{>Wn zc4~S;?*>~tL22(_S=iM|cl}%GY%=>Zqkcq3{L# zEDS#Mo02i{mQVboIr4fdN^Hmm8b)TEN1+!)%;;X?zbLS+~gypNq)b_{^C#B zPW_Nh6G*s@x0>>+2{vSss+S#UcZ0Lff)IN?RkW6BW;vJD+m^bF?xaVTS&obWjsim6 zs-=!TgGTYk#bHTqtoC59-+6wwwH}guJWo%)gapcBDF0rmlRu9L{8=l%72RBY>5RIR z>B28A-z{ajEAiSt*yyKZqsN0g<)BPQ_yU+G8%25GoX+EJ#=gYg?25|Tj$<;d- z$doQY>ng4Y5H)7vUgxZ8$ZQYq)P9*PzJM)~CyP>Bqv74W-Hcu^6fJnyHc}Rus@jC? z32J_6>5Ph;rq3AOF5)?5L7Z(aKs}154O|RaFAB>K$0hg~Ur@$l{>zU)zC7qXZyhwj17Y+(+06KDlAJ8h)C2b4;P~07uTrMIpCr*K zAqev+dJ!UKiZp>2KGqE0nqS$2=m*HEBqHLUHliPrzb)e_{_*j0{xo{m@VrAF4n}uvLiNe6uZ>2RXQSD8w79q&ZC99n<&G=hFEC)RB+lrj(i+|_QAPz!Q#OT*WPX;2 zBukanm5-qj6)jcy1%-F*_5S?}uj@Bdi|Ynd2`jS4U!OQeI|Hyy99khXy_uVBU+=G8 zRvXPrYdevu>$T!W3scArPzb{K-W`UvD3mVUKeb@Sbwuj}>zG5BVY?isfg{IT1 z_&SHI?(vuxGR0z<7Z=GSjiG>K7#;rf$!lEy7Iy}=0iO?x+wc`FsjX#Xh|G1m^jxYM z7kyf$5adodC4Bc%4*X&R0|_ZR<&=rTY(ykNHKL<-f6y5Wne;vve~)_IgEtXnuC*?6 zdGP|`viW&>y3prkZ6V}4_=Z^%QJ1ly@SnzkN!fvS%4$+r%fa6Xlv0Phs2_usn0>Y(v%M269E)V~=vX$A{0}9H; z-%%1!C%fCNtX;s^tnHUqHGJimoNZ1@2-&`T+@l6UL(O3nKGRsBBV6Z^u(Jsxn_)&M zfX2pT(3v3i>h9nM5N`VDCkA?%Wc!agGC>Vei%Koe+v05dX6`6Qa0Y!%=sQG{!Ky?eAC>p zlBWn{Az{iSZP7Xx%&Sq+hVJ9XrCxoJZ2OpjGsljUKyAJbOf6t9f_HK1QpB#Z3JzS$ zW+Pyk&?^e=Ax(S$8Ayl++8mE`;XE2MW$7e|KzySTI_x`NXQsL@=SJcYwc-(zz|Pq} zOe>y&IKx(sy$fV9kEcyu0cbX!E}_gISil*RPv#$zi4Kly&3RK+3`+jCOxeINab_k4 z#N?@!`zhE3V`50eZPT8IX64TULc@$j646}ImqB;)ce2IkdBBsMC zo5yF#h=*f7i8`}cw*P#E7wYszy;66|_luogqvhiCyNi>D3<&>gwDovvYZRxWak@H; zx(g&Us1ESmH1`y3f;%tbdLRT*NxU@o$(xskqGCn0wASPJaL=x#$>A-K|&)%J_fvUHp%^Bd)@oJ7cV$t1fG;!BfUTkx=SD=Mw2HQQ)-C= z3|+rHw>? z7*v9PR5S$$?=DWRmg zH@|_E1tbQAZG;4mZsx)i-JNA3XazKWXwU>4H^7^F{~6#t71<51Ki5palOV2<%i6Z3 z>vIEY{YS?7X5aufP5&oBRYKF>tH^dZX~&z?7<+)Btw^x(H1D^MTAjY}xNHk( zu6(VihB86RnD!Uo*k`UosT(YjEE-C}u2bBO;`r&$lhYA+u~iK{0Ou0JIi6Hi<>sRO zrmnorzC7+EDzX8u#8qU$orV6w=WdEE-d)jdwMVU0`2@u<*T_0B@^w&>gTYhqaKUKX z#f&UvtC3_;DN=6@B+eUx6_DhFD!Bh^$(@Pe&<&4+icq;d><3LRxp3>}0l}^5bRBCD zy=V{jUX3V8LID&{J-tFKASb+A931sqFArN0T_~rE>k($+g1R8T6HZ7k`jsma1oG|H zyP^W8@G&kN>8*lJ`~^tiv+9zFW2kUdyl>JuRl1tGmB#+aB;3MHii^eSaD)?GKM+N6 z*WA6k)u6sk$n{y&TGtW^0Kjo}Ngh+c5%Kami6?~sQ6x|nY|IRvK>!vP2+YGgI!Vss z4{0_p0*OxK3m7H%hNW7zac*Uf$jXe_!SOj7Y>S3@KTO)6C4SBA72$uHiuXoGa_2h7 zwf!mBAKbkI4jnWAuUNl#vx?&1=d)9`))CR5<2r3On0FPxN4k zZ41dFzk`tz-Olsi8+ORN;p>Et?2w5fY)g16!&zuB<%8@p;ex*@3kC6P!dJo`9~a1R z_@~!G#KlH*#O0;`hWrlrsU64EjOtCSEu*m4i0ZvdYAeUho*m|ATIs+x^j;T_laC8} zfd*A5g?*0EQ66Duc{ ze^?Ex8Z7zJ31SDAL$Y~6nC8r&rs$Mu1+dMk?WliP{`zWz$G06-WFMnnW4Iw`@(XlYl~HoN-D z*O#`qH_yseZ)0UDaD=c~Frz(-W<>vu=qwYS#B7Vh2JtW=O;%I>jZYjcN4+2|Ye7eF zG(6Oiu2fx`x~rjuaE))eto{2?Cj;)sfpoWWKe_&PL08f)T)hKn0WF+CJjJ-Rj>_?{ zThRUMbaDQg>G|V$KJg3%z14Hmgl@S+nAL`rfcctp#%Dn(XkR5E<9S}k>S62zr^AwzXf{i{c!XJDxgv&p7yttPq?583E zYk58cDO4c{++nb_{#CXW+5^6>fAZbs?T2tW$rgpXC)97AFy_q8uys2!8spR(W(`Y^c)lL@tNblj#}iwf02RU zhCaah-AGLJ66(#fP#6?I6OR5P2O-9L^0);wQaO#kz5+uwP>xJGhNTG!W7hSja_ zBlhnPqTZwMd1DX%^rz6~g1yMdgExM=mc9e~*7nY~MK?a>@>(5aYk@Q>+^H`~&eufZ z1Q$kM6d&J!kGo^Td)VVf#u;4laWOyz;eb5&SJ{yG-iW*Y7sxYUCc!WZ-+4NNnfrDK z?y}&;zwc^*GDzTSl?CpSNpg6V&LEZ3mqNwksg@c5Z>Uh&PRSJ|Pav5mDTy2I^dTm9 zyBQtyx-X-jTYZQQZqPUQa~&gvH{h2yo$kwqZ1=p=Wsm$JzB|pRi*+_z2NA)OUu6$Q z1FIJos?VhkMq;?q@hlqQdv>|fW(tl6hFQYShC#7v!1uQcGHyJGb}da%E?>|mP@v#W zCh_nNCh;&l3Ga$1{WzHP1U?SyN@pJ+hMfI-xm<)@Li`=0u|>N1Q1aS5nV#QchrLm!yVq}HVOJ__T5a!8SE~`8kX_hd+ArIEH4a{HHTtRj z2FGL%sge-L=KrJNl8O-qjBow#L9gphYW0g%$rnX@vzBxxaAnH%uw)9gyNYPRk3F|kiVROh$gErlo41xdm6!K?thbf3`?j__^mH*sKc=snZykt3pyjBCa1)oQo(aWO)pF|rx535ENx~oftIVy$lVbP9i!G6Vx zYG6=Ibi|9+t3+l%M`&`eMwOH^fSu;t4kx2lE6H*OPbWRgo6XAKv2dc0 z3@2z`G*X87B$~TDYyAGTs|Cl2PsJcP*@>4wc;nzSuHcW8E46w2dlD1-@4{n8hR>Qt z1gqPO^_N$+9NQ6Y8n6{~#$spca2HiDd?$fVWLYka5)pLw{Gj*TLw7;&U~gVMbftU4 z*Gv=d3UBVWhBt_?8FmhD@D}uSvp2ywS9zt-DR+gHB75iRgA$g~$^+vT%~i&>-`?vS z-eg^09Q0bln}kl?h=_W}&kxE&2n8OXlK>JvL8J>XS;HXf@UzO1Ed2J5#we>J`faLQ zl%#~x7*YlDY-$vfo!8RnSSd`^aMM!UU!`+mQD zbkN#sKl8nZPS34DO(q~ub9EKSrh-J!h)$LZHsZf6(>d1hFoW0KS=C#EXa&CnUWUT& z3o)A{A78O`_TI$GUonb0XyOWCd76!XWe0eX;XL3wz~2-lV54>JINfYEqZhq?bbJJ? zaKo!D$h=UDu+ckO$7wWKl5;E%5ya5!)0C|y?{WoF3U0MqTQtjS265+N=}=r+AIR_* zrq_TtEikM43|n5p$OkHV^9pBKx}w9jO7@WQNl-HJve9<$#i~T=5o$)=1d#CVT!l1|r6SFY%O^qo)B zrxp{2CU7QFkL64Ev*_*8b?A{bJ~WWL-eiK0?JfCPrUg@$N7?SMT3=2oz$0x%3n? zdn<{ax3F6y!eqsGN&d6A(pIYgf2q};LId7(NO;DBVPTFA`rNojzZxWg~H1$&(jn3o02wT z30(&y7ID4yhJ7{<4>$Mshp%4k9v$A^+);VK{NLSQX;V7?bT83d_o7Y(ZIg_)%=X>?pz&5@}YN3V`3{EcgIV9m%* zq44tMJew@Xl#HJwjd_Zfp6eTOD;R^s8&d9|dcie|NqhlWuZ;I6Xn!lH(JaN!s~F2G z(rmRsit-aC7vXskbYLp5CVmoqr-b4Y%#!@~?_WAxDw^*HSjttZX1W&?;;6e*%SCtMHR z2+jO8T%3!7?652~I6k%^!8pd6u#Ld}gl9YO2Nu91eX=29&vbB9S~6l9!&$;rR}c-= zf;7Z#j1O-8 zBL0|OEH9v(02}kRl{entABkN(K=`CwU0pS`&^R_txTl_5J|`|WWei;^w6(u{+}f&9 zoC&6&4~PO%G2UZ`>N;x2?0Ch^vB6mQNjlp(Pd<9Gq`S#8s`&?0kR2c@QZIOO3*o_x z&HS8_gFm$M^N0?d9!6A|6-x|A!k`$OetXdF|J>dm9rfEUI=?u_YxUF=wGKrR=?hlJ z%S1A2;TPB>q6|?@RVxgPrGUsNY8U3lndmxu(qNC@*JX)5JyN%j+GKDur@Ja72PC1j z<29VXlfN=Gz7bKBR>fp6$l%s^c1I-YmL4uj`Cz2< z#*a*Fjit{h5D}9Hm*ivTJ<%Ym_9W|qlAVWM#*Rg2l|SnX%Bl_}F&b31dcyV(JH_Vd z*%=&Xx-3~T3w1LZmCs@(#!U`Egf=?l;M|*lP1)+Zh-2uVyHUz-uZ8;)253~(FjxMG z$d;fXlAcvp*YDqt_Qf5nU4<|ACaI3y;&;NTi2+qT?x4FD29&)v@vPb{Ex8Yf4(=9nukk zsw*BKAi;aF3Hpo#4QGos!G=XURqCf|lXsx?y+BFbHxdWwgF>N|nQB$3P(iv4cfSk1?oE?r@o25o zr-R9Sd4jlE&LAoF)p}sojUGD?SQ}x%2E-ld&kXhlOe&ct@f_2AaOgFV zLdjo9tM|92CNTnD<;2uKDvPDE7V~*Fxvm$)*FS>lt1G}`gp|y3qs#;inQ6!uFg9xf zg{26w?U21_z=OzLrlMn5j|;9WuJ^dB0$XgT#At5>w*AXq`)C+|ixp;bU^h>6bd*B{ zFVFsf5swSlG{wo?(d+NG`_c0^A{LrREEfrH1gTEaJia(d&tySMAWqYUnUmwgMf@uq z7-U_$jwTr#Je2K*34=9)k}Y##>6l?rX{Y9;4*SPENt~^|yQ`0hqR@3yfL7a0Z#Wrc zbGBVXArwcjTBDyiHcIvew&gy0cI`_8&VT(^^p!@3@+&7G`CTr&eMs1Mo?l0AU-nyv zhpqlQ`v+@-?MCa0Gi*GI*6sF@{RV9DNSoR-vV`(4?(6@s0nnbV4q_u(mnVH|7EiD9 zL=4wzYTluOf03$WpmR-a#R1Iuij8%b&b6Y$B_e#d~oMxh@OpuSnKZWv^==F;NsP%59pK|Pe)(C1g)gIYusX;mz2jv5CK=yFGeaa^9k?)t=aH6DKV zLejs5y=QO*?sfLIT0$VVlkx61d%r2s*(dBZ__c#bFd`3D+$6w)ZFuN2GE2B0Sqvv4 zn4y=LhnB7&(AV1JW%2YZn=@$k77m&U;A7tI+nP0QtzdeiDv7|*WlTQ}jeI-7M7HMO zkzVQ&Z?JMI_&Wm4CPZl~hk%u;Tq{=8u=TLW*2BzKZsp}(S*0@)@5j9zuWxscP1bc{` z|F2p56{pdLqeu6Rv zBtRiYcSTGTx3G%3#6KuRv;Y<4&msc&66DQ&TL+ZWSfo3W z`HaoDOS2G}E1t{B#Zq34vT1zTyIesWv}YzCtSlSDN1fdU+>nSY8-=7~bBID{HC|g) zZbguHA!r)Is@9Q#6g<-JM8qr`i6?2J%a7`Ehm;C4#x%+#QD-NbOn$X}$hl)(Q&t~4sTyG>X=l0q@R!Z2^tXBB2(%N}*UMGZ#a;RD(LZ=#PH zLTgARy-#DY;gO(+zF=H6ItaTwK_A;=xLvSN#ZVMC2*is6pj%_sy~!Hu>9kg0Z0 zkrd}ax;i_z1Nj>K<$m>bGdAH(Yy>MA2*gyCK?*=roG$)(Gk)_$n<6NO>?+sG1ttix zL8x4|U#jh)H0r@gtZN$Cbg!t5Fzgc8V+M!_Jt$$R4oy%ord(i7}fh`K~=w?Mr@Z33RK%ZFW5U;| zY;s1iIeEg3jg$10X|FQ4R)@!PeDGdnA^5BKIu8aRY&Su;5s~}YFVwEL>+GOE9GLO! zIx+?@_F1pTbplgwq4)K$f854oMD_po{}I3ZzyBBh^rCezXm1!0cA8p-0vZk6{IjhO zo;@%dwiV*bL`Lf7O^9beq(NXKcmUZ$;w4^dMHE)^1|AuUg;iTG=h;aNp=-iGoH5og z&3H}=+}0|Fsall9GzLkG5f8jZrHBBI-?Zzg9ejgaK$@Q>BxB^+f=84+c)i~3jh?sm zei|IK2Cqi6JqGnqNT(W7(IKP8-Hd8-%l+jq^;+q9LR3v*`FHA#_b+sw1XAUH(PxXv zPCKW%vd%b`SaAZ_;5+<+t!qWA8a=i)v>Y(6mfoW(9jFLd@?*cb@9{qp+ z=l>m{?=z-afOd@O@^AD8hAHa6q|?6C?TG(Su$m95gaWXbI z#z`(>x_^wv=<>9<%5(@SDvt*t0vEz8%si$)X5T2TkgX;geYV6r3~4wtlQ4~fqgEu1 zb4kt*u@H@lbK^y;O~i;)7}B}TS|U6|cv&A6Q?Lirnd{$atft?Z9Q)d!g)f= zgDlNRhwsb#+&k{~AuAE2ogEBYhezJd{W*1euUAZev%L{Y2`R6f=L&&dMlo{pm;;UOWq>H7(Mm6-TsN&p8-bD6wW)S@3-Cr zY_W3W-?DY~rSF1IFyEI9QxaL4u{I6HC9yN;UQQ>*@2Off(b#VUs zQ(Z;P5-utb4P?8!%jGYq)3bfYHG{r@1gv*_K%f2#oXk~DeqWa04IuWvg8!y35K&4JzUwy1!i?PGMX!I@ z8hUat!U)?_1vHa|wt=;g!7)u!f*s7qCLRfcrh%MlsbjrD z4!=?oCPc1;vF$9fFM&*QI?dt*W0{az#RJ3#_o=wWu5WEMAMVtl=r#LyYs)KXRRpSu zV~9W@kHM9CQ`8pEVT*z^?#&PSI-5_9K+!{!8`?!rQ%HJ)X{5k3py7b$bn?NW%!DX+ znM(%%HFSAW-+QM9pUuta1&xJ`f@!;RQjpWxa^X)o2_L=pP#gF_K3PWc(0skVv$g$j zb9-xZXFJ;3+I_gQyYm=asP4VlymzsAZxY>mwRb1)dEUQ~ZM?1SfumR-OqGtQ~}3wk>@Scq;Wo>=#INbA6ct_rC_K#{_NBMBLu@ z`SNMz2(Kvbd$&Vp)#-A9@zr$Kzr4iZD7u3we8`xjB4#5fCn8B{uZuo%lh zyZdtZs-Un!L@h`eQ*VG0M!q3%E221!sGERvwOpKj=g-4tPNYsS*U@T&2k+K9$N{tA zQ>^NHz3!g(xD?RVO&2H-?HdGlBMepLbM@9M0&Cz1sHE|_Brw%ALq@_xojr65 zg#zhYg(U^q1W2yafl%T=6ztSfU*f>eH!;$A+(B(qO)%pL)A6{hx(YUmr{*~*d?j0c zZug-!qPME)P0LMw#!{0vt4{U>=$CdL&vF%$>xLY;DsQn3sYI!~O;)o|a!pGMyzgAU z!2L{glECc&&#ss|;sxB}&JuL!OXhP*OzG6iF(A|Y>B=ULI)h&H-8Wm?1e728yP|d7 zm!-6>L*o)L^$!;>`7}K{UocrmT{h8BcXeoyfL0HTQb^jk`fx3z+y8USA%;0Jz$#5Q z*m5RJFz2qaC(DHn6LNDbFLMfXYDU8>`ZY-|>H3@hbd}Aa?2QpfMVU6ipn(#)4w0R` z$HP78j)`~m!x|2__TRM%2~qdr4+)^Av!HyL@#L>dCVN6UN>x<@{B<$lJIVEnt_G?g z*d7N~kkFL9mCf~Zn&=e4JIj-cc(!1)i%>{wkQITz@Si}MARQtK!MHR$EP+WLBup}l z#b+^G7MLvx#&!uPO2=p|hIH|cV1T6Sg(E?yz7Ro=Lcj#=LUI?7fE}08DjHh`=ZrzZrb~H#$wIzR+u7RL+T7mRe7GHLKiu7Zw7c_d4fb7zBmlXWH}QWFVjd74 zfb_c6?{>N`cVRh1ndNkn#Ed8sSZ!`WrNQyj(|?`5z`(`{B_p2DRJ1#POkdfw7>IUM zXpBN+jHbK$u`21pw#{iWUYL1(30*qFMIdZ{U4q*Q6?0iYvLzbUCeoxX1~^D@tU;Oz zE?wg03FE`r%vnwy5UecL34)E3BXv_zkRf~@9c4^OzPjunpN22HyU=h%jC+(^TrRFh zm(U0XZXl0%g`^rGTjY{A6rLy*>~|s64Zl)!ZVLWm)RvamDr$B zdtq>E|C7wKn!_F}+zR~GJ=3a_6FF^Vrbl9`LzSix(NRz%*>4M`;+8N6B162=hM`6m zZ1v`dVB3$>z`S*|yp~vTx6|#7{=40WqC;q%1cnlUS0PM3Bc5d!jOqA5%1UN0i(^$pu2vlWZ_`acF1d@cZ|J`{ z%SM2N5oF#p#5mcDH&iq?-U6Mwz9mXusWTPrQO@%R$rsoWH!ilA2A;eOdXn2gaElNy=Y3$AqN1%gTp z9J7-N$=RwLlSpGlL@OXJQ22zQCKEl+geHEb?LGNSwCn>dwM2Sb-qNe(3D>gm8ZyDOBu6n633S_FZ-;Y|^f!*ku2K$_E=vq-UxOs(_VxXQ#(YzpXbaTqWl zt9D=^XvrF<*%{+8aV}i@@=S{!wrZ7rO++bIjEbX%m^rU_!;wNELWBvwI=x1i8?oi} zk-3v~k(&3D)4JunZ^F^Ou|u2lnT?`RfuL3A(jCX^aAxsO2{EHEX9q;M94Vpjw~i4F|nKnbMSuIOjFG!eOzI zylOXx6>UnFIDMi(G4JiR@BK`09$$@Y>Lmi3f(e2yxKWg8=&TV-D#5M1_Ka$tubU32 zlI;`|tsI6|Hs*0rfIv{rwK0q5o@{_GxZRAWwh(qQS`9KuPOte&=Fz%1qtXdEGAwGA zpBe+H8|ap^Spsz>AsP_}lW0KRr<3=%3h=K0*Ys`lpm0)w5$Fi3aMMnzm`pboHVG&X zY5NT*?zTYnOshd6YL)PsAXkZ~>?h!HRRSy$%M(sZ>Flq38F;YtX?nJt^O}jWUQRT* zX8(|!^qIAT%T1((S!twN31wzrYw?&L*Q)aU!f`zHVA zz1}e=kahKrcuRj0Mep&3al|%t>!A1YeZ%~9uQg~#uV1yhqTOKcRr|2@K2%X?=xN$M zU@+=p0Wg579<{ssNXbUihIeS))?wTJiD~xw1Dxvn(bc730>oh45snD$w2S!P3eX0i z(Zco6RGg&Q3d%cj!<9+S5VaZo?_Q_N^DJOB<*Q^my{YvH;WM@8pEa(5sFL9)SVCp! zVG1eYvGxP4+tcO`*x)JM>dG&)zM9oUq#g4Ie^YotJ=OBYXr~GdfyXs4k?L~YNu9JN zD>jukk`=M|JI_|HjU~!gZ9tB4E59wF^`=#~*6DrAuy!jJtpm~oJ7USJ^5e*^_pRd; zjPcd#nZd#CRxvAsQMG=Uxd!@M>IYZB8DwZF@?$aAiykf)$^dk#qeh^oF8zi^Ia?lq z0W~TR-Iy#w+t&Tvt98)N%ABXj%fnAkAUSd(5@qr+2N|yhwE#!P;(w(^tX{6_;VpCO z*zZ@rC(%%XI`PG2Hm6h(6_6sE^XVranc9{YOnr^-T;Jv{!@hcF-80}uR7jMs)rLg} zSqf?(0|-}3wEkrsVXj`uA8fEDY4g0{+&^NTjI;S9mp9R#Es-uDCdyL6g={Sm!;vVR0iVOrfGDELPnR$$2 zMWf!)uyfe?Z{dCnmoWYIQLDot+d~7l9Hj*prErTO<`Z#1UO5*rIKhu_6eITMBp+p` zBi#-$qHEsV>QX4bCs{U){1Vn{-6a&!4wpsZXQx`Vh~LmeC-DLO5+86gKS4vMN?KwE z7_wxw+2EWKA1VeBPn%H->wciewY1yj(RwCI#BM%iGSwCSyTf7Buem}XXpkrAOx?{RiW(-y zLN%I?gzIC!_qwyMxzeD83BAPf415^C`6|H(B*>Q^lfww@H`okvcj>!gGS8SWFwtT1 za1N2Sh+-ws|NHW~$x~@^$24?xhcJUg#Eat?osbs~O4jRax1|#lCi$Nm(Vz5|p=^VS ztJC*S%h|Op&+!9US5HxnP0t|a<(ikcV}jO#keWa`Jm5i4UI1CLapk(kH8u`n#6Xm4 zeMkM)%fnWrzf!k@K6NA7YM@x}y%#U)rqOJtDGHIs$nS-38dsO#ks%RazZaLLj!(Hi z`t3ox|1;Atj+nO5`33TbLd(BvTkN+{jXhq@(!Zrf1~ws6`YZ=k1S$_CdyJ*fj2G;p z&Z*ApkdY7s<2aClOqBy5+@ArHg0G&)QM}!Hr#F=}IZ~q}W|XsoD_LKYV%T;?%JFn> zQp^KJF^owRp6bFSR#H^6Qs45t=yVw=4I`$@_TY>FOIYLx@AXDtwHuaVK?s3TVcL1X zehJV*eZx4P;T*X&JbDFo;kp5Oqv4@_%dY*f8SOI$9u}UeVs*dYJK{pMiM>$IkD5%6 z!2M$^rdVBT%}p~(r4i{0!#zkSi=qK8dco?Jj{6%Jw=7A@)SC$#26!IuP?QE9e;?B1 zN;_zEn}xHhzg(nOau8~I!lTg!Biov93)?tI@^lfe-_Z&Q{ zjM{T_u){JL|LRDBH#mQ~^$c+;Je#2^*V_%1jIG2h)2IGw;--OajhJu!pqgH*A%hW z8c|IXDcM&hA2c^sxmS&Df3+G#cTr8`Ji8hh$Q{X5S~s!YFp%fumZRT9$tv^JkpDR} zato81mp2;RaIC9yJ*mAF>fGZoSzLsn1}YI_l1LU{K-5ySm#aoP?nD@%cPp;(WmpZB z_+uF^b;v6qQ-7_vykkif3qoMMaQY(EPrcNIh|4I9&-B|z2d%xfGGs+3+2mSrnFd6S zLnWb$C2SIrh)U$B;2Z#>@*&2JywoQsbfCW>&qyNT;ZWD3=r z$sxEn`4EFwsZCEreymC75XvWYhS7feMeF!L`c%;tRH62^6DA;u7HG_vfR%=)NN;M?EV&ScY;iiEU>g-a z^Xn|TVl;MU8JgwBw8y#$AM4pG#;GxzN4~tc05iCjNQ2GkL*B$yQQTxTDTlBpDQ`GH={wV)XHxro};tvel(5gXg^#@{z>X}Ke9Jm451;?c||LKmClDxf91_E;y1g7ewHy3Np`b!_+SxKQMx~*G*G$ z&@ov_hbqkg-r!3C92`faBa~*mlfF@=(c8E^^ZA|_W;n`o!gN4>-utE5hynzu4d#{5 zE-^jHCOl_HeWN5ng>$Z0w;(T*g%A@N!eTOQXLEr!lzO1H?Z!JxMn*dI#Trgb+B zyIW}1wH!2U`$_f0_%+7m2SauQzJ0he*xGrw8$E}OPW>~Q2cs)`Szs30-DrFJ;WyC` zf5oyUqDT)8wPwzpQ4#_TT6tlk#aMnoxt{P+?I7vVUZeD$nC#LqSy*mfg3SR}Nzvg( zkM9>*e$b~2G+NDDL|1b3txF6ye@ z^9v7}Y_R^k537UrkmGZk4F+W(g<vf3o#i#6FP9XV6Mi&dGqG_Dx*m9EbU|^8w>Br0SOV%KRd=sOGQWmY7 z8WcL*Sz1*C;t~Y0@donyhEXHSBr2cG#@&U5j^xT|+^pbMYX{XBas$m1%{Z^qz)3|inr@sqHlqk}8Z4s5F8#JjB2+Vj5J4K?7=N7n1cmNx4JUd^9b<9CL7G`w-Jn{@j zV7TB33q(Q(JdvY=&S7U5ZDDGW>;z-uJh^8u!Cr~H{5Ny@z4;N8f^i*?^ToxYOeqy9 z2Kci1tMzUIfW1LR$@D`Z}c?ucL^~Xbj{1Ysej7o4-+`CV7-ip$*D%KMqA$AC23Xhew5bIwM#>iAn&*O>5RMfGKRe7m_Sx-T?@aC66J$tYeJm=2UeybqIRxPq4NP` z!qbN|Tjp$Nq>jMNDC634XNjInHB>?HN+cLuBr_@Ga@Z28rb~wN=PH2UjOLwUGwNmw zo<|Q;=>f7cru#Q^z0(KM)g!$lK2i z4@ggPcQK+Tyc!%Yqr2Z4wnoD@N9~b7)QBSrisz~wA=|-zVB~&_*PSFia*X=MQXz?A zcN` zk}#EhPU#+nhe$)~iziF9vh*r|%rN^rAQloF#^Fo~9WDNGOZe zfwOSQ4;;|iLvJk(&t}KMok&v{In0w_K8aS*|NSX1zOt{-F^R6XJIEc??bUVVijh z(F$I;ubA2Vg%wA}YY|m&8g6j%Zg67e7bLJ%(RgB;@HB(f3r1FZBFrkAS2kGj&4UIc zOB5t}<&tQL!AN)0aV$5;sC?lBMi+LLk*_VzMJ~DVa*?#FkcpDtqrPw0k9OYU1uFNnf6+P^ zv|TWAK<-b1OvLr9b}4H~R~EAc&PVGzqGcMXC3zxHJmRGsjr0I~^HK}Q4^XEi0yX04 z6Pw5+=M8k`)v|e8ZVxueF+}P3E8chqWd+l0%FVXLd#fzTJX z!}?9V#1z{ubM+(&$Rue?Qd)g?^kfCxZVAOx___8f^T#S zpqo+xMmqHBK!*-+=0HCVVi)GP2<+8jgs}0 zXNwB#ps#Atzkjw*;!5o_Zp-$M(2@0x1s#{ zM$I>0<`LRC=1{3Kt45pA>Gj)etsw@qTGMq8*WjyMe@5P1fkq^RY*-ltyT`NvEyqvm(?ycN+WBy#09Td;WXOFoir1|?^|mV64o>~Wz+5d zkGP!M#pV1Ff^(N4I9kY!8IAM%#NPZ7U31gunxc%9l{~m**0bE=S4It9jny_ZPXtG5 zK?98@?F76zyq*I^(JSOhP^@p?Z8U`jZ6qtSsAsFyX+eO(8*&w`-!fDiyb-vLx6Z)L zqd(YO)}4uO*tQ4J0tO&2gET^X8wzK@YoAIDy%#)Wc-1=hSzLaGbH`J1{a<=%Z^K&(4Hd0#>J+GaWp4vCZ}8!e#J$P=KC-CS zjrNZLB2eQ`?Kgrjc@;Aoo_k%yHcwpTiwFEbAyjdREp3}#v!hhKa{y=+bDL@G_-JwsKJpwvYmg#0#5X82`u8-UM~amw$2A!4`6T{Y~AbQbnWx;>76^K+`>*(_n) zh|c5lBv1c`Nhib^GznBUF}gQ6m~BLX02zfSork$7Kon&I!Uv>lW-8R&WhqV>UKujC zzMf8)7Ny^InuWks$>mzp;G-8wEZmzBq5=hng$V1RS`E39*iZqS$L2K?lfUR{Kut^f zmTM*Fbr2#n6E4J}nl`#JJFqkWYikkAsARoNA9#6*Ys}VFK`Cai^uov>ijjKRU(Iz* z)KxM)&s4P~!!EKI9;kVNhg5U)RYzLA_zaG;(blMlL>`4RjI}-`;M$L+Lx7 zjg#!uUJ2GRosGCj@m|> z)zgj~wwJ1LBvy?yo2JZo#Oma~ zUBJnJVV_hJRbE=5yD&wGU$7HG0AvTo=@PO<|7{sh!O}P(1}6gifpxAjP}AokPsC01 zL__aHyImHCDU+v-%R%o!jU(d|t1Y%`xK6djPK_~jwkUM83e-cnXVz7XGVrUTRrfa$ zQS%Vth^IX`AJI6oWv(BuwJ4d-*;u5%l!OSmEK`2G=gaXpA;fVcsF|_>HwltTltGgx z4B9DmWy);+9(g7$wyF60Vh1cLi=F0Tdz1p_Wv$r1GA|mu;Zyd|NJDca0gS2h7x6ru zUQ20-G(f_e^jg56t(fRZ0OaJshlx7)CXYrz&VAGkp=HRVg)m z76{`QAw;`trf8UkEda`0m{%idq((>bnqNyI%J_D{9B3CSkTcsIR8kSlt2v3D@k#a} z(Mjf|z&XjVy+Q;rLuLZ@!)&Ts-9r^l( zJzHA`K;hW@1T+HJCi(KDz#rrvXk83^0IGQw7-y}nK74-zEMeDIqUwn@e0B_hMrfZz z#VU&46mh%mA&UmT3$Zj6aCZJRy_AEIZnE-5&>rGC_|VEb&KhES!%#gK>gC*&y+58Z z8kp!O`1(02n6*i^=*SyH4$!Rz$nRibB>DxXbzd5|el_m-01~*9*jKLsfX49ZAsNuL zVjJ@PfU^%|6sC2-v51}zv5A>aY-(qUZBlQBV36Gmmtk6 z@v?cW>AVlS!N>uA)9vopw|X~p%U#xpshW=ER>VJFL7Y1HG zFh1#PsdE+`q!&R^5BSGb3Z6En5M_T7kAHPayg7E4$YWXX;3}wldD8!889QY5i1@d28(=^VX6^BY1f&@F% zB`iA7WjGFs4++{Vt%DwsrB7ZQdD^p8T$||3w*mUDP^#QGfLDb<2QeT;INgHykJP{< zw@Y4uc|zBZ)&%LbYO~U?@0%RK^4{v>F9k;}{vPPo8%XIpd$dl}MU(#21E?aZ3uRKC zkk%`R`pL-@A#IXaU7Qpv@Ri%aE$GXbv}>B9`r5ku3RhQSyI{MQ!mYxZX++wTAv@UF zc_P1Caa35#60J#qb;gELkUI!p8#YW80kF$2=-CW!4G*})t`Qp{O+`ovCKL_&JULrV z<9P`BU$b<^fg^PIt^-GMQnhsyY>~+nU*PLtYeICXK=vofw}%TqpYYU7jINUz-J_xW z0oOGb7x88eIor_y$kSL$TRRRwx9@^%2!7}ja-*;sfMG3NfV*S^Cm}92HDa?;4==VG z(PC$Vo6R49*?ilY)oYRD({KeT0vYY~dxL>6#TNoE^~)&aE!C99pL?X zbe=^*!gTAk%ieeb3GqFYyFxbb^bI>KnPAWn@0gy5;4P10V)w7VP$>!3(L7@q&dIOE zLVQD13<@=6FhjUg|Ufv`fY0b9Mmmz&=XQi2o`y6|8;{Ee$Y&v2LSY1R zYFwWL(}PNu`?fU9j7#O*0P;)>c9*cWq4~WE!HEi0s8DBFD}#qROPmV-){%5;Ef0DV z0a{8T!WUtl?5W)FIy4P|@^>dAk4mh>g{ZqDWF26Tl10gjiaV3H4pY;=JY8~%4ACDa z2#daqrv-E(@VjwGH08=`D>H6JU;Sjfoac;|rq@sk3lHaoUmVmAm?FL@bJ~^DoZE?) zW*lj5bdk)@WKKt&h9h@_Ypxn)2-;ORcdz>HZM#KoGR zF9C=YVo|}ESJ6Qo)yW_f@-gB0GS;YKkP0Y8@tg+e=C-k4R=yJ4gf!G|0X0tw3i-6v zgJ8}MD`AK6c0ly^2RB-?Yq&%9mBK|IA>pD%MHiy8ESp4>m4_{g^bm^1kT`(i*DvCa z>BaKGaQGsK^kJ&n+2UN~|DKI0?2)|+1vBtZOzmB+cbasgFWAF4hBOZ+SeA)VF?ALUkM-9h%NgCFT4W>L zV);-3CW0d^sqcDzfXq$aAK;DPkMILyN*9;jU$2vRUUxHt`?HVp$+$Z^qus3?Po%p)<$5d18C6o|qm0~Lud*e?jquFEoc?saM0Q=_6KTR@2nRbJ zuE|pJabB2$4LLtY=mM%R^XX}`On}J0m{@p~Os70g`$c>$(7;f;%#%4JvjTI2T&t?n zC$|5J4Q`qkBtvFWKOOM&h(37q;dF}mT^39e)}i_e-E z@(7&K_26k>aqB#2+BqG4F^fvJOfT+i6vNKp4M!pQj&~$*cxl|{4smw#5hJ@>X(T>Q z2p_rtdDCw7Nt_gHf-WktxYTxZaxF*~%-moe3jrHvkj$E1-g)$mtnmX1<@V#PZD0aB z+m9Z}x*CBhUW}K>>y@dmV<8ew}-FW>>I8dq|d^I8_EXNUdA`sir{;= z1blNFfT04#fqrFX@^TvJCikB0+Krd0|B;Ug{`NSIK+kScnVrOt$6GDfEeh+0G1i zAsY%qWFclN=xrem`>D#2*!sl^nNaLk3(Jt`2vmuPoY7ayNaUnAsYHTa@#r~ZCPV=Z zn3{b9Y|v&p36*&CLMCapo<}H&Y}}WJ>xL$8bB>G55;_C{%?Atyl4C7OIaE&Zwl`C?` z{)}NfakV4tvM148zBE_^>tpB#@VIP+NV{9NWdX_Gi=fx>i^9;_R1 zj8seiBQ)+pZDXHeU1ut0{d?C?Xv;5^xIIMmq__p@egbL=T;Gn6u8{&~E!Z*W5@=k5 znie?*OBQ?N*3UZp_650EN$&HfeS0~>Fv5Jz7o@fCaxX!=ZGAyNFDpGd5Uj7hY$dYG z`54lqR{$K^hsL%pxt|t#Wg7J-`O1+&ueKcsFH*oy?E6D2!`-aqigB4g%Rng4uBo{> z>c?meJOL`P{3~b1x0%VW$oHETe~#fc>+fR!-9vv}@63m-@Mg^EzUbpJGOdOo{)KCi z9oGDeXt2$>LhTKJN7WY|1}T{|!@}O{w{4kjuZSGx9H-y-=eRd!$XIU_(b8)IWFkw3 zYv9WiohtQupux^?wJ-P~Q_wkeYtJ9aij2ZzR<7z+fR1j#WDT;aq$T8_1LfdKji zdvY2LUw7r2KEz#zY=3wz5Rq;iR@?3oMZ80b(kf)g`Cxzrf~33&3TXjj3|rI|yMFom zN#pEa%;E9z^r=grDF><7%%4nefr#znHsAOI#5<%=h&Iy4S!eIW_4qP=XY$aVz_Tfd zItWYfDyCicnP%WmI3cJ{yoDfYXaOB1C1BQ~P;hrt2b~?>U&Nb|K}1tk>83^YLo%c@ z@VHUX_T$-BN#m<;!a?n-yWv}zn*?hC>98*Lmm=VvX%pSK)@{zOG>74$cfMmorEqf` zmh7b0>5+I59hqc#x<`w-aV66FqlGCmu)m$fPyUGHn)HtCUB5~@1j)6j>H&Cy^C!Du z=H?nsldtt9;HNd0sUJ+qCn(S&I-d}?;0@LeT9%@EvJ}d)A8f#iSzJ(nO!>?X>j{Fl z{f{$4XXL#^*?x>WP0m%`lC3!XKM?(PjJGZ66ns&(R8vbTWa^CakiY6BnwD0K-EEG3 z8YJ~?sbZ0g;erZW_*{+11S+!7vi5&!RhN^;Ox57_vxe-Fi#PeoLz}bYN*j_A*sheG zJ`bLFI-Czt$9Xy}L(iwWabyv_IXdlg33122avbRv1{Gm3eIBM}0><0_i?!tebpNCV+R~!;vi@^y z4LMEVipmf;ApRdhmy`9KBp79N{;=v!Pa~w3cfKVd9kxu63NnDu4e=W}aSlW3gb9w$ z+pRDkA?iO_?N{-C@WZoKh5x$zv`fDm&5vLcd6*>*Am^J<+sCKbZC1rJG$mLxfz<@&x3`= zz-tN1RUHIHlL!BC{!@BaaMEc8IyD? zjtmzGJYfwL#7_P+r9csUP@dUUT`A&9IdC+-d%40nll`2#-#g5^+YPFIBdrfe`VsHS zI>o?~B~Vv0ZP70DLTFMYesMnI=8}(Z6csk&2wtV3wHf)T;ROtgJVDWpkm4q~BHt5? zuQAEZ3ms}~Noj?sE0E-J|JIqa#lo?M%Z}(X1Hrra1{0^u{v|F&7K*OiMJoqtd0TW_ zGp0|XNWY$q-`IC~srQ)>aopoiQokF-sJ7i-w|nj!rfW)m`ap%(a-21$)%n+L=aND| zxb5Z_{D{A*tc_TvsyGk@t^#(eGZ$@F3a!48$%5k2|JKi>B7_G-(2Jpd&C$s_J z-oMTWeNv#iwD>x&w&k?N+>Z8Ls0hN{wWL&%MpeER*~o5i1c)T!PrmQBnzxT_O5AfbvyL zsh)D`k7ia6A4@ehlSp^3^51K56Qqx#_@CG7;wKl^m zv94W{#VXEhCeX}bdnU9kNZb}tFAD>bZs*7aSi;i_CXwo0>t^GxpI6~-U5@B8K?r& zsNWsGVsId7$e78`OjbgeIMMjeL|V*jKW2uYtpV_0IU`!qq*E!_zHREbaE^a=?H_}E zaB0*ajsODWa`g+GIsn}E$)T_9*V{=1hWO>PCy~u$S{pSrHJOdCX=`8CJSReDeXadw z3L#K7iNo0Y?wgg*3a6$ADMDjX`GR1XRq`Op41_GdFI?6Dhgjmtstb#Sot4dA`h<8a z$Kj#Bhmwn9Top?P-KNMmaG{#;5|V53j4Pb2uMOxqAOx9d7WWC|lk(1~+9UlkM#$&N zGkubytb60l_7fHx@))ded)DXAV;57H%}o% zVmab2R{9(xtgUkA;tKk|%`CreI;J>*0^|gb3EboN1q9_ z9>Vdd@TBqK5RZw0i0`2ZV)13Lg1Lee$!H@7Mhv|P52MUWIrVQD0oe?f4=!ZcQ$((N zK0T-z#};U+KTRYsgbmm8Z$~-oSuf$Mxl^k)Kt>xO;qvb5*DW8`MVFl#H-lCaK1cT3 zkCtv1aLONRDg@J#cZ4+of5%6(%yY^9K#Oevl^RMC84$a+3HKtF9}}d(DBc|_Szjv^ z)B`7sP|TnYmn#^j{_~`#Fv*AJ^{Vk#p@Fy`I5xwXojMt|oCs&0j>40e^Mv)P5V zU%HQ`=XR6wZs+~4&Flo=+uc7y4znz4XBP>%^ZNX+F7k=IaPtZrjM0c+{&b}Ih)CFuC(T(y}ts?_}aMVk!2+7#g1*0{3(uFp8rh?b{h6AZO}cf8heUvOLU)KWb3@(Iaq80?5?|Ji zdz`HmuZ$w&wB9gC>pl0wL|{`4F>__l+siieJz9+u%3rMZaRt6LfZ*oIk28 z8jg0z;XA_Pg@7RkF0^M-yYTp{NAP(Emw=%%B&sagGp~P!eClBS{Sm)aPk~)@$j=MW zxYA}iR)X45!5oY849+$|CkTHjuasF%8RaDad_P;xJHX-1#YUybC7++{BmbLlE`^yq zNMIkZ2JBWa7mM>xcfT`rAi84Q;(h+t8cUXbVp5ia#}jyhMOHwRHMDZkLULRkwQJy! zy>)A?M`)!8NNs21#qp?SilXz(`Co=1{M z=b7qJ8Q{;{ZeKg%TuoZ{0;vu5jf-=gPrnS^j{bYtaeJdr7}H%lG^f$(zn{IrKMb59 zMNy^dxRfhbf;<*4 z<7JSbAJF+*JB-#|b=5t;>}B{(Qb{uD5VIg4H&6AFIsemTg`d~H{no8ijOORi9Njb~ z3s~zu(^6xPx0h-uLzRs_tJIR zDzrl6-I}-sSZlNX@=i#tg5^MS3B?HqU9#| zt(v{nt)0<}b=zlZZk4LhzqZh85-vviE=2iE?!r6fH~B8y=3y}bd2R$JBGM|=y=Td-kU>BNOE~?E#LgLPh9QBMjq7&gQ8n|*FtO8w4PV00ahlEiIBg)3uX8PVbm$?V8=Ja?mLn9g;TIyN}Bt( zS!~OI2%7|doAv^FuN&LfaSZ|w{D{H+tRINc7h?3282t)gah4oCXG>zSL1v5jBD9l8h>mqGm;1X(42xk^j z>}2bS>{^ejqz&g%s@Q_}c2l*!>~3a#jri_MBGBVN@F?&avdFxo&7QLTOiTJc@ZONu zBeQmOy~=LmZ+G5%aeU(Iw@%H=H7apZjmK4(RU~-IU`a#o9N4@{fr?Wi0#tGcORhYK zAT71##pVZoDvfTQ=;wZa+s<cGSbdv_cBskj8VTK* z%os&$+zx3d;PiV{&!@Gy`3p8vcF1mi^`-m1pX|O3`3;?LknPYWr-k^RGQh#o5H%~q zZ92%$q_@WaX=}}|>4i6p*N~__cXix(Xi;{%tJ~$qNsVov&MZ=(;I~It#=rQJ>sHqn zlfRq31LHD6q+j}%)pawyFBQx9O<_1Nqb~bd+z%n{Li*bs9mtCDb}7IO^73$=4T(6) zOGRvr4P)zcklR{;gt>R85{NFP!)yg&`L|fg46>TXh}|1O{u4a!+;Bd7K4!p;xPZe} zn%PO7(^pM>XLjz_8A|^iuRIA*t0NI*huy*=l?B~H{dR2vM}M{Sq^Uc2?n}np#=$F; zUO>adK;tFH^nmsZT~m9sldX@qe=*}`r^`_~AQX;;0eUtVYLz7d2IMncIFR=iG~k{< z4^A!d^mGThMEWV8Oo3xLfEU<9>Cccu7l_qDo`FhS+j_&V3@JzTq|Jn2UTB16(&vVv zh~5gzLJtbaI_Vd>wYx*Chp=Tg^Up$ff*c$;6vw^RHA*xC=Btm9{3p&;9&^VMhJ)7E zDFwbNH3E$Z{bNLiSmiJa;$VfQMbJtpal+9mvv2IZzU4#e)U>80J!p&9Zd|}+kA!RU zQz7LUw3YOe-@}|^+w=UNR&?D$YduGWB!yKEDekd2>BXV@r1%Z&`8KthXlB+$f3?5D z)ibWx)IbNAq=JV@svr~-f`CJp>2hSb$%a;j-=B=kDAzh4Tm{Fi^Sd0jzDnXt zAfR5rd)pQ9Q|~!x@i?(w0WG@x(}=QO7&(%w{oTGxwpZOiP5VJ7Hl*@ZqqX+CivwHF&5}7o;I%^f27ssD~TEJdf9Cm;@AwgzdeeEL+itIHHC6mDL zYCv|m;&3rl2nEWCWLwp5oSilm%TZ#*yqi~_zOy`AVK1Uio8^67Mi2?M_>k9U9$i3I zAny#$rg%>$$Yo)sOWPGK%aKAALp;Bf(Th1|-GLc{Azmg;8$kk~bQQpAFm9ONvGqR* zzsBYes^>raG2f$dp4mf@hAhjpQT@12(7qc98-}#libZI(Jnrr@Av=@BMY|_=0;oHp zP@w97jYvW%@z2ZuEv)mg*mSyvofpGq*I3jMJ{R}n_13a=ErzNStPs~l(#^fe)U4dy z4j;Q2o@>*Ms!XRwP5ui+Yhmw@u5kd8Wwl4F1fKq*g8(2loJHjlF6XQaNCoyQ{pMIr zrA>Vk1mIRMqlODQ0Xx3v8;w4Tb&q2vd3*z`u8dWFLifsEvb?Q$*~rGgJ^@w5%9B>4 zl${t610E~d&}+%hC(aCz*ZrE*K05!x8ud@GshgVL5%`NJ)5xUTeMPKMcP6m&S7NGB zn9HI-!W(f<7)ZF#FK|G_CLu*?Hpvq(DuJyC@BKPFjsF@IpkSq(82)*an5aG@k?UWb zt@P&7s^B2k`MWp_E1^p2ZtW9wx0!V>tz4Zt4`J|kXT*5%@rzvP`uNx4Vzt=rr8hdC zXWi5E?_}V}uJ?=i2l4mu{9v_v*Mqs$r%l(>sRNE5bo15zkJy`s>oQK<&x8KQ=4c$B zP#*E8P#8Sk6?en24-8&$)W7Jfpfi`j8Iut-f}HR@m%>S7)*1dt<*e#f&*EE)v`4{YQqADa+6<$utt!Dx z%Rmps)fv<3S*H)jF)YE6e@gTX^yDqwu$Z&Bk^ipS2OtLY=q$pQ#bjm&z)e{aVG{TS zTfyKVBZcQS5^3&Ug?w<`3j1D+E>>1426TJ9a)G zjw~t61|&b%BqMP4glr4g0%9WcqUFfR!_z32sd`eVq(ilB8EdmAtY^*gg=&q*iboWF zz3^pZcsiOX$<1=uo$}AhQjhyyWhmBduX>+>rWQ8b-n;5{2>XK~Pf+_mz>cdR&IkS& z({a>IV~HlXA0C->Rx^OSH-ElcfIO={Hk?8DDv_k5h<-k-V@X42w{Eof)92DY!}$T| z!i+sI<->;b@*LT;x3`X>@g(2AV*(_Qu?4(Lv6vl6Xj2FkoO#XJB%FJAD!U%C)SX(k zSUI`%`T-E_Yh!%d@#+-xaY9-Qfy_956rugaa*u({d<));IA-K7h$6M^&IC!6O)v9s{_+_ z1gApnh=9@KaQJ(Q#^qJ!{zC!6x))_cA(u>|D@@(G086ek6DI-51d9OXs<+zKsIi&c zzdfC)w1ii}M7-OZK(@DIR#JpJTbHf(v10emdv4t4Z%ja&g29~VO?0>A=b4^t^8)b> zK!B;QOEI58bwOzADOKWqz41y|m%o5aiYRfDFbk8^PDZA}HaPj2$OyS+b)WvJ>CLmW zMY3*l*YGy>?yxnxFl>b7-0gI6gorL$|95+GAu&8zu-fm-Jv! zRcb)+uBia8fm6gYt?|)Afl$u6BsV#K9cDqcGMeMkuT|VIx|JLHqSrl5Q#>9c1m3O| zc+6$l_T8oLxv9IEHdWG#*$a>DjQ^^3v6p8)E})bO+*%M&NBP>~WVeN%GE-=pQ7*r_ z0xR?1W{+j^0N87vUIoh8^}g_`xUNM5l^Scjtj8+*N!h%#Q8!3HeG$fwc)$nAmn&R ziagKh0^a?D>P2>FXW)Xp(qIn*w1~kSvdScokEcjZZ8&hmy09CZf<-tM%!kPf_^>5b z`iq!lLzZ;?XCiH1JaK;K1L9Erlgip&p!js+_cGFdD(5VHt|NIr6c$}qdA=OkWQSBePS%>15w+}PnRP-|urp9QuT5E zqC!VV;~FC*S;kRaowdIXoGxQe&y!;bjDp4Hl^&HL6;^4U+$wyC?v1(@B`{%STGc49 z#?-M|)15QU9h67FR>rC#CNSTYeKeAsq-q6~4=Bu<9{F6~+HP&?Ft_4BE3J5N7phXE zEEqm#)T2#2rzUA$KT2sSsYx~vEe=Gb%f;`GlK;5lEtMu8-P2IyiZJKRMKO|Yj-JW4 z!L@B37zZ>b)9HGza>brJQfbclR&JI9xJ?cwIyU`sa$cUoxU{si_P-LR)oZs%mId+# z7*1uHpjr2MOCLd+933L3nUA;s>FZFQ)1Pd~_AynX3u{-@x4pKLit#OWIXlLX5%nxG zkBAkG-@(Y_b%N$M8!<- z8=eUYpL`a=UwIMTkP5?=`66l4)7dATg$2*h<_@KzC78Pocp8uE3O^}z@~;zbojF$1 z#yf~o2I@5(NL=0O-55CJSFE zZkcrVN#Dkjo4naJc08L6G%Vy5b+i8aG3wrGhE!3B;RYyEp1NTl=F@ zm;YTOGy;dOAC4%4WA0jud`OLDA<@CC8VJk&VQq5fj)=|S5*hs!kh?`ej}&3jf@MYn z8xP2FlV&Mi!W5cl2|B0`dJfJP~qvxz05)wk|i!6PVL>2U__;~JbVV-KK|RHq|VxE6uO;oCX@BbG`g znF~0;+$~TKg$aT@+j|M);Nin?iGg#9f)Uww_fA%$42=YhX15Mh_YFICi0?;=&yN48 z^*f5S6ct+pIfiuX)Mbsf-aIVp*}cJC_6P{qDoFa!38{}?TZ!KNK5YHbe>FpzgfPic zup2=)a&x=7h2{2Gx5LG2dH-cE+@daKlbzuJ8;Ta8#MIj?l?T4UKt3D$RU_g4Ag zU+3>p20Wp7PQ$8|<;gTAxpTfF%qmTo=+2$__C7du@)`c{oj!InJYYXgP((=4g!n{q z%M}f-B%H1IL-x@oau9(u^%~AlY6^hG^5YWYC%s)?Kg`%O|94i!zXrV!#(QwLZIw&C z+NE>3`g@>m(Fb^|>>fI3aHYRr(hjHPg=;j7s=L9`=+y<3*hRNysXr=6chY>vt`!c* z=EZB2KX@5yP)=pP<%Kh>vZ-b*(FU*uy`uRF55MIj2f-M^gm6<7^GoQp4i3a={k7A$ z(=%jcTVPQO7be8ZSN#=y)F$7Ix8E$D1gqwzI9DaOoaZH{bX`cENl{F6kBv0(LwckYmqoK>l+ zHi)l1ey(74+K0Pn<-sQcZ`Fl8xK67@#f-4y4}4?a;U08d@Se-f+we!S>den3b5_oq zpTyeK_Fs&RClk!y7l|^0R+-BbnS?*KlJoRXTeUEL^^*ZN* zJbfAh(&4Y+pX8N+AMC1-m$X2pBHvVF^l?ELnLHj-z1u2xs0cEDN1s~h+F5QZ4KmnW zcmzMHzzID#|4_)=raX&Nw{-n{8N^MJW?YdP^zQFJN&=xgugy%tqMtw_q&cXoHx8rU zULSjCPH}X@-9n!u8GYTDzMChz-<*B5*)DZ{`&xv)Lw2>Vt!l4V*?wH3cDRRHmd>wg z-&cOOo3)>tQlBI18{JHwu4BF3eRkfv4SxIByBIH;uQs&ro84*GJCj7;?tSZO~+chh- zIzf~k&&U@u_3XcOlDxEVd&G#{Pi-%(2W>ImmwU|EW_0!YT>BKts<41uai_pHCn@tT z#wonX=M+@r`1+sAUGXl>Q{-Wu9H)+qNy5wA1e|eDe}R|$#5==}&F!D^VQdR2OotEL zbM6tv_lCKF7{~5%V!MCn>ILb*n_@KYQ3IAXMSg@w48TDFB)MQ#{|v*4fJQ& zyhrJ)(w!iz;Hw80%xh#NuIgPrH+qBjImBw8vrhJ!eV=eTmkPr#?y;+6UqC-l;q_fl zU9|>hW^If|g0dL&eEIoq>V)_FhY%moI?lazr0v zR+f%Nx@eS?T=5!O;_mz!s+Xap0jlPKSGsv6WB9CKJq~Zy09u+xBJCbp%!R5Co%@Ks z`diG)9h`QOrOT?Wh`^StD;=D7+BSWsWs3ZR!eBt#MvgGlb8MiE3w@#E@pw?;kFuRb zr#F9KQc0d>fKPCP;-Crn=hIns9kSHyEFHe@(W8k9y4ty^D)L3MVO2IJj0Uj=g<7`Y z-SGIlKc`!{;_%DSRoN*(02vZ6S!dC{dRs8iBihH|>bF~#XV`_9(+hcoR-TQZYd9sD z_msH`5Pht=3FJ_A(5RCEUIXg4D{&c~B|Xnt^1Jg){}m|8l2b7^$JSdiYjt~=h$IOi zg)#)Azoxhg80>S|8VAKmy=aMx4n&uA2Y{z7pH>-~!_J*7tVj zOojz4&A(w9lM#Hf~QAU@! z{_?jZbs%5Z?s-EN}rTs_@`ErS+Sz>!xb(hzeHL z-;eHCYIIk<%XZ!ZATVX?l+6fu8*e%uQ?zXiVIVOzi)Yh}PcRUPT!a02pOs*Wy2qi#s#` zAjlIS0Kk7YxU6ntx5$pa3-Eb4N06b zbb7xlh9{EYn}BPE8~P@6An!K2?KF!ka{STik<5l=Mn(q99&koiq|O+==rMw>JfZ-l8!-tsQBR!4Dxu{NBOnyuY@dHf%olPSscv zdvRhjNwN-_>m)bI^odX>OS)vg88UL_QW%_5s<^05%m%4%=tHXb2S(8<~;d{b30f1$QIO!Sd9odQ%^{mk}SH( zw?1DwlW*mT-bshP;2c-WnI^5BClRW;hmnl+o)MHWU{JUjyr=NDWE62g=?3%lVHE;| z`q!W8ly%)l+qzIFgJMmgyYs5F_BNFyfCoa@`N;UW)Roc99Mw-bDOw((dAl6W_D6oQ zRYB=SEdtJemR=XGtMXKBb~yekSrg?H%eL#hV*Q@BjU4ck!r8~}8`cSK(uSZ2WLfy; zf-}bbN>o1fV|H$L*XhI?)4Nqd5x?-Qc;U9_$zg|7kqP z_v|yoQu(V^e=nZX91D2V#TV6R(szW%`L0_j3YeT(jk56q88a!_)G33nM&7~tbIHt5 zYcrB1qBFE&LjhIHH(6H}7s+*C(t`{9ZQCoUJCxv!M@5boJy3O$8>@Xl8D&H>slJz> z(=JYzivrQPslryxhkUml(?!o7&f{*^V(yVMf8LQ(4j>=QknCb_wn21@BOD%_g!fW) z7s_@4s*G%rq9iMqVEJ0;iQp7L3a?gA`m#B z58DfmbbK-7xWD3{OdNuT)=bB1;YIdt%8B%`y9;_Kv_NmJ7I5F|~&!=re;Q z1}2CF*s;ME>2s_1dV^8nHgeRqcO;DFu3baFj4B%&t8~gid7|;FlW+@RuPCP_2cxH^odwiR@$QqFFp|unaR(F z;Tb-hGOg6&%Z9;B)Y0_Ae=Hr`l3=ILet&5I;A4q>?)3@xQ)i2Y^R+O;0fx~>V8GFv zOT02*5klIpGAPsH z`wqGQD*NZ|{4QZI-!@pKgq7wU>2!ntV$!Mtg7<#JqxoY`=E=2zY1%7R;>|JZv5qMG zEtIi>BS3-jbi|S*VqU|ao;h`OAk~Mo;|n9I3U(MfK%VQRCudfZ9O%PB+M-8ch`NQ} z9MDf;n9TOVDj~46-c!r0jsmUv__C>s?7fkr_hu=vK1hK?^V$So9qK=wJo z?Qqn^bQLJsV=-oj&eJ&nS>J2e1A0?5Pzf@Yh6;jDzkZsBEG2(Wn~ z#V>mzw{JS~05!B=X#`K&Pe_o?@xiAmAki4$?<)&-V+{I_pfk*cwuq|DJEF-F=jG-t z_9(DzIJk(34y#`oH{LEiptp7r&Tn5rM!0mA^E&&_n&6)G)W4$ zpc*JRjhzdacmiXGN10NxGM}7NL%Xr)K&JQI{vdj|L?_H#j`R>poCo z`9K^%k2X17kDCbo32@XsC}LrF84=E^%VC;4Q_dP8kt~VcY`d#uIL4bwaIZZiHcOnY zH|4K@|4e#4tvyrQ3QE}C|IQQMM{42V<>dOA$)4O@v+WwBuPp~qAdXYZ=iLTre2a9U zY>QB3iJvr(8tLEKZ=fB(lNC~Tn#5HkJ2*2$ir5x9W1iP-$gBy!huL|%<*-y{Th8&l zXj{es`RK3IeIc&fgz$A=JZ}zMo+cCw$da!GiTNF>mzxbl=OU1yN!yQM_3mViAf$xP z(-W?oS8?LikTYA}-dkt#Z@)PVrMtrP@prjEmv9`hj z(gz)U0vdBkfzdG7LGDXFgyDKdQDwCk>ZWVXzi<0~y?ECJ?cwoLRj3P`{{vW;DV!8F zIB3X;Azn^7>He(!$(gqQK&nw3( z7kGX$etiPDcfD7~f|`^WDK^ceOBX0PhyS=SEdaXaT2e?GxclkFiwT)OtsxB(nhCi; z9jRvEPXr%K|GdyM9{5o<`hh+{o{d-zUFXzdOiRkv|D+IytpqS1#>QRla4$5UKfoa+1&Js9n!q0$zOGH*_*L9HkC7oC3O%&Z7w=ua)!MY9puOJn05|)U3J(u27RB&aCc=kS}ppccE23LHL4! zyn$Yrp8eL)uhmplua-8~5cQL*E829PF&jpVftM4z%k!0)J!`n=jXe-NZoB#Ki5$o; zs$lEG)XolL1P?>bRRy7wYqz7+nKuIgF(pgZg;5DPnT2J7`B=K0G31J96g#ukRd1~u zhot9-By&4y@!4S#^oWXj;pQ2P{v&o(@9<)AWFEn7=y|eHKq{31a)=b3%)$E!!?!!e z9(~X6d0*>q)U@&=rs)G$aD`#u{*6*qty*ZNz)#b>b^FDI@^C-5YhePg#q_CoSkupR zKSri>}GO81u7N0PhEP{L+|SsFrZE|r5$ z#Kx2!lt!4^RI5CTVg_h3wx38KnT+^nD-XQ!VAq@V3^9=JeP{Q``!UBgz!^;L^!;A) z`Rlr;9dw$jxeW5|5hJL(+_n)o2$nnIFcy01uqrIJuffLF-j8lxf<-3}h6q!4IQlt(n>| zYu>qF2gk*0HrXbTK|o-W?nu9g5n(m4%cCYk0Vz;Mbiy+!eA>RkaQkeRvlNxZI-Y_| z(Z(@2S(u=;0!>zkX9FX^m_6W4wVEO*dtLc8QN&H{s&kj_cLARV*jcj#&AgAY$g*_A zARhb7k~?q^<=k_HJVS&-kAfktJ#{gK4mCH|4Psc#U}Kt z^q+GYF=zcHYD16y{GlE`XI@%zP(DFkVqZ8ENVNE3j6}QCp57>07MW4iyC7OOI=+~s z;(q%^5Frqr)6CV&uP5aJb*&Lc&U9d%fe(uCw}LQ{AdRCJN1G>yBa?m$-oAXN#M8;> zD^n33rk5`GddI2kR|Wo*`>N`H1L0+7BO#7Y;^{N6duJy|cM_=*5>+LTbat8?CC=XWzinzhH}p7rP1_-> zc{oU%-U&uM5L8*Uf-gKA#=ps{|6)o;6Zw4WpP?8U<$>h%$8@&4<)&jrac6tF{b zCIeMxF_Oa=ad*13a#tfObzxJ5<|+}QGVOsmqwQZ=xXi6tt|`yTwSWs*>Q_}Vv@N=^ zi8=eMo~m=rh(K?d3)5*VSzxjk$H%JXgDiF{6xX}V6|$ncLM?dTYZnLdLk$)1)n;yM zxD##U-}AJ113X~J6c3~1FS9Z9W5dsqIzjr{M=~ATo4Jp+-ataChl-6oq zd_$At9Tol11dhe$+Z~K>a3mXeRl)4}NEKK`6@};|VjvlzXB7JU8{*;aU6EdpU8%WP z1QlcnU*)FA`L>KOdr$hrQ^zK|(+E>|rQ)h|J7^xOr0M zxQo2l@$cwl3a+$2W!5u2M+bl4N}E!f%Un=m7&?%-r&UNWYIYnQvYEoaWpCYDM?Dil zq*UXIgZFfO$RX72^qtaoB;coi&zIN7Qt_!)h&zz)rc&8`*;i&*wlW3R&@vT^!2_c% z*Up*!h>;NiOC*rcNBznO(h6=+LDs=-0*p9u%RMt`LV}}*9%j~!o?Pu=Yy;_=?08L{ zFXof5WcgL^GVPBYO(bcSsPsnzl61BMSNp^}3xUwE6$I%Axu@)FOTyb6p*97uMa2jH zj@`R_38M0xV@Rb_)Mi-I)X;?=`UCsWrwehywedUaZc$U~>`4kpS z)gsHnTD0SGFsE0|uUfL!U~|E}cuRz21Ay5?U{m6J;>&_Ou*yLW7p07PB`cbb_B@Y3 zHT>t#B7+y0+?-k#g7IG<^EepjeJ&$svb{D9) z1GLh)E77l0^^bmdPw`yfgV^fu0fW4jub;r$WbSW_Bvo-J7sQfjeoFWYJV|d*Swn0dArA&NM8Kn>wS;&=w(8sycU( zI#k(=?BKMaI*j;p@Sfo{>vhxcj#hb}ar8{SEt48>;*X-U{nI%4ihWn8^~&U0Qa1-4 zhpq&jw*AX@%CeCYki=HHJu>A~g4K9}BM`kzV4E z9{c_b&wy_9nNze9CjyxUOIlTT-4KJ+yBR^~`OxA1Sg%yPV!bVnu>k;uZITV#nHVM5)g z_J%4!WM(Mn7?)ksnSa(Wh<%#ynw}Kf=t&kWX6pztvhMe<^k<+cyRQFyT8*);oPfd> zOM=*bVdHKnGD^PUWXz=AUkRtA#mQqYeYdzGi>-PXd%m_`kzHxqu30r~MGlOU;4x=? zpB_=5%2Ijg1Z~32OjGxpodj)~wY6{e*E-tb)}lxpY^H)j8!1>qqC{|0$w&2P%#Vx( zrllQY=<|s7+ypn);>u~DDH*mYn&5W~Ur!w7L9*&GSICqvxjg=(q(KlTzWDrQOcJoo zW+5?4{FggBE?tSVhbnTLzc3Ydsz|e`o5{yEOW8`e(jg`qt1c!-V^q?ZlgTy_aZQ{A z=i(?A3za8lbep5KwX$O~EdV_(w-mx1CItg5?u?tHwr}`{5^%^z| zQZs8eU4n!q#2WR+;-+ML!ptuaKCaej;k6!WJ1PL9q?R5vKk5QCdg};?S*$dB1Fj-= z=hCo`A#jN3iChsb^rS!yqgD(Xz*8HsP$86{7?M}?HP>!hp{K-*<-x9MK_egMfG+S$ zhW6BYF{`7D%*BH4oa;G%MFza(EiSz$z!*lDVdyo{+N5-Vt|)7*KrCy*#Zxrs#TP|$+BJtIaK{O%dh)}(#v#;;-QYn*T^>D;eD z97-Sh{f9;*WMM}i6eMW#?X$hshH~0NTAD|cf2%zzVT~r-!b-S_;VzjV^OA%1OfTOy zd1R?@79aW zwb6a_qdw)Yd3eD6DcX4-solb?cZ6a+F%Za*rypf?kpf2p;iiQWJs5b!#W=@%z|#tW zj?xfJXPmZmJBJtcp1fnN_0S@R6VTTencCRF4rOtfi~Qp4jjWN zb~B$UwN264BZzc!Dqz8DMzHzju+%O512+(LCy+eiWR zf9l~kL7{2!L# zC0n&KC79A*!AqCf!|^82)Yzv{a|=<}}3xX^8k0$=Go2RxsR!Ol-(mhQ+w#wUXj zYI%pi%ZCbGX%4Fg@b4IOdSO$D4Q*{Bc7~YF(##sSsRA_T^Xl21y`Db=eT}mF-{S~; zh2sWfXXE_?pFDwNNr*w>6TmjR5?rF3FHyzN-l1ec`P zlFvb>1ek2&&TPxEu`HY$xsw&Cdk&`cDF4J|p9d}ClnBOdp|2jpj+hh-NWhzCl1_M| zfLkB|uZ}6?AjIHrju)?kToOVc2bjr-i zlZZ!g{VrkdB4W<|IDC;%A5n7h{@jz?zSQy+D zDE>mOkOyU>J4zYr5xFWm#B1^u@-U>iH9<8{}%LsaC?nZb~{1k4Y|kbx3ZP$Kcs%e&+W zU&r*pjkty4W=|eZiW=dbg&WG`KqM;59&;BRIlBcmBYBNIEn!y)d~_;^$?}_;L!0H5 zTm)?}4I6!8R+Y{bg0X9?0t%_!flgU-(Mx972ZIVY$^8S3A!k>tB5`P%SGWtsymYD0{rYNh@dWa(MpE}i>By0oqh+!uZp()rGZ zhnS=>s8;I`O?eu`WbN6WrI2=7dO!n-Op8z=YMknUz2pYN*P zEHT6X64lfX70lTX3vw0!|xK~K~B2=8j4O0Eg1?R6)78?-)xnSEvCYJbxQkS zeI_Yp-!;(CS(3ZXg)Jrnr4&#jMZCToa;e6&q!|$ZNgkwmut2$)zDh7KauzV^A7u{r zI^Vuz%^^h+_W~LtHlk}zVcvg{z}U--5ez5tDIq}=$q%Gd{C*Y;^5%S|s*0#Ay$za= zxhx7q%rHd^K}$0NMG)WWdS&P-^GxO4hu87}z3nVzTexD^c@y$s4I(<{H)PazAJ%OG zn_?3>CN?@{@FZa`3I~0xYc?u%a7b)lK2~7Nno^~1l~{_pC>ewG2)VIi^d}qGWz2{_ zAb8VuQY-A`r4aVG}isCfLVm?5hg%gX?H2d{Cy}3`h0D>UpOLno3$5 zL=gR{yF=NATfquqmXu@972xWL=J)N^@rc4y1@2lal}f1M=-Dj=&CC%B^HGZ;i`9l^ zrh?(iPCYBR>#E+*&C;IPP;=!R;4ZjD_)V*j`y^-xWZZsOetMasGs~sx!LhpjhT8gO zLV2;s(%ZYDN(fI0cxOM0-0Uw5k?hd^|8PcK_9sO!&XM=byMU{ zHwMVI*8DR9$;KFbi&s|0{!PF2Uce-t%wU!^x0{7cKMKS%`9zc2hWVYjiZ*uMQdeh1 zb+JPZ+|hBw>*hHwX_tJqo#wwV-fHjaX#ZTDQLi9kE+TTa1|vZ;Zosx8S3JSbx@Rh? zG6q?eaAszgsaI|e+`5<)3zIvBy~{8e@Yn_cLI}b$#zt~!+^9ik8U+LNQbHM;_4mli z=2#yf6BNpu0Jsdx(icZN=weK=N0_$3bibqgsFQ|BmcueU)rBQ#MvF!Kl@VG=EPLoI zT3eqvcfNbCynjbMnan70PymOKoQuI@a&sRCMS=Z}A6uL7sT!kFVsze)Gu{9+w3a&5 zeD1N9)_P>E*A8ilR#i34+qMx1K)N{%=FR~H|D&~sl6TMR^G+H%*L|y<1AO`5u1?wA0ZbeC!9!Ds7HL0Fz ztuEmlnSx53I9qTVTSCnok%;~|qnptS7D^nEEyq%A&p}aCwQ^9hz4Niobmp+PoHpzX z_zmk7#S>b0m-3GA*{{2w*l6XBq&*6WEFGXoxIj5N+iY2_cNl9WUKFvIrRo$%vQd_A zw<=Lbo$%xjvnWlXKDTT%x+}Fvt2FKpOG40DQTlb{t%5U*`;~5z9W-3eynox%UO=Ej zoo@xB@SEO}xfrf&s)v(oY(p+qqf)(nr~SY=Y#aGoTsX{pY;WgEc_E9_&U}1}+|;B> zC+YE+_eaR%1%Jp)X^Cmt_gHv@^L)VvxJPf7eCH^9Q~E;JbmNtbXJ9VlM|MrU<4*(h zjGt?rtkNEj7~-{Y8z$qo6md+yMGy*A_YFl-TOe0t15b!GcyvUC^l0;!oAUuSsG5pd zWq3&>cMh}+qPnsUD2{?Kxxk0<6GAcMl*V~d_b1MM9?()d@Le3$FiQok zYDgAam!a9oQ#PyQ%j-=NT>5AG+F|%bhjH1(Wuk9!eX+$yWbfG(<@)*FnUFNs7h>?) z^>X7aYa_F%lh8iX5;4aT95g`uHXt-d3a)2|6ch(zQ!&1voCpdJBroJLqE6pfBeXxQ z?Eb?JGt`J|GHO&{8^3cL{_ecIh!NaJ(|>)sja9G%z+ zo5Z+roLfb0V)ta=oPz8o;ajgWtc1@M1&u0p}j=P5f zXexzrXMTO4`Ad%3M5z86`=WCn*CR44f?o%#9Oo%zNlp=b0lhr5xJk3m>!&~kg9m-T zSW2DRQK2n6R&J=SzH1#_yrM=fM=@|1vmClr%P_>-T3eMNpAIXhxe=BlV2}_+n4!kb zG#+FMR?Ofuy7nXvMxMvk#%^1e+(*F(%P=O>MC7|O#nrzSs* zvb@IZUVSzaoL7yo(#F*q>ZjD&WWH>~96@6`z^(ylEx4HG({|29IZ|z`V>zU#8hfPx z=aMm_p3PUX@g`a;5~(ZmT(DBa3#&DQ@%d{;knQDVC>p;<%+BnoVFq~;Og-kAiYvN* z33+L2eO`!Iamj<2!tD0M2AtR80FwTK$1Lhiq?Rg^1#EJ_rD?6YM`GU>PTY?L>B1s@Z*q;7S2XF&SQP<8JUE}zk&n(SZ- zh;SB1_#e`D{q7H6Kj7Cj>oW|mL)@C*>;=bK(aF%0VyJ_cEB0UZjl=7u-G^6^okyPY zEKg&M_i@&8yajt}i}L|Ar1}j5#v7gB;?*#jEAppllJVRw=gqy%p=WLa8s#GzK=XXu zoKQ*QFaGwc%OoX|A~lJN+(@(_-wKnul|uBqURgr{PCclDa7}`Dbm%cg)VJ4G5YAcT z$Cf+jnvO#MRnAv9hG-&5$#_wRy3{81E*DkkuZKZzp!O_J5mDm0j4v~d+^7(7gQSDa z_)8bKc2YDG5Q)GF*MnAlDppX9)vZYh8A?8M@fOLXO}vMqmoiN0Rq+MFsc$b^4A z=4w8TCo`ScoLr#NqrUK7Zh;ImEgO#jE6b~}s26j5dgRqLD?OLgPYP4K*FVll4Tq0% z(7FLpI?1g8nA~OumQa`1!&K3!R8!jRJ0sgr$ykoKjhQG*O_MSaV|t$vO=h{vaxSUp zPW((Dy!Jw*A~?*mTm9Ds1m626&d>n$`3Vl^ZJ$pvYERU^KfPSm(c9^YU^_O8{*iwk zUxD#EsEbBUfnHsPOgcV5{o6;P`&@bkB&m(L-{I{_tm|;|XIMHAi@JI> zs_c7l#_)OQUWrOBQe3GYY*kO`ELjx{gD(X7Eg2i5iGBhflhPCzBj3mfonB^b#Ijc@ z#bfqgOG!YY47d9zGeAsj)xWLfw`u`1tL^9grix6=4}Gp9Ec@ktdhbUt#R zZO24r7U1+nU?9Sh}9a{*o%G@QA1CMD-ZXGlz(&epg_GhkA zt$V-HbL8Mk%U8d?-!{?~CP)~KKdn+j|6x(_a-C@*wnK+|v4UDL88SGrR+ES+(Y0au zm&$y^*SqlD3pg@jR@X_Ids88y}brS+iz))2tT05AOSvNlv(%BPV!K2=jB2wv@ zL^`U`k)nFT;Bpm{YGPr?D@1JAagw}H%dDzm2|kbWG(^K$`0pY9KT{Ba5RG{NZZH6H z(-BaB$>WC5m`@>?Nn`+E`T%}FAvnGy8*?l8#fdF`%u}Js`N5H9w98KGCs({Hr*^KS zt};F|737np9!uhcl$0I!xpJIpYG;58^ZTE9^xXy^Pl4yzx7 zLG2tk<6Q8&hAz$R$lfb7rtf831Joav)}?}7^0$qbb|~wkIuJPbHF{tyuXy&K_Y8mwrk&(NB zVsy#ZhTK1?LY-rQ_q)2MV(5*D0u|SV#ZTw^XOEv_b~l+_UHTaCV)kgpbByVeHQ5uw z1DzP)sHtz?wSPxuckrgl&@o^m{+Pt6at?6=x0&M^!ekr@n2jzq?+^TlfaMT+#wLF` zV)n+@ym*Rm*mVN5HtGZ4J}(?~jAXA^46_M9~iS z#Zw$1>^gbXcb>h&`DQap;pV}M9}k}F>O*guG5*H9pL(i^Q(8)SVPjG1V-suL27}n= zsg0sqKa|Dyscfr zo7IJP9q*qzbRvD_gfZRI+pr>Q&E1Q_(}YQmVWJ2oea|$hK4Mx}MTG-l5g1ft(Nlgf znpZc{dC5!VvBdn~8ca;gHPYQ5f;-Wx zq!-HD)#W>FolI-fqlR>{zjf6l?Qzrs&6bvE1EL_LHdaHW1+Gfh4B~YXc#uLrr{M*+ zD{RA(P5+{+nM!3F%jxsrD(11sdUq?(uIwZ87hf5TXaV)lQ?Hn4oIh2=IPL zOol#swLb@io2gu#jSbGjNC=I7B`!HMUp?utCNL8MxE(3e6x8Y;-}}oZ@~){b`jI0= zcvko;fr$-SQ;YD+yA-Bg0F!y zeu!`1WjFQtS~5lP9S6X#RJ_sWM5jd|oX{ z=qA=@K5_K;x97Subkq2FYT$kImb*5}xPSx&ILHtiU~=pp(!l_it9YbgGWNb^tnKoy z2iMenvR0HIf`mK1^+sFg<=;1pL58m|L9r$8wSP~&5*F;b3Y3l>?zwx0w zT~9DGyU9$s4QrumpBii1aBUBK7r~pJTe8(e^}OZ%zsG}A_?ZwYOV&-~f;A6~_$|^E z9gNBdzMx~^X7?g@4H%!BHAbZCfyBznjq%Uh`*g51`!elzpmc&loFV-&=+4L9GSAw4 zl${gxS|x!S4>RA^D6~X76y-e$SiFOtW{|9#vScgkM^?oN=+?)U` z9Tpr+ti1K@>M|&ggCfhT!^SxG{s&duXWc+B?L?)R>YnO&0?rs@g6zy)PP_r(A}Dq& z{$a$BSkh<|vn3FW8I?Iwoi#y9^3v-4HJPY031o~nNN+=}knVoIShrveJ3QTePN_EMf{X8c4cY_=jB~6q;N0(Q9Ja6Ax((xP%VYMpOI(BUIh|LnxFHeu*d$ z_AEZ+LE;sIIVOB`4N6AvYS-*S5o(h(A(Q%iM{`dkR&+sZDcrmFk~i(zOsWlZa1hlJ zt&N8Xo0rzs%a9_?=$K!<$a3;|_ZZPEEf*emmM>9w!G$bJxe8&fQ0}mYfJK~bXThm{ z=36I%{7wUA);#duC9ydu*FYwtN~nXQpRi(}a_$J)3vaCH-hDCkFzBo@7@mSaaZ|sq z$vtN|3v`AVaSYPM`2bBWZ^99Y?bh4$u9{|9Fbd6RrvEr^Bt00P+DzI_@(uI;Pm{-% zs`Zk{K3W$_Zv@dxjTy&ClKLBAi#v)XWM1i0d=WmnD6&u2-u9&6FD6rK#l#QBoxPaV zP`wXIBW%;9R9Bq<^$5I0+&Jd;S-Jq`6QMUV)!bqnpp};5Tiwvop)xKWGBe-;H$tVb zfidOX8J{OuI3S4aV&vn3Wj-vYyz9+*guVC;YLRa!?-gdkf-k%OL3;5?vh>$RZYRA~T)gcKNuOPUG$-&=I?- zu1mdNx#^t@-hXW@oz^G5oJ1=0}I^rzKM8H@ESvsLEQwZe0H&it!K5{^~HS*mTr z3{p|cBfyujJ4%wDBk*66UCZXhe}QXzV$EF7h*A=h%1qgwlZ(z~BdpV7TM;P^8arvD ze)?b!X&=xGxi+@xf=+A|6K?v z^lQRI*iuaE0n^)z%+{Sah>0I_lZZ2AW5AE3cB+humEp`_6{NZU4RWngG`pKV&D>9y z`&~j6r(Vm0+Qb#xb+*8!oyVJD360|tsR^7)zyP!0O)-?uTlr|i`-BA?MgRfH(*wjA zx6+4C@5aXHaBA%@hR-eypv-l?rRVU~Jt_D3W1Or)mY*%b4=-nFO{s0DM@h@MIrZgV z+>WB-^oTjg&Nd@grA1rH!ttslRca7ymC5o{M~>s6s@HSB04XMFMG#hiqgEblDKrub z_zbvH;MlH`nyUR=2E`6E!h>4}P=nT#y3cP29Ct9z-KbwAl6hJw=!3P9UO1|0j$@UB zdXjw79fv`LR&?<%g%;x)*4S5N8VKtIg!f1p^L+^ns z(-NyN*Ov_#W+rp{At6qx)7X#~PPPkyJaecmck68vMbX#jTTSy=$`M=|w~y8B7qPQh ze84&SF3)CI-;CU$!MQN#wSWlF$N~e=)}MuU2MEgJ-Gp!;bd#_e zI=-j{XUx#ATX)j49Aat9>*mhWvSF@*zh6iYRr{n$X>{iWU4osQF8tG)RiGxCNj!ND+;_k) zE~D6)bksQ{ACdIVW_=I4c>sff4qu<%>0?(I;bJB&(xdJP?c5f^G4WCTV?3PO`zOe$ zs}tdi)pMKsP0kS?^hxM^5x7NvTRS8u4@ThAckNu=+&l?TPl@!?@MYWb zdqk9nfzu<~TNih0M$(a(W;nKuyk+0}Nl*lDurv^BWPGZLg?x#o$vtkR_!u^&N7;xg z?GANTB(rPK03_>^8!7>mJ1=Z$3D@}OCX5*&l>k9zpvYc@U#U%I+TfQ%;Cd&&H;e|B zy?&`nT4qs0MvGYMJ`5D~4A0ZicLiem*yI&7ol@Si^98x>O6_7Raw=FV zb>S33Zl$m8X>o^l%r!&kak;cWp&q;-Qtg!2hPbmGsJ5#e_vbF0VUp4vjHcTe#UVRI zO6qHpf zFT@z)zP6mY@;6We1Voi_>!ie72#G%OxHgH+pXGV9`8LeZOtL3Vu`vQEgx&pkE>0Jl z2)aO4e6#7GblD)vODj3_nwz}T`gtr7B<*%>zBvP2UB$vWO(U^wk9E$)h5rN!L-Sw% z?Js#PSooA2u?}FQKRiJp+Y-Lz-N=-J+|EAqCY*$=Yd-FdPlTp!OSing0MT9gByk0(tRidiVV}%|bi#*(3OIXZ1 zFzW4W7q^tst+ut|N=H1wjHjS-1&w0UiSqF_;LkKJYfhv69i>lJ(c%Aso$Jb_s}7d0 z2ip`i%u|De-Lj|`N9Y4QKfq&iz225qEHEahoWn*qELD5&V5-C zn7I4SdKC(jE19GqC~@o5d1twSCJ1b%JhCBJBQdGAgXJY;Y7YSaFiGg`xni`an6`s80GfLDG)lFyb81KQc z@qh*aTgkl5D|f;Z74~?b7bI9Kfhu41F{a&VtSt-pk63OItVsI0E450|3ao;5lmwMs z4Jsl+N4%cR8U{41{R~{@Ng!c&ADgL6(x@W|1#BuQ5oWBsItQnLs5F~UbF;E^J@R^B zKFI3n6A(&VoQwe2j|2a-ip70x5EBH`htLDf1ioL*9#Q==$3A*AXYEKQFGogjXTu)?0R+D8|Wl)%kAkV&CqLk7t}V@dbNh`2dT zXq3tThjR6K7)nZO=Co}J3I8{I%#7Z=g;LoT8HusPHgIr_8rbl`8j?;R6E@T#{Sh6c%LA1n`}!!z5MsZnbulM!=h>{6i=h zoz$u0LAAmiBvoSbt;DB%8lPD!ydjChV!=ApSLe6JIx<=Py)hM z)G5OmZOkQZkrW{FWBDgmN0iklr#A+FCg#!TKLT7-Bqe zDlCDmv>q}Bx~^`IH4S%L^w-?s066cDFmeyflH*@g`qSh}9x$CRViVk6X@Sxs&m^W` zp}hNCpc)-2vX*rah9JcZnya*xv=qdnBVvL_%z>=A`cL;}8_4|^(c0`2EQc}rj4rgOiD!NyrL)^xs@qLIZp%z*~ zSvDE`+?TlDq%8&dg!uU^o-$EkF(3WeiQvOTDW{VwXYdmQ78kW|;;&)h<=b&azETl^ zKBG!5C`A|nJ`0$$`aT60IGs=j3i<}i5cU_fjGnu3mWFPcENUnWqgpzf0XVZWOQfXW zbY-q;j+mNg#P0T2V5Y~ZVMvZqre3_S)Z9XXh$3kEEHZs_RQfbh{!&!i+8=xYS$He zUVAZ%qv!8BQjpvtnjyUS-db&Wz;tn7G|K-;==rpL1wQI(nil|h#Lb0O$6pMWrs94=fm;((~) zC?pqG@CWuD@VS8=En==$M|AZ-_*jv`{p@yqt1Eh!ANsA8;lr+!XpsJxVcc{ zt7MRUEjW{Cp1&)_6&p@zLF0AQUu@!r)njHfaVTMzbOnz1o+yJuK!X4}d@uHd%UK}O zseq%?&6~~b0@L4ZAQ8CIQ_QwWK4RpVFyxc*HEO_YgYH92s;KN2`d4m&7X|0G2ruR# z8RAZSJo6(6wHXJjnSAEx({X1h>BKsj#DAnYc3;jLsxvT00K9xwF%4oG@%z=2+bU1G zbjVoS#>}~*f8++Kyuv;3RsU*>oYFRNRbxzQU;6U+ml+OR)nqG~FywA(dED+-aY4IL zMC=1Btm=v&&!!%&Rv!}$lTV~Kf;Ecn0Uh)4oWg7w)FA1nfkX4e1~3c_fW-gl#rZ@3 zBgG5~va%-=y-!8ob7k)47;}6x_K5|?&wq&D{YF@)NH3d*{>mGU$4Gce6_bJi1`R-V zfjG27?3*D33}Yo*_D1FQ%B@zJs-WpP&uiffcBOiyQscCg8hz{<=fI8k9&QdQ#y8zw;qC2;V+RSX{{^25n}ZB{ip{mK~tCdzpTpt^eP+ zAB2b0Br=Q+;ZAx1Fd5~*XZs_CbQo4)kE)_+Lu{L4u>w02fq@PAcxIGZ$R>33BK|4Q ziRhrCl4K$E=)4`D+6yXBVCQ19ZKrsr|agwwGS3BnH;5lM!UbuggGLjtEW z$)Td+R%WUM(+SEy=FZ}<0eBCn2L7A)DHxw$X7oW0!jIq~|+x)Z1}E%#VwL*VIp zs7-TvH=2u*KPe$3hKQrLd+55a7SK4y6AU$e5*zgAE8l%9>dChU2_979KL)*b1P)~~ zru`>OxN;ePodvb~zy?p)POv}9?AeAc*3uH_@vUsB;Z*lIR4^MjC_{+4Y7wT5+-F?Y z<`>;?xJ;Did`9qXAr@4*I&Q=!S z^r;%LsITlA;nMHK{GY#ph)#0v;gDE{~)K^GwUO%_}3(#^I{t?$hO z*lCA~JvfJ-A=%CHZqgG|%v`DpiGbju0iiJ+6OM(2Z85eVx?Sv63z1Bt4p?bPjiozN zL6Y5tQmkU$*WU0c_dm?ZCF8Eo=OdKf2!f}k3OP?=bucDvx`@A-Ew`z2Tjm$j1Ja?~uyu<&=DpU?#?AW{o z*+hNzfb8@uWIC&qeH=WfD}YHaR;uhni)~4vyQ6~aG0y`MHU|cN7y&r=6g5QG+S0Pq zRxte+bsRYM$%rRW<}ZTb{5t<&i5Ltw-UgDy#>s07L4DHUeVy>QIwfJ?Fu8o(pvuJ~ z8uTT{V8ApZ&-E}imvsy(LV}Q5U85%l-sB#{=6-B>sOQj0;tQ6a-hbJf1(nPX1j9Fd zzz`bxnCHhGi(ossAJIt&_DLB?=5!<^=}X40CycDud|(z|?#g_JrGC?>>)PJ6TNS(zt|~lQI^+#eMy(c~s7hJ$KS>C#2B?bJs;1FUa|? zYZ=MM;gEb>!nF9Wi_rWKMPkg+t(6D$ib>(PVOyUMgP2HsWWgcw@f^(7G{!ND;Cug> zWFT2@YwYG|M!&%Qs{|pVU3YD{8O&g#ZGNd9grsy`zEZCy!jrWVgq!jfg@Z1>0!}ZhO^=zLCHi-3X0k&6e$nsqB zj=q=Zg9eq{Zq*2#LIt{^QLA}@B9rF{4>?1&!NI7dt_+BA=>fPJU5XZqdC2@!Ua?Xp zPQir6Pf8_5uIu%n1jltl1A}$Ej=&+WjyrCv$x8)IEy2&->5d=^9CAxa{b@!@JR3{O zGkGaG($20x^r_7lxyAT?amVm3h-I=}nuF{K=++*9T0rgzf4(T2Re=fXHa}j{^ACWU zS7i&ApQG_y(FrLZ7TFUZGD|(-V`Dfmr!49;;4+n5AkWs9qw(0K?1`l=*_(*dCnYai z$v~Q_XqO%5h=|;$D7fvibl1-5kA9>r?Mf|)-uISI=Sd##SL02Zs(qk}MYSLU*zadd zh#jkF*o}E0w#!6Nn^y-|PTYt?`2QeYASd*eZM)60nL`4>@TPH^beg!Vy|(4fVrZ_! z{I$!bzhSWc7WTtfl>*f?kQw3S2D-Z^w`f8GR?o}Uap zqQio2m4wO8E0;c?{Zp$nLBN(j$4ktr!4)oR5f#GGmz>W6pU&V{`Q+eqOw0ggkK7I# z#wZyDXLI|!`0Jz?bnvg(HGcEs&pW;K?sx+J%%%&J{IT|(<%B#9H!ELq-@3M{U$3QP z&JIphK=^H(t4DmjRO#SDLObOzU#QIFP{VXx0*~30t|$^~-Tsw0ha~#>&M_-q`O+UX zGY=H#M<(&-fqxZ?0q7Hw*m}3(cl7p6-Q>BiNgaNvLEOK^7{*s|gKYIl!=TUy_DiQ{ zXqz&z`=b9(YY>|-W8p>BjivDr#ds<{hbRzu+Niya9uVVw9c~@1gaRND++d(1$jA+i zq0qP$es1Mhy(X0Hv^M*{kFOfY#;pyu5&ZGj7!Y<<*qL%2!Q>v908 z{}@~T_BZ&tD4H-n+#V{e^BCVJoBBFH3IZ?*hJO3`>v41G;kk!%z&MfC!#IJ=+_-VN znmeOcf;xczsW)zzrSO_L4k@#?UN>lM>2QQD)!goO_E6HVCtSy%kkKhGhRWO8R={q^ z&UN`9nbzE-&CDa69pVme3ht{#WfFooxh{C`bzn$IO2fLKMNqGe*}gKR{PNOtd5{93&l?XtHc&_))?B6&iY-!;7^QL$nJC+AsZqKSGJ zQKw+^59L8x#?QYyiFzvCY}u-6#|o!~)o`_vCFfvz2kAPj)zx~H!R*Wc(?J(b9(Ha& z3B&uaua?YYfj7G`FFzDI<0Pv2L{5Dp#Y96kJ}G^QNmBr>{;YpMK$t0|?)e@a&l1hG zakFdAAAlKKmm-x%T`kgHzAEn;WP@T)Q4|iRBwPZ zUHm~H(fo!9BfQ7PtR}XUgF)np^~c@~>QN$>@|q zLhnfVv@_no%(mXW_|Nt#uK?vcp0K><+ z%y!9DlePn2@+GnnLGZwpeqfSQI+CRY=X^MJP` z5wxxU>lfcdz}9H3F+$>}zCm>D)SkmrnbJ%aM)apGW{)toH`TV5- znptm;lb{#c!0&ijXi)yYHI-WgJI{Npg2q>1Iy(Pk?@XloIfgK~%Lu-V7>PkY$wXOk zI}P`lf+P$HEmbZxb}@GZX#o#`48{^o0+xTwXI!AM^jM=tq8q-+PRyJL!p@@7UOuW^ zd$w#NIq~7!cbYf{1X3RpeiOUQPt2?}aLrtdipvjq0dt`i%U}Hh9S_SCtr4bd*Zp6K z!*_KGoarHn;T^9M7p2}V21&W12W~vhs%~pO)=9i0TtC(MT`5R*_)ztc$1wriHnQ>g zH8CBqRZo#)+)gY$ix&Od7gxV$XVHEIb{<_i#aHEz5oT>q*|}6}!@?}$^(#E|Oik)F z3nwVF;-Y_Se9)3VkP{y|Tc4ryDEGcAgD3SMO3ojBMcQ4fLA&IaDKC)0PeWM!dhJ z7_rW#OH3SFn7bP)8#HHhL$}Oe%`LN z)h?|w=L*kxtkcGvkmLvS5!{j`qmE7;1xOB4RlX~%&4l1I$0)YTOY4e8q~vLa?JGFS z^6ZuMun7vM9F@(dNd%YbZk!(Psu$g$%7^EX@_!=j4HaKI-8!GSkkA~ub|)hEL?jp= zWD)Jqs{KdIm_v6;XvHd@SoeAu0}4?YzG3k0ke?QvU_c-BMB-OcFyw$j=tXqlj^|b_ zj2f5tUTq^e^*3PB9<4PftFEZ8l9ac}6}>Bx{xwxVa->jlxES1D_x#mIEt$d;=n-FwmDtUXynl^le}+30illa~_W~LrIWB`=O8kc)n`Iq`cIj__sN` zQ9WJUJHG8NX)iH9^km2PpSyS8{uKT@RY3TI8}P>!W;vC^oxq==3;?MU6i82Z6?gAc zoVubbmpmUfXli!1x5gM#wB!zMyuxfJ1wjSVz8Fn>lLsYUPNx+IPa54i*fn!i*2Cek z-fU!Hcz6_`lh0>+sgnM5p%qW}fq;9KMSc?53wF%=eFbL~UmhH}Aq|ZnUyM+sKT#Zr zdu)jTc~UrlpC*rXsN}l1cJKN-p%oSM$F?hHw>4LFx+PWBxK-7v=pSBNv#Je@yqUt1 z{^4uRZd55~-c7oEGCLW6DS>E;ZuUn0lY1k)&~*QfaMjldSe#pVvlvH)XEw3ZtGpgr zm*k~axkmO*$D@e6=g-~-c9w)&q;#u{enmF)%QY)_6UOZv8P?DV^EdtEI`lgD?b57K@C@8{Om)TLOb;<1^4G_M-@-f_T+Eihi6P5U6y(4HCrIbpmb2s{e4jPeflV>iIzK^?CKNSu2n-S#y} zMw@u+Um!|xd;Q$`d&uTK@bUxvKiQD$Om94ozdYNgU&5~8|34ej$idvj*x~<9)Xh#* zklUa~7}df%$k=8^&08o1wI z@BaAuaXrz|S~A8JQ5Q)L&~-ihK5;FM*OF=$l(1RGT+V=mYh5071a)0$xzc~c@qd#Q zBW~%3I413n0ca!kqb&m?RPSS7O3UQIN&%Pl(h>jZ%%9JoCpsJ%_8X;niSZgO)3h95 zWe#&CIuXLw1y$8xO-H+r7M3CP<|aV$`_UB3!?quW#_+i#rV@b$8L@5X!-uDgx=3{u zwUl@;=7<7XCqrn1UU_Q~2>zlpVe^c5sE4PplNKC0C+t5b6YW=8lbhkx-T>1@B5^OZ)X|`qk3x-4X%xbnTl6 zqb;!*edujMU`^Z{bSRXEpv6?A>>z!~WS`+N->v;k6<*dDZSeN)N2D|uG#ec$ zy>|++nesU#gHXQ~vUgpx`M!b2)4Ryhs(IVXFIqtrKC~a3nM^Bk%^u9DH$05|AWKq5 zU^}^Sp*ZjN7TSE~EM8tz3eU1BoTbIv5qH(SSMxsyvYk4pwHOirz?>2QK==QDAPsG8 zOw3K4e?if<|0|yKNaGjp%#QS(quU487Ol;0Zr=j#)R5|gDrO$d>9V5u9fild!}r1BEkfjigBw`fxwVBsBix)}~YK>XO6b-7b`abn?QW8U^xq zjw3nh)xL4}zgRn`?%bMi!N&HEZQI;Qc5K^r^2WAp+qP}nwr#7wzC2^}MPHnY`Uh)_ zdREn}In~1RsL?|ifkxY;=)(yVsi0%q4p@(V4HD)k$3h3invI<;K#7goWYP8`-dO*; zCx1X02Vve-Hihz;22)_vo)Zs2t;zRlk$n1$goh)|{X@GP|Cj`=~CCDh3|*2M!&f3H{QodKqdAUQG&xDOW;bSQN)Y zTvVT+jRefdo~+4G2K<9+E042(B?*>}N(0gyK^>t-_Icovri2nkXwfT5sEcw`ILx@( z4L84g)?=Z&AO;*`)$q6o^n zN5biG%z5z#;swp~vveZXhAeoL3m{>`NgLe3LO^Es(1n(bLOB3@k=W%Co^#DMMB}yv z-&-qDXTn(qUDRR1oxAK%D3NDwmKlOwkNNixkVpP-)9k87Kx;fwF)^CYm_7(U$`p>d zEvUUVi!o{?a8LKXfx38A)iR#d;Ds*x8cov$+rO*|pdCnfv6}1bY0=xObVz=LBLJ0C z{}v5|TAn??VK|B6oDG)Okql@35(A{KN7n<3Ra5X^-Hz^!f5O{eE~42_GBT;LahdUI z8V37K{5ON)(B?W<2u%!*bfz@=v22xk!gfLOT5U|{XT4^%(N`(-VxYOpGr>97Iiw^g z_VhNCfru9(P$>m=DHD89Q8EpdKrw#g01@g$wc~2qzA{#oi0T!XNhjTO4z~8>giZgk zmb&G*w=1mnq_t_J&q09KIS`CYqEIx{6*^ca#4@y--o0~KG#JN$jYdi%(ml13o?5A! z6n1Kh%#Dt!ksSM5)q{v+#=oFZM zt%ws=h1vl(Ss}y;!c~Ds)}4ty`ss299r{9L!Y-#UL7Ubz81T~p#;Uzl^!&{t!5dGi z25!nc3y&Fvw~~a3xm_w>36B?yT#KN1zLsFrjzHGTn9k~6;+`rNbOah6}1ZF`It$4wt`H^^K~g> ztE|##Rb=)XTFaLc>}@X2h+1Bh2GQbleW@&)4n+P{i}f<1r^d|AM75$ZmvOz~3z3Y1 zI-h}3J2RpfD_11$M!vY1)z8mAKY7*UXkhb~1X*6PhU)2%K#Dzk(oY+m-GznSYKQ0L zY%e<+jmVZqZkkMXhB|BCKRTc}p%Yi?q!NqNTc|w6HEn7fW`uy&b!~zS{+i}Y5D;3` zBr*3RrhXAZ=k*LwuombIx_Dwga4|tFlxSuN+QLa{U4I-%(wIJ6NzyxO^~?bBN#pJq zk;r^iBtR6b?GJ>obGi;%MZRAG@{6DXI?Jj9ZF+vr+5#(%>{rXnxV%!McDJDVRSejVN;Rg5$j8vOC^>WvH9Ey&dqUY1z}~`V({JH5xW6cjHZy<5fMMQ~12< zU}n~A2}Ydb>qKdWeH=9;1uO)sZLk3%^Yz);mP=@D_r8;tI}?=#(2h34Y7Z|=+mfw2 zVxBiFWn8FPX()?%9{4M;h|t!8(3dJs-RR&EU1S-BKF5@dsq%Yj+J8TsvAon^;0bmq z0#DL60KXdXzBy0Sk_j-cV+AZ3T+fpM)s1Y+7n)!*ftf4EONT3u!PONwO?dNVyv^#} zzy!0Zl_-%NjYFwTqV81CfZtoOl;}MKY;*y*t=bPfmr5MyEzc#7*TA|@q z5o@s10=>BGL$1Nb{Aj8kmpb)f&}GVhcW>2#*jnIS&7B{I^Y1L^FY;Q#V5R{zT z-JqVWHQ_j5Q4m=xf;TxkmgPC7T!SKlw3s4K*pib#N$8bYD>&sbK$N^1z`}I0I)KU} zz8UrlS0W|OUmMK)c|RpC^?k|tefVk@d*62a2+)Jx9yYXzc?MRo%wF=m;#44A>kF6z zQD)XjiEQE89ODiM6(S-RseGbvl|`wmFJ$;K?J~RD>Gtvrq2nUNiPN$`jv1GF_-W>A zq*2SoO=REM@Ww20aEat*uL%g*4D{7kjG8Jar!sCnSgwtm4p&v)NHoH&Mb zc3A%k1=L$yTK;`GWYiFOb#~zX^j)7sgX9g$#KZW@ePgcv$jYh;^FGj9+XxFBdv*() z=49&o7LQ!UQ^ErksM_%hk>KC)*M2Jiz`^##9q4W;5b8<`CTi5p#NF4Swv{`03LGt899V{g%(%jR)`DP0+{4 zS6YssOKQ}^MD6=4+=f?Zb zkovJ9S)(V>1cPu|TaK?Y7L!W)kfzDGel7eTSKM)<&c~}FXSHTFzUq3u6$|fISDrcL zOS2SkRnIJm7aBsj(iE7>kN4(hFH`uB){=_Cgt$|I=ze{OUQ-Fdo|jh_9B2+y=R{JM zt5_}C^!VpnH)oH#w46CyLl@VcmzBN0%Y~Nw{5CW_8i_j>*Zw_w`1oGsp)!ogVPSyu z9O}cdzwhT1M){#t$@D>uf+0P>iof3!x*r%^)Oa*IEmV7pj91sgkG_LWfogQ8lC}yE zqnVE2s7cf*6>2F9vqMf*@R(!d)goOx4a6~=obO7A?R2<5djE5L6uHO-iXi|3y7U49 za{S*PAO9b<5C@b0W=cmV2WO-IkCAeU*Vl1zEWwu{*YGZwBGVxY4FA?;5OhWYSKLN? zjg;0Jn9SJ9x-yQemXzZD`eD1a(@Zo2E7}^et@2ToE{1J!k?*_HQ}ow|DR<^}d(+)5 zmd{vCX@=gHCmLpEfVSfVOY4Z&%r0ie(>e}pFzwKlU6-_wSn>}$%mL@_XgZK_(ru`M zY~W6@#vA#e`wkEHna*9;Sb;+S;2`H1u&!Op)NhnGfk6Kfo_Z#FDy-Nz=d>ws|E!qO zUs(13GJveWl#vSYrf@lpt5TRdffgXwlx8GgGx`H(QZoUhLmHNfGcb8kCw2cF@IFSa zepew?v* zM~g-(_{quFk($_NNc-7*u}?(edxjbV!3z01jiV2MYeWLYC#_6x<=zb-hW7MTY+I;U z(<|cL!$hfTpQ^`VQmfzJL^HIE@RviprGoAB?qQ4FemlqZhaLg((+fuFJH7mC0 zuM=o_9~ZQz>&{?SiC|z7jDpDKN$TUzil(djC;EN;#1TR{?M!IQdx*nn*e#)GmzJ=z zfwXCCj6vxH;}H+H&(f=XwZ&5<0ew7Cksj8yWUa2NhJo(VLUunr1RH2n69k~ zdNz~Ge5F2RKTZYqaBBpPd1yWqC8DUVvFd>T>T8{($-p08E zZv>mW1!z-$8sIU_y3~!KIZyT%#!F>qp&e+(V2#D#!%Lg@^{`?Ep|BNrLbsstqROMuqoz&nAI@I6o?6K z=Rt4HGqD>CJcyS{1PzCjll>FJU3YyM5PE%K`Pn`3m-WM0;KtuzW^)J6LFag4t(f!6 zf*>6tVDZ!%VoiWZE=gYu!oa`&tcqW)k{wI?oC{>~*I$KyH4`(D&mj1BJ zV16KXZ80QpgT7%j3Hmo0BY^^kBB2Dzqp)3uT+Us<1Jjk%A?aDG{G=X8 zd=M{!`}6hW2vXki~hlZYM_||a!dnFD#C2#vza6~(rv~6Ys>%Z7#|=nOvFfn zEoM&7c2|L#{N-%*}fZti*B7swZ=@hfWfP#=u>@NhBq&DV9M zv)7lY4Ojc?FXzLqHe8I{j;ngCJEA~GOKz+?Q^w0-8~o$TYb>N%XzkbF<6>*=>b5|l>hX38y1yJBR6$zB z3hGATpJ>K`TBQAP=cHn2kTMYE2qvMwF@!8Op5K9!9N(2{x^y{9=PTJg=qy&{(?ZlT zT?V106gpGdg9hhop>gnc1)-pnlsMpJqiGjln14qtkWl`>Ig%7(qz#B%u`4$jc9oJM zMYRWck=1OEC5E&3#Pv@QZXh1-PHb?h2c_w4LeDF>#R9)wng~O-3 zMJ8a?{T=vX_^=c2?9+$;YTb+da{Z2MOl(Yzj{gnG+9{_FzkI@8|sf$4@`2t?^Y+HZQ^Zv`fY(`xk4i7RkW+*l}4Tat{NSajhU z@j1bO5F|dv8bsnK*T>F--WlWsxCFFe^Cr9aYlqS<51%_NBf%=1pTPpaCQ8HZdYYb7RvEg*ZQZT6r&0`u#_>vDChU09(tW>B1Yy= zEqSDw3+VZTp0aMPlD@^%lGRLZsm!Zi6_j*It})cn0Eltho>*NqzR&o^@EE6EO5G@ARWN zR0PT%EnO4xeYXh1%U1P4x(es!zahepsmt+C(fHb|nt>e|A?W>cc||G?N;JZK`t>iw1sRjn%*1-(J{9KTs`9tU$U7 z&m%gfqI%i~W__Ce6!&*$N{$vnIRcoH+NT%oO94tX!P^S^_ zQrmiKTD(;_XQkvp!{2v`+IMQB{#MXgrVH56@OwG1Wr6QmrX>nk!3P2pRLSJ2P+Mkf zX`xSpKq>X!72mA)yd}r^U}zbH{|$){PE^!jQdTiPMT1c<9I0V2r^kY;u&nRa#UsUw z5p?UchWMeVl?9{PYkyD()^xckP?^^{c#|Ghwd6U~>ymT!-!OSq$Y@HJwXbk_2>h#x zX&k7B)9l2sC|$~&`rJcV`O?-?iB_-YkhZ%L*WjUtv`%s2_>y(KqMTeMbyk~#qNLbV zPf2^6J0nxszp7%|oL&jED}l#G;`z|wdk^{Pd^@^zf<^GSU*FZFJ`Lk4+<9 z4j9J?!_U{J@S7t0&Il^uH+9-~n0Eku9YPNm#^;?ZV-lO!H~?DpPTWp{taxxVO`%OL zKA(f8kP}t3Ul?N+;&Ia*H~Nkg4|q6=qx6GH&7|EKNufa@GWa`ml%R_>l3W2qbd$(O z{WT&%#3=3vm2fj>ka~I~i#FS!E1S6J9~Ko59f_NJT;t1VP=7B$qU`03qWrjXWh4M8 zNOUQJyaDY_!c%Ly*{FMA2SI&jQcp(u;0gMq9v4(z+j zj>V+%Kt5njU}Gfy>_48ENZU%)66YM|qGB{tOUH&w3=RU@JE)p7$!Qwm$Iq|U;y>iM zr&G++VOVpllp{WB;W@wReW9FX+zy%1D4x;Sf*6nU%F{1e(EiF*FSMT!j5*4%0seC! z(p(iBq~KK;Qr@6+A6i(ku{~gerN3WHxuf3L9ZdB2;^P08i$<-ic& za(tLJS^0CxfnF!ZZL1des&;gTAUlh=HHH;b^Y7~QXL!HzN90paE{E4=fvD_mv40$k z)BL#*)XY`FTMAwi&GXQ&g&egdFZi(S4*E8u&Ar(s;YTz;ht4DCptLj`Rb>atrQZ&A z7TvVUGcIm-*DL*!5Jx6Z`Xv z(-TE!k+KM!So`(L7?43Uf7HLd`zZWX_kcLR6u`X8Y6Q5 zp{X93S`h92Cjtga?`*U{ZJ{5dNVpdNwcW>r`l$8GMB^SuI>#}h2-XnVJHiX36Xvg} zvTR<{3|3HL@^$gV;FSa{@P9+BIheAXwVF}%cH=D(9oi=?h$#;-B%H}P99^QL1F|n` zGA*a;*CRe_>s6ZJtRXB8^oLTOD?<;!fM!)1q#@DI&}}XmWT1LJ{%)7U)GSgi5e*0_ z|KVi^mT(0=F-pNU3p^f{>At38s17gqLw}3V7boHdl1%N@9xLA58YH{|sO0E4S}C&) zPlMDm%4xz|uHIydeLT-w(F=NpJGg2&zd}gD?+u?l$Ui0hav;8mB^`2h6Y-0ZVK7P0El(|f!dpLECareb?IzhO0viQurpx+C{62cyV2l^>xae4x zxE$`l>UaJ}nJqRI0O|46Gq=$-0Lc;MTL`;7u<(;5O39xHN@ShpNWt+o_ z*p?(8(d2P5Vm-o%mBX^Iw~Z)WOY0JMq>I)eIx)~N$T>;8g~P+=(gc&HQihF8q<6@! zD2~q;Qpj=BWolm5P0+R_k5(I#pu07cc02 zOtM4cdrY3l#_=M_9}&3lw~HlXPJ;e1e8SI;kDEq({6oC1p&q{ka z-MWB`Et41V;Uy4Ygk$@hV!%@g1!0V4Vbcjk>17V?Ch;&Zj96!K8L!ZW_}JrwsI&DG5^nMkwhA zHZ`>310D%IFD?Que5n*D&XHhYY}_XT|x$u*_XF7AQG_r@7uncd^8WRna-ov$yvn>@f2qjhzRB?O9jM>SQ@ED zb&`x`sQaN^XP=-CV=p+RiLr_Q?rO|Gbfrj1-1)h?W9Y8(xW_kMfjEhX0sX4@rt;x^ z8I8|xvuS7PO)^#rCIdYOFAgXcZX2XLlB?=C*gDs=tT$1fy#LJ1Oi#Q5eC%g39-mXNAtZY$us{B^hb&)@?aYn`;^#;M9n^3f#^3?25foPhR=`~4 zK2nzT5a>z~>+1pwaZ3mkrl^JdjkU=C4uD#hxD#I+uw1v^gDM z8lv1Ez#Ae=KkFEqHhQD|f1z_&tByHc3N!w2Vm*>^7si-0 zoUHY2sZ9zf2P+Fd*`A4q?c{VaOR@Um3~m3H%{WH0PHbwx^Bg_C)XxH|Fj$lNEeXbz zV4tuChT+UD)gY=Ft$Y<@C-HOpAt26U5hhzU^qN73cH8w5KE`?)MdBcj#F{OLZ%Fb8 zrkD7(43L_wQp0d-)?Z%Y^dz%Ldd261xLh9mwTtw9X?qK{<7X$OobV2}^+a=!*>PRY zf(Z9vbJIJB^k=8rQAoSpxdD$I(P{bgsr@}`+u&>#Ie0;*jjJBQfSVgXU)~$|?e_Hu zIJn5o(n;pW&wbJR_+DImbp5Mu#1>N4O!rYyNorw*7VSh^M68&0moTD*XaTm;^BN~E zm+KyOd!p3(ZDK<;fU|#Y`0tqqt*?l8l#?Y-k$ugJ_S65Vqe{5CWG;_oZ+O@9xdtrz z24nsYG23w~HL71-xv#sM!@ykUvFv5!O#A3b|C!XL=QEPt?7mBL?AWql2RsY5%X4*` z&H`$V5-rV zwLkeNpeTmCO&FLgOs0s6z@_`PvT?_LKdNG))Dwh(1-WDZQiDf2SefO9f%9>j*=1 z*Kf2YYI%DtxWYIzSS#{5ZwndKGzOT!CRORZJ}B^4UJqJ`ll(Ik-qh@a_cd?w!04PB zjzF!BwT^$oygs#E6kvqQBcDrisOTcJED90_9?SYD@~5;*)Oa!u+S0pSbg+0wUMV>9 zK?VH~)%pRVcB*aiT`Z8iQ#)`t5`Koq)~QZBQ=B3S8)o~}Cm@#7?kWB5TY5AaVOCD= z{_J7>-Qd?jAn*=MF|+5psar-X%+mZK+wC;xgARbDudBGfC^QuLr3 zw^*WdLLe2vP?3HcE&85FeUBL18<<80P?c>n@LT!_+p<3w^XZkG7`kWi_xITA;n~q@ z7`UodUkuh7wug(GU@L~Rn>yZxYj-qM7ZI^ts3p6#b;x;Om3KA}dNeWwU!CEwwhs{O?|WU>Z@a2gx~IJXycv5}p!B;;aZsp9ayUHgrpS zI&=@4$Ac4oeLPG>X)MU9SKC>dVqQ&HvAd&1XQz&I={!toj#_CWkzh}wEEOI%e{31A zdK)kZu~!da=BcR1;2LNFR-U9>$iT*5B)&ceZxv(#5b{!%-qUu6syadhf}T2{KiUvz zyOlrI^IQ#zETGg9WsS;5)&opFx3EhogYisVrL?YW^0Q6$=vwH*h+_ZQ?9P(VM*wSU zZ-&{mNVR#Iqf03D^pdNh+to%cFLT2*F&Q^^~2ewO`ms}WyEdLLzi z2K$f11vtVgXWOaMUxZ}j7om;7>Y)qBzAw~E!LI=sJ1?K&s#isIHki^7b$k&5ch)#T z@7A3&ush~Y{zaU-!)9!sl+To>NmMIEuYwjJAE)CMA2qX(G#?9;crTYnSKx%r{|NR8 zTF9=5$FiI3-3m>YMn})q4ofZ2H0D)waGN?jCV;>VXHkchsd;N4ZGd>S+i;}l#+d?t zQ8P1Kf|0~D!g}RgL)t131WO#rEFJi{bF)o*z;=%c1LO2m&#SEXoYH znRlkqCfPoF;ck$wJq3)Al@k4TG>R>{BEel`m(aFHoQN1D0vPQ)4**Z_Ab=rH%ty#Kh&1 zGq%FckOdxM(_!)^GcXM~p?GMiV?zF5An-7k1yQk(?m9U!{s+5sWxION!u-O`VkmU6 z(JRx=hh7yoxh>5KH^cOJt4;;&iV4D?ysZQ7WVV$*Zja>U zA3g2e;$#0Z`mkx2Pt-dgc1LQ4t}7+zrHJ6;>Er>L~NL=Z)1aiB1K$U063seTj(U)bgYu5H3jhtyG-aLFk zWFKCfyl8We-nJrQNYrh(y~XwTpWn2g}~_Rux}F2yE6PwfL54Iw8jVXaO+jb_|} zKq*wiDbWpJ0k`fn&O z>b8{2Jy<}Pc~{?aU&5rbAlLXgT0{_}%f!Eg((+x9V45c&MmrW4si;bYpC!#7lW;Ao z49h;qESYDX5@=1`zBRftBTj+lpg0WQkZE$bwe@m;$n(S%_bXhrTxJWi+r@~zjwq94 z6dUY9+wLwpQ94HaEgTZp;dk7+{Z;o1yQl>FRM=Vns2Pi2JL{)nTV<{)&&ib^SRB=L&zqM0Ehv?8AGJ z2XDiL&A>@t2;xc_^VCnZkYs4v|$mi2t(U&~uJ==M0p(a~YpI-X0^m;KK1Tx&!H8#Z#)# zR)_;ZaHqw8P4yomj#=#*E`YH^2V@&h{RZXG_dYtx(m z%WpDi5QN3cze7X>0|jj~kRwxEJITGM|Wbq$6Ko2kns3=1Nfue5g zTKwPT>;?-24EFpVmJNmq1O&9ickQsrneh9Fs-CNqz?(qJH8biqI?h>-*U8@E_|rzp zHf~OZ+>j<;6jDTMWv1AC3%CU!y2v?v1N#w@DJC3V?Ub1s1%P2k|NJYQ@B4W&WX0rj zt81^n7qAXfJLH58E#OD+2*-e^KMRc)hfvi1I>lj#AHa$6;z|-c*gGX>?N{ZG&Dy~@ z)r=S~L;gJx8V=|$U(g}ty~XyD7m?H*c&c5<*}#LUVjC_inOOCQ2{6k zSEzl4+DFg1clwfh)#7l?E0X}Y;_92~VvfdK^LmYu20Z=FU>N2Ok(l)50+IeOV9i~& zirFomU|*=f8Eq&8=X&JRU(7?>G@=P`J7 zysiZ^RT^X(bR7|J$WxxZ|1OX7UwkG*=(nX!n8Q})UTPowHzrT88!E0KGvyy;oLDxC zs%MIX=;KScCw4Wk8^W2os+%=NS%Prl82MHt48dq0W~K{-8Gy>lRy659%|emDC>#P` zH$up?x@Kz@DsrJhYT$)kZz&TvKPLc1VirdCW++7O_Tuw3s1V!Z;Zrdi|D|T3O z`yA$WH#((+_UCQ zzmk{%j_RwcCm$N3YoHg;td}_Fml1v1O>49A=}c&LB)vFuxt17=|I-6=9_WDzoGtZY zBFLZS9bwEI6OaVhIiDxyAtOam^fl_oR z)_aSF*k*-=rY6Uab=u3PDROp3z?eEE8zTiL!W@joLMot&CVOZaU_y-h(cBsRXffiW zd*w({9LPNxd)sGI`Sw9xeiPzWqCXkC9)lkWSH!%ne_&7QVzzy$@M-B$DEjQ%Jtch_ z0_KBha}4-xa?l^0X{j|#Dpxq~Ytk_bfxkyod>8!aI-DBkpy`n{{ffe=?dcQ_sJ zWbk$BdcYp{pZ2OzAUvAtrF-As?GE(`?V6GHjdBWg%=pVCy_uMl+wd%l$GHYecCtN?1!ns{PW{ zRJU;esJwi{I^w-{wh=~msD*v^{e1Ugd(vyRX(0>yc6hs=#Pc*AFN3ybN2F_t;T{_B zH*zuxFUpCxiQD9iI|I-`!l3kVryI$@(c#9pT4TrEv7F&^HX4wUd5_{bkb??#rW*>b z^_*?jFxXYe%ya} z2_#|wsJ<$$hc>Ak3jry)-=_^af?_Q+k zoK#yg^ZH6JRs5tS)}ik=F|KVHM}v54{CjT*K9#|$Ebt7`*RN=?Hw1c4PY6qicR}E` zsGKWP=~D?0;3CSaX6JmAFi=sChdcEw{UmdeU+lyg=wbxe0vY)4@JTbTGRGmm=_}|s z89)TSgC45H+=8YepRGgt1y`8TAG%=IF`xbywAQ3RiY91n!RPbnSoU~2T0gull_TJ{ z;wxO?pYn0rK*h*U17aB2=Dbf}65U0CSFd$5yPHCcCYCxd7CnZ)>hFu9a$^5xF)v04=7TGYMTW4p&8P0p4U|Yksn8# zosoN?PhEv%uKI_Ie%=g30Dl?x!q8v~-k4f!^JVIvqaj+d3QM9^UJjxrxp9zABzE(> z&-ycc8wEk4iR;v+iv3u|t6Z7pomNhb*s0B#|4)uit-NkFcosuhF;XfO#?t*h9Y#!> zvmik83$YAfjltVYUoc=s{}l*hY5$f1W2xaK6a0rBS5Yujtt?NK-cxz59wkc%thYm6 z5Q%!oWnVGB^5kM-kjCde2F9rKPS0h3guY9OhLySub2td*w*Af@#?l5`aX;`|WLUEV zZBj~|LSd_!kMk%`XONRlonj$IxI65;kv=RVZXslC7UjY%Q&^T^UjxL5+cJVsPuFwi z_1LjAqD>&%RKFO(EuxIw#)jQS3$}#GT8S~<#x_li6hVWW&#{Tp+{eMi!(F+#8g6s9 zr-6+r-3Moa-x!rz*k3cRqzw!`xq1a%(44=9)xM-`C`EZm9|4v+93En0NAlnO%L|WGfW&I!5H<{+E$i4ksQjEC2ss=4tgY}mnu-krYCda z?O!w=Y!EzriJd)+tu)vayDXs%Ais%II=@5X>SKZEFzPDY=3}ncM$<307Lrib(IOSE z)dgg}YNl$&vXY8GH0~F!Bh)R$3VWrkvA~;ijc4{^9ha@%KW>DQjVSxSbYm%vut7ET zWQAz5Q{f8X_FH242&8;8-(KV`2_h^T*tsIcra*=jL-^?*)1EEgHpq6@?DJf~E1ekq zBKFj}fRfI#%2`R>~tQt1`C3BuPn!Ls^1b6IkR~>pYG-A z9vRR|<>T{~Jr&+Pl@%r_S{RVEGm@!W{G*CBvIRWn7h8K%4)$x6Dgkx4mAaC^w`u~0 zNO75n$-PEx)-W=%k5v+GRuf6^{_;r^-+_9$s zE74H4M^y#GTirBQCl_bkfeuGDU&27faX-i5yg_bLG8-F?Cn-(xg!htsYd&VC_``k5 zC=?2yPhH56Hh)*XJS443`T#~?LfE5VFeCrArRAfgogE9lO$)ni4MPC0itf!1?C>$v z&ooM67nP`)2C!lzywFE+(HSL;2cx>IA>)h+G$a|<^;h?@vasA`;>s7dM9rwi|bJ0c&1di>xR;=;Ab3Tt6jm6=+ zK({6SB$h>=(}BikzoGOlj65b3tJ9BBb4KudO6Fqa63E@gDC|yinQ0-kMg>KAP9?jn zxP_WSB zd;q*bK|iuYOSt8*mwxrly$(WCv8zDtyb{+&`hNhJA?qbDy~ABkfOz^X|KWNlWSLWB zj?oNp#S4YGs#}wYCK*bwl~4TsJo+jM(5Ye#M^4o)yM00ZCMa@uz#!xK9XwEgFP@N3 zjiE4Zj>Q{b#&h7#1~#cg$$Nqa;iHi(>B8q}e;nkY( z=)7M)i?;aXR|%kjh4?6eZk~E>0D%bN=N$ddszsZwZH00ny(}(9&{tlPz8B7vjl)ft zoo>PIXZ-f!KzlfKN$2q`+aY)}NK#Wi(I=GMWv>F{r*ISZI+QQNWm2Dpr6Vo5;&-;7#GIfnFxrlC^h zL@ZGe#3{>fHb+e+M~|Y4-7g_cEE4rd?S;Ix^m*q#2dv9>Jg^rFHpAodNx9-x4b~|7 zadRs<$NlIO9yc$&DnYtqqP{0Fi93MtVhdVj7r3_kKA_1W0WmmaLZmNNa@a8fiEn#q z_jo$FYEZTH?x%_evYE|h{dzyR3cU47y>y>U39wwwMisL_+=Y8okJkmHXP~B) z6Wr*ROcW~Z5=nA(I_odsrOtkaP7o$T@ zJGM5wu4v++jm!kvj76mR?|EMyu_#B{DXwUj!sE-C&9-EgQ^*3Y>p|7&dc9d$N=a*F z6REd!!Z^h|A&=x&7#b!G;LFX_yI@Z++qkc?2o{uPDRWkuKC1eaMaL7a3yA!s6kWHn ze~K{Uln`Tp~mBvf?I{UMdb{FY@w=c{Yu? zVuV&0x!`!$>wT((-4W)D2+UM&Y4ZDrH>caLz-Cn-jlN!EORsRw zupFUL`9OeSD+LX%|D#N3#y5bt5TY47R`f2+ED9AUSuVoN$(S^7>V)EXxv?M}-Jl)9 zG9OzwgI?MKsw~DYgCAU5`>)aFpb;*ndlL~73mI|2iyBSOETv$geN=i4=pJ=SjR}Y; z2X0|D_@{PIVgUz3T7T8v0m*jvO2SD!BwY4B<>gjAJbA+4U5F~RIEQBQQConrwO=i= zXSl17y$aAo{uCUV!X=*ho|E^Hryg~Sz6-6%Q^6M(rie6hgrIKY+7TKk#{6QqQbJGt z%YDnTrqQwL;7{>0Rd2MllU?c`cM_?t&32*2OYhzG5!Ok`;SHl4S8-QIr7VLg*Mt2L zE}IA`iUV!kf=rB}B$~6q%Bjtb)HIW0LEvN^BQJgAFL^2-A;(ay|K0 zmiC|()$gd4T931%w>_El5XY5MAOo}4?bid+XLfmX4X|Q7j0Z-;Xl{rDp%DlRyBESH z$sx}D2i_s7W&cdB6X6eJVx^|bD^l&;fGffhXPUuHW3w$bOF`u zgyd>P5C;l;x9=iLzxB}BdBlnu&$)_cHDF)g2GJ-5IJeh9#K)K|t!&J`-YU<$xuSin ztP{K;j?&FVm9eWgGlaob)uaawvsx)*UcQ%*`Mh?sYs!77RBc9;kA1ea4P${$rQ2xE z%S`&VAif@sPSul-2(M7a+cbnjGEY=DY1J;;^EVS6)EDn6;!E>eQ*PEzg*lQu2KMv) z<0+!L;u(sD%Q5sJx3sOnp+T%+Yj+U`l>Hjaca>^xuX8TWNli#;zzf7A&UGvh0QeY8=K#ii-iPC2ab07z=NTN0 z%`we!=`vPS607`S`&l|E;jW$vKjI7hglyW8S`X!aaqMy0EuaRJ4Az9qYKPZmIK1WD zz?kV{>S_Kw*)}X@git1rR-Gllkl1_Q73Rj#H1zLwP!SrzaWLV?dxU!g zgZ-T9F0exJ&LxCP|3$~bj*XgX$@x35<#~T^XpQuWCt}KSe5IN|o=DTZ zQ%mfjCxYI)@TFd-PCR+3&y6-bIWd(!?Abc3AVR-$Z(VHF%iB?NQ9d&66AF5eS}H3k zIK^FkV8uv@ADR_!(XMlIZF95AX(|tM2;QcrVHC*AbQBTiZYI-@V$?p7H>gpKY%Ib~ zD&q-K+TIy(`ZIabWd#-Q%2;4?zE6I;5v%MwA}p{@ zQ{$cRyHsbY!?uu{%CZV@=zYk5<*_*^C}zchj%~9W^u?=jr!;UjLxQ<52N0XFpB4Hl z;|@2KERR_NKPb*fk0G&=+Mtqf&ic`mUBaAa9FyE|XPjP6<(ztmN>h`cvn>kp>gj>r z3{yy5ZAcPw0(XJw?P$tYV?Uo7aw0E-{klN*T>>tfsqGb!^Oh3Ap`Fg6r&@IFAVXOr zclEFX4Y6*zf@{Tfgw92spJjK!luiyEgT14$wJ4m%OcX_HlzcTY>v=Qs);{yYgF{Xp z9Tme#N%bu;orhi=SupZZjOz9x4>-fm(}T5L^Bt)P$zPUx%a;}^Q-S?nu-$q#MB@PW z+5vkVI6aKr#z6$0HU4|@|ERcxp_{$n49}^tFZ4BCf{%>{QSD>;rp-=X9v!}>%)$sF z9cyzn)}JfXkn7=d5EQL-q8^cr;h{m;or)zf;O8t`xW0-Vb6DWY3fJ}@!{4_$Yez1r zVOE&G3KTlYkc=$B<<-?Y1&K*X^Wm8-3d|hkDyxaWHyrqVy(Si%Qe!1OxU~~HtI$tV znmIkrOD5881RH;Obrl~#y&FIm=X`u*z^s=^I1t9jTo&1*Ptob|dVB*-Q`gh{Eq2{% zZZ6Asqwu+D^nO5Lw;rBS0(jv(b3r&3+z%(LE%R=}P3NvOF>_hr(_79C>nhWz?fz`V z95^=-1SDRp?9+rS=9fy3RNezlYhoRlV1n1nlWO!x<$3wS*XgdXI-$z;LR&4bU|TvS z)$p9|4ONKLF|PFG5jzXm>`Fc&^A$p&m8;DkR7_vgS2WsC-%$aJ7+sUW0!nHp44fGM zE*t3Jz;qkJ4OFsw#|OuXujoeYm~4aHwheehRJ^<$${)Z$FQxA*)b21T(J*|X_v`jM zk{^mAIslICn>`m7vOUEN#==2ocbgoDk$FX-v=|5z9Sr#Z`Hz9DPJ{?s(5~Ekrm_iC zpDFhG4f*$+VYHiKE%znsf#vA(;}9OWFN+b6ORIDJ1Q2O9q{||3U=A0pTgCfpQG zjuE_&BPWbe%K|TYo0dmBCa1rl3SzNVXW$m)Ne>mW$kQ~jnX!=tStl84dA1BiG+4X1 zzt?@Fm2>dVwYyo}tagAcE9KC{&=uh+Go;0KAv_tl(32FNle7ZR+>=L-dan8q$U8>p z|HIlh26+-?U;fIrZQC}w)MeYYZQHhO+vu`wql;bE_RQ{=`Nu}gZp>svX5_b*5g9M; zx%a$t4j6*YUVt(I1J~-_(kzf(W!O5kL%A#ub+jQr*e%xLD|0y82v5dDBvZX7(G)p7 zJ(f6$pA@IYxT8!si_TfH5J#ZKn6_FYVbT@+j`})S5BY16H&hu-O>6XIX;e$r0pT?l ziN(kgCrVIbVYm(BG$om!kr9lzf$9>EwynJKqHGDes+(2b3S)26(KAXw;9~}qMR1h8XTA_2)3$AXW610CC2QZ#gwB^1)R22uqR5eCt)Bj zhadVDp~?#Q^AuAgz}U1hq`#Us@>OwYT0MnobWxjs{Q{F$)?1ajV7v2fI~BE!9wJAQ z*i~M|uZKa;1e+>8JHWK3uwoCVD>yanLDja)Y?gqg9tI{cmG zupJ69N@Zhm0pmepgJai%u5xrS7H4I?yUJfncY;M`S~8)xtoQwLyc&1=uI$qg0DTWW|AwfC87 zFuo<^r_k*vj2jUOL${MI7ZgrtCY7{?B6W)XA-&IkcO=6n@_|= zu}hG=K1H)BI(KZ#1RdU_u-UkNs8~$#@(2+LmfW1sI7@nKET3#JGBO23z`oU+XfB|0 zFr61yX?Xj?)wcz4#PJ-4H_PyncIzeZnX=^B0B0|3W{%Mgp4PVYm3SB5kDqvhS&S$; zI9{21dT9;c5qE+~ zjPLCsqf!)F2Yx5cLf8hB4ywAECKIBpw-1?G?L5N2HeTuR-u_%^zV{wI!klwp^eLEe z9%*u~g*%2KFMmYqeZ*HGKF$@iKlaAGLHxCjQ^!nugesVRI#lFtnD*;?M3_NK600)S z0~l&bB9}krU2C+x%hxl=|62W|>-H)oi0tnF4_&MpDwBTvUt1MiJODuFzfW%cmB8AX z{FBZ4cVt$JhKI6U^ zmF>>&h91zX)cRiVp|1#d0-NpCZ}>XRGETYr4d=TNl&9Z%VE?esERWmG8QESI$Qh{Y z2$l3;1u=@06_(v=kRWclVq`!WCK?mX%k>AO0%Lo0Fb|Tx#ObSvDcpcjsxMg8!-4Mxpzp#wVy#kR}alaKJ0C?$dayT7h`~Wu;m%}Dx zDycRhNGajbRT3yx9oI0-bP{MZIRB)-+m-MLWk5q$C_J6$qX&e^aEuM13FsGToK_xRww2X)blY^Ed6q+2V#Zr18u!k zrdhx?u}M*e#CqR#g5veYn6#5yXA^83bd*a)8FifQ*!(5M@=x z{7Lr*r;83l)Uz#mDTHT9jEXlnNTfIHhvlf#J=g$nClG!USkx}}Syj$AUVof`unp}q z5v-T7yF9Y7Hdx%wmzCq=BKNsu?>)SGxR3@J8Qa(V97qy?>i&~wFWV}5C%djnC{A3j z>x(|gm1k6C530dK_|7`cV^{P&3AmOb#{331TiJL=C7_?K>x7UmWTKD!y6*6NdgRgT z`2bfpZ*a0~Hjh7qV~&Y_BY?;mab{-1meqm+Y}FQmhPW8lwLbtHpR9b+mvJ%v*7{pH z3xGi^Kut~jUN?_Q5)wYEG}2YRZO@rGU3%@#U9#8$;W_^0IQGqjBWKz^lxUCYk-Dtc zV(rlPzAm-`Hh-HQt67%yWtOC{{(gUq;I1E`es9l&+qz0Q{ zYECoH_;9^AL_>gywV;Z)ZP<@jsS%ax!RM@4$}8bM#@)|eMJF_oud~4Xz{6deqp6II z=xnSLUmT8TwiY#AV1S&I7uhIC+%M@Rs3;Y|DeR}lgX$jBxFXvy`-v23(pn-1kUp&+ zjV4Z_4h2y3_MfraJ`zSb6@Tz_y$H8|G8(NPwM@dT4yY~RKEdJrp7Aaq@Fh=;2}Tp` zRNq}qX{@L}p9C(9z{$00Xo_=qN=K}s-A%DJgqG`RG#kmyeA8#njIG_uTK|JY*jn!a z`1L^_MW#_4DAtd&x}!CKd?-JHJ(yj4M19M@J{tc=eb9s-dM8rh9n`6-HyJDjcmC$t zii7}GHw057Tl_85ABeDhSVNm_*EIYRIae(5%@EDkeWJFmfExAF)CTi*9L7lUp_#8M zxz^wXzUGtEnFm5P#KdCdx<=-PsN9`RbjSV6l1Z{M8ND%r&S7BY*Brmhh)JHNS-uxL7jr!+6vzeLXb4S$->U=ntl;b$Hyp(HhP}G(NU2?UBO|Q=io-Py5LUIX z&&?9F##o@HQzSfGg`rAIRIN>qZI?8h5> zkbL#bE~E7lTF+V|Izlt*8AW}v++y5}Q%&(zAUUJ?4L@5(#5*5);Ew`XF2IK}S$r~? zL+&CDnT4JYe19rZF)5mr>vOEe5YjW+Xw1_(X;z6K)N^WN*s|y3Ae9+{ooYNi{-1#Hm8(8ev$pF2;EPImcCO{n`wogUHiKjUVQ<#gIa zUURbWe3wNbR~{ckAT!6gITVKt{b@@A+=j3s>z*i}&G>sR zSaXT?GD|7)7qo#)1y5v=7tUF|od@4sqTMdsPW86q_GZi0MVA#-!nvo?_1y07?cXh* zA|_*K+*>)vS-#$W?996;mgL)0XAhR%E_|O1KHIVM=PsYucrB&QJan7T zxh?_9jhhZh$9D;n$`pOM7(Jpq%iBNZ&%^`1UBa+HG9E#1OL$n{%HAXFScF7lc>jFh ze164*R{jj@Vh0;%-S%-7Asy>_q<&({GbyUGNU6|Ot2R{aVNMH*p5|*z>r5$(Kt`hI z>c&+2qvy9MeGUEa1@*6IpyaiiVhLdZfCc9NuKV6U4nNsD+PQnsIXN3Ro7kAxI{!PM zxUA`Ahr@yV&GUt7t-qv5L?i1D0x!F*n(%wHhOR3$Tepr9)G{q`?W*eNS1bLrTVDoI z2g7eEN5i%=;_%-(j+_r!6k#84o5s0USKTj`VLl_`P6MF=Ig`qadJ|d&Yr-(owXqCc zSEL6?f_pdCo#EZeqeu_#h-V_%6PWRLe+n4b;NH1ZzfzDj-Qsqg>q2Bx{wVH0gVY8X za%f)&1m0nW`>Y%p{8B=Sqy(dufXpC?<-?Bze60qG@g~n#4+ZZFL>Bqr-8~2P+V1%X zI=wqM!&v$EcfQ9$EC{sR51GyPAfEF+-K{pAq4)VBPq=AI;!2V>2^=_wS3d3QsVddOu`@L)v-jguFIfg?DnkdNfYW?{ zJ5kZ6d~ieHvd6Ek6;*L3sDPkuY7+m}s6a4%gA_L6`VOjRPzQ7hNJ!?flmlsyZLDbG zAGhnMw4jWjIZSkO$O&Xi5Xf11K%}pR@h82L4>^^-s{T6 zJJ}%(4B8SqWBXx$od$}&Ht+5xEN)J`oyXJLttcNEX6@*~C8UOu`{6?T(P%;6AIVUj^U(?U-fK*s;wbu} z>paa?!>)SNud}$I(ke~Qjb03-xbY4b3!}IsVc-xhX0tvJQWJf{peoAa2bPrrrDo568#pt!mbI zXM_E2Z~BbR#>swb5D$js=nCHNG@?miGW{Cl8D~gdFk};l(WNm8=ugu_-&KoPD%^Vk z_FBRjuEWwi=!$BiTF zyVI5mvJRzug$Tl7{BO-?0b^dO1=m_6a8K8eWyj}+z1T#O>bKqb<|egz9UU65md(L1Ox+)B)-#$0bq{7a{{$+)}6{ zR@WULH3*OWIG~h6sT?z(Q75j4v9aYBQ4O>s879}vQ(uLQ9S7k{kA!6V7O(Y*+oQ5> zPz}IxReTbMFIu!`*i@6?*F$qlOLmE*7L25LD%YT~WM08qPOHDD4KCqr z)eiA(o@{zHaaRDz42%Bo$8 zarNrGk7k$b5~nFWTx|>_Xy99=TDz=|1BGjE9!L<Oj z$;eY?O_`aOAa)q5Eoe+A;Oux74Sdk@3TmI5LH*h>CBXS|=Er>$r^uMA6$m5{+O*J} zUoR~`FG*cCF<|F6XMQM`(53{tbuTq5x5413!tx5*$BG>(Ap{2A7o{;SkRk3j z{hQ7Ljk_>LKe8BLDVmZXdDebmL}&$!Y-s5#0s-n&_=zQ_K^U)FGC(7?XJprgKM^z} zrzU4K^5;GtZ&7luS2mcU4B#u<*`Wg2iW}WAFNt@oCFk_HHCq7Qe|s+0Teu zK;h7w>o-XvXFQTj6DBWFiGG&syxTiLXA93nrOwt?crT!|KR&@m_f8u49E2%%wrIU+ zIU8aDp?*~^pC;SBgK3Rwrp-YI`y`jGsZ0P2h^Wk*Ht?%H-;Z6>;C;S;&nQ7N6)9knL>Pla&gmlB;X;U z5kBx@!D`eJmIaJ$zVwp6Gc)pdDX-(TlbJ|3#!jwYWfn(lT|K(i4fF~xxY19q%&EqR zyj0MudY?bSpYjGCE$H?2xV)yqB?;^X{8P&5c@osAK<=h6)RC>uYfY1~{p1U2z-1UL?%oc~PplPK~$Cs3)ISaU07v% zZHv8a%#wCj{m56>H_aR>%6PrV)^~a`sJpUU@NUg)$C`Zel45(?v1xXk<^7Y%zr!fv z{`~K$8OGh_n&K!dzTF0SjA|GPkH;FUOF1%J9i9a6HIT(fvNbPMnl{5TDakv-sb63q zy5^^`Y->s8L@7*Hi)W=!J3l!kZSUZpFze-wux&aAPQEYDTZW!+dAtOts!^fY zP;7zkSFbU3H!d|nlW$aS5U`yG5V83l3Cum0i}W@Z1&t{C>sS6-d{}9RIEqyJnP=B! znrw?P6n*xM&_=E9;u~iYG{N*c)MpzaNu6H?cgB#_?Vrr>d3Q6QoLq*sNx6E5kFA%Q-DB`Uk>4?fB>7<2r;s2>!Kk$=Oub&V&X4 z_$dJZjsO09`+xh`|GSo@NAuljvmNPc+YjublHy!EZrFl6R`Gr2j^s3!!PQ8PB}WDv zBq2UH6BskF`Re4O&kX~xTYNO!YtFn9)NlB_X-5FKkJB3zYj0uu@`(CN7NBQqe_hH9 zXTK!0?;}aFt{xqnd5gx9Wr5=gBxw-$s8dSvqJw${vIvEjQS{E4&iz1p#Xws1bpGS| zC*YD3S$FDl$loHKLv!bx0jPu!x-{0nrs*Xjay;2%by#UKe#DR(7-=^lB^+b;lqiiq zEf?T&02Zad^wKXTx+Ik-$VAY*tV=qmUet_FF#QAM{w@$VH>Xq_uktuivQL0e`+}4i zIsAyG*^<*F^L@C98yQ?KM%m9eIr=3{R5Y9V9Eg)R(R#uwIX62OPicdKWC1U$Vn~G( z)`yLi9X3J_ffCyq3mdw)B`prGy zY+?7N-`LuI5?P%`+wWb*rF|%JlTz^7djJDHh(J*DEx&7E_ z0#!uXGSmh#FH!QpWEL!A{eG3GGySQsBd{YYC7&b7eE=2iXn`SSxK*rr z7%#9RHua#<1Q#RNvVUnzJJ|i`ADyBCT@me#j!_TaxaOBg2lngC#CA9B3z9^&yinJ0HrbfP+o5I zkZahU8Ba(*uIc;`&0ARbyx?%q9lQM8{o)nhi^=QL^Yr+t;~Nrvai31&(K z4RoOZ{A-RR$Oq!1BU9!lXGrytCfzp0Ve&83fc5vRYjo5=%SbNv&&k5@?T(6ySe?c; zJq0hpPWip7psksG{!(7|xy$EwJImH&7Ozqv8+{^shb?YWsUVm@Y!~cnD|~`s!4eB# zP9WE$iGk&12v3j4{Xd^wi%H*eNrzQKyRi%q@{lOkGVOKZ^E{9#oD4!>Qf()(;bW4d zI7Wta1@h0@zIDHlDO^EBRfuq=q%zK#6)Waiu}%(}8Yodh!Pa8c3HZy)7q_QXlulZSV0Z$gF!N_iXh|*pt;Ih6@sVWxc4TF5~xcm}HN+s7iS>fZQWmrzKP4 z+9$^M7BbSyeC)~6Z0(bM*fzKJYH7WMr&y1ql}aJ|j&<+nWGr}t)4B5aLWXcgTG~JD z2Mp?nP0cMgG=Xr9E4*#F#pNGLV+(7Y zl$ul^0QvwEnSn!dGDkCZ5h~U~AqDUjU{CRe8<9qpjnJ2dn5Y6k{qjQl+^ut5El zwQ=ORMfIro35mKQM$0H81|cV6TWy9%yV0*`U;moYN?)@2v*C3gUOx9&4!aq4iXE&hT*_dmQYbsMoQsjXMaZwU;n zgv6slj`^F6STxUFfJNB`GJl_1NiO^XY~FgAjT+e*08=Fy#OmFeq1=%;4x7QgIm7xa z#-u+5<@SA={WV;K!io_GYe*Jz`U&s7YrUo+j|hiy0(DWo$*a$fSpUwb7fk|joed5o zKQfHJ8xm(()>p*4HrH&6nVi2>MW|wxUG;LMaa$e==8mA2F9GGf5_IBLwpM=Ojx_|j zm8MkQiNrQ!BWL|xONQe-B7SJQ%eLS=QN$%zwo-GBVEKlQV^)sHSA^2sK`oJbFHgpN z{W!tzvBI!s?c5fL=IXb`vpHcJ5kz=~mNt{tL4i9tJ#-v!nnMmoL}#F}8M`8UBc#K$Z(WqC0bNRRJ>1@QTRE7WrJp*}tgy4S|8=3^@vzwq zdmq*k-5VKZO2MKr8(2fo52t=Z5_m!82H(3s31cEG!*Df_10^Z$67pB$O1c%qK?M2G z&oHP+@>aen)g4f^p9G|YSwf+buJQ-zcVJ7lJTa(ox1IzU^6Is}7pA63jkFQf$iq-@Ly#sARrlB-lJzviq z<`2*|U!Ievd&H))<5Mo7JhTv=Qfr=vs@&f$JsC= zKAo7!Os7H*#w;04LG>sNjW)|L)0nDBo6X9qW5u;U7i0>-xIV>td?XD&8&(!BOiHF7rXdHI>Y(T=l~?>FAfqyu9Yj4#ra9+dQMKk9w(Mg6q9uF5q5a*YM@4bMmD- zYmks#tJkT%Vd)Or3Kq20M)u6{%GcJ>w_>K2_a^7zH2|cF2}6SWI;_JH@n8P^!Zf-m z2TbcD@L>bjv>~44?t3Df;+B%=yj_trdx_jZ_gX;ec3Ymw`d4c6L#uT-<_`e#2lnqT zpebbTrqvy9UxI{QQt0MpO^Q3~v<+-&h1c+b*3pl%-euvDCVb!^b56gGpyFbDm;&fK zT?_{E>AKt89br?BRx17zRpcMZw}tU<6)3W9o$K3BU;(H$ZL1_N73~$$mw8!G9wGZP z);&&>=%qqFeIdNB(veD1$+a!vBU~`|>CSPUcys7S(BG{kf-t|?dpR5BeBUN)Eb2UF zB+}uSrylgC-YGuLSu#+sf8S)G*0YOL1w0$XV&OG?+Nhdt$97Yee!L<^&V1 ztmO5F?|-SW9DN!1V}vh9dM9{Wm^$xTwYu%(l3CisT<2Uz}#j{jclK|$L8eEB~Qf&Tz3+Z#Ck z6*M#aQ@eaNJ!|og`+sPc{}rYGCcvD4h6DgCF#!P0|9oL1YXc`IIyZZ||NS9!W{w6n zHU|GT*QZAP(srvI?dztD(~6UaWrEWc8kF+NMbT|_6I{ZQLlTJ=R%Bmd3Dyd(f~=&$ ztj)K&S3Iv`mxwHeH0}zM&Oi|V;#RxQsleAgi{U;eC+Kw6?Tjl&k-j=9^+c66ZLoKk z{Kik0@`nR?HVKUrP0msX$$U|%ArW+BNNGm#nzeWsW(5n z^vQ{!>Vrg$#=-Q69)pBB&5DvD_p~SxUPU0Zh<=?jQ4Knllhq%j5N6NFRVafnt~756 z!SoJ#C+cC^q-1RAzEtYo(hM|i-T0)8=vQ-_%RK(PZ)ac8GD%@+BQml^L~4+t461^D zVfM;OliUdty3ARED^LnH@E?9q%{+ZKh^cNY4DS0Bby0+Alj;%G`=X~p~E#w_j zQEb1zPItRlQ#+J0=27H68Vxm^_?H8Iu_$5_V~4Ec;e1Ie48yD&*0Oqwlb48y!p(TC zQ*H*g9H|pQ$JiP>w)UC`+Wu7ZOzT91ABIcBV4hrLuF`0{yJsKsDmis-x4ZhPvT$$Q z9GXyjlpB^g6E2a`9NXtO>VEEFtGxjt5cVunTR^jfznYsCCU#7&Vj$Q%}E&(vYU~SPh;xxD(`7@@~BC*eifaIx!KXk)?B%##iHz8o; z`9<)59e!$n-cdNaZ$apW+{8JS9K}348XhDXOzpWQ9;QiaQN~3FbEK4{1QscmM!Kk3 z>dx$OY&SPh-fiipHmI45bu~^UMSH9O};xFNPc)w~QgJ`6;CoXHwdCZT@nik1D?t zU+O0y<+I{B-5*9fNuxvF#8?T+!iRH~DPAZi} zFQPu7gV&0m8Y3|7ldEI*-gBp#dmQyi;NL5vVebmemOY}&>9#n&D>hM-u6Q?p{GkV% z=`zC2Q5GBK&L5&v#=cYqWYyzOpRSi*X$n-FE{FPKfyH?9a^nb7OUg`p(JZk?wFCii z^Asz7%>DTgF;QHKf9AamoED`N*zbws{!L3zaFjz(+7Y`6xZqft^aNqbmbS{zu&@&kk6wbHoL`pwV_4_a0KG~{TdIK$#1oU|p zd9gl8D`F#(qT|(Gj-lvC0kuM}yX-)Nzru21f>GMU0)2abuYIh$@KYXK?JYC-HBQnu zQ}C_ew}$$!Ex|~wzXzyaHL7jD_bw^w4Ph`_(`i?~NH5eYZTF8Xz1MwOCpibYQz@eb zJ$0$u_BtnrT*6$ud@V5voPDd3M~lozxVbFKejo3v^x@xD-nVTZ=EaY0*>!Sxw>f?H zxyG!ezH3ElKh8b@W7q$M+_Tw@sT7A9H@mS+Cv$Oam#@VC;OZvxuJoAZ)SUAlq{1MYA9 zP+`zogjM4_*m}eQ?2fI{cEJa?wN68)f#$^+ylID3DW+pfS$$SdDY$E_ml@F`GOs6t zZ=QtG=(a<`Xp2TaV|?D-uDgM_Dx>Z>=zy9fN7FqwR>h_zf*(SegYEIhiD$AQaHKxWiZ z9qD7|bN7;hf#puWEY+biQZkj~iv+8dh>B_<;Iyi(*`LeXRPGD{@r=3lm(J|#IH=cV z4m`0OY10*8aWCahbt({4+9qf6T}@GGv7|aZaF=_P#@v4e={Y%#!uaHV_^wpz{u;|1 ziMs3=RFCG7=TnE*on&{hY5a+E?=Uc;^L)u&*9G*OMgm^OC6`_Wy{J};!Hhf#G02>} z=$1{0T)}`?v3_Ee z+Ly!kT;mC6v0v4$z88Q~! z`|S&Ip^2CWj`00e;c|nmhZkQ&uU3RT?Mt zg*qKgJwpAsp-s+~1z|kPbu&ctCBgXz2?q7u&i9$rZ7gQ!8|Gip$@o6bF*-N^;DQ1G zDE`;c$-f&Owy0mq;`~7Ui%Qbvt6C#|m(Zm^f-V#bp(R3D6jT;M){J(IJtg;;n4%kr z@v7<-%`Q2ax^=rHQC>g;?PNUUyiYUekyRD1Iz2smS?Bfq&FxU8c0ibdI2J0_7%Tzi z8Zqj0XhM$MM=<*$KPb56rb^d!nC8Vd$y>J`O-&3V@~zkJ+tTjo;Wn-F$-5PFLh`rM zFP3NyCmAKl0~59Y1xX#}1gZclht1LwL@$*>(f^{X4bikt4_Bx4K_)YG(x?8JsBUS@ zv`YwVnIO#_eD26?sxSqtZeFE;8zUiKb_%9V^|b2s+|#l1zC}V#83P_S_tt?)@%YT$ z8zjM|OVNN_tm7L$1HyVp9K&1GcMrGG-#9Wys=Z>Ox9% zu5EG&wNAa_eoD~QZG#HGQImlV;#k8@_mP|aRtf75GcjrMMSwcun43i)dn|cJI7*5? z1^QqXdZD+JkgYbceTZE!-DTLfe{0!LKnL$%^VNM!DlKA?@-Dbp1GMhHQ@=81Ll}Jh z^xWKBQ_ec|WN;uJ_B?9vgo9kGa*g7t@y2o&fysf8fWw|-b46-DA)xksMvYH%YlE;4<228V1ukA9<#>P(5ZtVEm{XV#O z+!%IDPnw_3Ohfm-Nb4ex2&|xYWM?S#bN8M;JYuejrSo&9)`CCnyQH^VQPADqoF+&R z__mM_NckP7TH0$mKQ*pJrFZT3l(L!RcI{=xIG3%74&yHpA*2*?6&DO)r7QQbKn^0X zqE<0v%uSdz6n-)s7N{hrL*Sr0#*mtz8ueO;ffS%x7ui>_szCGtUw2`yf{#rb6fla3 ztXC(iP>;l(aaxEjHQ6Da9Hzeh4)^)ydnd0hTPUyaY^$sKq94iL59Pz*4xGtu5!c;K zb!=NABL$eQ6q#4Q5a80pDRU*$H0mRL-gkE@y2%+Tl8g6S!g8sf{j?@xuSWb4+&!4Bul4e2MrW}D9U=R+A3 zwOiZi`@Y&APo+fK3m?6Z;UUudfmK1&KVQ$vf8si58+* z%l6es)KH!A3<=)&)pJ46YeJwSd|YhhH2vNh4)w$$6G4pq_PP%U2GK@XrU)w2z!Cu^ zqaXhFMEoq%?4N2W;|h-{FiRnTW*>gpC&m<`3nxF&^P|$Vl9Sgc8x1E-?Y-q9+n1VICh!P7N3fCF##rt^>t;0!g0KY}Zu`Xj zDS=KcgckXT8tUtOeHle@w9GgH||d*wtbup zusf$B?EBq^9Vr431>Ei)EzWM@(cqj9M~Ov(zvF=8-7iWKn5LlTL`7wS)q| zVnMeR?TPGX_nm)pm_=mvQKEaXtSL`2{9WJ8Ov7feJmwKujL-8sH^-~{&aw__4nCfk zJ!sxQ>uNdj+?oYzd9^Ycq`7=DA=(;t0m=rUdW^d;-Ij}rG>8XD^!gLlg`@fs39Y?Q zl}z6-a4>Z_y&VnN_kvMtC_&meS&^l9FpOA_R;qDOGtl4E0sm>TN;*WW<#Ll5&+7O;IKNcwIO%)2d^ifv=MPVXg+k|WXfb6ORmml`^)n{# zRto<*ii%{wJ82+`%(5w)tB+c+CfjwFs>xt(iwUMp<}paIoUN@LPo;;E>o*V&;Fh5M z%6-Y5dpj35rw`1a{n)7Ja`RbLn&kWXjUTnRDmwQs~L_8m(foOp_4f0z@1s;zN zcay`ZlW=G5XjJP+sR?AA7I9`WNpjzmoXc{b>A1xIVws68ahtuvD(P6uy`CRM+%a@S z{js_8ZRi<1+CQ^r$b9p@UEx<2QEx)0${!_}PoMq?p;h#|1$tiBW^7zSu1vMyr;bK< zmNeiu%V5lyX`&?S1Z%{r6TAZJT$O;&Bm>!VVz&FIom1_jhf}R}9#@?=s<6Bt!36RF z2N3m$mPK_0!eXuGGdtRoJ^w!jm1k`S8FQI(S`J-ds+q}B!y76y`+I;bBhQ#i!Qt)T z{ioUOPYQ<5z~}t8Qmn9U5<-lhD6<<^94!n9{H7s86;t?3+IdeOYzBl3Qo$IeRF$Ms(OtB-PJ1pw6k`#a0l&e-JNZLDoA8zmer zf!-TY2TI4nD?KnHEAA? zYepjK>;m#*t#0NSTUfRFet=dCDmH;U$=4KsX8ef!=S7Fa9jX0&VJqq>NEwtcs#AL*k9` zmV_A++*t~e#>m{EPL<=)7y6c1rB<4;cIJ#OG8UlGBtM1f^?wZ|7%O1xQr5D@k&8x0 z04yy^gRm7^Gtu)jieZOXlwp$77sW7?TckZ2NcM_RVwMOU;w47xFcmb(17wR)I9br{ zooFSr$cAE>P-F}!UB+$I!xamp4oP8I9JcVg*BVCUVmRFq9IrkaME028!)Ezk$BsuB zFv5;FT!+@TDA|#Pm_d-@IcVW|kXb4^lyGz%C2iXeMDQJZ&UnNbre-;@LU{@4wgQ0& z@Kp4~okzEs$2-vWzyFlvPE%HQTXz zP&iQ9F-EB6gwW56Wv1$+O$r>Q3g`R7cWn33SF5j6x;n*oIGJYI+mP&lhBGzBZqwN$ z@TIvkG;S1vCtneiM91&iTxSy%7=Xr=8sO_j}JT)>b zRRIr<(-xTY-QU1oalK3k8fo@FO9`zAO&cVLt3rvXp-OWxqOs+Wka%e6jB6u^w}7I~Ay}>+&uPKC}!Y|1Nn$)FMKL9f{d&=#UT&x1-_##G=Pc zy-js<>Y|^P9&&n(pwpFjT9l{$-r9pnG9)|#{Aux0*O$*tp!(DI zow~$sVJ-tgNBS)sb155hQ|L2651NbvY0DS3%WvGa-RO1I`-tCQ)eZU-GJ%ET0IQ2i zOwtJ9pUyYjUNF@xVV-xYZ&MHQGssyWDVA=^*cHaXYZO2qVTd>j#KxRf+X-MriJQ1Y zFe6VB3{DmOIX&|u9+tEm%zYe@C5*R2Fj;+2BhQ^JI~w2!g_U?oRhT*f2t&;iE$(@@ zZc}OnHl**DVK)Yt&CwqDiv>zEETjvCvc5!XIx#|q>*6@XV?@#$PMdweu*~-ZZ~mxE zg$hK3#(?~dqz05i;?I8K=?v;jgiTjX%7tNURF4Nr2pd&lCP)N86VCgfKB08rC?Sq) zzzVLUDr%VYeL*K)lQ*X`?IC5a=5-TX{Q80=9^$VSMQf|Y&lsiyE=5&Lv%*1o7B|E% zDP(A>fkTnVQAqW9soVqe8jX4yzmv28B{~7*CJx<)Klw{mZG|s zu2=H=zOPvJDra&u5Q+3L4C2bvw688BZLQF9ri}XhLWgGQ)B+1e!*~#!-MVw$9L2SZ$Q|I5h^0PJ#&hgKVC13_^d^Js zd&?n_gu$3rnw?x~))pv9*ih~r!hP1*6d*^;th)2ac#gvG*CpO!CgZTq;`L_1ybc%! zn`tgIN5tY57HiKnja2Z{h^)T?G>{dI{3^hz;@T|MBh_o88)UXuB0-K8ZI8X^l}oI( z5SN=fO}Y$k^tDE1ZQ1z=tv6!@B?hti_2)iOarEzp5Q=SR-Mq7J9>=$H4mHofVVt;+ z!JH8NYm@QN!27P1{hX3wwp&BQV|X~N1syK@4NeSpv&KR^BxiirF_BbQ)w%Ei@SzGk zNzV;?`h|8-2o;E2ocR*34Lb+JVh$eIi0Mvf ziqgts6!ps>DB2b#vuoZBhKGn1-=O42dHmvc7w&i*&3ffXT^u$2U7JgQ6IS zT13+KJ;jtmAzm+^D?i-TR!3fcI|0W?>Z;oq?M{bYPu4WutmD*y&a>JWAKcvtaos=XU(;R}d=-mo>GuXn*=9$SXJL!w#?Ts<2HTK6va=KJ57_XMjd2XV* zZBgS4`h+f-z07kHn3bTdNsU#K6#X?(D?i02GY)>WRoRrr{nTcG%7PLZZiUMS&&iE^ zXDpz+K8aZ)w0aD9b{ZQx6O#ODLF=Gs#~bfJfJRWvfzUd){o1+}i|FL}C*_&@oavZk zFB&cFIkvX4ZBBK0*e?q{M1yhQ?%@MPYob429~^pIK<>=3>(fk5W6^LuTO>25(JD}nHQi(cbjEZeYO;x%@yiic0_4Y` zogtZp`az073VJ!LNET?B5_Fsn^xV%QbJa%_$y{R~|cT=iP_kR7sk9oAJbO2)Y_{3# ztS&pM>}o9zsC6&sC6_x)Hg3~Uz4DKc0=u-&x$E<*()Ng1=-(tl9MC{KElM_XeduoPjOe$L#N5FY3U)o`*L@lCfap5Q{ zBoE0>YEts4IC2V%=j62rcN&KZl(G1^NW^`llicAXC~yZQosOi<5cUM(mQ25P8X-5Y z`t{p(1Qt5mAieNK426ElqYjfvLN48MB zwCo`73nVXfKu?|Jd>E8^Ps4uw51<+Hik(3G*V!57ZyP7_9{^2P6Gx}N=F$HSRQkjY zSOPO4hTeEYA`Ne&RT2JClE?L;C7v699;e$fnAdkHmT>a`fK#=yjX*h9SeV=w}3_9T~~OMi%(x^Qbf1mr5N!+|1T;+X zJ#55L{+s+q_3UAfMc>Xoyt9rzVnz{t3@3+Z&d8`jMf&;MfUoPslpx^(ew^prnw=U)!c*glGKew#|j3K$c z_=PlS5NfBDY3AAaKaRNy_XTh#Bmvwb5qq;Cx85iTO`&uhG&O+SyH=Px?n zJN)mVD7Bx*5jHyBpM$A6-J_qMwYlE+tIIe&pXc*Fzq|7(biE$$r-L>+zORFapYMaH z&$ThVukS;;zR%kq-|G~wUG49~>+R#e+h2F+r~kI$zU`0fd-HyNR_W#D-NdEY$<^uU z#m4n{-}U{RqPu36#_1;ChYfWdhD1s|@bTf!@%=Ea{nXXL{>Tzr1!NaqSDJqzJpRv0&4E$5QyE@?^kd%)XAIR#`b!eo1~>Kx3I8H zx?5TkG9e97^=BK}KA!EJp57^ZWo$9cLuj+Mu#csoJ0ok|%w({!#yxd39GE?kfQQD` z_L^(Au!qB(E45k*swk5nMUE+DQ*qbL`_4h-QYn*8lv-a^3j*|7etF8K(h|(CC~t@< zFzTuFDaMog0;dcQTBf;Up;N{IZPN59P^Y)*lIXVNyHv&<#Zj$EcPUIeibEQcZV`Gx z5vZh3LU#Q^!rfhb46f|Bw6TZnnWANA%XHRsPmkUa9hRj0D2i29{M|l|oLjuz-c5gR z8-MiulaE%}_$gv5lTViyd#_Imo3Fbe8(f!~SB9Uvu%WN*>tCW3Wh$>%&iAH0^NZWu=$g_ zd|SDlB#@)b(TsV;Gi+8_;O7{krJ67n^i+AB*hU>2#m)N5-Ve`z|DL$lM0nS3(jMa9 z#PUf}_3?5*tI=tB3P_&Rm-snQ!K_oDgTKevP6h(55L8j*%@d76VhVGn$X#`hs! z*@1pxkN$8YELOD^XKboXp0}m?7sRAFA#3V)Q%l(YOYztRQb!RZ)0p4 zl_-xJV*Kp#_Vo32OA@t4}~zMlP|%L&Ks^{f0!o@A-l@dB6Dr@I>c?V)?vWvE!n z#G1;Ct0ktyy(^t(wK-|UvP3ccU}6eC;B?PakK5SNx&7zl#t)~#{VT98uB~jByT>=j zV_324Id=W(uxxDU9}nel=-StR7tePC-KUk+dn?V?rIV-k58Mu8L#+?qPIA|7s`qF5 zpOD*JysSz-yc;}|WK1em)+z#O3Qf0{t`F(mE*0LbY(HC91R#~OaY>|JUZj`%`>lEi zD;cHwNeZPB+JC#(6v-E(etrI2c)y&)^jD&S_d|o|hy1Fa2I6*nn3H>XDZ{7h4LbsFK_WTUv`?wa;p-st?vs7l)Y` zD}vRXO*ezMlPh=Yro61$AbrG06_|mFWtTBp*OTB}+jkjO&4-Xv*N4s7fCjYFJWW_# z!lT&idOGZo$6`{oLDz61oOaRRq$NbpBh9gM0v&_uPM^}|$%RW%)gYOv_ZWr5~5 zLs)&P9e2FRvp!8SQIQDcX>+Poc7e$#pl#|bI<1Y1$AF!h31{oxEv&1vK7^1xFFJq8 zG`!30R_=7{t9-g@%UHFuDuD*EVHw)U5XLBxqbpXW36Q3VC|zTZq00Un`$#xAr+!dY z-GHpR9$9rAYU*m(YyX9>@qKbaFfN-8on@@2sFFI46dYAQD5Aa(sJ2H;?FjD*la}pbLKz)|HZlll zsQ>qEN2RGT;|aR^a1V-Ennl&;r?=;eL}@H$vn`$+uq|LxGr@$$30UKz7o8`-1kFEe zf^lc5K{dEW@Yu2@yg&8LAAfZR`^7q~(ooaV1#>IH{z{nLReGUA!3oy`tk2J{i&4hK znM`;GD!~na(_Vo67 zk$=k6ZoSE7PEmoubr2NGo<|&WHokm6zhl_7`NLj7BzqQ)%z1!B{rADi6uMPKaR2t< zp0qF5+nt;DN=i-+zHK|6?M2R>Fr<~Ez$VsWv+~KxHHl(d28~)4 zez@D&ElYwRg0=6>uiK74d}7~X#n!gQ_Lh-}E=IQwr6xn$H4Ta^!Z$@02nogU zB0XD?tI!J9$64Aej<04it7~jBJy(uTF>Fq9B=lv&E`A%SVLM{o_rV8DUOgSbU`)8( zf|TVx2H?v@*bpm04P_VimbBZQa<4HN*Onpb^BW6i%sDNsmvXjk#J!+T_pHwBy^CeX z*T>t>4S@+pX&Zm{#AYnTi*)e1KwKrBZ&-B5_|3h8qnmH1SMg(B?dv?bWJe1Dqno_C zN8XAKP+}(eY47gMiGTB>b<l}qtL zf`9T=8Xufje*6H4@FZP*1K#?Y_bo!OqZ{62y1OCl#ay=~o2R_zR(i@>`daD=6P159 zM0pf!?-|d_t$57C<14T&ktc6OkGu{s^eSC13!B^N@%wx`ertNjV5>|{<|}!Wi=)Hu zoo!Upkvn5`6Rydb=ai@HoNk;_hzoeBL>K>q-vU=F9Ei z&A!$B-b)+n!d?$V2%{-U@h5&jO&fwAdwDawA)%t%3Praaf@#|i+58JA_uQx8en5$q z-MkaNz83j>1o(OyAaXZBTG{+}z^>*}{lN0$&e;G~In!Uet473>LIBR9MHc&XYgT-un5e_e~AIXWd8X~SHUJ4QO= zz?gT22z7g`MDgj7cgg|uR7c5~$SU?6ip@x9CDncTvaQ$z= z(!lr%0%OW>eN5pp%;02DLJ|Suae`!`a8JhYc?{4g2t=%)b+RCWJAy`iglJr0wBLd8 zL398fjvHp+$qQaafnzuOofYhm1g19k6-y977X<_FnHa{0^mC9_Xsu)X+Z#K+uiA2w zxskxW)`<34mAnX$aW)lrw9)ajkLU)ei2RfO@{CH~pTF*IyMb|gmjthzkiBpK5OC2s zWF zP4sNj)g!Nyy_bwK0uH|L2nI$Cz8~ifx63C#f-*kFN}8%4`yL^~eV>L;NaxLciXcSb zd;o#xIKe9~WG}pwN}`Xa+xJNpodpDK@d@YFmT|$uU0Yb#5O$_HUr~HG0WpAjFVUew zT>VT$-B79Ld?^qio&c0MT!SGp7&(MhxD+-+iHj&myE@HfgFKl?wzp>YBnGe~oM2H{ zj#cze1jpp!9MFof(aCmkb?|a8aaA0^9OLARk|@PEm=t+&e!iVtw;Pk6fEeM?0XAVtoO*HoMa^jxAXUb_wT83(jyY+!Ct{wewYZ)-Q)_1C~u#MG1_Ap+9K z*}0%+V*{It_OAXHOLS0IX$6F5p#{H^3?W- z!paRT8fWnF8CRiF`cxH2BK0zP2NN4tV9!xC0OhLU?4dx-ld$mg_BwR_!5LnyseVrW z%Be~>cp<9(1zAP3e-kY-0spK3 zy#suaUv*NoK^q>1>IiQ&6jtEc_;*6&CDTfGmQS2TUyn9O|Up+7&G(qW8o{7aj~bmQ$M%kk^-B0oE?f$HZVHr@1z8RJ<>ml=Z;LEThiY4 z(J0_kBy*xWI;G%ijE!w<>H?U0Qz4ltZHWiQVhlevWSvxCPXfW+5Y*R_kFzN#&JA8} zOv~cPHKv!-1%kNS(~uZGri6R)$ogl!5r*7#Sgi#JB*GV|*|U@&B;C z+$w7K7gD-86CwC=D?#0z@i4w}S#|Bv+C3v+8Ds({67e2L#<>_7bz17$3%>|3`uMW( ze3c#_6ltB9I`wLht8(M*ZpwCRe*FA+YjWw?)t^kvIA7C4yoD3_t}^b3j|ibW#0%9W z1mP3yXCf57UdHnHIEvr>>2fj}mou9e?WB(5WwMzZ@HH~r}rv0&^ z6nayq780l2VVgXyUIXXH=Z2ccQ?2zuA?6_QBh$a6szt70s@W|0=3Z(TM{HR1Ze?02 zTC4N%Ef?qZ;*s#NM?>i6lpqqDmi4gh_HoG$BaoMblP$uV z5rQ-e$eaEr>7B{=NVPxI#&&2OCZ>ze&+b3H`tAy`2=$hu!G|r}|A5CaW1D4KtgTj(0h(`v#9&f&+IJ8JP-!iunKf04A zw*&)B3;3Co@;3^wVvc;F3^GILXQb16yNKQ?O;||9d$r7$shKU&uvnO44B4PDgveK^ zQLNA+SztyoLkwpG8%zt-o8+rC$XB&NGA)IbU@a;cWLU~8L|InqOKEB)M9~ZxVHh$( z(x;`R$yM)@gnGoJHNKrSP%STeBP*QHP`{}YhpCB;(IgDfV5g}UhX7|jh!qBi-o22# zdcu_I{{(797ubTH0F5>}msaMs$v_PtpbpGJM?^pq7>ybSjUsPD7buS+SQgO^K_AGD zBIidFh>xnj`fsD)PhAM40jfna=tTEVfzD|A9q0peQG013?l&U#6M%MOMD50QfVnA( zn745Uup-qGRG^0U-3b9ieBs+W@f4OKO%%doW4NX<;!yg-O^~e`pqtczHfRH^QTkaT^)vtPapdjn-Q&%x`*+6^p*koC zO?1FtD<*uWah+JRjm0%Hw7+mKRaW2IV4?aLoI5=pAL`QxRq7ywmP-5QGU76_!7gf2M7cnHC)!n!sUUrKKJvSe$SV9cnbXJWC7(_ zVs*BklncEp?w9A+`F9TpHgPxhXl?-6~xKNiP!8xi<$PbkxYB~uJ`Yy!oLcOADHEELW zt&-Z2Wn;>-U(MUfqkYm!@7a%>i;H8kvl7wqi6P6iEyHr=UMWAU z2*s6Sxp7Alv&2-@_ZQ@Pwk7EB;3>z-<6Z$et`H@cbJ7uy5z9U4jPIZ=9>tWC+FmP} zZCK_&>$`SA?hsFL*(j0iTDGuCzg2!Kpdl2U2p<6PlZ_u)yLIO6=J;lvdWPuy=os+T zBmxxwxi`UZxZA+}Or;r8ejZhRHk}ImWkF9_q}Zrs->iv@X=6#5msox9A@d^90cSnteMAoVo7f8@lA2Gtzd7}#v#EJyVj)Dsj10Jxmaar zm|C=Dkz78kajrdDEg$-RxI5LE@B7neo7{|z07aeVi``z^jWkL_BqlLY@K^_XaX>|} zmFSW#3Ej4gL&7G8n;4|iw+^nIdGVZ1H9_6Majy!y+Pdyb3e`^-P|xb@IRs4U29JU7 z^77u4cMpXA{ZX}a_?$FKNm_=asJ6n`k~?GURWlO`6B{TF&G~LjrSsO{7B*935@o?g zA_Qp`<{pz=?+8M2KDI;~yq1hZpuI!7PN5+H{cP#qXAHhiaH11a!=hDOM)Agf^I$9Z z@np6%zShV7daxLN+S-UfqBVAczTTX9si&n|=2J9jk{pb&DW7Ljaeu05aj94Pt)iyU z0%)}qu{?lLV$#FtIv(9fG!k&7-mGrS@S93kiD=kPG*SV!rutR;he}#T&%p852on?QZ5 zD<~uLb#QqaeN?h|VG_kpLD@x5tyyPL&v^w>4bQk}F)8SD6Kokr^a(CLI;X0K)4 z&YZvVzHYJY0JowBtR#RSm+~@sx1_V!C1K;fNx60$Y&|(~swh8Ovwh@TVKJ6dnT8^U z!7h<`uyOIKom45o^Id^5*H&+hhTy^SL#k70Hn)xtviL0!7#t4w#IpT*q*40_9CF zTI1r~&CJl<^OO$i7~2&T>zL zaz5qV)jOs4>0@)Se7qN#F*EZ4TvRs;{nx2Qc5rSws)uiZyyfia>)c;dSa!&>_sd)D z8*hZ3kvrEdE%;B*jiveWrQ-`WIOlLhHVXG$d#%JSV*Sx znD}bWrBUaF{Vv=4*N{Nw${ppJ(s5*Bl^IXgSK!5oGDDH^?fy{6Nf7G$YR4lWiLn2Q ztQI9-l9Xf{-tANIPfz7Rlgfx$+Ix&jp4!qoh8D*wOWIr=AHeUy?H0~#ygBCQyJ*7Z zb#A&ZD{d8M`(~}BdiAwNBl@BDS2W}Gr6MGAWzBJi3*SJaO#JcMbr=)VCnTKTbi3;n zGVFKwU!&1X%=cG|Kz!PPIDbC-GYr7Dznr+~$JXx~7+RF~X*^y7jn;x~W71cHI|y2{ z%vSu_empMZtnEL(?0j^8jUu)U+CND?8vnS2-9*FdWXQSdnL<`dtL2Uq;4L;bJK`oc z@N^vE9Ci<|!pUzhG+YTeXWYsu^xQ}E`C zlvsNiD*5d3&Alh9)w4Bp!{a@g$>Z_!^;?8g_d7i6&=6mCE}Y;*V5~Q|#Cx%7xYYOk zD$}yapl~^ED*1Dd#5jD)XVm{SOr?)VSv`dR)mk?-j>_X*=HY)a-7MeM{C&wujlO1r zm852^ZF?s8!m&yZ$_3P{y?mQubtBNWMoSwM)RKh1wqa0%y*g@e4V3P5&0Xno*;|5& zwKRx5ttCQs3<<7N?AOscrgpjWZh}jQ0k#1FA*F+iTRZ1}Cd1Ya-yx#@+GxJZ%5TN& zc}DkhGdh2zQ`8*zy=7#5xVCxbg)p0L<=p#_eaaBg$^rk68z~!GmJjw=Yyj;H`fqXM z-=ZSpSORBs;t)b@aL&K;ehO$vtsP7qBlz2)VBguO1}26}DqScL{_*D%e;tPjpP)fA z40IJr^w15?(HV>!X%@;km5DrfjGZyxr z19oO?@IksWvpyuhu|s=ycr+`LeEa2V*(I^DI?GB!vI1;FNe0&GE!#jgap@;)x#9(A zYok?y$mQKL{^=xlE!y7Y^Jog#Yq3f2tMf%R;SzGtAWCp<8+n><$yieyG(F*1H&oqK zS2E0(9KpR1mn~n4%aTS->z5G%?R^*_-$^G`hA8vE`a&8OQ~zE@47Rp#VJD112N-|! zde$}D(ngDhC=P0?c0E%HNaf2zt;udEZ3PSRPMr$`(bge?8(1kWs~_W}0XaE#5b==v zXM;eO8LxgpTt?>2W+ximRl1%?zqS}c3y@d~P^5O6m}B&>H>RJnIO6nQ&zm+kz8^?6 zTh&%ly{B?YbOs84fILfc$>__+)m4DIz^PW3+?P3Y_jO`$8@b&Zk!^1U4=_;e#xAa# zlNKRoI+6jkSaH6J&A%hNZRE!oUc4;{RQS`oU<;s)FdN&Vgz9$+19UA3_FNPA`0;&h z0A8|gO+$iKFn@e{zyiD*8yD1$qw5Jc6vX~KYmG|q#5MT3##QM18PWYpaK7|9F7RIg z$H1NT+*?HXMHEa3-s0Rx6Bvz4xRL=XY@~Bux)5BWpoR+}eI)49Zbp}&0V;o7IAd|S zV+Egk9jk09J-@7(iP}Ix;V50#G--lsE)s8NRM$J9bKnVs0-LB30N#@4ME4u47e@F~ znof)rv`R0k%oeZDrFvPv8P|&?0W;#sDvoi%_umLZf!nq%m?Clpr8BlN64rcudonf! zO8#2Xaf|sSHt_W12g?-yQ`y}(6b*vW2tLXaxI?XKR22+c~=QSu4Xpj$CBn zP<*!yu;L?qqP29oR2UTjf~R>S&*&VsRXK}gN|+{C6B6WwJ?t||uNRv2zA1CMdc5yF ze7;_c=`au;5ewAkd~c%|2!6M}ZN15`{JIIbuITFHg6{}w1^tr_q{fIYa;B(f&z2F% zJt%3YcL$A)aC4+qxFYNb66|3bgz_i)74cfUQNSg) zQ8=FeLvvLDMCLR_oPiGFIhr6_87TDD#ZSx;Q>O@wWYk1FCQY5wd2`U|kun+Ro*Zh0 z2O2|uKH->FP7GfHP0mknGy1V}fcQNvj+ln+f$fg(~)6CH}DTQuGA4{LT;y@5!yr)sPm4qI_;V^3)} zPOWHLgmVT5f;6_3EX;H(DNeGR4BB*ioLZYkxPCwR>o+PUE8KX3IkveJksUSRpzd;< za68sdcmePb8f2`3nx49HP+F>F*006hoeH(`2!NP{v>VLVzT<*9-;y$?b_XC*xVsCW z#)1MhGIW^+QS-hn6KE=fA5uuA30sAM%Mvp#`?26>kFz3HZ|@FPxLw}V)+ImrJ~H}fT|(N) z4a1>0BL~-}jA<^i=V+fCx{M?hwpKT)`FfaF)*GQJ*nVc|)}wBuyYRFdk8hlA;VJNz zrEeIcQj`Y2qqISqSsxjg{yv}I|3E^&?%fsh4tPI_N5-0yn!<;^QP`DqD|X zqQGtZ`g{QQX%CjpXU>#Ot{R7ZAwS%R$!TbLmOH~~GWICI(#~L~Nini4xN4J84jQx* z(UzFS)t1T52t(J1?hB|3!*ghw=^Jp0{$hUhP*jk@tAd^JoikBV zhwp+3Xz;%B@>r#}Xhe1ULo_5|Kh~SG=8zm+WNB))4=0wNU3Xttbe4#C%Ly{+vgQd> z6~fAhaHj^i8qj+hnIO7~$ly9&+v!29(6!Pqz@D2Z+qMS!XRqbp$N7 z{RQEwCCJ+Wihgxe)gL0}2t3+U+O0N;H1zN8H0B=ZE@;0ggkuO2(x2E?n)TuIJO#-j z`U<*HX|nO$t=5Qm6*HSU59()q=`A7xeK3kJyI9?ZhH1UB8}8%sMQohwsb}LXEtTId z0KW+8PC)T3Z9Cwkp}>F*VUbkn74o4oRI`*Sf{CQG%Hq} zo+=emVcyi;-}z+Ljy?#gieqfVHg6kVisTVLyBf+IcfMpe&`7%86Uafq{AjpGPM0mEd8$A8cy(Kt^isk(W{$$ z!o{n2{d5V78AvRmk>7tPrn|y;3{ZOCLC)#zv?-sS+KuzF7PE!g30*Yk`v^}#dD%O? z$RK*?iCMK47%COB#PN`3%}7}Yw_=}z{`nf*hD3xVO8peKoJfiReVro(w1`ApX{_6+3$)kznJv%NkqflMn=tvit;C0J~; zI4{f^v0}9c@b0->M6u&B$C^IDP*bhKkou~-PXVOm{{bB+;3lzK+_xaBmNH5L%TVtPoS`H!f5%4>Q_G?^VImt6jMlE2#@x(8UQYaCZ^hc_!sD0Oxx3Cu- zsD%iEIc$OaR}s2@9LyOF=$4QD8Eq*7&!`+vE)6QQBc>!@fN{b+RS-j3(B%M&Tf=*> z&2Ndbq8}vUH1U2H()b0I8cK%6fyZV?(Ucfbsyr+GKaA+~5h@sWzS7!4w}}_)M`Las zf9*rOHv5A>mglF);<>wKck8U}SH!6qR3_n1BH!twj~G*h-oH$DBpC2FRJ2Z*^K9>b zrgebk!W2Ra#TiNiTI_g;(6GNT$??q@;|LJw>?oVvSqB0cHLJoR;cc^*>rJAv9zWWLxq@b%lVHnCQ z8Ne&2G1qC@u7iz!tOOvbNyAZdeMu=sd<-A&4{D2*Ef6!Q35^ zKp1ye9#}S|_pN%v=ofv0t)L7ChG-t~cTm1pyK5i?rYBik>hT}w8^vgAqkK(xH5qi{ z8tAtL3P3L!j3;hCfuCZ~ouGpTD4@jvrQQOB=uKCW8oMrjpMNsSU*oqB#@5rgI(g=z zR9?ATdAVc)9!K#hsu|GiuO2+$P?=C&G?<>B1g$$N4^NA4R}X}ZxOM45gnM3&U|1n0 z4U96bLK~xMymJJG6~%&WE65wm6lH#{M6cS=cGQ=-c{AQd$wCb0qsgaj2&&&o+HQ1# zk2oppv;E|-B3<;%_Kx}i2fMZ)g=@Ycz|WHme8_yio=FDhI)cz1MY*eyl*6T)PEIh? zHu9Ntj6254LtD(7|Fsiynn#`WVYfSyB+>+85`iT`iSI$foNuCfF}(FrES=I4z46I* zSAqU9KaGs0l>*Zh+PE%1!p|^aqFUB?4q1jf5z5*q!1E;TQGAt7B*8_EI3 zts;1kAy-Hc&DR93iCO8&+_#&`M69Xzi#|0aOebf6UvNO%$)O~zasEt&27I%|mhh1A zE?Eff2RZ>M@Jlv--clAgfw$dLsVL(R6d}=KhJk;uBk`|kX5tcV+})$L zyVkPHkdDOISE)F{6{+#OPsoE~$J`gN%G_;43Jn=JlbC2i&`XBP49cmwW>YI5I?0HM zIP|feb-|%?Ovj-})EZh)ykGNzE@iT^cURb*x|AT4$}ItwvF#YamPIq1I*APuxDlF% z1*QE_$mENIs3mPK4JKqX7ze0Icf*BroT<4yMEc4wgt2*L7%onEi<0n2*~5viu{p2n zJ^JF8FgRnmPXkLek_r>6I0el!V=$gE0@hj-_Bjs6w@|~dzS)^?MiNqJ+$WWU!+w`? zNe*L5^hPI8p*o$DOF-&iN=~mbxhUVDx_yP1sXT|OErO=N)44a61i^(wX1C}%N>VQF zRqq6pN?0#CZB=K*_E5xHlhRZtL8`i9G6Q^d4p+N>S`nXcZ$8KoJ})ZvHX$QH=zWH^ zNID~pxg)UrBzbRRplRWFR3xAyj#v>T;5MGXzVh~aloKa__-etH?$pTbxa*sQ_9ap3 z%6B3R`OvGCBVf%^Gyd^7c*s*@PXc0A&c&Sc_4;_8Osj#0bq~2lkpTWB2S(Uwh$k8B zYvqepC_d6Rzzy)5O%}--qch1)Y626%TSyu~SSd^rfr_!TB@t6v#^kVs&zZG!tdFr_ zS1%MXi!z(cjz)TifI=jp_+&PV(ODHHh5q7jPYaZOHQ@wafSNH1UQ6GB093gD@#5=lLGYq9YzQkx3eA#0=3uDtOxHPTP9Jupn~vW z!=sP_b00X)=FX7uPF4Pq56C6YB%bztBJ$tJPC_*V)&b>qi(;X6$%(Z_MnyIVBjjjx zJU)pe(TiW60){5tz{jjc*%;mf5vW;`RI)DP5hO?=>N+b*rMc&Bk#oMeG8`bL2J>F# z>D2UVql*H1QHdzzV5ppq9g($;9kD4&$__HLY!}zk3L+?}k)8yz$DE_3#Fv&Gv8amD zns3(22V2@DkR9F&_6af;i<@OsoAI^QLW&N}CH+_}IQB$ZJ}Tz?%^N0!<2%dS-RYkB#l%C8tcemjk9?20-*qV6 z;4q1;O!vqlY&QlWb@BwIZ*#SSiWDWr=VdI=i7aG=uNUAv{yi`8DAtcQZ9ds@du&`s z8S{a_QU=*dS#>+A*)Ma@3q?`vo=G0|RHZIw;_xIGGd$fdT15HHkGt%Y;UxwIZ^|$u z<3$@ML4gip(1(p?SnxKQp8#dy_$>gnooLHyl|m`m9~rQ{kUO3smf%d<(J6gwgXg-C zfttnFR}p-)3uw6I3-abK4~lF}hL1Atn{O_9c%3nVR#2_q`^#gbm-JO{e2IQC!)Ixj zdydV_GyHcUET!MhPDJbe+HP2ol@kzW!SZt8VJio3H$)%>auIp$t!gbCbx%CW?HQJiXKKVOcp?mT%s%5GAO+wwO6NWW%1!~= z!W;ysrJtvQN^@}nnMWX<63neSaMpFWE!ao0jFKGx3R~@63Ug0IneAD%H}RjuTTDub zpyLCprNrj1YkJILJYp85b=`Aje3|ye2zyy zTfMCXBAIJM&7d>kEn*SH=o#KfGnbJxede;o^Q4YJ>{>)z;cxyq$RmMHGC2Axp6x1OHhOy8VXsqWdPPe zlcG}|bI03O`7ttHiDMCHHCUPgitWXdJ|~a7DZtKOL_lKdUpMp~=RfMeu?l?`C<76@ z`B^)J;OfF&ac1af1{}=`PQD#E8Z5%wOR7KNFLP#D!0&Aq9x%1LTD!gcRZ!= zvxmc)9yy!#D?}8fsFeK+5-frZwKYW({xIvpSi)`uz5r07o1*jAl~auryk*cvK#Wz{ zheqxS?GMFn-jglD{^Y~5zRF>h7)h7bmNbSE%Etxj@qmE7ZP6v4nxB&}plZ=b?jaha z0>;hvIJ}RYF~KeAh#z#YJG)9ddRX~-aoB9~xwV-?T^=B4dG+IXNQ=?d8U~&!RL3wQ z?-mNf(MGa72gZ=ncH%7BXe56WZidac+}Mimwm^L{)fyA%h*4BuLj6&5E25=QV}J@p0R6cI>0UClsv6rX7^uzN1r7C=^+8bRS* zut1xl6QLc?NsyG4$>b#XJ<*r7MdhIzmP*8-7AI%kgX_rs^gILxUVvbFm~9psC%Y6p z(m{q_NrB;CK=?89v_^={(>>l_X;+Q2p08PA{?#cYPbn8E{yIKkus~Y zWLj)su_h!L=OeTq_Z4Z)ghemkMc!H_0i2RQ^s4rM{n(_olz z0LU^ez4wpr3A;{j77E*U33`1V=1GSdc0Ucj$FDOxY;M27aSbml5nTCcZR0vqR-0-F z4h7*cP*;^z1mFo5t3pPHT=TN@F39L@QO5!O`hPYOYNpMYzpri6juJL zKl2u^ob$%+S@ZBF*!@{7p z7sr0z(-mv-$uZ}DKDAk2`6COQkujirFvqR+w%X|m#O8%v8!8-hba_Cxi`%PY)q>5` z@`6wDajsoJ8V%vI+L@7bw6VZcAM)S0-lh^r`cxTMd>to)be6=y99-y(AJPT^#HU$r z9~z<^!lnCJkjNzYx${2Oj-X{e2SvcHJt6Xx@A3H1ZF!!!{Y(MnsYStOO)2X%keSQ5 znsXmV22zs%Zbzd@QTJR}HpAkEg3@& z&>+3f<4(9fq3CCZ{`wg>8`QmFWh|3Hf~n`5&!ux&B7f(dE8^x4?Sz|-n*XTszh5SQ zzK_UN$VLj>7vG`95Ro8bkC`6$SN4(HwJY8s>BB4|^B0ki@-cNA@nwTm@md?#TbXnV z<5(#p#ioJkfjyg7T5|OKji5=vLfiADR?r^GV=Er2Tg2Z*%Lf$>*eWKrk}7(se9-uv zex}V8d|427Ij%=gggZZsn8h;_ej3%7G5C5Y!g?dwJ<^BigRmm^uZ*aRM<>m3#SPDEaR?m; z6_dCKQ$v=IbBsP+DH6@J$FhGJDrP4RJuuqJ@|&~^n{plm(k)Vxp(Xa=Mpo%iv9fz4 zRJ~11t@J7@&`K-;$o9xHxy#aS5cb^uSK|(BvbPdHQzzCm{Zv^QM3!0f=ozLCv%h|% zIJ;Xs2#C6e&`+~QuKwBWn*z4Q$t6`)^kl?3_BxypW-O_x@&Y2aBbfwquLDPEwD_Mr z4s1sG%Po;61wl*S>tiBEc6vw}(<8h&<_&W@Y6I!Gf^JArsItMWRi2IOyV7@gT@WsZ*3G`RP%r{`F0R!+~+gi`p4{mg3yAt}7dXsnhK)3en6cMe$|^TJwW zcTy3x+<^Yd2rg_6>Z4Mpb9<8}lyoc;-02obD_5}|Zm%&KuR&w#9p_^bT4OC5fF}J2 zq1+l(W^HkcJf0)y`2bMP$dxZzxc9ujYjO?!+C9yO)DjT~)8y?OW)E(c6L6g&WT7YN z8YX|N%_-be-FUm&_9-Io-i~{3Y&SHw=?KrJLu|e;Ku(AyA%6&^d~|bBAk2!yE&`LM zq?_>9MNN-sZLPKd+~lykPJ)c^H`R~4`6~H1-x{3V1$hoW39bQV3AnF)tL}3jn+bMA zDnrdh-*1|gOx6MVMi}v5qLOpN0*WTT3LdZhTcRtsCKY5d%eelqsWz_Hx3E9vz zV-%yDFpmcU6Uv1##q}Q|lyx6^fG7uC~1; zAh4qJbc3|F;DPvZ^8z8Jq;13;Sk&ug{JBK1`I99y;c7u*U=((dY@^BEgLyLu8FQqm z#`(xn#AQX+*#v`>$7>_x&+r?vR$<`Lmssmh|D<>4aSwj7l-iE*q{)Xxd z894Jk2*&hs38qjGEmpLoQ>cV?TmfWj~9j<&&I+<2Ox zA1YW$UHft!b+lnu*hZ((PB^rkGyZB3 zE~uPS1>vW5Nt?3CK|Kt&s-PI4g)J3o^I@Lj5zm$iH?wf(*F`pypO~>}h^oqmkgQ8I z6x>k2e+YqT>3#OBC;Pi1O>c|5L*kmjsaL3h(8R{|ur&S!ksmm^9DPW}i;`H5J=wEO zV3+wOlDY`njP7+MO6%hs?YD2I#!45q z7)6%`UN1r5nS7!|e^!Gx245?N({AxCx#U+dPsG}^y8D8q)5ktk-OaS))T`vf8?;j#{@<+&+8apzJ4js*k7Nu?#%aseR>c)>=@AK$!wRP`Z*GEd`9<6Yf zImlB9*e*QAl(u^MZ z28yG8pgiJHb=G~l+pMbghsiZS#tN7!a@nWk6kU#`Bz7j`fcS~#{Q~uT{G`J-n>0~E z`RlsaQ}tCi)n$+f6{3^`SPFQn!=YCR(P=6K65TQhu2B*n>Xq&ijTw@zoe9z)qz*0Kt( zv>s9hp4w^=8o)|{3Pb+xFZ?4AdLy~yOmJ(avj2#M`iKQG97?$>Pg(tpW4M&M=M^^Y zv!Rp2o=;^P8D~dXK;kO#@}dhrsAZbH7g0oiJTX64WgkEDIPx3)7b10Ua^U?o@BU1= z=TmW$1&vy4^YF}nl#0+U2OpS(3s(FJkNcX-!28(+y;8H2jA!mk@(;%aTio`Om(Tr? zOEwmyW&{1IThS!Vd~^8DhV^6lLaO}zl5ST>)JBL&Dnjz>PM$AeZTfx^bu0bet9&|1 zSNoS}Ka~&tD8uz7wC6GM5gUmM;=!!v^5eU#{$ciY)xh+yj(gVY`*Wv}V*~%w1&Ug!|Erxwm)d=c}CY{n=;@{c`8wGR@5W<^3=WcIl#h(P@p~gcl#~ zOYZ?r8)^QQW*R0Z$5=)kbX&X?)4jn=kuKA4{D;1HNRe$x_am5EW(dqiFXhl*tj4*K zYX5FFANKyXzW`t93+p1)oAw(Tr!|-|tWc?|?<`;S6q44YrY|J->PH>49)nfomF)%Y zt#p!Og#b59OSdYDkg-H;jk~#_I4sa6`=&q(g<7@$q`&&}=;E=R7 z!DJXh?;a$jZy}4m>;@XEZPJ)C3KVfah!|=r&puK}J^bQ=NDJiD-j&|fybs&fUUfkC zYs|3wy^8vkXR<%F?6C+^*=0ZIH}@3KiStWOiBZ>{CD^?MuGpkzW*ITABayedjY6+^ z2`g|3yS#r%_`&Z(7@|Ocu8H8jw;$n;Th>dq^UC0})fd%y#@uXW;j{^#_+lTti4PHI z?S?jJU8o2Ba;?Qim0#KvLoc#_qQve$_Y7r27}*--#S^-uF9v=kx&7!Bhlf4v6-N$y z>t#0P;*N^+JHsx5g@wxy_R?a|JN)I(-_JTCx_ zR|DQ!OQ3z%exHJ=)+s%3i>3RhtJZIsL>xjH@gRwwmi#ACEcqE4<`~rh!}*LJQyT*K z-&`++L*zEwl)PLDVlq(oj2GSb`MXHB{_v!iMFO~q|Nr@e##g9q&-v|H+K6l*E*|0 zz>$&EjgpF9)6K~|)RZx_8X(IoIMbLwhS zZM#d8+$19=6mkl(+~c61;IB58l?id zE^v4XSWmAZkt2GDJDTqf7Ydb962=`M6vm?JO0Bc!O;Mz3ZbF&`>g0XYJ+3=2W!BZg zI}IH6hYpy3$ENSzv7kh%#kx&Uu?8xNQzu3{R8yvkz+$>w$zBf)ZzKD&(Vz>!qTOK` z0DzaG+bFW}7+8jdPYb<+DPsRe)R4L!r1-@2C)dQxkK_nxjgWovtNHac`g~<%7)pho zeDV!iS>tKgoQhFt2RWcJ%+CmK{ChtphI`P6_$VXcN1KwrDCt9sJI>5gS?~_^^FyDi zN>7*4ISWEUv#+nlZI(_vq{IU402SxdNr>2s(a|OlD0r{Z>@R~j0cP-w{XG+K_WPh` z^i74`GG-@^`xuxIS*JZv95HuGGfG#Ij2PN#pQQ9)f2zlR46-$t%kX@L?1F#!v{5_J z#Pt(}wKF((1o&g1e>ylkhz~&d6!YX9*Zq{3_I(RO%<6W^K`QkR6O2rBqJ9rbtl>3! zW!apLVqxq&tFgeM7>49=8s#MRi=Qru4Osw6vd(nDH*}OX2Q8t+JjU0-C)_vQ9eQC)3{_-#fksU-!HA$N6kxO}mOJ zR1WSp=nS|@^!C)y5f;_kTT7Zcuk*net~8@n#Zh&(<|F?zgDj@Ro7|f2S6<35ODGUu zeG>m?WJUB>;+~VoxTY;_6q9N-W6`~T!6e*V-h!=M`5Q7=l*uoj!*yKLya*knuT_&R?I7%MKgTh1$7Vun2{rvFnR`v>+0mdWwPC211+S zBJe)`hVdBmIy(G2sk89F?O zus7EMrWb9`;wEADqWKoXCZNSJEKr$9{Ca-+hG|_B1wlobwMTbJFdWj0EjrLb0-6H$ z`v~?ya?LPBPu3RZ)@fhpB}KlT^|5k#^p?w7-t`nsaHyrXuZ`gW?-X{d!a-sBwG8-w zjWUYJbSeK8Ap_*8jgo|wm9Rqx50R7446$jdNbh2u4t&0(DPfZ)G$X%fmImscsu-(;OVs#(?sxu8zj?#i$iotP9yHq~cII%+0Hz!W?!75J|`5 zs>k6dUYcjNGR^PBDm$KUU!IdwDPaE5vx%~B+fotMG})9CROWNB3L>f5GM%gkUYMo+ zC>l9V-b1Ttw(XwlpR$2;yVyve@>F4k*_m34HFPe7+Auo^@1l-4cHUf> zg@6LWy+Is1JrZfuv3DUpLL&*pkL*M`9y-gSn-x)Ep%e4sAGcW5g_j`L^kkhJK+ zPS&IV0qO4CK5=>T8=`>lnJkzys^b@8yLCe6Bh&jB4z3yDH2I$MT`FS?E_`8GWDe)| zOUR!t{C(%}g2|>S6z?6v8`aR)g9c9nkH6pRI)&3+6;Kc738)|N4cuJKQF5#%$9?zA zg`L|dLgQ{HEx9@PJ1$@BaJ|4_=Q2aUr1HEYSq@TVJLdDxTziv*mU&M#h!590`&s}Y_D z<;Egu#U>wHeb|*V!A5K|BcXvScnyKg;d!ET-NOE2s!1`4!=;d!V9GT}vkJ<8u{ang z*sOu**PlPZlWpwx8?N@HuNcQfL@go?714*;_!2;|g9Ibni2;G6O>|e7fZ>0Ba=U+mbcogQI2j>#0XcJ~M z1}97H(=172yimQ|yR%pNzmZ?5)`kfsyLnQDkSbh0kLe!}cO|SX|CuPGlEfo3i4cq0 zJC%%Yo9pYvP`R~I`KhObCi&u-%iazcL+I4v`4CPh>2yOtKp1!5Gmo$oBh;D+ZJD}O z_20Z9iu?S|*#8`1#hmq6!w!}_Dl%{>k_5^Blts=SGUeVU&x*f%?(YiesPd9b+>m#t z_ehYcA-Q!xJy`QRtKT`JETL?IM-d>86UNGAi68M%W~ODCF`*(3G#Xh2tYAu+W2xWu zFTAvLK5;McHI=|n_*?a}2Qo*`$`b0P6|(O?2unh52#=EMV+de{AQAhBpJ`wSC^`fr zjdBRGm(8@Sze|z_9IKdbk_>PKLFaE{$*i(GO{3c!UZTt^mKp=p*W)J46wjpx=Y7f= z=P;hKJX}4bzHB7w^oo*^b+LJX4B#Z=%n7?h`a?w*Zu1m8hC(?{ODcl{Zap>7^OoTA zl5g`23TPb3Gkplbg&vMYuqZK*!+pjRos8j!b_k*if32nIwC%F=;=eDF4dJ<>d5C7O zWp3kk2{pn7m?r^|+)qM73d%(*7PGwzx!0z}8hwj<;>I_x?XM>h?|Wg4`+GvPY;Wlg zi{UD};j~3*eQsOoriTu!STzx09oZ%my^H(Su)r0}CH@}fd3)Ycb8bi;tSL*a9M3M0 z6Tup~o3k!@NlDsbI7Dx@@K6RyuMv2@&_A#f ziIDBxR3~8z7-)Rsd5LZ#&q{!%d%^=HWHEau<`yDx05a6#xKxW~m67}sn7SIQpYU2mHiYkA*COa>?pKd;obHI}Bxr!bsjgWD|9L9^jsUC=;3p&(&D07WI&g!m zc9^p}myN6Rt7X5(m4$Jf30(J{#K{lBNV;IiHijeozJcyHQlTJp7#9tsT7`R3i_HpW zBb@o#rnE({w5^;%B+rn8Cq$8#1OVJr!0S!n81gPoHsvv#QnP+PhMZwKYKb$Zsg$m4 z`IREr-U`kuLz#l~_M!+HqQ`~4noos$ zY>W`<*QUeGX`b(oup_;&Z;ZMi1v56&fANhSDQYy!rwtWmi;WUE)XX#h$==+Iy|qpY zvKe?K7bX%Ir5LS^y6gFYLg4*@axeq@uZ0IhFC+_8*Tf47sH?q&54c-js22$j2&*$n zUvHBq&E^9oE!^7RRsl#CNZ4g`!rE7m^oPBmWm&rnx(-1InFPuNVdV&<<988}1`B(e zMgoN2B4)@=S~d6wbh68so-BUAyI)KT*vB3x4i?S`s-LX^j?-Bm5fliNcWRS;V((y> zpX2t6|?l4f} zZb!X|=s1M;9Bt>W$L>Dpq+SLZEc~G9@f=mp)3TTk&D26cL6==D&HJ7Wb`@u z9dbUEpGsskrC;&v=Gx#aXeHr_Cy>s) z3H?{uwBWA(QYf!GDg)g(i92UnE~1u@U*hyWkOzUc=0>mBowUfqX}O7r5ZAeo;JrG6 zS7gVwLVeIo`FhOY?<_!_dsHOwL{hVDKnH}kb@H(MV!l9LMtDuytDle2(YCCz2ZF3koe!dK}+zsd>Mx@815^=J-s`2 zrT`#1r*_-Sn_XK}I(_NKYoT8-3q*O5xVt*ceI=rxQPO5am!Pn0^Eh6=_oa8G<#&R@ zO?RvHpOq0@p+Vai+RAJLx`49*4u^aEoc^ANaEz`VgDMX`g8_<2$6{jL*e{sNKrbK- zVjjJFX-r5;^d7Uxo~?9v*K{T{gN=zyyV^iHNDa{7 z?2$k(guUy6M6G>apjm=ccvyEPxw=ffx3G@-@G{CU)3s_$mou=gjv*gmH3d`XBcbkl z+4(XsG8!0$eq)UCCE=n=eivYz>|9o{mc8B~4*@KO$9U4CffDxg1TrB1F#V1V?z0rY z=APM(Uj$?j8qM*(f}Rcxv;EivANa|lK%Gz=mB4ZVX(S*IEP4Sy_6R?@rKmF~ka?w6 zqO?(yZLJ+Jg5rzNPFdrrA`W zWuO&v{lsZWI=vSb?=STruu_6P^xOwR54`I>vlb_|m!EIAp^%HT1WD|;!u;|}0p)X} zD#A`wuGu}GmSxX{$5gSy6hy(Q#(e|`E!}?Xmq7Y^#~4-*4G7pq&lV0)>80)pqn`(I z>xUW*L}@Az&eADd^6e3T9gcYfZ72sFaIEiqo17TLy56s^aQ9>Hwr zH*%o1;cr+I;gFS8_my zzJ}U88MqkEpBn*u;#aZdKFq-Xo-BNopRfxzzKbn6vuaO=Vu3{~`lyCTI=6kA# zzY&*s$}be)f+=0M8vV;(dzAmP)6*emX}hh;W2wfs)YAP-#Xfe^8=4At`6l+#r*654 z7z=MNs7GAh`{zxOgDrb?kNoF$X&3|bV?;)m`|@W-2CgvjN-4g=6uhO-6H&Hv!SjfF z9Z&g)f{3pSO>DWF7SkoiZr4S*v-INgH~13gF}xVd>yA`Y%()ZJx2-}In>%Q85AZQI z3sqRCe0iH`owTb(OsNYOcQ!(O!C*H8yl5f>z6m z1*qRO7w6KfQSB~6%cT7Q-`_>=s4B&!lELnL;>i*BQUG*|4{Vi6-*n0*g&Z9ve^!qg zOG?$hCoIVny{n;Ra(CvE%85EkIXVjIK4BJ(3PlFG7!3;1`Ov7t|M=0&J_%Nem5``M z!3y}`bljvBH#?wcy(=-=(eq%CGIEeav7H<4i3jFQrE)W+dcK}~--os?e)qiV>hSSw za&Kqhb@O~Vxw?1$J5Sx|_C>jD2_4b>dS9XYI-&a^WEYOXl)W$U9mex|+#$HO@O@@z z*mXShJlx%#{kz@2zNe9EZvOWa>HBiy2EOCt`%j%z!}Elp^s8s~`@5#;^!tapt;@~5 zwewAeb+6k9zKL^vvq@5W4X$Bp5Xke(B@S}msJbY;TuRq<^uDFI?}LI_~6$Q0%Bzm38h z?eXN=@h#!9zE`=Te>u@o2M4&YG!iquUB4VKo9__avj?f=Mx7H z=iM#qn=ibTY!@p_HeEcOCNKX!JQh5CUf3S8trIn#?$Yu?t0eSVwpSNjX1Y2|AMSO& z_xE!=XKqwvTXb1FmU3i}RAXa3`$%0zubW%8s&rft00><#H8XNN-&S@e^`D>3FR!;B z?{|?hU-J3e4+mZDQ!9{a8{7C7BO?X&lUoZD2k++A_ijBer#;IxGhH7~ky8)H*ZN(b zbuYCSTYNPwfE(AYm8Ts(p3drM1YM6e?v}BtZ{{OQokv5%*s!lg?U#Fdq$jKNNtBu5 z!5Y$Ngd9Azn&ZCIm8a&ih^OO$0h2DCquIktOZ1(pW>QDe^TU;=hl`sV>1STNeBRC< z-kqw1Fw;lHhehmME6 zwV`w_ZeK6Amv)a&hp&2%EiBL(1PR+202`SM%)i}FA|1WWR^1*p-pw2q8HIOkdZR)^!`tmACr2)achOUtiPhEz9CMD(lkK#T4IX}Than&5(PU%V)PrmkoN1Sp;YVn=$2LyGSFO7( zV?&!JK8n@v{kXY~5xJL-&8rL(bDi?Y7F&mpZ(fzv&-VxQ15YK>ml@ZSnu`~?is&+; z8?P>omL}5%uV?$0M>n^Boo_E$XVP4ng-3({;R$zc0Np~R#<2)<45+Yw;%7!!Nf+O#;?)yM$R($ zCCcgf#8bgcY1xR9B#FP_YVYzTD$1FSKMT1g+~z2yhF%R}v-rmgi)QNj3uEM> z1`FDJFI?vYy{s&dbFI?a8^#P)lrc4DacA_%>)j}F)fEL|PngRN=7B=$l#P;%kl<3A z6$OigaOAdX#Z+?|tgZ`%>J&5M>Y5{IW^cCHa|tZ7GYGl)3gQmbb#e297K7Vd1@#o+ zyxX}8OLenHibR?I0x1=w@QA0=_}c9Po)(AJJH2UkoS7o_TyimNTk)w%UefzHg;479 z$sYN39IX#Y6qaMI#q!za0%onz6a57@ym8WNPf2Ohdxf5=aV7p)ib@X2RGx zteFNnsYw~7b9>5|3F>S;wFJF7L_u@Zo3~va$hin*$df=14b0M+{MsUfjaV3_-ERjQ z%-IgBzB9dDOO9&FwQ~poF8}Rzl@**k=0PdjLNdb2kqqY zlX(tIS%Z@!^6uvEDH>I9$?+yWbX47gD@ZCx1}Rt&J7MfGBqgJLY=moIAp^Eu^G^LD zMbY5u6CUJrA>Cx4`4Dt+|BezRQ9G!zW8$B4#;G-(+?){?DhI+r#`ys^V6buR- z#7oUAz=4*@R4*&4x|4u?xORylP;DE|`X9sFU@=SMj<_rOq=j&6!>m7|FHcDhM6X&K zMO`vsaOWk5&RPUzv9_Wn6{)csdW~Wwh|9tU^&8!gNVN=J#;`{)@*pMU`ay0=0CUWh zC~Mfi@Wi$fQed&la@j>@2>hk6-qB`Yg*GrZ5Y*=+D3aRi7f(s&tL0QOhEK$OkPV_0 z#106yOX@JZYf^AZGCw3}`8`U|i~vP;5{6_Ct0@*_saG+|5iwEBbrB{Ku>hMW7Sy5W zl0FftEs6Q0FS;XFe2GV-Z)O1Fs7NJ*!@5f#WsCd@u_25?J19%qQ%fozCmj$rZ_pS? znc@dWZQ)qa_fC)=#LbDHH_{{-T7_&lW0ZZ+U`-<$&&+v&|L}LAYBi*L7}@TS>o{ia zvk@TD2c=7!6zBKU9)AQ75v`F?LQgIm<%kYNn!7eg&|MLJUOH1OoKZDo@Shi?P%F>J zDlkwY`s8Cz^?TpTIiW;zlpy`o78>dzPbe_e3oO~((~!yE3-M5p4BH8wF*tyaU&eSu zXP`TChFJjarN0^FP~^+Dy1(Q({-W{M@Wz{B)ng~R7Ox(kqBv)?DSAjvr;DPAA}~%f z#~?ci{;;H1!_h8 zoGGG-Mx~h=#@kb-k&IzaCcL9~)rW05hMCrg$C#8jBG`>Ey8?F+jf+DjNfnFqMVjLX zugZ@|vxT(k2=f*Q%B3%q3EG7Iri-|_@lRDA33hs~F4sNm#VMMIsGdv^uFEw~LYf<+ z8%LH>+FYf?ZHw5A(u~Ms?w&F>Q3gFSO4UmxMO`vd30{7qXkn>jvmk0e2cw_oR$U_` z8Y5=1fPN6iZ!HkiO$x2S;M9+EcSb0=zw*nbi-k|(3KVf*&P1-_8At?j1Zyzf`$E4fMc|9agtt15fH)C47b3rz25{vpW!h+LYa}5sgwJ(4?Pf4 z(pkw!L5ZNif3&OejBfj!9IBY_yyoDW$y2d97)C{UX;-@%;i#g;LYFVUF6|X=j1*35 z&zpiZHNa)AnSN#n6xxfNYAoYvrn@vLBuLi$FSCz7yYrvc{?K7eOFXx;t2nMpVyID+U)M?2F6wVWqjI^H|})Yy&o_}XgFSYnea5I5ki5kzC3{!bG`D1a>@M^SS&GR ze6`e_WOgq{PzMreat>0J2Gh4{l6&!JK{sB(AK$96@i{G90}NlaBPz~N>5mh zf$M)Ho6^qWSh_@u*NsAlX8ncd=1u)r$+P;JP$^4Wl|dn_odB^(-x3YLXF+C z#;(Lt!5pIokVi;HaSWbCOC70S@+%m-X)BEM)I^eu>v2Ne$y=(nBCF3=#l}mkJrS>4$Fv9H;%ezR_B(6g_Bsb$xK;U$S306!fy%AiY37m9%xYw9476Np zA!zg+nU`8bA@!AW+Dx9eiZ-A6GKXITx2K3~u7}=cV3k?o_r3L#xL*ksN|zLX$7pKp zFB4K8W=xP+rE|15S~6wUv>rN3XhS+&PebipK&@4g zmr$J(cStTz0dAY(r0i06n|jd*Qx}berB21&XQAVkB(62|`2V<;ftsW)HkD3gR9YIJ zBKKvqavM4$^}rL1UBL?Bty${BrhKMsHnle8API}an=nF%u5&@olM`at61N7`HWJXc zbvljdk>=8t4oo=te#&TyAWON6O_M|vp>WX04MwrbTCjA)jm$&QJ(p_VNxY+LOGQ`L z6(sg5E;uat?g{|Ev2Z;_GrdLWq3o#J{VxDmxHfhLROucoe z-!#*HC5$Or$#n=bHW>8;T?jK00mdAuoi$w1(963J$Li0R`|5I~D495~9orAwL{`O&!`RynY_>S*hzC!VZiDJK>& z>!nCHCiDXw;>M$@O1%v*udPwW>oc}8nN5^~>A>i%MBBk?E;)_IYiSYSKpiJWNKB4a zW9~-P+PZkP#M^2PKV>f@Ts7KR&IFB4Rc^<-~+!bdG zO!QWlQxh?CqBsR*8T-U#it*e_Sz!@1fQC@+N=7_Zhy8w493UFO_#A(X#f;#07>k@tsuM*Ir;-s4N8NSwIW-dJ>#gig^*jGC(DA`Qs1GL7+B`?$6vv(BhTJJh@Kixcg zCLbWS^jB#gI`z3E@vGgk>)FEDAK%BdubDl&@15fH|K26%2?NcjnV1YwORJlAGcqGE zRDO)lao7J&)K9^06e_IjoJ_Qf8VS{~-6FaDr=TX?$Sk8k82nqyX#_XM0(0ZrB%?jZ z|DlI;1KPD?pvHRSQc_3FKk9p#%c%<|nnw=cgOi?IN|ID}sX34KW?m$H;uy&np- zbe)0<2jCe9Q-w_#XNyrt?MzKCavm8h)4@ z`z)_E-pG(Wr69gOnn)kJt7If$&_jp@OpK5HCvTDH4Kk z?gk1@qqx-0F|wA|?!$y`*2s zhH-M7>yQ%Z)#nI{Uh{K%j{>7Mp_>63-~AUJFtKR=V2sQDK|B)9uB(KZnxEjn_~sZX zPaAhUj|m@jR+B==ivX4Va3p!_M#o>Dla-Z+pQQvT7J9)>K6&#>rQ_^D6xyH?!FZ<0 z5R%Q)0Qp3I)yA(lY4pk_2Q8&Y`|{~!vEdRzMO_{g*kBT)qpc|CD1qbL#0?*Vxr}Vo zKcectyqKfXf^$>sik=j_0;N1kZ(sx{cDU%97`GBaE{?4agmH4ToI^C_4jfEqL_%Vm zjUV%IavByO2W#`wllLfuIjf67S7W)jYws#q41Crv;R+vNMxC3wRYy^W9qsU!bT^I2 zi_W!HSPo*_PTJyCD!)8}Z%}IOj?Yo5rHSZew0WhP89fy0kmAZRfXu=C%j1jADVMl6 zv>fPB&AQOyb+{N?$Xd@Gb#j855U2-C4(mKkM>TVWEJvN1Go&xGp{hq-i7O2!CGea_ z+dAR)KgRXUyK6d+0>{@Xq24;cs+Se&x)~dx07rjp%ip>k5>2Ui$I2_|I((sf$qdrj zpElTqsSCcN&;sQ;89i2L3*}l96c|fu0;KZ_FB^?h(r<%wm2ZDZ8fO_MkRc~GVRjs~ zkCTBXui#*f@gF&BrO$x@Gv75UlO_g4>4?B|!4v#qktWj>fM1{BFk2&oxhks-E5>!r z^y-fT5zirSRNLS)*h2|_*0&*6)T-B+QCh(A+NiSskn21Y>@}Qj;9B z0uI5u5iyq@$z^&WF-ly@`$~tGV#3)*gF10f_d~cuC{UTFWNLK0kuusnWrQ3hqrvzM zpSOd8GoaumKD?4rWK~tJcw%{5kROZD*7n;*oS&Ex25{_YAVk+E8TBp|eRyX2&I7rjIPQm~F!^Y(bkM5eOxIzOByB%Gg`& zyG8v6t;q%pOgJyF+UJYn4@7$IUzs)FU!~!_WR$>tBVe2LqG3EP7r-#9y-$tPEDrpW zZ4pN*seWdTXur{TD-goiI+>9Xt>FD4`UeIs$P==X%p7sAT7;Gy=>F_z8QQ>$vxz2Y z(gB|xdraFW2pgt2I#RrA3>F3WojPQpkz?>s_2XR3`pxD~--9qtMEf!z6Ph29CLu?) z$EU)8){jpKF4J>>_Z0s|RJ6G|K|3GT;umZi`i%kncDPc?aWgdGp4$N_S>`CmEd-Y! z+5gK11EMgVy(?lVHV#5K9$wp9#@5xou+k@EjM`G^YdC|qrH&6aD0YM=!12og@Y_ntk$xNoO}$+yOl|No@QB&k(8Y)l|0{=No*>qRXA9jL{f&tQl*`7&q|Lx zy{yF-Nhtbvq{1bi(Z zbH=B=yu-Bpf{}?Z&eZn=r)QO<+*jr0v8lbiTqCTuQ5VzO;EC}j2 z9;+keCY}nXb3f|wfyW^-k-&^Jm&YL|5!g^HoyVajv2XVl1N0zi_Tz5rRL9GKLCFtz zpQLdv($Vbl3X#lTCkeuoj<>C_s?_2RWc@PlI9&F-4%3c~w~Kir?Tr`}Ek{cp09963 zaq~hDF1$V{wYg2JEr`&+N$N>FKO8D>{3a0$cJ4_GG{X1^)%+fp2!?)hg{&rcf_fH} zHhAAIX5e_w&Vt>)ay0+|C&;cOUN#oJw_1&q6G*?IS*PANywmX_<+Mt}0!6HRi^f|Q z8Q_%n<VWc`y+jiingq1<|@~@1-O*GHmog>7RFhuQIJK$;k z$qBwjSu57G;S5%Xy!3t+R`NmcY60y!3)HQTaFmL)dkK+;v>`wIGc%ST?!>AV@dL5H z%d-i^P5Qv4HEsHMukiv-uTWSb^m)Ibguf)Ca*cFqj8M7cMI7&kv=t=Qz>@&SZ7o8@ zEdh~@7kW+aNt~?XR@3tvUx*>WUzL_Onvl4912kWxSD+X6_+$!RF_VztP71SI%)16 zXw!;LwwM0DyRlKnfEnl5s5U8J%!$RUQkYj34myij>B_q9}~QVF7u zp`p!*0UZ*)g){N!zyzH=TEvSf&d{jI`FXw;Li|d*L%kXjv;q1wX z=S{ZZ!kKXwKI6m}7?y+x!zW-TDo0FB(|C}QIXIr$$Noq{YVR0a%lL&0-CSr+4*cTJ zk2Uj-bZ1w$!YTY|;gyAojBb6RIo<^$M;B1q*`Jn$7`Yh6nFc}!eE$qsg5|FRZo8h@ z@NdV2&wIN3RmoS3&S;$&rZQN$GA;I7$Ssk9YD22fg0}P9m}PkV2vx^n5wE&2R#kGQ zSpT`s#>lZeQ7qr%8Qk9v2oYc2@U@xH(Lhqx&Uv5iJbmzz&3T^- z%fAk&lqWOVfJiT^J&6#1EJLZJx(I3>C2X;*rff(|-Q|3850#$VqLkJnyS_H>J!a9E z+o++N=t&jlYoSg=CiVrFV(2U}*As4;SYaX0PoQ(-%zm$4 z#8>>!a0(;6aJT4MgopHBL013F?Yu*=C+TRt>_&2{0Gr~ch95rW`V(}ASQCE6DH*$@ zd02h*dNo*K9G|X&fY^*2mY3pb@@(o)zmox+^X6nXOh?M*G(aH>Yh?@$Mq=l9*&3hI5A9L+5#JXEtc|{Q0mS zS!SJd*CVQY_OVejkWK+|nHb;f%!K{TsTF16I*EaP^l>t6*af%kowZgHH-_Ch2RN!J zY{?vX9cAnu@9=BspVEI_mu_C~U^6Tbfbcl08K}53ekT98xT`6UsB~>_Uke@Bk=_xx z8JgaawymMv1J)~@zBDm`Zbt#}jRXyk!NzR^z(B|{y@WdTY>pxgqrTc2T34kEKj=99W@$!J&x|@9b zX5mKh{nBTE-p0$G9vKg46oH^jfmVet7J*D?rt7(>)cvrU#%y9V@i zroqu|8aIS@kxP7@BL)Ks{w^z0N}7L=3mBmjy7XzH-XuE zyLQv2ZwfVS32Z5{?t#~(5pCF28*pF(=tLbqbe`BnX|!S&+QaE#899!lx_%LOQTc%L z8nI?}PUE?b)Ey#`8|d*F&}&ul8}rDRHAb&Lk2}!FK_dcidF}4@Oo)B(Y2ZiZ>1}J? zuD}~ts2YmA=&$S;yrU2BOo12Ow`4sV{%yw~@@cdR9Fe@U5Za3P-WbF9m$xx++j}Zr zWnqr465@+SK4oYxc5ydo22F(H^DLy}zPk{Op4%2`bz;_8^rM$GJ=*e9TiBE`SQg7^&5O>R~Ce;--|ka0L=xL6|cpk7q6ka@c3(B z;8ji=Dvo3*wBL9?iA<5VvoN{o=Ype!2OB+9H3v$+qIzSZRQ^ISH5zY>ytxf-{XjS@ zbKuRQ%wo%iy(GN?>`PoN-C9g{+}pAZtlh4g^S34|&t-E1Fa?CMUklq6v^sKpezmmA zl^AcrG)<}5iNHAH!`d;<*wCR@$X{}P$~QvYEUz4Vy0Qb{_$sTb@+N&ZkSBG!Be0~a zl^}>IwG``jXP6PBAJ#48D>3=ke1GgE^4;X<8K+LDi%n9}A2edVNdsbamsD@|Kk)5> z59{@sUI4C^a@pK-QsF&wDi>@@`={qi2P5g6Bv3Jt-(9SX1*lZ|w(Qv2FOuUWWk5*f z=-0YeenJZ+6dXyV=o_+-b_Yw=eG|0L3U${d6gmmg<#(yCx;+a;`Je#hVu3YnvIWwC zHLI72pEnF-{df5eIuFlx=$w-X+{yYSxl+f}bXhUhcsGmYxk{_~i6(!u1u;yC)DU!p zd3KIPyWssq#M}g(FRm=D9naYF?%35+n|jNnhDn7ni~m3DJ12eg{rDx(k>5g_k2`HV z^D0YHfm_|uGj>=YUhS1YZu& z&Uf2g>t%Dlt@vIeetWe&jsfx-K|9qjY0(QV0KqG_mUjQzSYb-81UEcSgqY%rMG-In zxc3fL%~KT!ZRBY&F3@?=U?zH{$N4dD8@8pI6pM5{)EHJfOU!KKmJP;RVg2Ey@9okfzbX-`xb{A^o{)HGUoB=;guMqSd%IG0uSkfh+be? zNge*I*_)fR`*V4&JXdS=ypB!j?79ofldXMs+$xrCtUmCAT}*!kvE!H&oLPosFH<>Hfa4j=NP>TYvLpBXlY<)kgfY0Pixf zmdO&W{hj8L5nUa6AmQ>y-YJ?tmZ8wn)Lsy-M?CbGGs4iJNTguo?vvfKOOj0a>a${b zt90izSk4JAv~$sHd$IJn-SPTOaLQdy1kRpv+!Q(5Q{0<@2UBb#*`JJG(23hpnXzB) zT#OzVsJNqW={i&9+vCAkYgLAZ4`;XK^cl@`)i!i!fTD^Bu5VLTN!MYKvYTy; zU|Kxb$n`~K^DdLvn)Kk~&*(CYCZV=?WC=~dV=2m>2?<&hm#>KY{ia(6$Jmm+FQm}5;R+aW@fhA+-7EG zW@ct)Y`cwZW@h#^Gcz+|o0*x~%yYl@Mk~GjGuqYss8U_2N|{v|dE%VBkrCJaR-i5i zbI%q^l=gK2m?h7sN0yLjH@peVe-IO@u-nK*&k`@=na88K0>x9boQ^T0x$?e5B-z}B z`3Dp0Fn6LEwg=Gk^rk4TT27l%b`C?XjC(uVeh2fTU6i{m(6D0pSohjiKMf~M70vKm zTA4{Ea3jW9l>Fk2Ndi|Z39UJQ8XZ^CS}|b-Y`ueqS4Vt1v9dP&4HMn0(CC(PbTvOg zOiTNU;ZN&sw7DMGb)fu*yQI(HN?^;>qlZ{AjwQZR`SdfF_$Lw(Aj@I-TENd|<-?Ge z*sx1T`+Xp0dPxgOm%g&x#sDfsV>zW}=~FoG*~~?$$v>2~D5t3{Wq+9BY09dnE^??i zBkH8J)^N~&YjY-=)C_4aL!3d~nI6mRx+(@wag z?PBc1l)hg9x6cN*C2Q^B-}2La2<~l}TMV}6Nq8sjv=CgnKSv3tg=1{ z@g^hi)tC>T7n2KFa4zl_j6v+7S_^lx!4*0M&7YI^5bB=_PlE!n`$l}Dl>0NlWR#WU z1tI~{;n-_ySJ(#p)7`mICQ2JD0h%T2QIASS9uK6IPk$<^6k-`60?U+Uf5M~is})i* zuKHOl-fz4P;Cl)VePKqGDUxbm*S5cUyLMY>J_vPBR+vB^ci!#Cboyi};Cm<4;$%>m zH+kAkEah`5k*q(Dm0b;rFUqFJg*HZUdI{D-4_5(%Nl;MEWHe?B0pH&EbZj0=x6jgn zEmCpD7FzHhwB`jJ;LH^fVxVH)CV1gksq$U;T|5J(@q-<8`66oBH)K zj2gSGJ2sx0*NH@5gdcsF#tyRYCs%*zeg%cRR;{KVGr~COzmU=%OfnklXY8Z{xIdmd z8r=xUBwUq2;lG`mh8NC;6h)wZQ`!5;Y9nU}TU(D3@TNQo7KdI_$K~^! zfd##;{4H%;heuKqoBSPLPcKg5|5phWe1|qVl~G{P>UCf6SCg8q(u8Fx%5TGh;odL0 z32h8C#&e4w~vOhf9f{7R$kxz?-bM^oon=!U{FO)2;JRIE?Y>_tCMNJ{=w;~&+a~FZO*hKx(*My@ z+30mZV{+KfNvCiUyqE%xXdk;WG#AyKcJ;oCBSQ^wxChjE1^m44HRFXU2DIL5XA6O$ zVew*^7n8F^a{koRi-upg6KwPuoRP_;=YVB&>R#=Tny;JLg(a11*7`~RcRBs9tiMOS zpSb!8vPeHl8-CzN*aoDmF#hDz-!x@O9^#nY=>8|Qa3sb5+ADY=l!zQ5e0Pyo{K6z% zsCCJiSFDx!twiVj*oYy|!Wl_k>zms`0ZTtz`2G1Rz%yk~FaA)Za@Rb>bWou-$Qr?895X(z0v8vT=J2 z--~2v>Ll+)Cq0!kV-V}NB}R{RKVzW4cs(sqTN9S_`*HgHSt98-)#7BPV~@6;AuL!i z3r}mPFtzXR#^q*(i5W{_JGJ0zyJb90%|*{sNZ4->#?&ZI(QsjCL+{%fE4SyQB96_M z74Pc$y8~}~+k<&;`#OUSz1ppWp=}_!W6$j3VD}oJ*S=`(9K45Ltg79K{=R!U_h#vS zJ+bR)`+VGbNB*|q+Y+=QB;=Rv@!#fgD5Vs1>*)T9T1>MPbTD4M9PEAr^dIMRLL#00 zVTtvC)ciS29Gb#_Hyhgdx3m%3c} zlvl9YJc)Q9j5Ho;t5#4@zB)$c@%*i`ATHkc#&7{p8UClY3OXP{B2y#qc+fLGEJf7r z{mk$FFWH4mN=`=PkbWq7H9Po`{h)X_uF7+v01%I+_Y<`BUc}C$u7uxnm zJXmma;OOgUt{Y#ubo4cG?Hc+$I=u8B&yPo@FscmPu&QE?C?8{ErN4mvh4NlgUu*t1 zJI^7gR{^y*#&M);TZBns4*d?hNDy$%az6>--MsEZcS0GZ-_+6aBwM~Wk2N&;I)=Eh zMCB@q$m7S9gSZ_l(3LgAz&usc^(1@wu-41sIY&1bwSQlZ6?N;c8hF3qx_CQ3@NrfM z5%u#O%se~hWHp4}#VRKZj(%h^K!exK=H{0QDUM0wKg0fc-0T+S0P~)*=~7JqEy6|z zelH=T-gSn!TEyfTj7qSV*H3`hltc>!;F(kNAnI;^;!S&_d8cAa+q-oA6{g`2L`r&6 zlaBFF^oj25fRgVVo`%yP1%)f>ulszZ_4qy5!5o?o<$`_Cy;wxOOU04hIKvD7?q>C! z^;3UetFM3fJWfz&_s3xY{nN_^E8zgA;6*BEzEpa+zp&x)jdC?N z?r;lT2C2HHz)bJ@^SPvURAc=`H#=m-)j1%5^Tk6TN|7`UbG$d_CfDoPrd+F^`TENm zZuj3GVdVQW4?o^uIsDZyF5{Sgyw%-}c{cz}J-6|Ad~m04e7h`Ai>I{NBkcNr_wUv8 z(v$ba{<<69{`KH+72m^Fm^YHOMfxwBQofbcZZ#1)C60O!N&FyJc1EQesX6{_0(l1Z znfJJDFm1UWTV0^vtCLvSWhox14#jbB3{;NQlqJp#hI{I5m8+h&s=l-zu*xSU=nTJC zU^PF=EbAGBNL@&&ex{B8vN-zON)apx zmO)g}uO1o}d^eazm#JO!R3ux`TfCifFhrr1?*E$@1C_VgUDp&id9^{?H0VdUg`Fw? zPqIPmLNJT)WZ_}Vx&I-czI)owps{f`Dc$HhS=-6Mvj3GR2hy{(C5=n&^IQ2_ThjN7 zNk8Io72}^B8*639yc-kbJJW1n@EepxGQ>~GAEDzGzqia$908asG_segZQa@z8H2@& z8Q*YIpm`=SpXrY&T0V`QcdN;({bY*qJFrcCPbJ?5a(|hES^vFw|AOr8>BvOFRv1UW ze&P5I;|XmiUg z%4**G%RQ`E?66Nq?+u^{m{b_V9#c;Dm7daS#WT0Ac1%kLwSPIx zP4u+=V$EEcDYf$R%t-7nBHE&=If1>e;zMp~jk_6%U%Od*ASe>me)iB03$#rv?^N&G zm>hR&*i+~(7-RODXJeH!+C%r;!R^Kts^RD46!rQXU$PQNOKo<4CZ2tHG~)?^PaKEt zx*z!T?#D(9s$%&`(dvJPUkKcd%wV#f5<-~AGFu4!zuS9(HJQyALNeZup zPIB;eyHDRkkjy`OWMh^0uYXc-%8fe)D@L73T2=R`D-<4FE>_YuYrkxOzRW1QZ<~_W zXzWV=QjN5oUo3SYh)!Jn=^V3*2wh#1sBIx+cg}5RdX8>+PUwX#GKmj6x%pM)p0+Yx z6&Iz>!Y$l>K5&5-9)l1%9c~?0U(r8AEmgFQvhvfGEz5@e*#X7@EJVP{m5XAh*Z@5N z+2$7ZGMLm;7LhPL@Y2(wCbPi8yk8@HeD39S2>W>ykBYUx&ha&QmAF}I*TlowH;Hp- z=IIl-`(rEY`T4p=9O~-!@pd%j0@Y_3urLc3snmNhFX^`e$jRB->dvX&3VVcpetshS z+jgw8_-}~0+eeVfeh4G)+r)hD=BzJUb9z)t4 zDjc7qUtLLkWqk(5AZ^w^i6thncOyAO#`Lv8Ka&(9m%`lJcfM&;?+P*~haX&%HZ!<}X zHt@F%aM?fe_Su{XwP*#=@5@%)hv#Qh2{y8?C1h^7@KQM0OrIaGmXx}EOF)?oAzjV+ zW-FrMPIk?>?-DB!exhXRmQ3?w-eQ_$KD_M>s9%;tZZD+3i4TLfAYl{q z0@ShZ?K#mZA$(~;gbhmMI<0|>e$vPq=si&v_Ah>B`z|C6D7yGQCisa}G{O*py>0)4 zm^)n9DmBEsAUG4RV?*?gcqPLA6%QfJ|L6Ba$^;tn!q*~KY{4NM)&8+EN|SG7m*hSU zK}U7kD)E{C(1l-~jLWbunm(W^Lq!$7C9)9~4T#8CKC4g>e&jSBR6Rivz3O*AFRi>t zoM=8T&!O>lw?Wnya6O+~krT}c!*s=GZ#tbH7E>CvH`XS^?l@{`n&vr;*%QY0wnRGi zuAbmT^K@WEB;|=gZW;58H|(AmRL3Xt)nS`F29-+ny5y-|iK{RY`=tJre#NLwN=2;I zSAXxct#IY6Fl%Zmfcp&SNRh1BRO0wDf?A+AX#Zdidh@;#w&G`lD}6sF&X@)7#Df@? zAo|5Moww&CcMO9gu!|p;w=4U{Qz#_yJ2G{@`HvF(+3x}Gnv4`*S_1|G%WUb3jVhWy z+-D)R{Bk*aCVZTw)v|4_gxsPaQ!|i;;dg2|9qnshWMB&)~B#+{TBCbffqFSeB`ZIH@hQ%pk%%4*_ z4e9sF8qCB@nwsV?~+L&*q52v}39$20O_wDDU>1t}Pd)v+O^!BSaPD1Z=x$T{~$X^=9 z%p8Zrfs;Y(+m|t;xJ2&Yi_d*}D2F+YYlw-EV8+%I+WDe=_SVfdoEnfjbM)xO1P8s? zAB@IcSM1IOSLCDedHU47++v)5cUk&>Cf);)q3kiT`u-s!WOvnEHGMXvTnloBMaGpK zYDkk4`DMy@WR4!!{ajY8Ht@BzwQbG!4(;*%j#FdoxEj}JhG(TZhGadd+u6RslqaZ# z3b+VZQ<+xrW$l8wYCHHykZ6jV?pFkhqj~-Dy!IhRy`Dv30KB zRPu4A;Nx#5&JC$*^@Wjrd;BS5&lc!APIW{Z+VIEYwEg#sjT^s#+3af%Zf_`)Xk)#C zQv1QQB%mzvjgn8b) zyA}R5)y4=YlFNN=H#Py-B8!=*Fia3oZ}+7vyq$*v zf)u=Ytk^dsyDe!Hks{Xm#kK`e*XSbpvce=<6Gm|G2)qWg(Sll4+E?fz2AV4xy`Q1h;r6VuNm4XLW%qB>AYam=3sMA9 z=0p4P-)Gq`zg)o-RK41v!NNFxOlZ}!P2|fV5u;euE~_r#D+LR^ZuZ?FKUrK%~YN`YS{B<_p^q3)wKp@}-p0x1(3!sO`Qs@zQ8+!7 zEI-+_wBY6_nS|36BrRbs_i36k7*F=nX9Y4EiHA)hX5s67;ufL2e2yQ(f?s*A=g}#G zo9w%uNcKxn7lSW_IVXL*ydDJDzf4H}^YQFzQ=|^>D|~GWTAG=8YSZ7nJ7=d?SL4xF z#MCcblIC((C4O%+fdAJ(N&quNuz1k54nSChN%N!FNZ|nFsZe9TcVXYc)nuum;vt=lT5tZd3`Be5$(G5u8kKVR?q$DDjI*1>l|Qrv=MyFTvDMy^8sw1(=S*pV@nab3vtp)nc+<2y|j&8{c&1@sYx+DR8`4X~f3Yxi8 zjcyBzA`DFB=p)#0gYaN-=6W*5zRd*HMBWHDMGY+A5MWofQJQ(xdY=dAz8qYn=G@lg zZ~GVJ!DmyaOzU$kP3Z+|t7$91dcIb&^XdV81>*&93P`YB)kyBLg-&ePlqu-5*HO(h$pcyy+mR_8Rdij?YH?p?Ij~!UEeWT2onO1-_Yi z&dEE`*ZwtUa|#cU z#B)6^l?V_>>M+!?c87^WWC5X#Klc0+F%G8HjJ#(z-oD4P;=BEr%B1V1a)cZ>1?g z!{oe}Bw+@!X>?IhxYVwH0l%Bc@gar6NAc8%v~VHJ(gf}t&37 zOk6n!8L$$86(|zt<7IkMAF*;1StzMUtorA2B8*6j%^P++XGh zwwXDvf>X%cF)g!2N))OG@i)C{qy?BD(u@gtXb!0TvQh>+)Zltv$rF(;ltGAxT=z^w zbEIE1#ykm#fMZWEH5)P7d3kuf0Tvqb^QUGcVYI+!rP0*8R4i7XJeuDiC@@WxY6LLM z4_>Ov#=B@?V3SB!%)#}O_Q()m^2x;rFw9L$Rz#0KBDbc|siO)5o726D&7m?&#CY&b zm0DnnV2s-3fesEi#rp?X2n_?{e+DLUlwJjf%d5sGheWCD7&{yT&VdtC(Li?J>FB+U z9N+)k{jb9m5RiV5!~P&IZ_ok_6nReh1fd4ga*r7+gG;*ZL>J}ytyupEG{E>;Jg*n9 zk3zQ}N>ndW>g)tD%vJ+&>2~%^MRquCLja!at{ka#MFrNJT#=Nt>Af*;4? zwem8WE1#RzP7xI{O9J5qLrlyAGhd1GqoQ}oD;22zC_|>#&>V20BzzXlU*(oWqJ#I3 zfi(@f2w~&ekDm9G;ZsD8$KHiB_6M1v>U&+yj^k|@8G7(Xqd-nkA`W{-6u6PB8>bq% zfqGxUiJpn@6w6x?i(jT>4h*Oud#1N~n@C2Sk{t z)oukS;5J8z15Mg4e_)dZ;xx@tiWcmm@Oq{^uzieZN}0}D14S}WPffB@>|Si9kT91| z*(d_-`gBUgAXiB48)DO%)`t@kuCU{E2DZ97id2Z=TpUn5#Q2NU*qV?mlE*?CO;3H) zrD3Q($B?W4>(O#2AQP)=p$$b;G^6vKHtwH?3BtSBI_}@TrtE$f z1u<5?PFR0H8~>==Ijhe^$)Dx`F?XvMPC-)m z5m`Pv&jk*}klyGoEQ5jsFhR=fXcPrPo3@NlNK6UB6mCj+l8WJ$M+G~SEllxZ*^ZB{ zE2j;s=TG22)?iR*K|e4xdw8AM25t-I=Pe6=j?kU$8Oz?gdjRs%iFJ7=ux>sQA1RzbQL2NTWLRh;A`;@ zZK2X`R9|%@59uOoOeV{s&&1$W-PuM0mIY$KBcjD)Yr(-nC`NV8IV4RH7^m>uidvE> zRa^cx85w>$Nn)la!`n%sq)&db1!< zN!6DGAn1spt59(%J9s3Z1@YQks)j)el+W;Q)u^ed%x7`01421kWfS5rf2M&m|Z&%>cN&Em63RQt3&1IeS zBDNg{IwG|d_5mQ}xV~3y)sp*+DC{FAME>8s7pNoj-;#vky zp~72(UO+Q#JQ-JT-pAZP)GF8v2s!M$2WpWrRNLsvgvft536X*<>FwcZ#=?jYiO~{& z)8MBluXQCPY?FD{PZzA=Ok(eyU^Kj@7V`%Zxjh4-ColvR*Gkp*qEWScWwgu{^S||e4HYD%0V9;oRtxe%bK)_vQpkHPfjnRbxg301@sL>R=Z7T%$8GiH$d&YWl)>MR$u%w9q(9=eNwn+QEqLc3kq<0 zMH`_sT=knd6ynBI8$SF}SQXz3lkkBW?`UzDjP|hx1*V1oI7Fp~tJ3KbA0{|ZmWvE5 zDQqwt+xsIw)!qSQ&}enR%Lz-p`wMFTz+mDSD4~ZG>hfV#i`G_?TUvqOwaG*(4pQmv zDHbTM?H50^drTP}ea>cVzrbahOm+z2^YM83i9r@|%ArL5ht~fQ9VR;J?4rsSYQ;PD zalJp#Wy@L`&Bv(_V*1D|p}I0e1|13E--rS2sR6(%-v*v#CaW9IpHSb_2^mKS?KY8)Z`~e> zFK?zqQTLMt%RGSv0#4oJ0Vta6*_+#e0-cpyoDIl!UnTN~cE9@f@=qn`^U+55fl!e?%8DLSX$-%=^9C&LYy)#kNW@YFMu-!EL4&bf zBmZG*X?!*5dyF|H>`=6eynmED>`5fyK%bu;IotRW8q0XwfkNOdmXO5c7&}J8C7<`t zq1i~u6e-C+JpaV3^+c*J0AVXZ3~L#*J(|ee zfhDD8&7jP%~QgX&oqG3&QOxPEe%3l-} z<^g^}7%#g$sg^Wm876nC0w;CLJ84J&`fxZR1k#d85`GL*5kWBtVxSOj4EnUuu2r(| zeGe9Xt)alGH02OOLXeny@7zs>O0i}l6 zJflie0`eLLE17H31^iyTt0rHM?5An}LuhiZ>ar0$?B^zA&fNw+$tc_>T^%wiAi3rj zU=}=&qt>M{2ICw8r;jBEjL7|}n7hgVGPdRzGz%R`FB-a^svN)kld z1&H+7`!I<728^Ro!}nzUJzYDog(uRS5E6sfb{UVBGP%_-oNpwcx8Sl%$NT~j0iEJw zb`L;aF>pkU7sKh%FRXL|&0*RHCt6QUS2m^i_10&pb0KI?{w^?>LM0|X3YNntiKHCD zOoj?o@U@QZRoGY9T?s-4#z`AR7?G@OT4HHYQ*zuz&Z#1SnU0aNJZ}O8I5?+mqf|*H ze1W2Uroc^M>6YqTt0EhO{{s>SrH<;W$_T#%h3)^cx9s}nrkCuChUZIru$Fmi69#wv6G=gu^mMk;&)>Yp#*x%Ah-OmNgYyi=l(Ic zINg000N}nZ}rcUzM2?VYmG{?^*4?AS$(n&3+B$;wtuvchzu~rPQQT_5r{}U;m zjNjh{45Tr!OUaw&Cig>by&Rq%tM}Pzv0SY z7n+^Lk^D!3iA*dI&9VPBK~P?!wK!uuLPu3r?n(ls%uc{iX=NAb|6#=xS+4IR_?z~pw2 z00EJ(n!UWqxNmn&IockPx0vL>$o#{CQpb)hndX?ux~1U~#Kg6v`pfy+co4E_LE`D9 zfeZw6`0}xkQR+QVW`Hx$!rQK5)#f^BNeyfOG$F8kYM0wqyFF?^mFy`8%p((AY=4J- z*AiIT9xRflD7d+dHCM#QlEm{?=V`$_i89}OgHADPT<8IE$=tH#CHA~Q#KgSNZU^lZ zV3{c3Ky_G~75-@Hm~jh*%+fVZfM#KRw1a#6l!!fMa9|yurf2pxY4spg!hHCtTqzQLFa_gZ8+?Ab4r5WC3F|m6kXS){{S2i9^D4doNBer|A9A zp}N?Rl{c(0PAi)#45z7Z!nYx{-ki}$v)$az_+i`({gP)FxK^4P1g-m9_xA-$oBKM~ zg~m|JkLpGTE?>@b-D5@J=ijpn3RK?UX0%p|C|4d9-}jhaWdY!g#>JUgX=U-M zU!t$bt=E&gLC416DxCeCnn$OFXWVTI<9KeG7S=7#yq1*wPxBiaa9>B#xx*`(lGe&W z)3sJIby`QI91twX4D@H9gBXgTe@a@vM%|QXb^#WhYp{hcvggi!t5%DbEr#wX)5a9n zuh`9V#f_G$)MmTbHo1zgZg=$-vjDb$ zHy&4Z0l#PEh26cMzk7yL`q5skljVr^=o{?l7qnbXY7&u>^G<2B71mgV$W?>*B2`(0 z#}`q}H$t-qdYTZ(Eq%=eG68GWzv;aNzl!8nEe~RYb0;>&X_yzq|Pi4b{8i{022yW^66_~ z=^R86fL2%UA`Y09U2+>WFT9_KB+oTN>H%D`I};m5Trx%1BFKQfOze`m)k4geJo$jr z8jk;YlsQ@??oI?7KzW%MedZfD!BsiH%( z)&$d(Uk%~&#y5b}pg*sPW=CqP{8PgvY@MwSn=P@b9_UFkK@sRqenEp+?s}{L=!EjF zmHby6uAp*2GR^Y}vD2QGPwqB5nXEmxhkZLYskPAn+ zNgG&gLbJlk)`Cw|RFlG3P+vzf=F;Tmf;pnG4Q?fupLPVJZC!!(DwO1zJCaJ)6)}Jtir=eG-?(%Cs2m*U(>;Y#lW2YN8r@am3_D>`=%HNCtlk;GzOH8Fv=oN$pI7+C(OCjEWvI1@{$NKqh^>eNT z^dtf~Fot8#rUFAUQew5mO zEsB0E626wth%FIa&KVM_2*-JtP92?+el^Ws4GTKdoIJF)HlC)foNPQ+Z_)qTn7MvJ zdOfrM*a4jRIOAf!cyr(lmvI8_*G~067UicNJRbHwObD@`Ja}qmR~cL988ruoe>F_| zukQ)+?+OmRH>=^uUUHti#_6`0&Gamol$^-Fe!WCN{Ctp2oI)>L6TP%W zRVezqr|}>d#cJg!F!Tg8*@5ic6Y;r z2YZW zK<<4YXza3wL5f_4o*3_hC)(!NX?>W7Ok~6%5RO&g%(##0c41kux@V{`#Fz-*htazN(--5ZxQ=@zT=_)s@QdS0mw8iCR`HkmGG5x=8%nofF zJYA7dN1d(AteVp}?5Gz2CL9GR)`%80-b<5)`LOS1clIGOCJbl5kZ2mC`no(|9%E1^)#(Qb`Z9HEDKbbIQcgoOIkNRIbGE zeqJ2U_%R;uv({79UK2qP&u1iJ7_d;iR@S2+bNp++&em_wyQ@XF3_^T4BxK}OlK08u zf2FP#e|bqpZ=+>3C$$=x_H-KMiZbRz@TS`~bQ~-##u0<6txF2|Fi^AXSFal1eji(hHcRDKx(HE@S#v8Ba&460kOYK2IG<9H-uRjuv)!G9VG`wf29bwf zP&K}8ZkjxUqet_(fyB(-E}Y}|{)utGs^mw|bz&G5hqU#kWiaLlB{0lj zr#~P^CS2y2R9V*Q+QH~y?dKwyc*IRo8L=>a{i9RYvFZ(g0Hmd+Tc{*!G0?0BKz$71 zI)|~5C^6h)rUB$`VQNDTHHxisa7)r?6iF#ksMr3OazrL>i=rgY_R*Oxt~4=X;ubpL zMkdI}cSU|Lqm-~1|C7V|a#q*jYIt&%)rCRdtr6Z5^Co*Z(9sj*832cHh~st*2Si2; zxpKsNCDt7rm`1TyfoS%>*E0Hb{dzqv?B(~-{hHN}eDc77k>WFM_sOIEJH@W}FK$D& zvhUQYb;xR?XN+#|U_jD|G9*t}p36PMAXopx>5KH`>~XRZdp4*N+rPV^kk)L{@7q@q zdDgJU@2T99i3L*A@-~jw&G3ci?OJpAoZ>G&HUhYk=rU*Sh6}!i^n7XfP{MOhuh#lzXCSj_Iofv$S zGwR6mJv0?y0i=@Zd&`x=Sjz(;v_XnG(GER%kq~C}>RnY*YklUIjddrGC7l7$TZzi> z`o-|xPg%JoF<)KukK98;*~w5^kgXuB8&}XftDDHjgQw(sW=et>LW|%o`KJXC?YHA#0(G*m2nD4PZJ@SZ- z{t!CFV1aWG^UMBpeHs`K9!z6|W#w&W#cYH`7Akf%cx~8!>U1x@$hdMHmBz0xM_KZPB=^9*wJa&vR)qgGB%5W|s2FNYd9!hmamv6+}foM7^cWG!B^S=;wi zhTe;Pwky4#qU|_GY4DV6w=w%qwEg68$mq@!h)gtVky%c#QHV})BbVgd#@0+fZ~MKv zpn7QhU>(X6FW|T>?P5N-pQ~hDuGD`MI$rJVyLmdFyW`Hg7A)e>>K1SB@w1a%1_yBj zFxLHUz+G^~m^}fDV$#hlw9bibS|j`2Kb+xXoGAd#8ukK35%&n{ofM|KAk0MuYus^X zha0nnzfu@=CQA~#x{$6$Bu|mhMp(;%k~~tNBTtH{AhfIGFV{op&yDJ0vWAO!&1aCQ zu0PXRP}A!EWU8dY@p5cTkMyYbqLYvuCoF)wgYdMk&(ErLtRH{&P~$wfH@>YCvc`O| zbJKW0IduP7&^tRDoHG{rTRj}Pme!n3ctM>9b1tpqa1SP>y&LgEq5rx(8aCZ$U7 ztpRZhYQ)#A7Ts5)(0>a`;azp^9IG8(J+%yZ{ZJpO1N4g*I~}*uBrT`PQkOJtJv`Vb zkl8StbXbGhEC)kQxF5+0kWVF<`J<=J{uL7HWGD&dbL^D;unuUjt@_X#jZbr?y@g!iWV04 z_I!#>te=2Foc{h|RNFDhqX*kThcaJE+s=q)E74roOd&I3FFVQpQ^$R>Klv*3IwO~M zGaNLf2uRQ1%X{85oIJ5Q34tdX626mwzBj1Sq#7gll2fr&C_Y3VJkCB6%H(e{!)*X@ zbEC#i-HmN0?;nQne9%Jf*lrqxJnW2`b&qHh`C^RMABb=)gsMU`p6r1m9(1a)&H9y6 zKb6l!j#>(+tD2ou*G`M&-TX>k{sgFns3hOb#iFq>ZuChE*Qx#a5}qf0%xM;Ru>(`j zQm8(vuzxyoW(oJ6D-SuLUclX z=L5b_39h0A-Wb-=C5 zAy35n+*OM}V5G2=Xkfu;WGnbL5h{e_yKhuDUb9k5FuB-}OD4n+E-6FudQep}`;lB! zIL6QF9D|Y#1sakw3J#RC!x90H3XgoMwX3LAtAwfN^<&z1_ZiDY_YA}`1?|BFH&1ID z*~qiruh+QVo1XrZxY;`IzGc!n)|LGAL;DqIUFh0ppO6G7iWwPrn zoLG!(4Fr*$cibiSj_)}3lLhQmFDWTkE3iKIMTV#MPax1`{#0eqCIq$s=ucw(k2B*w zd4DYgxmJV@%^*TH&li1KomM8ii#`Qnr;~W!yAT2?h?}7j;^0!ypl!k8UPtFMO^>15 zLCK{{8-(EaOlW@gcf?p-SyKE{%*>4bPvO|ScGNNETj#r1xJJ|NF%8|6P2!I@?*hnKS+uQ#_rXwf@iX|6+>& zlexYqJ7}zb)?Z;N!^hX-PCQk8<~O>QBx6Pyk(=AG$^upw{HX&~ql z{ugKG)SU^mZQIzklZtIuY&)sgww+XL+qP}nUu@epZ{5dzUe0OzN6gjMn4`DZ!vcy? zq|q5b(y$qfX%nCbs{CP)tCOx~w6&&CcEp6jw&!HUUXG`@|GIz(R27<$ZF2l{Q0<07 z4dwpcml$!R2EOL^qm@4!J=-WvWu_JAgeoTVU`7z))ff4x86Z+~t-`B6kim?tpv(aV ztu;P{`mJ8$XQhnU){@gJ{zq+J+_7XgHx?SmxhffstV%DqtqnzINK>Fw z$)F44_G2D?kjVL~{nQ$|fknb!HkmHIamY^J8xIwmVl;$mzqY~hogfYhVdDAE=qy4L3@Rs8 zQ2q1RP+ApXHsG&@Km$+9(A8CrHZF*f3ol=?dvmk+esgmD-4F%addXWP1&wV$ChtFU zg#`Ios0jG`_<*e$b{Pyuf(|-livl2^FXeajm^!H#b{B+%tU!qw^+1tvmiU{mLrE1d z-UUI#kq?WvD279>iQ`ktkK~Wof|U1r+_4=)a6nUHnVbcfEiobU6NR<$$lnJh0ZC4c zN7dY|k-`bdQcq^Z8>hsRtqN$i1U4`pkgeIO%B7OxSPtoA% zh-@&n#5l16pT3BHMQm73NX3S=*AQ9((%3ecknER-m!fU|#J55+{3r`gBQjVg361?_ z5{rP@;l%Jmut17^!@VfANMtTRX3l-%f{Pj*P8k2BzOgZo+D%^1)NTQhVM08?{?& zEx*f88C>q~?XG`Pz=6z(X)hxkX4oe6UwU9NN49rgmvaPbt{Mxy!?GK`x3n_*t&5yk z`H@h}{j-IKySKNyvq^)Fw0-2bxoa`fHMrZW>kk}y)N&KYaAM*`5MJQ|W^=dP&m}gb z`*t}Ahi<6j%u^to#nR+Z+*SNtrnEq|yUwohvg^EnWk~Se0E-0?_@TZ2w^dIcSN0sV zJe97QlN#|FjtV8}#9dxvO=S#)r|{2+{c%08lE8k*K|Mw+Rz#{ZQRIKcDT4P`gA`P^ z?JZYT(l1*4@+9oOm*HAEyBDQq59fywcvP2<^mUDM)H<5;@EYyvu4XnPF;{5e*uF>6 zGjupQL78Hj0eHaJ#w7WL+1s*zxEe}VgUYxG7#`Y(ygEU}eW=j+I|hS!=ybh-Bxpo? z)I6*$a|I5(SLZ>`4F|NNDs!`DesEQo^Hw>Hdce%vtC0B?DwW%F=ieg%ez)IWB~DP$ z&Tm-EB4}%8pUhBdr%H{(R@@<_g1h0cyNKc@F;<1YQ5d8IC(tj2lN9=Rq!}ej9tJEp z)>%vbG|%AJ5P-LOwqX5D&B7TJ;>dC(5H;TE&o>dM{#NR^nNcwxlcUNB;mxOwRd&f& z0=(dK3%G_Y6rx$D{0O$8tphe`@vM2M!e#sz^%-488;H{LtYDzFD#C0KR3KwWEcQ8ZLr^a=AO=u>FIEvW(eh!V!A=kLs+lqO{ERI~l z5eAH%MYU(G!tPDVM$@tppdh19^2ovDg+{}9u<2BafR7H?pt>s=XA2(xnMd)^P0=hB zWRJ;q&a_3-_88{|nxHTB5=#zsZ(`FZz@qD=NV zLMVn}WZRpQVjE>2R+EUkKoy(X$s7DNJbq_qRIeGN5dw!14Q3gl6!pvO_8Li9`8O>{ zpMi{}@wr+tk~xie;4QFIXZ}P{fV+9vMjW%APBAt;O3KXZ=k2aFZO6^F%kQGeTgz!0 zkQs}bl9OCUv!FMDWnzl z1IFOYUm?Ko>s}DQ5q{wk5f~@}4YpNZKERx4uzqh82xfOI+1|YV^+U1ZNzalS^1#!# zm*Mo2*C0n8j^8AX$v*2l5-2j}2=JDY`7zn%XSg)Wx5}#~Z-E7gWb+ zNNd$A&yI)yPQ*dU2uNGl#hHiC$Kx@IJX5iso~wqKXWF4z@s~O}#@&3OP}?Kr)`n3? zl%B47t!}Pv6o5v-P5qY)>P5#I6xmYmXp9%M!HRDv=d#DW`|$9$PlZ4!qJKeOE`K{d zFTt6fMIxcRFq7v!*2BzWjIRfeX8&KHXGyn@Ee2HVoY)=uT2Ek5!jKlCyx?gieB($TrwRG6Ss_hy{&>G^c(vIyj!%bY3cAxywh_x4sjOyOKHa9TZc{i zIgW%QRL?CLdtB&?poT8X71bo&gk_2^uu%xXF{@RDHQVe9C{=lb>rCD_H^azOj4 zn81_&+pyXAoOPosiDDGrk}>0uwL6gG%YJJj zYr7d~H$}+EP03ADIw$K5C_Fictaq{ZHNcmR`AaCTZZB&mLk2vNe|>{V?a(xGVO7`j zbV8nU25fHbxutZ1AUNR6nG>rrRmE{&tV7wr9P1>kUOBo5{u)zuWbG1Zz~t6s-_Khx zJ!X@~2AUz$Y53fH@wp;>aNm$T4{3-@ZGEWGC`u_Dwr9=CSgt^{TB;&jz9Z2q)eH?! zFr0P^TLlH4{w?Nw+qz6wBf9?}L-3gLvvPJZJ{gF5F?@!+UauFt*S>mS-0II8EF+t& zCO7{GGl{K2Is{Z>I8I}tcdaz0K6^sJ*zm_Cs9!O1?l_8nEdu2m3BEqjc^?z{I| ziO@V>21V7%(YUQ9RUiV?3uT7HJ93$iW?S#y231V+l;>^=-hcU#DVZ_R0D8 zi}438RCwf;2bxJs(N8;|-zMR*+Nk<@-UVf%eFjzASmj?+#>bU z%Kybhpw`uRoYemAqmQtA^M&FHi^sq{!dsfo-Y{HU| zi)1-Cx13ne4G6oCxz$&JJK_e~n2VWN+TL1oOeh<@)8k+Sp09i_6<4LTzU5SW1tW&Y zpmH<>+wT(j7g0mYkRy#-2YbvCjX%0E&k?FcLj9dgZ=QBOizuRnRfAKV@e-oDk>HZ2 z@f}Xc7k#&giS^Dut%ssxwP5T=)Q{aglmNw0xp>3A0acRI4tC^q6qtN%hJ%ctmbz_| z#K9`Av=8$=aAoF9SjZ_h{6oO*U#WXZsnLTyV{dyVg0R5E$U9>qdh%L5f&ozK zzxc9p0H{1zzFzlq+ERPCKI}k?Vl?3^3R$V>wkzS6Hp4acJR{P;)P#Y1jMpQO{IwDm z)M*SK)_KUwNFW4M>I)OMl6x<79?UFq93x3Tukh*_)t&F9i@QU_+g&{Zy)3z^#D&1Z zJLFJrI#6m85)x{^x^}7je-s_oQ<$mQgW8PnMk*%-~j*Y!oiwYe#^fAcmB)tMP9~Payed`aWSz7=p#BXc{|@W7 zM4w3-^%VFX84lr+?t42s`es-*Ud!;qvxjd6x-m=>0!9b(Q(_l-_INqE+21~00Oqz6jwrzjO^_A<{z3%V!JnTi)Fs;f70AsX8$1VW*l zkZkT!2V$EnjfgYx*6)BImqrw`sl@8iuGDA0ticyQbO_Tb#{6gnVnA1qr}xAD_q|M# z(m4+dgrVeklJp|z(T0DZmJF+sR?MI-=_mdv1P>^q0tzB-LffArP22gIb%m(VhrJww z4nL|p>UG@cV?Ua7ge!fndsVzjWH32h)(p>nXI52y-q*VmFT~4_m%k}e)4uO(YA*zQ z-i(bmUp&o!)4vL?e?aIjz7)~c3s+cgvS!MmoEm=|?hkwlf2Y5D$>}H4cGX|+;Hd^) z<9TY^$jib|b{FZ30*fewVw+)m2(&}#3B&^+t>AsfHZ==C7cXMI-{?CQ4pvs)g=~Iw zSRGj|%%14Kq{Z#8 zN1_y*BD98T5|aa8TMjl>UYOB2)#(yd8#z0)Q)}qTO#-6A%NYdXdJ2@Z;oVg|86u8; z($*iFh89Jie#B@iAI)yq=lKl6AEk8-kKqxthQ@~`WUr`>&rK(AIizrJBaf!o36d^a ziY-E9tbl*#)|l|%at7Bx>y4chVX&j8w5N2;2q&si5&@t*7Du+<^OP)NvyV+O7dFqQ zl^}(d6YkH0gHvzjXq28X;3_KG5T+46bzcq~jcK5?rlxVwcZL+?YacLcO&7QFI>I)Y zxkQ||3f{yN!Wo-9B{Wrgi|IO zH<~xusf?ab$`>5ZG|8(n6B+QEmjSVIW5+rbZ&$yrLsl!{!%BO z9?drw=VDvI52f9=G4Pi5fE9m7`6&yosdtu_xLLy07MsNQ$VsH&Wc|sir1G^EfD~Zv zUDBRdNn&AMyNa2LwC=8pk6kD4b&L--QqPn7l*$N5tPQrpQk8E>sH9X)1t9to8nN%W zd)KhQy#Q#RRQl=(3>`=4$qns% zt8p4x8U9pf9)mw5D8N;8Vpr9j>YIxbEMC3#A(h!(4o1#Pzdw%WRFO9&J{Q^~qZiY! zI77^jxam=15Jr7?6$eYu!+Z_k-IE8R;Mk#Edc zAjeIsKer`{|K-kG%PWN{ukFE<`GKE0x7uvxdR-W90k(D1-?e)i|M2&4N1C}{F?ZYQ ze$-jemU>PyyD!8r4&mZzd0xv)Vy)j`L-Z^BYR;W4g)4F+TS1P(WB1Fzk?fPNU?qY? zr4npR2P!hQ!m+mp#g={>zfa;{fv4(>W<(^0!>KEHv3IxY1IL>3VT#y-xCNhGliJgG zz~TCR5-N6lXqR~m;Ngmma(a_3#H;>e8lQ(by|3RXeWr>OaA4W#jy}nHQ;DMt!>wo6 zBv=$uG?KsZ402o3s*x!Tl_Vbr5}C&i4Xgm@%}e zG{W$JI0HAt1DAkaLTgj*)bi$LqM20_)#aKBt2KET;a!uSz~tjZI!zMz3m=B|PmSNY zt(X!=XQ9RS83xtJxnYmOI}OEOlA^~+TF}cniJu1Fj^2&x>Mr-(uW2F0k)BP#%G6MB z_hU!jjYyQwKekQz)4z_&k2Qr)WE{E|?V!41KpENw=vjE3j9}wKk`)mL#NBYYyy|Ug zTXULiYB_w1;*iDH+bIi8xLl0tRd(?U`sk6=bCv-nynP14RgoP7d^sqK&lnF;&&zb> z@KtuBgL}3Mr9R}I^%4dhD%l8&>oCi>S+nq%Hqu5c0w_LB_rW70Y`1@Wrnc4IT-{7x zoQKk?dnAh(0qH){W%mYx@lQVI2#(B*?&b8(%oNc%(Sb9e%;Pz?99ISD(g(T@=^0Qo*0eMr|N#>Z*D&-26_DsrtAf9 z2yEXA@K4s2FnzE`5;+|JBF|0}$I(x&^7o!UHE?an%$1>0jO1u`ygI%TkZ?oSfX+@j zy+3nT$7{(WT~}F=BoL0zLpB}LVXwHIvzeY_@$V}3)6!*1&MGUQJ}*?kjq!N^2=)_A zq0Ux8I{Sx5Ralh1d`|A1C`1N1iofb72aSQ_z@HU%dbdN@h3g&2igu&!OT<5{=vxx% zWQ$pNMuS8EKNtLHz3*Q+@^X6rJ`kwtH{)k}cFV85@MlVVjOEd~rMtbRC-DhM%_5H& znbG{uhS;1`OPxRMot*|06By^6S0WJ4A2&lrpD|1tSXco&86f^ykU1=9y?k#!bxf%C zpddat;Q6o=C67&Og%$ce=+?)?W z6>G#w&ic)&I^j-cK;ojueIS3dTI}PMd>m02arNDq>3DqT^*@vk@Jt2*~md{b2r%;bOXT#%X8F9 z{SHrtoP?5(=4m@lEV#R{+y}UvQ(57S#uH2N?~}Is@8+uwW^FSvnRP1fUWVns$g6|f z8cH({E=s07w4CFivU=>6!4%IeTX9DYDM%O4sRZ68f{FV4W$0K^bR|Ebu;mlh@kAo0 z&;Cebbw=^A9B46pid=r-IYV?z)=MvOHV-?Z>n?Q4aU-4nGN7 znmh3(!C-p6{Ao;G(Jstz!AbTU(%1fw@g$&?T1wJJt= z#7J<+vWVD=i;{n2ZlS}8sV=v)7$wg)1)hpE*JOAMqlR?zAo`6OqK6Tq28?5tUZwEM z-!Kk%7`Wgb=4iMP*CMk0_}yhnC+s>U0F@g4ja}MJRLx6W!q;+o`YuLDNypDE{EF5v(7EK=;v7nYNd`%rSiCKL(p<_SfnewQ8DD4c zvo%b_%p+T9AH@?NvBsC9+<=i*;wx$s7oZ64Or}M&#i1I(g}kSpq;2msCD>|ez=X@X zP;#KfjwP9)%B&h$vA22`a7R`hj&^)SVmr86u^P#|xg#;Kp+ zUKq9+_mb0c0@#Pcl?L7Fa-#>NP)^8#A}LB-5|paiWRniT*$}7hUeQwJ5B*gv3!Ow1 z()^_MA+%3oYHb5u_BBgCLcEDFnb_vrnn$k2&*N2`d%9r9NgFRfQLcQ+$?$fy*h%#k z7s7v(kt^v!Q5Y9%rnHTo=gl+eH(OGX@3m0R;{nt`h?cFgP8%8hWC%U%t<@=WZ1>=z zqXi3XB1lq8Pem45O+{$H+-Dhx-SFiY=OqMc;tXQ1gp<2Gm4%-xccv08hlRw%6 zJe!HGo&4P$qKYedaZ58wQvLxC+cp%jgA|d z6|cYVxS5SgX0#}{lcF?fUw>RbxS1VX0N$8yUIrHy__79M$yXjkq~IT_{4(u0ZkaeC zZ6ZYI^mQv%Nz>nc92c2LFL&M?Oeq7G?O{n_^xHq9B#t1%D@pc1aZ>FoRVEu?_gs2TzA4qi>n! z#9~95q9kw?vGA+QmhE{$dVTUn>2q?GUpt0gfuR^aEAT=7Q5|>(#yLZIlU}JvDhdFB zdzg67M}4a0A%QIZ@nmXq=2^-Jcj#~!gk7|KnSEchC(}~PjqxQ*^f)7bA=DC~WTB8U zp&M}lZ`9Tb=-P@&l{_j~@D~m8N_BI7UIK2um~*xqk2ND$`{R3M#hgKBZj*mjdT+$b zs2xca5_y)M2DHrY7w?g7lv#LbT0lbrJlBTSdfKj z>vhy$Hk`16Je2XvyS{BHXAvqx8dWD%<>V#_CCuN)kS1fpeqlXHAZrd!`ES136d~1eDjFSWca?CsWM0G zFF3OVR-CZ7-S%Zt%5es;R^JJ7v3Yx@XTOe!+uRYas^;2yk``05B6o%R!s>P^P3#QH zOsE;)!`*4yMK=M19Nge?VIM$wdjmgocSKlGb5`z;Kj9DXW*gk{jv;Vaz!7lJ)mi+3UVPI*!s)fEd>!g_1 z>djY6zl3$rzlZt1WgOa*`ozco{*T#j#137B1p=}s2Lh7+uV?>%5)%I>sJB_u#%)~; z4lewy0_x6g3^8UoXPA&V6j1R^auE=-Ks6!+()+s!m6h;_ggKz~w{ zH8gJP`RmmQDito|+w8c1(FIHi>|2Un zx3{}zo!yk?dTAK5wZj#pAH@ER)IPul9vS-aX+7Q76$6g_f?DY=PPHAgL3B50^My26 zA1=k94a4l|Js@<_Tq*OtlDna0og3SIQz7=PTi@xL$&fASlB?#1PCpQ;jWo^Bx04*k z4#H_gqfAe6EIyWQio{MzCM<0Q!Vt{AF&P(Hi74Yjs88fDWOqt9DfV^O9l>H(dI&`l zmuP?}BSf*!eiVm;iGfrKQrmS@4X%~*S6yfGWGRnxYhO2ZF843yF=60Gt3Ak1ekB&h z7f_E8ZkXjB{h>s@4)Wx@sJm}Z*4O4hO?*jI{4Wo%*LawMSaxa)|0o=2_P}Wr7tt{( ztG20btd*&J3Fqk%Go5-oB}W5%uMp*UqgY)Ln)l|452 zE4hHn?`ySPWSSoJk~xrPvVCB~;2x2jkj_G@j1u}@WTha+PkWo#j_w-xliN#GHL*pY zFt*HluG|5$maW%*nXLZ4>(%OfaE=ws=zJT&&fj$(uTujSd)POZh&Nteusp}4ZZd-# z)LVI*^je(suT~+xmyk@GG0XxK+Vx0l;gWH=H*{s1_SS+vv5=>)u+E?yvYx)aw*B(_ zTDL*IMd6t|oA&cQLZ8{-dUUTVd^*BVJ-2G70bXqw-myOw*t5LgC1X|!rp==8mTc}n z%hwx>PC{n;P-=q=Q>e|F!x2moe4{wR8lZ#>AKf(T8pZ+J&0BVGUOr9z7Tb$ya%puy zfYBdM>%g~>!eC)BpPv@qCdid&jCKHGY#mJr;k@>8m8>{z{-@1w07lZqsQssSw~(Ol zInAHSWcOUoN$aFs%Vem^j1iGLI(!9}H!}#xvh&euUYtW>;bTZKi2Z2nNb~_#CMVb_ zW@#A(+z^fF^l6nLLt8E7F+*_5@a#pR7TwcL^o;za&W?so;imqFEclF`8|G0^84+Y* zz@W^8M6=T<`Y?9>+Jy_!wJ1UjZZ&xn&ucq4;96JH{=UHVz7V{WzwV?oG`rZ#X{l-a z&37taDF=R*ml0ruBlei^uG+ARJGH;ZAt~@y$;oS2W$8&vUnWe86cahFXZ;6t2R+yu zF67Jg1^)gn7LO2<8^#1nAIozlLTGmxnv?fN98|jiXDz!?v-1*eT+ZyfuX{b8(c zjH)=Zavd$@;n~1-Q!V4_xbM%@1|Xd=bpqenv)k$riiX~UJ|*PW5#DbN>Up9hAH-6U|X?fd?O3}Hq`)=zNqdyOWK=^ zdokn4e07+!!jwhYbRA%S;Kh>anc;Udhl3O2`Npcmr>Pz(`h-Bx+I0sva!yGtkLTCG;M8(MN4P2ucl#=NuKhlfriQq9{epozSrZ0 zEaGI3BDJjhT&G0|H0oCKeunF-fX=+w^vG`YU0zzA$)e6@3Jz4_{Qk=y!Z^dljt&Wv z4erN%u`6KmgAmKb)7DVC+Dn5@lS3Erm9uV(Rvdhi$=?O0Uavj8jJUtK92m`e&(14y zIbLJrsEBOrRPhNLT4@CfcNFR%aOSNoMHj4_w)1yyqJ%6mGW}`sJUkvh`a}C?dzhsP zsA_P(AgI*`vJP>>447TYJt*wiI~d7H3h{m#s!yzFuQMDO+G`4-g(k?6ffEF`G+lq9I!e=u2$_8xm2S~v@8 z<|<476;nrm?~2FUrAY0SF>&v8E~M}^n2sHJb*7wAH#&E*t+uVON?Yu2zPe325#5h~ z$w=Uu61VHUgBtAOa=z6CTD5Z^5(=+(J~XzQcyZv6vV~&QSp`v}ANC@46xg%nSOMCv zv1nPjRH(X)sF=hLR2=AK;OXd996Efv5FaJ9nM#Iw*3MrPjNrOO5r)bmRmUpx1*?S@ zDW8vDI2Wyr5$J_NB&FyJLY;JsN$>dpGxBr4mrYtgE>{^1oFw*m+<%~2G2 z`y{HtcmdF-oG>^6UCJsjKM}CAAEAP)Lw>YnP^x%_6#k3ACVY#JYz6cvH$KVFS;3LqF(2$F3IAlkWZ1|~j_DxQ$rNa?aF`vgxNsY+jl zjnj2z+M;#fL3b7xO~rgSB-IlmykIkhHU1O|v_LizN1e*f%{Hm&rKTdo{l~>=6h**h zW%eBzgq{6UvL->hAYYd{2O@Gy?sn0mXQB7-j{Y-|@w+IXa_+qm6t+n0v`MGmyVOV| zhm?@+wytuMPi&IaMtu*36q4s>H?xZ4Qny7`Z&xt;=$=rvs@T#snNu3?FCA;`)C#NZMflmEc$ke%$zYJ z!}BT^v)(^hFYIZIBO*OH=e=~%f=-kIf(2_mB2$InZ=>EkevssN2g&0El08|Z5t5vg znC3*T^xhwSPU9Pd!uvi^HwurZN`8mtvTL^~x~VFixV2wP5q#ukaGKtEYww~rNS zA3-8sgG!e+RTyq2%F{zswHamFR4g0pcEn&kzFah{gGtx`c_IIC!cr1!{osX?kt8#*uH@XRepq$=5_BKf@ICTk*>tx-o7#4zT#8(@-Zn^ zQeMa*%&}2UJE{heZnWp?3F%Ls5QFY$X;R_`c zzux2}9dju^d;c?F#7hrBcmE3*;AB8R(*Je9u&{Mz7fiWKHst)b*6Ywb}!-8l>A(-^ zal%$HVz|y zfmHchh(6eGJgPf1JyV9-1TBqLXm~gGllqG|61nJk#Wv`CdmKrf&4A(1o1lYs?UtVq+&%=Ec* zdLVT_@vuMX;!kVi!vjK~83CCxa(#CvYZ}2ER2c@k|6x;T;=@QNb31*Z6v%Z74o7hl_84uFTO|WHS2xyQ$J+&K=72O& zZ8s~|lcfBf_VJhYj6HOD*AdL;0N0p#8BpZt{mlG`OVbYmzWsP5Awa&9mcC%@6HS9$ zjb4I_hbLV|%$pOZyPJ=&p`WR+|2`Y>$A!Hsz0a3Bd#8fAev3u#@H?PA8fYs~W4S&W z`UY1k@TC`D5 zKt0{Y*Zp~pnMTA6NoqynT=OC^k3vq;yLQ2DWK&>fKpmpy;X6b)NJl2*)0k)Pq!1QL zxOA}REyO0nVwDFVQk8eJC|(#qwowl=V&cqlN-g~f&ClP&jWB`okj zA181)dPYX9E`GH7cX^3+f`whCqf0O?(ikpF1BSOfPx1rfF)MM?OiI5Q5+6ul!^Gb* zQOzEk{E-Tz4e8b*F3Y$){zK;JKc*dYpoCCGJW;S~#@%)`;QiVnT*rRh=qMdNXXyeT z2oRuyy%rwlD8|;m5w}LT)eWe|Jg~!TOB-dkKBm=P5|5atwkDo_IND>mUlqQk@tqU+ zzTBHUGBr>{mHp6NWi*ZoRUuGz7#iSkdTn38$e@0kGXkR--~n+foFgpLDgk4)J8X{DS^8Cnf%FUj%VB$A6(*_v#Ed ze1=OF6pjm^6^P-=Af{_z^+$)o3Fp*L|I`lJ)eCT(U_6117lurv4W_c^z>4vkxnTUO zEaMLy6ttV4Y>nl{b#KqE(cNGPVb>{?#bQz z+0^}6UdOyuhTYIRo^tBqLHYaGlcydp$t7|RJb=&*MKnMXQt*fc zUCgvaXpRQw=yLCBj(g}(7g2ETCajt@vQm$J-5M#i6BA1EespZiY%IBf0LdT)+|zaZ0@phml}B6BXRl<`lFdu)*SA6M z&f!O*>ms?pYLnyubmBClL8l_SN&w`*x;{DJvn;2f_zrebf zGNo9A5yLx1no1l+OYUjswEKkd&aIM_mm$A!gNZVgq-r_}wz9CH21n{ALOHez>|Qf2 zrI3S#Ca}ovuCRc%eu=-R9$CA%25C+LESdu5r++B3n;-p-?v$ShHr|kNW35Gwa@W;2 zWhnbZKi#HVM%J667Q*L`pq%)8MnR6-Z`Fjpiz%>ZavMm+9!$%(b5g0Y%sy6N>MAF& zcy)?$!?EFSS1-Jm$4Z78BAAGOn>jq4(5Y^UYm9|XjkwBO(a$ESV@Z|0( zEr>OQfc66=Wl?9CbRDa{l;vlkI@w~#6r2V92=9c@P1 z58Oka#D|3lTi#w(5`ulAEjS2<|NDKa{YY$sg`nRIcG^`2p%fW}#e);x-}MN-_n28t z#YfyR-87s6AX!HF(LZyVY2&sWdnVn+#fE$Y&i}v)2JE~tSB6nKeXhyyMD}JBgi>wkW~i93kgA3s7&V%2T-CDS&_(ItV#(i9=A4b{h1k`A)Nuj!-lC9B^$>=5_cU4B~z zTzIn_P~Hc(?|x1SOnCxxA?+5deiiOyzb3v#T`wAl`ni*ZMDH@jE!V#H=)gM^?UVdd zmE$xG5iB1$uBSFPb{hdRk0;eiV95#qeM=qrE0Btgr=U0D6iKaZ6+;UZSbrc1T2ya; z8|v6Eg|aLKB!i+LzQ1Q)_=LN$!GLO+YMhC@0c?o2rQ`*^p_YpRJ_~j+8^;Oo%$ypP zjr&K6KKO-oSut^eR1+VYnpRghTN=roHbWksam!Vo_o~WNE4_n7GpHGz6L3~W#``j_&TWurgbnJHWDs;qw`q_(wPeJS($ORYXCzCD zW(=Trk@^}Bd{9{!A9ianp^crmHx5&Oa4ctPWHHn6RK~Kt(+(&6M>yT2{M4Upv^5-{ zFIB|dY+R3}Hy@unEZAnJJnZ4ti{z2YXp9kiAU_*E!%19euH?$|zy+J`IY#r9m_Va4 zg~gD`W9W+6;*bSfj^`W>)7O5c_)`oem!OiPzE3qGtNaan)o?-&>@CX$0@{XRb=iFN zkw-3EBAuLCPS(}puz^=)P$MLygY+(8+=nW2L8Lh7l!GAHJRgG(jCWKe(6J17SB>oO zt4GhZ8lTX^FNnU-^#YP?aB#tg5kkpNOCTN;3wF<4n)huYQ!WStm$4!t4Z^%j2osjn z(W{ef{wW8qY!O1B$yJ&IhlVpAkw=#gSQOoD*>z0p;^6A9RdJyeK{%luQ>#?YV(CYB z9jfT1>O1be?B{d|OMNo zS&!ez-s1G#M#?sBPKDf%rtl9=qO~$pYQC|*u}5^3cl-kOBO+5uIJn#{Gc^hT!-@VD zDxB;4el%po;&rcUufG$p4*PS!2_0I%kKh@O2~mF<8ZQB%r2Tn<%Md?+8{^HDB)GqO zLeAQ+#vhxtjd`LOFuo zCVlxpBvc0M*^5?jyM<$%b5%H_b;aOZ&wQHP17#wL{jCiI=qM zhJS9hnKAg^1}{!mwP2>ogG_^NBLa?jDuBDM@;Lv6Co+V7TiS$K92M@x_CcXB1;U+B z2}Ri{|0v_cG60&MDH5XZU!q;{%YmH`&eRp%tTDS=SWfP%Rd_XIAl}(?Ss7dBEqZ0cr z)zYI-^4+t0O!_dip9`kVG2pk!!FX_?rPeU1T;{yB{TwL>vbBXS}E3{QVc!N0TlB$HNkiK}`fE zq|wfa{Q27V`UwNRd!0k-%Dq~@GJyR%=W%KFl__wJ?QcKiN4N97h)=%w#ReNT!q-~T zB@XjhpL()Hni7N&7)`ZiI!BAj<8CzyglAK|Oz+#9-GM%lT{F_2QBI+b`K|HBeyOLy zQlQ0pO)`c}3K(M-5j6fVi}KWpLjq&nxdKxmNw{;jubx#H^-+;HY@KJzXyzk#xnHJI zjTm)C32SLcwO{%lwJltGG#*}J9f@8$+X$muw8Fl-e%?FrU71zew2=8dJN%sw;yId* z=RsSuL()~Ha8C{RYk674XO+a8#4U2h?E&Z@5m5TLll5fa=x}2^t+Au-SkCZS8x2UQ zya$OK$U#Lr({)9+dd{}1apZi3Rgups)7i{fr;|6vGs>w?<)yU4EldJ3Zu*jwCfoig zZ{q%3*EMu9kuhMf2XeTJhr!N>rANFN)S_}!o!B|iYFGwE1w+RkWTEC1g#3&k=rJ&P z!FnwJUh1d3bc*EXSb42zHQaC1>SctlKghN6^j6bNT0%?<7IwQ}D+$>vxTA#9@G2ft z!NTJXY1X8kSVYJ`xH|?;i{y`AA(WoAk8v!Y~-?xoGlZ*HVOk12N#}G)RGK6#^hQCu+ zAxPi8_;7maAcE2*u+N)0(8LQJLjMkhboOo-8=kV+;)0Z_bKf%zacLrSq;4;w5Z{iX zW>GZc)~Q|0hhzh57J+lGF3p-}6ys?jC0^NS>&1;hd!Fq z0q^y|17$j-J&z(Sm!#U7nU@!O>EcH%@eX~ziE(YqI2yzovwm=5{ z+q^Q&E6j1oulkBQ&IS;HZ=eUNF*l&8$fs-2e!&%{^arm0ltU*v>3y0MNYR9?Ed;!t z9ZQ~%hieB{rSgRQR=kDF{8PT}>u8wyX+R7kTby?ZOkz7I@anbhX17y_(Zn)mJjjDk zp^}hV!25~*E4aI1?{#9vfi&+3A-sMzj9QhJ%db<$(AugxCnKu`=U2oIcL7BzP;HYS z-!wy7E_1r7APVD%fEoE``qULj<|-jPjI(ASLimfgXNCq_@W#|)n@>~!91XFO6erMq}KP-e~Di|?XiAO-$X%>XyQ4yso^}7@u*a$`J|OoBX(+Y<_pQw{VA^l1OqTt zlp>{5VJtoF(qY84IST?bKM~99tuc9;=?ezT=syEtEFE4mU@SGfWrI=a@stEZ|CHsa z(R-=P)}v$zgY|YO2qIArx$Y_DS00~F4AS`C#lRSK-s-vTjnH=~)38#PVGRet+_c~N z!&utjDD4G)i4JR)pifGxQz&jW^Ku^M=?rqxsZ-3yh;)aYHPVM=#Lb7S0#MG~GezVW z_B23@xGf`y^mM&uUXGkfBiaPAP4$Zr+#|}^ZEVIx1Mf^4MO4`6MlB<_71kL$tSRG2rhEh}(^$}pH z!{H&;M-GKY^|1^yJWMr?J>xIQzFCiO7V0eo*I5Br;}G|{ZhlPNg3S$Y7ve83SGCd9 zpKI@$8?3(cQiN*p4s?VEa;5M{sTDQP(jSRrX?n1yUSSdl3C3tQ*0yrwiR4gjEOFz< zv(O_ky;Om+Ha(dWuR_uIutD(fC3X%lwlZK->~cgl_W4bmGWi`Em+$kx4x%o@ZQf^l zZ8ZI2{~v4T5TuI|b=k6g%eHOXwr$(CZTpt}m0h=N+qUg~fApwF9nsPA9ONJeC*$nB zRy`!4yo*%^UYk3}e9cVFjCC~?fq3FCTxW!5x()V9JD}K)bB$;AVjY*QF(`3_l8q>j z#4Wd+M%1X5da_D9&9!8OaQiK#as*N_j&CpKmIM)&4eVSQV^c8Oh9T>^`9d?TD}!gNu`kzlS=Z&W{6~KAQDz=d~|L z55M6ulsn(5F6RczcisUm=oCHGME6Fd^(w7??>=`_l5!($0<*-=>wrwwAFY zubTeN5A5(U)Xy|ZN;j3bg%+@K47|w4-_kQm8Zp*8VIps|gPXeKTn|Xd0Ggy+zJLQ+ zCTMDWlQAbh%udXfOn7Yl{Of}2$e4SmVbRe3O-aM!tm{>{aXqiaQcH0F1_H-+LmSpO z|D6A$7T|BxF3@dR5Q%l^=X8ka*>42BJ0p)7#p?89?3@WapNgeKr4(|HDGIymTux>< ztx0idp=;SLD{hJQ5Xt)EhYAyxBzE~Zk^I;o2yizhs7_(JIKO|Y@Pf{c-On8A=*G3&trhHAe}naaLiQwvga4nZ?ZCXCk!%P z;K2h0_~Hrq)EElm=2(&uW)cVPY)G?OtfCKiC_Wm=l0N)@GEu5#%!Na;sG~FL$A}kG zDHuBOv-4z8Y7xulG;@DMq1()qvy^Pp)I#5+NR+%ABa^{^W7`*m+=9axzzBe%)_o)} znA_PG$Y8|w$Qq(bYn-DCXz8NPb9E~STs6S@BY@AG2VDs zh(XJ2!?!K@(QUtR7H#n>u-cIZ7UH7}x@GFQ2?QckfOAy75Q8>L*9PT6c3Dz_pue&# zYcGl^4~LsDFUyKO(Dd!anf7q%lFs{EzEkLCkfg4@BCB`zKUP;#hSz5%%V-`L$8hbd z!rS-SzvCP0=BnND1+5Hi>ISG>b!+nO1@z_Ac(%i6zT;KiQrW_L=RH!i+*`6u;*IE* z;lS#iBuyH84=(-S<)9#u)0k4$az{>Q6vVPAHPKhs-m~DDR*fBpZ%6mB94r|K;G0n! z8JF$*HG}^ljk&p1+!BBEN{(BWUR5ByFj3!AnIxUTc(H|S@`^oLe;?4~k$@PSb0D%7 zt2rDPfh4zmbbEbVJ+!FW`}Q*=L)a{4vkPuHb$=H?Hb-5WX;APByYmyDbwp~&o8uk*6mt~qs%G9d25RGC~ zc$1kXATMEShGHiQJ-(nV2=*|DkBwe-AkjZMDbz zSb&z68ke9$&pfs@zOHKKp^eD_+Dt&Ckwld!Bo^n$JjE67R(gCnv)h)=bq!y@^*E?G zU2n9gNH1%vZYK4UO&+J1C*+a-ibTVtas2W$_bc8L$}{b+E`jol!DM#0@9+)D`KIH>uIQAXA)S!!WPuc(HP5Cs_ZOiJMjS!qt>CWa@KXVVO@kRnoTcj1yvCrm@NRVtIKb)IcS25`Jc8JiG_@~_(g-Jca~Bp#VIzc z4s?$?z0M58oCCKc5ByU%G^Ln>A#ZP3aQPa?jQ8$j5-X)zF>R?5X&R3sX!MIa){`uy%w7 ziZQlmV}x~5dU(Sm-$T;F zMJ3m$#^Ydrgv%~khT=e1zc>e@G?nITuzG59to2^5IG)=@zjiO*>zL#^w;J1B*=Pfb zI@xQsaU3_q zfyfAimBR~Rv-A+>{sZq2)pAe{*NNx{GOMo$>^x#sozGm=vj%WLK$Cc^5}fDjAmU^EmQEgK ze_xGH;aurHR_+Pj5J&muqT1Nin+3vPn|kU4hef@NDKFnk_oMm&$D%=VcCkdnjKoN0<7^N3?GQ<83CwA(;=Vr>uH6?fILT9_ou<4e_PrtvNUA zr_vlrAp`sQ{_zx1!`~T-rpqz(A!d6{gv3&E^l5IYYMMTd7tYs1QwL&n>hN4s>lZ!dHDkc{ixlVI>Mn67^q_k|xW zi+>vcwLWKXG7iC~A4RF^K8zgzc?oM@J@sI>_6 zJPtGZX<{aT=HSyJSCGt7Uq@4>kEy5m^ECU&_z^<6LRw9hU}IvxeGix$7xM`I?a)#* zg5xm4k@sk?Xa=V_^<7}4zdM%@?gJN{3p;ii>SgEez}DvjeGzrCD?Ws2e#j6hmpPHC zYV*|^f`wwu_pYr8hdu}f@1mCmU3y96<^DIi@Z`i)hOlSrutEp}ZhZ|2H7{>REu}@s zxKAkPp&A*iq~H{HjUiPdWr1imyrsKtE%hxeYNr`I%;9*OKE|;iFVnF^oVz(pKgzND zM1G(qb@B-aI~j~8NSS+Qz**1ash3q$yeng6;tiDH!&G|s?9RL}wV9kTT!GcCXp3ny z5V{Z#D^6y!INZHE{zqtZ$aq=RZF7__rtU5aIc%LOmy#f-O=imDly!^GAdn`u?)d&i z9VV>u?})I#dd+}4(RZ1y4CieTPqk$=;E4P1f7ZvAprDvl2YU7`p3oPsrd_hYc?`*x zq8vbMrhzu-tBgC`RPsC)$pWA_BfZANDjI_-qWSAbQx3^`v8^1n_gNJzRg)jwLK`b(KfQ zkMZwYgRKjf%rGkqzY>LB8YCl2SY>VPPH{?V>U>mAs}eIurP^u=@C^rkf1jBZr_5Mc zFK+#W-YWFdly-iv+me~AC&30kufFmFs9zK4;+(&~9GLAg2?xR$nfoGp+$lOeUT;8% zdB%EXkkzhd-OXhMZ!A7HjlmBn?AF6mdN41XPXP$Wg4f}Mt##pTl=km3^A<#iDZAk?MQL)4Bu~CYZ4G%G5doQbk_AsCBw4tS+dE zy@)pJE7;b~New*Ldt)^sO^ho;MZ~URHixp0m?EVJXw_QF2Q~8-%@wV7)OS?JMU3vr zFhLcK69!HU;mamEI57RDC?mDJzVX4azgKjl4ovo8p4&z|VrssA&Xo^fpqH}uRT_7g zlxP_Kar+JXooNq$qdOg4IyQSRF64XvGMI{np51M7AjTAyM$lp)Oms37IVyhq%k4sl zwg>GlC}OIZK=q$uZ`@FP&mTs+`K#l#WczP9uJSmX2ky&i#QW0b+%OqLmJR8$6daht zUFTN${@UC4YgAXGi7@2~VMlWvyoda~#231prnWV9vMi=0 z=Ya5ri^OVpiStiLQ*opn<1{6ipos~rxRLr2kFLF<>Z1H#bafA#f)&PIz{@0sr(o2e zj_+b1fqUzV3}F4pIzCNX?AHQ*eNjP&Y7HLT9TZ#Lt+RYlff8f(X)*06TnVQw9sGq7 z{6!ep$4SD_DqK|wf1YBB1O%H_mUNhL{O`EIvcd1$@oK`|r>b9L zNWeXITHJ=n1dNV@1MShI^Bp(LPK+5Rgs~4=0}}J(k_&AB&Y^R&rUqpGZ$O&fw)7w) zYVRx6zr>a>Iib4|SP!B<4BamJT+le-*;F!G%IHaaiS_#_UjE7KY9yX&ohjr7gIe

)C#Lf5YRThQ1HHCq5fHPtz@wOWZ>@v?Gs%4rdQOwBLV!!saF? zQ!bj#Fn+fOP0IezI`O-37Q;3E>7c5w1(*@#e0<5)=@t;a?6YSk`UY}k_&<2{2y@PX z)2Cr3cx5QO7w;I0ygi9F_=&GVew{1ne(jCygFTNCuw9oG#ER@rq?+pL->rqC)%hO#v7_ifST z7QW$(^$;IAL~saoncT2+6R7)UU&Q`GeG$O!1`lwu@po@Whd(>#nQ`&2Kez-e9|G$+ zxcuR&=^J+oLo+h_ZQ7Kk3&Cc>X16s=$g%S4M; z^Y)SAd-^t+2rtRgo*T}s@HE;tbx{L#(O{8OFzo>M`!_rLn4#gy*kg{=(o=ypcTYoj z%$I!DJFmqnBo~7T1V~=hQ20Gw0O8BQSA@9&VU_9!H;Z$jy9Gn5MN{x3tNAKf@oz)E zdQI{MjRRbMyv9alWiD9pAU6DYm$|g!XgQyG^B?E`07rE@xCH zQlqWU=ai)qmfuNLT}c+L^vmq>nkyCQL5D?z)exOxNO~Djmw^B>F*^jnn>uqeR#Z>? zy;;a8Pk#R~hjBR1(EDV=Zp?+R-?i9v?5AJ*zU7R7{@G%eg(wt zrp%yCY&sE=<8XO;IB!UT$c-$PJ1$OG)BmJ#Y9eGq>w}=D4sI|Wu~nEh67Ew5!_=H- zqw8J{NK?Rei#{_(I+~lM+Oe%r^L9g2B%hu2ewC>A;n_Wo_^y z#xkrXT@@$+O7Hat+py{aY`1dtSb5cR5qI%oHwTZhJ;`7>Xw-4CTVEeB;^jaT{Xd#{ zB^HE=;?PE<$Lli}21tWRvvpcwl&QCfWV99zRHtlnS+`Icj--UfbYZgv0tD}6)%EGG zXiIjJ#oxUv&}St+abZ}I=Rh^G0e$;(gmW?C)wx3wb-)R_s1=pfN!NB zg4@4P`aI>8l9@|AUDDa5!%my#o2bH)=IjP{A?qr|4==)qtq~PI=_N%uWHMo!_1>-C z>M;|u(P70&!5UrHXV5?M*27$i@uQz$C;dC}jWG(^V*OZdAnWmZeLOK|^ zaA_ki*E~Ry#1hoTrnF~u36`poQL}07)^QQ*0AF!pIua=^hujs#tCl&%uB_KEk45rh zK|ucrj{jj(wA@>OVyTMB`OKk95xL4wOAlL`@uyp#K;M+HTVk*PdWz|Y#;E1@`?Oq+ z)RC&syVTnqpK%<18zKcWHAV!s|$I+%G zG)q{uyW zvc1WlT-mzj2o_}y&?6fxJ`0SnOJFOZ9%z3F3~$za!pS+4qBYvCEa@P0cJs!W3+Z_N zH(UCD>>yA;yrl`c2c|W`w;Vt~mf!zBn~b(*p8t2D&$ZvVH%?pA-Y>7%=zSciPK?>Q z)76l?wyDg8iM>%uQ=VCN>RJ<~N-084(_fe5PZR%XlPSPd$yAE0nh{OmJZTH3MXygn zuP;*&1WcH)9i{E=ucN>B&oG7#BEBy&FBEtAATK9Yd=t>mHRNf^Ic;Vx7+{gM!YpH* z^^N;Xmf!TSn|;b+;J%{Z6iYQzex^e9vQVuL2GU~iUj65Fe#9#vTO@D(&T^wb-%c2G zZ6x9J`w;Q_RqO8D7gQSFVtvGscXCJJ6R>Y8OZGquD{ldK{2E?a`P{#HI)UhqD-P#Ld-oXMB*6SL|l@m#TPvOiIP{5QqTTYAchK>Thwgk6&cCo7#6 zYRMI@y&1DUq^p+Ng+5cp;VicY+fCILBWG!hp4;)~AdKDy=>?b268ht|AKo91{-~w{ zycu-*5DN;!($E-uMTYUwuR8iY>Vcj@9R=yphgXx>$b}svEJ!E3eofdlAxRTHF*^ED zFLTWRi{peEbNq7j;vqms=BQ7FY=JAV%t*O3V29TjQ1)8oK>pP80a$Nd-kkWR8Pa`$ zsnev;A%}}U%>lfVWvkYygsClTWAYz_+jqB?p6sG?!s`P8g2<)QY1DxDDxfIF8U6u< zy@Y$GbORS%G!3cDN_z~*&#nVY3TYIV@ZxizLa&uR;eWA0E(r9NV@i{8y9OEitZ(4B z93)j-6_z6@xl1L;EIpUNpRr1qi7|$xQGZsIdSFhtF|f5=DuN@1T~bMgJue5!7x(Y2 z9NB#XV6s1sNO|%rH#qU{xNtT(|7lV?N{9$(O=wCCCerEpmX!wJrX_+c^k z9WyRQ&&Xnoct)I3U=hfztqqEN4t3#~t~VoE`NJAwJ!VRY7x+QW(94kpv2OMYCwm-Y z=))rUUvTDpFTx#wKlLF|a@Dm*V`MiAINXPJb$DKMWaYe3fV9C){-hw{3s>OTt(>X{ z!n*?z)PYZsp%Hi~M(*Z{+)#34&MMr(doEXgkj}XU6F`VV*)I`0Y#_`1a|oZv^K>w* zPq(Ge0uH_DbP80Xsyol7@nb^f`A)s2&%uQV!-WXTg%g%b$6+CrYd!79Xvqe8CIj-6 z8T9jDMs#^u5399{;S&Aa8}MG0sWC;ZPMhwfM*B2MV84adGG_s zCUSdRgp!(CQQx~7^|W_&mTt8)+f}I5sUA(!#n^)}MW9wyo#~i+$&OH%(pRHy&FJv{a2rv8wCD<4OG2o}Ku+ zYn%1m!35NzZM`OIs4Kow$x2ikz3Yfd=WmBY?~)gWBg((Ar`AF7Ampm`3apEeIS$uiw3{5`TJudH z%a#%md8-g1WfND0Y`BopMOMCR+|V*SQ_nok*!93(Xp==s#(JW!&GLkNoS*eeQ9G83 zd4Jo$+m&oI6}z^@_%*_aG|+TzD6Jl8c+=Hbm;WwKCmK zf}OjuXu(MH5<8Q~iZ`XE2YNRvyUXaAwS>Wq2+B+NYDH+Ggy8YDY#gXt@rl9Mdur$psPEgP|pHM3}9#t=WXI>rYec@@)0`0I7aEz|?jIF9i_(gCQ;mcU4r?uO5BsDwrJ>FWu zl?N8$5ZaK_?7OBXHA;FiFQFJi(915kL^O0|tIhvI00jO6w}URh~zI1$sUxp6t4=~8v0gy1#b;w&vSa)2=G!G6e_t06do zIcey&!C*ZtFVpeXzhbp7oAdS@bxz@RtXvu(upy7rlOCOR5PjQM?(No6{UUqR2o=Dw zlWW+8PCogr9>3^n?fG)rTe}zR#*;)B?D`!2(wVNXXQO=-N}a3h*?aI)2Ebw|_7QY- z<1|EfGRww$P*>QCWM^(#q}A@1bTlO1G^K%Nu7!wO2hs+s4Zx|l&fJDmYY&EuBvAn; zxeE<4tioX9o<&ZWt#pSlAqG)ZNyG4^Zo2Mb{!-> zbvyrU_@@wK$8TRXG*$(-RJ*pnSGeo2!4>IklLvB@XBMTRafJ;WQu7CsU!MnkWSsI#1K2`npb)?bNQ8i=egOr2|P z{OM2jZ#kNsx9m4|Hnu1TB@9D1|{B)4`BstDDeE-xD!z_L5Ogzxc21F~dx-!`LMU zkCpjMyYn@Vju^okxf$J&@X)kO@p7g(vALdwy)4t0MLMKiw*KiL9^&NNatQ1r&}ioq zmFCQrNLxg2@i{@h8MOyDT$mbLnUPle)5`Eb2re zj&n_ByqulW-%SZjlc-IfaH15$A1tFM2Gp;s4ss!Kct4AdK^)cJ(!ds6jDtDmPV^{; z+Cy*J8q35hjL&dc$V8L%M z1GR?AgY$2rT=jG+_*x<-s-e^?k5kJSrhr=zGI0z~k8#ai(YOY-%Pa==*7eQxzQ)df zX$@~9(GtubiIIbQYWRL&$UM-UqrLnm=JEaz9=ji$Mw+j*eqsV zu=}5GB}ma%FI(}w{Lr(aQcNjXULdk4tTrjs%2~pn*7y{Hzpuodmd`*TDo&y`Ml>2< zYj#1<4BwfU{ps>7W3418s_}M36zpE9-w?;!>)^j&Iq^Aa3eOyjXtc=~$R?aYW3YB+gz`JPjMczEwaDSD5gMPB>ZOjuaGt%aj9-RjW$*xSzuvn0pXizOxN z#Yr{WaP%PLAc@>phEd1h27=(O|M=jFLbS*4-1YMC6g)GP!vxhe`1pPIJ7;Z-;#WWSgYNXo=JspcA2&<{f z>|@*yf~NQbj+yP5ASF&_&9n|=Z<;GFHFycRPjnlvsBatk;u+zHDJ=f39+6TB|2Wu2 zm%fz063^a48h*K(Vt^cipIns|BhXc z7!5#g^}^N_UFpvJ6icwSW#S$Y^)P~hdmxtIF*58A544!_>crQmZlN^qoX;1CZVbmK zbC(C8sCC)NV=O`36Jg{-d|0X@^pE(Fh*MKz8b)>`!^S+vO4!8l=TuhGvdgek0oCxG zE;eLuP&eQO1;iE2g(7Cf>Si-VZ_E{n$>n+h#u-jK*Z~n^f9ac2PYq-KIJaFc$Zf^p zZ2i{*5c>MBrA)(wj-8H}63Z8XW*<|PbOvK=o%uw#BS0yPrr8y_V0cB~syqoBl@r!c zC<-^Xd-{mM5@!^38=^k_eCUx>S5F~I{}D)AHB>j82d#i!B>!4RYa zTZ^(62x-0wa4KTs4@`JOCQ?sz#R!pvqk&otVa(wHzMg6-JC#B{+*aa@OL^`*|1g<-Fxr6D=xVlNd6ZD zFomiqlOP6`NChi-HIcRM^7h@Tzt~q24mW3f;1G57=wf`-Rwlh>KPeV?dP!|qpVH34 z2qP!A#LtcNlKWPqwMs-WRRPLmA|{*{q&-*z&Ar~@@d?M(<4C!JsA=4`vc*P))Q~MT z&l`<4%t#}nk)wzAiyU+U(|%vW&mB2IR}M#rpIB_nENHl^#aIh|bM1yK*WfgS3&<75 z6P~mU5^8s+n`*RKpP6datR0XOrx!NtelD(}G7G`*atAHe@24QyR9L0@M~pI?=FB9e zXeLm3Z92qVJ9h=)MW2>xB`z}8dVU`tZhShR1yI4uT`OI$0Z3OJt#0EuS z@U=xmvG!HNHg&6R>mShtErWZLGh{zirJ4<`;3_LjM|>064)R%C{&EB>4##laJsyQG zqgv1us%w`B9WF1@ad+geu30jX9UcE*To|tvEF!~Q6R*u&EJ|TIEF1$>xQW$02ZE{n zOl>XEASveDRzhlan20Pjn?;s}4^X8s)ogV`%1~b6I6G@i^Pc+bndSLW$uUZA=ITk2 z|5%Z3GzynuBT3fpL$9QdDAo`oOQU8w?Kzsh)Z|NlOPOo9h zfuq<;9)Pwvm`IJS0S0Mu5I7j;==Ndjy0s0b!ivZEsocD32;cBNZIIk3Ox8wa3S!E^ z0n@U}?Shvn?DS4ZFD+fMQcmTeDv!`?ZE9~oan6c=!e=HLho|^f;izHKGOS(=-ti%4 zmpdPl2cVfrne^z0jeBR5H@3oPz%Yj>?fXuV`zaSz&l4%M(YVQP-qZ~vogHXC=+vsy zg%XN%p%R-AoPr`m(Pa(Aw&k8tzHwVNlF*eo&sQHYW?*&?%97V(Ud+b4fW$d z{#s38J-c0%HhlBJ2z8AxRW)L z2rl{BZT53~^IIcFYinQ~N=W|7^ow9RNt>CbxP<@aVlG>y2u`v(9+P=151iJE;%$HQ zyreuwzU?DJ+XbfBI1j2A_mm%?0X`syrx((3 z;^zt@7Vf%a?u8t;A@&^diLKN4mqLeTx_jXF2I2U5JP_AB9MEXIECt6 z+iMI@-pT8+TR8nwEf5s4ct=-@c{hHo8YP837t;uuBL|+q?Oq$)Xv2JP{iwF!Hr4yr z(5E<$f|kx4ODAYDwI*B~!+8saQScEbOM0^7*@R+p$^WCB9F?Fuf(yi=5CRU#4b2BU zfM_D_JvNt02vqijnxyDMRQ=%9{NS$#O4;M^a)dU<(x8_l-Ub#<+WCXf=d0vtiQLt> zv*;gE*I6OyWXToV7oD_H@vIM45KI_k8-qwu??{(VvVF&BHyp-jvpfGqLmujHDjI=R z&v7pe&AZ}~4=l9~gKVcJ7nr_lSCHxTLB99xeHfY-F2Lf0VVYztj2{P#w02fhZJKIXb0les&FPQunhQ=tHk zCeB^(5>hl-4NNL8{8cy1+)LjeM`l;%fB&FO8w1qk{AP$6)PRFQY)rzHFjR$Zxs%wE zio$3jxE~BN28l^o7zw%m6P)($`9cHsxpfjRos1JF1#K_rCM~n%BB?MW7E1Oudt1m1 zsN^gJ$F*f3Y&l6T)b#lu^%=0N1)eYcA4K}dgpB0_;7j%z-*fScpYylW3~8VdcPfy1 z(+yHKSDGA%wY@#~xVZeva>#IvO1`-98%+*FG@v9!%;I!N9-w7Ry57MiC4}jrS@m?XF2Of@Q}rB7A=t~K&8?`^_R~i zrjwykBwiK%`!1T30#Kyz(s-3>%91Lj)YxJ(F6j0z^Goke906qO%GcE{Ki z&2!~O#;VN3hSkT1soU(q27OYUR~o2dy6}`+#)S~6dQ+je+&zihmoOvhv7yc7lTJji zXj(ox;wMf_qEuBn))EW+nZ8|Pj#LS8O^~*pnLzjWN}46wPAflJ&)RkK>J39_*9i4v zegR2oRvIE*haiPsqEx4rm++O#&O0n-l{3=x!|GYt2;I`Naqi56$*HNr zJ-kt-xOd0rk;!j!ud31w&^p|GG|wzIZ8<)2nVX^5k|=?Yw6iH%O0hc+%uYo(Rh)RM zVzy$hKkF=GnqbCtc!*V}JmLbvD`Fyu?zZVY_oGrsq|?IOkIHw&oe=y@$vYr(+5eA~ z@B#2=?BX7!VY-JnC#ygB5;^K;NJ1^ppYCCS&yjAdRAo1#S2+CCYTqp5u!?d{*vBaZ zG_~5-e|hyb#kn3_B79og2?R9V*a`$(lrN1l;=tDl{Vf?ceUhN6{GmkmXDjes@(*$) z%gA+S?nHiJh4q$GA{jd1>n3sJ%>w7zk&7?5{)wEB5^u{h7U~{#WqltK$ob^e5Huj4 zZrxz!&(Sx%iWad^Vdx84%o%4(#hST#@a=4>Yd^BgeimRI-M3tub&IjFS*eZpNkQI= z(WpNlt65wAxxY8%PQ;MwD|nfm`A{Kz8>X!=*w-Ik{CR(ObPYRhdc;Den+@jIcl1Y# zB_DNd>?G>f9WnWP!dOUk%*EC_$p0upsSy3{efZ~hq}2uu(8KojED5q){)503aV56y zz-x9rJy*QN!j}8ud2M0R9feU}n;%O*69|CCJ>QM}prbJPhwZJum*Zj>#sqJppQeF^ z*!^XaH?i(NM0JDPeo`|zBc=6zVpz~`(ls_eX>zjl{I7%5dQM3&YT%C!nAnMmPkXJ6 zvh*$C_c_Rs0OAaJ$iee*$^P5mfzJcW{SuH+f7g9qFe>@N4<|uc0L7bsB4Nqkk07t^ z-F_tK#z&QA)^23N49*RP{CyK{V{ur0RZA{}H8>e(GocJomV`#DUY{`)D$-jggD-y{=Kq%*CnveQUUhoQ!>HVLdw zAx}RtS|JzAx=dL|jBtrt>RBwfRr9StNBL?|KInUx=4k|UnJH5%&bBy-py6m?? zFlPg5AyN4;Wsg{nFK^`91gy6rpV1eC)v85*@XVp5B)?u2ACg@!5IF0)7nH~c2$NRD4-t&vVZ@| zxj#kV>7`WES7G$Jb7IDwG6V0rteO3}KeavB`MIT0$0g3t1aE3iLaMlN@WZ(FNjH<%lKds7$drT3e`V2BhWuvC1D{RfHEcF)N(^U#gh zRGp8%w-?S;-6Zv2gjop5TvGG}3YaxS<6eP5e9r6rZh#O+7uNz5A#P_hY4tK=yF?*D zery$WF71Yhsr<=v)KeHG0t9jd44xi2yBQ}!T){1pLVzFM=*!zO*oPIRC*_B7);nh? zlwy!d6D#rA<(+a+>BQB5O~gR+Q3Uw+r$-Y?^5sD_#xd1(2`9IV|=RwCzoR-&C_-UA@mbMNiLQ z(-9bc#Wx9;TI2t=q?8IoidU+4566>*xSd2mb8AIgRanyoYlYt@=fPjOa^)%K7t$EM z`7U>&HKz{!v-Cl2Gg)K6KNg8Wyyr8%QF%tRpUV!uYr5t zqwU8aoCiq|f&`towioh>?v2z{ANyBJ5(O1<1=E&+9q>2r;U|(YRv*y#Ki*mMBe1`I8-w^K631dgP&3DU z0({v1hs*Dz1j(Q;3z;RixyhxWL$a3`G-M|}hy*`nI<3{z6UA*6cvHTB!o_|9wg8270LtM{C5Oq)F0XIn&!BfUkOq_ zC!+t3Hrgc=^$YarqD910eilN3l+hD}pPoM1Vzw?JsE^ZKQ~7T6uszJeEpT~v7cj5l zAkEEzs?|3?v5xy(Xw?8+t%?O4<@8|@>WIaI$Gd#zG54~^2j9VBwa9#dm-w7;Bk6KA}h^P!T-*H2gddPGaua z^wm0H`+$V}*be}5_~9f<8E=RQ30loDuF#LDl*XK3DgDqIez$b6ol>L647>=SWkjQ5 z_YIlgD1X>ffh%rj%`RCznWAz1enxQ+x;$8bNT0K9o3oCmFp^8#ekh|=M3eU`9KTi3wP_=c)qs%(Ak5y0nj~z!WUO%Z}wt7UUxNF54{wjQj35 zSkpxk*?cc72teHM-&%dN1lAb+rY113%H1py%9}H7HX_zhsJ*;BtZET0sfqua z9t0_aJ!+J0(dm~KbVGR_q`?hni9-1)1Q!nmdk}>D(pe`EqlgXIgq4V%hvS1^HsOOHmSj+) zBsMy+4y-nvTl|rKz{6J$`q+G+sYT06# zPl-+EFofL0Q8z4V7^(`sF8H1R^V`cVliHj=qM*Kwa&m*aMdnGu}+Qzscp=Lbla$S*jsi zBW1;q0p7EgR|4tYTyo)7*gH!#uUUP3I;Ifa@rRo1{Y|rO)^LA|r#vQ`eSDe1^>ZOy z$@@=O+4OaY$tg@h$NZpt6?$QPvC9(2RrUGD!^$0mcw_L-#uIhBF5NM*b8>VcH5U=P;R6G`eF zwb1+717#V81!Oi4(HJYC?a=vjhVk7>IK~^X4tdC|rf;+F=*fF=a z&%+C*G*bzk$@rfglCv+uz%7v9#chU;Px9C8OJWNQ9MVrcqr>3po^WGob%a6gx4vL~ zL(Q7*iT8$jFKU3&!c)=wInlDb?`7}K?JLgi3!e;b&UY|hjoHq&d7>k=KN`^8J#Ocb z5UR_e{#fh*b1I3R6=mHVw{XTZE!ps%wOS5U#0tgnL0{3-^FbS`)xXH0)iS6=%ZP%p z(Q9+Ir0(}`r)pFXf{qRaFB$&?-;A7jcs1_Js&EYV(b&0^i`${IZnjaVC5?Hze|Htm zQ4ysCC+a{7Kg4>56=?tyiij>nVYgW%V@se2k-fphJ;O6n*XcaCa^-$cg`6j|*BN1# zg~Sp|-z6vg7cE)sCKQrEoJn~w-VPt)7+g^2PbO>nnR;!#N1%SYk)yPABQEqcoQIP9E*|cNpaTiL1hb_T|W!F+|My* zhP?T(29et^w=ur@SjeM^?01e)-(tVS)o$gf$X3h9gT#%?@ zcV#ROiF14HLx$?L&Mk8Nj(AkD`4-8#&hfCIi}#1nGi6{4IxEOm#Bn}EAuF>Wft>MA zko;!$>Qb}2<4d+PaJNL;?`!B=Bo~48rjnL9W!3~& zQKF_>vCFiZJ5u|T&lAly<0>wC1aQ%9OqrghfV5RpbRdU4c0Y)OV#c6O8mWU% zph;7!{j&wh_h-JiY93z{GaXI1<+=`|EB3`QoXXK;KBX#+Rr6L3NGFQou1ky&)}!DR zJeHu)PR2z0R}ZfrAinm^S%m?UK5R2@C3?+o>7OsR?p7GUf6O61GLx=&=_z_=iT5j)JCs?6e~@ak zG!5EbqKxL<8t=$WW(IMkZTZ?YT+g7M6mt`DaS04$$0-WI`TQ2cv=RdLtNV;vY3$C) z9N%g^(zbI9E*tgiD4^r~fdMV}_7@^f0QtKX{)yOAF~Fr0`jxZ|r#+h^9x`R;DrYLm8iL}5+7GXu3)c0;Go=`86aR_ z`aML#F0K>{C{u`k@!Na{O>l8M;t7ff(D$kQ;Vo);|CCP+Rqx*P0)HK!*WgJCbl)R^ zyr<>7G=TPpw4Q^9^ov~*>|=2D>XY`*$3s-;ADcV)UUP|$C|f{mRY%9gJ>u)@NPqZn z@b4tz$TJ@$kQ7!JszZe_P#I-Uzs$su$Q`^kn28}D8#DSZw951^fEN4UgU9=SaduA4 zxp2|4j&0jc-q?0lY}>YN+csBh+qTUW+uq;pIXAm%SIwU=tLB)ayPuwJ(gSQ^+$bie z^#V3P{bjqfF&I3-ADbm;AEkT{$@A(`5(}FVqrDaIe805oxA1=*21r3E2;t2ih_aK= z6)+B?Ai2L{yY}K6Ux)6oHlSA`^+H9<8EnaZk+mHY^Gl9u|V}Vvec&u zp$GbKV;b6SotC=ot-C+EI!;~9Bm5}h7~wU0GuHRby^V2kg)+^5Fg=W4N0v7={ZR|q zARq8NQx&d4O9g6rQ`&tlRoePv_%91g{2B2Q^8bUqWp`{|KC`p?;SUK|i{1WEC@1zA zv^obLG@fh8d~@W14p82rS@fQ&-@Qx@0eiekt`hD!asm}%7y*mznVD~hBvp8t@BcAw z+1+sHra|;PP*y;;>rgxIsZSFe)tb8^96#6VvwV4tK45j$sRcJI*%D(oyYq`wc3HAl z6D1qjEpIpG9PumHl!OWqHx?qg-h_)m1oGB=WLUhP_g}uXOqtz)V5&Q9yZQDyc&eEb z+|4YBW0;MbWN7FtEPyG1rT2yjJ|8iNFoWT6P`&~(a~vz@^u#ZUkAis@-hL&;*8t`~ zguuMfm0;1D%~*6nymg&C5#Dr&dYS9sUec4=7>O1GbtObSD72#Waq=b7vllO$`8A4e ziiQlNvX1>}9Y90-^#k4kS87B4`uG0!pFIy@nqi<=8tn0`2647(|9)|ucaWZ+VZh8> zk`c^u2^MUCw*w)gSc!4&pW^3z_s@0e)9pQP1dqE2lR!r7rBXEc+*?!#?bkX1cN(!H`6!Y)sy2Y^5-dvSXH7|AlsJ5Bj*>qVFG%42Ji`}#& z-9+TMFFZA(XfpnX6SyP++h$m!v&-As*`MtDR!>$^5q^J%={Ta@}R=9rDK++huSwcf>jJkW0^g(`_f!QWp}fW7B|ndsS{ zQmda$?%k2>4czh7Ud|&d&Fp&3D|0|d@Hye&!6)xUYI!LBtEP%6DcMtgYl#&<iG8# z6x-u1@{f)E&)cENlth7)?5Olkxs$Z?0;L`b`RSTI=2){AZH^hoW_9oO1#4p0G}K&E z27`3C$~V9s#jf*qS4}hLhI|YCpXQqrLF&jb0EbK0-?6b1B~o_ONaxr1(@#!2VMQDL zNjNls{q~<8!?}G)vwbz?NHl6(UQY1^e{?NLK^te-&ET{O`A;bF%z{7S|iM7Sr}QTr~Y-PpLt& z+ax&^26S^49<8Y9ntJ?I((agb_kd5xH6hKo2mYej4!6CLU53e*K_nLY_iB&Rj~TZi zNrlFW6OaHlO^1f_WotuTB!*GK(Pa6f4n%0G3>V+gmT;#I+(krm>7|os@R3V(%;;Kq zhOJGDDj?^j^l&>FkA3R{vBWNgHPL$Vl@>gD?tw!0{rON?_v(H&{cVll^t_T^*tk@B z|B0!ZxYR|gK)+FM<$|uvb`s&`xgWoU^f~VT9`5qyB@O+b__l)m!)I2W;!7O!!xP?b zs4#Qm9h)e~gh#aaip-f=kec^7x%#^2Mx5?Fht!=`jx;}NSe26Gs8vz-ghtgD#|uI^_fRw^QX>y0Fh z$=!dyoo8FJ=xvNa<=4g?iivK{ixQ^d?6Hn|-lOurPBH>-0KGb7 z@7=?WDVJ_OJ?dm)uH7T`2)W+3__;?(c-gicLjp8!hHH^G*prdFOSRug&ZqYKoYg60~cftq7*L1*n4`0G0NbgV1kFUD8>)x_2Q$ivvvX@X1-cd_J)!IU(!tE?FP z&EI*%SEB1X;Mt$?(x0-GGnw6L&MX=J@z1O4De7UI@@JdjXirR~eP1-`*tOt84_g3> zp1Y8)^B*@?;^Q^J}r7$jO-PL6LCSwcG8-_lo4S!8dxQ&X%#_ zIDshG)ho!<;pnVlT0;(}21)!D55)ML310@6-Fir?<97cq|>||>d_J==j zB)L8_F?!;k>M}TBm1_@W%P4Xa)k1G#+xDFUL2-H}9f3_p)h{XR3tg_L7i=$!6ng8M zc%HZ6+HIA=5ANlQn2j&YxYYcp!BP=xh6)|fMIl05){7dvozTG-xpExXf3&t_?^Rp0 zQht_g-HJ+@3%%Ry$~UiWW^GSfWr}TMJZB=qZkNcg{>%I1R<&BMM8$y2OxPhKO zg7~p7sA3=S$P_;=@n=-oz!(gbpp1R#fq9N9a2OIkUw)g*OQMcQSO$Zf`$8uCn&7sD zSbY2>(;Y~47GZW!`R>WpMLl?Jk!>h8NF@1RYwQ0W_`uiH3Dl*CYf>6hIXm()?6Xw} zo<8dPC0}B4L4P{%=D-`~iO8p(jihbU?s+kaWvYUomillw)U>yX37P21sJ+eV3wC$H zj-2U(_f(I4z7dps7wAaN-Fs$!J_#bZW%!K~MW{~E$a&Qrb(5H(=SyUAA*vyhIN2_e zr~6JT205)#aQB)|n>M_g>9? zb5&Xkda2t_73gDpTkCJh>h*9W{0AzzEN3X?Fkelv$q3V16hN%YoIH2tl^LDsS1P85 z&X|et6!n3mA2qUONFUxr3vSqwPZ+)RvAX=ss1SEEnrn7+M3+&t*2_Ka(jcp;Dx{!3 zJbCFf6Mj8Ya7x#8RLF1r8a0t%?Li?TisA)>^PdEfp>P!2pBz6=*{WJ>Y)d%rULh56 z`2YbLKs>j$zwP6~K4DJgGP(k8$ipA{K^UctGFp*t!C(dx^li5u zHPl9X$-6~m%A+4solALcX2D_2WSv~f zU$YCT(N1jSpowA~B3a~Pg7#AwiA0`gP)S@3&v^EU_;kyV@vMDUWH62o7WY}aaPd8{ zaI2s@Tme1%*$swGm#-IKRyJl#ZiK>zU@9A!xx}7ftqN^SYg(vA)o_22uW~GJZ1zL= z|36PTDKh}wPawN-X{>+OJ&Yu_EveFJg1Y!p^fGw2P>du*FTOXGk3XQX9?6K?(Ork z??^fRypcGeaKKeaOmk^dOwic1X~A-6)>6(`p0xpm_c@yN;x-%XFHA-n5ex*Zx((Z0 za5-+5#66|<^tDO|K`yt}= zO>n$$AI0(Y_T0o@*_D6R+Q;*hpZcDuHhsg-+sx$*HzdzQjlC>q(t82~I(e?#fn3;- z76Kz5_G5JQVl{u)1}u1u(C;#zuc8_L%R8gS|3=4t_QhFFpUk{_g5s7Hw!MJz#Mp3T z+)F590%Ho{Xw`)WN6+4+eJ}U5kflK^6|Cm_D*npNrl`RPFl>0wt}>ZJD{Nr9LV~h) za+&^D^u@IlB0&d@9bY~h)$}+Z?;93`!bQ-Oi8{Sr2(~!cfY`P1t=Q(g)7Ev%EwaBJ z?a$xqq-T-QMF##VcT6%7L4D{z_YMwYGG7~lQ2wsR}S*xoV=&Hn@ zeZ`sqt7OKfnAC0P=8s``c7^2&2MspZ zK+JBHv2yzPa#ajkkNOue*+D|o>Oh$Jm{L3E*Tgxg0t4!3(gq60ZzaHL|IeMemurLB zP;P}raCWx_Xi|Z?+;)E?J5GLqeXr?ZC~8Z_lWrBchuFB6Kux@cbx(Q4+NZZ+{k*qv z&93`^2w`&x`rGgIqYtW|OIoI-5B9USSNB(sQx0wv}wO zRV~ic&|H5jhByb7#!ai0U*_f=cAtF`J~0bFY&l@QtrxXfkE74_z9968AW%y{*hk{g zRd6XTdusT#S4Aw_3t9$3m~4fI%G1Nc0;aqeTRb}L6bv>f`VUktzvz7+#8vr#Queg1 zPzDbJ4Wg+zDLhP4*cD#+6ydu|Za@>+lghJ78>g@l=8^)uB;=QpAn2DIlcX5gQ39VY z0l1hYH2Q!17sJ)x+5bXC!0i*@=7C4Im(~k{xR5u3p*L7^nBX+IjT*|*Q0~F-^b+61 zUndjIy_EQ1kv_fnE)iJ4SLp5MyizZsWDpxLGHlFzY7xX*Xok|mM=j}8ZW*E0?$v@B z@W@b{Pujvzfn82j=O!YooIS?$3ouV2Xa`_15{eePA&chhEDWudL`3;Kdeg5)o7<@* zQh_;*H=>2X_XU|Hl#L7Bf02r6Y1@#g%ODZ#uIS*h-x!pQY3Kcw9v1NtFVZ@iD6MW` z2H~Z2?GW8tF;#^YKB!23Q*0H3XWZ;?(S^-tOQH<0`fvW?9Rov%AL0DdcjD~mE9+Os zO8?4Ik?nBm?B{-z3Fp<60G3(Nc1BiB&TC+u*>o?H{u`MtH?1=de;@+nMUHDPF9&+BH91Y%!n}@6O zjGX}dg0e0*iH_I-$Q#grQw0A&FmADa z3xc5YIA6C@KY3v5x&dgi14htq*FG=-ZQxJpR=xm<^Zip2UxLXn623!1JlMA{+P{dk zeohZ$cQf35P*(3&ECf+iuHP9D2AUzV*SIZgaQ0cyFR$X8H~rIbyTLQwEs6;7ByLAM zIo*UZZ~C1Mw}423=+EJoI#!W`qs2 zkOmvUcg1lkGzO;h>FX!B4SP{-z#cMuVJJVeK=j7S9WCgTaLLTpSsj^Ns~<}i4Un0Z z|2DNh4I*BFUvjmsIj35JT5vyY)imXMmp?lpe&OwJ$IBTU5l3HT;yUW&su(PvIv2X^ zhc0zBPRij13Qcg&vP*3O2^Zp>ZLfrU^rN|cpeRgu0fb=Hg)vehK#jMqXFYhEKZg!R zRO{ls!)Q!5ZhkkfgNeI3ZR)EZEqL*Cdhv61HqE~sUv>ROwc(q6dr>v|epY6%vh~tA zlNVW{@8gOo*af>rv*0@P7O-_8i5=}3jhg+>5hVmO_|6)VIj(NU^a%-@2sLDFhHzCE-5MBTSi`r?tMCm0-4|F`GM`SLi%7f`B{hR|8Sb&GGR*}|R#U2k zAvBAmf}q6uOAPF5ks1SxDNQ)ica54(&T3IUm>fs-e`?;yANDq<67lxA3BK8kLeVBS zzN_w@vx)(%n$Z>j?g52^qgmWqchNp`%;CQXHxZ7f0eMH`81}g##(&>?t8wZMVa!@_ za#WnRi+>ZqJJDk#uiMpD8{~^IDcoE$DLK9Bfm9`En|HEtpA)h)Iki~ycAQYn@%H~M{{U2%YknP`dgvjdO! zsXYo`O7F#>76?TCO7HjSU(FwY(_J;Q+JQ)LBJ13PRx}stybMgjoUeng(DK4&P$B%% za2^KhfL~@c=FG8TS5v_g!Qdf^LJUQkT>ZX>R8T|EcKMa+oFUMbOJk0on*xDdx<*|=J9camxAuWvX09x-|MGmN%HPwN z9U~?oQdjVn6Ps|!zzEbeH4}9Gacr1K_92K*H9vFvBfGTQNG!ID4N$Bj0!Sr$ z)BG(GUn?y^vT}np^WUQM4P>S7afQ{&wF@y=ow|%~aL8W=ibXEy(Dso8XE!kPr+VM(B+U@XbqB#fmGDV5jQB1OrS^Rc5%Lhv@50NqB8B-E_c*&(STZ+FY ztf&EUUBaxYh|=_CGLX7?(>pl<>Y4vFf|*-$iqOos9fYEe8ABpgZIGQp)(9O{`%?Bc z#l=e_z!4Y#^K$oHz=vfa7x4>xxOecwyM0~Xuc7O~_<>ahw+NNL3|Z7w3z+lrNTASA>M=#;Agoay zMDX}v`(1HFli*BHhR$$``6``DlF2~j^lQ-+vh8H&Fx)#Zf%(tyf++B3=%k%8I?ail zE}6dhPXfNiW9>NU0bbzFooo#T7#=Z8ech(!LshV=TmlSpZv4+gKLdH*Ou0&*+4~`U zndci3znC(=1bf2ebV3L?IR$dAIv~Q{X_J!(Qf!$7lz7y2h{JiOt{{B92H*C^fUvT4{4N{t79Tt6zQmxfhF{8=@B zJfqp#ub%yDs#fc=i8_yd6j&=a*8lyk$6!zU1(ype~Ty8UsZQZER?>#~@_g=T9?H@PN_acCwbSR9)?q~CT-vQ)q zfk$wGf5TrhD^50La?B2p>DSGJimR*9V3?nk6s}-|fGH#cQVf{~j)N=To?IVQN66Ej zSezyJ&QIZjM5Ro|H>3E=gASq;AzjcEzI4JOBS@u0j%6*HHh9OC05+6b!W71W}N2Q41Z^gKj4XVy+wD!Saw7?C^Gb)v|E0At~&$9D4<==G7QUe+A(A6Mc zrCUj;BbY@qdqa7cIR{0MGAB~Ycq+fsL!q}Lc|Gs*3yRP)^Grpr#C18Np`&Cp-hx0< zdxAuPSUP+Cpo)1C%AjP4``v>NuYFG7{x}n}EoMl$81NWE7~l>*1jy8js;eYUCqY-i zXKskC!N8Y6>xv}P%n*BI)_SlTqIj8vA$h7XQDIV*isI!`wWLpV>}q&|tG@7n)z6hl zf$LANGS>1|Zi`gXqNNIi%qG=q$m`%LqE5&|!SDfTCKV}73$7AHB|}$E&FGQ2nu~e* z4cMJLB-O0X)Oew*{k?{^9#s&{N)`RkK?mb#LJ|h#mPWc?Ck0s@PwhO;T8K)XsV0<4 z5{;Xxrj>CBTgIx4p3wE_eu`iG zp=GQeD{WOP^Z}wEP<7IS)oMv?e76ENf0L8dyNagGEw_={@uX}R7LgmaemGoN4fwYM zY~#kAG8I#jy~`@Xyasp`4eps(&}T&o@G$($$TwKg`u(1JJF(ctj@$59@4$2I%$Qqn zvVK2bW6Bl8b=~ymnfFSg)ZtAiG)Ck}U$jyk)xzn#Ss58I=qBv7Jo~h3giJbEd4IPo z|6KC3D4Ktyn0=a!`6J%}TnW`E#Nsjy16almJmwJ0Ro(c3!kQ~$Gmi!?f z04>aXEqKwBQ+?u7#^+?15K~Ep#;sdU(4m91sj9U()yj+E#7JJ*mt{wCw({Eb&u%~s zeX6ia>uq5h@YOAPii=8GQgwLDyiVOq<*9Q~&|nE<8l)G+1$O87bFIW>@Ac|&&-?ca zizal4Zda!QiPIa-)p;j)zja{P*JeWxr{RRal$ia4q#-g~?>rhb^Yy2s<4<|f6A;aB zStXpBjL-~%bNWC@yE2*KCGWgbdR{V8o{+q3@PjyP`O{|*1D-1^dnx7BJ0$kKG7)Yf zw6k}0wzieMrRzC+y$X#a#n9pd%|R6#90Xm>R0yDEl8mH=rq+1KM`VF<7tTg@226K{ zoR*{(kXM%J+7+Civ@oxiisV#E7oDXPy`g186+6rCk_m_I2jhN_@s`>JCLf)``=<@4 ztb0*q$O>X^Nh6v=4C63j9~VEjLub@vCp@j;w42uB$m@97UsqNW6u=rO^i z#9Y<*GyXceyHD~-|NareI{4EPDp6qu3|oQ3OCIj_L>)=F>Pwc#fv{id^SBOO)a<_0 zXJu{~1*}RwXS^ZO2d-w@tYP?X%hX$cs4LxKHfUYI!d#NaWhi@Inp*7gaFe*pQt-2u z2**VGnDWK~n^El3OzXkXL-5g;#hzy~9|0Z8eHG}KI27hADQa#?Jrp%#KkQ)0!yl+k zTGD3qL)mbsBzPjH!-i0bAQE?UFA^s-iYjaaGun2@KTH)MBsM+6x}Kl?!>j& z!t+;|`>C%62hTq5Tp+#WOsZ8DsgNvHSVk%OzuC+V7R^kb;svPqR3j}fj_R#S#CRbV zNOdp=@hd)>zra6}1$P|rN|pucBd`g)nEj#8fQ8SYs(5WacwVECwkq^A}Rue8jGy0kv75I!Y_*nhZ;-_@Jtg_lqIhKD*xI9xt>21pBBw)}~s$b+b z&e)3(o9#&+(6alQ zM$Uh`4YTg?U`b9bofKfp>}%+FH_7=5%e8r;u!3*rmS^PWRjZqTVJD%=f9ur(Q=BX5 zF#5=02qCS*`Dc(v4)Nn^E>vaF zVu7lvs>>twoAmNCrMQEk0kSE~ZE(`A1R8t_h~|~e(FqbT`9R5+yiZEB8K>X&``CJY zJ-Sn@^~svoP$9l~IsGg)PG@Ca$9u^1@*ETrFtL{xq7w3tme0?sAEx-0A$Jacad_-5 znef$iks7=)dL-xYy7#J4ey1rv;^T2|qA!qw1~<+qk2qf|@H{QWYmz<@cItBmzl4p@59mUEh~ z+m*NzLciZ}5r8dD%mD!NcA8kh&kN)ajuV!mc>Zs$iOh4&=Kh>&cV=T()nvX1!Fe=n zpC6+LQm*|pIRvaOYT)c&)ElpP_RS8d#KPMM_6%B?WwgA{!s~ zO)u}o)fyJEx|*4@+kcd@dxw^RM6aIC)DxTLi|%`<%E?Lzn_abPFTyV--6pq1SHQAJ zdDw@;Kp^{UvO!MZ5*GKr`z0DZu>A+9`QTt8J$mNFg-uKoHB>=lJSTVLyH^hhacqY> z2#$Wu(OHD~*L|+jCxQVlo7{H#&yEq(Te6AvmPvGj*OGIGl@l@NT5n{T$NE0Vk@1U7 zD(O#A_C540XWCuqEhLIPbglcp3({M_64N-@=6N$}M`m-MbyjzcRaagkGk%T!K5r$f zZgb&}Pd+2?zunsGM@e15-VajfumN(250}JksU8#B&?{( zzpxweuIvYK0<}k9^aLm2*|aNeus=qAHC>K_1;S`uut2P#-{Fyi$C&`}a$Xy70Z5+N z%dlb+O5WHSarC-D>ZxJuR4^eEm)tFzN?Oi1m0d;9bb#FH(E@aESpDq1M2h=qLCv=@ zW>9QTFuAYlu}7pqZTwsdp%PhImuJ6V7UXk^F@1H<=t-kzh!)9VwTjPJj-@c>C~;g7 z*A+)?-OWD?B=skWM@W~EcK)0KJ|7hR^OuP0{?uI)+0M*D6`%n;UKJ;TLN27ZwL|B1 zmFg$$!8l3rh?q*=<@2q7G3CW}pb4W-P`K4|f}*MKb`I^MGZ=#=+c!{lFyzr9Jl~rB zE>pSy$-y>@Fd!TgyLdTo~e!KqcF!g0PiFXI2P)97^m%WlV>G*70i@J^|CKfgVE zQJ+92o1No-FGhfmM&)7OwvRFu_DA3X45pbN?K-9?y_xBw=i%Wd*9BI*Kn}va2q~wZ zkKq~1l!?9=J~@t`XIwjxH==ss2F6S5HjyYNMZEaWF%pVc@qrTp%uf57U`3S@g zlOw6!CK|zHN9=lK9(>x~5a`f!1~w*BRy{iEzp;f??%X&0CMFF1Evb0{z8Kv&_`9eSuFz9B;^d9e zCF{F64a%RjLy>L%jB{pYj}iEEpQVWq79#7$5`ELApe-U`;a!)F*ISZm0E2W=b~coI z#+I95de@F#M7;vfaG3}L0wAfhv^>_mr3k&;pi50M2SBz}A<-M644zt4npzBK=VM4)L=)F$S2AdOo7e1Dq``6nFGH86rxJI!52u~P#hhy7`TMREN2#M>#d@i{-IXvk%OeQnsp8L7hwc68xlBJdXG*! zt|)P1SLj_h!V(JHQxGEv?Z|l?R~{zJJ9MKmidZ+2M_bMmoIU(M&>l9q!*z9 z(^0jF-u*G4rb^2?#L-Ab$TNijMGaw^DYNzzryHF8JQhma1jhN24a<~R2|Wug(8K3+ z{?ta*)#svnN_!B`a4#KS1@>DqpXZ9FnI1a(UPYIm93S;J6|qP3Ag=iBJ&>-E$}0ki zShBA=&tzrSmcTNf-P<}K)-`5P4<`nz?4W$z`zlfQF!w>$639{<{mNxCu!0w0mkMX~ zH5>n=tZR*Ck@HC8#sqJv{(=4O{l51JVyx9m5`POXvR`TfeJk_SZ{^0Ko9K%AA$u}= zIpik*FM}r8@u)&8mHV-QOWc|GWsbKCs@CO3=D;KPIymmR>`2V}quu8C)xcPB zabBLnAbeJ8i_6DF%d!Rzu^S zkB|u}pR>YwxZJr?-n3NSx9B?Q+BJ4!tZ^;r^=Y;x?TP2U$XqgY=*FgD$+jxs_elK> za*>s5tS|Isg#vEF0Bsk7Cm;1eAy!O}rA$KB1)q`C}6t zM>jZ=LQW2M8P{j<7hEze35Q++yRo%@{JRKbciu(rLq#eM1IguHj~549F44n`1Gl2j zo$#qHj}W1gl7Z)QM{NQnRsUs%Y2(#z#7*Hdt`&I6;GbZ;Sp|2Jeb*$X<&2O#Ieho7 z-(|%Rm6qbjthOz9eB)JaN}TDS>vPZ|hI>9cjc`927J6%cw4={o#?ls6EegYd)7A?* zUh*4}GMngmE+$RGDxGN+jX<7_073P44g)B{59eI_(-Io3sYW zS-4euT|%Xlis#GBW#1eiGR74YDHc^@Md&BUjoa$5IeloL=W^Jb7;GGqxIikKS5RM! zSEb!09eI?izPZ*%tuYf6W1ksh1B=~FE*rF}(qWp}l&1FHK_cgZAur(Gyj67Y?e^-_ zV*PCGRb>jv}ulu)%`&2y9iBwFj7BH62Y{>BJ9}h zO*JkGuMjS13e=ye3uZo_&C-baXA6ZEp>RCmOE3V!fOQx=iY7!bIZ``gHHEmHxjIjlu zTvreV@Fc8tADAXQj)Q&|J41f&DCL0?B34``(?UoK%wF#n&qz=~VF+6;ud3kjjQ_e* zOJR48gp8>GBemgUeFWDZ)QKtnSUZemJM^chd+R#nE#VjS(k=KOmh_A>q>D1e5I z6f`JKAgH(P22y*tT^GNahB}5VJw%Co{jq}-4RmXGJ3rwue))uX4q^aFi$QiZRVkI&rX+VK(z8vvwOj*b-OVqJsdss^4l^AiG>XBZM@l)Cz&9VSIWozh6n zCbTT_q21H=gWZ`IRYHdjzsIG83i_o7d=tARgzA(U0C*R8(zcO9(0q;VGistCmN+_; z5-5hb4}}Uw3?GG9(*t_~CkPkUNZnj7?~UxiQ&M~o+NctQ%3?q&Z{64(M$q{$z_j!H zR`+H2&y`W8F0V*!)RL3GORJ-U&N+gV7OH5Qlx1hh)(*p8zn3#4 zL|`_IkPGL<29q2mixCio2iF2_g;Eez!g}gJt1o9Q&JP;_r_5Vx_&10O=&Bi_@+s+* zl*WdUYYf^v$8Ee5(ihf&fjr??aHa!6fP3VmW%`6)@|69b)5bU%Fc>SGN<>JL&2X;i zj+BmA;`AxWU`NEU4%$|x8AvidRE}j~V{B9;`gOawl0=KHd1B2MqMD_PfqEUg*7nHc z0JfAkNKvh<3a2jPA-Z$H+28X}J-9U|E1)Nmio3zRxo1`F8Z z8~cxOf8hnJ0R9Mie76MdpwO3i^&1us-7X9W-m>onCw|`>j=xW)cgL@SzySz(?tVO1 ze6TN{$QETYUo{^*W=fXV!Wx(eQw5(k9T|X*9%YdUlD2~} zv6URp9g6Aln$UNf0(!q4j1pUUTcFiHh~!1%oN~Z;lw^5LJ8^%bkdJfn)j*6$z}S#p zv*?+<4<0UgE^+xKVu<}jj0ckO{ESH_oEE(TKUsL`{2sPzc973T!_al!_#^+?%#yi) z&1%NkodhYC!cIb9SFzpq4Ev3O@ug573VK-=zx5L=Chk#Cx_p54$}d-f%}o)L6Jx=w z5NPqo;LJL_pR|8ybr<4_>JlV^aL$~fcR0NT3lC>0VKup{gO&S5)`&UoiLv*A8P#R2 zJ89c;=3>BwRn0_8^{Xv`5lJfU1RI}rfv zo;)Mw5jR6NT)n%B@<*FG2=m$Bw(1Tw9zpeIk7uA{>bojiimv`kW$UT+VMDBHb0G@a z2(nH;rZb6UKeJnCpU$m|+vFak1QpJ1=Cmr{LE}9hE?K|g=ayh9Muw*inB37iMm`l` z29*+H{A;kAlRkRApEKIi(gGfn*+*b6Ch}kbjjH1O>?`(SkWp1@Y&;Wi2((%nE}G+a7HO9wg_jDB~MQ&Ug_s0Bps!-f73kT zrD^LfHzDTejF-H}%WLR4sNC^R-N&tQokGp}zO>|m>poI4BH_Jtle>{|X%F9JG7@a1 zY<U$M&*j+*DzG^mo2n*^Y$ zTKc-H$J2ZrvRa7;on||inZNEA`cd9Rh z0(y-&24^!Oe&kG`SopAbb?d+0hyfx%PgNP{0?gVRPVSCh_Y&38Osc-rj}o$FO@Z@fkV+R z&BvKN`&T-8sn;4lEHH8uq~F*{Y|GvYw~_IBp0VZ>+97#~1Lf?2ex%%94!M(bhcITv zuaX-Gj)joc)eG>2I|yZTe-G61eY8!EE@r1KeR7yXTaNsE64J>~l?h7M^24BqU3!{t zt0bf|TyE24nB@J)v+BP#UJsOKZiY_cv!{1=(dp(pqS#Df7rDR*dw}Izg5Au>cKy_S zHeiti#HQSr(2){^f^>pO(|!Om8Bc{;-qaBOz^?YGn&87H`0{&CW{+<8H`GQ;7^!F; zm1y%8j$7i}+_q(0!q-UvvsC^i-(BCOc@RvJ0;Yf4Dtj*k! zh+DYp_>;8*1KgkIs&_HUB_0pp;{D%0RWN3a8=XL|d}9DLC(Q14!%*J8y9plA?~)*2 zP^0+eZ~z{c;TXvTJnplusQmi~GdEDptji)Jm9rt=)z2G3zKC@7X}{wekJ!=&QQzeU zBNaoCaqgirpTPYYxOhw8NhaFB6@!=q1&-8-zZ{G5*LgUwjWB#_WF(*RR6rCgU@|UV zgWo()r^>f!h)RL`*D34`(Qvjwa_pvzSfoFQ4L0GN1Qz-sm=UIO{0Z&G%usWP(a zkocfoVf76QeWkxdI#iNQB-y;{Swqg+T{Vc<6t7cAr`u`6xt2aj7OfB(!TFS-$yw4K zZ#5JTSlkOXEzdPR(Nqyw2o8)P5}GH^vz+!%UL8sdTXBX3AeWd>dqJVeRM-7@SZ3^; z>^W~VAT4%R$o_$&7;;AcWnIog*zUX;U0IK<4Y5&dN#d%i491-P~<{ah$`JGw59NT-T_4$yCLEze0M4Ar+F-4AuTt z&9%<*VAqhbgbvr4x>s*(A-vYHO_C}6Q<_B*A-BkyWLlXNwYzLRm18Nr<>PFejGJ*w)bbTG(tuf{n(phzPI50di-ZmSwgePb{{IUKkTZ2u1+%p zaBONzB#rp7@1QskBnXHw1(<#U^bSUM;0&x1Ki2P3ciftf_LQn32yX_1`t5xmE1LBk;mk4hR_# zKg7VsX%UJ6-Byxy4N6bp;~DK22--WJv(};x?E$q8sEH!=vfF7crGSDxF8N&JQKs=9 zN{UstKJ76#nsn8<-CCK`ep9bz;qipxbov%%fstvfsv63_?%L(Dq2JglE@4`fV4&Q} zDH*cT3x1>j5Z6yKOGWnnT|Dk}QMLy8h6`Lhi-<((ef_unHRr3)IUn@va~@__Rll6H zxQq#EIRN8bYOdAdTCk)m6CmpOHMF1i9UUgv<#X$U)*XS^>4O)=9(Hy>_i|eHCxOY0 zZ*n#-JhD6egC?v3*MpRWqqDPO7B!Q~WeaLd0x=fOkY!#B3vB#908Bu$zjoFR-Za8D z4Jv&=s2A!Bq^<6P@w1!&X7BuKZ<|dZ>bz>ne@$+bDm@OQ4UYq<={h?5m;b>&N8P6b z9;U;7&Xe)Q-kt>FKZ*7``_H=svVwS0BYdgf3m9Qxjc1@Kt<@sF+36j?t0J@3obJm| z$!v@E7Z!U2{|#G}dXCC-X3DJ~Ha`kZq%u6enJ(fFdj`YdFTOtNzlzw}^p6h*zrPJ$ z)5Y#BaVo~FFA^q<4u!@9{)0)b^E|zrLVKu~P@cXf?esMSgFxui2%|RMswIS$1N>mM z2dHKRonnMa#L&Q zgBeI$B+=v8O}u}CkOQJo6JZqKPuSJrJkbn6Yd6QXfF4apKUg*(t6S!M)#1~;&7HYj zvEHt=hIg7F*6)eG<{AT+lQDoU;bPjJyGJL?ugigOHD^CCtIy+Eu%u*=>hWAad{v&f91GgRmMV2= zUbfJxjD2z2v%ioFAM8-rB%`Ft3TwI0$XKn5{Pd`ZV5^XSE>w|x#H&S^m zQYw?xScu32bNo7@ejJEnjhv0hWhfW^59vq`$A%(=_K68a=jkPc6^gdhc6=%z@D(b( zv(!6+t8OxNV$E(7^@MYC+avs*;>FO?_0`6UHLJOt=gm6~qrZo-ea%!+$7Jyb&RzXb zus?Wu>%<@(_SifP0OpS)V6SRROflXTbZo*?&*FF`Ax7v$70K*!QJxGr_`IoYsiy$4 zhNGbqsp=tql4$szcr)OBDK)MK>&s88n)_C(y?=aPH@3QWRagnbGv%{uA!v-WyhOSn?iYM`WoT7hp zOfunboukw4iLLw8P!6y@uO{;DGNEtq;FjC948s)!kBvDQyQ1(is~o0StA9ILxBMw8*f(8VAt(Nm2Z&F3OH`CqEe`@ zWGcRWH5&WdsyuuLYN5$0bQ?tckvP&tt%@GxD^Z=?Hc#Kd>C2+zrPkdR*vN2aGLTihv|gLyh^I;-;e zlvxcnF{QTiscSJXnF`-qY%{P^K5vHcY&J$z1_(*=y0ckLYp*p!KI3{Z2z_zA-nONj zYFC?=OqwUaS-d82KN@It9*--WZAfYR$#v|LvB!mMa^|jS zNk91Wzi#hPrPR@UPm~USXP?a%FE$Sj2G5`Gy?C*Aa`Nw?S{v85QTw@t7EO=M<)Y<}3Tj=Sf(Bna`5Zx&Slr%oKIihm01AsNTz^8yiBStdK7Davvwa#&t zy<5(5h~En#vM*!eXhPa-@d)5vF%ObrV9pm{@Bw%<=#4JvPJ`3IKB~V3>RMyazz#S5 zy%7wrVmPcc=wp4D`|FJM7!h2oHht<2&DtCNin6r5Ooq~}4` z+c-oCJOkEuEzqM8LyI>iK=`PZc93jcZWWPpv}x6>9^YZyA}tL!QbW$7Yy#r!D2Ok? zfWOd7l=N)|QJBt~603MSQ2*g=VGYMX))(vkG*&xz< z@G1#Ma#4rz@QSY8v>$M+Xh1`ZM_WV7*UL)y9&q}b5;3uTz>bhB5e7%iP^>5d2z8DC zOx#WwZ_Uhrt$GL>YMk-A7-T&CkS<8s%pT2>`Bgk4H8-Q%#TBII;`nnoSDb06wJPrA zBES+^%{;ke!jS|71mXpJ!0~l_lMAhXGL;H#o-ItRnaQhccmNPNht#ul>swA!STZ28 zWePx~=d?@af)3+xo^kj!wo?BDR+e2{u!C6Jw~(2(@nCy3dL``PUI*3WO$KI*j^PD5@|I-GUQ(LZ2DPq?3ga) z3yt0F-R;et-OV3%f}J1sc7EL3{a+2(cNvnvHv4Si{|7kpFyWq>UUiOphrMTeupF#A z;6fXuqa+4rFIa6-rSQ&;xI;^R1q-KEa}I?PECQH*#6LJC5#%VU^R^5Iq8t?pqu@uG z2;eT#Iq%F*9 z63w6x`n{<&6R(g|BV>!*5q#}9QP^?Jgr!8FkMabp#UKF`j?n?@a&|qX#l&gG!`U1l zJ7i}#8wlz?rL%xo^93UbXy>-OH*oCUdYjjFTH9yh0Q3|COJH@I&i&GYW%_=1^PDYM zGJT)UGjxrFIZrPynOtDj%fy-nND_?C^5l2{yU|@Hjo><-qs|S^KALcX4nSfB0A0@Z z07hW89LICBYT=;L_-8WD8Ww9X=2gsX=ol7 z*dMktIw$*whryc85cWdeY&ta?opfCXmsD+erE z%@Zb|O^5tY;pY$$0^C^JLPXUhW4KEsACfr=rtz2^XQLYe48b`1Va{&CAjfA^oppj3 z31s>0SEP++pH28GM`jGYX7=KnC~R>&nDTPpx??gQJkVwZ-y*kgTc1_z zOlb?`3b;3rtP9%^Iynjf0HTh%C;Oe3-Dv-L=NM!(DC&QTRha#+k@ibQ;#i8}k|f^y zos&VcRWKCHnk;r2UTYATJ$Q21>m2`n3qB_miEC%HDpZlssVL5)b9S4;SUeZITR|;f z(_|>4Ii%K=W@ViqcsO9Wqnb-MiRvvZlP}`oyC@l>z1oqZQ>h0Wq+vbzajHCe9g10m zBrvOW75y~HBffLO=>QfK{y6GCf%`mUBIbkyjaJ4IuNCEqu}*CbHoW-jVjN%Qs|6X$ zJwQpTB{M`vEW891egeWyNz}}f79d<8=AoP3N)%9&A5_++Y!)_xrAUXO_WwH0i@gGu z*dfRV7t8VZrp-mG3@%aEY2g@Fwc~68vD>S?B^_ObtqFUBP5Fvj(Y>SY{m8R1N+`X|%I6(+-9Q?5 zqS{y%ZoD+YEYh*2ATRJ_XGPVR-%M%A38zrwyps!uI!n?Tr1^v^&J#w#L1UWn+)9nx zoOWh`>SOCAn<}Y6RWs?_=PsxYCa1gVC)xx?&mdCGMA^L#3Od$MwUkwOR_@D0qp98xX6O7)VqUBf zbbX>#GIHw{R!ef!q{#(+7L$500+EOFoN@1$Gor#+6k~O&i-&=Y~6BcQ~{O zT&8qv+;dSe?|V7H`PfC#D_{-0*SEW9RXL&kNw^rT&oWL1$A`UVD2hW4Bh~lYNlh!W z4eX&f=fXYw6Ks(j4A%CMk_Jo}?Q5&DEib^5x719}>ru>Tx&qraZ^2i=n|1HQF_`Xt!z16Z1(MEqK`gl^5ky-SWyPkZ}_>n_e^ znxHj~V%=hcaDKpmsJ>#z-~%yEVy>c>KJcE$HO8b%Nh$ZIp8oV{rGW8O=p2(zbPf(!|1ruK{yaH-q7eSq zLhmlM=$GfWV!ps2CnoDYEP4R?csN~q4!DOC`=Db>YORiOqu60cq=hO3glW@#~;| zr$+nBlRqr*A4~3Rzme#AAM}1N@oMdGExCHfH@@EKiznUV^gD1Pe*DWtBt2S_LHp&7@`-Ddy zxJX3eZ`P-9AzX^3XJk4RUVe-nK>{Y#XiBfM|4sD{eT?Xx6)`Tec#u27kgHTHbY zgmp|ptLlx+O3=?wY1P1*1KJk1ekx?R+`-2Y6iC&o{V%DQm#9_oh>%A8wN->t8dcs0 zhuk2Yz}@>Y@UZB$FXQ&--cCzTXy%vSPcp*#cGq)$_t*=>8k}W_0*(5gvzA(Pk%@q) zko63{6`byB+ za_$(ViDEu0_QuLPaHSf^A5PvL^9-X5V@xAE;y9TAM+?5;N)z~6#9nhLs?Zc0gZ-6K zEI_dM-Q5>h?_WT6zP*^PvKDU0;el`X$s|^Ki+>A@muQyFn#BN2BY#`y$>1H2 zkXB?MP|^?VV~`T;IJUL(#9VK#53{opm@C5PTP_JGoVlZ!CAWJ?qf4eS9`p z$0PX`xH8O}ycQYSP3Zf|{sx7r$Rf9xUqFOlNNhU{M7u& z`~11paL=hDZkop!<~-h&D^noS3~xLa<1AkA7+U3JwVs~^I%c@Nz4gN`BhUc;-QHFU z?RZ`mv2G^3A=m=8?2t3{)gmwp>~*MZrRaSg^Mx54#h5ref%<;7T+Egb%ynVRFjS-r zd(YE#_-t+lPpM7T+Euosu*FF_T^fPa@KIYapTUQ%XEf-8n|HSv?r!h=u(`9nxw`|Q zL_h5A?fzS+u-)L>=X>9#d*9|^tL>^Q{Py|Qw`piTYRScU=M0@?sviPfMY{vMxhv08bdPqunjJ5Y~e$>jR0b=c(X zu@#{|F5BePyT@Wq$#hMF)c3po#`@T0=tO@Hs;kv{Q3IQ?9zu#=PsfSti>T@DXq@%$ z*a~(E&!eH72IU6%FQK?&2W)3V!om3xku64akTT9058nwNl^i0NCnchk1Xpzm5a!*7 zCw^nsjxT!mxy#*ozsQ1dzS1gwOR>KaxnRFdZ38pw$QTi8!WKA^P5God497A|Eg611+kke zXbqT13gYkt0nl>7LV*|>G)_V}j5Nc)=ncefP%8uf<0Ma}-~qnG$_ku1Xc*lrz4vJ# zMm~^HRLOvT)L0^z)=f5bfJ^*7;lN5x z6eq^e*bDLb7?%D5PR8jl30^*bStza;?*x6G=n#OH=)JiF3>zg*8Wa#W*YS<}Xya*R zJ}lPTqh4SDRUT_lsfGi@y3Qu$)d4aMAgL*Z)$Qx0|%k(btDZppF8yud@1xf_hFDL(4rc77>rbtZk*-`(=S8{GU0^9HU z$X@rHE;}lDV5n{J_<%0f-`ofHy0u^-*dNWv8t?J06>oAL7ZGXH5Gz))MT*l7YhOb= zdPbln^@XE*QzdN(I3Y14IaM6-2)Dr^i!R66c~hTOZ5Lyx9KupK_oFCH2ig8$}1?)OX3sQxq-j}W85N8`bt%`-I?F|3ce+WM=LmuhpvsM6`2ZaFLL|TC z3$B6e1elo^=F+bD>b^YU%7#3iMYT@^5jqGSnj95lA0L z>QlAFzrecW87`Pu9t*!zqLR@-BAUbpDm3X3m(4C`{mY_U z=kV63wioaWE}$ft79BT13i#jI<-EWS*Q@QqNdu+%X=933MbU@WZ`S5fV3A!g(F$!6 zGC1W$F&n4T&#_r0-QAaTv0fw8`Bi;tzRtlk!bY&=$DL-6>nmrz=qT-!i(bkE4}sNB z>uv98y~^E{!=&doIb*dP01<;>(9MSOz%i*Kr(6u=hY0=185^3!98Jqdw7qpP5)HZo&AK8<5MmOERj20QT+`*zM*Q-jBL-;337DQz2EOWWt9(_>8uqT z^hNC_-9ez##Okjd83}l;sf@CjUa-l)ZEfZW+nBv8%dHHTu$W?@ky}7^$k{xd#Pb`N z*j$@gxJYiWy=~oTiZ&=|D=YIlgjYgmA|`N{`NuL@wO?j`D8}B~tD*|*4sR@ci{P=|bDxXp zLfL1;g0F;+#s8}>|Ab@wi&%k+%_WzQnzPB!4FLqUFk zcw^8vsC(3x$+3saN$zvSM5Ck^$rW>?xKm1h7QQ3cZ<8X8oBA%L(YwaLHtIJKIbow_ z*GjHQ_LmW=1Gxz1^K9<-k*S_@XV`P2-)ra>k$O?jyh60kGGS{TH01m->9xV8ko|+% zGU;HcYQ*JJb9aS!%56_s=lxI}8%M8Qh)cYg-Z3ymW0D`r+`w0yv)coj*Ri&XFc={l z*#1x}gl_RVR=KkAE;O3KPl7Fs*?IGGU`i-uGjn%_`uhr;n#3Ope`{;kDg{&hN>qps z7WX6pLi=&;xE@{*ZN*VKVmvUtNa5mOHgLDF74QK@_TT{<_fI%WB^uv5j{>`YdVAsH?~14F70JpWehM$Cm&ui*ueNP?Urcwx=S+y*8xg4S}qR+9> zKpOIh-)Q=flAQOE{{&6nZYAxjx7Oxk(hyqfN|)Pp7B-!Zk`EEcBTdZgY`ayd%e@tZ zwC4IEvr1CHbbicxVy_k!<2uT6HH4@O&VKBid0f)9K%Esp{N3R}PWZ~}ke+yAoNhZ? zxD7nB#oH(Sg>S;l8A06#-y2u~Z43O`4x~l}f3zleh189_xrz;><%}_=K;{&d1Fh3pzbTn!9fZ?d?j%bq6%v+NH4?rYm0(`X>kKqJtnr zqw#eT&J#>_oGB`61$(|1$I#ZA!g3WAp}%>}J;j1~clBz!Og+A8u68VQelZ}Kd& zCZZBwbwpL-HP!-DI_2Z#@9YK0WJC=mev!9G0#!1WQC68(9Am1+SvCtM@eKx*(He|` z3F9>BY)rsDIZtjfr%k;Y@r5z%Agm%w-(Q~25K&g1K-Uq~Q95QD#)AoaHFR?NOnBaYDY*yUS<46%rS7mNC*KLy{Y?YRUse09Hn zbo!!KyzSwqvO5a1t5_%xKCjb-&R2cWp;~?gh!ZH0=3<-*NKJu4G4HFZjH&sh%1B(1 zg`f(51FyH=I_fZrR#dU$s-m_6&g}0kd4^1v?bLS(07Q4Z*4<$T z-xEsR{nO*)Zf_6)2-eA<^WtU0_Kqs{PeqJby*|syQ@YIGl>G`VUJD;|$uc{`wkg_R zU^2nE&3Mkb23ANAzJ8JblHw<)1;R-(s{ul-KSVi9cM#uwg-cju;Bo2n&X3ntRr;38 zWaOs2!t$=9JFoMb`;9g>2o zXoejdhWAub-o0%Y90Yh|;s{E1joBk}*BH;gwp~+aoX#Fp(j^`KSZk3*mWwvlq)-s( zN*kk$#Ou&2uaL8};O$p0LyBmkk#zv~Kj7Rj zMo86207D{>QQ5Hn)f@u8oG+4D@V!`iS+lc-|K%LYkX7m|{%7!9%NG#b2hL$)jOes@ z4Ri>n^NeIE?8XoELNmxCa>aGuU>z2o<{CS2>+MbTkz<=fgZ{$q1n8-zMIgLYxWk9d&ufXsk z?qw|!8N1FIHk4j=-4=;g0|-h5yCq_X4JDS7!TgI*AVn;2p93$zCQEI`9a^$Cmg+y=9Roq_{UCzC17d{^Cjh$bJE&{z7#5=5eJ~Ud2Hv8!VeL zwjEu1EB|;I3A{>_WD&+%3!HU{sOI1kL13<3rR>jI_>-7uhEr~8Y}CnBdeBN zNgJ9s%}2*TK7$@q_cr>d_3m@SE!M4m^;xawbeY!sUD~0QE>SD>#n@wT4dAu$0v?mh zN|&~ITk{91w;RwhsdRA}4JD2k}O5!}#&zb?7W;3pcO`beS-h6)XGgkB519h-JMni3+ z_VI?jm9DeWM^s-S;VR1d8d7X$=y1^xA3vp@G7>v{8ua=Dp>|aARE@_efkGqYTKmdZ zXABrB^6+ lBb&jf!e9AsE=62Bin=zX+IP21iI3*Sl;bp6~*$xG*sY`z25Zsaor5?D#00(&1)k^L<8vI(r6Db;za!uod z^fp?Rt%|g%#ntXQ&Nkt((Z8%f# z$y6UYX<3Z0POw=`|4QONx5aW7?icsr4{5E-SKL=0kG9tSE^eIn;Pl$>ea)2cB|T&B zVRGxl_TGun+M>3$?NI7$$ma{Ed%e^{S3~f@8hol$r>&$qgltfh!-SpXkQhZ~GEV=Q zP`=vWthu}0I)jVS+5317NhcZkxcmZ)k zi#{p7y;yE>p}8q_t5Zxf3Q8gVv(lV-g|R+{f545j4REhKlHwwRlrwZYjghic!tx1J zJV*j5(yJu)iCqZT7_s)xoq~&*>OlRVG_AhRq$IZONODqsuaH==8!J09-s=l~8zQ@* z*cgy^w$JomDt*cBTO?gmro+yDz2|s{SKP0-gS7<>xG_f&dOAtb{2romy!MvTfHoQD z#Y5VJPogh$6)Dc^!haX}gKaPV`qDtDrrNBfT34+*-j}$6-a_+GRPUQ|X{n`ocfl%% z=70~wpxB~r#hIgFj{0U-S<26qUB)>&PMSHb<$E4&RJY&p zBea**-tSQS%kB32-0XGt`hRbAl_ueH`>kFpB10*ESF(cE1+m%r4=_y;G!)TsoQ%FA z)?;D^!e>3+Blr9Ioaf|u|J5CEp8SgSvOed5;?O1*W!=P7K6uPtn4OJEbZ>2RkkhXbv|moCBae~&yG92!AbD6f9$Uv@W*)z6qJP6 zEo@tZ&XiwVni-E|7wOR$i7p7bYMy0_zl<|>R$OKIf^IC>EO#wwb70msw|BOK1NJ-o zOB2w>!?hh8caQoVcF#L`emXelzv{JVW=>Ap!PCQ|E);m$J?{3{Pi?aHw#jPOradC| zJ$rg``VxK?hlynT$SB$KqyGM{@{jJ{y8EXCte>Dj5Bt5~@nk{nOTtJ-lHn)gAE}!mnU9{%(u0h<tEjy0J+*DY&e*K|j6&N##iARuml0I?iDmyf>%zdm^2r6n#-s;XTva~mlef*hU$ zxC1L7Q=Iy~QRS*$P^5q}{On?O&AFU%Cse%bWE1I{>a}FZOUUT_AQ>-Wu%*3XcZ`>i zVTDOmGj@0q@IUsQReSDrq(b8yl!_(NR5nj9(`h``4vHb^U8D8_hJngBl=E~|OPpb09UjJ){(jP&65uJRzFZuW&e7*}_fDbkK!sUrbJtDzQ;`i)Nbnlj6C;o;Y zEIb4MJJi7BS1G#GPsp8gw46+C0?LZyk5lonBOE+C;>Kv8p)<4-mQ2)sJRbq$Ocys& zEGb#KTV0UWepsXUN(sa&BxQNXuOJPp zhn4>}A)WZRDq1=VyTn_6W27=X8FU7xuB!`NNg%-C42A>Ab{t*_tjr5=`Jf}0J30if zKjMp@*q!q;JKk|?zIDV@i;9)JYAbrd5RZh*14)IB8igkbzz84qD$A{m&*MYWx&7cA zgg1*9>@BD${MNy=*>b$56vez?$QFT+ZlM=%-SdY@aMzxfqDyO|@nJ8pn`?K2jr=cz z{y{%D;fi)91kA=s?8;cFH2R1iovSzKRAQdoOc(J7%6hXGoK8uKMVD$ILDYJckSJ)z z*l9t^NCnk|&MN%59+}jnJ)d7p9eCvisjA*g-zp(FJWrugsB-HxPgrSiA6ne>vc<_XewXYszU5Je)CYav@1OPt z&7D@k3rLnJg^DUyVPY51dh}RJS`m8}#8U^K(_>y0RQY=QE&cF^PV%~fZZ-Y#tgov} zrzf}p{hHx>Ki`5gpocT0BUDj>8)h^*=k#=@v70k4Yn=gOITM@(^9t~41Us3>lSdlU zn8U$XC_h!%fTPB&tFT{}cdTU6)ogcGo=MljI@WZZxm8lZ^ejAvY{6B%|~8b3+^I$RP;&Ja2`@!|K{*?;;n_k74K2V1DdcC<5YL3FZ^& zKbO<|D!o`V%`vo%ez@~}z&%d@#tV39m4NHYFL;%ND6qzxg&K$5Kxw*RK+E zNjcs~RWn#enltv+)J$u?Xp_6A&z2qgAw3pku?$rq&PWiW^$?IbdZ$N6hOYOs)e0Xg zC#0)5kGR|>M%&iyg94shE=;ZN9CV*{PLBq342kiKF2;+6GJ* z>pKS)DEY@S9_P{Q9h;SJNID#)7Z)J&=0aQ)hZrlbxPCFY5bg0+#9gu5N680rIG$xW zf4vrj7BbFlo2MF8Lwu}Wsq_cqkBZ^B$ia;^^Vy!H>N5y?=kAL)Y}aIZ9Hwf8-q3r$ zc7HcsLikRE{iTe?fUi~{_R-`KM5f5!hc56ph(`~U6h#372jvNHqD3}0C`W^s(Y?t3 zRbpkwi)QkHGvO!-+vZ{k3fN^=jGdO>vHV}*uywuqsB&(+qJV;vV${OuTe75R63?16 zm>gxO8RNJxn(G<;%Kl|%+ITria*2r!Hv@Pe;Cr}pSvHSmS2OlF%UK=KZYb4&1rKrf zL7H5aikQE)AxfCd7z~$J!oI=X&DgZ&XkGM#w+b71FLB5#Q?d4ipd{h)H(cMQwgcCL zoc%CeTr`FEcEA{O(EK)Uu}xrXC+$_hNCc{>pmsR;HsxJPTzipJ%W1rhLPL^nC1F=k;we9;8?ruVZY~hY%;3jnE$zz={MWq`+10eqc;pupLG| zOkO-6QL!9AiGonq_Jo*%h`mVo5sIJc1~d<{RiW)JLSLQ&?iA32^w|vu@QwXaXdLMG z15$OsqhYEzn6irr=~~pEX7A)*3Tdg+dXLiH4~4WR#!h0I_zOj~I+h=wo|c?zU|skM ze=xCGPXB}r0hi{n)xNczD;!ir98Ah&|d1>zxN$U&UM7>28N_bPr5IODvl zb~XnOo!8ZW86*!(5al&ZQCE4UiEqYK+T<+A(rkJCv-2Kid95;`ZzVqZY=4v@D^apa*q?f8t57GR$Wh6X# zr_PgMlD%c{C+cw8GVSEkD($*o$4TKjcbY(+Cc3H@i0!IpP#IHP#QL_m{}Zy2PIRAyT=&X?kyqYPjqvVb4n zloyRP%TB5#liVHaCL1xEp4JWNmtTcK8$fX(t^bW-1)7f|QWOYtRLxPzr`=pM{L z16|O4laK_)DgbPtQ0@BOH>c1cv#sqY z(AHB}4HK%R^*_V(mycoOY*_Mdkna-c!Km^19iSvxp0dICQc zLe*L8U;YRC{MI=-?Vbe9J>LC2AyDo?f2q4r4gfFuy{AWq`-74eTERhIq%k<@4z%{z zMw4|ymBnRYZ()STGXakGLycKirZki_sqv1*443$M@Ov{l3RKd>A3@7*wN)7jm)wfW z{2^>wwJ381r}WX5w%F1ky^>%@Kn%jQ7zyh!5d{2>-o+-B0VR=k?Ql685rT(VuO`B#VgtaR{w}*5+u-D2T7NuT5%3Eb}wOsexV0u$l9MHym zWjA*Wdjfd=2YANAkn-hx4#`O2JJ&dZ;I^ESHj*nN;kLo|LP(U8i>qaf6q=lfT?W??6M) zhALO@o#9whxLa6T@UMbo6n!?{XY%-hjM6fo9`C7Xacvh>yqd=|I>eMJ*jt4u00@%E zG3Tk!AWkbD7ez!}=Ql*KJOj>Ti@Yt8Dd_WZP3KN&%h+8yWfj4tEM~XrxvU9XJ!Tk( zGrp0Ud5%`Hi0AAuQipYeUJ1zuznYF%k21mm`i@w}fEpY~cFX&+n+rMY>GHeBu@yG+ zma!voL!$XZc^yu^v#Xq}MNaE&tR-mQ0o=UV7ORWh)0Rejlu?o}<;OJ7c;NS*LjuUxhGhu&5+3SOfTdY=Ft zovnz1Y6*)vyL44Sc=qSr{a*_&)tboaU}#z$@D%dwKyzCwy+Y_+$}4NeSFx)8-~UIx zYgU+7T;#N%Lx>11x^Y%72r-a>_f}U!QEBAyN_?7ccV50--4cdR*r6cP0wa@BLqOj813H ziZ9>YE`WYmy=`D^L8!rvu^WAsrP5ZIGCks8;{2vwwQ}f-tQzcF|*G4d7PG z#VEU;R!C~N;fj-uB;xvD%m5xSVNA8DRAl)%JS@h=(bHk3O~z0K;9OmxlvfD_wHXLX zD+z9xp}yO{;Z?kkhs))JQ8ybQ<2EDDhBb>hV}YSwF^3V-WZn!RA4!Zqxv>e0E;hLA z0938Y1(*|7O#kOLd#;cLT>q1J)Ub^gMZ?WdkP9Q}`|-&5vCxn?J!k7C$a(mk(r+do z!S2>D;J9Z$qyS+1A(_5U=h>8Y4BSSqDTQg0Kt62nQ-bbNZCfsEH+%MFa4MDtEI<_wZH3Oy(J5uS{+Y^;0iga zeIqB{S2#9oB=foQCryA)kOv={pfkRXZ*p?TC})w>hX^sMn$VCX!cCGqk1vs1vB&6$ z^n!kJFg}Ps1ML!0|;Ikz^uP{WTs4yF1dZ>}lt|D1F9zKWDQ92ahwuQ<8 z9$l|kv7iw8zyZyFDWlOOo_?w{9Twz-V{aRSP^ig$@u0;}fu*4u;uch4C@Q2Mwd!pW z#rh(#a^ywM|FX)aoM5yg)}q;$2Yt2&fjNWY4I4b;+He@L&BbOB=-GBb)x*19K7Wah znZv6r%Tb>&Pej;Pu0#*AYtS?qYQYCn#^wSp3vA)SQDxI*EIhtRlq2;i^p%(o_{lIK zZj8Arms7S(dqyv>7K>TF_weEM_4O7zV7I2p;vrT1FquA_jk2wxKRJ~6pF2B0{CRh` zlpOfPxYwH189Xjiz!dC(lcBy3YdM(FE06~jY#Qatl+vMG3d$DLWDN_XFmYjX5Fd|* z^T>G$@fm#7OU=F*HlaT7YA~&&Qy*WC{FVO$%DxE%R)M#?{v*Iwf_tV2!t#{nej-c?aTf<*zd~D~A@H`@? zd+azILxhOMM4+T*pR%#LkQwmG?^h#LFOqUxxqsL;T`5R3NZZ8r$R0?duOZkoeET{0 z6aYF&6Mn%HCMO7g{GNdEgdFgUs2Qa+#LR?E#!HJ=TA@MD+DOMKj`V6V8FNz&SZea7 zJXdHLcrj~2Z1TlgANnRxFXg3UYo7Iu3e!7XPRNnNnr3qk+=k}G2GTkpw-LQ1>ftY* zgY;ImV~kG9@TjgPYk+b9#hq_=Hqb8iRB+C3cQ^7aE

Dx{euXeEU6nzzCwr>T4Mi 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

lKDx;Q| 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 NhaVXdnNGlh#&ZRX?>tx47bzLAq2~|uT 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

%?)e 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%0A0oOcJGY4IvRz(SNOGtXH$hyeW$X&11B> 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 literal 0 HcmV?d00001 diff --git a/scripts/patch-sqlite-for-php52.mjs b/scripts/patch-sqlite-for-php52.mjs new file mode 100644 index 0000000000..e7e5247e69 --- /dev/null +++ b/scripts/patch-sqlite-for-php52.mjs @@ -0,0 +1,625 @@ +/** + * Offline patcher: transforms the upstream SQLite database integration + * plugin into a PHP 5.2-compatible variant. + * + * Pipeline: + * + * 1. Unzip `sqlite-database-integration-v2.2.22.zip` to a temp dir. + * 2. Run `scripts/php52-downgrader/bin/downgrade.php` over the dir. + * The downgrader is an AST-based pipeline built on nikic/php-parser + * v5 that handles every mechanical PHP 7+ -> 5.2 rewrite — type + * declarations, null-coalescing, short arrays, closures, etc. + * 3. Apply a small set of per-file surgical fixes for shapes that + * don't survive a pure AST round-trip (PHP_VERSION_ID-gated + * traits, ReflectionProperty access, WP compatibility polyfills, + * etc.). + * 4. Re-zip to `sqlite-database-integration-v2.2.22-php52.zip`. + * + * Usage: node scripts/patch-sqlite-for-php52.mjs + * + * Requires a host PHP 7.4+ binary (`php` on PATH) to run the AST + * downgrader, plus `composer` to install the downgrader's own + * dependencies the first time. The `vendor/` directory is not + * committed — running this script will `composer install` from + * `scripts/php52-downgrader/composer.lock` if `vendor/autoload.php` + * is missing. + * + * The compiled SQLite plugin and its PHP 5.2 WASM runtime have no + * dependency on this script at runtime — the generated zip is + * committed and served as-is by the build. + */ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { execSync, spawnSync } from 'child_process'; + +const REPO_ROOT = path.resolve( + path.dirname(new URL(import.meta.url).pathname), + '..' +); +const SRC_ZIP = path.join( + REPO_ROOT, + 'packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22.zip' +); +const OUT_ZIP = path.join( + REPO_ROOT, + 'packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip' +); +const DOWNGRADER_DIR = path.join(REPO_ROOT, 'scripts/php52-downgrader'); +const DOWNGRADER = path.join(DOWNGRADER_DIR, 'bin/downgrade.php'); +const DOWNGRADER_AUTOLOAD = path.join(DOWNGRADER_DIR, 'vendor/autoload.php'); + +function ensureDowngraderVendor() { + if (fs.existsSync(DOWNGRADER_AUTOLOAD)) { + return; + } + console.log('Installing downgrader dependencies (composer install)...'); + const result = spawnSync( + 'composer', + ['install', '--no-dev', '--no-interaction', '--no-progress'], + { cwd: DOWNGRADER_DIR, stdio: 'inherit' } + ); + if (result.status !== 0) { + throw new Error( + `composer install failed in ${DOWNGRADER_DIR}. ` + + `The PHP 5.2 downgrader needs its composer deps installed. ` + + `Ensure 'composer' is on PATH and re-run this script.` + ); + } +} + +const TMP_DIR = fs.mkdtempSync(path.join(os.tmpdir(), 'sqlite-php52-patch-')); +try { + ensureDowngraderVendor(); + execSync(`unzip -q "${SRC_ZIP}" -d "${TMP_DIR}"`); + + // Run the AST downgrader. It walks every .php/.copy file and + // rewrites in place. + const pluginRoot = fs + .readdirSync(TMP_DIR, { withFileTypes: true }) + .filter((e) => e.isDirectory()) + .map((e) => path.join(TMP_DIR, e.name))[0]; + if (!pluginRoot) { + throw new Error('zip did not contain a plugin subdirectory'); + } + console.log('Running AST downgrader...'); + const result = spawnSync('php', [DOWNGRADER, pluginRoot], { + stdio: ['ignore', 'inherit', 'inherit'], + }); + if (result.status !== 0) { + throw new Error( + `downgrader failed (exit ${result.status}). ` + + `Requires a host PHP 7.4+ binary named 'php' on PATH.` + ); + } + + // Apply per-file surgical fixes that can't be expressed as AST + // transforms. These run AFTER the downgrader, so they operate on + // the pretty-printed PHP 5.2-compatible output. + console.log('Applying surgical fixes...'); + let surgicalCount = 0; + const files = findFiles(pluginRoot); + for (const filePath of files) { + const rel = path.relative(pluginRoot, filePath); + let content = fs.readFileSync(filePath, 'utf-8'); + const original = content; + + // Rename the reserved `throw` method. AST visitor already + // handles the class definition + call sites, but inline + // references in array literals (`'throw' => 'throw'`) and + // string comparisons slip past — patch those here too. + content = content.replace( + /'throw'(\s*=>\s*)'throw'/g, + "'throw'$1'throwError'" + ); + + // Widen `$allow_unsafe_unquoted_parameters` visibility from + // `private` to `public`. Legacy WordPress (<4.8.3) reads this + // property on wpdb-shaped objects through plain `->property` + // access — not `$this->` — so `protected` would still error on + // PHP 5.2 with "Cannot access protected property". Public is + // therefore the minimum viable relaxation. In-process code + // inside the WASM sandbox can flip this flag, but the + // Playground iframe is a single-trust boundary and the only + // consumer of this build. + content = content.replace( + 'private $allow_unsafe_unquoted_parameters = true;', + 'public $allow_unsafe_unquoted_parameters = true;' + ); + + // Guard WP function calls that may not exist in old WordPress. + // These are WordPress-version dependent, not PHP-version + // dependent, so they can't live in the AST downgrader. + if (filePath.endsWith('class-wp-sqlite-db.php')) { + content = content.replace( + "$query = apply_filters('query', $query);", + "if ( function_exists( 'apply_filters' ) ) { $query = apply_filters( 'query', $query ); }" + ); + content = content.replace( + "$incompatible_modes = (array) apply_filters('incompatible_sql_modes', $this->incompatible_modes);", + "$_modes = isset( $this->incompatible_modes ) ? $this->incompatible_modes : array();\n\t\t$incompatible_modes = function_exists( 'apply_filters' ) ? (array) apply_filters( 'incompatible_sql_modes', $_modes ) : (array) $_modes;" + ); + content = content.replace( + 'wp_load_translations_early();', + "if ( function_exists( 'wp_load_translations_early' ) ) { wp_load_translations_early(); }" + ); + } + + content = content.replace( + /if \( is_multisite\(\) \)/g, + "if ( function_exists('is_multisite') && is_multisite() )" + ); + content = content.replace( + /if \(is_multisite\(\)\)/g, + "if ( function_exists('is_multisite') && is_multisite() )" + ); + content = content.replace( + /if \( is_admin\(\) \)/g, + "if ( function_exists('is_admin') && is_admin() )" + ); + content = content.replace( + /if \(is_admin\(\)\)/g, + "if ( function_exists('is_admin') && is_admin() )" + ); + + if ( + filePath.includes( + 'class-wp-sqlite-information-schema-reconstructor.php' + ) + ) { + content = content.replace( + '$wpdb->set_prefix( $table_prefix );', + "if ( method_exists( $wpdb, 'set_prefix' ) ) { $wpdb->set_prefix( $table_prefix ); }" + ); + // Load wp-admin/includes/schema.php so `wp_get_db_schema()` + // becomes available on the legacy WP install path. + // + // The @require_once + eval fallback looks odd but is load- + // bearing: + // + // 1. `@require_once` suppresses E_STRICT / E_DEPRECATED + // warnings that pre-3.5 WordPress emits when its + // legacy schema.php runs under PHP 5.2 (strict-mode + // method signatures, reassigning $this in globals, + // etc.). Without the @, the include trips a strict + // warning that aborts the legacy install chain. + // + // 2. Some legacy WP branches (pre-3.1) `require` or + // `include` schema.php elsewhere in their bootstrap. + // When that happens before reconstruction runs, + // `require_once` here is a no-op and + // `wp_get_db_schema()` can STILL be undefined — + // because the earlier include landed inside a + // function scope that doesn't expose top-level + // functions, or because the earlier file path + // differs by normalization and PHP's resolved-file + // cache doesn't treat the two includes as the same. + // The `eval('?>' . file_get_contents(...))` branch + // forces the file's global definitions to run a + // second time in the current scope and is the only + // thing that reliably defines `wp_get_db_schema()` + // on WP 2.x–3.0. + // + // DO NOT simplify to a plain `require_once` — doing so + // causes the pre-3.1 install to silently no-op writes, + // leaving a 0-byte SQLite file and every subsequent + // request landing on wp-admin/install.php. (The plain- + // require_once variant also collides with the + // `wp_get_db_schema` `function_exists` guard regex below.) + // + // In-sandbox only: the PHP file system is the ephemeral + // WASM VFS, so a `file_get_contents()` + eval on ABSPATH + // is a local-only bootstrap, not a supply-chain surface. + content = content.replace( + "require_once ABSPATH . 'wp-admin/includes/schema.php';", + "@require_once ABSPATH . 'wp-admin/includes/schema.php'; " + + "if (!function_exists('wp_get_db_schema') && !isset($GLOBALS['wp_queries'])) " + + "{ eval('?>' . file_get_contents(ABSPATH . 'wp-admin/includes/schema.php')); }" + ); + content = content.replace( + /throw new WP_SQLite_Driver_Exception\(\s*\$this->driver,\s*'Failed to parse the MySQL query\.'\s*\);/g, + 'return; // Non-fatal: old WP schema may not parse cleanly' + ); + const fallback = + '(isset($GLOBALS["wp_queries"]) ? $GLOBALS["wp_queries"] : "")'; + content = content + .replace( + "wp_get_db_schema('global')", + `(function_exists("wp_get_db_schema") ? wp_get_db_schema( 'global' ) : ${fallback})` + ) + .replace( + /wp_get_db_schema\('blog', \(int\) \$blog_id\)/g, + `(function_exists("wp_get_db_schema") ? wp_get_db_schema( 'blog', (int) $blog_id ) : ${fallback})` + ) + .replace( + "wp_get_db_schema('blog')", + `(function_exists("wp_get_db_schema") ? wp_get_db_schema( 'blog' ) : ${fallback})` + ); + content = content.replace( + /if \(\s*!\s*function_exists\(\s*'wp_get_db_schema'\s*\)\s*\) \{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}/s, + '// wp_get_db_schema polyfill handled inline' + ); + } + + if (filePath.includes('install-functions.php')) { + content = content.replace( + '$table_schemas = wp_get_db_schema();', + '$table_schemas = function_exists("wp_get_db_schema") ? wp_get_db_schema() : (isset($GLOBALS["wp_queries"]) ? $GLOBALS["wp_queries"] : "");' + ); + content = content.replace( + "if (!function_exists('wp_install')) {", + "if ( ! function_exists( 'wp_install' ) && function_exists( 'update_user_meta' ) ) {" + ); + } + + // Add placeholder_escape + wpdb polyfills (for WP < 4.8.3). + if ( + filePath.endsWith('class-wp-sqlite-db.php') && + !content.includes('function add_placeholder_escape') + ) { + const polyfill = ` + + public function placeholder_escape() { + static $placeholder; + if ( ! $placeholder ) { + $algo = function_exists( 'hash' ) ? 'sha256' : 'sha1'; + $salt = defined( 'AUTH_SALT' ) && AUTH_SALT ? AUTH_SALT : (string) rand(); + $placeholder = '{' . hash_hmac( $algo, uniqid( $salt, true ), $salt ) . '}'; + } + if ( function_exists( 'add_filter' ) + && function_exists( 'has_filter' ) + && false === has_filter( 'query', array( $this, 'remove_placeholder_escape' ) ) + ) { + add_filter( 'query', array( $this, 'remove_placeholder_escape' ), 0 ); + } + return $placeholder; + } + public function add_placeholder_escape( $query ) { + return str_replace( '%', $this->placeholder_escape(), $query ); + } + public function remove_placeholder_escape( $query ) { + return str_replace( $this->placeholder_escape(), '%', $query ); + } + public function get_caller() { + if ( method_exists( get_parent_class( $this ), 'get_caller' ) ) { + return parent::get_caller(); + } + return ''; + } + public function log_query( $query, $elapsed, $caller, $start = 0.0, $data = array() ) { + if ( method_exists( get_parent_class( $this ), 'log_query' ) ) { + return parent::log_query( $query, $elapsed, $caller, $start, $data ); + } + if ( !isset( $this->queries ) ) { $this->queries = array(); } + $this->queries[] = array( $query, $elapsed, $caller ); + } + + public $insert_id = 0; + public $num_rows = 0; + public $last_result = array(); + public $last_error = ''; + public $last_query = null; + public $rows_affected = 0; + public $col_info = null; + public $result = null; + public $incompatible_modes = array(); + public $dbname = null; + + public function reinitialize_sqlite() { + if ( $this->dbh instanceof WP_SQLite_Driver || $this->dbh instanceof WP_SQLite_Translator ) { + return; + } + if ( empty( $this->dbname ) && defined( 'DB_NAME' ) ) { + $this->dbname = DB_NAME; + } + if ( !isset( $this->last_result ) ) { + $this->last_result = array(); + } + global $table_prefix; + if ( isset( $table_prefix ) && empty( $this->prefix ) && method_exists( $this, 'set_prefix' ) ) { + $this->set_prefix( $table_prefix ); + } + if ( !isset( $GLOBALS['wp_queries'] ) ) { + $GLOBALS['wp_queries'] = ''; + } + $this->dbh = null; + $this->db_connect(); + } + public function init_charset() { + if ( method_exists( get_parent_class( $this ), 'init_charset' ) ) { + parent::init_charset(); + } elseif ( defined( 'DB_CHARSET' ) ) { + $this->charset = DB_CHARSET; + } + } +`; + // Find the WP_SQLite_DB class body's closing brace. The + // AST downgrader appends helper functions after the class, + // so lastIndexOf('}') would land inside a helper — walk + // the braces from the class declaration instead. + const classIdx = content.indexOf('class WP_SQLite_DB'); + if (classIdx === -1) { + throw new Error( + 'class WP_SQLite_DB not found in class-wp-sqlite-db.php' + ); + } + const classOpen = content.indexOf('{', classIdx); + const classClose = findMatchingBrace(content, classOpen); + content = + content.slice(0, classClose) + + polyfill + + content.slice(classClose); + } + + // Fix WP_SQLite_DB::prepare() ReflectionProperty access. The + // wpdb `allow_unsafe_unquoted_parameters` property only + // appeared in WP 6.2. Reflecting on an absent property throws + // ReflectionException — wrap in a try/catch. + content = content.replace( + /\$wpdb_allow_unsafe_unquoted_parameters = \$this->__get\(\s*'allow_unsafe_unquoted_parameters'\s*\);\s*\n\s*if \(\s*\$wpdb_allow_unsafe_unquoted_parameters !== \$this->allow_unsafe_unquoted_parameters\s*\) \{\s*\n\s*\$property = new ReflectionProperty\([^}]+\}/s, + "if ( method_exists( $this, '__get' ) ) {\n\t\t\ttry {\n\t\t\t\t$wpdb_allow_unsafe_unquoted_parameters = $this->__get( 'allow_unsafe_unquoted_parameters' );\n\t\t\t\tif ( $wpdb_allow_unsafe_unquoted_parameters !== $this->allow_unsafe_unquoted_parameters ) {\n\t\t\t\t\t$property = new ReflectionProperty( 'wpdb', 'allow_unsafe_unquoted_parameters' );\n\t\t\t\t\t$property->setAccessible( true );\n\t\t\t\t\t$property->setValue( $this, $this->allow_unsafe_unquoted_parameters );\n\t\t\t\t\t$property->setAccessible( false );\n\t\t\t\t}\n\t\t\t} catch (Exception $e) { /* Old WP lacks this property */ }\n\t\t\t}" + ); + + // PDO\SQLite / PDO\MySQL — namespace-qualified class references + // inside `instanceof` that PHP 5.2 can't even parse. Replace + // the whole instanceof with `false` (PHP 5.2 can never be PDO\X). + content = content.replace( + /\$\w+\s+instanceof\s+PDO\\(?:SQLite|MySQL)/g, + 'false' + ); + + // `WP_SQLite_Driver::__set('main_db_name', $value)` and + // `quote_mysql_utf8_string_literal()` use `Closure::call()` to + // access private members of the inner mysql_on_sqlite_driver. + // PHP 5.2 has no closures; the AST hoist produces a string + // helper name, so the original `$closure->call(...)` syntax + // becomes a "method call on non-object" fatal at runtime. + // + // Both proxies exist for tests only. The driver constructor + // fires `$this->main_db_name = $database` which triggers the + // magic `__set` because `main_db_name` is not declared on the + // driver class — that's the call path that crashes legacy WP + // boot. Declare a real public `$main_db_name` property on + // WP_SQLite_Driver so the assignment lands on a regular slot + // instead of going through `__set`, then neutralise both + // proxy bodies so they can never invoke the broken closures. + if (filePath.endsWith('class-wp-sqlite-driver.php')) { + // Add a real `public $main_db_name` property right after + // the class declaration. Anchored on the + // `mysql_on_sqlite_driver` proxy property which the + // downgrader leaves as the first declared field. + content = content.replace( + /(class WP_SQLite_Driver\b[^{]*\{)/, + '$1\n public $main_db_name = null;' + ); + // Replace the broken `__set` body for `main_db_name` + // with a direct field assignment. The remaining magic + // for other property names is fine (it still throws via + // the closure path, but no caller hits it during boot). + // Use [\s\S]*? (non-greedy any-including-newline) for the + // _pg52_set_capture(...) argument list because it contains + // nested parentheses (the captures `array(...)`). + content = content.replace( + /if \('main_db_name' === \$name\) \{\s*\$closure = _pg52_set_capture\([\s\S]*?\);\s*\$closure->call\(\$this->mysql_on_sqlite_driver, \$value\);\s*\}/, + `if ('main_db_name' === \$name) { + \$this->main_db_name = \$value; + // Best-effort: also set on the inner driver if it exposes + // the slot publicly. PHP 5.2 has no Closure::bind, so we + // can't reach private fields from here. + if (property_exists(\$this->mysql_on_sqlite_driver, 'main_db_name')) { + @\$this->mysql_on_sqlite_driver->main_db_name = \$value; + } + }` + ); + // Replace the broken `quote_mysql_utf8_string_literal` + // proxy body with a no-op fallback. It's only used by + // the same closure-based path which never works on PHP + // 5.2; the inner driver's own private copy is what + // production code actually uses. + content = content.replace( + /(private function quote_mysql_utf8_string_literal\(\$utf8_literal\)\s*\{)\s*\$closure = _pg52_set_capture\([\s\S]*?\);\s*return \$closure->call\(\$this->mysql_on_sqlite_driver, \$utf8_literal\);\s*\}/, + `$1 + // PHP 5.2: no Closure::call(); fall back to a naive escape. + // The inner driver's own private copy is what production code + // hits — this proxy only exists for tests. + return "'" . str_replace("'", "''", \$utf8_literal) . "'"; + }` + ); + } + + // Exception::__construct only takes 2 params in PHP 5.2 + // (PHP 5.3 added $previous). Strip the third arg when a + // subclass passes it to parent::__construct. + if (filePath.endsWith('class-wp-sqlite-driver-exception.php')) { + content = content.replace( + /parent::__construct\(\s*\$message,\s*0,\s*\$previous\s*\)/, + 'parent::__construct( $message, 0 )' + ); + } + + // Inline the PHP < 8 trait definitions from + // class-wp-pdo-proxy-statement.php. The upstream file ships a + // `if ( PHP_VERSION_ID < 80000 ) { trait ... } else { trait ... }` + // block with two identically-named traits. PHP 5.2 doesn't + // know about traits at all. Delete both blocks and replace + // `use TraitName;` with the inlined methods from the PHP < 8 + // branch. + if (filePath.endsWith('class-wp-pdo-proxy-statement.php')) { + content = inlineProxyStatementTraits(content); + } + + // Add the array_column() polyfill (PHP 5.5+) to each + // php-polyfills.php. The polyfills file runs early, so it + // covers every subsequent file. + if ( + filePath.endsWith('php-polyfills.php') && + !content.includes('function array_column') + ) { + content += ` +if ( ! function_exists( 'array_column' ) ) { +\t/** +\t * PHP 5.5+ array_column() polyfill for PHP 5.2. +\t */ +\tfunction array_column( $input, $column_key, $index_key = null ) { +\t\t$result = array(); +\t\tforeach ( $input as $row ) { +\t\t\t$has_value = false; +\t\t\t$value = null; +\t\t\tif ( null === $column_key ) { +\t\t\t\t$value = $row; +\t\t\t\t$has_value = true; +\t\t\t} elseif ( is_array( $row ) && array_key_exists( $column_key, $row ) ) { +\t\t\t\t$value = $row[ $column_key ]; +\t\t\t\t$has_value = true; +\t\t\t} elseif ( is_object( $row ) && isset( $row->{ $column_key } ) ) { +\t\t\t\t$value = $row->{ $column_key }; +\t\t\t\t$has_value = true; +\t\t\t} +\t\t\tif ( ! $has_value ) { +\t\t\t\tcontinue; +\t\t\t} +\t\t\tif ( null === $index_key ) { +\t\t\t\t$result[] = $value; +\t\t\t} else { +\t\t\t\t$key = null; +\t\t\t\tif ( is_array( $row ) && array_key_exists( $index_key, $row ) ) { +\t\t\t\t\t$key = $row[ $index_key ]; +\t\t\t\t} elseif ( is_object( $row ) && isset( $row->{ $index_key } ) ) { +\t\t\t\t\t$key = $row->{ $index_key }; +\t\t\t\t} +\t\t\t\tif ( null !== $key ) { +\t\t\t\t\t$result[ $key ] = $value; +\t\t\t\t} else { +\t\t\t\t\t$result[] = $value; +\t\t\t\t} +\t\t\t} +\t\t} +\t\treturn $result; +\t} +} +`; + } + + if (content !== original) { + fs.writeFileSync(filePath, content); + surgicalCount++; + console.log(` Surgical: ${rel}`); + } + } + console.log( + `Applied surgical fixes to ${surgicalCount}/${files.length} files` + ); + + // Static post-pass: scan the pretty-printed output for `self::`, + // `parent::`, or `static::` references that ended up OUTSIDE any + // class body. The PHP 5.2 SAPI lint catches parse errors but not + // these — they're a runtime fatal ("Cannot access self:: when no + // class scope is active") and would otherwise only surface during + // the legacy WP boot test. Failing here gives a precise file:line. + const scanResult = spawnSync( + 'node', + [ + path.join( + REPO_ROOT, + 'scripts/php52-downgrader/bin/scan-out-of-class-self.mjs' + ), + pluginRoot, + ], + { stdio: ['ignore', 'inherit', 'inherit'] } + ); + if (scanResult.status !== 0) { + throw new Error( + 'out-of-class self::/parent::/static:: scan failed; see diagnostics above' + ); + } + + // Re-zip. + if (fs.existsSync(OUT_ZIP)) fs.unlinkSync(OUT_ZIP); + execSync(`cd "${TMP_DIR}" && zip -r -q "${OUT_ZIP}" .`); + console.log(`\nCreated: ${OUT_ZIP}`); +} finally { + fs.rmSync(TMP_DIR, { recursive: true, force: true }); +} + +/** Returns the index of the `}` matching the `{` at `openIdx`, or -1. */ +function findMatchingBrace(str, openIdx) { + let depth = 0; + let inString = null; + for (let i = openIdx; i < str.length; i++) { + const ch = str[i]; + if (inString) { + if (ch === '\\') { + i++; + continue; + } + if (ch === inString) inString = null; + continue; + } + if (ch === "'" || ch === '"') { + inString = ch; + continue; + } + if (ch === '/' && str[i + 1] === '/') { + const nl = str.indexOf('\n', i); + i = nl === -1 ? str.length : nl; + continue; + } + if (ch === '/' && str[i + 1] === '*') { + const end = str.indexOf('*/', i + 2); + i = end === -1 ? str.length : end + 1; + continue; + } + if (ch === '{') { + depth++; + } else if (ch === '}') { + depth--; + if (depth === 0) return i; + } + } + return -1; +} + +function findFiles(dir) { + const out = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) out.push(...findFiles(full)); + else if (entry.name.endsWith('.php') || entry.name.endsWith('.copy')) + out.push(full); + } + return out; +} + +/** + * Inlines the PHP < 8 trait methods of class-wp-pdo-proxy-statement.php + * directly into the class body. PHP 5.2 doesn't know about traits. + */ +function inlineProxyStatementTraits(content) { + // Remove the entire `if ( PHP_VERSION_ID < 80000 ) { trait ... } else { trait ... }` block. + content = content.replace( + /if \(PHP_VERSION_ID < 80000\) \{[\s\S]*?\n\} else \{[\s\S]*?\n\}\n/, + '' + ); + // Replace `use WP_PDO_Proxy_Statement_PHP_Compat;` with the + // inlined PHP 5.2-compatible methods. + const inlined = ` + public function setFetchMode( $mode, $params = null ) { + if ( null === $params ) { + return $this->setDefaultFetchMode( $mode ); + } + return $this->setDefaultFetchMode( $mode, $params ); + } + + public function fetchAll( $mode = null, $class_name = null, $constructor_args = null ) { + if ( null === $class_name && null === $constructor_args ) { + return $this->fetchAllRows( $mode ); + } + return $this->fetchAllRows( $mode, $class_name, $constructor_args ); + } +`; + content = content.replace( + /^\s*use WP_PDO_Proxy_Statement_PHP_Compat;/m, + inlined + ); + return content; +} diff --git a/scripts/php52-downgrader/.gitignore b/scripts/php52-downgrader/.gitignore new file mode 100644 index 0000000000..57872d0f1e --- /dev/null +++ b/scripts/php52-downgrader/.gitignore @@ -0,0 +1 @@ +/vendor/ diff --git a/scripts/php52-downgrader/bin/downgrade.php b/scripts/php52-downgrader/bin/downgrade.php new file mode 100644 index 0000000000..a0b983f80d --- /dev/null +++ b/scripts/php52-downgrader/bin/downgrade.php @@ -0,0 +1,123 @@ +#!/usr/bin/env php + PHP 5.2 downgrader entrypoint. + * + * Walks every `.php` (and `.copy`) file under the given directory and + * rewrites it in place using an AST-based pipeline built on top of + * nikic/php-parser v5. + * + * Usage: + * php scripts/php52-downgrader/bin/downgrade.php [--output=] + * + * Exits with a non-zero status if any file fails to parse, transform, + * or pretty-print. + */ + +declare(strict_types=1); + +require __DIR__ . '/../vendor/autoload.php'; + +use WpPlayground\Php52Downgrader\Downgrader; + +$argv = $_SERVER['argv']; +array_shift($argv); + +$inputDir = null; +$outputDir = null; +foreach ($argv as $arg) { + if (strpos($arg, '--output=') === 0) { + $outputDir = substr($arg, strlen('--output=')); + } elseif ($inputDir === null) { + $inputDir = $arg; + } +} + +if ($inputDir === null) { + fwrite(STDERR, "usage: downgrade.php [--output=]\n"); + exit(2); +} +if (!is_dir($inputDir)) { + fwrite(STDERR, "error: input directory not found: {$inputDir}\n"); + exit(2); +} + +$downgrader = new Downgrader(); + +$failures = []; +$patched = 0; +$total = 0; + +// Collect every file path up front so we can run two passes in a +// stable order. Pass 1 = discovery (which class constants will be +// promoted to static props anywhere in the project); pass 2 = full +// downgrade with the cross-file registry available. +$allFiles = []; +$iter = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($inputDir, FilesystemIterator::SKIP_DOTS) +); +foreach ($iter as $fileInfo) { + /** @var SplFileInfo $fileInfo */ + if (!$fileInfo->isFile()) { + continue; + } + $name = $fileInfo->getFilename(); + if (!preg_match('/\.(php|copy)$/', $name)) { + continue; + } + $allFiles[] = $fileInfo->getPathname(); +} +sort($allFiles); + +// Pass 1: cross-file hoisted-constant discovery. Walks the AST with +// only the namespace-strip + ArrayClassConstantVisitor so the +// downgrader knows every `Foo::CONST` reference that file B will +// need rewritten to `Foo::$CONST` (where `Foo` was promoted in file +// A). Skipped files (parse errors etc.) propagate to pass 2 so the +// developer sees the error there. +foreach ($allFiles as $path) { + $rel = ltrim(substr($path, strlen($inputDir)), '/'); + $source = @file_get_contents($path); + if ($source === false) { + continue; + } + try { + $downgrader->collectHoistedConsts($source); + } catch (Throwable $e) { + // Defer the error to pass 2 so the file shows up in the + // failures list with a real downgrade-context message. + } +} + +foreach ($allFiles as $path) { + $total++; + $rel = ltrim(substr($path, strlen($inputDir)), '/'); + try { + $source = file_get_contents($path); + if ($source === false) { + throw new RuntimeException("unreadable file"); + } + $result = $downgrader->downgrade($source, $rel); + if ($outputDir !== null) { + $destPath = rtrim($outputDir, '/') . '/' . $rel; + @mkdir(dirname($destPath), 0777, true); + file_put_contents($destPath, $result); + } else { + if ($result !== $source) { + file_put_contents($path, $result); + $patched++; + } + } + } catch (Throwable $e) { + $failures[] = "{$rel}: " . $e->getMessage(); + fwrite(STDERR, "FAIL {$rel}: " . $e->getMessage() . "\n"); + } +} + +fwrite(STDOUT, "downgraded {$patched}/{$total} files\n"); + +if ($failures) { + fwrite(STDERR, "\n" . count($failures) . " file(s) failed.\n"); + exit(1); +} +exit(0); diff --git a/scripts/php52-downgrader/bin/lint-php52.mjs b/scripts/php52-downgrader/bin/lint-php52.mjs new file mode 100644 index 0000000000..db520c62ab --- /dev/null +++ b/scripts/php52-downgrader/bin/lint-php52.mjs @@ -0,0 +1,100 @@ +/** + * Smoke-tests every `.php`/`.copy` file under a directory with the + * PHP 5.2 WebAssembly runtime by loading the file through the SAPI + * request handler and inspecting stderr for parse errors. + * + * Usage: node scripts/php52-downgrader/bin/lint-php52.mjs + * + * Prints a summary and exits non-zero if any file has a Parse error. + * Non-parse runtime errors (undefined functions, missing classes, + * includes failing, etc.) are ignored — the files are executed in a + * context that doesn't have WordPress or the rest of the plugin + * loaded, so runtime failures are expected and uninteresting for the + * purpose of syntax validation. + * + * The PHP 5.2 WASM build doesn't expose a CLI entry point + * (`wasm_add_cli_arg` / `run_cli` aren't compiled in), so we can't + * use `php.cli(['php', '-l', ...])`. The SAPI `run()` path is the + * only supported invocation — PHP compiles the whole file before + * execution begins, and a parse error shows up in stderr regardless + * of what the first statement tries to do. + */ +import fs from 'fs'; +import path from 'path'; +import { loadNodeRuntime } from '@php-wasm/node'; +import { PHP, FileLockManagerInMemory } from '@php-wasm/universal'; + +const ROOT = process.argv[2]; +if (!ROOT) { + console.error('usage: lint-php52.mjs '); + process.exit(2); +} + +function findFiles(dir) { + const out = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + out.push(...findFiles(full)); + } else if (/\.(php|copy)$/.test(entry.name)) { + out.push(full); + } + } + return out; +} + +const files = findFiles(ROOT); +console.log(`Linting ${files.length} files with PHP 5.2 WASM...`); + +// A single PHP instance is reusable across run() calls (unlike cli()), +// and PHP 5.2 WASM doesn't expose cli() anyway, so we just use one +// instance for the whole lint. +const php = new PHP( + await loadNodeRuntime('5.2', { + fileLockManager: new FileLockManagerInMemory(), + emscriptenOptions: { processId: 1 }, + }) +); +php.mkdir('/check'); + +let failures = 0; +for (const file of files) { + const rel = path.relative(ROOT, file); + try { + const contents = fs.readFileSync(file, 'utf-8'); + php.writeFile('/check/file.php', contents); + let response; + try { + response = await php.run({ scriptPath: '/check/file.php' }); + } catch (err) { + // run() throws PHPExecutionFailureError on any non-zero + // exit code. Fish out the inner response so we can inspect + // stderr for parse errors. Anything that isn't a parse + // error is not our concern for lint purposes. + if (err && err.response) { + response = err.response; + } else { + throw err; + } + } + const stderr = response.errors || ''; + const stdout = response.text || ''; + const combined = stderr + '\n' + stdout; + if (/Parse error|syntax error/i.test(combined)) { + failures++; + console.log(`FAIL ${rel}`); + const firstErr = combined + .split('\n') + .find((l) => /Parse error|syntax error/i.test(l)); + if (firstErr) { + console.log(` ${firstErr.trim()}`); + } + } + } catch (e) { + failures++; + console.log(`FAIL ${rel}: ${e.message}`); + } +} + +console.log(`\n${failures}/${files.length} failed`); +process.exit(failures ? 1 : 0); diff --git a/scripts/php52-downgrader/bin/scan-out-of-class-self.mjs b/scripts/php52-downgrader/bin/scan-out-of-class-self.mjs new file mode 100644 index 0000000000..990167eb30 --- /dev/null +++ b/scripts/php52-downgrader/bin/scan-out-of-class-self.mjs @@ -0,0 +1,311 @@ +/** + * Static scan for `self::`, `parent::`, and `static::` tokens that + * appear OUTSIDE any class body in pretty-printed PHP source. + * + * PHP 5.2 (and every other PHP) treats those as a runtime fatal: + * + * Fatal error: Cannot access self:: when no class scope is active + * + * The PHP 5.2 SAPI lint (`lint-php52.mjs`) only catches PARSE errors, + * so this class of bug slips past it. The legacy WP boot test does + * catch it, but only after a full WordPress request cycle. This scan + * is a fast, deterministic check we can run right after the AST + * downgrader to fail the build with a precise file:line. + * + * Algorithm: walk every `.php`/`.copy` file under the given directory + * one character at a time, tracking: + * + * - whether we are inside a `'`/`"` string literal (with backslash + * escapes) or a heredoc/nowdoc; + * - whether we are inside a `//`, `#`, or `/* … *\/` comment; + * - the brace depth at which the most recent `class`/`interface`/ + * `trait` keyword was opened, so we know if the current `{`-level + * is still inside that class body. + * + * Whenever we encounter `self::`, `parent::`, or `static::` outside any + * class body, record a violation with file path and line number. + * + * This is intentionally a token scan, not an AST walk: the input has + * already been pretty-printed and re-tokenised would be 100x slower. + * The simple state machine catches every violation we have seen in + * practice, including refs inside hoisted top-level array literals, + * top-level function bodies, and global expressions. + * + * Usage: node scripts/php52-downgrader/bin/scan-out-of-class-self.mjs + * + * Exits non-zero (with a diagnostic) on any violation. + */ +import fs from 'fs'; +import path from 'path'; + +const ROOT = process.argv[2]; +if (!ROOT) { + console.error('usage: scan-out-of-class-self.mjs '); + process.exit(2); +} + +function findFiles(dir) { + const out = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + out.push(...findFiles(full)); + } else if (/\.(php|copy)$/.test(entry.name)) { + out.push(full); + } + } + return out; +} + +const files = findFiles(ROOT); + +const violations = []; +for (const file of files) { + const src = fs.readFileSync(file, 'utf-8'); + scanOne(file, src); +} + +if (violations.length > 0) { + console.error( + `\nFAIL: ${violations.length} out-of-class self::/parent::/static:: violations\n` + ); + for (const v of violations) { + console.error(` ${v.file}:${v.line}: ${v.snippet}`); + } + process.exit(1); +} +console.log(`scanned ${files.length} files, 0 out-of-class self:: violations`); + +/** + * Scans a single file. Pushes any out-of-class self/parent/static + * scope-resolution into the shared `violations` array. + * + * State: brace depth and a stack of "class-opens" recording the brace + * depth at which each currently-open class/interface/trait body began. + * When we see `{` at depth N right after a class declaration, we push + * N+1 onto the stack and increment depth. When `}` closes that depth, + * we pop. The stack is non-empty iff we are inside a class body. + * + * Implementation note: PHP 5.2 has no traits, but the downgraded + * output may still contain `interface` declarations, so we treat + * interface/trait bodies as class scopes too. + */ +function scanOne(filePath, src) { + const len = src.length; + let i = 0; + let line = 1; + let inPhp = false; + let braceDepth = 0; + const classOpenDepths = []; + let pendingClassDecl = false; + + while (i < len) { + const ch = src[i]; + const next = src[i + 1]; + + if (ch === '\n') line++; + + if (!inPhp) { + // Look for `') { + inPhp = false; + i += 2; + continue; + } + + // Line comment. + if (ch === '/' && next === '/') { + const nl = src.indexOf('\n', i); + if (nl === -1) return; + i = nl; + continue; + } + // `#` line comment. + if (ch === '#') { + const nl = src.indexOf('\n', i); + if (nl === -1) return; + i = nl; + continue; + } + // Block comment. + if (ch === '/' && next === '*') { + const end = src.indexOf('*/', i + 2); + if (end === -1) return; + for (let k = i; k < end + 2; k++) { + if (src[k] === '\n') line++; + } + i = end + 2; + continue; + } + + // Strings. + if (ch === "'") { + i++; + while (i < len) { + if (src[i] === '\\' && src[i + 1] !== undefined) { + i += 2; + continue; + } + if (src[i] === '\n') line++; + if (src[i] === "'") { + i++; + break; + } + i++; + } + continue; + } + if (ch === '"') { + i++; + while (i < len) { + if (src[i] === '\\' && src[i + 1] !== undefined) { + i += 2; + continue; + } + if (src[i] === '\n') line++; + if (src[i] === '"') { + i++; + break; + } + i++; + } + continue; + } + // Heredoc / nowdoc. + if (ch === '<' && next === '<' && src[i + 2] === '<') { + // `<< 0 && + classOpenDepths[classOpenDepths.length - 1] === braceDepth + ) { + classOpenDepths.pop(); + } + braceDepth--; + i++; + continue; + } + // `;` cancels a pending class decl (e.g. `class Foo;` doesn't exist + // but `use Foo, Bar;` after an unrelated `class` keyword shouldn't + // confuse the state). + if (ch === ';' && pendingClassDecl) { + pendingClassDecl = false; + } + + // Class / interface / trait keyword. + if ( + (ch === 'c' || ch === 'i' || ch === 't') && + isWordBoundary(src, i) + ) { + const rest = src.slice(i, i + 10); + let kwLen = 0; + if (/^class\b/.test(rest) && !isClassConstantUse(src, i)) { + kwLen = 5; + } else if (/^interface\b/.test(rest)) { + kwLen = 9; + } else if (/^trait\b/.test(rest)) { + kwLen = 5; + } + if (kwLen > 0) { + pendingClassDecl = true; + i += kwLen; + continue; + } + } + + // The actual scan: self::, parent::, static::. + if ((ch === 's' || ch === 'p') && isWordBoundary(src, i)) { + const m = /^(self|parent|static)::/.exec(src.slice(i)); + if (m) { + if (classOpenDepths.length === 0) { + const lineSnippet = extractLine(src, i).trim(); + violations.push({ + file: path.relative(process.cwd(), filePath), + line, + snippet: lineSnippet.slice(0, 200), + }); + } + i += m[0].length; + continue; + } + } + + i++; + } +} + +/** + * True if position `i` is at a word boundary (the previous character is + * not part of an identifier). + */ +function isWordBoundary(src, i) { + if (i === 0) return true; + const prev = src[i - 1]; + return !/[A-Za-z0-9_$\\]/.test(prev); +} + +/** + * Distinguishes the `class` keyword as a class declaration from + * `Foo::class` (PHP 5.5+ class-name fetch). The downgrader rewrites + * `::class` away, but be defensive in case any survive. + */ +function isClassConstantUse(src, i) { + if (i < 2) return false; + return src[i - 1] === ':' && src[i - 2] === ':'; +} + +function extractLine(src, idx) { + const start = src.lastIndexOf('\n', idx - 1) + 1; + let end = src.indexOf('\n', idx); + if (end === -1) end = src.length; + return src.slice(start, end); +} diff --git a/scripts/php52-downgrader/composer.json b/scripts/php52-downgrader/composer.json new file mode 100644 index 0000000000..1e038145fc --- /dev/null +++ b/scripts/php52-downgrader/composer.json @@ -0,0 +1,19 @@ +{ + "name": "wp-playground/php52-downgrader", + "description": "AST-based PHP 7+ -> PHP 5.2 downgrader for the offline SQLite integration plugin patcher.", + "type": "library", + "license": "GPL-2.0-or-later", + "require": { + "php": ">=7.4", + "nikic/php-parser": "^5.0" + }, + "autoload": { + "psr-4": { + "WpPlayground\\Php52Downgrader\\": "src/" + } + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true + } +} diff --git a/scripts/php52-downgrader/composer.lock b/scripts/php52-downgrader/composer.lock new file mode 100644 index 0000000000..402f130f9d --- /dev/null +++ b/scripts/php52-downgrader/composer.lock @@ -0,0 +1,79 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "871af23bd940813edbc0506ebe9005f0", + "packages": [ + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.4" + }, + "platform-dev": {}, + "plugin-api-version": "2.9.0" +} diff --git a/scripts/php52-downgrader/src/Downgrader.php b/scripts/php52-downgrader/src/Downgrader.php new file mode 100644 index 0000000000..fa6c661d8c --- /dev/null +++ b/scripts/php52-downgrader/src/Downgrader.php @@ -0,0 +1,199 @@ + PHP 5.2 transformation pipeline. + * + * One instance can be reused for multiple files. Each call to + * {@see downgrade()} parses the source with nikic/php-parser, runs a + * chain of {@see PhpParser\NodeVisitorAbstract} transformations, and + * pretty-prints the result with {@see PrettyPrinter} (a subclass of + * PhpParser\PrettyPrinter\Standard that overrides the few nodes where + * the upstream printer emits PHP 5.3+ syntax). + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader; + +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitor\NameResolver; +use PhpParser\NodeVisitor\ParentConnectingVisitor; +use PhpParser\ParserFactory; +use PhpParser\PhpVersion; +use WpPlayground\Php52Downgrader\Visitor\ArrayClassConstantVisitor; +use WpPlayground\Php52Downgrader\Visitor\ArrayDerefOnCallVisitor; +use WpPlayground\Php52Downgrader\Visitor\AttributeAndDeclareStripVisitor; +use WpPlayground\Php52Downgrader\Visitor\CallableExprVisitor; +use WpPlayground\Php52Downgrader\Visitor\ClassKeywordVisitor; +use WpPlayground\Php52Downgrader\Visitor\ClosureHoistingVisitor; +use WpPlayground\Php52Downgrader\Visitor\DirConstantVisitor; +use WpPlayground\Php52Downgrader\Visitor\ExponentVisitor; +use WpPlayground\Php52Downgrader\Visitor\FinallyVisitor; +use WpPlayground\Php52Downgrader\Visitor\InstanceCallOnNewVisitor; +use WpPlayground\Php52Downgrader\Visitor\LateStaticBindingVisitor; +use WpPlayground\Php52Downgrader\Visitor\NamespaceStripVisitor; +use WpPlayground\Php52Downgrader\Visitor\NullCoalescingVisitor; +use WpPlayground\Php52Downgrader\Visitor\NullsafeVisitor; +use WpPlayground\Php52Downgrader\Visitor\Php7ErrorClassesVisitor; +use WpPlayground\Php52Downgrader\Visitor\PromoteForHoistedClosuresVisitor; +use WpPlayground\Php52Downgrader\Visitor\ReservedMethodRenameVisitor; +use WpPlayground\Php52Downgrader\Visitor\ShortTernaryVisitor; +use WpPlayground\Php52Downgrader\Visitor\StripTypeDeclarationsVisitor; +use WpPlayground\Php52Downgrader\Visitor\VariadicAndSplatVisitor; + +class Downgrader +{ + /** @var \PhpParser\Parser */ + private $parser; + + /** @var PrettyPrinter */ + private $printer; + + /** + * Cross-file map of every class constant that has been promoted + * to a static property. Populated by {@see collectHoistedConsts()} + * (pass 1 — discovery only) and consumed by {@see downgrade()} via + * the {@see ArrayClassConstantVisitor} (pass 2 — full rewrite, + * including cross-file references). + * + * Keys are `"ClassName::CONST_NAME"` strings; values are always + * `true`. Empty by default — single-file callers see the previous + * in-file-only behaviour. + * + * @var array + */ + private array $globalHoistedConsts = []; + + public function __construct() + { + $factory = new ParserFactory(); + // Parse as modern PHP so we accept every source feature. + $this->parser = $factory->createForVersion(PhpVersion::fromComponents(8, 3)); + $this->printer = new PrettyPrinter(); + } + + /** + * Pass 1: discovers every class constant that {@see ArrayClassConstantVisitor} + * would promote to a static property in `$source`. The discovery + * runs the same visitor against a throwaway AST so the rules + * stay in lockstep with the actual rewrite. Side-effects: + * accumulates entries into `$this->globalHoistedConsts`. + * + * Call this for every file in the project BEFORE calling + * {@see downgrade()} on any of them, so that downgrade() can use + * the complete cross-file map to rewrite references like + * `OtherClass::SOME_CONST` (where `OtherClass` lives in a + * different file) into the matching `OtherClass::$SOME_CONST` + * static property fetch. + * + * @param string $source Original file contents (with opening tag). + */ + public function collectHoistedConsts(string $source): void + { + $ast = $this->parser->parse($source); + if ($ast === null) { + throw new \RuntimeException('parser returned null'); + } + // We need NameResolver here too so any namespaced classes get + // the same `Foo\Bar` keys that downgrade() will emit. + $pre = new NodeTraverser(); + $pre->addVisitor(new NameResolver(null, ['replaceNodes' => true])); + $ast = $pre->traverse($ast); + + // Run only the namespace-strip visitor before discovery so the + // recorded class names are unqualified, matching downgrade() + // output. Other passes are not needed for discovery. + $ns = new NodeTraverser(); + $ns->addVisitor(new NamespaceStripVisitor()); + $ast = $ns->traverse($ast); + + $discovery = new ArrayClassConstantVisitor(); + $t = new NodeTraverser(); + $t->addVisitor($discovery); + $t->traverse($ast); + foreach ($discovery->getHoisted() as $key => $_) { + $this->globalHoistedConsts[$key] = true; + } + } + + /** + * Returns the discovered cross-file hoist registry. Useful for + * tests and orchestration code that needs to inspect the result + * of {@see collectHoistedConsts()}. + * + * @return array + */ + public function getGlobalHoistedConsts(): array + { + return $this->globalHoistedConsts; + } + + /** + * Runs the downgrade pipeline against a single file's source. + * + * If {@see collectHoistedConsts()} was called for every file + * beforehand, every cross-file `Foo::CONST` reference that points + * to a hoisted constant will be rewritten to `Foo::$CONST`. + * Otherwise the pass falls back to in-file-only rewriting. + * + * @param string $source Original file contents (with opening tag). + * @param string $relPath Path relative to the input root. Used to + * derive deterministic closure helper names. + */ + public function downgrade(string $source, string $relPath): string + { + $ast = $this->parser->parse($source); + if ($ast === null) { + throw new \RuntimeException('parser returned null'); + } + + // Resolve names so that `use Foo\Bar` aliases and namespace + // references are flattened before we rewrite them. The upstream + // SQLite plugin has no namespaces, but NameResolver also makes + // downstream visitors simpler because they see full Name nodes. + $preTraverser = new NodeTraverser(); + $preTraverser->addVisitor(new NameResolver(null, ['replaceNodes' => true])); + $ast = $preTraverser->traverse($ast); + + // Run each transform in a dedicated traversal so visitors can't + // interfere with each other's parent/state tracking. + $passes = [ + [new AttributeAndDeclareStripVisitor()], + [new NamespaceStripVisitor()], + [new StripTypeDeclarationsVisitor()], + [new Php7ErrorClassesVisitor()], + [new NullsafeVisitor()], + [new NullCoalescingVisitor()], + [new VariadicAndSplatVisitor()], + [new ExponentVisitor()], + [new ClassKeywordVisitor()], + [new FinallyVisitor()], + [new InstanceCallOnNewVisitor()], + [new ArrayDerefOnCallVisitor()], + [new CallableExprVisitor()], + [new LateStaticBindingVisitor()], + [new ShortTernaryVisitor()], + [new DirConstantVisitor()], + [new ArrayClassConstantVisitor($this->globalHoistedConsts)], + [new ReservedMethodRenameVisitor()], + // Promote private/protected → public on classes whose + // bodies contain `$this`-using closures. Must run BEFORE + // the closure hoister so the promoted flags survive into + // the printed output, and AFTER every other transform so + // it observes the final closure shape. + [new PromoteForHoistedClosuresVisitor()], + // Closure hoisting has to run last because most other + // visitors rewrite subtrees that might contain closures. + [new ClosureHoistingVisitor($relPath)], + ]; + + foreach ($passes as $visitors) { + $t = new NodeTraverser(); + foreach ($visitors as $v) { + $t->addVisitor($v); + } + $ast = $t->traverse($ast); + } + + return $this->printer->prettyPrintFile($ast) . "\n"; + } +} diff --git a/scripts/php52-downgrader/src/PrettyPrinter.php b/scripts/php52-downgrader/src/PrettyPrinter.php new file mode 100644 index 0000000000..c7d73956dd --- /dev/null +++ b/scripts/php52-downgrader/src/PrettyPrinter.php @@ -0,0 +1,53 @@ + PhpVersion::fromComponents(7, 0), + 'shortArraySyntax' => false, + ]); + } + + protected function pExpr_Array(Expr\Array_ $node): string + { + // The parser tags the array with its source-text kind + // (SHORT vs LONG). The Standard printer honors that attribute + // instead of the `shortArraySyntax` constructor option, so an + // input `[]` stays `[]` on output. Force LONG syntax here. + $items = $this->pMaybeMultiline($node->items, true); + return 'array(' . $items . ')'; + } + + protected function pScalar_MagicConst_Dir(MagicConst\Dir $node): string + { + return 'dirname(__FILE__)'; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ArrayClassConstantVisitor.php b/scripts/php52-downgrader/src/Visitor/ArrayClassConstantVisitor.php new file mode 100644 index 0000000000..124236cadf --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ArrayClassConstantVisitor.php @@ -0,0 +1,300 @@ +; // after the class, at top level + * + * and rewrite every `self::NAME` / `static::NAME` / `ClassName::NAME` + * reference in the file to the matching static property fetch. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Modifiers; +use PhpParser\Node; +use PhpParser\Node\Expr; +use PhpParser\Node\Stmt; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitorAbstract; + +class ArrayClassConstantVisitor extends NodeVisitorAbstract +{ + /** + * Map "ClassName::CONST_NAME" => true of every constant we've + * promoted to a static property in THIS file so far. + * + * @var array + */ + private array $hoisted = []; + + /** + * Map "ClassName::CONST_NAME" => true populated externally with + * EVERY constant that will be promoted across all files in the + * project. Allows cross-file references (e.g. user code in file + * A reading `Foo::BAR` where `Foo::BAR` was promoted in file B) + * to be rewritten to the matching `Foo::$BAR` static property + * fetch. Defaults to empty for backwards compatibility — single + * file callers see the previous in-file-only behaviour. + * + * @var array + */ + private array $globalHoisted; + + /** + * @param array $globalHoisted External registry of + * every constant known to be promoted across all files. + * See {@see $globalHoisted} for usage. + */ + public function __construct(array $globalHoisted = []) + { + $this->globalHoisted = $globalHoisted; + } + + public function beforeTraverse(array $nodes) + { + $this->hoisted = []; + $this->processStatementList($nodes); + return $nodes; + } + + /** + * Returns the per-file map of constants this pass promoted from + * `const FOO = ...;` to `public static $FOO`. Used by the + * orchestrator to build {@see $globalHoisted} for a second pass. + * + * @return array + */ + public function getHoisted(): array + { + return $this->hoisted; + } + + public function afterTraverse(array $nodes) + { + // Merge in-file hoists (which we always know about, even on + // pass 1) with externally-supplied cross-file hoists. The + // second pass populates `$globalHoisted` with the union of + // every file's promotions; on the first pass it's empty and + // we still need to rewrite in-file references so the file + // itself stays consistent. + $lookup = $this->hoisted + $this->globalHoisted; + if (empty($lookup)) { + return null; + } + // Second pass: rewrite every matching ClassConstFetch to a + // StaticPropertyFetch using a fresh traverser. + $rewriter = new class ($lookup) extends NodeVisitorAbstract { + /** @var array */ + private array $hoisted; + /** @var string|null */ + private ?string $currentClass = null; + /** @var string|null */ + private ?string $currentParent = null; + + public function __construct(array $hoisted) + { + $this->hoisted = $hoisted; + } + + public function enterNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->currentClass = $node->name !== null ? $node->name->toString() : null; + $this->currentParent = $node->extends !== null ? $node->extends->toString() : null; + } + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->currentClass = null; + $this->currentParent = null; + } + if ( + !$node instanceof Expr\ClassConstFetch + || !$node->name instanceof Node\Identifier + || !$node->class instanceof Node\Name + ) { + return null; + } + $cls = $node->class->toString(); + $name = $node->name->toString(); + $resolved = $cls; + if ($cls === 'self' || $cls === 'static') { + $resolved = $this->currentClass ?? $cls; + } elseif ($cls === 'parent') { + $resolved = $this->currentParent ?? $cls; + } + if (!isset($this->hoisted[$resolved . '::' . $name])) { + return null; + } + return new Expr\StaticPropertyFetch( + new Node\Name($cls === 'static' ? 'self' : $cls), + new Node\VarLikeIdentifier($name), + $node->getAttributes() + ); + } + }; + $t = new NodeTraverser(); + $t->addVisitor($rewriter); + return $t->traverse($nodes); + } + + /** + * Walks a statement list and rewrites any class declarations in it + * that contain non-constant-expression class constants. Recurses + * into blocks (if, while, namespace wrappers, etc.). + * + * @param array $stmts passed by reference to splice in + * the static initializer blocks. + */ + private function processStatementList(array &$stmts): void + { + for ($i = 0; $i < count($stmts); $i++) { + $stmt = $stmts[$i]; + if ($stmt instanceof Stmt\Class_) { + $initializers = $this->rewriteClass($stmt); + if ($initializers) { + array_splice($stmts, $i + 1, 0, $initializers); + $i += count($initializers); + } + continue; + } + // Recurse into nested statement lists. + foreach (['stmts', 'cases', 'catches', 'finally'] as $field) { + if (isset($stmt->{$field}) && is_array($stmt->{$field})) { + $list = $stmt->{$field}; + $this->processStatementList($list); + $stmt->{$field} = $list; + } + } + if (isset($stmt->else) && $stmt->else !== null) { + $list = $stmt->else->stmts; + $this->processStatementList($list); + $stmt->else->stmts = $list; + } + if (isset($stmt->elseifs) && is_array($stmt->elseifs)) { + foreach ($stmt->elseifs as $elseif) { + $list = $elseif->stmts; + $this->processStatementList($list); + $elseif->stmts = $list; + } + } + } + } + + /** + * Rewrites a single class declaration in place and returns the + * list of static initializer statements to inject after it. + * + * @return array + */ + private function rewriteClass(Stmt\Class_ $class): array + { + $className = $class->name?->toString(); + if ($className === null) { + return []; + } + $initializers = []; + $newStmts = []; + foreach ($class->stmts as $stmt) { + if (!$stmt instanceof Stmt\ClassConst) { + $newStmts[] = $stmt; + continue; + } + $kept = []; + $hoistedConsts = []; + foreach ($stmt->consts as $const) { + if ($this->isPhp52ConstantExpr($const->value)) { + $kept[] = $const; + continue; + } + $hoistedConsts[] = $const; + } + if ($kept) { + $splitStmt = clone $stmt; + $splitStmt->consts = $kept; + $newStmts[] = $splitStmt; + } + $parentName = $class->extends?->toString(); + foreach ($hoistedConsts as $const) { + $this->hoisted[$className . '::' . $const->name->name] = true; + $newStmts[] = new Stmt\Property( + Modifiers::PUBLIC | Modifiers::STATIC, + [ + new Node\PropertyItem( + new Node\VarLikeIdentifier($const->name->name), + new Expr\ConstFetch(new Node\Name('null')) + ), + ] + ); + // CRITICAL: the value is about to be moved OUT of the + // class body to top-level scope, where `self::`, + // `parent::`, and `static::` are no longer valid. + // Rewrite every such reference to the literal class + // name before emitting the initializer. + $rewrittenValue = SelfParentStaticRewriter::rewriteInExpr( + $const->value, + $className, + $parentName, + 'extracted expression' + ); + $initializers[] = new Stmt\Expression( + new Expr\Assign( + new Expr\StaticPropertyFetch( + new Node\Name($className), + new Node\VarLikeIdentifier($const->name->name) + ), + $rewrittenValue + ) + ); + } + } + $class->stmts = $newStmts; + return $initializers; + } + + /** + * Returns true when the expression is a PHP 5.2 compile-time + * constant expression (scalar literal, true/false/null, + * or a negated/plussed literal). + */ + private function isPhp52ConstantExpr(Node\Expr $expr): bool + { + if ($expr instanceof Node\Scalar\Int_) { + return true; + } + if ($expr instanceof Node\Scalar\Float_) { + return true; + } + if ($expr instanceof Node\Scalar\String_) { + return true; + } + if ($expr instanceof Expr\ConstFetch) { + $name = $expr->name->toString(); + return in_array( + $name, + ['true', 'false', 'null', 'TRUE', 'FALSE', 'NULL'], + true + ); + } + if ($expr instanceof Expr\UnaryMinus || $expr instanceof Expr\UnaryPlus) { + return $this->isPhp52ConstantExpr($expr->expr); + } + return false; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ArrayDerefOnCallVisitor.php b/scripts/php52-downgrader/src/Visitor/ArrayDerefOnCallVisitor.php new file mode 100644 index 0000000000..4c072a863f --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ArrayDerefOnCallVisitor.php @@ -0,0 +1,61 @@ + _pg52_at(fn(), 0) + * $obj->method()['x'] => _pg52_at($obj->method(), 'x') + * + * PHP 5.4 added direct array dereferencing of call expressions; + * PHP 5.2 requires the intermediate value to be assigned to a + * variable before it can be indexed. We route it through a helper + * function `_pg52_at($arr, $idx)` that returns the element or `null`. + * + * The helper is emitted once per file that uses it by the Closure + * hoisting visitor's trailing helper block. (In practice we emit it + * unconditionally as a guarded `function_exists` wrapper so files + * that don't use it still get the definition — cheap and easy.) + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Arg; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class ArrayDerefOnCallVisitor extends NodeVisitorAbstract +{ + /** @var bool */ + public bool $used = false; + + public function leaveNode(Node $node) + { + if (!$node instanceof Expr\ArrayDimFetch) { + return null; + } + if ($node->dim === null) { + return null; + } + $target = $node->var; + if ( + !$target instanceof Expr\FuncCall + && !$target instanceof Expr\MethodCall + && !$target instanceof Expr\StaticCall + && !$target instanceof Expr\NullsafeMethodCall + && !$target instanceof Expr\New_ + ) { + return null; + } + $this->used = true; + return new Expr\FuncCall( + new Node\Name('_pg52_at'), + [ + new Arg($target), + new Arg($node->dim), + ], + $node->getAttributes() + ); + } +} diff --git a/scripts/php52-downgrader/src/Visitor/AttributeAndDeclareStripVisitor.php b/scripts/php52-downgrader/src/Visitor/AttributeAndDeclareStripVisitor.php new file mode 100644 index 0000000000..9a61c58b70 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/AttributeAndDeclareStripVisitor.php @@ -0,0 +1,55 @@ +attrGroups = []; + } + } + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Stmt\Declare_) { + // Drop declare(strict_types=1); entirely. Leave non- + // strict_types declares alone (ticks, etc). + foreach ($node->declares as $decl) { + if ( + $decl->key instanceof Node\Identifier + && $decl->key->name === 'strict_types' + ) { + return NodeVisitor::REMOVE_NODE; + } + } + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/CallableExprVisitor.php b/scripts/php52-downgrader/src/Visitor/CallableExprVisitor.php new file mode 100644 index 0000000000..b8c34469ae --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/CallableExprVisitor.php @@ -0,0 +1,56 @@ +callback)($args) => call_user_func($obj->callback, $args) + * ($var)($args) => call_user_func($var, $args) (dropped — $var($args) works on 5.2) + * (($a) ? $b : $c)($args) => call_user_func(($a) ? $b : $c, $args) + * + * PHP 5.4 added the ability to chain a call onto any expression. PHP + * 5.2 supports only named function calls (`foo()`), method calls + * (`$obj->foo()`), and calling a string-valued variable as a bare + * function (`$var()`). Everything else must go through + * `call_user_func()` / `call_user_func_array()`. + * + * We recognize a call expression as "complex" when the `name` on the + * FuncCall node is neither a Name (named function) nor a plain + * Variable (the PHP 5.2 `$var()` shape). That covers callable + * property fetches, array dim fetches, ternaries, and so on. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Arg; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class CallableExprVisitor extends NodeVisitorAbstract +{ + public function leaveNode(Node $node) + { + if (!$node instanceof Expr\FuncCall) { + return null; + } + $name = $node->name; + if ($name instanceof Node\Name) { + return null; + } + if ($name instanceof Expr\Variable) { + // $var($args) is valid on PHP 5.2 when $var is a string. + return null; + } + // Everything else becomes call_user_func(expr, args...). + $newArgs = [new Arg($name)]; + foreach ($node->args as $arg) { + $newArgs[] = $arg; + } + return new Expr\FuncCall( + new Node\Name('call_user_func'), + $newArgs, + $node->getAttributes() + ); + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ClassKeywordVisitor.php b/scripts/php52-downgrader/src/Visitor/ClassKeywordVisitor.php new file mode 100644 index 0000000000..c029193295 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ClassKeywordVisitor.php @@ -0,0 +1,49 @@ + 'Foo' + * self::class => get_class() + * static::class => get_called_class() + * + * `get_class()` called without arguments returns the name of the + * class in which the call is made — equivalent to `self::class` in + * the method scopes where the SQLite plugin uses it. Outside a method + * the output is nonsense, but the upstream plugin never uses + * `self::class` at class body scope. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class ClassKeywordVisitor extends NodeVisitorAbstract +{ + public function leaveNode(Node $node) + { + if (!$node instanceof Expr\ClassConstFetch) { + return null; + } + if (!$node->name instanceof Node\Identifier) { + return null; + } + if ($node->name->name !== 'class') { + return null; + } + if ($node->class instanceof Node\Name) { + $name = $node->class->toString(); + if ($name === 'self') { + return new Expr\FuncCall(new Node\Name('get_class')); + } + if ($name === 'static') { + return new Expr\FuncCall(new Node\Name('get_called_class')); + } + return new Node\Scalar\String_($name, $node->getAttributes()); + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ClosureHoistingVisitor.php b/scripts/php52-downgrader/src/Visitor/ClosureHoistingVisitor.php new file mode 100644 index 0000000000..3ba994051f --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ClosureHoistingVisitor.php @@ -0,0 +1,588 @@ + ...`) into top-level named functions. + * + * PHP 5.2 has no closures at all. For each `Expr\Closure` or + * `Expr\ArrowFunction` node we: + * + * 1. Generate a deterministic, file-unique helper name based on a + * hash of the file path plus the closure's source order. + * 2. Build a top-level `Stmt\Function_` carrying the closure's + * parameter list and body, prepended with `$captured = $GLOBALS[...]` + * reads for each captured variable (`use` clause entries plus + * an implicit `$__pg_this` when the body references `$this`). + * 3. Replace the closure expression with a small setter-call + * expression: + * + * _pg52_set_capture('helper_name', array( + * 'cap1' => $cap1, + * '__pg_this' => $this, + * ... + * )) + * + * which, at runtime, stashes the captures in $GLOBALS and returns + * the helper name. PHP 5.2 lets you call a function via + * `$var()` when `$var` is a string, so subsequent invocations of + * the returned name work transparently. + * + * 4. If the closure had no captures and no `$this` reference, skip + * the setter entirely and emit a bare string literal instead. + * + * 5. Append the helper function (and the capture setter helper, and + * the `(new X())->y` helpers if used) to the end of the file so + * they are available by the time the returned name is invoked. + * + * `$this` handling: when the body uses `$this`, we rename every + * `$this` reference inside the closure body to `$__pg_this`, add + * `$__pg_this` to the capture map, and emit the helper as an + * ordinary function that unpacks `$__pg_this` from $GLOBALS. This + * loses access to private/protected members of the enclosing class, + * so the AST pipeline also runs `PromoteForHoistedClosuresVisitor` + * to widen affected members to public in files that contain + * closures referencing `$this`. + * + * `Closure::fromCallable()`, `Closure::bind()`, and explicit static + * closures (`static function () {}`) are downgraded the same way. + * The `static` keyword is dropped because a hoisted top-level + * function has no $this by default on 5.2. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Modifiers; +use PhpParser\Node; +use PhpParser\Node\Arg; +use PhpParser\Node\Expr; +use PhpParser\Node\Stmt; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitorAbstract; + +class ClosureHoistingVisitor extends NodeVisitorAbstract +{ + /** @var string */ + private string $relPath; + + /** @var string */ + private string $fileSlug; + + /** @var int */ + private int $counter = 0; + + /** @var Stmt\Function_[] */ + private array $helpers = []; + + /** @var bool */ + private bool $hadThisClosures = false; + + /** @var bool */ + private bool $needsCaptureHelper = false; + + /** + * Stack of (className, parentName) pairs for the classes we are + * currently inside. Pushed in enterNode for Stmt\Class_, popped in + * leaveNode. The top of the stack tells us which class scope a + * closure being hoisted came from — needed because hoisting moves + * the body to top-level scope where `self::`/`parent::`/`static::` + * become fatal errors. + * + * @var array + */ + private array $classStack = []; + + public function __construct(string $relPath) + { + $this->relPath = $relPath; + $this->fileSlug = $this->slugify($relPath); + } + + public function beforeTraverse(array $nodes) + { + $this->counter = 0; + $this->helpers = []; + $this->hadThisClosures = false; + $this->needsCaptureHelper = false; + $this->classStack = []; + return null; + } + + public function enterNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->classStack[] = [ + 'class' => $node->name !== null ? $node->name->toString() : '', + 'parent' => $node->extends !== null ? $node->extends->toString() : null, + ]; + } + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + array_pop($this->classStack); + return null; + } + if ($node instanceof Expr\ArrowFunction) { + // Convert arrow function to a regular closure first. + // Arrow functions auto-capture all used variables by value; + // the outer pass then hoists them. We do it in two steps so + // that the variable collection logic only has to handle + // one node type. + $body = [new Stmt\Return_($node->expr)]; + $uses = $this->collectArrowCaptures($node->expr, $node->params); + $closure = new Expr\Closure([ + 'static' => $node->static, + 'byRef' => false, + 'params' => $node->params, + 'uses' => $uses, + 'returnType' => null, + 'stmts' => $body, + ], $node->getAttributes()); + return $this->hoistClosure($closure); + } + if ($node instanceof Expr\Closure) { + return $this->hoistClosure($node); + } + return null; + } + + public function afterTraverse(array $nodes) + { + $trailing = []; + // Always emit the runtime helper shims — they're cheap, + // guarded by function_exists, and it means downstream + // visitors don't need to coordinate on who "owns" a helper. + $trailing[] = $this->buildRuntimeHelperBlock(); + if ($this->needsCaptureHelper) { + $trailing[] = $this->buildCaptureHelperWrapper(); + } + foreach ($this->helpers as $helper) { + $trailing[] = $this->wrapInFunctionExistsGuard($helper); + } + return array_merge($nodes, $trailing); + } + + /** + * Returns a single If_ node that conditionally defines all of the + * fixed runtime helpers (_pg52_at, _pg52_call, _pg52_get). The + * block is emitted verbatim into every file; the guards ensure + * multiple-include is safe. + */ + private function buildRuntimeHelperBlock(): Stmt\If_ + { + $cond = new Expr\BooleanNot( + new Expr\FuncCall( + new Node\Name('function_exists'), + [new Arg(new Node\Scalar\String_('_pg52_at'))] + ) + ); + return new Stmt\If_( + $cond, + [ + 'stmts' => [ + $this->buildAtHelper(), + $this->buildCallHelper(), + $this->buildGetHelper(), + ], + ] + ); + } + + /** + * `function _pg52_at($arr, $idx) { return (is_array($arr) && array_key_exists($idx, $arr)) ? $arr[$idx] : null; }` + */ + private function buildAtHelper(): Stmt\Function_ + { + $arr = new Expr\Variable('arr'); + $idx = new Expr\Variable('idx'); + $cond = new Expr\BinaryOp\BooleanAnd( + new Expr\FuncCall(new Node\Name('is_array'), [new Arg($arr)]), + new Expr\FuncCall( + new Node\Name('array_key_exists'), + [new Arg($idx), new Arg($arr)] + ) + ); + $true = new Expr\ArrayDimFetch($arr, $idx); + $false = new Expr\ConstFetch(new Node\Name('null')); + return new Stmt\Function_( + '_pg52_at', + [ + 'byRef' => false, + 'params' => [new Node\Param($arr), new Node\Param($idx)], + 'returnType' => null, + 'stmts' => [ + new Stmt\Return_(new Expr\Ternary($cond, $true, $false)), + ], + ] + ); + } + + /** + * `function _pg52_call($obj, $method, $args) { return call_user_func_array(array($obj, $method), $args); }` + */ + private function buildCallHelper(): Stmt\Function_ + { + $obj = new Expr\Variable('obj'); + $method = new Expr\Variable('method'); + $args = new Expr\Variable('args'); + $pair = new Expr\Array_([ + new Node\ArrayItem($obj), + new Node\ArrayItem($method), + ]); + $call = new Expr\FuncCall( + new Node\Name('call_user_func_array'), + [new Arg($pair), new Arg($args)] + ); + return new Stmt\Function_( + '_pg52_call', + [ + 'byRef' => false, + 'params' => [ + new Node\Param($obj), + new Node\Param($method), + new Node\Param($args), + ], + 'returnType' => null, + 'stmts' => [new Stmt\Return_($call)], + ] + ); + } + + /** + * `function _pg52_get($obj, $prop) { return $obj->{$prop}; }` + */ + private function buildGetHelper(): Stmt\Function_ + { + $obj = new Expr\Variable('obj'); + $prop = new Expr\Variable('prop'); + return new Stmt\Function_( + '_pg52_get', + [ + 'byRef' => false, + 'params' => [new Node\Param($obj), new Node\Param($prop)], + 'returnType' => null, + 'stmts' => [ + new Stmt\Return_(new Expr\PropertyFetch($obj, $prop)), + ], + ] + ); + } + + public function hadThisClosures(): bool + { + return $this->hadThisClosures; + } + + // ───────────────────────────────────────────────────────────── + // Hoisting core + // ───────────────────────────────────────────────────────────── + + private function hoistClosure(Expr\Closure $closure): Node + { + // By-reference captures (`use (&$x)`) cannot be faithfully + // emulated by a top-level hoisted helper: the helper reads + // captures from $GLOBALS, which loses the reference binding + // back to the caller's scope. Silently converting to by-value + // would be a semantic miscompile, so bail out loudly and let + // the operator rewrite the source. + foreach ($closure->uses as $use) { + if ($use->byRef) { + $varName = $use->var instanceof Expr\Variable && is_string($use->var->name) + ? $use->var->name + : '?'; + throw new \RuntimeException(sprintf( + "ClosureHoistingVisitor: cannot hoist closure with " . + "by-reference capture 'use (&\$%s)' in %s", + $varName, + $this->relPath + )); + } + } + $this->counter++; + $helperName = sprintf( + '_wp_pg52_%s_closure_%d', + $this->fileSlug, + $this->counter + ); + // CRITICAL: a closure's body may reference `self::CONST`, + // `parent::method()`, `static::$prop`, etc. After hoisting, + // the body lives in a top-level function with no class scope + // — those references would be fatal at runtime ("Cannot + // access self:: when no class scope is active"). Rewrite them + // to the literal class name BEFORE hoisting. + if (!empty($this->classStack)) { + $ctx = end($this->classStack); + SelfParentStaticRewriter::rewriteInStmts( + $closure->stmts, + $ctx['class'], + $ctx['parent'], + 'hoisted closure' + ); + } + $bodyUsesThis = $this->bodyUsesThis($closure->stmts); + $uses = $closure->uses; + if ($bodyUsesThis) { + $this->hadThisClosures = true; + // Rewrite `$this` references inside the body to + // `$__pg_this`. Needs its own traversal so we don't + // reach sibling siblings' `$this` in nested closures. + $this->renameThisInStmts($closure->stmts); + $uses[] = new Expr\ClosureUse( + new Expr\Variable('__pg_this'), + false + ); + } + // Build capture preamble (reads from $GLOBALS at call time). + $preamble = []; + foreach ($uses as $use) { + $name = $use->var->name; + $globalKey = $helperName . '_capture'; + $fetch = new Expr\ArrayDimFetch( + new Expr\ArrayDimFetch( + new Expr\Variable('GLOBALS'), + new Node\Scalar\String_($globalKey) + ), + new Node\Scalar\String_($name) + ); + $ternary = new Expr\Ternary( + new Expr\Isset_([$fetch]), + $fetch, + new Expr\ConstFetch(new Node\Name('null')) + ); + $preamble[] = new Stmt\Expression( + new Expr\Assign( + new Expr\Variable($name), + $ternary + ) + ); + } + $helper = new Stmt\Function_( + $helperName, + [ + 'byRef' => $closure->byRef, + 'params' => $closure->params, + 'returnType' => null, + 'stmts' => array_merge($preamble, $closure->stmts), + ] + ); + $this->helpers[] = $helper; + + if (count($uses) === 0) { + // No captures — emit the string literal directly. + return new Node\Scalar\String_($helperName, $closure->getAttributes()); + } + + $this->needsCaptureHelper = true; + // Build the `_pg52_set_capture('name', array(...))` call site. + // The capture array maps the helper-side variable name (which + // inside the helper body is read from $GLOBALS) to the + // outer-side value being captured. For ordinary `use ($foo)` + // captures these are the same variable; for the implicit + // `__pg_this` capture the outer side is `$this` (which is + // what the closure was originally bound to in the source). + $captureItems = []; + foreach ($uses as $use) { + $name = $use->var->name; + $outerExpr = $name === '__pg_this' + ? new Expr\Variable('this') + : new Expr\Variable($name); + $captureItems[] = new Node\ArrayItem( + $outerExpr, + new Node\Scalar\String_($name) + ); + } + return new Expr\FuncCall( + new Node\Name('_pg52_set_capture'), + [ + new Arg(new Node\Scalar\String_($helperName)), + new Arg(new Expr\Array_($captureItems)), + ], + $closure->getAttributes() + ); + } + + /** + * Determines the list of variables an arrow function captures + * implicitly. An arrow function captures every free variable used + * inside the expression that isn't a parameter. + * + * @param Node\Param[] $params + * @return Expr\ClosureUse[] + */ + private function collectArrowCaptures(Expr $expr, array $params): array + { + $paramNames = []; + foreach ($params as $p) { + if ($p->var instanceof Expr\Variable && is_string($p->var->name)) { + $paramNames[$p->var->name] = true; + } + } + $collector = new class ($paramNames) extends NodeVisitorAbstract { + /** @var array */ + private array $paramNames; + /** @var array */ + public array $found = []; + + public function __construct(array $paramNames) + { + $this->paramNames = $paramNames; + } + + public function enterNode(Node $node) + { + if ( + $node instanceof Expr\Variable + && is_string($node->name) + && $node->name !== 'this' + && !isset($this->paramNames[$node->name]) + ) { + $this->found[$node->name] = true; + } + return null; + } + }; + $t = new NodeTraverser(); + $t->addVisitor($collector); + $t->traverse([new Stmt\Expression($expr)]); + $uses = []; + foreach (array_keys($collector->found) as $name) { + $uses[] = new Expr\ClosureUse(new Expr\Variable($name), false); + } + return $uses; + } + + /** + * @param array $stmts + */ + private function bodyUsesThis(array $stmts): bool + { + $checker = new class () extends NodeVisitorAbstract { + public bool $found = false; + public function enterNode(Node $node) + { + if ( + $node instanceof Expr\Variable + && is_string($node->name) + && $node->name === 'this' + ) { + $this->found = true; + } + // Don't descend into nested closures — their $this + // belongs to a different scope. + if ( + $node instanceof Expr\Closure + || $node instanceof Expr\ArrowFunction + ) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + return null; + } + }; + $t = new NodeTraverser(); + $t->addVisitor($checker); + $t->traverse($stmts); + return $checker->found; + } + + /** + * @param array $stmts + */ + private function renameThisInStmts(array &$stmts): void + { + $renamer = new class () extends NodeVisitorAbstract { + public function enterNode(Node $node) + { + if ( + $node instanceof Expr\Closure + || $node instanceof Expr\ArrowFunction + ) { + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + return null; + } + + public function leaveNode(Node $node) + { + if ( + $node instanceof Expr\Variable + && is_string($node->name) + && $node->name === 'this' + ) { + return new Expr\Variable('__pg_this', $node->getAttributes()); + } + return null; + } + }; + $t = new NodeTraverser(); + $t->addVisitor($renamer); + $stmts = $t->traverse($stmts); + } + + // ───────────────────────────────────────────────────────────── + // Helpers + // ───────────────────────────────────────────────────────────── + + private function slugify(string $path): string + { + // Stable prefix for readable names in the output. + $base = preg_replace('/[^a-zA-Z0-9]+/', '_', $path); + $base = trim($base, '_'); + if ($base === '') { + $base = 'file'; + } + return $base; + } + + private function buildCaptureHelperWrapper(): Stmt\If_ + { + $funcNameExists = new Expr\FuncCall( + new Node\Name('function_exists'), + [new Arg(new Node\Scalar\String_('_pg52_set_capture'))] + ); + $notExists = new Expr\BooleanNot($funcNameExists); + $fn = new Stmt\Function_( + '_pg52_set_capture', + [ + 'byRef' => false, + 'params' => [ + new Node\Param(new Expr\Variable('name')), + new Node\Param(new Expr\Variable('captures')), + ], + 'returnType' => null, + 'stmts' => [ + new Stmt\Expression( + new Expr\Assign( + new Expr\ArrayDimFetch( + new Expr\Variable('GLOBALS'), + new Expr\BinaryOp\Concat( + new Expr\Variable('name'), + new Node\Scalar\String_('_capture') + ) + ), + new Expr\Variable('captures') + ) + ), + new Stmt\Return_(new Expr\Variable('name')), + ], + ] + ); + return new Stmt\If_( + $notExists, + ['stmts' => [$fn]] + ); + } + + private function wrapInFunctionExistsGuard(Stmt\Function_ $fn): Stmt\If_ + { + $cond = new Expr\BooleanNot( + new Expr\FuncCall( + new Node\Name('function_exists'), + [new Arg(new Node\Scalar\String_($fn->name->toString()))] + ) + ); + return new Stmt\If_($cond, ['stmts' => [$fn]]); + } +} diff --git a/scripts/php52-downgrader/src/Visitor/DirConstantVisitor.php b/scripts/php52-downgrader/src/Visitor/DirConstantVisitor.php new file mode 100644 index 0000000000..1a170ec7dd --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/DirConstantVisitor.php @@ -0,0 +1,36 @@ + `dirname(__FILE__)`. + * + * The pretty printer subclass {@see \WpPlayground\Php52Downgrader\PrettyPrinter} + * already emits `dirname(__FILE__)` in place of the magic constant, so + * most files are handled there. This visitor is kept as a separate + * pass because it lets later visitors see a concrete function call + * instead of a magic constant — notably {@see ArrayClassConstantVisitor} + * needs to recognize that `__DIR__ . 'x'` is a non-constant expression + * and hoist the const. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Arg; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class DirConstantVisitor extends NodeVisitorAbstract +{ + public function leaveNode(Node $node) + { + if ($node instanceof Node\Scalar\MagicConst\Dir) { + return new Expr\FuncCall( + new Node\Name('dirname'), + [new Arg(new Node\Scalar\MagicConst\File($node->getAttributes()))], + $node->getAttributes() + ); + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ExponentVisitor.php b/scripts/php52-downgrader/src/Visitor/ExponentVisitor.php new file mode 100644 index 0000000000..6013d40a92 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ExponentVisitor.php @@ -0,0 +1,39 @@ +left), new Arg($node->right)], + $node->getAttributes() + ); + } + if ($node instanceof Expr\AssignOp\Pow) { + return new Expr\Assign( + $node->var, + new Expr\FuncCall( + new Node\Name('pow'), + [new Arg(clone $node->var), new Arg($node->expr)] + ), + $node->getAttributes() + ); + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/FinallyVisitor.php b/scripts/php52-downgrader/src/Visitor/FinallyVisitor.php new file mode 100644 index 0000000000..59fb5b7c89 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/FinallyVisitor.php @@ -0,0 +1,72 @@ +finally === null) { + return null; + } + $finallyStmts = $node->finally->stmts; + $cloneFinally = function () use ($finallyStmts) { + return array_map(fn(Stmt $s) => clone $s, $finallyStmts); + }; + $newTryStmts = array_merge($node->stmts, $cloneFinally()); + $newCatches = []; + if (count($node->catches) === 0) { + $rethrow = new Stmt\Expression( + new Expr\Throw_(new Expr\Variable('__pg_fe')) + ); + $catchStmts = array_merge($cloneFinally(), [$rethrow]); + $newCatches[] = new Stmt\Catch_( + [new Node\Name('Exception')], + new Expr\Variable('__pg_fe'), + $catchStmts + ); + } else { + foreach ($node->catches as $c) { + $c = clone $c; + $c->stmts = array_merge($c->stmts, $cloneFinally()); + $newCatches[] = $c; + } + } + return new Stmt\TryCatch( + $newTryStmts, + $newCatches, + null, + $node->getAttributes() + ); + } +} diff --git a/scripts/php52-downgrader/src/Visitor/InstanceCallOnNewVisitor.php b/scripts/php52-downgrader/src/Visitor/InstanceCallOnNewVisitor.php new file mode 100644 index 0000000000..2bde360916 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/InstanceCallOnNewVisitor.php @@ -0,0 +1,68 @@ +bar(...)` and `(new Foo($a))->prop` + * directly. PHP 5.2 does not — the parser refuses to chain a member + * access onto the `new` expression. We rewrite each occurrence to a + * small runtime helper: + * + * (new Foo($a))->bar($b) => _pg52_call(new Foo($a), 'bar', array($b)) + * (new Foo($a))->prop => _pg52_get(new Foo($a), 'prop') + * + * The helpers themselves are emitted by the closure hoisting visitor's + * trailing helper block, via {@see HelperEmitterVisitor}. When the + * downgraded plugin doesn't hit either of these shapes the helpers + * stay out of the output. + * + * The visitor records which helpers were used so the hoister knows + * which definitions to append. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Arg; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class InstanceCallOnNewVisitor extends NodeVisitorAbstract +{ + public function leaveNode(Node $node) + { + if ($node instanceof Expr\MethodCall && $node->var instanceof Expr\New_) { + $method = $node->name instanceof Node\Identifier + ? new Node\Scalar\String_($node->name->toString()) + : $node->name; + $argsArr = new Expr\Array_(array_map( + fn(Arg $a) => new Node\ArrayItem($a->value), + $node->args + )); + return new Expr\FuncCall( + new Node\Name('_pg52_call'), + [ + new Arg($node->var), + new Arg($method), + new Arg($argsArr), + ], + $node->getAttributes() + ); + } + if ($node instanceof Expr\PropertyFetch && $node->var instanceof Expr\New_) { + $prop = $node->name instanceof Node\Identifier + ? new Node\Scalar\String_($node->name->toString()) + : $node->name; + return new Expr\FuncCall( + new Node\Name('_pg52_get'), + [ + new Arg($node->var), + new Arg($prop), + ], + $node->getAttributes() + ); + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/LateStaticBindingVisitor.php b/scripts/php52-downgrader/src/Visitor/LateStaticBindingVisitor.php new file mode 100644 index 0000000000..2816ff4496 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/LateStaticBindingVisitor.php @@ -0,0 +1,33 @@ +class instanceof Node\Name + && $node->class->toString() === 'static' + ) { + $node->class = new Node\Name('self', $node->class->getAttributes()); + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/NamespaceStripVisitor.php b/scripts/php52-downgrader/src/Visitor/NamespaceStripVisitor.php new file mode 100644 index 0000000000..8553245aab --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/NamespaceStripVisitor.php @@ -0,0 +1,68 @@ +stmts as $inner) { + if ($inner instanceof Stmt\Use_) { + // Drop use statements; after NameResolver has + // run, references are already fully resolved. + continue; + } + $out[] = $inner; + } + continue; + } + $out[] = $node; + } + return $out; + } + + public function enterNode(Node $node) + { + if ($node instanceof Name) { + // Turn any Name variant into an unqualified identifier. + // After NameResolver, the Name contains fully-qualified + // components like `Foo\Bar`. For PHP 5.2 we keep only the + // last component (`Bar`). This is safe here because the + // SQLite plugin has no real namespaces. + if ($node->isFullyQualified() || $node->isQualified()) { + $parts = $node->getParts(); + return new Name([end($parts)], $node->getAttributes()); + } + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/NullCoalescingVisitor.php b/scripts/php52-downgrader/src/Visitor/NullCoalescingVisitor.php new file mode 100644 index 0000000000..0a9f07a573 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/NullCoalescingVisitor.php @@ -0,0 +1,140 @@ +tempCounter = 0; + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Expr\AssignOp\Coalesce) { + // $x ??= $y: cloning the LHS is only safe when the LHS is a + // trivially duplicatable l-value. For anything else (e.g. + // `$obj->method()->prop ??= ...`) duplicating would double- + // evaluate the receiver chain. We bail out loudly rather + // than silently miscompile — the SQLite plugin currently + // doesn't use `??=` on complex LHS. + if (!$this->isAssignTargetDuplicatable($node->var)) { + throw new \RuntimeException( + 'NullCoalescingVisitor: `??=` on a complex LHS is not ' . + 'supported (would double-evaluate side effects). ' . + 'Rewrite the source to use an intermediate variable.' + ); + } + return new Expr\Assign( + $node->var, + new Expr\BinaryOp\Coalesce( + clone $node->var, + $node->expr, + $node->getAttributes() + ), + $node->getAttributes() + ); + } + if (!$node instanceof Expr\BinaryOp\Coalesce) { + return null; + } + $lhs = $node->left; + $rhs = $node->right; + if ($this->isIssetSafe($lhs)) { + return new Expr\Ternary( + new Expr\Isset_([$lhs]), + $lhs, + $rhs, + $node->getAttributes() + ); + } + // Side-effecting LHS: capture in a temp var. Use a counter- + // suffixed name so nested `??` rewrites don't clobber each + // other (e.g. `a() ?? b() ?? c()`). + $tmpName = '__pg_nc_tmp_' . $this->tempCounter++; + $tmp = new Expr\Variable($tmpName); + $assign = new Expr\Assign($tmp, $lhs); + $notNull = new Expr\BinaryOp\NotIdentical( + $assign, + new Expr\ConstFetch(new Node\Name('null')) + ); + return new Expr\Ternary($notNull, clone $tmp, $rhs, $node->getAttributes()); + } + + /** + * Returns true when the expression is a trivially duplicatable + * l-value: a simple Variable, a simple array-dim fetch on such, + * or a property fetch on a simple Variable. Anything else may + * have side effects that must not be evaluated twice. + */ + private function isAssignTargetDuplicatable(Node\Expr $expr): bool + { + if ($expr instanceof Expr\Variable) { + return true; + } + if ($expr instanceof Expr\PropertyFetch) { + return $expr->var instanceof Expr\Variable; + } + if ($expr instanceof Expr\StaticPropertyFetch) { + return true; + } + if ($expr instanceof Expr\ArrayDimFetch) { + return $this->isAssignTargetDuplicatable($expr->var); + } + return false; + } + + /** + * Returns true when the expression is safe to appear inside an + * `isset()` call (i.e. PHP won't raise E_NOTICE at parse time). + */ + private function isIssetSafe(Node\Expr $expr): bool + { + if ($expr instanceof Expr\Variable) { + return true; + } + if ($expr instanceof Expr\PropertyFetch) { + return $this->isIssetSafe($expr->var); + } + if ($expr instanceof Expr\StaticPropertyFetch) { + return true; + } + if ($expr instanceof Expr\ArrayDimFetch) { + return $expr->var instanceof Expr\Variable + || $expr->var instanceof Expr\PropertyFetch + || $expr->var instanceof Expr\StaticPropertyFetch + || $expr->var instanceof Expr\ArrayDimFetch + || $expr->var instanceof Expr\ClassConstFetch; + } + return false; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/NullsafeVisitor.php b/scripts/php52-downgrader/src/Visitor/NullsafeVisitor.php new file mode 100644 index 0000000000..743bcd95fc --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/NullsafeVisitor.php @@ -0,0 +1,106 @@ +b`. + * + * For plain isset-safe receivers we emit a direct + * `(isset($a) ? $a->b : null)` ternary. For side-effecting receivers + * (function/method calls, chained nullsafe rewrites, ternaries, etc.) + * we hoist into a temp var: + * + * (($__pg_ns_0 = $expr) !== null ? $__pg_ns_0->b : null) + * + * This is necessary for chained `$a?->b?->c`: the inner rewrite + * produces a ternary, which cannot legally appear inside `isset()`. + * Counter-suffixed temp names avoid collisions in nested chains. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class NullsafeVisitor extends NodeVisitorAbstract +{ + /** @var int Counter for unique temp var names, reset per file. */ + private int $tempCounter = 0; + + public function beforeTraverse(array $nodes) + { + $this->tempCounter = 0; + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Expr\NullsafePropertyFetch) { + return $this->rewriteNullsafe( + $node->var, + fn(Expr $receiver) => new Expr\PropertyFetch($receiver, $node->name) + ); + } + if ($node instanceof Expr\NullsafeMethodCall) { + return $this->rewriteNullsafe( + $node->var, + fn(Expr $receiver) => new Expr\MethodCall($receiver, $node->name, $node->args) + ); + } + return null; + } + + /** + * Builds the lowered ternary. If the receiver is isset-safe we use + * the direct `isset($x) ? $x->y : null` form; otherwise we capture + * it in a unique temp var and null-compare. + */ + private function rewriteNullsafe(Expr $receiver, \Closure $buildAccess): Expr\Ternary + { + if ($this->isIssetSafe($receiver)) { + return new Expr\Ternary( + new Expr\Isset_([$receiver]), + $buildAccess($receiver), + $this->nullLit() + ); + } + $tmpName = '__pg_ns_' . $this->tempCounter++; + $tmp = new Expr\Variable($tmpName); + $assign = new Expr\Assign($tmp, $receiver); + $notNull = new Expr\BinaryOp\NotIdentical( + $assign, + $this->nullLit() + ); + return new Expr\Ternary( + $notNull, + $buildAccess(clone $tmp), + $this->nullLit() + ); + } + + /** + * Returns true when the expression is safe to appear inside an + * `isset()` call. Matches NullCoalescingVisitor::isIssetSafe. + */ + private function isIssetSafe(Node\Expr $expr): bool + { + if ($expr instanceof Expr\Variable) { + return true; + } + if ($expr instanceof Expr\PropertyFetch) { + return $this->isIssetSafe($expr->var); + } + if ($expr instanceof Expr\StaticPropertyFetch) { + return true; + } + if ($expr instanceof Expr\ArrayDimFetch) { + return $this->isIssetSafe($expr->var); + } + return false; + } + + private function nullLit(): Expr\ConstFetch + { + return new Expr\ConstFetch(new Node\Name('null')); + } +} diff --git a/scripts/php52-downgrader/src/Visitor/Php7ErrorClassesVisitor.php b/scripts/php52-downgrader/src/Visitor/Php7ErrorClassesVisitor.php new file mode 100644 index 0000000000..13d0fef85c --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/Php7ErrorClassesVisitor.php @@ -0,0 +1,89 @@ +types = array_map( + [$this, 'remapName'], + $node->types + ); + // Deduplicate Exception entries. + $seen = []; + $unique = []; + foreach ($node->types as $t) { + $key = $t->toString(); + if (isset($seen[$key])) { + continue; + } + $seen[$key] = true; + $unique[] = $t; + } + $node->types = $unique; + return null; + } + + if ($node instanceof Node\Expr\New_ && $node->class instanceof Name) { + $node->class = $this->remapName($node->class); + return null; + } + + if ($node instanceof Stmt\Class_) { + if ($node->extends instanceof Name) { + $node->extends = $this->remapName($node->extends); + } + return null; + } + + if ($node instanceof Node\Expr\Instanceof_ && $node->class instanceof Name) { + $node->class = $this->remapName($node->class); + return null; + } + + return null; + } + + private function remapName(Name $name): Name + { + if (in_array($name->toString(), self::REMAPPED, true)) { + return new Name('Exception', $name->getAttributes()); + } + return $name; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/PromoteForHoistedClosuresVisitor.php b/scripts/php52-downgrader/src/Visitor/PromoteForHoistedClosuresVisitor.php new file mode 100644 index 0000000000..0254b370ba --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/PromoteForHoistedClosuresVisitor.php @@ -0,0 +1,158 @@ +classContainsThisClosure($node)) { + return null; + } + foreach ($node->stmts as $stmt) { + if ($stmt instanceof Stmt\Property) { + $stmt->flags = self::makePublic($stmt->flags); + } elseif ($stmt instanceof Stmt\ClassMethod) { + $stmt->flags = self::makePublic($stmt->flags); + } + } + return null; + } + + /** + * True if any closure (or arrow function) inside this class body + * — at any nesting depth, but excluding nested-class scopes — + * references `$this`. Closures with no `$this` reference do not + * need member-visibility promotion because the helper body never + * touches an instance. + */ + private function classContainsThisClosure(Stmt\Class_ $class): bool + { + $found = false; + $visitor = new class () extends NodeVisitorAbstract { + public bool $found = false; + /** @var int Nested class depth — refs to `$this` inside an + * anonymous inner class belong to a different + * scope and don't trigger promotion of the + * outer. We never enter the *outer* class itself + * because the caller passes its body directly. */ + private int $nestedDepth = 0; + + public function enterNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->nestedDepth++; + return null; + } + if ($this->nestedDepth > 0) { + return null; + } + if ( + $node instanceof Expr\Closure + || $node instanceof Expr\ArrowFunction + ) { + if ($this->closureUsesThis($node)) { + $this->found = true; + return NodeTraverser::STOP_TRAVERSAL; + } + } + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->nestedDepth--; + } + return null; + } + + private function closureUsesThis(Node $closure): bool + { + $found = false; + $walker = new class () extends NodeVisitorAbstract { + public bool $found = false; + public function enterNode(Node $n) + { + if ( + $n instanceof Expr\Variable + && is_string($n->name) + && $n->name === 'this' + ) { + $this->found = true; + return NodeTraverser::STOP_TRAVERSAL; + } + if ( + $n instanceof Expr\Closure + || $n instanceof Expr\ArrowFunction + ) { + // Don't descend into nested closures; their + // `$this` belongs to their own scope. The + // outer closure's loop will visit them + // independently. + return NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + } + return null; + } + }; + $traverser = new NodeTraverser(); + $traverser->addVisitor($walker); + $body = $closure instanceof Expr\Closure + ? $closure->stmts + : [new Stmt\Return_($closure->expr)]; + $traverser->traverse($body); + return $walker->found; + } + }; + $traverser = new NodeTraverser(); + $traverser->addVisitor($visitor); + // Walk the class body but NOT the class node itself (to avoid + // the nestedDepth bookkeeping running on the outer class). + $traverser->traverse($class->stmts); + return $visitor->found; + } + + /** + * Clears the PROTECTED and PRIVATE flag bits and sets PUBLIC. + * Preserves STATIC/ABSTRACT/FINAL. + */ + private static function makePublic(int $flags): int + { + $flags &= ~(Modifiers::PROTECTED | Modifiers::PRIVATE); + $flags |= Modifiers::PUBLIC; + return $flags; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ReservedMethodRenameVisitor.php b/scripts/php52-downgrader/src/Visitor/ReservedMethodRenameVisitor.php new file mode 100644 index 0000000000..2223c6aad7 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ReservedMethodRenameVisitor.php @@ -0,0 +1,44 @@ + new name. */ + private const RENAMES = [ + 'throw' => 'throwError', + ]; + + public function enterNode(Node $node) + { + if ($node instanceof Stmt\ClassMethod && isset(self::RENAMES[$node->name->name])) { + $node->name = new Node\Identifier(self::RENAMES[$node->name->name]); + return null; + } + if ($node instanceof Expr\MethodCall && $node->name instanceof Node\Identifier + && isset(self::RENAMES[$node->name->name])) { + $node->name = new Node\Identifier(self::RENAMES[$node->name->name]); + return null; + } + if ($node instanceof Expr\StaticCall && $node->name instanceof Node\Identifier + && isset(self::RENAMES[$node->name->name])) { + $node->name = new Node\Identifier(self::RENAMES[$node->name->name]); + return null; + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/SelfParentStaticRewriter.php b/scripts/php52-downgrader/src/Visitor/SelfParentStaticRewriter.php new file mode 100644 index 0000000000..8e95573a7a --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/SelfParentStaticRewriter.php @@ -0,0 +1,180 @@ +` assignments. The `` may + * reference `self::OTHER_CONST`, which has to become + * `ClassName::OTHER_CONST` before it leaves the class. + * + * 2. {@see ClosureHoistingVisitor} hoists PHP 5.3+ closures into + * top-level named functions. The body may reference `self::X`, + * `parent::method()`, `static::$prop`, etc., all of which need + * to be rewritten before the body leaves its class scope. + * + * The rewriter walks nested nodes but does NOT descend into an + * inline-defined nested class — references inside such a class + * belong to a different scope. + * + * `static::` is collapsed to `self::` (then to the literal class + * name). This loses runtime late-static-binding semantics, but for + * the two use cases above the value is either captured at class load + * time (constants) or the closure is hosted on a `final` data class, + * so the distinction is irrelevant. + * + * If `parent::` is encountered and the enclosing class has no + * `extends` clause, we throw a RuntimeException tagged with a + * caller-supplied `$contextHint` — each caller wants its own error + * wording so operators can tell which pipeline stage failed. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Expr; +use PhpParser\Node\Stmt; +use PhpParser\NodeTraverser; +use PhpParser\NodeVisitorAbstract; + +class SelfParentStaticRewriter +{ + /** + * Rewrites every `self::X`, `parent::X`, `static::X`, + * `self::$P`, `parent::$P`, `static::$P`, `self::method()`, etc. + * inside the given expression tree so that the literal class name + * is used. Returns the rewritten expression (the rewriter mutates + * the tree in place but we go through the traverser wrapper to + * keep error propagation consistent with the stmts variant). + * + * @param Node\Expr $expr Expression to transform. + * @param string $className Enclosing class name. + * @param string|null $parentName Enclosing class' parent, or null. + * @param string $contextHint Caller-specific phrase used in + * the thrown RuntimeException when + * `parent::` is encountered and no + * parent is known. Examples: + * "extracted expression", + * "hoisted closure". + */ + public static function rewriteInExpr( + Node\Expr $expr, + string $className, + ?string $parentName, + string $contextHint + ): Node\Expr { + $wrapped = [new Stmt\Expression($expr)]; + self::traverse($wrapped, $className, $parentName, $contextHint); + /** @var Stmt\Expression $wrapper */ + $wrapper = $wrapped[0]; + return $wrapper->expr; + } + + /** + * Rewrites every self/parent/static reference inside the given + * statement list in place (the array is passed by reference so the + * caller sees the traverser's fresh, potentially-replaced nodes). + * + * @param array $stmts Statement list to transform. + * @param string $className Enclosing class name. + * @param string|null $parentName Enclosing class' parent, or null. + * @param string $contextHint See {@see rewriteInExpr()}. + */ + public static function rewriteInStmts( + array &$stmts, + string $className, + ?string $parentName, + string $contextHint + ): void { + self::traverse($stmts, $className, $parentName, $contextHint); + } + + /** + * Runs the shared traverser over a statement list. Both public + * entrypoints funnel through here so the walk and error-reporting + * logic lives in exactly one place. + * + * @param array $stmts + */ + private static function traverse( + array &$stmts, + string $className, + ?string $parentName, + string $contextHint + ): void { + $rewriter = new class ($className, $parentName, $contextHint) extends NodeVisitorAbstract { + /** @var string */ + private string $className; + /** @var string|null */ + private ?string $parentName; + /** @var string */ + private string $contextHint; + /** @var int Nested-class depth so we don't rewrite refs inside an inline class. */ + private int $nestedClassDepth = 0; + + public function __construct(string $className, ?string $parentName, string $contextHint) + { + $this->className = $className; + $this->parentName = $parentName; + $this->contextHint = $contextHint; + } + + public function enterNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->nestedClassDepth++; + } + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Stmt\Class_) { + $this->nestedClassDepth--; + return null; + } + if ($this->nestedClassDepth > 0) { + return null; + } + if ( + $node instanceof Expr\ClassConstFetch + || $node instanceof Expr\StaticPropertyFetch + || $node instanceof Expr\StaticCall + ) { + if (!$node->class instanceof Node\Name) { + return null; + } + $cls = $node->class->toString(); + if ($cls === 'self' || $cls === 'static') { + $node->class = new Node\Name($this->className); + return $node; + } + if ($cls === 'parent') { + if ($this->parentName === null) { + throw new \RuntimeException( + "cannot rewrite parent:: in {$this->contextHint}: " . + "class {$this->className} has no `extends` clause. " . + "Add an explicit parent class or patch the source to avoid parent:: here." + ); + } + $node->class = new Node\Name($this->parentName); + return $node; + } + } + return null; + } + }; + $traverser = new NodeTraverser(); + $traverser->addVisitor($rewriter); + $stmts = $traverser->traverse($stmts); + } +} diff --git a/scripts/php52-downgrader/src/Visitor/ShortTernaryVisitor.php b/scripts/php52-downgrader/src/Visitor/ShortTernaryVisitor.php new file mode 100644 index 0000000000..e28e9834bd --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/ShortTernaryVisitor.php @@ -0,0 +1,88 @@ + $var ? $var : $fallback + * $safe->expr ?: $fallback => $safe->expr ? $safe->expr : $fallback + * fn($a) ?: $fallback => (($__pg_st_tmp = fn($a)) ? $__pg_st_tmp : $fallback) + * + * Simple side-effect-free LHSes are duplicated in place. Complex + * LHSes are captured in a temp var so they evaluate once. + */ + +declare(strict_types=1); + +namespace WpPlayground\Php52Downgrader\Visitor; + +use PhpParser\Node; +use PhpParser\Node\Expr; +use PhpParser\NodeVisitorAbstract; + +class ShortTernaryVisitor extends NodeVisitorAbstract +{ + /** @var int Counter for unique temp var names, reset per file. */ + private int $tempCounter = 0; + + public function beforeTraverse(array $nodes) + { + $this->tempCounter = 0; + return null; + } + + public function leaveNode(Node $node) + { + if (!$node instanceof Expr\Ternary) { + return null; + } + if ($node->if !== null) { + // Not a short ternary. + return null; + } + $lhs = $node->cond; + if ($this->isDuplicatable($lhs)) { + return new Expr\Ternary( + $lhs, + clone $lhs, + $node->else, + $node->getAttributes() + ); + } + // Side-effecting LHS: capture in a counter-suffixed temp var + // so nested `a() ?: b() ?: c()` rewrites don't collide. + $tmpName = '__pg_st_tmp_' . $this->tempCounter++; + $tmp = new Expr\Variable($tmpName); + $assign = new Expr\Assign($tmp, $lhs); + return new Expr\Ternary( + $assign, + clone $tmp, + $node->else, + $node->getAttributes() + ); + } + + private function isDuplicatable(Node\Expr $expr): bool + { + if ($expr instanceof Expr\Variable) { + return true; + } + if ($expr instanceof Expr\PropertyFetch) { + return $this->isDuplicatable($expr->var); + } + if ($expr instanceof Expr\StaticPropertyFetch) { + return true; + } + if ($expr instanceof Expr\ArrayDimFetch) { + return $this->isDuplicatable($expr->var); + } + if ($expr instanceof Expr\ConstFetch) { + return true; + } + if ($expr instanceof Expr\ClassConstFetch) { + return true; + } + if ($expr instanceof Node\Scalar) { + return true; + } + return false; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/StripTypeDeclarationsVisitor.php b/scripts/php52-downgrader/src/Visitor/StripTypeDeclarationsVisitor.php new file mode 100644 index 0000000000..09ded697cc --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/StripTypeDeclarationsVisitor.php @@ -0,0 +1,43 @@ +type = null; + return null; + } + if ($node instanceof Stmt\Function_ || $node instanceof Stmt\ClassMethod) { + $node->returnType = null; + return null; + } + if ($node instanceof Node\Expr\Closure || $node instanceof Node\Expr\ArrowFunction) { + $node->returnType = null; + return null; + } + if ($node instanceof Stmt\Property) { + $node->type = null; + return null; + } + return null; + } +} diff --git a/scripts/php52-downgrader/src/Visitor/VariadicAndSplatVisitor.php b/scripts/php52-downgrader/src/Visitor/VariadicAndSplatVisitor.php new file mode 100644 index 0000000000..362d57da05 --- /dev/null +++ b/scripts/php52-downgrader/src/Visitor/VariadicAndSplatVisitor.php @@ -0,0 +1,225 @@ +rewriteVariadic($node); + } + return null; + } + + public function leaveNode(Node $node) + { + if ($node instanceof Expr\FuncCall) { + return $this->rewriteSplatCall($node); + } + if ($node instanceof Expr\MethodCall) { + return $this->rewriteSplatCall($node); + } + if ($node instanceof Expr\StaticCall) { + return $this->rewriteSplatCall($node); + } + return null; + } + + /** + * Converts trailing `...$rest` parameters into a + * `func_get_args()` slice injected at the start of the body. + */ + private function rewriteVariadic(Node $node): void + { + $params = $node->params ?? []; + $fixed = []; + $variadic = null; + foreach ($params as $p) { + if ($p->variadic) { + $variadic = $p; + continue; + } + $fixed[] = $p; + } + if ($variadic === null) { + return; + } + $node->params = $fixed; + $offset = count($fixed); + $rhs = $offset === 0 + ? new Expr\FuncCall(new Node\Name('func_get_args')) + : new Expr\FuncCall( + new Node\Name('array_slice'), + [ + new Arg(new Expr\FuncCall(new Node\Name('func_get_args'))), + new Arg(new Node\Scalar\Int_($offset)), + ] + ); + $injected = new Stmt\Expression( + new Expr\Assign($variadic->var, $rhs) + ); + if (isset($node->stmts) && $node->stmts !== null) { + array_unshift($node->stmts, $injected); + } + } + + /** + * Rewrites a call expression containing `...$rest` to use + * call_user_func_array. + */ + private function rewriteSplatCall(Node $node): ?Node + { + $args = $node->args; + $splatIdx = null; + foreach ($args as $idx => $arg) { + if ($arg instanceof Arg && $arg->unpack) { + $splatIdx = $idx; + break; + } + } + if ($splatIdx === null) { + return null; + } + // We only handle the simple shape where `...` is the last arg. + // Earlier positions (e.g. `f(...$a, $b)` or `f($a, ...$b, $c)`) + // cannot be expressed via call_user_func_array without an + // intermediate merged argument array and knowledge of all + // subsequent splats — bail out loudly rather than silently + // pass through and emit 5.6+ syntax. + if ($splatIdx !== count($args) - 1) { + $this->throwOnNonTrailingSplat($node, $args); + } + $fixed = array_slice($args, 0, $splatIdx); + /** @var Arg $splatArg */ + $splatArg = $args[$splatIdx]; + $restExpr = $splatArg->value; + + // Build the arg-list expression: array_merge(array(fixed...), $rest). + if (count($fixed) === 0) { + $argsExpr = $restExpr; + } else { + $argsExpr = new Expr\FuncCall( + new Node\Name('array_merge'), + [ + new Arg(new Expr\Array_(array_map( + fn(Arg $a) => new Node\ArrayItem($a->value), + $fixed + ))), + new Arg($restExpr), + ] + ); + } + + $callable = $this->buildCallable($node); + if ($callable === null) { + // Unknown shape (e.g. variable function call). The builder + // would need the raw callable, which we don't have. + // call_user_func_array already accepts whatever the + // original call supports. + return null; + } + return new Expr\FuncCall( + new Node\Name('call_user_func_array'), + [new Arg($callable), new Arg($argsExpr)], + $node->getAttributes() + ); + } + + /** + * @param array $args + * @return never + */ + private function throwOnNonTrailingSplat(Node $node, array $args): void + { + $line = $node->getStartLine(); + $shape = []; + foreach ($args as $a) { + if ($a instanceof Arg && $a->unpack) { + $shape[] = '...'; + } else { + $shape[] = 'arg'; + } + } + throw new \RuntimeException(sprintf( + "VariadicAndSplatVisitor: non-trailing splat arguments are " . + "not supported — saw call with args [%s] at line %d. " . + "Rewrite the source to place `...` last, or pre-merge the " . + "argument list into a single variable.", + implode(', ', $shape), + $line + )); + } + + /** Returns the callable expression (first arg to call_user_func_array). */ + private function buildCallable(Node $node): ?Expr + { + if ($node instanceof Expr\FuncCall) { + if ($node->name instanceof Node\Name) { + return new Node\Scalar\String_($node->name->toString()); + } + if ($node->name instanceof Expr) { + return $node->name; + } + return null; + } + if ($node instanceof Expr\MethodCall) { + $method = $node->name instanceof Node\Identifier + ? $node->name->toString() + : null; + if ($method === null) { + return null; + } + return new Expr\Array_([ + new Node\ArrayItem($node->var), + new Node\ArrayItem(new Node\Scalar\String_($method)), + ]); + } + if ($node instanceof Expr\StaticCall) { + $method = $node->name instanceof Node\Identifier + ? $node->name->toString() + : null; + if ($method === null) { + return null; + } + $cls = $node->class instanceof Node\Name + ? $node->class->toString() + : null; + if ($cls === null) { + return null; + } + return new Expr\Array_([ + new Node\ArrayItem(new Node\Scalar\String_($cls)), + new Node\ArrayItem(new Node\Scalar\String_($method)), + ]); + } + return null; + } +} From fe0f2186610e8afe854e3eecd4f8a45d745c2e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Wed, 15 Apr 2026 09:22:09 +0200 Subject: [PATCH 02/24] Add legacy WordPress boot support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Port complete legacy WordPress (1.0–4.9) boot support from the legacy-wordpress-support-v2 branch, adapted for PHP 5.2 only. boot.ts: Legacy PHP boot flow with source patching, safe install and validation wrappers, post-install fixups for WP versions that lack standard install infrastructure, and a `runDbDeltaOnly` path that gates the PDO fallback to `wp_version < 3.5` so WP 3.5+ boots cleanly through the AST SQLite driver without getting WP 1.x-shaped tables written behind the driver's back. index.ts: Legacy-aware mu-plugin setup with PHP 4 superglobal polyfills, eval()-based preload for parser-incompatible files, WordPress version-conditional auth bypass, and an error handler adapted for PHP 5.2 syntax. Auto-login always takes the in-process cookie path (PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT unconditionally defined) because redirect+Set-Cookie is unreliable on PHP 5.2 WASM — wp_set_auth_cookie()'s headers don't consistently reach the Playground service worker's cookie store across all WP versions. legacy-wp-fixes.ts: ~3000 lines of WP source patches covering: - wp-settings.php deprecated function removal - wp-db.php SQLite compatibility - install.php schema fixes for PDO/SQLite - WP 1.0–2.8 specific parser and SQL fixes - Auth cookie and nonce compatibility for WP < 4.5 - Pretty permalink support for legacy WP - comment_count backfill on wp_posts via $alter_cols (WP 1.5+ reads wp_posts.comment_count directly in get_comments_number()) mysql-shims.ts: MySQL function stubs delegating to $wpdb for WP < 3.0. Add CI job and test script for legacy WP version boot testing. --- .github/workflows/ci.yml | 27 + packages/playground/wordpress/project.json | 8 + packages/playground/wordpress/src/boot.ts | 465 ++- packages/playground/wordpress/src/index.ts | 859 ++++- .../wordpress/src/legacy-wp-fixes.ts | 3396 +++++++++++++++++ .../playground/wordpress/src/mysql-shims.ts | 145 + .../tests/test-legacy-wp-version-boot.mjs | 672 ++++ 7 files changed, 5402 insertions(+), 170 deletions(-) create mode 100644 packages/playground/wordpress/src/legacy-wp-fixes.ts create mode 100644 packages/playground/wordpress/src/mysql-shims.ts create mode 100644 packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aad4882307..77171b1267 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -394,6 +394,33 @@ jobs: node-version: 20 - run: packages/php-wasm/cli/tests/smoke-test.sh + test-legacy-wp-version-boot: + if: github.repository == 'WordPress/wordpress-playground' || github.event_name == 'pull_request' + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: ./.github/actions/prepare-playground + - name: Install Playwright Browser + run: npx playwright install chromium --with-deps + - name: Start dev server + run: | + npm run dev > /tmp/playground-dev.log 2>&1 & + timeout=120; elapsed=0 + until curl -s -o /dev/null http://127.0.0.1:5400/website-server/ 2>/dev/null; do + sleep 3 + elapsed=$((elapsed + 3)) + if [ $elapsed -ge $timeout ]; then + echo "Dev server failed to start within ${timeout}s" + cat /tmp/playground-dev.log | tail -50 + exit 1 + fi + done + - name: Test legacy WordPress version boot + run: node packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs + # Redis extension tests - verifies the php-redis extension loads # and provides the expected API, and can connect to a real Redis server. # Redis requires JSPI because asyncify cannot properly handle exceptions diff --git a/packages/playground/wordpress/project.json b/packages/playground/wordpress/project.json index d6d4008f66..dbf4ad9180 100644 --- a/packages/playground/wordpress/project.json +++ b/packages/playground/wordpress/project.json @@ -71,6 +71,14 @@ "reportsDirectory": "../../../coverage/packages/playground/wordpress" } }, + "test-legacy-wp-version-boot": { + "executor": "nx:run-commands", + "options": { + "commands": [ + "node packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs" + ] + } + }, "lint": { "executor": "@nx/eslint:lint", "outputs": ["{options.outputFile}"], diff --git a/packages/playground/wordpress/src/boot.ts b/packages/playground/wordpress/src/boot.ts index c266361807..c33a44f9eb 100644 --- a/packages/playground/wordpress/src/boot.ts +++ b/packages/playground/wordpress/src/boot.ts @@ -26,6 +26,27 @@ import { import { basename, dirname, joinPaths } from '@php-wasm/util'; import { logger } from '@php-wasm/logger'; import { ensureWpConfig } from './wp-config'; +import { + generateDbPhpContent, + LEGACY_WP_ERROR_REPORTING_PHP_EXPR, + LEGACY_WP_ERROR_REPORTING_VALUE, + patchWordPressSourceFiles, + runPostInstallLegacyFixups, +} from './legacy-wp-fixes'; + +/** + * Network I/O functions that must be disabled on legacy PHP builds + * (< 7) to avoid "null function or function signature mismatch" + * WASM crashes when WordPress calls fsockopen or cURL during cron, + * update checks, dashboard RSS widgets, etc. + */ +const LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS = [ + 'fsockopen', + 'pfsockopen', + 'curl_init', + 'curl_exec', + 'curl_multi_exec', +] as const; export type PhpIniOptions = Record; export type Hook = (php: PHP) => void | Promise; @@ -244,7 +265,41 @@ export async function bootWordPress( * them. This is needed because some WordPress backups and exports may not * include definitions for some of the necessary constants. */ - await ensureWpConfig(php, requestHandler.documentRoot); + const phpMajor = Number.isFinite(parseInt(options.phpVersion ?? '', 10)) + ? parseInt(options.phpVersion!, 10) + : 8; + if (phpMajor >= 7) { + await ensureWpConfig(php, requestHandler.documentRoot); + } else { + // For legacy PHP, skip ensureWpConfig since the pre-built + // WordPress already has a valid wp-config-sample.php and + // php.run() with the large transformer code hangs. + // Just copy wp-config-sample.php to wp-config.php if needed. + const wpConfigPath = joinPaths( + requestHandler.documentRoot, + 'wp-config.php' + ); + if ( + !php.fileExists(wpConfigPath) && + php.fileExists( + joinPaths(requestHandler.documentRoot, 'wp-config-sample.php') + ) + ) { + await php.writeFile( + wpConfigPath, + await php.readFileAsBuffer( + joinPaths( + requestHandler.documentRoot, + 'wp-config-sample.php' + ) + ) + ); + } + } + if (phpMajor < 7) { + await patchWordPressSourceFiles(php, requestHandler.documentRoot); + } + // Run "before database" hooks to mount/copy more files in if (options.hooks?.beforeDatabaseSetup) { await options.hooks.beforeDatabaseSetup(php); @@ -257,8 +312,25 @@ export async function bootWordPress( usesSqlite = true; await preloadSqliteIntegration( php, - await options.sqliteIntegrationPluginZip + await options.sqliteIntegrationPluginZip, + { phpVersion: options.phpVersion } ); + + // Write wp-content/db.php with MySQL function stubs for + // legacy WordPress. WP 4.x checks extension_loaded('mysql') + // and only skips that check if wp-content/db.php exists. + // patchWpSettingsPhp() patches that check away, but only + // runs for legacy PHP. Modern WP doesn't have this check. + if (phpMajor < 7) { + const wpContentDir = joinPaths( + requestHandler.documentRoot, + 'wp-content' + ); + const dbPhpPath = joinPaths(wpContentDir, 'db.php'); + if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { + await php.writeFile(dbPhpPath, generateDbPhpContent()); + } + } } const installationMode = @@ -276,20 +348,18 @@ export async function bootWordPress( hasCustomDatabasePath, }); // Install WordPress if it's not installed. - try { - await installWordPress(php); - } catch (error) { - // If installation failed, check if it's a database issue - // to provide a more specific error message (but skip if user provided custom DB path) - if (!hasCustomDatabasePath) { - await assertValidDatabaseConnection(requestHandler); - } - // If we get here, the database is valid but installation failed for another reason - throw error; - } - // Validate the database connection after installation (skip if user provided custom DB path) + await installWordPressSafe( + php, + phpMajor, + hasCustomDatabasePath, + requestHandler, + options.phpVersion + ); if (!hasCustomDatabasePath) { - await assertValidDatabaseConnection(requestHandler); + await assertValidDatabaseConnectionSafe( + requestHandler, + options.phpVersion + ); } } else if ('install-from-existing-files-if-needed' === installationMode) { // Check database prerequisites before attempting installation @@ -297,29 +367,67 @@ export async function bootWordPress( usesSqlite, hasCustomDatabasePath, }); - if (!(await isWordPressInstalled(php))) { - // Install WordPress if it's not installed. - try { - await installWordPress(php); - } catch (error) { - // If installation failed, check if it's a database issue - // to provide a more specific error message (but skip if user provided custom DB path) - if (!hasCustomDatabasePath) { - await assertValidDatabaseConnection(requestHandler); - } - // If we get here, the database is valid but installation failed for another reason - throw error; - } + // For legacy PHP (< 7), skip isWordPressInstalled check because + // it crashes the WASM runtime on old WordPress (< 3.0) where the + // SQLite driver initialization chain isn't fully compatible. + const isInstalled = + phpMajor >= 7 ? await isWordPressInstalled(php) : false; + if (!isInstalled) { + await installWordPressSafe( + php, + phpMajor, + hasCustomDatabasePath, + requestHandler, + options.phpVersion + ); } - // Validate the database connection after installation (skip if user provided custom DB path) + // Validate the database connection after installation if (!hasCustomDatabasePath) { - await assertValidDatabaseConnection(requestHandler); + await assertValidDatabaseConnectionSafe( + requestHandler, + options.phpVersion + ); } } return requestHandler; } +/** + * Wrapper around installWordPress that handles errors gracefully + * for legacy PHP versions where installation errors may be non-fatal. + */ +async function installWordPressSafe( + php: PHP, + phpMajor: number, + hasCustomDatabasePath: boolean, + requestHandler: PHPRequestHandler, + phpVersion?: string +): Promise { + try { + await installWordPress(php, phpMajor); + } catch (error) { + if (!hasCustomDatabasePath) { + await assertValidDatabaseConnectionSafe(requestHandler, phpVersion); + } + if (phpMajor >= 7) { + throw error; + } + logger.warn('Legacy PHP WordPress installation error:', error); + } + // Run legacy fixups whether the installer succeeded or threw. On + // WP 1.x the installer routinely fails halfway through and we rely + // on the fixups (stage 2 in particular) to finish building the + // schema. On newer legacy WP where the installer succeeded, the + // fixups short-circuit cheaply: stage 1 exits before loading WP if + // wp_users doesn't exist yet, and stage 2 is gated to WP < 3.5, so + // the only work done on the happy path is a pair of UPDATE queries + // against wp_options (siteurl/home) plus an admin-password reset. + if (phpMajor < 7) { + await runPostInstallLegacyFixups(php, requestHandler.absoluteUrl); + } +} + /** * Checks if database prerequisites are in place before attempting WordPress installation. * This performs lightweight checks that don't require WordPress to be installed. @@ -375,6 +483,28 @@ async function assertDatabasePrerequisites( throw new Error('Error connecting to the MySQL database.'); } +/** + * For legacy PHP (< 7), skip the database connection check entirely. + * + * Calling isDatabaseConnectionValid() loads wp-load.php. On some old + * WordPress versions (2.5–2.7) this triggers a WASM "null function or + * function signature mismatch" crash that corrupts the PHP instance and + * prevents the front page from loading. The check is non-fatal for + * legacy PHP anyway — runPostInstallLegacyFixups() handles any setup + * that's needed. Skipping gives the same observable result (no error + * thrown) without the risk of state corruption. + */ +async function assertValidDatabaseConnectionSafe( + requestHandler: PHPRequestHandler, + phpVersion?: string +) { + const phpMajor = parseInt(phpVersion ?? '8', 10); + if (phpMajor < 7) { + return; + } + await assertValidDatabaseConnection(requestHandler); +} + async function assertValidDatabaseConnection( requestHandler: PHPRequestHandler ) { @@ -427,7 +557,41 @@ export async function bootRequestHandler(options: BootRequestHandlerOptions) { setPhpIniEntries(php, options.phpIniEntries); } - // Use the new AST-based SQLite driver. + // Disable network I/O for legacy PHP (< 7) to prevent WASM + // crashes. Old WordPress (2.5–3.6) calls fsockopen/cURL during + // cron, update checks, and dashboard RSS widgets. The + // underlying socket/cURL operations trigger "null function or + // function signature mismatch" WASM errors; disabling them + // makes the calls fail safely (return false) instead of + // crashing. + // + // setPhpIniEntries overwrites keys, so we merge with whatever + // the caller already passed in `options.phpIniEntries` — + // otherwise a networking-disabled list from the web worker + // would be silently replaced by this legacy-only list. + if (parseInt(options.phpVersion ?? '8', 10) < 7) { + const legacyDisabled = [...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS]; + const callerDisabled = ( + options.phpIniEntries?.['disable_functions'] ?? '' + ) + .split(',') + .map((s) => s.trim()) + .filter((s) => s); + const mergedDisabled = Array.from( + new Set([...callerDisabled, ...legacyDisabled]) + ).join(','); + setPhpIniEntries(php, { + disable_functions: mergedDisabled, + allow_url_fopen: '0', + }); + } + + // Use the new AST-based SQLite driver for all supported PHP + // versions. The PHP 5.2 build of the driver is the + // `v2.2.22-php52` variant bundled alongside trunk; it has + // closures hoisted to named functions and a few polyfills so + // it runs unmodified on PHP 5.2. See the + // `sqlite-database-integration-v2.2.22-php52.zip` asset. // TODO: Remove this once the new driver is the default; when this is closed: // https://github.com/WordPress/sqlite-database-integration/issues/195 php.defineConstant('WP_SQLITE_AST_DRIVER', true); @@ -464,7 +628,9 @@ export async function bootRequestHandler(options: BootRequestHandlerOptions) { !php.isFile('/internal/.boot-files-written') ) { // TODO: There is a race here when multiple workers are calling bootRequestHandler(). Fix it. - await setupPlatformLevelMuPlugins(php); + await setupPlatformLevelMuPlugins(php, { + phpVersion: options.phpVersion, + }); await writeFiles(php, '/', options.createFiles || {}); await preloadPhpInfoRoute( php, @@ -574,13 +740,69 @@ export async function isWordPressInstalled(php: PHP) { * Without them, the installer may take 60 seconds, * 300 seconds, or even more to complete. */ -async function installWordPress(php: PHP) { +async function installWordPress(php: PHP, phpMajor = 8) { + // WP 1.0–3.0 on legacy PHP: skip the install.php HTTP request + // entirely. These old installers trigger various unreachable WASM + // traps (mail(), mysql_get_server_info(), etc.) that the PHP 5.2 + // binary can't handle. The runPostInstallLegacyFixups() PDO + // fallback creates all tables, users, options, and content + // without running any crashable PHP. + if (phpMajor < 7) { + const versionPhp = joinPaths( + php.documentRoot, + 'wp-includes/version.php' + ); + if (php.fileExists(versionPhp)) { + const content = php.readFileAsText(versionPhp); + const match = content.match(/\$wp_version\s*=\s*['"]([^'"]+)['"]/); + if (match) { + const wpVersion = match[1]; + // WP 1.0–3.0 installers trigger unreachable WASM + // traps from mail(), network calls, + // mysql_get_server_info(), etc. WP 3.1+ works + // with targeted function patches. + // + // WP 1.0-1.2: the post-install PDO fallback + // creates the very simple schema entirely. + // WP 1.5-3.0: needs dbDelta() for proper table + // schemas but skip the rest of the installer. + if (parseFloat(wpVersion) < 2.1) { + return; + } + if (parseFloat(wpVersion) <= 3.0) { + await runDbDeltaOnly(php); + return; + } + } + } + } + + const iniOverrides: Record = { + // Disable network I/O functions during installation. + // For legacy PHP (< 7), this must include all the functions + // already disabled in bootRequestHandler — setPhpIniEntries + // replaces the entire value, so listing only 'fsockopen' + // would re-enable curl_init/curl_exec and cause WASM crashes + // when the installer makes outbound HTTP requests. + disable_functions: + phpMajor < 7 + ? [...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS, 'mail'].join(',') + : 'fsockopen', + allow_url_fopen: '0', + }; + if (phpMajor < 7) { + // Suppress E_DEPRECATED (8192) and E_STRICT (2048) at + // the ini level. Old WordPress class declarations trigger + // E_STRICT warnings during compilation (e.g. Walker_Page) + // which PHP may report using the ini error_reporting value + // rather than the runtime error_reporting() call. + iniOverrides['error_reporting'] = String( + LEGACY_WP_ERROR_REPORTING_VALUE + ); + } const response = await withPHPIniValues( php, - { - disable_functions: 'fsockopen', - allow_url_fopen: '0', - }, + iniOverrides, async () => await php.request({ url: '/wp-admin/install.php?step=2', @@ -600,7 +822,27 @@ async function installWordPress(php: PHP) { }) ); - if (!(await isWordPressInstalled(php))) { + if (phpMajor < 7) { + // Legacy PHP (< 7): skip isWordPressInstalled() entirely — it + // can trigger a WASM trap (not a PHP exception) on old WordPress + // (< 3.0), which corrupts the runtime beyond recovery. Use the + // installer response text as a heuristic instead. + const installSucceeded = + response.text?.includes('Success') || + response.text?.includes('successful') || + response.text?.includes('Finished') || + response.text?.includes('Already Installed') || + response.text?.includes('already have WordPress installed') || + false; + if (!installSucceeded) { + throw new Error( + `Failed to install WordPress – installer responded with "${response.text?.substring( + 0, + 100 + )}"` + ); + } + } else if (!(await isWordPressInstalled(php))) { throw new Error( `Failed to install WordPress – installer responded with "${response.text?.substring( 0, @@ -609,35 +851,130 @@ async function installWordPress(php: PHP) { ); } - const defaultedToPrettyPermalinks = await php.run({ - code: `setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $nice_permalinks = '/%year%/%monthnum%/%day%/%postname%/'; + $stmt = $pdo->prepare( + "UPDATE wp_options SET option_value = :val WHERE option_name = 'permalink_structure'" + ); + $stmt->execute(array(':val' => $nice_permalinks)); + if ($stmt->rowCount() === 0) { + $stmt = $pdo->prepare( + "INSERT INTO wp_options (option_name, option_value, autoload) VALUES ('permalink_structure', :val, 'yes')" + ); + $stmt->execute(array(':val' => $nice_permalinks)); + } + $check = $pdo->query( + "SELECT option_value FROM wp_options WHERE option_name = 'permalink_structure'" + )->fetchColumn(); + echo $check === $nice_permalinks ? '1' : '0'; + `, + env: { DOCUMENT_ROOT: php.documentRoot }, + }); + if (result.text !== '1') { + logger.warn( + 'Failed to default to pretty permalinks after WP install.' + ); } - require $wp_load; - $nice_permalinks = '/%year%/%monthnum%/%day%/%postname%/'; - $option_result = update_option( - 'permalink_structure', - $nice_permalinks + } catch { + logger.warn( + 'Failed to set pretty permalinks after WP install (non-fatal).' ); - ob_clean(); - if ( get_option( 'permalink_structure' ) === $nice_permalinks ) { - echo '1'; - } else { - echo '0'; - } - ob_end_flush(); - `, - env: { - DOCUMENT_ROOT: php.documentRoot, - }, - }); + } + } else { + const defaultedToPrettyPermalinks = await php.run({ + code: ` { + try { + await php.run({ + code: `ID, $user->user_login ); + wp_set_auth_cookie( $user->ID ); + do_action( 'wp_login', $user->user_login, $user ); + setcookie('playground_auto_login_already_happened', '1'); + if (headers_sent()) { + _doing_it_wrong('playground_auto_login', 'Headers already sent, the Playground runtime will not auto-login the user', '1.0.0'); + return; + } + $redirect_url = $_SERVER['REQUEST_URI']; + header( "Location: $redirect_url", true, 302 ); + exit; +`; + +/** + * Auto-login body for legacy WordPress (1.0-2.5). + * + * Handles three auth eras: + * - WP 2.5+: wp_set_current_user() + wp_set_auth_cookie() (HMAC cookies) + * - WP 1.5-2.4: USER_COOKIE/PASS_COOKIE constants + wp_setcookie() + * - WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies + global vars + * + * Each era uses different cookie names and hashing. The code detects + * which API is available and uses the appropriate method. + */ +const LEGACY_AUTO_LOGIN_BODY = ` + // WP 2.5+: modern auth API + if (function_exists('is_user_logged_in') && is_user_logged_in()) { + return; + } + if (headers_sent()) { + return; + } + $_pg_skip_redirect = defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT') + && PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT; + + // WP 2.5+: use the standard auth API + if (function_exists('wp_set_current_user') && function_exists('wp_set_auth_cookie')) { + $user = function_exists('get_user_by') + ? get_user_by('login', $user_name) + : (function_exists('get_userdatabylogin') + ? get_userdatabylogin($user_name) : null); + if (!$user) return; + + wp_set_current_user($user->ID, $user->user_login); + if ($_pg_skip_redirect) { + // Persist auth cookies so that subsequent PHP requests + // (e.g. form POSTs to post.php) also see the user as + // logged in. wp_set_auth_cookie() emits Set-Cookie + // headers that are captured by HttpCookieStore and + // re-injected as Cookie: on every following request. + // We also populate $_COOKIE in-process so that + // auth_redirect() and wp_verify_nonce() work for the + // remainder of this request without needing a redirect. + wp_set_auth_cookie($user->ID); + if (function_exists('wp_generate_auth_cookie')) { + $_pg_exp = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'logged_in'); + } + } else { + wp_set_auth_cookie($user->ID); + if (function_exists('do_action')) { + do_action('wp_login', $user->user_login, $user); + } + setcookie('playground_auto_login_already_happened', '1'); + if (!headers_sent()) { + header("Location: " . $_SERVER['REQUEST_URI'], true, 302); + exit; + } + } + return; + } + + // WP 1.5-2.4: USER_COOKIE/PASS_COOKIE with double-md5 + if (defined('USER_COOKIE') && defined('PASS_COOKIE')) { + $_pg_pass_cookie = md5(md5('password')); + $_COOKIE[USER_COOKIE] = $user_name; + $_COOKIE[PASS_COOKIE] = $_pg_pass_cookie; + // Persist cookies to the browser so subsequent requests + // see the user as logged in. Without these setcookie() + // calls, only the current request would be authenticated. + if (!headers_sent()) { + $_pg_exp = time() + 172800; + setcookie(USER_COOKIE, $user_name, $_pg_exp, '/'); + setcookie(PASS_COOKIE, $_pg_pass_cookie, $_pg_exp, '/'); + } + // Reset cached anonymous user so capability checks work + $GLOBALS['current_user'] = null; + if (function_exists('get_currentuserinfo')) { + get_currentuserinfo(); + } + if (!$_pg_skip_redirect) { + setcookie('playground_auto_login_already_happened', '1', 0, '/'); + if (!headers_sent()) { + header("Location: " . $_SERVER['REQUEST_URI'], true, 302); + exit; + } + } + return; + } + + // WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies + // and global user variables instead of WP_User objects. + $cookiehash = defined('COOKIEHASH') + ? COOKIEHASH + : (isset($GLOBALS['cookiehash']) && $GLOBALS['cookiehash'] + ? $GLOBALS['cookiehash'] + : (function_exists('get_settings') + ? md5(get_settings('siteurl')) + : '')); + if ($cookiehash) { + $_pg_user_cookie_name = 'wordpressuser_' . $cookiehash; + $_pg_pass_cookie_name = 'wordpresspass_' . $cookiehash; + $_pg_pass_cookie_value = md5(md5('password')); + $_COOKIE[$_pg_user_cookie_name] = $user_name; + $_COOKIE[$_pg_pass_cookie_name] = $_pg_pass_cookie_value; + // Persist cookies to the browser so subsequent requests + // see the user as logged in. + if (!headers_sent()) { + $_pg_exp = time() + 172800; + setcookie($_pg_user_cookie_name, $user_name, $_pg_exp, '/'); + setcookie($_pg_pass_cookie_name, $_pg_pass_cookie_value, $_pg_exp, '/'); + } + // Populate global user variables that WP 1.0-1.2 uses + // instead of a WP_User object. + if (function_exists('get_userdatabylogin')) { + $userdata = get_userdatabylogin($user_name); + if ($userdata) { + $GLOBALS['user_login'] = $user_name; + $GLOBALS['userdata'] = $userdata; + $GLOBALS['user_level'] = isset($userdata->user_level) ? (int) $userdata->user_level : 10; + $GLOBALS['user_ID'] = $userdata->ID; + $GLOBALS['user_email'] = isset($userdata->user_email) ? $userdata->user_email : ''; + $GLOBALS['user_url'] = isset($userdata->user_url) ? $userdata->user_url : ''; + $GLOBALS['user_nickname'] = isset($userdata->user_nickname) ? $userdata->user_nickname : $user_name; + $GLOBALS['user_pass_md5'] = md5(isset($userdata->user_pass) ? $userdata->user_pass : ''); + } + } + if (!$_pg_skip_redirect) { + setcookie('playground_auto_login_already_happened', '1', 0, '/'); + if (!headers_sent()) { + header("Location: " . $_SERVER['REQUEST_URI'], true, 302); + exit; + } + } + return; + } +`; + /** * Preloads the platform mu-plugins from /internal/shared/mu-plugins. * This avoids polluting the WordPress installation with mu-plugins @@ -27,11 +200,290 @@ export * from './rewrite-rules'; * * @param php */ -export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { +export async function setupPlatformLevelMuPlugins( + php: UniversalPHP, + options: { phpVersion?: string } = {} +) { + const phpMajor = parseInt(options.phpVersion ?? '8', 10); + const phpVersion = options.phpVersion ?? '8'; + const isPhp52 = phpVersion === '5.2'; await php.mkdir('/internal/shared/mu-plugins'); + + if (phpMajor < 7) { + // Overwrite auto_prepend_file.php to add PHP 4 superglobal + // polyfills that WP 1.0-2.5 needs. The default + // auto_prepend_file only loads consts and preload files; + // legacy PHP also needs the superglobals set up first. + await php.writeFile( + '/internal/shared/auto_prepend_file.php', + ` $value) { + if (!defined($const) && is_scalar($value)) { + define($const, $value); + } + } + } +} +foreach (glob('/internal/shared/preload/*.php') as $file) { + require_once $file; +} +// Start output buffering so that PHP notices and warnings from +// WordPress's initialisation phase do not prematurely send the +// HTTP response headers. Without buffering, the first notice +// (printed as an HTML Warning: ... snippet) commits the +// headers, making headers_sent() return true for the rest of +// the request. That prevents the auto-login mu-plugin from +// calling wp_set_auth_cookie() and setcookie() later during +// the init hook, which in turn breaks nonce validation for +// POST requests (e.g. saving a new post). +// PHP flushes the buffer automatically at script end, so all +// WordPress output is still delivered to the browser. +ob_start(); +` + ); + } + await php.writeFile( '/internal/shared/preload/env.php', - `...,'accepted_args'=>N). +// Returns 'wp10', 'wp12', or 'wp15'. +function _playground_detect_wp_hook_format() { + static $format = null; + if ($format !== null) return $format; + $doc_root = isset($_SERVER['DOCUMENT_ROOT']) + ? $_SERVER['DOCUMENT_ROOT'] : '/wordpress'; + $version_path = $doc_root . '/wp-includes/version.php'; + $wp_version = '1.0'; + if (file_exists($version_path)) { + include $version_path; + } + if (version_compare($wp_version, '1.5', '>=')) { + $format = 'wp15'; + } elseif (version_compare($wp_version, '1.2', '>=')) { + $format = 'wp12'; + } else { + $format = 'wp10'; + } + return $format; +} + +// Allow adding filters/actions prior to loading WordPress. +// $function_to_add MUST be a string. +// Stores the callback in the $wp_filter format that the target +// WordPress version's apply_filters() expects. +function playground_add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { + global $wp_filter; + $fmt = _playground_detect_wp_hook_format(); + if ($fmt === 'wp10') { + $wp_filter[$tag][] = $function_to_add; + } elseif ($fmt === 'wp12') { + $wp_filter[$tag][$priority][] = $function_to_add; + } else { + $wp_filter[$tag][$priority][$function_to_add] = array( + 'function' => $function_to_add, + 'accepted_args' => $accepted_args + ); + } +} +function playground_add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { + playground_add_filter( $tag, $function_to_add, $priority, $accepted_args ); +} + +// Set legacy WordPress auth cookies BEFORE WordPress loads. +// +// For WP 1.0-2.4, the auto-login mu-plugin runs too late: by the +// time the init hook fires (or may not fire at all on the front +// page), WordPress has already determined the user's login state +// from $_COOKIE. We set $_COOKIE here in the preload so WordPress +// sees the user as logged in from the very first request, and we +// also persist the cookies via setcookie() so subsequent requests +// bring them back automatically through Playground's HttpCookieStore. +function playground_legacy_set_auth_cookies_early() { + if (!defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) return; + if (isset($_COOKIE['playground_auto_login_already_logged_out'])) return; + + // Skip if auth cookies are already set by a previous request. + foreach ($_COOKIE as $name => $_) { + if (strncmp($name, 'wordpressuser_', 14) === 0) return; + } + + $user_name = PLAYGROUND_AUTO_LOGIN_AS_USER; + $pass_md5 = md5(md5('password')); + + // Read the actual siteurl from the SQLite database so the cookie + // hash matches what WordPress 1.0-2.4 computes from get_settings(). + $siteurl = null; + $db_path = defined('DB_DIR') ? DB_DIR . '.ht.sqlite' : ''; + if ($db_path && class_exists('PDO') && file_exists($db_path)) { + try { + $pdo = new PDO('sqlite:' . $db_path); + $stmt = $pdo->query("SELECT option_value FROM wp_options WHERE option_name = 'siteurl' LIMIT 1"); + if ($stmt) $siteurl = $stmt->fetchColumn(); + $pdo = null; + } catch (Exception $e) {} + } + if (!$siteurl && defined('WP_SITEURL')) $siteurl = WP_SITEURL; + if (!$siteurl) return; + + $cookiehash = md5($siteurl); + $user_cookie_name = 'wordpressuser_' . $cookiehash; + $pass_cookie_name = 'wordpresspass_' . $cookiehash; + $_COOKIE[$user_cookie_name] = $user_name; + $_COOKIE[$pass_cookie_name] = $pass_md5; + + if (!headers_sent()) { + $exp = time() + 172800; + setcookie($user_cookie_name, $user_name, $exp, '/'); + setcookie($pass_cookie_name, $pass_md5, $exp, '/'); + } +} +playground_legacy_set_auth_cookies_early(); + +// Fix date function comparisons for the SQLite driver. +// Old WordPress (< 4.0) generates date queries like: +// YEAR(post_date)='2026' AND MONTH(post_date)='4' +// using string literals. The SQLite driver's user-defined +// YEAR/MONTH/DAYOFMONTH/DAY functions return integers, and +// SQLite does not coerce types the way MySQL does (integer +// 4 != text '4' in SQLite). This filter strips quotes around +// numeric values in these comparisons so both sides are integers. +function playground_fix_sqlite_date_comparisons($query) { + if ( + stripos($query, 'YEAR') === false && + stripos($query, 'MONTH') === false && + stripos($query, 'DAY') === false + ) { + return $query; + } + return preg_replace( + '/\\b(YEAR|MONTH|DAYOFMONTH|DAY)\\s*\\(([^)]+)\\)\\s*=\\s*\\'(\\d+)\\'/i', + '$1($2) = $3', + $query + ); +} +playground_add_filter( 'query', 'playground_fix_sqlite_date_comparisons' ); + +// WP < 2.2 doesn't natively override get_option('siteurl') / +// get_option('home') with the WP_SITEURL / WP_HOME constants. +// Modern WP (2.2+) checks these constants in get_option() and +// returns the constant value, bypassing the DB. For WP 1.0-2.1, +// we replicate this behavior via option_siteurl / option_home +// filters so that admin navigation links use the correct +// Playground scoped URL instead of whatever the DB stores. +function playground_override_siteurl($value) { + if (defined('WP_SITEURL')) { + return WP_SITEURL; + } + return $value; +} +function playground_override_home($value) { + if (defined('WP_HOME')) { + return WP_HOME; + } + return $value; +} +playground_add_filter( 'option_siteurl', 'playground_override_siteurl' ); +playground_add_filter( 'option_home', 'playground_override_home' ); + +// Load our mu-plugins after customer mu-plugins. +// NOTE: this means our mu-plugins can't use the muplugins_loaded action! +playground_add_action( 'muplugins_loaded', 'playground_load_mu_plugins', 0 ); +// WP < 2.8 doesn't fire muplugins_loaded, so also hook into init +// as a fallback. The $loaded flag ensures mu-plugins load only once. +playground_add_action( 'init', 'playground_load_mu_plugins', -1000 ); +function playground_load_mu_plugins() { + static $loaded = false; + if ($loaded) return; + $loaded = true; + // Load all PHP files from /internal/shared/mu-plugins sorted by filename + $mu_plugins_dir = '/internal/shared/mu-plugins'; + if(!is_dir($mu_plugins_dir)){ + return; + } + $mu_plugins = glob( $mu_plugins_dir . '/*.php' ); + sort( $mu_plugins ); + global $wp_version; + $is_legacy_wp = isset($wp_version) && version_compare($wp_version, '2.8', '<'); + foreach ( $mu_plugins as $mu_plugin ) { + // sqlite-database-integration.php is loaded separately + // by the preload lazy loader or db.php. + if (strpos($mu_plugin, 'sqlite-database-integration') !== false) { + continue; + } + // Most mu-plugins use closures in add_action/add_filter + // or call functions like site_url() that don't exist in + // very old WordPress. WP < 2.8 crashes on closures in + // hooks; WP < 2.6 lacks site_url(). Only load mu-plugins + // that are explicitly written for legacy WP compatibility. + if ($is_legacy_wp) { + // 1-auto-login.php uses LEGACY_AUTO_LOGIN_BODY which + // handles WP 1.0-2.5 auth APIs with named functions + // only (no closures, no site_url()). + if (strpos($mu_plugin, '1-auto-login.php') === false) { + continue; + } + } + require_once $mu_plugin; + } + // On WP < 2.8, this function runs during init (priority + // -1000). PHP 5.x's foreach iterates over a copy of the + // array, so add_action() calls inside the loaded mu-plugin + // (e.g. add_action('init', 'playground_auto_login', 1)) + // won't fire — the init hook list was already snapshotted. + // Call the functions directly as a workaround. + // + // PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT tells the auto-login + // function to set cookies in-process without redirecting. + // In Playground's service worker, a redirect+Set-Cookie + // can cause a race because the cookie isn't applied before + // the redirected request fires. Define it unconditionally + // for all legacy PHP so the init-hook auto-login uses the + // in-process path. + if (!defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT')) { + define('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT', true); + } + + // WP < 2.8: add_action() calls inside mu-plugins won't + // fire because PHP 5.x's foreach iterates a copy. Call + // auto-login directly here as a workaround. + if ($is_legacy_wp) { + if (function_exists('playground_auto_login_redirect_target')) { + playground_auto_login_redirect_target(); + } + if (function_exists('playground_auto_login')) { + playground_auto_login(); + } + } +} +` + : `ID, $user->user_login ); - wp_set_auth_cookie( $user->ID ); - do_action( 'wp_login', $user->user_login, $user ); - - setcookie('playground_auto_login_already_happened', '1'); - - /** - * Confirm that nothing in WordPress, plugins, or filters have finalized - * the headers sending phase. See the comment above for more context. - */ - if (headers_sent()) { - _doing_it_wrong('playground_auto_login', 'Headers already sent, the Playground runtime will not auto-login the user', '1.0.0'); + if (${phpMajor < 7 ? "(function_exists('wp_doing_ajax') && wp_doing_ajax())" : 'wp_doing_ajax()'} || defined('REST_REQUEST')) { return; } - - /** - * Reload page to ensure the user is logged in correctly. - * WordPress uses cookies to determine if the user is logged in, - * so we need to reload the page to ensure the cookies are set. - */ - $redirect_url = $_SERVER['REQUEST_URI']; - - /** - * Intentionally do not use wp_redirect() here. It removes - * %0A and %0D sequences from the URL, which we don't want. - * There are valid use-cases for encoded newlines in the query string, - * for example html-api-debugger accepts markup with newlines - * encoded as %0A via the query string. - */ - header( "Location: $redirect_url", true, 302 ); - exit; + ${phpMajor < 7 ? LEGACY_AUTO_LOGIN_BODY : MODERN_AUTO_LOGIN_BODY} } /** * Autologin users from the wp-login.php page. @@ -249,12 +640,25 @@ export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { * Disable the Site Admin Email Verification Screen for any session started * via autologin. */ - add_filter('admin_email_check_interval', function($interval) { + ${ + phpMajor < 7 + ? `if (function_exists('add_filter')) { + add_filter('admin_email_check_interval', 'playground_disable_admin_email_check'); + } + function playground_disable_admin_email_check($interval) { if(false === playground_get_username_for_auto_login()) { return 0; } return $interval; - }); + }` + : `function playground_disable_admin_email_check($interval) { + if(false === playground_get_username_for_auto_login()) { + return 0; + } + return $interval; + } + add_filter('admin_email_check_interval', 'playground_disable_admin_email_check');` + } ` ); @@ -263,7 +667,7 @@ export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { ` 'sqlite', @@ -284,17 +688,19 @@ export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { if (!file_exists($wp_env_file) || file_get_contents($wp_env_file) !== $wp_env_php ) { file_put_contents($wp_env_file, $wp_env_php); } - }); + } + add_action('wp_loaded', 'playground_save_wp_env_info'); // Needed because gethostbyname( 'wordpress.org' ) returns // a private network IP address for some reason. - add_filter( 'allowed_redirect_hosts', function( $deprecated = '' ) { + function playground_allowed_redirect_hosts( $deprecated = '' ) { return array( 'wordpress.org', 'api.wordpress.org', 'downloads.wordpress.org', ); - } ); + } + add_filter( 'allowed_redirect_hosts', 'playground_allowed_redirect_hosts' ); /** * Prevents wp_http_validate_url() from universally failing. @@ -319,6 +725,48 @@ export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { // Support pretty permalinks add_filter( 'got_url_rewrite', '__return_true' ); + /** + * Flush rewrite rules on the first real WordPress request. + * + * During boot, we set permalink_structure in the database + * but can't flush rewrite rules at that point because WordPress + * isn't fully bootstrapped — post types and taxonomies haven't + * been registered yet, so the generated rules are incomplete. + * + * This hook fires on 'init' at a very late priority, after all + * post types and taxonomies are registered. It checks if the + * rewrite_rules option is empty (meaning rules were never + * flushed) and if permalink_structure is set, then flushes once. + * A flag file prevents repeated flushes on subsequent requests. + */ + function playground_maybe_flush_rewrite_rules() { + $flag = '/internal/shared/.rewrite-rules-flushed'; + if (file_exists($flag)) { + return; + } + if (!function_exists('get_option')) { + return; + } + $structure = get_option('permalink_structure'); + if (empty($structure)) { + return; + } + $rules = get_option('rewrite_rules'); + if (!empty($rules)) { + @file_put_contents($flag, '1'); + return; + } + global $wp_rewrite; + if (!isset($wp_rewrite) && class_exists('WP_Rewrite')) { + $wp_rewrite = new WP_Rewrite(); + } + if (isset($wp_rewrite) && method_exists($wp_rewrite, 'flush_rules')) { + $wp_rewrite->flush_rules(); + } + @file_put_contents($flag, '1'); + } + add_action('init', 'playground_maybe_flush_rewrite_rules', 99999); + // Create the fonts directory if missing if(!file_exists(WP_CONTENT_DIR . '/fonts')) { mkdir(WP_CONTENT_DIR . '/fonts'); @@ -380,13 +828,28 @@ export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { await php.writeFile( '/internal/shared/preload/error-handler.php', `prop = value), which + * was valid in PHP 4 but triggers E_WARNING in PHP 5.x. + * These are benign and cannot be fixed in WP core since + * Playground downloads unmodified WordPress releases. + */ + if (strpos($message, "Creating default object from empty value") !== false) { + return; + } + /** + * SimplePie/RSS errors when feeds can't be fetched in WASM. + * WP 2.8's dashboard widget calls get_error_string() on a + * null SimplePie object when HTTP requests fail. + */ + if (strpos($message, "get_error_string() on null") !== false || + strpos($message, "get_error_string() on a non-object") !== false) { + return; + } /** * Don't complain about network errors when not connected to the network. */ @@ -426,8 +908,8 @@ export async function setupPlatformLevelMuPlugins(php: UniversalPHP) { return; } return false; - }); - })();` + ${isPhp52 ? '}' : '});'} + ${isPhp52 ? "set_error_handler('_playground_error_handler');" : phpMajor < 7 ? '});' : '})();'}` ); } @@ -452,9 +934,14 @@ export async function preloadPhpInfoRoute( ); } +export interface SqliteIntegrationOptions { + phpVersion?: string; +} + export async function preloadSqliteIntegration( php: UniversalPHP, - sqliteZip: File + sqliteZip: File, + options: SqliteIntegrationOptions = {} ) { if (await php.isDir('/tmp/sqlite-database-integration')) { await php.rmdir('/tmp/sqlite-database-integration', { @@ -472,12 +959,14 @@ export async function preloadSqliteIntegration( }`; await php.mv(temporarySqlitePluginFolder, SQLITE_PLUGIN_FOLDER); + const phpMajor = parseInt(options.phpVersion ?? '8', 10); + // Prevents the SQLite integration from trying to call activate_plugin() await php.defineConstant('SQLITE_MAIN_FILE', '1'); const dbCopy = await php.readFileAsText( joinPaths(SQLITE_PLUGIN_FOLDER, 'db.copy') ); - const dbPhp = dbCopy + let dbPhp = dbCopy .replace( "'{SQLITE_IMPLEMENTATION_FOLDER_PATH}'", phpVar(SQLITE_PLUGIN_FOLDER) @@ -486,21 +975,199 @@ export async function preloadSqliteIntegration( "'{SQLITE_PLUGIN}'", phpVar(joinPaths(SQLITE_PLUGIN_FOLDER, 'load.php')) ); + if (phpMajor < 7) { + // Guard every top-level add_action() call for WordPress < 3.1 + // compatibility: when loaded via the lazy $wpdb loader, + // WordPress hooks may not be available yet. Wrap the call so + // it short-circuits to a no-op when add_action is undefined. + // Anchors on start-of-line regardless of how the call is + // formatted (single-line, multi-line, with or without space). + dbPhp = dbPhp.replace( + /^add_action\(/gm, + 'function_exists("add_action") && add_action(' + ); + } const dbPhpPath = joinPaths(await php.documentRoot, 'wp-content/db.php'); - const stopIfDbPhpExists = ``; - const SQLITE_MUPLUGIN_PATH = - '/internal/shared/mu-plugins/sqlite-database-integration.php'; - await php.writeFile(SQLITE_MUPLUGIN_PATH, stopIfDbPhpExists + dbPhp); + `; + + await php.writeFile(SQLITE_MUPLUGIN_PATH, `` + dbPhp); await php.writeFile( `/internal/shared/preload/0-sqlite.php`, - stopIfDbPhpExists + - ` + + +reinitialize_sqlite(); + }` +)} +// These stubs return truthy values because old WordPress (< 3.0) +// calls mysql_connect() directly in wpdb::__construct() and calls +// bail() on a falsy return. +if(!function_exists('mysqli_connect')) { + function mysqli_connect() { return true; } +} +if(!function_exists('mysqli_init')) { + function mysqli_init() { return true; } +} +if(!function_exists('mysql_connect')) { + function mysql_connect() { return true; } +} +if(!function_exists('mysql_select_db')) { + function mysql_select_db() { return true; } +} +${MYSQL_SHIMS_PHP} +if (!function_exists('str_contains')) { + function str_contains($haystack, $needle) { + return $needle === '' || strpos($haystack, $needle) !== false; + } +} +if (!function_exists('str_starts_with')) { + function str_starts_with($haystack, $needle) { + return strncmp($haystack, $needle, strlen($needle)) === 0; + } +} +if (!function_exists('str_ends_with')) { + function str_ends_with($haystack, $needle) { + return $needle === '' || substr($haystack, -strlen($needle)) === $needle; + } +} +if (PHP_MAJOR_VERSION < 7) { + // E_DEPRECATED (8192) and E_STRICT (2048) are constants + // added in PHP 5.3 - use numeric values for PHP 5.2 compat. + $level = ${LEGACY_WP_ERROR_REPORTING_PHP_EXPR}; + error_reporting($level); + ini_set('error_reporting', $level); +} +if (!isset($_SERVER['SERVER_PROTOCOL'])) { + $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1'; +} +if (!ini_get('date.timezone')) { + date_default_timezone_set('UTC'); +} + + `; +} +/** + * The shared Playground_SQLite_Integration_Loader class definition, + * parameterized by the load_sqlite_integration() body. + */ +function SQLITE_PRELOAD_LOADER_CLASS(loadBody: string): string { + return ` /** * Loads the SQLite integration plugin before WordPress is loaded * and without creating a drop-in "db.php" file. @@ -549,7 +1216,7 @@ class Playground_SQLite_Integration_Loader { $GLOBALS['wpdb']->$name = $value; } protected function load_sqlite_integration() { - require_once ${phpVar(SQLITE_MUPLUGIN_PATH)}; + ${loadBody} } } /** @@ -570,27 +1237,7 @@ $wpdb = $GLOBALS['wpdb'] = new Playground_SQLite_Integration_Loader(); * * What WordPress demands, Playground shall provide. */ -if(!function_exists('mysqli_connect')) { - function mysqli_connect() {} -} - - ` - ); - /** - * Ensure the SQLite integration is loaded and clearly communicate - * if it isn't. This is useful because WordPress database errors - * may be cryptic and won't mention the SQLite integration. - */ - await php.writeFile( - `/internal/shared/mu-plugins/sqlite-test.php`, - ` m + ` /* pg_admin_no_updates */ return;` + ); + } + } + await php.writeFile(adminUpdatePath, adminUpdate); + } + } + + // Patch SimplePie to not make network calls. + // SimplePie's file.php uses fsockopen/cURL to fetch RSS feeds. + const simplePieFilePath = joinPaths( + documentRoot, + 'wp-includes/SimplePie/File.php' + ); + const simplePieOldPath = joinPaths( + documentRoot, + 'wp-includes/class-simplepie.php' + ); + for (const spPath of [simplePieFilePath, simplePieOldPath]) { + if (!php.fileExists(spPath)) continue; + let sp = php.readFileAsText(spPath); + if ( + sp.includes('function SimplePie_File(') && + !sp.includes('/* pg_no_fetch */') + ) { + sp = sp.replace( + /function SimplePie_File\([^)]*\)\s*\{/, + (m) => + m + + `\n\t\t/* pg_no_fetch */\n\t\t$this->error = 'Network requests disabled in Playground';\n\t\t$this->success = false;\n\t\treturn;` + ); + await php.writeFile(spPath, sp); + } + } +} + +/** + * Prevents the WP installer from calling wp_mail() which crashes the + * PHP 5.2 WASM runtime. + * + * ## The bug + * + * `wp_install()` calls `wp_new_blog_notification()` at the end of the + * installation, which calls `wp_mail()`. PHP's `mail()` function + * invokes sendmail/SMTP operations that trigger `unreachable` WASM + * traps in the PHP 5.2 binary. The crash happens after all tables + * and data are already created, so the installation succeeds but the + * crash propagates as `RuntimeError: unreachable`. + * + * `disable_functions = 'mail'` prevents user-space calls to `mail()`, + * but WordPress's pluggable `wp_mail()` catches the disabled function + * and may still invoke PHPMailer's SMTP transport, which also crashes. + * + * ## The fix + * + * Replace `wp_new_blog_notification()` with a no-op in the upgrade + * functions file. This is safe because the notification email can't + * be delivered anyway in the WASM sandbox. + */ +async function patchWpInstallMailCrash(php: PHP, documentRoot: string) { + // Disable functions that crash the PHP 5.2 WASM runtime during + // WordPress installation: + // + // 1. wp_mail() — mail delivery is impossible in WASM and the + // underlying mail()/SMTP operations trigger `unreachable` + // WASM traps. + // + // 2. wp_install_maybe_enable_pretty_permalinks() (WP 3.0+) — + // makes an HTTP request via wp_remote_get() during install. + // Even with transports disabled, the HTTP infrastructure + // code path triggers WASM crashes. + + // Patch wp_mail() — in pluggable.php (WP 2.2+) or functions.php (WP 2.0-2.1) + const mailFiles = [ + joinPaths(documentRoot, 'wp-includes/pluggable.php'), + // WP 1.5-2.5 used pluggable-functions.php (renamed to + // pluggable.php in WP 2.6). + joinPaths(documentRoot, 'wp-includes/pluggable-functions.php'), + joinPaths(documentRoot, 'wp-includes/functions.php'), + ]; + for (const filePath of mailFiles) { + if (!php.fileExists(filePath)) { + continue; + } + const content = php.readFileAsText(filePath); + if (content.includes('/* pg_no_mail */')) continue; + const idx = content.indexOf('function wp_mail('); + if (idx === -1) continue; + const braceIdx = content.indexOf('{', idx); + if (braceIdx === -1) continue; + await php.writeFile( + filePath, + content.substring(0, braceIdx + 1) + + ' /* pg_no_mail */ return true;' + + content.substring(braceIdx + 1) + ); + } + + // Patch functions in the upgrade/install files that crash the + // PHP 5.2 WASM runtime during WordPress installation. + const upgradeFiles = [ + joinPaths(documentRoot, 'wp-admin/includes/upgrade.php'), + joinPaths(documentRoot, 'wp-admin/upgrade-functions.php'), + ]; + // Functions to make no-ops (return immediately) and the marker + // comment used for idempotent patching. + const noOpFunctions: Array<[string, string]> = [ + // Calls wp_mail() which invokes sendmail/SMTP → WASM crash. + ['function wp_new_blog_notification', 'pg_no_blog_notification'], + // Makes HTTP request via wp_remote_get() → WASM crash. + [ + 'function wp_install_maybe_enable_pretty_permalinks', + 'pg_no_permalink_check', + ], + // Calls mysql_get_server_info() with a fake handle → crash. + ['function wp_check_mysql_version', 'pg_no_mysql_check'], + ]; + for (const filePath of upgradeFiles) { + if (!php.fileExists(filePath)) continue; + let content = php.readFileAsText(filePath); + let changed = false; + for (const [funcSig, marker] of noOpFunctions) { + if (content.includes(`/* ${marker} */`)) continue; + const idx = content.indexOf(funcSig); + if (idx === -1) continue; + const braceIdx = content.indexOf('{', idx); + if (braceIdx === -1) continue; + content = + content.substring(0, braceIdx + 1) + + ` /* ${marker} */ return;` + + content.substring(braceIdx + 1); + changed = true; + } + if (changed) { + await php.writeFile(filePath, content); + } + } +} + +/** + * Patches wp-load.php (WP 2.6+) to suppress E_STRICT and E_DEPRECATED. + * wp-load.php sets error_reporting before wp-settings.php loads, so both + * files need the same patch. + */ +async function patchErrorReportingInWpLoad(php: PHP, documentRoot: string) { + const wpLoadPath = joinPaths(documentRoot, 'wp-load.php'); + if (!php.fileExists(wpLoadPath)) return; + let content = php.readFileAsText(wpLoadPath); + if (!content.includes('error_reporting(')) return; + if (content.includes('~8192') && content.includes('~2048')) return; + content = content.replace( + /error_reporting\(([^)]+)\)/g, + (_match: string, flags: string) => { + if (flags.includes('~8192') && flags.includes('~2048')) { + return _match; + } + return `error_reporting((${flags}) & ~8192 & ~2048)`; + } + ); + await php.writeFile(wpLoadPath, content); +} + +/** + * Patches WP 1.0 and WP 1.2 admin templates to neutralise absolute + * `http://wordpress.org` links that crash Playground. + * + * ## The bug + * + * Three locations contain absolute `http://wordpress.org` links: + * + * 1. WP 1.0's `wp-admin/menu.php` (header logo): + * ```html + *

WordPress

+ * ``` + * 2. WP 1.2's `wp-admin/admin-header.php` (header logo): + * ```html + *

WordPress

+ * ``` + * 3. Both versions' `wp-admin/admin-footer.php` (footer version badge): + * ```html + * WordPress 1.0.2 ... + * ``` + * + * Clicking any of these causes the browser to navigate the scoped iframe + * to `https://wordpress.org/`. WordPress.org sets `X-Frame-Options: + * sameorigin`, so the browser refuses to embed it. Worse, the navigation + * destroys the scoped iframe — leaving the Playground shell with no inner + * frame, effectively crashing the entire Playground session. + * + * ## The fix + * + * Replace each offending `href="http://wordpress.org[/]"` with `href="#"` + * in the three affected files. This keeps the visual elements intact while + * preventing any navigation that would escape the Playground scope. + * + * Scoped to the exact literals that identify WP 1.0/1.2 templates; later + * WP versions (1.5+) use a different template structure and are unaffected. + */ +async function patchWp10AdminLogoLink(php: PHP, documentRoot: string) { + // WP 1.0: logo is the first line of menu.php + const menuPhpPath = joinPaths(documentRoot, 'wp-admin/menu.php'); + if (php.fileExists(menuPhpPath)) { + const content = php.readFileAsText(menuPhpPath); + // Marker prevents double-patching (idempotent). + if (!content.includes('/* pg_wp10_logo_link */')) { + const needle = + '

WordPress

'; + if (content.includes(needle)) { + const patched = content.replace( + needle, + '

WordPress

' + ); + if (patched !== content) { + await php.writeFile(menuPhpPath, patched); + } + } + } + } + + // WP 1.2: logo is in admin-header.php body section. + // The exact source line is: + //

+ // + // Note: the opening tag contains `?>` inside the title attribute, + // so [^>]* would stop early at the `>` in `?>`. We locate the + // anchor by finding its start/end string positions directly and + // splice the replacement in without regex. + const adminHeaderPath = joinPaths( + documentRoot, + 'wp-admin/admin-header.php' + ); + if (php.fileExists(adminHeaderPath)) { + const content = php.readFileAsText(adminHeaderPath); + // Marker prevents double-patching (idempotent). + if (!content.includes('/* pg_wp12_logo_link */')) { + const logoStart = 'WordPress' + + content.substring(endIdx + logoEnd.length); + if (patched !== content) { + await php.writeFile(adminHeaderPath, patched); + } + } + } + } + } + + // WP 1.0 and WP 1.2: admin-footer.php contains version badge links. + // WP 1.0 exact source: + // WordPress + // WP 1.2 exact source: + // WordPress + // Both are neutralised the same way. + const adminFooterPath = joinPaths( + documentRoot, + 'wp-admin/admin-footer.php' + ); + if (php.fileExists(adminFooterPath)) { + const content = php.readFileAsText(adminFooterPath); + if (!content.includes('/* pg_wp10_footer_link */')) { + // Match both WP 1.0 (no trailing slash) and WP 1.2 (with slash). + const patched = content + .replace( + 'WordPress', + 'WordPress' + ) + .replace( + 'WordPress', + 'WordPress' + ); + if (patched !== content) { + await php.writeFile(adminFooterPath, patched); + } + } + } +} + +/** + * Patches WP 1.0, 1.2, and 1.5's `wp-admin/edit.php` so that post titles + * in the "Edit Posts" list link to the edit form instead of the + * front-end permalink (or to nothing, in WP 1.5's case). + * + * ## The bug + * + * WP 1.0's `edit.php` renders each post's title as: + * + * ```php + * + * ``` + * + * WP 1.2's `edit.php` renders it as: + * + * ```php + * + * ``` + * + * Both `permalink_link()` and `the_permalink()` output the front-end + * URL (e.g. `http://127.0.0.1:5400/scope:xxx/2006/01/01/hello-world/`), + * so clicking a title navigates away from the admin to the public-facing + * post. Users reasonably expect clicking a post title in an admin post + * list to open the edit form, not the front end. + * + * WP 1.5's `case 'title':` in `edit.php` renders the title as plain + * text with no link at all: + * + * ```php + * + * post_status) _e(' - Private'); ?> + * ``` + * + * A separate "Edit" text link (`post.php?action=edit&post=$id`) exists + * but is easy to miss. The title should be the primary affordance for + * editing. + * + * ## The fix + * + * WP 1.0: Replace the `permalink_link()` call in the title `` + * anchor with `post.php?action=edit&post=`. + * + * WP 1.2: Replace the `the_permalink()` call in the table cell anchor + * with the same edit URL. WP 1.2's loop variable for the post ID is + * also `$id` (set by `start_wp()`). + * + * WP 1.5: Wrap the plain `the_title()` output in a link to + * `post.php?action=edit&post=$id`. The `$id` variable is also set by + * `start_wp()` in WP 1.5's loop. + * + * All variants remove `rel="permalink"` since the link no longer + * points to the canonical URL. + * + * Scoped to `edit.php` files that contain the exact markup; later WP + * versions (2.0+) use `wp_insert_post()` and a different template + * structure and are unaffected. + */ +async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { + const editPhpPath = joinPaths(documentRoot, 'wp-admin/edit.php'); + if (!php.fileExists(editPhpPath)) return; + + const content = php.readFileAsText(editPhpPath); + // Marker prevents double-patching (idempotent). + if (content.includes('/* pg_wp10_post_title_edit */')) return; + + let patched = content; + + // WP 1.0: title wrapped in , href uses permalink_link(). + // Exact source string: + // + const needleWp10 = + ''; + if (patched.includes(needleWp10)) { + patched = patched.replace( + needleWp10, + '' + ); + } + + // WP 1.2: title in a , href uses the_permalink(). + // Exact source string (with leading whitespace): + // + // The closing is on a separate line so we only patch the + // opening tag, which is sufficient to fix the href. + const needleWp12 = + ''; + if (patched.includes(needleWp12)) { + patched = patched.replace( + needleWp12, + '' + ); + } + + // WP 1.5: title column has no link at all — just plain text. + // Exact source (case 'title': block): + // + // post_status) _e(' - Private'); ?> + // Wrap in an edit link using $id (set by start_wp()). + const needleWp15 = + '\n' + + "\t\tpost_status) _e(' - Private'); ?>"; + if (patched.includes(needleWp15)) { + patched = patched.replace( + needleWp15, + '' + + "\n\t\tpost_status) _e(' - Private'); ?>" + ); + } + + if (patched !== content) { + await php.writeFile(editPhpPath, patched); + } +} + +/** + * Patches WP 1.0's `wp-admin/post.php` so that newly created posts + * receive a proper auto-incremented ID instead of ID=0. + * + * ## The bug + * + * WP 1.0's INSERT statement for new posts explicitly passes `'0'` as the + * `ID` column value: + * + * ```sql + * INSERT INTO wp_posts (ID, post_author, ...) VALUES ('0', ...) + * ``` + * + * In MySQL, inserting `0` into an `AUTO_INCREMENT` column is equivalent + * to inserting `NULL` — MySQL ignores the zero and generates the next + * sequence value. SQLite does not implement this behaviour: it stores the + * literal value `0`, so every new post ends up with `ID = 0`. A second + * insert then collides with the first, and even when it succeeds the + * post-title links in `edit.php` render as `post=0`. + * + * ## The fix + * + * Replace `'0'` with `NULL` in the `VALUES` list of both INSERT variants + * (with and without geo-position columns). SQLite treats `NULL` inserted + * into an `INTEGER PRIMARY KEY` column as an auto-generate request, + * which is the intended behaviour. + * + * Scoped to the exact literals present in WP 1.0's `post.php`; the + * geo-positions branch and the plain branch are patched separately. + */ +async function patchWp10PostPhpInsertNullId(php: PHP, documentRoot: string) { + const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); + if (!php.fileExists(postPhpPath)) return; + const content = php.readFileAsText(postPhpPath); + // Idempotency marker. + if (content.includes('/* pg_wp10_insert_null_id */')) return; + + // Both INSERT variants in WP 1.0's post.php share the same VALUES prefix. + // The geo-positions branch includes lat/lon columns; the plain branch does + // not. Both use the same VALUES prefix `('0', '$user_ID', ...`, which is + // the only place this literal appears. + const needle = "('0', '$user_ID', '$now', '$content', '$post_title'"; + if (!content.includes(needle)) return; + + const patched = content.replaceAll( + needle, + "(NULL /* pg_wp10_insert_null_id */, '$user_ID', '$now', '$content', '$post_title'" + ); + if (patched !== content) { + await php.writeFile(postPhpPath, patched); + } +} + +/** + * Patches WP 1.2's `wp-admin/post.php` so that newly created posts + * receive a proper auto-incremented ID instead of ID=0. + * + * ## The bug + * + * Identical to the WP 1.0 issue: WP 1.2 explicitly inserts `'0'` as the + * post `ID`, which MySQL silently turns into the next AUTO_INCREMENT value + * but SQLite stores literally as `0`. + * + * ## The fix + * + * Replace `'0'` with `NULL` in both INSERT variants (plain and + * geo-positions). The VALUES prefix in WP 1.2 differs from WP 1.0 because + * it also includes `post_date_gmt`: + * + * ```sql + * VALUES ('0', '$user_ID', '$now', '$now_gmt', '$content', ...) + * ``` + * + * Scoped to the exact string present only in WP 1.2's `post.php`. + */ +async function patchWp12PostPhpInsertNullId(php: PHP, documentRoot: string) { + const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); + if (!php.fileExists(postPhpPath)) return; + const content = php.readFileAsText(postPhpPath); + // Idempotency marker. + if (content.includes('/* pg_wp12_insert_null_id */')) return; + + // WP 1.2's VALUES prefix includes '$now_gmt' (missing in WP 1.0), making + // this needle unique to WP 1.2. + const needle = + "('0', '$user_ID', '$now', '$now_gmt', '$content', '$post_title'"; + if (!content.includes(needle)) return; + + const patched = content.replaceAll( + needle, + "(NULL /* pg_wp12_insert_null_id */, '$user_ID', '$now', '$now_gmt', '$content', '$post_title'" + ); + if (patched !== content) { + await php.writeFile(postPhpPath, patched); + } +} + +/** + * Patches WP 1.5's `wp-admin/post.php` to fix two SQL compatibility + * issues that prevent saving posts under the SQLite integration. + * + * ## Bug 1: NULL post ID from SHOW TABLE STATUS + * + * WP 1.5's `wp-admin/post.php` determines the next post ID by querying: + * + * ```php + * $id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE '$wpdb->posts'"); + * $post_ID = $id_result->Auto_increment; + * ``` + * + * In MySQL, `SHOW TABLE STATUS` returns the next `AUTO_INCREMENT` value. + * The SQLite integration implements this query but always returns + * `Auto_increment = NULL` because SQLite has no AUTO_INCREMENT concept. + * + * With `$post_ID = NULL`, the INSERT becomes: + * ```sql + * INSERT INTO wp_posts (ID, ...) VALUES ('', ...) + * ``` + * Inserting an empty string into an INTEGER PRIMARY KEY causes a + * "datatype mismatch" SQLite error. + * + * **Fix:** After the lookup, add a fallback that computes the next ID + * as `MAX(ID) + 1` when `Auto_increment` is NULL or zero. + * + * ## Bug 2: Missing NOT NULL columns in the INSERT + * + * The WP 1.5 `$postquery` INSERT omits `pinged` and + * `post_content_filtered`. The `wp_posts` table created by the SQLite + * integration has those columns as `NOT NULL` with a `NULL` default + * (matching the MySQL schema where MySQL's lenient mode would accept + * an empty value). Under the SQLite integration's strict mode this + * raises a NOT NULL constraint violation. + * + * **Fix:** Append `pinged, post_content_filtered` to the column list + * and the corresponding `'', ''` to the values list in `$postquery`. + * + * Both fixes are scoped to the exact strings present in WP 1.5's + * `wp-admin/post.php`; later versions removed this code path. + */ +async function patchWp15AdminPostAutoIncrement(php: PHP, documentRoot: string) { + const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); + if (!php.fileExists(postPhpPath)) return; + let content = php.readFileAsText(postPhpPath); + // Idempotency marker. + if (content.includes('/* pg_wp15_post_id_fallback */')) return; + + // Fix 1: NULL Auto_increment from SHOW TABLE STATUS. + // The exact two-line sequence that uniquely identifies the bug site. + const needleAutoInc = + '$id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE \'$wpdb->posts\'");\n' + + '\t$post_ID = $id_result->Auto_increment;'; + if (!content.includes(needleAutoInc)) return; + content = content.replace( + needleAutoInc, + '$id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE \'$wpdb->posts\'");\n' + + '\t$post_ID = $id_result->Auto_increment;\n' + + '\t// Playground fallback: SHOW TABLE STATUS returns Auto_increment = NULL\n' + + '\t// on SQLite. Compute the next ID from MAX(ID) instead. /* pg_wp15_post_id_fallback */\n' + + '\tif ( ! $post_ID ) {\n' + + '\t\t$post_ID = (int) $wpdb->get_var("SELECT COALESCE(MAX(ID), 0) + 1 FROM $wpdb->posts");\n' + + '\t}' + ); + + // Fix 2: Add missing NOT NULL columns to the $postquery INSERT. + // WP 1.5's INSERT omits 'pinged' and 'post_content_filtered'. + // The table schema (set up by the SQLite integration from the WP 2.x + // schema) has both columns as NOT NULL with a NULL default, so + // omitting them causes a NOT NULL constraint violation. + const needleInsertCols = + '(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, post_modified, post_modified_gmt, post_parent, menu_order)'; + const needleInsertVals = + "('$post_ID', '$post_author', '$now', '$now_gmt', '$content', '$post_title', '$excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$trackback', '$now', '$now_gmt', '$post_parent', '$menu_order')"; + if ( + content.includes(needleInsertCols) && + content.includes(needleInsertVals) + ) { + content = content + .replace( + needleInsertCols, + '(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_content_filtered, post_modified, post_modified_gmt, post_parent, menu_order)' + ) + .replace( + needleInsertVals, + "('$post_ID', '$post_author', '$now', '$now_gmt', '$content', '$post_title', '$excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$trackback', '', '', '$now', '$now_gmt', '$post_parent', '$menu_order')" + ); + } + + await php.writeFile(postPhpPath, content); +} + +/** + * Patches WP 2.1–2.6's `wp-includes/post.php` to always initialise + * empty post dates to the current time, even for draft posts. + * + * ## The bug + * + * WP 2.1–2.2's `wp_insert_post()` contains: + * + * ```php + * // If the post date is empty (due to having been new or a draft) + * // and status is not 'draft', set date to now + * if (empty($post_date)) { + * if ( 'draft' != $post_status ) + * $post_date = current_time('mysql'); + * } + * if (empty($post_date_gmt)) { + * if ( 'draft' != $post_status ) + * $post_date_gmt = get_gmt_from_date($post_date); + * } + * ``` + * + * WP 2.3 uses the same comment but an `in_array` guard without an else + * branch: + * + * ```php + * if (empty($post_date)) { + * if ( !in_array($post_status, array('draft', 'pending')) ) + * $post_date = current_time('mysql'); + * } + * if (empty($post_date_gmt)) { + * if ( !in_array($post_status, array('draft', 'pending')) ) + * $post_date_gmt = get_gmt_from_date($post_date); + * } + * ``` + * + * WP 2.5–2.6 uses the same `in_array` check but adds an explicit `else` + * branch that stores `'0000-00-00 00:00:00'` for drafts: + * + * ```php + * if (empty($post_date)) { + * if ( !in_array($post_status, array('draft', 'pending')) ) + * $post_date = current_time('mysql'); + * else + * $post_date = '0000-00-00 00:00:00'; // ← problem + * } + * if (empty($post_date_gmt)) { + * if ( !in_array($post_status, array('draft', 'pending')) ) + * $post_date_gmt = get_gmt_from_date($post_date); + * else + * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem + * } + * ``` + * + * In all three cases, saving a post with `post_status = 'draft'` causes + * `$post_date` and/or `$post_date_gmt` to end up as an empty string or + * `'0000-00-00 00:00:00'`. The SQLite integration's datetime coercion + * rejects these, throwing: + * + * *Incorrect datetime value: '0000-00-00 00:00:00'* (or *''*) + * + * That causes `wp_insert_post()` to return `0`/`false`, producing a + * blank "Write Post" page with no saved post and no error message. + * + * ## The fix + * + * Remove the inner draft-status guard (and any explicit zero-date `else` + * branch) so that `$post_date` and `$post_date_gmt` are always set to + * the current time when empty, regardless of `$post_status`. + * + * This is semantically harmless: the guard was intended to leave the + * date unset for drafts (so MySQL would store a zero date), but the + * SQLite integration rejects zero/empty dates. Using the current time + * for draft posts matches the behaviour all subsequent WP versions + * adopted. + * + * Three needle variants cover WP 2.1–2.2, WP 2.3, and WP 2.5–2.6 respectively. + * WP 2.7+ adopted a different structure where `$post_date` is always + * initialised but `$post_date_gmt` can still be zero for drafts; + * `patchWp27InsertPostZeroDateGmt` handles that case. + */ +async function patchWp21InsertPostEmptyDates(php: PHP, documentRoot: string) { + // WP 2.0 keeps wp_insert_post() in wp-includes/functions-post.php, + // while WP 2.1+ moved it to wp-includes/post.php. Try both paths. + const candidates = [ + joinPaths(documentRoot, 'wp-includes/post.php'), + joinPaths(documentRoot, 'wp-includes/functions-post.php'), + ]; + const postPhpPath = candidates.find((p) => php.fileExists(p)); + if (!postPhpPath) return; + let content = php.readFileAsText(postPhpPath); + // Idempotency marker. + if (content.includes('/* pg_wp21_insert_post_date */')) return; + + const replacement = + '// Playground patch: always initialise empty dates, even for drafts.\n' + + '\t// The original guard left $post_date empty for drafts, which the\n' + + '\t// SQLite integration rejects as an invalid datetime value.\n' + + '\t// /* pg_wp21_insert_post_date */\n' + + '\tif (empty($post_date)) {\n' + + "\t\t$post_date = current_time('mysql');\n" + + '\t}\n' + + '\n' + + '\tif (empty($post_date_gmt)) {\n' + + '\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t}'; + + // WP 2.1–2.2 variant: `if ( 'draft' != $post_status )` guard, no else branch. + const needleWp21 = + "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + + '\tif (empty($post_date)) {\n' + + "\t\tif ( 'draft' != $post_status )\n" + + "\t\t\t$post_date = current_time('mysql');\n" + + '\t}\n' + + '\n' + + '\tif (empty($post_date_gmt)) {\n' + + "\t\tif ( 'draft' != $post_status )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t}'; + + // WP 2.3 variant: `!in_array` guard, no else branch. + const needleWp23 = + "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + + '\tif (empty($post_date)) {\n' + + "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + + "\t\t\t$post_date = current_time('mysql');\n" + + '\t}\n' + + '\n' + + '\tif (empty($post_date_gmt)) {\n' + + "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t}'; + + // WP 2.5–2.6 variant: same `!in_array` guard as WP 2.3 but WITH an + // explicit `else $x = '0000-00-00 00:00:00'` branch for both fields. + // The zero date in the else branch is the direct cause of the SQLite error. + const needleWp25 = + "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + + '\tif (empty($post_date)) {\n' + + "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + + "\t\t\t$post_date = current_time('mysql');\n" + + '\t\telse\n' + + "\t\t\t$post_date = '0000-00-00 00:00:00';\n" + + '\t}\n' + + '\n' + + '\tif (empty($post_date_gmt)) {\n' + + "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t\telse\n' + + "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + + '\t}'; + + if (content.includes(needleWp21)) { + content = content.replace(needleWp21, replacement); + } else if (content.includes(needleWp23)) { + content = content.replace(needleWp23, replacement); + } else if (content.includes(needleWp25)) { + content = content.replace(needleWp25, replacement); + } else { + return; + } + + await php.writeFile(postPhpPath, content); +} + +/** + * Patches `wp-includes/post.php` in WP 2.7–2.9 to avoid inserting a zero + * `post_date_gmt` that the SQLite integration rejects in strict mode. + * + * ## The bug + * + * WP 2.7 restructured the date initialisation in `wp_insert_post()`. + * `$post_date` is now always set to `current_time('mysql')` when empty: + * + * ```php + * if ( empty($post_date) || '0000-00-00 00:00:00' == $post_date ) + * $post_date = current_time('mysql'); + * ``` + * + * However, `$post_date_gmt` still stores a zero value for draft/pending posts: + * + * ```php + * if ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) { + * if ( !in_array( $post_status, array( 'draft', 'pending' ) ) ) + * $post_date_gmt = get_gmt_from_date($post_date); + * else + * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem + * } + * ``` + * + * The SQLite integration is configured with `NO_ZERO_DATE` + + * `STRICT_TRANS_TABLES` SQL modes active. Inserting `'0000-00-00 00:00:00'` + * into a `DATETIME` column raises: + * + * *Incorrect datetime value: '0000-00-00 00:00:00'* + * + * That error causes `wp_insert_post()` to return `false`. The form + * submission to `post.php` then receives post ID 0, `redirect_post(0)` + * sends the user back to `post-new.php` without a `?posted=` parameter, + * and the page renders as a blank empty "Write Post" form — the user sees + * no error and no confirmation that anything was saved. + * + * WP 2.7–2.9 use this two-space-indented, single-array variant. + * WP 3.0 added `'auto-draft'` to the array — that pattern is already + * covered by `patchWp41AutoDraftZeroDatetime`. + * + * ## The fix + * + * Replace the `'0000-00-00 00:00:00'` literal in the `else` branch with + * `get_gmt_from_date($post_date)`, which always produces a valid datetime. + * `$post_date` is guaranteed non-empty by this point, so this is safe. + */ +async function patchWp27InsertPostZeroDateGmt(php: PHP, documentRoot: string) { + const postPhpPath = joinPaths(documentRoot, 'wp-includes/post.php'); + if (!php.fileExists(postPhpPath)) return; + const content = php.readFileAsText(postPhpPath); + // Idempotency marker. + if (content.includes('/* pg_wp27_post_date_gmt */')) return; + + // WP 2.7–2.9: single-line post_date init (always set), then a braced + // post_date_gmt block with draft/pending-only array (no 'auto-draft'). + // Indentation from WP 2.7 source: one tab throughout. + const needle = + "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + + "\t\tif ( !in_array( $post_status, array( 'draft', 'pending' ) ) )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t\telse\n' + + "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + + '\t}'; + if (!content.includes(needle)) return; + + const patched = content.replace( + needle, + "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + + "\t\tif ( !in_array( $post_status, array( 'draft', 'pending' ) ) )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t\telse\n' + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date); /* pg_wp27_post_date_gmt */\n' + + '\t}' + ); + if (patched !== content) { + await php.writeFile(postPhpPath, patched); + } +} + +/** + * Patches `wp-includes/post.php` in WP 3.1–4.1 to avoid inserting zero + * datetime values that the SQLite integration rejects in strict mode. + * + * ## The bug + * + * `post-new.php` calls: + * + * ```php + * $post = get_default_post_to_edit( $post_type, true ); + * ``` + * + * The `$create_in_db = true` argument causes `get_default_post_to_edit()` + * to persist the draft immediately via `wp_insert_post()`. Inside + * `wp_insert_post()`, when the post status is `'auto-draft'` (or + * `'draft'`/`'pending'`), WordPress deliberately stores a zero GMT + * timestamp: + * + * WP 3.1–3.9 variant (tab-indented, braceless if/else): + * ```php + * if ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) { + * if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) + * $post_date_gmt = get_gmt_from_date($post_date); + * else + * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem + * } + * ``` + * + * WP 4.0–4.1 variant (space-indented, braced if/else): + * ```php + * if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) { + * $post_date_gmt = get_gmt_from_date( $post_date ); + * } else { + * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem + * } + * ``` + * + * The SQLite integration is configured with `NO_ZERO_DATE` + + * `STRICT_TRANS_TABLES` SQL modes active. Inserting `'0000-00-00 00:00:00'` + * into a `DATETIME` column raises: + * + * *Incorrect datetime value: '0000-00-00 00:00:00'* + * + * That error causes `wp_insert_post()` to return `0`. `get_default_post_to_edit()` + * then calls `get_post(0)`, which returns null. In `post-new.php`, `$post->ID` + * is 0, so the post form renders with `post_ID=0`. When that form is + * submitted, `post.php` processes it as an edit of post 0, and the + * capability check `current_user_can('edit_post', 0)` fails even for admins + * (post 0 doesn't exist), producing "You are not allowed to edit this post." + * In WP 3.3–3.4, the nonce check for `update-post_0` also fails because the + * nonce was generated for a real post ID. + * + * For WP 3.7–3.9, the same error also fires from the Quick Draft widget on + * the dashboard, which calls `get_default_post_to_edit('post', true)` to + * create an auto-draft for the quick-press form, producing a DB error and + * silently discarding the published post. + * + * ## The fix + * + * Replace the `'0000-00-00 00:00:00'` literal in the `else` branch with + * `get_gmt_from_date($post_date)`, which always produces a valid datetime. + * This is safe: `$post_date` is guaranteed non-empty by this point, so + * converting it to GMT never yields a zero date. + * + * Two needles handle the two code styles across WP versions: + * - WP 3.1–3.9: tab-indented braceless pattern + * - WP 4.0–4.1: space-indented braced pattern + * + * WP 4.2+ uses a completely rewritten `wp_insert_post()` that avoids the + * zero-date, so no patch is needed there. + */ +async function patchWp41AutoDraftZeroDatetime(php: PHP, documentRoot: string) { + const postPhpPath = joinPaths(documentRoot, 'wp-includes/post.php'); + if (!php.fileExists(postPhpPath)) return; + const content = php.readFileAsText(postPhpPath); + // Markers prevent double-patching (idempotent). + if ( + content.includes('/* pg_wp41_auto_draft_gmt */') || + content.includes('/* pg_wp31_auto_draft_gmt */') + ) { + return; + } + + // WP 3.1–3.9: tab-indented, braceless if/else inside an outer + // `if ( empty($post_date_gmt) || ... )` guard. + // Indentation (confirmed from WP 3.1 source): + // ↓ one tab if ( empty($post_date_gmt) || ... ) { + // ↓ two tabs if ( !in_array( ... ) ) + // ↓ three tabs $post_date_gmt = get_gmt_from_date($post_date); + // ↓ two tabs else + // ↓ three tabs $post_date_gmt = '0000-00-00 00:00:00'; + // ↓ one tab } + const needleWp31 = + "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + + "\t\tif ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t\telse\n' + + "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + + '\t}'; + if (content.includes(needleWp31)) { + const patched = content.replace( + needleWp31, + "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + + "\t\tif ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + + '\t\telse\n' + + '\t\t\t$post_date_gmt = get_gmt_from_date($post_date); /* pg_wp31_auto_draft_gmt */\n' + + '\t}' + ); + if (patched !== content) { + await php.writeFile(postPhpPath, patched); + } + return; + } + + // WP 4.0–4.1: space-indented, braced if/else. + // Indentation uses real tab characters (as confirmed from WP 4.1 source): + // ↓ two tabs if ( ! in_array(...) ) { + // ↓ three tabs $post_date_gmt = get_gmt_from_date( $post_date ); + // ↓ two tabs } else { + // ↓ three tabs $post_date_gmt = '0000-00-00 00:00:00'; + // ↓ two tabs } + const needleWp41 = + "if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date );\n' + + '\t\t} else {\n' + + "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + + '\t\t}'; + if (!content.includes(needleWp41)) return; + const patched = content.replace( + needleWp41, + "if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {\n" + + '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date );\n' + + '\t\t} else {\n' + + '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date ); /* pg_wp41_auto_draft_gmt */\n' + + '\t\t}' + ); + if (patched !== content) { + await php.writeFile(postPhpPath, patched); + } +} + +/** + * Patches WP 3.3's `wp-admin/includes/screen.php` to fix an invalid + * `self::$this` reference in `WP_Screen::render_screen_meta()`. + * + * ## The bug + * + * WP 3.3.3's screen.php line 706 reads: + * + * ```php + * _help_sidebar; ?> + * ``` + * + * This is a typo: `self::` resolves static members, and `$this` is + * never a static property. Modern PHP (5.3+) raises a fatal error: + * *"Access to undeclared static property: WP_Screen::$this"*. The + * line sits inside `render_screen_meta()` — an instance method — so + * the fix is to drop the `self::` qualifier. + * + * The fatal only fires when `$this->_help_sidebar` is non-empty. + * `/wp-admin/post-new.php` triggers it because `edit-form-advanced.php` + * calls `get_current_screen()->set_help_sidebar(...)` before the + * admin header renders. Other admin pages that don't populate the + * sidebar never enter the `if ($has_sidebar)` branch. + * + * WP 3.4 rewrote the method to use a local `$help_sidebar` variable + * and never regressed, so this patch is scoped to WP 3.3 only via a + * content check for the exact buggy expression. + */ +async function patchWp33ScreenPhpSelfThis(php: PHP, documentRoot: string) { + const screenPath = joinPaths(documentRoot, 'wp-admin/includes/screen.php'); + if (!php.fileExists(screenPath)) return; + const content = php.readFileAsText(screenPath); + if (!content.includes('self::$this->_help_sidebar')) return; + const patched = content.replace( + /self::\$this->_help_sidebar/g, + '$this->_help_sidebar' + ); + if (patched !== content) { + await php.writeFile(screenPath, patched); + } +} + +/** + * Patches WP 2.1's `wp-admin/plugins.php` to guard the `in_array()` + * call against a non-array `active_plugins` option value. + * + * ## The bug + * + * WP 2.1's plugins.php line 7 reads the active plugins list: + * + * ```php + * $current = get_option('active_plugins'); + * ``` + * + * And line 13 immediately passes it to `in_array()`: + * + * ```php + * if (!in_array($plugin, $current)) { + * ``` + * + * When the `active_plugins` option has never been written (fresh + * Playground install), `get_option()` returns an empty string `""` + * instead of an array. PHP then emits: + * + * *Warning: in_array() expects parameter 2 to be array, string given* + * + * WP 2.0 had an explicit sanity-check block immediately after the + * page header that reset a non-array result to `[]` and persisted it. + * That block was removed in WP 2.1 without a replacement guard at the + * point of use, leaving both the `activate` and `deactivate` branches + * vulnerable. + * + * WP 2.2 has the same code at line 13 and is patched here as well. + * WP 2.3+ introduced `maybe_unserialize()` in `get_option()` which + * ensures the stored value is always unserialized; the default for + * `active_plugins` was also set to `array()` from then on. + * + * ## The fix + * + * After the `$current = get_option(...)` assignment, insert: + * + * ```php + * if (!is_array($current)) $current = array(); + * ``` + * + * This mirrors the sanity check WP 2.0 already had and is idempotent + * (a real array value passes `is_array()` unchanged). + */ +async function patchWp21PluginsPhpInArray(php: PHP, documentRoot: string) { + const pluginsPath = joinPaths(documentRoot, 'wp-admin/plugins.php'); + if (!php.fileExists(pluginsPath)) return; + const content = php.readFileAsText(pluginsPath); + // Marker prevents double-patching (idempotent). + if (content.includes('/* pg_wp21_active_plugins_array */')) return; + // Only patch the WP 2.1/2.2 variant: get_option() + in_array() with + // no intervening array guard. WP 2.0 uses get_settings() and already + // has its own sanity check; WP 2.3+ initialises the option correctly. + const needle = "$current = get_option('active_plugins');"; + if (!content.includes(needle)) return; + const patched = content.replace( + needle, + needle + + '\n\tif (!is_array($current)) $current = array(); /* pg_wp21_active_plugins_array */' + ); + if (patched !== content) { + await php.writeFile(pluginsPath, patched); + } +} + +/** + * Patches WP 1.0's `wp-login.php` so manual logins work against the + * MD5-stored admin password that the Playground seeds. + * + * ## The bug + * + * WP 1.0's `wp-login.php` checks the submitted password by running: + * + * ```php + * $query = "SELECT ID, user_login, user_pass FROM $tableusers + * WHERE user_login = '$user_login' AND user_pass = '$password'"; + * ``` + * + * i.e. it expects `user_pass` to be stored *in plaintext* and + * compares it to the form-submitted password directly. Later on + * (line ~98) the same expectation is echoed in an in-PHP check + * `$login->user_pass == $password`. + * + * Playground seeds every legacy admin user with `MD5('password')` + * because WP 1.2+ and the wider cookie-auth flow (wp_login / + * $user_pass_md5 cookie validation) assume that format. Mixing the + * two means WP 1.0's manual /wp-login.php form is rejected for the + * admin user even though the seeded row is internally consistent + * for every other auth path (mu-plugin auto-login, admin.php cookie + * shimming, and WP 1.0's own cookie validator which explicitly + * re-hashes user_pass). + * + * ## The fix + * + * Teach WP 1.0's `login()` function to also accept an already-MD5'd + * password by wrapping both comparison sites in "or md5" fallbacks. + * The SQL path becomes: + * + * ```php + * WHERE user_login = '$user_login' + * AND (user_pass = '$password' OR user_pass = MD5('$password')) + * ``` + * + * and the PHP post-query check gains the matching `md5($password)` + * branch. Both forms are still rejected when the submitted password + * is wrong — the extra branch only accepts a correct plaintext + * submission whose stored form happens to be the md5 hash. + * + * Scoped to WP 1.0 only via a content check for the exact `user_pass + * = '$password'` SQL fragment that disappeared in WP 1.2 when + * `wp_login()` moved into `wp-includes/functions.php`. + */ +async function patchWp10LoginPlaintextCompare(php: PHP, documentRoot: string) { + const loginPath = joinPaths(documentRoot, 'wp-login.php'); + if (!php.fileExists(loginPath)) return; + const content = php.readFileAsText(loginPath); + // WP 1.0 signature: the inline login() function in wp-login.php + // that runs the direct plaintext query. WP 1.2+ delegates to + // wp_login() and never contains this exact substring. + const sqlMarker = "AND user_pass = '$password'"; + if (!content.includes(sqlMarker)) return; + if (content.includes('pg_wp10_plain_or_md5')) return; + let patched = content.replace( + sqlMarker, + // pg_wp10_plain_or_md5: accept either the original plaintext + // comparison or the md5-hashed form Playground seeds. + "AND (user_pass = '$password' OR user_pass = MD5('$password')) /* pg_wp10_plain_or_md5 */" + ); + patched = patched.replace( + '$login->user_pass == $password', + '($login->user_pass == $password || $login->user_pass == md5($password))' + ); + if (patched !== content) { + await php.writeFile(loginPath, patched); + } +} + +/** + * Patches WP 2.0–2.2's install.php / upgrade-functions.php / admin-db.php + * to stop inserting `cat_ID = '0'` into the categories table. + * + * ## The bug + * + * WP 2.0 creates the default "Uncategorized" term by calling: + * + * ```php + * $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, ...) + * VALUES ('0', 'Uncategorized', ...)"); + * ``` + * + * The `'0'` is intentional: MySQL treats an INSERT of `0` into an + * `AUTO_INCREMENT` column as "please use the next auto-increment + * value" unless the `NO_AUTO_VALUE_ON_ZERO` sql_mode flag is set. + * The new row therefore gets `cat_ID = 1`. + * + * SQLite has no such special-case: an `INTEGER PRIMARY KEY AUTOINCREMENT` + * column stores whatever value it's given, so the row ends up with + * `cat_ID = 0`. Because the same row also has `category_parent = 0`, + * `get_nested_categories()` in `wp-admin/admin-functions.php` recurses + * on itself forever when rendering the category picker on + * `/wp-admin/post.php`: + * + * ```php + * $cats = return_categories_list($parent); // SELECT cat_ID WHERE category_parent = 0 → ['0'] + * foreach ($cats as $cat) { + * $result[$cat]['children'] = get_nested_categories($default, $cat); // loops forever + * } + * ``` + * + * The infinite recursion never emits output, so PHP flushes the + * headers sent so far (Content-Type from admin-header.php) and then + * hangs — which the service worker surfaces as `ERR_FAILED` after + * the 25 s request timeout. + * + * ## The fix + * + * Rewrite the offending `VALUES ('0', …)` expressions to + * `VALUES (NULL, …)`. SQLite's primary key then auto-assigns a fresh + * row id (1 for the first row), and MySQL behaves identically because + * inserting `NULL` into an `AUTO_INCREMENT` column also triggers the + * "next value" behavior. + * + * Scoped to install.php / upgrade-functions.php / admin-db.php only — + * that's where the `cat_ID = '0'` pattern appears in WP 2.0–2.2. + * WP 2.3+ replaced these direct INSERTs with helpers that pass NULL. + */ +async function patchLegacyWpCategoriesZeroPk(php: PHP, documentRoot: string) { + const files = [ + // WP 2.0 inserts Uncategorized from install.php. + joinPaths(documentRoot, 'wp-admin/install.php'), + // WP 2.1/2.2 moved the insert to upgrade-functions.php. + joinPaths(documentRoot, 'wp-admin/upgrade-functions.php'), + // Used by wp_create_category() in WP 2.0–2.2 for every new + // category added post-install. + joinPaths(documentRoot, 'wp-admin/admin-db.php'), + ]; + // Match INSERT INTO .categories (cat_ID, ...) VALUES ('0', ...) + // and rewrite the leading '0' to NULL. Keep the match conservative + // so we don't accidentally touch other INSERTs. + const insertRe = + /(INSERT INTO\s+[^`"']*?categories\s*\([^)]*\bcat_ID\b[^)]*\)\s*VALUES\s*\()\s*'0'\s*,/g; + for (const path of files) { + if (!php.fileExists(path)) continue; + const content = php.readFileAsText(path); + if (!insertRe.test(content)) continue; + // Reset regex state (test() advances lastIndex on /g regexes). + insertRe.lastIndex = 0; + const patched = content.replace(insertRe, '$1NULL, '); + if (patched !== content) { + await php.writeFile(path, patched); + } + } +} + +// ── Private helpers ────────────────────────────────────────────── + +/** WP < 1.5 lacks wp-includes/version.php. Create a stub. */ +async function ensureVersionPhp(php: PHP, documentRoot: string) { + const wpIncludesDir = joinPaths(documentRoot, 'wp-includes'); + if (!php.isDir(wpIncludesDir)) return; + const versionPhpPath = joinPaths(wpIncludesDir, 'version.php'); + if (!php.fileExists(versionPhpPath)) { + await php.writeFile(versionPhpPath, ` { + // Already patched with & ~8192 & ~2048 + if (flags.includes('~8192') && flags.includes('~2048')) { + return _match; + } + return `error_reporting((${flags}) & ~8192 & ~2048)`; + } + ); + settingsChanged = true; + } + + // set_magic_quotes_runtime() removed in PHP 7.0. + if (settings.includes('set_magic_quotes_runtime')) { + settings = settings.replace( + /set_magic_quotes_runtime\(\s*0\s*\)\s*;/g, + '// set_magic_quotes_runtime(0); // Removed' + ); + settingsChanged = true; + } + + // get_magic_quotes_gpc() removed in PHP 8.0. + if ( + settings.includes('get_magic_quotes_gpc()') && + !settings.includes("function_exists('get_magic_quotes_gpc')") + ) { + settings = settings.replace( + /get_magic_quotes_gpc\(\)/g, + "(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())" + ); + settingsChanged = true; + } + + // "=& new" triggers compile-time E_DEPRECATED in PHP 5.3+. + if (settings.includes('=& new') || settings.includes('=&new')) { + settings = settings.replace(/=\s*&\s*new\b/g, '= new'); + settingsChanged = true; + } + + // $HTTP_SERVER_VARS removed in PHP 5.4. + if (settings.includes('$HTTP_SERVER_VARS')) { + settings = settings.replace(/\$HTTP_SERVER_VARS/g, '$_SERVER'); + settingsChanged = true; + } + + // WP_CONTENT_DIR missing in WP < 2.0. + if ( + !settings.includes('WP_CONTENT_DIR') && + settings.includes("define('WPINC'") + ) { + settings = settings.replace( + /define\('WPINC',\s*'wp-includes'\);/, + `define('WPINC', 'wp-includes');\nif (!defined('WP_CONTENT_DIR')) define('WP_CONTENT_DIR', ABSPATH . 'wp-content');` + ); + settingsChanged = true; + } + + // WP 2.5–3.x clears $wp_filter at the top of wp-settings.php + // to prevent interference from register_globals. This also + // destroys hooks set by the preload (auto_prepend_file) such + // as the playground_load_mu_plugins hook. Remove $wp_filter + // from the unset() call so the preload hooks survive. + if (settings.includes('$wp_filter')) { + const before = settings; + settings = settings.replace(/unset\(\s*\$wp_filter\s*,/, 'unset('); + if (settings !== before) { + settingsChanged = true; + } + } + + // WP 1.x–2.x "not installed" die() check. + { + // The die() may be wrapped in sprintf/__()/etc. Match any + // die(...installed WP...) by finding the balanced parens. + // Simple approach: find "die(" before "installed WP" and + // the matching ");" after it. + const instIdx = settings.indexOf('installed WP'); + const dieStart = settings.lastIndexOf('die(', instIdx); + let dieEnd = -1; + if (dieStart !== -1) { + let depth = 0; + for (let i = dieStart + 3; i < settings.length; i++) { + if (settings[i] === '(') depth++; + if (settings[i] === ')') { + depth--; + if (depth === 0) { + dieEnd = i + 1; + // Include trailing semicolon + if (settings[dieEnd] === ';') dieEnd++; + break; + } + } + } + } + const dieMatched = + dieStart !== -1 && dieEnd !== -1 + ? settings.substring(0, dieStart) + + 'true; /* die removed by Playground */' + + settings.substring(dieEnd) + : settings; + if (dieMatched !== settings) { + settings = dieMatched; + settingsChanged = true; + } + } + + // WP 2.5–2.7 hooks wp_cron() and wp_version_check() to the + // 'init' action. Both make outbound HTTP requests (fsockopen / + // wp_remote_post) that crash the PHP 5.2 WASM runtime with + // "null function or function signature mismatch". + // WP 2.8+ moved these to scheduled events and added + // DISABLE_WP_CRON. Old WP doesn't check that constant. + // Fix: remove these specific hooks right before do_action('init') + // runs. This is more reliable than patching individual files + // because it works regardless of WP version differences. + // WP 2.5–2.7 hooks functions that make outbound HTTP requests + // (fsockopen / wp_remote_post) to the 'init' and 'admin_init' + // actions. These crash the PHP 5.2 WASM runtime with "null + // function or function signature mismatch" because fsockopen's + // underlying socket calls can't work in WASM. + // Remove all known network-calling hooks before they fire. + if (settings.includes("do_action('init');")) { + settings = settings.replace( + "do_action('init');", + `// Remove hooks that make outbound HTTP requests (crash WASM). +if (function_exists('remove_action')) { + @remove_action('init', 'wp_cron'); + @remove_action('init', 'wp_version_check'); + @remove_action('init', 'wp_update_plugins'); + @remove_action('init', 'wp_update_themes'); + @remove_action('admin_init', '_maybe_update_plugins'); + @remove_action('admin_init', '_maybe_update_themes'); + @remove_action('admin_init', 'wp_version_check'); + @remove_action('admin_init', 'wp_update_plugins'); + @remove_action('admin_init', 'wp_update_themes'); + @remove_action('load-plugins.php', 'wp_update_plugins'); + @remove_action('load-update.php', 'wp_update_plugins'); + @remove_action('load-update.php', 'wp_update_themes'); + @remove_action('load-themes.php', 'wp_update_themes'); + @remove_action('wp_update_plugins', 'wp_update_plugins'); + @remove_action('wp_version_check', 'wp_version_check'); +} +// Disable cURL and streams HTTP transports. The underlying +// libcurl/fsockopen crash the WASM runtime. WP 3.2+ checks +// these filters before using each transport. +if (function_exists('add_filter')) { + function _pg_disable_curl() { return false; } + function _pg_disable_streams() { return false; } + @add_filter('use_curl_transport', '_pg_disable_curl'); + @add_filter('use_streams_transport', '_pg_disable_streams'); + @add_filter('use_ftp_transport', '_pg_disable_curl'); + @add_filter('use_fsockopen_transport', '_pg_disable_streams'); +} +do_action('init');` + ); + settingsChanged = true; + } + + if (settingsChanged) { + await php.writeFile(wpSettingsPath, settings); + } +} + +/** Patches wp-includes/functions.php. */ +async function patchWpFunctionsPhp(php: PHP, documentRoot: string) { + const functionsPhpPath = joinPaths( + documentRoot, + 'wp-includes/functions.php' + ); + if (!php.fileExists(functionsPhpPath)) return; + + let functionsPhp = php.readFileAsText(functionsPhpPath); + let functionsPhpChanged = false; + + // WP 1.5: $all_options not initialized as object. + if ( + functionsPhp.includes('$all_options->{$option->option_name}') && + !functionsPhp.includes('$all_options = new stdClass') + ) { + functionsPhp = functionsPhp.replace( + 'foreach ($options as $option) {', + '$all_options = new stdClass;\n\tforeach ($options as $option) {' + ); + functionsPhpChanged = true; + } + + if (functionsPhpChanged) { + await php.writeFile(functionsPhpPath, functionsPhp); + } +} + +/** Patches wp-admin/install.php for old WP versions. */ +async function patchWpInstallPhp(php: PHP, documentRoot: string) { + const installPhpPath = joinPaths(documentRoot, 'wp-admin/install.php'); + if (!php.fileExists(installPhpPath)) return; + + let installPhp = php.readFileAsText(installPhpPath); + let installPhpChanged = false; + + // Fix relative paths to absolute. + if ( + installPhp.includes("'../wp-config.php'") || + installPhp.includes("'../wp-load.php'") + ) { + const absAdminDir = joinPaths(documentRoot, 'wp-admin'); + const absRoot = documentRoot; + installPhp = installPhp + .replace(/'\.\.\/(wp-config\.php)'/g, `'${absRoot}/$1'`) + .replace(/'\.\.\/(wp-load\.php)'/g, `'${absRoot}/$1'`) + .replace(/'\.\/(upgrade-functions\.php)'/g, `'${absAdminDir}/$1'`) + .replace(/'(upgrade-functions\.php)'/g, `'${absAdminDir}/$1'`) + .replace(/'\.\/(includes\/upgrade\.php)'/g, `'${absAdminDir}/$1'`) + .replace(/'\.\.\/(wp-includes\/[^']+)'/g, `'${absRoot}/$1'`); + installPhpChanged = true; + } + + // $HTTP_GET_VARS/$HTTP_POST_VARS removed in PHP 5.4. + if (installPhp.includes('$HTTP_GET_VARS')) { + installPhp = installPhp.replace(/\$HTTP_GET_VARS/g, '$_GET'); + installPhpChanged = true; + } + if (installPhp.includes('$HTTP_POST_VARS')) { + installPhp = installPhp.replace(/\$HTTP_POST_VARS/g, '$_POST'); + installPhpChanged = true; + } + + // WP 1.x multi-step installer: combine steps into single request. + if ( + installPhp.includes('mysql_list_tables') && + installPhp.includes('switch($step)') + ) { + installPhp = installPhp.replace( + /^(if\s*\(isset\(\$_GET\['step'\]\)\)\s*\n\s*\$step\s*=\s*\$_GET\['step'\];\s*\n\s*else\s*\n\s*\$step\s*=\s*0;)/m, + `$1\n// Playground: run all install steps in one request\nif ($step >= 1) $step = 1;` + ); + installPhp = installPhp.replace( + /^(\$step\s*=\s*\$_GET\['step'\];\s*\n\s*if\s*\(!\$step\)\s*\$step\s*=\s*0;)/m, + `$1\n// Playground: run all install steps in one request\nif ($step >= 1) $step = 1;` + ); + installPhp = installPhp.replace( + /break;\s*\n(\s*case\s+2\s*:)/, + '// break; // Playground: fall through\n$1' + ); + installPhp = installPhp.replace( + /break;\s*\n(\s*case\s+3\s*:)/, + '// break; // Playground: fall through\n$1' + ); + installPhpChanged = true; + } + + if (installPhpChanged) { + await php.writeFile(installPhpPath, installPhp); + } +} + +/** Patches wp-includes/wp-db.php (wpdb class). */ +async function patchWpDbPhp(php: PHP, documentRoot: string) { + const wpDbPath = joinPaths(documentRoot, 'wp-includes/wp-db.php'); + if (!php.fileExists(wpDbPath)) return; + + let wpDb = php.readFileAsText(wpDbPath); + let wpDbChanged = false; + + // Guard $wpdb creation so the lazy loader isn't overwritten. + if ( + wpDb.includes( + '$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);' + ) && + !wpDb.includes('isset($wpdb)') + ) { + wpDb = wpDb.replace( + '$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);', + 'if ( !isset($wpdb) ) { $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); }' + ); + wpDbChanged = true; + } + + // Old wpdb (< 3.0) calls mysql_connect() inline — patch to + // call db_connect() when available (i.e., WP_SQLite_DB). + if (!wpDb.includes('db_connect')) { + const mysqlConnectPattern = + /\$this->dbh\s*=\s*@mysql_connect\(\$dbhost\s*,\s*\$dbuser\s*,\s*\$dbpassword(?:\s*,\s*true)?\);/; + if (mysqlConnectPattern.test(wpDb)) { + wpDb = wpDb.replace( + mysqlConnectPattern, + 'if (method_exists($this, "db_connect")) { $this->dbname = $dbname; $this->db_connect(); } else { $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); }' + ); + wpDbChanged = true; + } + } + + // Inject method polyfills for old wpdb classes. + { + const polyfills: string[] = []; + if (!wpDb.includes('function set_prefix')) { + polyfills.push(` + function set_prefix($prefix) { + $this->prefix = $prefix; + $tables = array('posts', 'users', 'categories', 'post2cat', 'comments', 'link2cat', 'links', 'options', 'postmeta', 'usermeta', 'terms', 'term_taxonomy', 'term_relationships'); + foreach ($tables as $t) { + $this->$t = $prefix . $t; + } + return $prefix; + }`); + } + if (!wpDb.includes('function timer_start')) { + polyfills.push(` + function timer_start() { + $this->time_start = microtime(true); + return true; + }`); + } + if (!wpDb.includes('function timer_stop')) { + polyfills.push(` + function timer_stop() { + return microtime(true) - $this->time_start; + }`); + } + if (!wpDb.includes('function init_charset')) { + polyfills.push(` + function init_charset() { + if (defined('DB_CHARSET')) $this->charset = DB_CHARSET; + if (defined('DB_COLLATE')) $this->collate = DB_COLLATE; + }`); + } + if (!wpDb.includes('function bail')) { + polyfills.push(` + function bail($message, $error_code = '500') { + die($message); + }`); + } + if (!wpDb.includes('function check_connection')) { + polyfills.push(` + function check_connection($allow_bail = true) { + return true; + }`); + } + if (polyfills.length > 0) { + const classEndMatch = wpDb.match( + /^(\s*})\s*\n+(\$wpdb|\?>\s*$|if\s*\(\s*!\s*isset\(\s*\$wpdb\s*\))/m + ); + if (classEndMatch && classEndMatch.index !== undefined) { + const polyfillBlock = + '\n\t// Polyfills added by WordPress Playground.\n' + + polyfills.join('\n') + + '\n\n'; + wpDb = + wpDb.substring(0, classEndMatch.index) + + polyfillBlock + + wpDb.substring(classEndMatch.index); + wpDbChanged = true; + } + } + } + + if (wpDbChanged) { + await php.writeFile(wpDbPath, wpDb); + } +} + +/** + * Fixes relative paths in wp-admin files so they work regardless of CWD. + * + * Old WordPress (< 3.7) uses relative paths like `require('../wp-load.php')`, + * `require('./admin.php')`, and `include('./admin-footer.php')` in wp-admin + * scripts. These fail in the Playground because PHP's CWD is set to the + * document root, not the script's directory. Modern WordPress uses + * `dirname(__FILE__)` instead. + */ +async function patchWpAdminRelativePaths(php: PHP, documentRoot: string) { + // Generic fix: replace all relative require/include statements in + // wp-admin PHP files with dirname(__FILE__)-based absolute paths. + // This handles WP 1.2 through 3.6 where many files use + // './file.php' or '../file.php'. + // + // The emitted replacement is always in canonical form: + // `./foo` → dirname(__FILE__) . '/foo' + // `../foo` → dirname(dirname(__FILE__)) . '/foo' + // `foo.php` → dirname(__FILE__) . '/foo.php' + // (No literal './' or '../' survives in the output.) + const toDirnameExpr = (relPath: string): string => { + let remaining = relPath; + let upLevels = 0; + while (remaining.startsWith('../')) { + upLevels++; + remaining = remaining.slice(3); + } + while (remaining.startsWith('./')) { + remaining = remaining.slice(2); + } + let dirExpr = 'dirname(__FILE__)'; + for (let i = 0; i < upLevels; i++) { + dirExpr = `dirname(${dirExpr})`; + } + return `${dirExpr} . '/${remaining}'`; + }; + const wpAdminDir = joinPaths(documentRoot, 'wp-admin'); + if (php.isDir(wpAdminDir)) { + for (const file of php.listFiles(wpAdminDir)) { + if (!file.endsWith('.php')) continue; + const filePath = joinPaths(wpAdminDir, file); + const content = php.readFileAsText(filePath); + const patched = content + // ../path — parent directory (with parentheses) + .replace( + /((?:require|include)(?:_once)?)\s*\(\s*(['"])(\.\.\/[^'"]+)\2\s*\)/g, + (_, keyword, _q, path) => + `${keyword}(${toDirnameExpr(path)})` + ) + // ./path — current directory (with parentheses) + .replace( + /((?:require|include)(?:_once)?)\s*\(\s*(['"])(\.\/[^'"]+)\2\s*\)/g, + (_, keyword, _q, path) => + `${keyword}(${toDirnameExpr(path)})` + ) + // Bare filename without ./ prefix (with parentheses) + // (e.g. 'admin-header.php'). Only match filenames + // ending in .php to avoid false positives. + .replace( + /((?:require|include)(?:_once)?)\s*\(\s*(['"])([a-z][\w-]*\.php)\2\s*\)/g, + (_, keyword, _q, path) => + `${keyword}(${toDirnameExpr(path)})` + ) + // Statement form without parentheses: + // require_once '../wp-config.php'; + // require './admin.php'; + // include 'admin-header.php'; + // WP 2.0 uses this form in several wp-admin files. + // ../path (no parens) + .replace( + /((?:require|include)(?:_once)?)\s+(['"])(\.\.\/[^'"]+)\2/g, + (_, keyword, _q, path) => + `${keyword}(${toDirnameExpr(path)})` + ) + // ./path (no parens) + .replace( + /((?:require|include)(?:_once)?)\s+(['"])(\.\/[^'"]+)\2/g, + (_, keyword, _q, path) => + `${keyword}(${toDirnameExpr(path)})` + ) + // Bare filename (no parens) + .replace( + /((?:require|include)(?:_once)?)\s+(['"])([a-z][\w-]*\.php)\2/g, + (_, keyword, _q, path) => + `${keyword}(${toDirnameExpr(path)})` + ) + // Fix ABSPATH . '/path' → ABSPATH . 'path' + // (removes double slash) + .replace(/ABSPATH\s*\.\s*'\/wp-/g, "ABSPATH . 'wp-"); + if (patched !== content) { + await php.writeFile(filePath, patched); + } + } + } + + // Specific patches for patterns the generic fix above can't handle + // (e.g., require without parentheses, unusual spacing). The + // replacement paths use `toDirnameExpr` to stay canonical (no + // stray './' or '../' literals in the emitted PHP). + const patches: Array<{ file: string; from: RegExp; to: string }> = [ + // WP < 2.6: require_once('../wp-config.php') in admin.php + { + file: 'wp-admin/admin.php', + from: /require_once\s*\(\s*'\.\.\/wp-config\.php'\s*\)/, + to: `require_once(${toDirnameExpr('../wp-config.php')})`, + }, + // WP 2.6-2.9: require_once('../wp-load.php') in admin.php + { + file: 'wp-admin/admin.php', + from: /require_once\s*\(\s*'\.\.\/wp-load\.php'\s*\)/, + to: `require_once(${toDirnameExpr('../wp-load.php')})`, + }, + // WP 3.0-3.6: require_once('./admin.php') in index.php and index-extra.php + { + file: 'wp-admin/index.php', + from: /require_once\s*\(\s*'\.\/admin\.php'\s*\)/, + to: `require_once(${toDirnameExpr('./admin.php')})`, + }, + { + file: 'wp-admin/index-extra.php', + from: /require_once\s*\(\s*'\.\/admin\.php'\s*\)/, + to: `require_once(${toDirnameExpr('./admin.php')})`, + }, + // WP 3.0: require('./includes/dashboard.php') in index-extra.php + { + file: 'wp-admin/index-extra.php', + from: /require\s*\(\s*'\.\/includes\/dashboard\.php'\s*\)/, + to: `require(${toDirnameExpr('./includes/dashboard.php')})`, + }, + // WP < 3.7: require[_once]('./admin-header.php') in index.php + { + file: 'wp-admin/index.php', + from: /require(?:_once)?\s*\(\s*'\.\/admin-header\.php'\s*\)/, + to: `require_once(${toDirnameExpr('./admin-header.php')})`, + }, + // WP < 3.7: require[_once]('./admin-footer.php') in index.php + { + file: 'wp-admin/index.php', + from: /require(?:_once)?\s*\(\s*'\.\/admin-footer\.php'\s*\)/, + to: `require_once(${toDirnameExpr('./admin-footer.php')})`, + }, + // WP 1.x: require('../wp-config.php') in index.php + { + file: 'wp-admin/index.php', + from: /require\s*\(\s*'\.\.\/wp-config\.php'\s*\)/, + to: `require(${toDirnameExpr('../wp-config.php')})`, + }, + ]; + + for (const { file, from, to } of patches) { + const filePath = joinPaths(documentRoot, file); + if (!php.fileExists(filePath)) continue; + const content = php.readFileAsText(filePath); + if (from.test(content)) { + await php.writeFile(filePath, content.replace(from, to)); + } + } + + // WP 1.2: index.php redirects using get_settings('siteurl') which + // may be 'http://localhost' (wrong host for the Playground). Replace + // with relative redirects that work regardless of siteurl. + const indexPhpPath = joinPaths(documentRoot, 'wp-admin/index.php'); + if (php.fileExists(indexPhpPath)) { + let indexPhp = php.readFileAsText(indexPhpPath); + if (indexPhp.includes("get_settings('siteurl')")) { + indexPhp = indexPhp.replace( + /get_settings\('siteurl'\)\s*\.\s*'\/wp-admin\//g, + "'" + ); + await php.writeFile(indexPhpPath, indexPhp); + } + } + + // WP 1.0.2 wp-admin/menu.php reads the admin menu definition from + // a relative path: `$menu = file('./menu.txt');`. The CWD during + // a Playground request is the document root (/wordpress), not + // wp-admin, so ./menu.txt resolves to /wordpress/menu.txt and + // fails. Rewrite to an absolute path relative to the menu.php + // file location. + const menuPhpPath = joinPaths(documentRoot, 'wp-admin/menu.php'); + if (php.fileExists(menuPhpPath)) { + const menuPhp = php.readFileAsText(menuPhpPath); + const needle = `file('./menu.txt')`; + if (menuPhp.includes(needle)) { + await php.writeFile( + menuPhpPath, + menuPhp.replace(needle, `file(dirname(__FILE__) . '/menu.txt')`) + ); + } + } +} + +/** + * Bypasses referer-based check_admin_referer() in WP < 2.5. + * + * In WP 1.2-1.5, check_admin_referer() verifies that + * $_SERVER['HTTP_REFERER'] contains the siteurl. In Playground's + * service worker environment, the Referer header is often missing + * or incorrect, causing plugin activation and other admin actions + * to fail with "you need to enable sending referrers". + * + * WP 2.5+ switched to nonce-based verification and doesn't need + * this patch. + */ +async function patchCheckAdminReferer(php: PHP, documentRoot: string) { + const adminFunctionsPath = joinPaths( + documentRoot, + 'wp-admin/admin-functions.php' + ); + if (!php.fileExists(adminFunctionsPath)) return; + + const content = php.readFileAsText(adminFunctionsPath); + // Only patch the referer-based version (WP < 2.5). + // The function body checks $_SERVER['HTTP_REFERER'] and die()s + // if it doesn't contain the admin URL. + if ( + !content.includes('function check_admin_referer()') || + !content.includes("$_SERVER['HTTP_REFERER']") + ) { + return; + } + + // The regex uses (?:[^{}]|\{[^}]*\})* instead of [^}]* to + // handle one level of brace nesting. WP 1.2 wraps the die() + // in an if-block with braces; WP 1.5 uses a braceless if. + const patched = content.replace( + /function check_admin_referer\(\)\s*\{(?:[^{}]|\{[^}]*\})*\$_SERVER\['HTTP_REFERER'\](?:[^{}]|\{[^}]*\})*\}/, + `function check_admin_referer() { + // Patched by Playground: skip referer check. + // The Referer header is unreliable in the service worker + // environment. The original function die()d when the header + // was missing or didn't match the admin URL. + do_action('check_admin_referer', ''); +}` + ); + if (patched !== content) { + await php.writeFile(adminFunctionsPath, patched); + } +} + +/** + * Patches the WP 1.5 admin dashboard to fix missing posts listing. + * + * WP 1.5's wp-admin/index.php queries recent posts with: + * post_date_gmt < '$today' + * where $today = current_time('mysql', 1). This date comparison + * can fail in SQLite when the post_date_gmt value is a zero date + * ('0000-00-00 00:00:00') or when the SQLite driver doesn't + * handle the comparison correctly. Remove the date condition so + * the recent posts list displays on the dashboard. + */ +async function patchWpAdminDashboard(php: PHP, documentRoot: string) { + const indexPhpPath = joinPaths(documentRoot, 'wp-admin/index.php'); + if (!php.fileExists(indexPhpPath)) return; + + let content = php.readFileAsText(indexPhpPath); + let changed = false; + + // Remove the "AND post_date_gmt < '$today'" condition from + // the recent posts query. The condition filters out future + // scheduled posts, but the post_status = 'publish' check is + // sufficient for the dashboard — scheduled posts have status + // 'future' (WP 2.1+) or aren't published (WP 1.x). + const dateCondition = /AND post_date_gmt < '\$today'/; + if (dateCondition.test(content)) { + content = content.replace(dateCondition, ''); + changed = true; + } + + if (changed) { + await php.writeFile(indexPhpPath, content); + } + + // WP 1.5's rss-functions.php calls a global error() function + // from fetch_rss() when the RSS fetch fails, but that function + // is only defined as a method on the RSSCache class — not as a + // standalone function. In Playground, outbound HTTP always fails + // (no network), so every fetch_rss() call hits this path and + // causes a fatal "Call to undefined function error()" that kills + // the dashboard rendering mid-page. Define the missing stub. + await patchRssFunctionsErrorStub(php, documentRoot); +} + +/** + * Defines a global error() function stub in rss-functions.php. + * + * WP 1.5's Magpie RSS library calls error() as a standalone function + * from fetch_rss() and _response_to_rss(), but error() is only + * defined as a method on the RSSCache class. When the RSS fetch + * fails (which always happens in Playground — no outbound HTTP), + * PHP hits "Call to undefined function error()" — a fatal error + * that @ cannot suppress, killing the script mid-page. + */ +async function patchRssFunctionsErrorStub(php: PHP, documentRoot: string) { + const rssPath = joinPaths(documentRoot, 'wp-includes/rss-functions.php'); + if (!php.fileExists(rssPath)) return; + + let content = php.readFileAsText(rssPath); + // Only patch if the file calls error() as a standalone function + // and doesn't already define a global error() function. + if ( + !/^\s*error\s*\(/m.test(content) || + /^function\s+error\s*\(/m.test(content) + ) { + return; + } + + // Insert a global error() stub right after the opening ID, $user->user_login); + + // Create a single session and set cookies via response + // headers. This must only happen once per session — not on + // every request — because each call generates a new session + // token, which would invalidate nonces. + if (!headers_sent()) { + wp_set_auth_cookie($user->ID); + } + + // On WP < 4.0, wp_set_auth_cookie() does not update $_COOKIE + // in-process. auth_redirect() reads $_COOKIE to decide whether + // to redirect to wp-login.php, so we must populate it manually. + // Generate cookies with wp_generate_auth_cookie() — these have + // no session token (pre-4.0) and validate for auth_redirect(). + if (!isset($_COOKIE[LOGGED_IN_COOKIE]) || empty($_COOKIE[LOGGED_IN_COOKIE])) { + $expiration = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $expiration, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $expiration, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $expiration, 'logged_in'); + } + return; + } + + // WP < 2.5 auth system: USER_COOKIE + PASS_COOKIE with + // double-md5 hashed password. SECURITY NOTE: the admin password + // was hardcoded to 'password' during legacy WP installation (see + // the SQLite user-row seeding in this same file), so we hardcode + // md5(md5('password')) here to match. The generated site only + // exists inside the Playground WASM sandbox; there is no real + // account to steal credentials for. + if (defined('USER_COOKIE') && defined('PASS_COOKIE')) { + $_COOKIE[USER_COOKIE] = $username; + $_COOKIE[PASS_COOKIE] = md5(md5('password')); + if (function_exists('wp_setcookie') && !headers_sent()) { + wp_setcookie($username, 'password'); + } + } +} +add_action('init', 'playground_legacy_admin_auth', 0); +` + ); +} + +/** + * Patches wp-admin/admin.php to inject auth cookie population before + * auth_redirect(). This is needed for WP < 2.8 which doesn't have + * mu-plugin support — the mu-plugin-based auth fix can't run. + * + * Inserts PHP code that populates $_COOKIE with valid auth cookies + * right before the auth_redirect() call. + */ +async function patchAdminAuthRedirect(php: PHP, documentRoot: string) { + // Bail out entirely on WP 2.8+ where mu-plugins handle auth. + const wpSettingsPath = joinPaths(documentRoot, 'wp-settings.php'); + if (php.fileExists(wpSettingsPath)) { + const settings = php.readFileAsText(wpSettingsPath); + if (settings.includes('mu_plugin') || settings.includes('mu-plugin')) { + return; + } + } + + // WP 2.0-2.7 path: patch wp-admin/admin.php before the + // auth_redirect() call. WP 1.2 doesn't have admin.php — the + // wp-admin/auth.php patch at the bottom of this function + // handles that case and must run even when admin.php is missing. + const adminPhpPath = joinPaths(documentRoot, 'wp-admin/admin.php'); + const content = php.fileExists(adminPhpPath) + ? php.readFileAsText(adminPhpPath) + : ''; + const shouldPatchAdminPhp = content.includes('auth_redirect()'); + + // For WP 2.5-2.7: modern auth with wp_generate_auth_cookie + // For WP < 2.5: legacy auth with USER_COOKIE/PASS_COOKIE + // + // This code only runs on WP < 2.8 (no mu-plugin support). + // Session tokens don't exist until WP 4.0, so generating + // cookies with wp_generate_auth_cookie() here is safe — there + // is no session token to mismatch. Nonces in WP < 4.0 only + // depend on user ID, action, and secret keys. + const authCode = ` +// Playground: populate auth cookies and force admin user before auth_redirect. +if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { + // Skip if user is already logged in from the auto-login mu-plugin. + if (function_exists('is_user_logged_in') && is_user_logged_in()) { + // Still need $_COOKIE populated for auth_redirect(). + // On old WP, wp_set_auth_cookie() does not update $_COOKIE. + if (function_exists('wp_generate_auth_cookie') && defined('LOGGED_IN_COOKIE') && empty($_COOKIE[LOGGED_IN_COOKIE])) { + $_pg_uid = wp_get_current_user()->ID; + $_pg_exp = time() + 172800; + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($_pg_uid, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_uid, $_pg_exp, 'secure_auth'); + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_uid, $_pg_exp, 'logged_in'); + } + } elseif (function_exists('wp_generate_auth_cookie')) { + $_pg_user = function_exists('get_user_by') + ? get_user_by('login', PLAYGROUND_AUTO_LOGIN_AS_USER) + : (function_exists('get_userdatabylogin') + ? get_userdatabylogin(PLAYGROUND_AUTO_LOGIN_AS_USER) : null); + if ($_pg_user) { + wp_set_current_user($_pg_user->ID, $_pg_user->user_login); + $_pg_exp = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'logged_in'); + } + } elseif (defined('USER_COOKIE') && defined('PASS_COOKIE')) { + // WP 2.0-2.4: double-md5 PASS_COOKIE with the sandbox admin + // password ('password'). See SECURITY NOTE at the top of the + // auto-login mu-plugin — this is only safe because the + // generated site lives entirely inside the WASM sandbox. + $_COOKIE[USER_COOKIE] = PLAYGROUND_AUTO_LOGIN_AS_USER; + $_COOKIE[PASS_COOKIE] = md5(md5('password')); + // Reset $current_user so get_currentuserinfo() re-evaluates + // with the cookies we just set. On WP 2.0-2.4, kses_init() + // fires during do_action('init') inside wp-settings.php and + // calls get_currentuserinfo() when no cookies exist yet, + // caching $current_user as WP_User(0). Without this reset, + // the cached anonymous user persists and all capability + // checks fail. + $GLOBALS['current_user'] = null; + if (function_exists('get_currentuserinfo')) { + get_currentuserinfo(); + } + } elseif (defined('COOKIEHASH')) { + // WP 1.5-1.x: hardcoded cookie names without constants. The + // same sandbox-only admin password ('password') applies here; + // see the SECURITY NOTE in the auto-login mu-plugin for the + // full rationale. + $_COOKIE['wordpressuser_' . COOKIEHASH] = PLAYGROUND_AUTO_LOGIN_AS_USER; + $_COOKIE['wordpresspass_' . COOKIEHASH] = md5(md5('password')); + } + // Force admin capabilities on the current user. The WP_User + // object loads caps from the database. If populate_roles() + // didn't run during install (e.g. WP 2.5 where the installer + // may crash before writing roles), the user has no caps and + // every current_user_can() check fails with "insufficient + // permissions". Set caps directly in-memory so admin works. + $_pg_cu = isset($GLOBALS['current_user']) ? $GLOBALS['current_user'] : null; + if ($_pg_cu && isset($_pg_cu->ID) && $_pg_cu->ID > 0 && empty($_pg_cu->allcaps['read'])) { + // Respect the user_level stored in the DB if one exists, so + // a blueprint asking to auto-login as a lower-privilege user + // doesn't silently get level 10 admin. Fall back to 10 only + // when the field is absent (e.g. WP 2.0 installs where + // populate_roles() never ran). + $_pg_db_level = isset($_pg_cu->user_level) + ? (int) $_pg_cu->user_level + : null; + if ($_pg_db_level === null && isset($_pg_user) && $_pg_user) { + $_pg_db_level = isset($_pg_user->user_level) + ? (int) $_pg_user->user_level + : null; + } + $_pg_cu->user_level = $_pg_db_level !== null ? $_pg_db_level : 10; + // Grant the capability set that corresponds to the resolved + // user_level. On WP 2.0-2.7 capability names are level_N + // markers plus the role-specific flags; we build the cap list + // up to the effective level instead of unconditionally adding + // level_10/administrator. + $_pg_effective_level = $_pg_cu->user_level; + $_pg_caps = array('read'); + for ($_pg_i = 0; $_pg_i <= $_pg_effective_level; $_pg_i++) { + $_pg_caps[] = 'level_' . $_pg_i; + } + if ($_pg_effective_level >= 10) { + $_pg_caps = array_merge($_pg_caps, array( + 'switch_themes','edit_themes','activate_plugins', + 'edit_plugins','edit_users','edit_files','manage_options', + 'moderate_comments','manage_categories','manage_links', + 'upload_files','import','unfiltered_html','edit_posts', + 'edit_others_posts','edit_published_posts','publish_posts', + 'edit_pages')); + } + foreach ($_pg_caps as $_pg_c) { + $_pg_cu->allcaps[$_pg_c] = true; + } + if ($_pg_effective_level >= 10) { + $_pg_cu->caps = array('administrator' => true); + } + } +} +`; + if (shouldPatchAdminPhp) { + const patched = content.replace( + 'auth_redirect();', + authCode + 'auth_redirect();' + ); + if (patched !== content) { + await php.writeFile(adminPhpPath, patched); + } + } + + // WP 1.2: auth.php uses $cookiehash variable (not admin.php/auth_redirect). + // Replace it with a stub that loads wp-config.php and pre-populates + // the user globals so get_currentuserinfo() in wp-admin/index.php + // sees an authenticated admin. Also set the wordpressuser_ cookie + // so any downstream code that reads it still works. + const authPhpPath = joinPaths(documentRoot, 'wp-admin/auth.php'); + if (php.fileExists(authPhpPath)) { + const authPhp = php.readFileAsText(authPhpPath); + if ( + authPhp.includes('$cookiehash') && + !authPhp.includes('Playground: bypass auth') + ) { + const bypassedAuth = `user_level) + ? (int) $__pg_userdata->user_level + : 10; + $user_ID = $__pg_userdata->ID; + $user_nickname = isset($__pg_userdata->user_nickname) + ? $__pg_userdata->user_nickname + : $__pg_user_login; + $user_email = isset($__pg_userdata->user_email) + ? $__pg_userdata->user_email + : ''; + $user_url = isset($__pg_userdata->user_url) + ? $__pg_userdata->user_url + : ''; + $user_pass_md5 = md5( + isset($__pg_userdata->user_pass) ? $__pg_userdata->user_pass : '' + ); + } +} +?>`; + if (bypassedAuth !== authPhp) { + await php.writeFile(authPhpPath, bypassedAuth); + } + } + } +} + +/** + * Patches admin-ajax.php to authenticate the user before the + * is_user_logged_in() check. + * + * WP 2.5-2.7 admin-ajax.php loads wp-config.php directly (not via + * admin.php), then checks is_user_logged_in() and dies with -1 if + * the user isn't authenticated. Since WP < 2.8 has no mu-plugin + * support, the Playground auth mu-plugin never loads. The preload + * auto-login (1-auto-login.php) runs at init but only on the + * *first* visit — subsequent requests (including AJAX) rely on + * auth cookies that may not validate because they were generated + * by wp_set_auth_cookie() during the first redirect. + * + * Fix: inject the same auth code used in patchAdminAuthRedirect() + * before the is_user_logged_in() gate in admin-ajax.php. + */ +async function patchAdminAjaxAuth(php: PHP, documentRoot: string) { + // Only needed on WP < 2.8 (no mu-plugin support). + const wpSettingsPath = joinPaths(documentRoot, 'wp-settings.php'); + if (php.fileExists(wpSettingsPath)) { + const settings = php.readFileAsText(wpSettingsPath); + if (settings.includes('mu_plugin') || settings.includes('mu-plugin')) { + return; + } + } + + const ajaxPhpPath = joinPaths(documentRoot, 'wp-admin/admin-ajax.php'); + if (!php.fileExists(ajaxPhpPath)) return; + + let content = php.readFileAsText(ajaxPhpPath); + if (!content.includes('is_user_logged_in')) return; + + // Inject auth code before the is_user_logged_in() check. + // Uses wp_set_current_user() + $_COOKIE population so that both + // is_user_logged_in() and subsequent nonce checks succeed. + const authCode = ` +// Playground: authenticate admin user for AJAX requests. +// WP < 2.8 has no mu-plugin support, and admin-ajax.php doesn't +// go through admin.php, so no other auth mechanism applies here. +if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { + if (function_exists('wp_set_current_user') && function_exists('wp_generate_auth_cookie')) { + $_pg_user = function_exists('get_user_by') + ? get_user_by('login', PLAYGROUND_AUTO_LOGIN_AS_USER) + : (function_exists('get_userdatabylogin') + ? get_userdatabylogin(PLAYGROUND_AUTO_LOGIN_AS_USER) : null); + if ($_pg_user) { + wp_set_current_user($_pg_user->ID, $_pg_user->user_login); + $_pg_exp = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'logged_in'); + } + } +} +`; + + content = content.replace( + /if\s*\(\s*!\s*is_user_logged_in\(\)\s*\)/, + authCode + 'if ( !is_user_logged_in() )' + ); + await php.writeFile(ajaxPhpPath, content); +} + +/** Patches wp-admin/includes/schema.php for WP < 3.3. */ +async function patchWpSchemaPhp(php: PHP, documentRoot: string) { + const schemaPhpPath = joinPaths( + documentRoot, + 'wp-admin/includes/schema.php' + ); + if (!php.fileExists(schemaPhpPath)) return; + + const schemaPhp = php.readFileAsText(schemaPhpPath); + if ( + /\$wp_queries\s*=\s*"CREATE TABLE/.test(schemaPhp) && + !schemaPhp.includes('function wp_get_db_schema') + ) { + await patchInlineSchemaPhp(php, documentRoot, schemaPhpPath, schemaPhp); + } +} + +/** + * Adds wp_get_db_schema() polyfill to WP < 3.3 schema.php. + * + * Also patches upgrade.php so make_db_current_silent() regenerates + * $wp_queries via wp_get_db_schema() before passing it to dbDelta(). + */ +async function patchInlineSchemaPhp( + php: PHP, + documentRoot: string, + schemaPhpPath: string, + schemaPhp: string +) { + const startMatch = schemaPhp.match(/\$wp_queries\s*=\s*"CREATE TABLE/); + if (!startMatch || startMatch.index === undefined) { + return; + } + const startIdx = startMatch.index; + + const endMarker = '";'; + const endIdx = schemaPhp.indexOf(endMarker, startIdx); + if (endIdx === -1) { + return; + } + const endPos = endIdx + endMarker.length; + + const wpQueriesBlock = schemaPhp.substring(startIdx, endPos); + + const replacement = + `function wp_get_db_schema( $scope = 'all', $blog_id = null ) {\n` + + `\tglobal $wpdb, $wp_queries, $charset_collate;\n` + + `\t$charset_collate = '';\n` + + `\tif ( ! empty($wpdb->charset) )\n` + + `\t\t$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";\n` + + `\tif ( ! empty($wpdb->collate) )\n` + + `\t\t$charset_collate .= " COLLATE $wpdb->collate";\n` + + `\t${wpQueriesBlock}\n` + + `\treturn $wp_queries;\n` + + `}`; + + const patched = + schemaPhp.substring(0, startIdx) + + replacement + + schemaPhp.substring(endPos); + await php.writeFile(schemaPhpPath, patched); + + const upgradePhpPath = joinPaths( + documentRoot, + 'wp-admin/includes/upgrade.php' + ); + if (php.fileExists(upgradePhpPath)) { + const upgradePhp = php.readFileAsText(upgradePhpPath); + + const dbDeltaReplacement = + `if ( function_exists('wp_get_db_schema') ) { ` + + `$wp_queries = wp_get_db_schema(); } ` + + `$1`; + const updated = upgradePhp.replace( + /(\$alterations\s*=\s*dbDelta\(\s*\$wp_queries\s*\))/g, + dbDeltaReplacement + ); + if (updated !== upgradePhp) { + await php.writeFile(upgradePhpPath, updated); + } + } +} +/** + * Returns the PHP content for wp-content/db.php. + * + * This db.php provides MySQL/MySQLi function stubs and, for WP < 3.0, + * loads the SQLite integration directly. Modern WP only needs this file + * to *exist* (to bypass the extension_loaded('mysql') check), but old + * WP actually uses the stubs defined here. + */ +export function generateDbPhpContent(): string { + return `dbh as a boolean stub. +// +// Only do this for old WP: check if wpdb lacks db_connect() +// as a method defined in the class itself (not inherited). +// Modern WP (3.0+) uses the lazy $wpdb loader successfully. +if ( + class_exists('wpdb', false) && + isset($GLOBALS['wpdb']) && + !($GLOBALS['wpdb'] instanceof wpdb) && + !method_exists('wpdb', 'db_connect') && + file_exists('/internal/shared/mu-plugins/sqlite-database-integration.php') +) { + // This block loads SQLite integration for old WP (< 3.0). + require_once '/internal/shared/mu-plugins/sqlite-database-integration.php'; + if ( + isset($GLOBALS['wpdb']) && + $GLOBALS['wpdb'] instanceof wpdb && + method_exists($GLOBALS['wpdb'], 'reinitialize_sqlite') + ) { + $GLOBALS['wpdb']->reinitialize_sqlite(); + } +} +// +// Polyfills for PHP functions used by the SQLite integration +// but missing on older PHP versions. +if (!function_exists('str_contains')) { + function str_contains($haystack, $needle) { + return $needle === '' || strpos($haystack, $needle) !== false; + } +} +if (!function_exists('str_starts_with')) { + function str_starts_with($haystack, $needle) { + return strncmp($haystack, $needle, strlen($needle)) === 0; + } +} +if (!function_exists('str_ends_with')) { + function str_ends_with($haystack, $needle) { + return $needle === '' || substr($haystack, -strlen($needle)) === $needle; + } +} +// Provides MySQL/MySQLi function stubs so WordPress 4.x +// doesn't die on the extension_loaded() check. +// The actual SQLite database is set up by the +// 0-sqlite.php preload via auto_prepend_file. +// +// mysql_connect and mysql_select_db return truthy values because +// WordPress < 3.0 calls mysql_connect() directly in wpdb::__construct +// and dies on false. The return value is never used for real queries. +if (!function_exists('mysql_connect')) { + function mysql_connect() { return true; } +} +if (!function_exists('mysql_select_db')) { + function mysql_select_db() { return true; } +} +if (!function_exists('mysqli_connect')) { + function mysqli_connect() { return true; } +} +if (!function_exists('mysqli_init')) { + function mysqli_init() { return true; } +} +if (!function_exists('mysqli_real_connect')) { + function mysqli_real_connect() { return true; } +} +if (!function_exists('mysqli_error')) { + function mysqli_error() { return ''; } +} +if (!function_exists('mysqli_errno')) { + function mysqli_errno() { return 0; } +} +if (!function_exists('mysqli_query')) { + function mysqli_query() { return false; } +} +if (!function_exists('mysqli_set_charset')) { + function mysqli_set_charset() { return true; } +} +if (!function_exists('mysqli_select_db')) { + function mysqli_select_db() { return true; } +} +if (!function_exists('mysqli_close')) { + function mysqli_close() { return true; } +} +${MYSQL_SHIMS_PHP} +`; +} + +/** + * Runs post-install fixups for old WordPress versions. + * + * Two-stage approach: + * 1. Load WordPress and fix data via $wpdb (admin password, seed content) + * 2. PDO fallback that directly creates tables and seeds data when the + * WordPress-based fixup fails (WP 1.x where loading WP may crash) + * + * Stage 2 is gated to WP < 3.5: later versions install cleanly through + * the AST SQLite driver and the PDO fallback would just pollute their + * schema with stale WP 1.x-shaped tables that the driver never sees in + * its information_schema. + */ +export async function runPostInstallLegacyFixups( + php: PHP, + siteUrl: string +): Promise { + // Parse the on-disk wp_version to decide whether stage 2 should run. + let wpVersion: string | null = null; + const versionPhp = joinPaths(php.documentRoot, 'wp-includes/version.php'); + if (php.fileExists(versionPhp)) { + const m = php + .readFileAsText(versionPhp) + .match(/\$wp_version\s*=\s*['"]([^'"]+)['"]/); + if (m) wpVersion = m[1]; + } + const needsStage2 = wpVersion !== null && parseFloat(wpVersion) < 3.5; + // Stage 1: wpdb-based fixups (loads WordPress) + try { + await php.run({ + code: `query("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='wp_users'")->fetchColumn(); + $_pg_pdo = null; + if (!$_pg_check) { exit; } + $wp_load = getenv('DOCUMENT_ROOT') . '/wp-load.php'; + if (!file_exists($wp_load)) { exit; } + require $wp_load; + ob_clean(); + global $wpdb; + if (!isset($wpdb) || !method_exists($wpdb, 'query')) { exit; } + + // Fix siteurl/home to match the Playground's scoped URL. + // WP < 2.2 doesn't natively override get_option('siteurl') + // with the WP_SITEURL constant (the preload env.php adds + // option_siteurl/option_home filters to handle that). + // The DB values must also contain the full scope path for + // parse_request() to correctly strip the home path from + // REQUEST_URI. Without this, the front page returns 404 + // because the scope prefix remains in the request path + // and matches no rewrite rule. + $_pg_opts = !empty($wpdb->options) ? $wpdb->options : $GLOBALS['table_prefix'] . 'options'; + try { + $_pg_url = getenv('PLAYGROUND_SITE_URL'); + if ($_pg_url) { + $_pg_current = $wpdb->get_var("SELECT option_value FROM {$_pg_opts} WHERE option_name = 'siteurl'"); + if ($_pg_current !== $_pg_url) { + $wpdb->query("UPDATE {$_pg_opts} SET option_value = '{$_pg_url}' WHERE option_name = 'siteurl'"); + $wpdb->query("UPDATE {$_pg_opts} SET option_value = '{$_pg_url}' WHERE option_name = 'home'"); + } + } + } catch (Exception $e) {} + + // Fix admin password for WP < 2.5. + // Use $wpdb->users if available (WP 1.5+), + // fall back to $table_prefix . 'users' (WP 1.2). + $users_table = !empty($wpdb->users) ? $wpdb->users : $GLOBALS['table_prefix'] . 'users'; + + // WP 1.2/1.0: the installer may fail to create the + // users table or the admin user. Create both if missing. + $wpdb->query("CREATE TABLE IF NOT EXISTS {$users_table} ( + ID int(10) unsigned NOT NULL auto_increment, + user_login varchar(20) NOT NULL default '', + user_pass varchar(64) NOT NULL default '', + user_firstname varchar(50) NOT NULL default '', + user_lastname varchar(50) NOT NULL default '', + user_nickname varchar(50) NOT NULL default '', + user_icq int(10) unsigned NOT NULL default '0', + user_email varchar(100) NOT NULL default '', + user_url varchar(100) NOT NULL default '', + user_ip varchar(15) NOT NULL default '', + user_domain varchar(200) NOT NULL default '', + user_browser varchar(200) NOT NULL default '', + dateYMDhour datetime NOT NULL default '0000-00-00 00:00:00', + user_level int(2) unsigned NOT NULL default '0', + user_aim varchar(50) NOT NULL default '', + user_msn varchar(100) NOT NULL default '', + user_yim varchar(50) NOT NULL default '', + user_idmode varchar(20) NOT NULL default '', + PRIMARY KEY (ID), + UNIQUE KEY user_login (user_login) + )"); + if (!$wpdb->get_var("SELECT COUNT(*) FROM {$users_table}")) { + $now = date('Y-m-d H:i:s'); + $wpdb->query( + "INSERT INTO {$users_table} (ID, user_login, user_pass, user_email, user_level, dateYMDhour, user_nickname) " . + "VALUES (1, 'admin', MD5('password'), 'admin@localhost.com', 10, '{$now}', 'admin')" + ); + } + $wpdb->query( + "UPDATE {$users_table} SET user_pass = MD5('password') WHERE user_login = 'admin'" + ); + + // Ensure WordPress roles exist and the admin user has + // admin capabilities. The installer calls populate_roles() + // but it may fail on SQLite. Set up roles and user caps + // directly via database queries as a fallback. + $p = $GLOBALS['table_prefix']; + $roles_key = $p . 'user_roles'; + try { + $has_roles = $wpdb->get_var( + "SELECT COUNT(*) FROM {$p}options WHERE option_name = '{$roles_key}'" + ); + } catch (Exception $e) { + $has_roles = 0; + } + if (!$has_roles) { + // Minimal administrator role with essential capabilities. + $roles = array('administrator' => array( + 'name' => 'Administrator', + 'capabilities' => array( + 'switch_themes'=>true, 'edit_themes'=>true, + 'activate_plugins'=>true, 'edit_plugins'=>true, + 'edit_users'=>true, 'edit_files'=>true, + 'manage_options'=>true, 'moderate_comments'=>true, + 'manage_categories'=>true, 'manage_links'=>true, + 'upload_files'=>true, 'import'=>true, + 'unfiltered_html'=>true, 'edit_posts'=>true, + 'edit_others_posts'=>true, 'edit_published_posts'=>true, + 'publish_posts'=>true, 'edit_pages'=>true, + 'read'=>true, 'level_10'=>true, 'level_9'=>true, + 'level_8'=>true, 'level_7'=>true, 'level_6'=>true, + 'level_5'=>true, 'level_4'=>true, 'level_3'=>true, + 'level_2'=>true, 'level_1'=>true, 'level_0'=>true, + 'edit_others_pages'=>true, 'edit_published_pages'=>true, + 'publish_pages'=>true, 'delete_pages'=>true, + 'delete_others_pages'=>true, 'delete_published_pages'=>true, + 'delete_posts'=>true, 'delete_others_posts'=>true, + 'delete_published_posts'=>true, 'delete_private_posts'=>true, + 'edit_private_posts'=>true, 'read_private_posts'=>true, + 'delete_private_pages'=>true, 'edit_private_pages'=>true, + 'read_private_pages'=>true, + ) + )); + $wpdb->query("INSERT INTO {$p}options (option_name, option_value, autoload) VALUES ('{$roles_key}', '" . addslashes(serialize($roles)) . "', 'yes')"); + } + // Set admin user capabilities and level in usermeta. + $um = isset($wpdb->usermeta) ? $wpdb->usermeta : $p . 'usermeta'; + try { + $has_cap = $wpdb->get_var("SELECT COUNT(*) FROM {$um} WHERE user_id=1 AND meta_key='{$p}capabilities'"); + if (!$has_cap) { + $cap_val = addslashes(serialize(array('administrator' => true))); + $wpdb->query("INSERT INTO {$um} (user_id, meta_key, meta_value) VALUES (1, '{$p}capabilities', '{$cap_val}')"); + } + $has_level = $wpdb->get_var("SELECT COUNT(*) FROM {$um} WHERE user_id=1 AND meta_key='{$p}user_level'"); + if (!$has_level) { + $wpdb->query("INSERT INTO {$um} (user_id, meta_key, meta_value) VALUES (1, '{$p}user_level', '10')"); + } + } catch (Exception $e) {} + + // Seed default content when the posts table is empty. + // Covers both old WP 1.5 (SQLite NOT NULL fix) and + // WP 2.5+ where the install may have failed to seed + // data due to SQLite compatibility issues. + $posts_table = !empty($wpdb->posts) ? $wpdb->posts : $GLOBALS['table_prefix'] . 'posts'; + $has_posts = false; + try { $has_posts = (bool)$wpdb->get_var("SELECT COUNT(*) FROM {$posts_table}"); } catch (Exception $e) {} + if (!$has_posts) { + $now = date('Y-m-d H:i:s'); + $now_gmt = gmdate('Y-m-d H:i:s'); + + // Default category + if (isset($wpdb->categories)) { + $wpdb->query("INSERT INTO {$wpdb->categories} (cat_ID, cat_name, category_nicename, category_description, category_parent) VALUES (1, 'Uncategorized', 'uncategorized', '', 0)"); + } + + // Default post — use only basic columns that exist + // in all WP versions (1.0+). + $wpdb->query("INSERT INTO {$posts_table} (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered) VALUES (1, 1, '{$now}', '{$now_gmt}', 'Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!', 'Hello world!', '', 'publish', 'open', 'open', '', 'hello-world', '', '', '{$now}', '{$now_gmt}', '')"); + + // Default comment + if (isset($wpdb->comments)) { + $wpdb->query("INSERT INTO {$wpdb->comments} (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES (1, 'Mr WordPress', '', 'http://wordpress.org', '127.0.0.1', '{$now}', '{$now_gmt}', 'Hi, this is a comment. To delete a comment, just log in and view the post comments. There you will have the option to edit or delete them.', 0, '1', '', '', 0, 0)"); + } + + // Link post to category + if (isset($wpdb->post2cat)) { + $wpdb->query("INSERT INTO {$wpdb->post2cat} (rel_id, post_id, category_id) VALUES (1, 1, 1)"); + } + } + `, + env: { + DOCUMENT_ROOT: php.documentRoot, + PLAYGROUND_SITE_URL: siteUrl || '', + }, + }); + } catch (error) { + // Non-fatal: post-install fixups may fail on some WP versions + logger.warn('Legacy WP post-install fixups failed (non-fatal):', error); + } + + // Stage 2: PDO fallback for WP < 3.5 where loading WordPress may crash + // or where the AST driver can't bootstrap the schema on its own. + if (!needsStage2) return; + try { + await php.run({ + code: `setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + // Check if admin user exists + $prefix = 'wp_'; + $table = $prefix . 'users'; + try { + $count = $pdo->query("SELECT COUNT(*) FROM {$table}")->fetchColumn(); + } catch (Exception $e) { + // Table might not exist — create it + $pdo->exec("CREATE TABLE IF NOT EXISTS {$table} ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + user_login TEXT NOT NULL DEFAULT '', + user_pass TEXT NOT NULL DEFAULT '', + user_nickname TEXT NOT NULL DEFAULT '', + user_email TEXT NOT NULL DEFAULT '', + user_url TEXT NOT NULL DEFAULT '', + user_ip TEXT NOT NULL DEFAULT '', + user_domain TEXT NOT NULL DEFAULT '', + user_browser TEXT NOT NULL DEFAULT '', + dateYMDhour TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + user_level INTEGER NOT NULL DEFAULT 0, + user_idmode TEXT NOT NULL DEFAULT '', + user_firstname TEXT NOT NULL DEFAULT '', + user_lastname TEXT NOT NULL DEFAULT '', + user_icq INTEGER NOT NULL DEFAULT 0, + user_aim TEXT NOT NULL DEFAULT '', + user_msn TEXT NOT NULL DEFAULT '', + user_yim TEXT NOT NULL DEFAULT '' + )"); + $count = 0; + } + if ($count == 0) { + $now = date('Y-m-d H:i:s'); + // SECURITY NOTE: WP 1.0-1.2 stores a single-md5 + // password hash directly in the users table. We + // seed the admin row with md5('password') so that + // auto-login works without a blueprint-supplied + // password. This is safe because the generated + // site only runs inside the Playground WASM + // sandbox and has no network-reachable login + // surface; it is NOT safe to lift verbatim into + // any real WordPress install. + $pass = md5('password'); + try { + // Build INSERT with defaults for ALL columns + $col_info = $pdo->query("PRAGMA table_info({$table})")->fetchAll(PDO::FETCH_ASSOC); + $known = array( + 'ID' => '1', 'user_login' => "'admin'", + 'user_pass' => "'{$pass}'", 'user_email' => "'admin@localhost.com'", + 'user_level' => '10', 'dateYMDhour' => "'{$now}'", + 'user_nickname' => "'admin'", 'user_nicename' => "'admin'", + 'user_registered' => "'{$now}'", 'user_status' => '0', + ); + $ins_cols = array(); $ins_vals = array(); + foreach ($col_info as $ci) { + $cn = $ci['name']; + $ins_cols[] = $cn; + if (isset($known[$cn])) { + $ins_vals[] = $known[$cn]; + } elseif ($ci['dflt_value'] !== null) { + $ins_vals[] = $ci['dflt_value']; + } elseif (stripos($ci['type'], 'int') !== false) { + $ins_vals[] = '0'; + } else { + $ins_vals[] = "''"; + } + } + $pdo->exec("INSERT INTO {$table} (" . implode(',', $ins_cols) . ") VALUES (" . implode(',', $ins_vals) . ")"); + } catch (Exception $e) {} + } else { + // See SECURITY NOTE above: the fixed 'password' + // here is only ever written into the ephemeral + // sandbox DB. + $pass = md5('password'); + try { $pdo->exec("UPDATE {$table} SET user_pass = '{$pass}' WHERE user_login = 'admin'"); } catch (Exception $e) {} + } + + // Create essential WP tables if missing. For WP 1.0-1.2, + // the install may fail to create tables because the + // SQLite driver can't process the old-style CREATE TABLE + // through the WordPress query path. + $now = date('Y-m-d H:i:s'); + $now_gmt = gmdate('Y-m-d H:i:s'); + $tables_sql = array( + 'posts' => "CREATE TABLE IF NOT EXISTS {$prefix}posts ( + ID INTEGER PRIMARY KEY AUTOINCREMENT, + post_author INTEGER NOT NULL DEFAULT 0, + post_date TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + post_date_gmt TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + post_content TEXT NOT NULL DEFAULT '', + post_title TEXT NOT NULL DEFAULT '', + post_category INTEGER NOT NULL DEFAULT 0, + post_excerpt TEXT NOT NULL DEFAULT '', + post_status TEXT NOT NULL DEFAULT 'publish', + comment_status TEXT NOT NULL DEFAULT 'open', + ping_status TEXT NOT NULL DEFAULT 'open', + post_password TEXT NOT NULL DEFAULT '', + post_name TEXT NOT NULL DEFAULT '', + to_ping TEXT NOT NULL DEFAULT '', + pinged TEXT NOT NULL DEFAULT '', + post_modified TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + post_modified_gmt TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + post_content_filtered TEXT NOT NULL DEFAULT '', + post_parent INTEGER NOT NULL DEFAULT 0, + menu_order INTEGER NOT NULL DEFAULT 0, + post_mime_type TEXT NOT NULL DEFAULT '' + )", + 'categories' => "CREATE TABLE IF NOT EXISTS {$prefix}categories ( + cat_ID INTEGER PRIMARY KEY AUTOINCREMENT, + cat_name TEXT NOT NULL DEFAULT '', + category_nicename TEXT NOT NULL DEFAULT '', + category_description TEXT NOT NULL DEFAULT '', + category_parent INTEGER NOT NULL DEFAULT 0 + )", + 'post2cat' => "CREATE TABLE IF NOT EXISTS {$prefix}post2cat ( + rel_id INTEGER PRIMARY KEY AUTOINCREMENT, + post_id INTEGER NOT NULL DEFAULT 0, + category_id INTEGER NOT NULL DEFAULT 0 + )", + 'comments' => "CREATE TABLE IF NOT EXISTS {$prefix}comments ( + comment_ID INTEGER PRIMARY KEY AUTOINCREMENT, + comment_post_ID INTEGER NOT NULL DEFAULT 0, + comment_author TEXT NOT NULL DEFAULT '', + comment_author_email TEXT NOT NULL DEFAULT '', + comment_author_url TEXT NOT NULL DEFAULT '', + comment_author_IP TEXT NOT NULL DEFAULT '', + comment_date TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + comment_date_gmt TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + comment_content TEXT NOT NULL DEFAULT '', + comment_karma INTEGER NOT NULL DEFAULT 0, + comment_approved TEXT NOT NULL DEFAULT '1', + comment_agent TEXT NOT NULL DEFAULT '', + comment_type TEXT NOT NULL DEFAULT '', + comment_parent INTEGER NOT NULL DEFAULT 0, + user_id INTEGER NOT NULL DEFAULT 0 + )", + 'options' => "CREATE TABLE IF NOT EXISTS {$prefix}options ( + option_id INTEGER PRIMARY KEY AUTOINCREMENT, + blog_id INTEGER NOT NULL DEFAULT 0, + option_name TEXT NOT NULL DEFAULT '', + option_can_override TEXT NOT NULL DEFAULT 'Y', + option_type INTEGER NOT NULL DEFAULT 1, + option_value TEXT NOT NULL DEFAULT '', + option_width INTEGER NOT NULL DEFAULT 20, + option_height INTEGER NOT NULL DEFAULT 8, + option_description TEXT NOT NULL DEFAULT '', + option_admin_level INTEGER NOT NULL DEFAULT 1, + autoload TEXT NOT NULL DEFAULT 'yes' + )", + 'postmeta' => "CREATE TABLE IF NOT EXISTS {$prefix}postmeta ( + meta_id INTEGER PRIMARY KEY AUTOINCREMENT, + post_id INTEGER NOT NULL DEFAULT 0, + meta_key TEXT NOT NULL DEFAULT '', + meta_value TEXT NOT NULL DEFAULT '' + )", + 'links' => "CREATE TABLE IF NOT EXISTS {$prefix}links ( + link_id INTEGER PRIMARY KEY AUTOINCREMENT, + link_url TEXT NOT NULL DEFAULT '', + link_name TEXT NOT NULL DEFAULT '', + link_image TEXT NOT NULL DEFAULT '', + link_target TEXT NOT NULL DEFAULT '', + link_category INTEGER NOT NULL DEFAULT 0, + link_description TEXT NOT NULL DEFAULT '', + link_visible TEXT NOT NULL DEFAULT 'Y', + link_owner INTEGER NOT NULL DEFAULT 1, + link_rating INTEGER NOT NULL DEFAULT 0, + link_updated TEXT NOT NULL DEFAULT '0000-00-00 00:00:00', + link_rel TEXT NOT NULL DEFAULT '', + link_notes TEXT NOT NULL DEFAULT '', + link_rss TEXT NOT NULL DEFAULT '' + )", + 'linkcategories' => "CREATE TABLE IF NOT EXISTS {$prefix}linkcategories ( + cat_id INTEGER PRIMARY KEY AUTOINCREMENT, + cat_name TEXT NOT NULL DEFAULT '', + auto_toggle TEXT NOT NULL DEFAULT 'N', + show_images TEXT NOT NULL DEFAULT 'Y', + show_description TEXT NOT NULL DEFAULT 'N', + show_rating TEXT NOT NULL DEFAULT 'Y', + show_updated TEXT NOT NULL DEFAULT 'Y', + sort_order TEXT NOT NULL DEFAULT 'name', + sort_desc TEXT NOT NULL DEFAULT 'ASC', + text_before_link TEXT NOT NULL DEFAULT '
  • ', + text_after_link TEXT NOT NULL DEFAULT '
    ', + text_after_all TEXT NOT NULL DEFAULT '
  • ', + list_limit INTEGER NOT NULL DEFAULT -1 + )", + 'optiongroups' => "CREATE TABLE IF NOT EXISTS {$prefix}optiongroups ( + group_id INTEGER PRIMARY KEY AUTOINCREMENT, + group_name TEXT NOT NULL DEFAULT '', + group_desc TEXT DEFAULT '', + group_longdesc TEXT DEFAULT '' + )", + 'optiongroup_options' => "CREATE TABLE IF NOT EXISTS {$prefix}optiongroup_options ( + group_id INTEGER NOT NULL DEFAULT 0, + option_id INTEGER NOT NULL DEFAULT 0, + seq INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY (group_id, option_id) + )" + ); + foreach ($tables_sql as $t => $sql) { + try { $pdo->exec($sql); } catch (Exception $e) {} + } + // Add missing columns to existing tables (for WP 1.0-1.2 + // where the install creates tables with fewer columns). + $alter_cols = array( + 'categories' => array( + 'category_nicename' => "TEXT NOT NULL DEFAULT ''", + 'category_description' => "TEXT NOT NULL DEFAULT ''", + 'category_parent' => "INTEGER NOT NULL DEFAULT 0", + 'category_count' => "INTEGER NOT NULL DEFAULT 0", + ), + // WP 1.5+ reads comment_count directly off wp_posts in + // get_comments_number(). The WP 1.x legacy schemas above + // don't include it, so back-fill the column if missing. + 'posts' => array( + 'comment_count' => "INTEGER NOT NULL DEFAULT 0", + ), + ); + foreach ($alter_cols as $t => $cols_to_add) { + try { + $existing = $pdo->query("PRAGMA table_info({$prefix}{$t})")->fetchAll(PDO::FETCH_COLUMN, 1); + foreach ($cols_to_add as $col => $type) { + if (!in_array($col, $existing)) { + $pdo->exec("ALTER TABLE {$prefix}{$t} ADD COLUMN {$col} {$type}"); + } + } + } catch (Exception $e) {} + } + // Seed default data — use dynamic column detection + // to handle varying schemas across WP versions. + try { + if (!$pdo->query("SELECT COUNT(*) FROM {$prefix}posts")->fetchColumn()) { + $post_cols = $pdo->query("PRAGMA table_info({$prefix}posts)")->fetchAll(PDO::FETCH_COLUMN, 1); + $post_vals = array( + 'ID' => '1', 'post_author' => '1', + 'post_date' => "'{$now}'", 'post_date_gmt' => "'{$now_gmt}'", + 'post_content' => "'Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!'", + 'post_title' => "'Hello world!'", 'post_excerpt' => "''", + 'post_status' => "'publish'", 'comment_status' => "'open'", + 'ping_status' => "'open'", 'post_password' => "''", + 'post_name' => "'hello-world'", 'to_ping' => "''", 'pinged' => "''", + 'post_modified' => "'{$now}'", 'post_modified_gmt' => "'{$now_gmt}'", + 'post_content_filtered' => "''", + ); + $ins_c = array(); $ins_v = array(); + foreach ($post_vals as $c => $v) { + if (in_array($c, $post_cols)) { $ins_c[] = $c; $ins_v[] = $v; } + } + if ($ins_c) $pdo->exec("INSERT INTO {$prefix}posts (" . implode(',', $ins_c) . ") VALUES (" . implode(',', $ins_v) . ")"); + } + } catch (Exception $e) {} + try { + if (!$pdo->query("SELECT COUNT(*) FROM {$prefix}categories")->fetchColumn()) { + $pdo->exec("INSERT INTO {$prefix}categories (cat_ID, cat_name, category_nicename, category_description, category_parent) VALUES (1, 'Uncategorized', 'uncategorized', '', 0)"); + } + } catch (Exception $e) {} + try { + $env_site = getenv('PLAYGROUND_SITE_URL'); + $site = $env_site ? $env_site : 'http://localhost'; + if (!$pdo->query("SELECT COUNT(*) FROM {$prefix}options WHERE option_name='siteurl'")->fetchColumn()) { + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value) VALUES ('siteurl', '{$site}')"); + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value) VALUES ('blogname', 'My WordPress Website')"); + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value) VALUES ('blogdescription', 'Just another WordPress weblog')"); + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value) VALUES ('home', '{$site}')"); + } + // Always update siteurl/home to the scoped Playground + // URL. preCreateLegacyTables seeds 'http://localhost' + // which breaks CSS/JS paths when the actual URL has a + // scope prefix. + if ($env_site) { + $pdo->exec("UPDATE {$prefix}options SET option_value = '{$env_site}' WHERE option_name = 'siteurl'"); + $pdo->exec("UPDATE {$prefix}options SET option_value = '{$env_site}' WHERE option_name = 'home'"); + } + // Ensure template/stylesheet options exist. The WP + // installer sets these via populate_options(), but if + // the install crashes before that runs, WP can't find + // any theme and the front page fatals. + if (!$pdo->query("SELECT COUNT(*) FROM {$prefix}options WHERE option_name='template'")->fetchColumn()) { + // Detect the first available theme directory. + $themes_dir = getenv('DOCUMENT_ROOT') . '/wp-content/themes/'; + $tpl = 'default'; + if (is_dir($themes_dir)) { + $entries = glob($themes_dir . '*', GLOB_ONLYDIR); + if ($entries) { + foreach ($entries as $e) { + $name = basename($e); + if ($name === '.' || $name === '..') continue; + if (file_exists($e . '/style.css')) { + $tpl = $name; + break; + } + } + } + } + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value, autoload) VALUES ('template', '{$tpl}', 'yes')"); + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value, autoload) VALUES ('stylesheet', '{$tpl}', 'yes')"); + } + // Ensure db_version matches $wp_db_version from version.php. + // Without this, WP 2.0-2.5 admin redirects to upgrade.php + // with "Your database is out of date" because populate_options() + // may have crashed before setting the correct db_version. + $version_path = getenv('DOCUMENT_ROOT') . '/wp-includes/version.php'; + if (file_exists($version_path)) { + $wp_db_version = 0; + include $version_path; + if ($wp_db_version > 0) { + $has_dbv = $pdo->query("SELECT COUNT(*) FROM {$prefix}options WHERE option_name='db_version'")->fetchColumn(); + if (!$has_dbv) { + $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value, autoload) VALUES ('db_version', '{$wp_db_version}', 'yes')"); + } else { + $pdo->exec("UPDATE {$prefix}options SET option_value = '{$wp_db_version}' WHERE option_name = 'db_version'"); + } + } + } + } catch (Exception $e) {} + `, + env: { + DOCUMENT_ROOT: php.documentRoot, + PLAYGROUND_SITE_URL: siteUrl || '', + }, + }); + } catch (error) { + // Non-fatal: PDO fallback may fail if SQLite isn't available + logger.warn('Legacy WP PDO fallback failed (non-fatal):', error); + } +} diff --git a/packages/playground/wordpress/src/mysql-shims.ts b/packages/playground/wordpress/src/mysql-shims.ts new file mode 100644 index 0000000000..1b7ca97f3a --- /dev/null +++ b/packages/playground/wordpress/src/mysql-shims.ts @@ -0,0 +1,145 @@ +/** + * PHP code that provides functional mysql_* function stubs. + * + * WP 1.x calls mysql_query(), mysql_list_tables(), mysql_fetch_row(), + * etc. directly (not through $wpdb). These stubs delegate to $wpdb + * (the SQLite driver) so the queries actually execute. + * + * A global array $_mysql_results tracks result sets returned by + * mysql_query() and mysql_list_tables(), keyed by an integer ID. + * mysql_fetch_row/mysql_fetch_object consume rows from these. + * + * All stubs are guarded by function_exists() so they're safe to + * include multiple times or alongside real mysql_* extensions. + * + * This constant is interpolated into PHP template literals in both + * boot.ts (db.php for WP < 3.0) and index.ts (0-sqlite.php preload). + */ +export const MYSQL_SHIMS_PHP = ` +// WordPress < 3.0 wpdb::__construct calls mysql_set_charset directly. +if (!function_exists('mysql_set_charset')) { + function mysql_set_charset() { return true; } +} +// Functional mysql_* stubs that delegate to $wpdb (SQLite driver). +$GLOBALS['_mysql_results'] = array(); +$GLOBALS['_mysql_result_id'] = 0; +if (!function_exists('mysql_query')) { + function mysql_query($query, $link = null) { + global $wpdb; + if (isset($wpdb) && method_exists($wpdb, 'query')) { + $wpdb->query($query); + if (preg_match('/^\\s*(SELECT|SHOW|DESCRIBE|EXPLAIN)/i', $query)) { + $rows = isset($wpdb->last_result) ? $wpdb->last_result : array(); + $id = ++$GLOBALS['_mysql_result_id']; + $GLOBALS['_mysql_results'][$id] = array( + 'rows' => $rows, + 'index' => 0, + ); + return $id; + } + return true; + } + return false; + } +} +if (!function_exists('mysql_error')) { + function mysql_error($link = null) { + global $wpdb; + if (isset($wpdb) && isset($wpdb->last_error)) { + return $wpdb->last_error; + } + return ''; + } +} +if (!function_exists('mysql_list_tables')) { + function mysql_list_tables($db = '', $link = null) { + global $wpdb; + if (isset($wpdb) && method_exists($wpdb, 'get_results')) { + $tables = $wpdb->get_results( + "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name" + ); + $rows = array(); + if ($tables) { + foreach ($tables as $t) { + $obj = new stdClass(); + $obj->name = is_object($t) ? $t->name : $t['name']; + $rows[] = $obj; + } + } + $id = ++$GLOBALS['_mysql_result_id']; + $GLOBALS['_mysql_results'][$id] = array( + 'rows' => $rows, + 'index' => 0, + ); + return $id; + } + return false; + } +} +if (!function_exists('mysql_fetch_row')) { + function mysql_fetch_row($result) { + if (!isset($GLOBALS['_mysql_results'][$result])) return null; + $r = &$GLOBALS['_mysql_results'][$result]; + if ($r['index'] >= count($r['rows'])) return null; + $row = $r['rows'][$r['index']++]; + return array_values((array)$row); + } +} +if (!function_exists('mysql_fetch_object')) { + function mysql_fetch_object($result) { + if (!isset($GLOBALS['_mysql_results'][$result])) return null; + $r = &$GLOBALS['_mysql_results'][$result]; + if ($r['index'] >= count($r['rows'])) return null; + return (object)(array)$r['rows'][$r['index']++]; + } +} +if (!function_exists('mysql_num_rows')) { + function mysql_num_rows($result) { + if (isset($GLOBALS['_mysql_results'][$result])) { + return count($GLOBALS['_mysql_results'][$result]['rows']); + } + return 0; + } +} +if (!function_exists('mysql_get_server_info')) { + function mysql_get_server_info() { return '8.0.0'; } +} +if (!function_exists('mysql_affected_rows')) { + function mysql_affected_rows() { + global $wpdb; + if (isset($wpdb) && isset($wpdb->rows_affected)) { + return $wpdb->rows_affected; + } + return 0; + } +} +if (!function_exists('mysql_insert_id')) { + function mysql_insert_id() { + global $wpdb; + if (isset($wpdb) && isset($wpdb->insert_id)) { + return $wpdb->insert_id; + } + return 0; + } +} +if (!function_exists('mysql_free_result')) { + function mysql_free_result($result) { + unset($GLOBALS['_mysql_results'][$result]); + return true; + } +} +if (!function_exists('mysql_num_fields')) { + function mysql_num_fields($result) { + if (isset($GLOBALS['_mysql_results'][$result]) + && !empty($GLOBALS['_mysql_results'][$result]['rows'])) { + return count((array)$GLOBALS['_mysql_results'][$result]['rows'][0]); + } + return 0; + } +} +if (!function_exists('mysql_real_escape_string')) { + function mysql_real_escape_string($s) { return addslashes($s); } +} +if (!function_exists('mysql_escape_string')) { + function mysql_escape_string($s) { return addslashes($s); } +}`; diff --git a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs new file mode 100644 index 0000000000..dcadd31ccc --- /dev/null +++ b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs @@ -0,0 +1,672 @@ +/** + * Tests that legacy WordPress versions (4.9 down to 1.0) boot + * successfully on PHP 5.2 with SQLite: + * + * 1. Front page loads with "Hello world!" + * 2. wp-admin dashboard loads (auto-login works) + * 3. Clicking a post title loads the single post (pretty permalinks) + * 4. Creating a new post page loads (nonces work) + * 5. Activating a plugin works (Hello Dolly) + * + * All failures are hard errors: the job should honestly reflect the + * state of legacy WordPress support. + * + * Requires the dev server to be running on port 5400 + * (started by the CI job or manually via `npm run dev`). + * + * Usage: node packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs + */ +import { chromium } from 'playwright'; + +// Every WordPress minor version from 4.9 down to 1.0. +// Versions that were never released: 1.1, 1.3, 1.4, 2.4. +// The web worker normalizes bare versions automatically (1.5 → 1.5.2, +// 2.0 → 2.0.11, etc.) and resolves them to wordpress.org downloads. +const WP_VERSIONS = [ + '4.9', + '4.8', + '4.7', + '4.6', + '4.5', + '4.4', + '4.3', + '4.2', + '4.1', + '4.0', + '3.9', + '3.8', + '3.7', + '3.6', + '3.5', + '3.4', + '3.3', + '3.2', + '3.1', + '3.0', + '2.9', + '2.8', + '2.7', + '2.6', + '2.5', + '2.3', + '2.2', + '2.1', + '2.0', + '1.5', + '1.2', + '1.0', +]; + +const PORT = 5400; +const TIMEOUT_S = 120; +const results = []; + +/** + * Finds the WordPress content frame (the one whose URL contains "scope:") + * and returns its body text once it has meaningful content. + * Returns null on timeout. + */ +async function waitForWPFrame(page, timeoutSeconds) { + for (let i = 0; i < timeoutSeconds / 3; i++) { + await page.waitForTimeout(3000); + for (const frame of page.frames()) { + try { + const furl = frame.url(); + if (!furl.includes('scope:')) continue; + const body = await frame + .locator('body') + .innerText({ timeout: 2000 }); + if (body && body.length >= 20) { + return { body, frame }; + } + } catch {} + } + } + return null; +} + +/** + * Like waitForWPFrame, but specifically waits for an admin page. + * Skips PHP error output from background requests like + * prefetchUpdateChecks, and waits for the actual admin dashboard + * or login page to appear. + */ +async function waitForAdminFrame(page, timeoutSeconds) { + for (let i = 0; i < timeoutSeconds / 3; i++) { + await page.waitForTimeout(3000); + for (const frame of page.frames()) { + try { + const furl = frame.url(); + if (!furl.includes('scope:')) continue; + const body = await frame + .locator('body') + .innerText({ timeout: 2000 }); + if (!body || body.length < 20) continue; + + // Skip frames that ONLY show a PHP error — these are + // from background requests (prefetchUpdateChecks), not + // the actual admin page. + const isOnlyError = + body.length < 300 && + (body.includes('Parse error') || + body.includes('Fatal error')); + if (isOnlyError) continue; + + // Accept admin pages, login pages, or any page with + // substantial content from a wp-admin URL. + const isAdmin = furl.includes('wp-admin'); + const isLogin = + furl.includes('wp-login') || + (body.includes('Username') && body.includes('Password')); + if (isAdmin || isLogin) { + return { body, frame }; + } + + // Also accept if the page has admin-like content + const hasAdminContent = [ + 'Dashboard', + 'Write', + 'Manage', + 'Options', + ].some((ind) => body.includes(ind)); + if (hasAdminContent) { + return { body, frame }; + } + } catch {} + } + } + return null; +} + +/** + * Checks body text for PHP errors. + * Returns the full error line (including file path and line number) + * if found, null otherwise. The returned string is not truncated — + * callers decide how much to display. + */ +function findPHPError(body) { + const errorPatterns = ['Parse error', 'Fatal error', 'database error']; + for (const pattern of errorPatterns) { + if (body.includes(pattern)) { + const line = body + .split('\n') + .find((l) => l.includes(pattern)) + ?.trim(); + return line || body.slice(0, 500).trim(); + } + } + return null; +} + +/** + * After navigating to a new-post admin page, waits for the editor + * form to finish rendering. + * + * WP 4.1 introduced auto-draft creation: `post-new.php` calls + * `get_default_post_to_edit($type, true)` which runs `wp_insert_post()` + * before emitting the editor form. The PHP process streams the admin + * navigation chrome immediately (the WP header fires before the insert), + * so `navigateViaUrlBar` can return while the page is only half- + * rendered. This helper polls the frame's full HTML until the + * `name="post_title"` input appears, a PHP error is detected, or the + * timeout expires. + * + * All other WP versions that use a new-post path already render the + * editor in the very first chunk, so the extra wait is a no-op for them. + */ +async function waitForNewPostEditorHtml(frame, timeoutSeconds = 30) { + const editorMarkers = ['name="post_title"', "name='post_title'"]; + const deadline = Date.now() + timeoutSeconds * 1000; + let html = ''; + while (Date.now() < deadline) { + try { + html = await frame.locator('body').innerHTML({ timeout: 3000 }); + } catch { + await frame.page().waitForTimeout(500); + continue; + } + if (editorMarkers.some((m) => html.includes(m))) return html; + if (findPHPError(html)) return html; + await frame.page().waitForTimeout(1000); + } + // Return whatever we have when the deadline expires so the caller can + // still classify the result (e.g. UNKNOWN / TIMEOUT) rather than + // crashing. + return html; +} + +/** + * Navigates inside the Playground via the URL bar and then waits for + * the WordPress content frame to actually navigate to `path`. + * + * The previous implementation only waited for *any* scoped frame to + * have body content, which gave false positives when the navigation + * silently failed (e.g. a 25s service worker timeout on post.php) and + * left the iframe on the previous page. We now wait for the frame URL + * to match `path` (or a redirect target different from the previous + * URL) before returning, so stale content is never reported as OK. + */ +async function navigateViaUrlBar(page, path, timeoutSeconds = 60) { + // Capture the frame URL we're navigating away from so we can tell + // when the actual navigation commits (or when a redirect lands us + // on a different page than the previous one). + const scopedBefore = page.frames().find((f) => f.url().includes('scope:')); + const urlBefore = scopedBefore?.url() || ''; + + const urlBar = page.locator('input[name="url"]'); + await urlBar.fill(path); + await urlBar.press('Enter'); + + // Poll for the scoped frame URL to change. Accept either: + // (a) the URL now includes the requested `path`, or + // (b) the URL is different from `urlBefore` (covers 302 redirects + // that land on a sibling page, e.g. WP 2.1's post.php → edit.php). + const deadline = Date.now() + timeoutSeconds * 1000; + while (Date.now() < deadline) { + await page.waitForTimeout(500); + const frame = page.frames().find((f) => f.url().includes('scope:')); + if (!frame) continue; + const url = frame.url(); + const pathStem = path.split('?')[0].split('#')[0]; + const committed = url.includes(pathStem) || url !== urlBefore; + if (!committed) continue; + try { + const body = await frame + .locator('body') + .innerText({ timeout: 2000 }); + if (body && body.length >= 20) { + return { body, frame }; + } + } catch {} + } + return null; +} + +/** + * Checks whether a body text indicates the user is logged in. + */ +function isLoggedIn(body) { + return ['Logout', 'Log Out', 'Sign Out', 'Howdy'].some((s) => + body.includes(s) + ); +} + +// WP < 2.5 uses post.php for new posts; 2.5+ uses post-new.php. +// WP 1.0-2.0 render the "new post" form via wp-admin/post.php's +// default case. WP 2.1 introduced wp-admin/post-new.php and made +// post.php redirect to edit.php, so the new-post form lives at +// post-new.php from 2.1 onward (just like modern WordPress). +const NEW_POST_URL_VERSIONS = new Set(['1.0', '1.2', '1.5', '2.0']); + +const browser = await chromium.launch({ headless: true }); + +for (const wp of WP_VERSIONS) { + const label = `WP ${wp}`; + process.stdout.write(`${label}... `); + + const url = `http://127.0.0.1:${PORT}/website-server/?php=5.2&wp=${wp}`; + + // Isolate every version in a fresh browser context so that OPFS + // (where Playground persists site state), IndexedDB, localStorage + // and cookies don't leak between versions. Without this, earlier + // versions' patched files and scopes bleed into later ones and + // the test becomes non-deterministic. + const context = await browser.newContext(); + const page = await context.newPage(); + const consoleErrors = []; + page.on('console', (msg) => { + if (msg.type() === 'error') + consoleErrors.push(msg.text().slice(0, 300)); + }); + + let frontStatus = null; + let adminStatus = null; + let postStatus = null; + let newPostStatus = null; + let pluginStatus = null; + + try { + await page.goto(url, { + timeout: 180_000, + waitUntil: 'domcontentloaded', + }); + + // --- Phase 1: Front page --- + const wp1 = await waitForWPFrame(page, TIMEOUT_S); + + if (!wp1) { + const lastError = consoleErrors[consoleErrors.length - 1] || ''; + frontStatus = { + status: 'TIMEOUT', + detail: lastError, + }; + } else { + const error = findPHPError(wp1.body); + if (error) { + frontStatus = { + status: 'ERROR', + detail: error, + body: wp1.body, + }; + } else { + const hasHelloWorld = + wp1.body.includes('Hello world') || + wp1.body.includes('Hello World'); + const hasWP = + wp1.body.includes('WordPress') || + wp1.body.includes('My WordPress') || + wp1.body.includes('My Weblog'); + + if (hasHelloWorld) { + frontStatus = { status: 'OK' }; + } else if (wp1.body.includes('Not Found') && !hasHelloWorld) { + frontStatus = { status: 'NOT_FOUND', body: wp1.body }; + } else if (hasWP) { + frontStatus = { + status: 'PARTIAL', + detail: wp1.body.slice(0, 120).replace(/\n/g, ' '), + }; + } else { + frontStatus = { + status: 'UNKNOWN', + detail: wp1.body.slice(0, 120).replace(/\n/g, ' '), + body: wp1.body, + }; + } + } + } + + // --- Phase 2: View single post (click "Hello world!") --- + if ( + wp1 && + (frontStatus.status === 'OK' || frontStatus.status === 'PARTIAL') + ) { + try { + const link = wp1.frame + .getByRole('link', { + name: 'Hello world!', + exact: true, + }) + .first(); + if ((await link.count()) > 0) { + await link.click({ timeout: 5000 }); + await page.waitForTimeout(8000); + const wp1b = await waitForWPFrame(page, 30); + if (!wp1b) { + postStatus = { status: 'TIMEOUT' }; + } else { + const hasContent = + (wp1b.body.includes('Welcome to WordPress') || + wp1b.body.includes('Hello world')) && + !wp1b.body.includes('Not Found') && + !wp1b.body.includes("can't find"); + postStatus = hasContent + ? { status: 'OK' } + : { + status: 'NOT_FOUND', + detail: wp1b.body + .slice(0, 120) + .replace(/\n/g, ' '), + }; + } + } else { + postStatus = { status: 'SKIP', detail: 'no link found' }; + } + } catch (e) { + postStatus = { status: 'CRASH', detail: e.message }; + } + } else { + postStatus = { status: 'SKIP', detail: 'front page failed' }; + } + + // --- Phase 3: Admin dashboard (auto-login) --- + if (frontStatus.status === 'OK' || frontStatus.status === 'PARTIAL') { + try { + const wp2 = await navigateViaUrlBar( + page, + '/wp-admin/', + TIMEOUT_S + ); + if (!wp2) { + adminStatus = { status: 'TIMEOUT' }; + } else { + const error = findPHPError(wp2.body); + if (error) { + adminStatus = { + status: 'ERROR', + detail: error, + body: wp2.body, + }; + } else { + const adminIndicators = [ + 'Dashboard', + 'Write', + 'Manage', + 'Options', + 'Log Out', + 'Logout', + 'Settings', + 'Posts', + 'Plugins', + 'Create New Post', + 'My Profile', + ]; + const hasAdmin = adminIndicators.some((ind) => + wp2.body.includes(ind) + ); + const loggedIn = isLoggedIn(wp2.body); + if (hasAdmin && loggedIn) { + adminStatus = { status: 'OK' }; + } else if (hasAdmin) { + adminStatus = { + status: 'OK', + detail: 'admin loaded but login state unclear', + }; + } else { + adminStatus = { + status: 'UNKNOWN', + detail: wp2.body + .slice(0, 120) + .replace(/\n/g, ' '), + body: wp2.body, + }; + } + } + } + } catch (e) { + adminStatus = { + status: 'CRASH', + detail: e.message, + }; + } + } else { + adminStatus = { status: 'SKIP', detail: 'front page failed' }; + } + + // --- Phase 4: New post page (nonce check) --- + if (adminStatus && adminStatus.status === 'OK') { + try { + const newPostPath = NEW_POST_URL_VERSIONS.has(wp) + ? '/wp-admin/post.php' + : '/wp-admin/post-new.php'; + const wp3 = await navigateViaUrlBar(page, newPostPath, 30); + if (!wp3) { + newPostStatus = { status: 'TIMEOUT' }; + } else { + // Check both innerText and innerHTML for PHP + // errors — some errors land inside hidden elements + // (e.g. WP 3.3's contextual-help sidebar) and + // don't appear in innerText. + // waitForNewPostEditorHtml polls until the editor form + // is fully rendered; this is needed for WP 4.1 which + // creates an auto-draft before emitting the form, so + // the nav chrome arrives before the editor body. + const html = await waitForNewPostEditorHtml(wp3.frame, 30); + // Use the fully-rendered HTML for all checks. + // wp3.body (innerText) may only contain the admin + // navigation chrome if PHP was still running when + // navigateViaUrlBar returned (e.g. WP 4.1 auto-draft). + const bodyText = await wp3.frame + .locator('body') + .innerText({ timeout: 2000 }) + .catch(() => wp3.body); + + const error = findPHPError(bodyText) || findPHPError(html); + + const bad = + bodyText.includes('Are you sure') || + bodyText.includes('not allowed') || + bodyText.includes('sufficient permissions'); + // Require a marker that actually indicates the new + // post editor (not random dashboard nav strings). + // `` is present on every WP + // from 1.0 onward via the edit-form template; the + // visible editor headings cover all header variants. + const hasEditor = + html.includes('name="post_title"') || + html.includes("name='post_title'") || + bodyText.includes('Write Post') || + bodyText.includes('Add New Post') || + bodyText.includes('Create New Post') || + bodyText.includes('New Post'); + if (error) { + newPostStatus = { + status: 'ERROR', + detail: error, + }; + } else if (bad) { + newPostStatus = { + status: 'NONCE_FAIL', + detail: bodyText.includes('Are you sure') + ? 'nonce verification failed' + : 'permission denied', + }; + } else if (hasEditor) { + newPostStatus = { status: 'OK' }; + } else { + newPostStatus = { + status: 'UNKNOWN', + detail: bodyText.slice(0, 120).replace(/\n/g, ' '), + }; + } + } + } catch (e) { + newPostStatus = { status: 'CRASH', detail: e.message }; + } + } else { + newPostStatus = { status: 'SKIP', detail: 'admin failed' }; + } + + // --- Phase 5: Plugin activation --- + if (adminStatus && adminStatus.status === 'OK') { + try { + const wp4 = await navigateViaUrlBar( + page, + '/wp-admin/plugins.php', + 30 + ); + if (!wp4) { + pluginStatus = { status: 'TIMEOUT' }; + } else { + const activateLink = wp4.frame + .locator('a') + .filter({ hasText: 'Activate' }) + .first(); + if ((await activateLink.count()) > 0) { + await activateLink.click({ timeout: 5000 }); + await page.waitForTimeout(8000); + const wp4b = await waitForWPFrame(page, 20); + if (!wp4b) { + pluginStatus = { status: 'TIMEOUT' }; + } else { + const ok = + wp4b.body.includes('Plugin activated') || + wp4b.body.includes('Deactivate'); + const bad = wp4b.body.includes('Are you sure'); + pluginStatus = ok + ? { status: 'OK' } + : { + status: bad ? 'NONCE_FAIL' : 'UNKNOWN', + detail: wp4b.body + .slice(0, 120) + .replace(/\n/g, ' '), + }; + } + } else { + pluginStatus = { + status: 'SKIP', + detail: 'no activate link found', + }; + } + } + } catch (e) { + pluginStatus = { status: 'CRASH', detail: e.message }; + } + } else { + pluginStatus = { status: 'SKIP', detail: 'admin failed' }; + } + } catch (e) { + frontStatus = { + status: 'CRASH', + detail: e.message, + }; + adminStatus = { status: 'SKIP', detail: 'boot crashed' }; + postStatus = { status: 'SKIP', detail: 'boot crashed' }; + newPostStatus = { status: 'SKIP', detail: 'boot crashed' }; + pluginStatus = { status: 'SKIP', detail: 'boot crashed' }; + } + + const icon = (s) => + s.status === 'OK' ? '✓' : s.status === 'SKIP' ? '-' : '✗'; + const parts = [ + `front:${icon(frontStatus)}`, + `post:${icon(postStatus)}`, + `admin:${icon(adminStatus)}`, + `newpost:${icon(newPostStatus)}`, + `plugin:${icon(pluginStatus)}`, + ]; + console.log(parts.join(' ')); + + results.push({ + wp, + front: frontStatus, + post: postStatus, + admin: adminStatus, + newPost: newPostStatus, + plugin: pluginStatus, + }); + await page.close(); + await context.close(); +} + +await browser.close(); + +const PHASES = ['front', 'post', 'admin', 'newPost', 'plugin']; + +function isPass(status) { + return status.status === 'OK' || status.status === 'PARTIAL'; +} +function isSkip(status) { + return status.status === 'SKIP'; +} + +console.log(`\n${'='.repeat(70)}`); +console.log('RESULTS SUMMARY:'); +console.log(`${'='.repeat(70)}`); +for (const r of results) { + const cols = PHASES.map((p) => { + const s = r[p]; + if (!s) return '-'; + if (isPass(s)) return 'PASS'; + if (isSkip(s)) return 'skip'; + return 'FAIL'; + }); + console.log( + ` WP ${r.wp.padEnd(5)} ${cols.map((c, i) => `${PHASES[i]}:${c}`).join(' ')}` + ); +} + +const counts = {}; +for (const p of PHASES) { + const tested = results.filter((r) => r[p] && !isSkip(r[p])); + const passed = tested.filter((r) => isPass(r[p])); + counts[p] = { tested: tested.length, passed: passed.length }; +} +console.log(''); +for (const p of PHASES) { + console.log(` ${p.padEnd(8)}: ${counts[p].passed}/${counts[p].tested} OK`); +} + +// Dump per-failure diagnostic bodies. +const failures = results.filter((r) => + PHASES.some((p) => r[p] && !isPass(r[p]) && !isSkip(r[p])) +); +if (failures.length > 0) { + console.log(`\n${'='.repeat(70)}`); + console.log('FAILURE DETAILS:'); + console.log(`${'='.repeat(70)}`); + for (const r of failures) { + console.log(`\n--- WP ${r.wp} ---`); + for (const p of PHASES) { + const s = r[p]; + if (!s || isPass(s) || isSkip(s)) continue; + console.log(` ${p} [${s.status}]: ${s.detail || ''}`); + if (s.body) { + console.log( + ` body:\n${s.body.slice(0, 1000).replace(/^/gm, ' ')}` + ); + } + } + } +} + +// All non-skip failures are hard errors. +const totalFailures = results.reduce( + (n, r) => + n + PHASES.filter((p) => r[p] && !isPass(r[p]) && !isSkip(r[p])).length, + 0 +); +if (totalFailures > 0) { + console.error(`\n${totalFailures} failure(s) across all phases.`); + process.exit(1); +} From 34fe82e4ab1a4da793e2d9a84b63f6cf30b21c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Wed, 15 Apr 2026 20:09:52 +0200 Subject: [PATCH 03/24] =?UTF-8?q?Support=20WordPress=205.0=E2=80=936.2=20o?= =?UTF-8?q?n=20PHP=207.4=20and=20cover=20it=20in=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three wordpress.org-downloaded WP bootstrap issues were silently breaking modern WP 5.0–6.1 on the SQLite integration: 1. wp_check_php_mysql_versions() on WP 5.0–6.1 hard-checks extension_loaded('mysqli'), which a userland stub cannot satisfy. Patch wp-includes/load.php to use function_exists('mysqli_connect') instead — matching the fix WordPress itself shipped in 6.2. No-op on 6.2+. 2. install.php step=2 has its own mysql version check that falls through on file_exists(WP_CONTENT_DIR . '/db.php'). Write a minimal @playground-managed db.php drop-in for modern WP so that check passes; teach the preload guard to recognise our own marker and not self-skip on its own file. 3. The SQLite plugin declares private \$allow_unsafe_unquoted_parameters on WP_SQLite_DB and then calls \$this->__get() from prepare(), expecting wpdb::__get() to return the parent's property. That works on WP 6.2+ (wpdb declares the same property upstream) but triggers a silent fatal Error on older WordPress, where wpdb's __get runs \`return \$this->\$name;\` from the parent class context and PHP refuses to read a child's private member. Patch the declaration to protected so both class contexts can reach it. Additionally, WP 5.0 (Gutenberg 1.0) crashes the runtime with exit code 255 inside prefetchUpdateChecks when using the modern SQLite driver, so extend the prefetch skip range from < 5 to < 5.1. Test script: - Convert flat WP_VERSIONS list to a {wp, php} matrix so the same script can cover both the legacy (WP 1.0–4.9 + PHP 5.2) and modern (WP 5.0–6.2 + PHP 7.4) ranges. - Add WP_ONLY env filter for targeted local runs. - Editor-markers check now also recognises Gutenberg (id="editor", edit-post-layout, block-editor-writing-flow) so WP 5.0+ post-new.php passes the newPost phase. - Plugin phase targets Hello Dolly by href instead of the first Activate link, which on modern WP is Akismet and lands on a setup page without the expected confirmation strings. All 13 modern versions (5.0–6.2) now pass all 5 phases locally, and the legacy range (4.9, 3.5, 2.0, 1.2 spot-checked) is unchanged. --- .../client/src/blueprints-v1-handler.ts | 7 +- packages/playground/wordpress/src/boot.ts | 106 ++++++++++-- packages/playground/wordpress/src/index.ts | 50 ++++-- .../tests/test-legacy-wp-version-boot.mjs | 159 +++++++++++++----- 4 files changed, 249 insertions(+), 73 deletions(-) diff --git a/packages/playground/client/src/blueprints-v1-handler.ts b/packages/playground/client/src/blueprints-v1-handler.ts index 7e5655195d..34fe86fa6f 100644 --- a/packages/playground/client/src/blueprints-v1-handler.ts +++ b/packages/playground/client/src/blueprints-v1-handler.ts @@ -89,7 +89,10 @@ export class BlueprintsV1Handler { * Pre-fetch WordPress update checks to speed up the initial wp-admin load. * Skip for old WordPress versions — the functions called by prefetch * (wp_check_php_version, wp_update_plugins, etc.) don't exist or crash - * on legacy WP, and the resulting PHP errors create noise. + * on legacy WP, and the resulting PHP errors create noise. WP 5.0 + * (Gutenberg 1.0) also crashes the runtime with exit code 255 inside + * prefetchUpdateChecks when using the modern SQLite driver, so extend + * the skip range up to (but not including) WP 5.1. * * parseFloat extracts the major version from strings like "6.8", * "4.9.26", etc. Non-numeric values like "nightly" or "trunk" @@ -99,7 +102,7 @@ export class BlueprintsV1Handler { * @see https://github.com/WordPress/wordpress-playground/pull/2295 */ const wpMajor = parseFloat(runtimeConfiguration.wpVersion); - const isLegacyWpVersion = Number.isFinite(wpMajor) && wpMajor < 5; + const isLegacyWpVersion = Number.isFinite(wpMajor) && wpMajor < 5.1; if (runtimeConfiguration.networking && !isLegacyWpVersion) { await playground.prefetchUpdateChecks(); } diff --git a/packages/playground/wordpress/src/boot.ts b/packages/playground/wordpress/src/boot.ts index c33a44f9eb..f965f20e80 100644 --- a/packages/playground/wordpress/src/boot.ts +++ b/packages/playground/wordpress/src/boot.ts @@ -48,6 +48,57 @@ const LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS = [ 'curl_multi_exec', ] as const; +/** + * Minimal wp-content/db.php drop-in for modern WordPress. Its job + * is simply to exist, so WP's file_exists(WP_CONTENT_DIR . '/db.php') + * escape hatches (in wp_check_php_mysql_versions() and install.php + * step=2's mysql version check) both fall through. The real SQLite + * wiring is handled by the preloaded lazy $wpdb loader, not by this + * file — so the content is deliberately an empty, marked placeholder + * that WordPress require()s as a no-op. + */ +const MODERN_PLAYGROUND_DB_PHP = ` { + const loadPhp = joinPaths(documentRoot, 'wp-includes/load.php'); + if (!php.fileExists(loadPhp)) { + return; + } + const content = php.readFileAsText(loadPhp); + const patched = content.replace( + "extension_loaded( 'mysqli' )", + "function_exists( 'mysqli_connect' )" + ); + if (patched !== content) { + await php.writeFile(loadPhp, patched); + } +} + export type PhpIniOptions = Record; export type Hook = (php: PHP) => void | Promise; export interface Hooks { @@ -316,20 +367,49 @@ export async function bootWordPress( { phpVersion: options.phpVersion } ); - // Write wp-content/db.php with MySQL function stubs for - // legacy WordPress. WP 4.x checks extension_loaded('mysql') - // and only skips that check if wp-content/db.php exists. - // patchWpSettingsPhp() patches that check away, but only - // runs for legacy PHP. Modern WP doesn't have this check. - if (phpMajor < 7) { - const wpContentDir = joinPaths( - requestHandler.documentRoot, - 'wp-content' + // Write wp-content/db.php. Two distinct WordPress code paths + // rely on the file_exists(WP_CONTENT_DIR . '/db.php') escape + // hatch and cannot be fixed by a userland function stub: + // + // * wp-includes/load.php :: wp_check_php_mysql_versions() + // uses extension_loaded('mysqli') on WP 5.0–6.1. + // * wp-admin/install.php step=2 has its own mysql version + // check that compares $wpdb->db_version() against + // $required_mysql_version and falls through on db.php + // existence. WP_SQLite_DB's reported version does not + // satisfy WP's mysql minimum, so install dies silently + // without this file. + // + // Legacy PHP needs a full-content db.php because old + // WordPress actually uses the MySQL function stubs from it. + // Modern PHP only needs the file to exist — the preload's + // lazy $wpdb loader still owns the real connection, as long + // as the preload's guard recognises our @playground-managed + // marker and does not self-skip on our own file. + const wpContentDir = joinPaths( + requestHandler.documentRoot, + 'wp-content' + ); + const dbPhpPath = joinPaths(wpContentDir, 'db.php'); + if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { + await php.writeFile( + dbPhpPath, + phpMajor < 7 ? generateDbPhpContent() : MODERN_PLAYGROUND_DB_PHP + ); + } + + // WordPress 5.0–6.1's `wp_check_php_mysql_versions()` runs + // before `wp_initial_constants()` defines WP_CONTENT_DIR, so + // the file_exists escape hatch above alone cannot rescue the + // early check — the path collapses to 'WP_CONTENT_DIR/db.php' + // via an undefined constant. Patch wp-includes/load.php to + // use function_exists('mysqli_connect') instead, matching the + // fix WordPress itself shipped in 6.2. Also a no-op on 6.2+. + if (phpMajor >= 7) { + await patchLegacyMysqlCheckForModernWp( + php, + requestHandler.documentRoot ); - const dbPhpPath = joinPaths(wpContentDir, 'db.php'); - if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { - await php.writeFile(dbPhpPath, generateDbPhpContent()); - } } } diff --git a/packages/playground/wordpress/src/index.ts b/packages/playground/wordpress/src/index.ts index 0dd8b3247d..d909b839cb 100644 --- a/packages/playground/wordpress/src/index.ts +++ b/packages/playground/wordpress/src/index.ts @@ -961,6 +961,34 @@ export async function preloadSqliteIntegration( const phpMajor = parseInt(options.phpVersion ?? '8', 10); + // WP 5.0–6.1 compat: the SQLite plugin declares + // `private $allow_unsafe_unquoted_parameters` on WP_SQLite_DB and + // then, from `prepare()`, calls `$this->__get(...)` expecting WP's + // wpdb::__get() to return the parent's property. That works on WP + // 6.2+ (wpdb declares the same property upstream) but blows up on + // older WordPress, where wpdb's __get() runs `return $this->$name;` + // from the parent class context and PHP refuses to read a child + // class's *private* member — producing a silent fatal Error that + // kills install.php and every subsequent request. Widening the + // declaration to `protected` lets both class contexts reach it and + // leaves behaviour identical on every supported WordPress version. + if (phpMajor >= 7) { + const sqliteDbClassPath = joinPaths( + SQLITE_PLUGIN_FOLDER, + 'wp-includes/sqlite/class-wp-sqlite-db.php' + ); + if (await php.fileExists(sqliteDbClassPath)) { + const classSource = await php.readFileAsText(sqliteDbClassPath); + const patched = classSource.replace( + 'private $allow_unsafe_unquoted_parameters', + 'protected $allow_unsafe_unquoted_parameters' + ); + if (patched !== classSource) { + await php.writeFile(sqliteDbClassPath, patched); + } + } + } + // Prevents the SQLite integration from trying to call activate_plugin() await php.defineConstant('SQLITE_MAIN_FILE', '1'); const dbCopy = await php.readFileAsText( @@ -991,12 +1019,14 @@ export async function preloadSqliteIntegration( const SQLITE_MUPLUGIN_PATH = '/internal/shared/mu-plugins/sqlite-database-integration.php'; - // For legacy PHP, we write a @playground-managed db.php, so the - // preload guard must check for the marker to avoid skipping itself. - // For modern PHP, use the simpler trunk guard (skip if db.php exists). - const dbPhpGuard = - phpMajor < 7 - ? ` + // Playground writes a @playground-managed db.php drop-in for both + // legacy and modern WordPress (see boot.ts). The preload guard + // must therefore recognise our own marker and *not* skip itself + // on its own file — a blind `file_exists` guard (trunk's old + // behaviour) would short-circuit the lazy-$wpdb setup on every + // request. Only a real user-supplied db.php should abort the + // preload. + const dbPhpGuard = ` if(file_exists(${phpVar(dbPhpPath)})) { $_pg_db_php = @file_get_contents(${phpVar(dbPhpPath)}); if (strpos($_pg_db_php, '@playground-managed') === false) { @@ -1004,13 +1034,7 @@ if(file_exists(${phpVar(dbPhpPath)})) { } unset($_pg_db_php); } -` - : ` - // Do not preload this if WordPress comes with a custom db.php file. - if(file_exists(${phpVar(dbPhpPath)})) { - return; - } - `; +`; await php.writeFile(SQLITE_MUPLUGIN_PATH, `` + dbPhp); await php.writeFile( diff --git a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs index dcadd31ccc..989e0719c2 100644 --- a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs +++ b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs @@ -1,6 +1,13 @@ /** - * Tests that legacy WordPress versions (4.9 down to 1.0) boot - * successfully on PHP 5.2 with SQLite: + * Tests that legacy and mid-modern WordPress versions boot + * successfully through Playground's wordpress.org download path: + * + * - WP 1.0 – 4.9 on PHP 5.2 (legacy SQLite driver) + * - WP 5.0 – 6.2 on PHP 7.4 (modern SQLite driver) + * + * Pre-built bundled WP (6.3+) has its own coverage elsewhere. + * + * Each version is exercised through five phases: * * 1. Front page loads with "Hello world!" * 2. wp-admin dashboard loads (auto-login works) @@ -18,43 +25,61 @@ */ import { chromium } from 'playwright'; -// Every WordPress minor version from 4.9 down to 1.0. +// Matrix of (WordPress, PHP) combinations to test. // Versions that were never released: 1.1, 1.3, 1.4, 2.4. // The web worker normalizes bare versions automatically (1.5 → 1.5.2, // 2.0 → 2.0.11, etc.) and resolves them to wordpress.org downloads. +// Modern WP (5.0–6.2) is paired with PHP 7.4 because it's the newest +// PHP the legacy SQLite driver supports and is far enough from the +// PHP 5.2 leg to make regressions obvious. const WP_VERSIONS = [ - '4.9', - '4.8', - '4.7', - '4.6', - '4.5', - '4.4', - '4.3', - '4.2', - '4.1', - '4.0', - '3.9', - '3.8', - '3.7', - '3.6', - '3.5', - '3.4', - '3.3', - '3.2', - '3.1', - '3.0', - '2.9', - '2.8', - '2.7', - '2.6', - '2.5', - '2.3', - '2.2', - '2.1', - '2.0', - '1.5', - '1.2', - '1.0', + // Mid-modern WordPress (PHP 7.4). + { wp: '6.2', php: '7.4' }, + { wp: '6.1', php: '7.4' }, + { wp: '6.0', php: '7.4' }, + { wp: '5.9', php: '7.4' }, + { wp: '5.8', php: '7.4' }, + { wp: '5.7', php: '7.4' }, + { wp: '5.6', php: '7.4' }, + { wp: '5.5', php: '7.4' }, + { wp: '5.4', php: '7.4' }, + { wp: '5.3', php: '7.4' }, + { wp: '5.2', php: '7.4' }, + { wp: '5.1', php: '7.4' }, + { wp: '5.0', php: '7.4' }, + // Legacy WordPress on PHP 5.2 WASM. + { wp: '4.9', php: '5.2' }, + { wp: '4.8', php: '5.2' }, + { wp: '4.7', php: '5.2' }, + { wp: '4.6', php: '5.2' }, + { wp: '4.5', php: '5.2' }, + { wp: '4.4', php: '5.2' }, + { wp: '4.3', php: '5.2' }, + { wp: '4.2', php: '5.2' }, + { wp: '4.1', php: '5.2' }, + { wp: '4.0', php: '5.2' }, + { wp: '3.9', php: '5.2' }, + { wp: '3.8', php: '5.2' }, + { wp: '3.7', php: '5.2' }, + { wp: '3.6', php: '5.2' }, + { wp: '3.5', php: '5.2' }, + { wp: '3.4', php: '5.2' }, + { wp: '3.3', php: '5.2' }, + { wp: '3.2', php: '5.2' }, + { wp: '3.1', php: '5.2' }, + { wp: '3.0', php: '5.2' }, + { wp: '2.9', php: '5.2' }, + { wp: '2.8', php: '5.2' }, + { wp: '2.7', php: '5.2' }, + { wp: '2.6', php: '5.2' }, + { wp: '2.5', php: '5.2' }, + { wp: '2.3', php: '5.2' }, + { wp: '2.2', php: '5.2' }, + { wp: '2.1', php: '5.2' }, + { wp: '2.0', php: '5.2' }, + { wp: '1.5', php: '5.2' }, + { wp: '1.2', php: '5.2' }, + { wp: '1.0', php: '5.2' }, ]; const PORT = 5400; @@ -175,7 +200,18 @@ function findPHPError(body) { * editor in the very first chunk, so the extra wait is a no-op for them. */ async function waitForNewPostEditorHtml(frame, timeoutSeconds = 30) { - const editorMarkers = ['name="post_title"', "name='post_title'"]; + // Covers the classic editor (WP < 5.0, which renders a plain + // ) and Gutenberg (WP 5.0+, which emits + // a block editor container and React bootstrap scripts). Any one + // of these strings in the initial HTML means the post-new.php + // response reached the editor render stage successfully. + const editorMarkers = [ + 'name="post_title"', + "name='post_title'", + 'id="editor"', + 'edit-post-layout', + 'block-editor-writing-flow', + ]; const deadline = Date.now() + timeoutSeconds * 1000; let html = ''; while (Date.now() < deadline) { @@ -258,13 +294,21 @@ function isLoggedIn(body) { // post-new.php from 2.1 onward (just like modern WordPress). const NEW_POST_URL_VERSIONS = new Set(['1.0', '1.2', '1.5', '2.0']); +// Optional filter for local runs: WP_ONLY=6.2,6.1,5.9 to test a subset. +const WP_ONLY = process.env.WP_ONLY + ? new Set(process.env.WP_ONLY.split(',').map((s) => s.trim())) + : null; +const MATRIX = WP_ONLY + ? WP_VERSIONS.filter(({ wp }) => WP_ONLY.has(wp)) + : WP_VERSIONS; + const browser = await chromium.launch({ headless: true }); -for (const wp of WP_VERSIONS) { - const label = `WP ${wp}`; +for (const { wp, php } of MATRIX) { + const label = `WP ${wp} (PHP ${php})`; process.stdout.write(`${label}... `); - const url = `http://127.0.0.1:${PORT}/website-server/?php=5.2&wp=${wp}`; + const url = `http://127.0.0.1:${PORT}/website-server/?php=${php}&wp=${wp}`; // Isolate every version in a fresh browser context so that OPFS // (where Playground persists site state), IndexedDB, localStorage @@ -480,11 +524,17 @@ for (const wp of WP_VERSIONS) { // Require a marker that actually indicates the new // post editor (not random dashboard nav strings). // `` is present on every WP - // from 1.0 onward via the edit-form template; the - // visible editor headings cover all header variants. + // that uses the classic editor (WP 1.0–4.9 and WP 5.0+ + // when Gutenberg is disabled); `id="editor"`, + // `edit-post-layout` and `block-editor-writing-flow` + // cover the Gutenberg path shipped from WP 5.0 onward. + // The visible editor headings cover header variants. const hasEditor = html.includes('name="post_title"') || html.includes("name='post_title'") || + html.includes('id="editor"') || + html.includes('edit-post-layout') || + html.includes('block-editor-writing-flow') || bodyText.includes('Write Post') || bodyText.includes('Add New Post') || bodyText.includes('Create New Post') || @@ -528,10 +578,28 @@ for (const wp of WP_VERSIONS) { if (!wp4) { pluginStatus = { status: 'TIMEOUT' }; } else { - const activateLink = wp4.frame - .locator('a') + // Target Hello Dolly specifically via its href. Clicking + // the *first* Activate link lands on Akismet's setup + // page on modern WP, which doesn't include the + // "Deactivate"/"Plugin activated" indicators this phase + // looks for. Hello Dolly ("hello.php") ships with every + // modern WordPress release and activates in-place with + // no follow-up screen, so the resulting plugins.php + // reliably shows the expected confirmation. + // Fall back to the first Activate link for very old WP + // where Hello Dolly may not be present or the href + // format differs. + const helloActivate = wp4.frame + .locator('a[href*="hello.php"]') .filter({ hasText: 'Activate' }) .first(); + const activateLink = + (await helloActivate.count()) > 0 + ? helloActivate + : wp4.frame + .locator('a') + .filter({ hasText: 'Activate' }) + .first(); if ((await activateLink.count()) > 0) { await activateLink.click({ timeout: 5000 }); await page.waitForTimeout(8000); @@ -589,6 +657,7 @@ for (const wp of WP_VERSIONS) { results.push({ wp, + php, front: frontStatus, post: postStatus, admin: adminStatus, @@ -622,7 +691,7 @@ for (const r of results) { return 'FAIL'; }); console.log( - ` WP ${r.wp.padEnd(5)} ${cols.map((c, i) => `${PHASES[i]}:${c}`).join(' ')}` + ` WP ${r.wp.padEnd(5)} (PHP ${r.php}) ${cols.map((c, i) => `${PHASES[i]}:${c}`).join(' ')}` ); } @@ -646,7 +715,7 @@ if (failures.length > 0) { console.log('FAILURE DETAILS:'); console.log(`${'='.repeat(70)}`); for (const r of failures) { - console.log(`\n--- WP ${r.wp} ---`); + console.log(`\n--- WP ${r.wp} (PHP ${r.php}) ---`); for (const p of PHASES) { const s = r[p]; if (!s || isPass(s) || isSkip(s)) continue; From d1b8ba7bd32f9dfa4f9e1ebcfcd3f55019520ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Wed, 15 Apr 2026 13:13:35 +0200 Subject: [PATCH 04/24] Expose older WordPress versions in the site settings form MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the "Need an older version?" link in the Playground settings panel with a proper "Include older versions" checkbox. When checked, the WordPress version dropdown lists every minor release from 1.0 through the current minified set, grouped into "Current versions" (the minified 6.3 – 6.9 + trunk/beta bucket) and "Older versions" (non-minified 6.2 back to 1.0) with disabled separator rows. When the user picks an older version, the PHP version dropdown is automatically locked to whatever runs that WordPress: * WP 1.0 – 4.9 → PHP 5.2 (the only pre-7 WASM build we ship). * WP 5.0 – 6.2 → PHP 7.4 (safest single choice across the whole bucket; PHP 8.x is unreliable on WP 5.0 – 5.5). * WP 6.3+ → no lock, default stays RecommendedPHPVersion. Implementation notes: * Widen SiteFormData.phpVersion (and the redux SiteSettings / opfs-site-storage schema) from SupportedPHPVersion to AllPHPVersion so 5.2 is representable end-to-end. * The PHP Controller is disabled via SelectControl's own `disabled` prop, not react-hook-form's Controller.disabled — the latter nulls out the field value and breaks the unlock transition. * When the user unlocks from a legacy-locked state (e.g. 4.9 → 6.5), the effect resets phpVersion to RecommendedPHPVersion so the dropdown doesn't render a stale 5.2 that isn't in its option list. * The checkbox auto-initializes to `true` when the form loads with an already-older wpVersion, so bookmarking `?wp=4.9&php=5.2` shows the right state without the user toggling anything. * older-wordpress-versions.ts holds the hardcoded WP release list plus getForcedPhpVersionForWordPress() / isOlderWordPressVersion() helpers. --- .../older-wordpress-versions.ts | 116 +++++++++++++ .../unconnected-site-settings-form.tsx | 152 +++++++++++++----- .../src/lib/state/opfs/opfs-site-storage.ts | 6 +- .../redux/site-management-api-middleware.ts | 8 +- 4 files changed, 236 insertions(+), 46 deletions(-) create mode 100644 packages/playground/website/src/components/site-manager/site-settings-form/older-wordpress-versions.ts diff --git a/packages/playground/website/src/components/site-manager/site-settings-form/older-wordpress-versions.ts b/packages/playground/website/src/components/site-manager/site-settings-form/older-wordpress-versions.ts new file mode 100644 index 0000000000..9527e83eb4 --- /dev/null +++ b/packages/playground/website/src/components/site-manager/site-settings-form/older-wordpress-versions.ts @@ -0,0 +1,116 @@ +import type { AllPHPVersion } from '@php-wasm/universal'; + +/** + * WordPress versions that ship as non-minified downloads from + * wordpress.org (or via the Playground CORS proxy). The web worker + * handles these via its `!isMinifiedVersion` branch in + * playground-worker-endpoint-blueprints-v1.ts. + * + * Ordered newest-first so the UI dropdown shows the most recent + * older versions at the top of the "older versions" group. + */ +export const OlderWordPressVersions = [ + // WP 6.0 – 6.2 work on PHP 7.4+ but run best on PHP 8.x. Still not + // minified today, so they're fetched from wordpress.org like the + // legacy bucket. + '6.2', + '6.1', + '6.0', + // WP 5.x — PHP 5.6.20+ required; PHP 7.4 is the safest choice. + '5.9', + '5.8', + '5.7', + '5.6', + '5.5', + '5.4', + '5.3', + '5.2', + '5.1', + '5.0', + // WP 4.x — PHP 5.2.4+ required; our only 5.x WASM build is 5.2. + '4.9', + '4.8', + '4.7', + '4.6', + '4.5', + '4.4', + '4.3', + '4.2', + '4.1', + '4.0', + // WP 3.x + '3.9', + '3.8', + '3.7', + '3.6', + '3.5', + '3.4', + '3.3', + '3.2', + '3.1', + '3.0', + // WP 2.x (2.4 was never released) + '2.9', + '2.8', + '2.7', + '2.6', + '2.5', + '2.3', + '2.2', + '2.1', + '2.0', + // WP 1.x (1.1, 1.3, 1.4 were never released) + '1.5', + '1.2', + '1.0', +] as const; + +export type OlderWordPressVersion = (typeof OlderWordPressVersions)[number]; + +/** + * Returns the PHP version a given WordPress release must run on + * inside Playground, or `null` if any supported modern PHP version + * will do. + * + * - WP < 5.0 (the legacy bucket): only our PHP 5.2 WASM build works. + * WP 4.x officially requires PHP 5.2.4+, but Playground's 5.6+ + * builds have been retired so 5.2 is the only option available + * here. + * - WP 5.0 – 6.2 (the older-but-not-legacy bucket): PHP 7.4 is the + * safest single choice — old enough for WP 5.0's PHP 5.2.4 era + * code (which runs fine on 7.4) yet new enough that nothing + * depends on PHP 5 quirks. PHP 8.x would work for WP 5.6+ but not + * reliably for WP 5.0 – 5.5, so we force 7.4 across the whole + * bucket. + * - WP 6.3+ (the minified bucket): returns `null`. The UI lets the + * user pick any supported PHP version and we default to the + * recommended one. + */ +export function getForcedPhpVersionForWordPress( + wpVersion: string | undefined +): AllPHPVersion | null { + if (!wpVersion) { + return null; + } + const major = parseFloat(wpVersion); + if (!Number.isFinite(major)) { + return null; + } + if (major < 5) { + return '5.2'; + } + if (major < 6.3) { + return '7.4'; + } + return null; +} + +/** True for WP versions that live in the non-minified "older" bucket. */ +export function isOlderWordPressVersion( + wpVersion: string | undefined +): boolean { + if (!wpVersion) { + return false; + } + return (OlderWordPressVersions as readonly string[]).includes(wpVersion); +} diff --git a/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx b/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx index a1eccf6abb..7303809553 100644 --- a/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx +++ b/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx @@ -1,13 +1,18 @@ -import type { SupportedPHPVersion } from '@php-wasm/universal'; +import type { AllPHPVersion } from '@php-wasm/universal'; import { SupportedPHPVersionsList } from '@php-wasm/universal'; import css from './style.module.css'; import { CheckboxControl, SelectControl } from '@wordpress/components'; -import { useEffect, useMemo } from 'react'; -import { Controller, useForm } from 'react-hook-form'; +import { useEffect, useMemo, useState } from 'react'; +import { Controller, useForm, useWatch } from 'react-hook-form'; import classNames from 'classnames'; import { __experimentalVStack as VStack } from '@wordpress/components'; import { useSupportedWordPressVersions } from './use-supported-wordpress-versions'; import { RecommendedPHPVersion } from '@wp-playground/common'; +import { + getForcedPhpVersionForWordPress, + isOlderWordPressVersion, + OlderWordPressVersions, +} from './older-wordpress-versions'; type ConfigurableFields = Record< keyof SiteFormData & ('wpVersion' | 'language' | 'multisite'), @@ -24,7 +29,7 @@ export interface SiteSettingsFormProps { } export interface SiteFormData { - phpVersion: SupportedPHPVersion; + phpVersion: AllPHPVersion; wpVersion: string; language: string; withNetworking: boolean; @@ -45,7 +50,7 @@ export function UnconnectedSiteSettingsForm({ }: SiteSettingsFormProps) { const mergedDefaults = useMemo( () => ({ - phpVersion: RecommendedPHPVersion as SupportedPHPVersion, + phpVersion: RecommendedPHPVersion as AllPHPVersion, wpVersion: 'latest', language: '', withNetworking: true, @@ -68,6 +73,16 @@ export function UnconnectedSiteSettingsForm({ const { supportedWPVersions, latestWPVersion } = useSupportedWordPressVersions(); + // If the caller restored a stored site running an older WP + // version, expand the dropdown automatically so the current + // value is visible in the list. + const [includeOlderVersions, setIncludeOlderVersions] = useState(() => + isOlderWordPressVersion(mergedDefaults.wpVersion) + ); + + const currentWpVersion = useWatch({ control, name: 'wpVersion' }); + const forcedPhpVersion = getForcedPhpVersionForWordPress(currentWpVersion); + useEffect(() => { if ( latestWPVersion && @@ -77,6 +92,81 @@ export function UnconnectedSiteSettingsForm({ } }, [latestWPVersion, setValue, getValues]); + // Lock phpVersion to whatever is compatible with the selected + // WordPress release. The callback fires on every wpVersion + // change, so picking a different modern version (say 6.5 → 4.9) + // correctly downgrades PHP, and picking 4.9 → 6.5 releases the + // lock back to the recommended default. + useEffect(() => { + const current = getValues('phpVersion'); + if (forcedPhpVersion) { + if (current !== forcedPhpVersion) { + setValue('phpVersion', forcedPhpVersion); + } + return; + } + // Unlocking: if the current value isn't one of the modern + // supported versions (e.g. it was just 5.2 or 7.4 for a + // locked older WP), reset to the recommended default so the + // dropdown doesn't render a value that isn't in its options. + if ( + !(SupportedPHPVersionsList as readonly string[]).includes(current) + ) { + setValue('phpVersion', RecommendedPHPVersion as AllPHPVersion); + } + }, [forcedPhpVersion, setValue, getValues]); + + const wpVersionOptions = useMemo(() => { + const modernOptions = Object.keys(supportedWPVersions || {}).map( + (version) => ({ + label: `${supportedWPVersions[version]}`, + value: version, + }) + ); + if (!includeOlderVersions) { + return [ + // Without an empty option, React sometimes says the + // current selected version is "trunk" when `wp` is + // actually "6.4". + { label: '-- Select a version --', value: '' }, + ...modernOptions, + ]; + } + return [ + { label: '-- Select a version --', value: '' }, + { + label: '── Current versions ──', + value: '__modern_sep', + disabled: true, + }, + ...modernOptions, + { + label: '── Older versions ──', + value: '__older_sep', + disabled: true, + }, + ...OlderWordPressVersions.map((version) => ({ + label: version, + value: version, + })), + ]; + }, [supportedWPVersions, includeOlderVersions]); + + const phpVersionOptions = useMemo(() => { + if (forcedPhpVersion) { + return [ + { + label: `PHP ${forcedPhpVersion}`, + value: forcedPhpVersion, + }, + ]; + } + return SupportedPHPVersionsList.map((version) => ({ + label: `PHP ${version}`, + value: version, + })); + }, [forcedPhpVersion]); + return (
    ({ - label: `${supportedWPVersions[version]}`, - value: version, - })), - ] - } + options={wpVersionOptions} onChange={(value, extra) => { onChange(extra?.event); }} @@ -131,14 +203,16 @@ export function UnconnectedSiteSettingsForm({ /> {enabledFields.wpVersion && ( - - Need an older version? - + )} )} @@ -159,16 +233,16 @@ export function UnconnectedSiteSettingsForm({ __nextHasNoMarginBottom={true} label="PHP Version" labelPosition="side" - help={errors.phpVersion?.message} + disabled={!!forcedPhpVersion} + help={ + forcedPhpVersion + ? `Locked to PHP ${forcedPhpVersion} for this WordPress version.` + : errors.phpVersion?.message + } className={classNames(css.addSiteInput, { [css.invalidInput]: !!errors.phpVersion, })} - options={SupportedPHPVersionsList.map( - (version) => ({ - label: `PHP ${version}`, - value: version, - }) - )} + options={phpVersionOptions} onChange={(value, extra) => { onChange(extra?.event); }} diff --git a/packages/playground/website/src/lib/state/opfs/opfs-site-storage.ts b/packages/playground/website/src/lib/state/opfs/opfs-site-storage.ts index 201ab11cd5..5641ca8dfd 100644 --- a/packages/playground/website/src/lib/state/opfs/opfs-site-storage.ts +++ b/packages/playground/website/src/lib/state/opfs/opfs-site-storage.ts @@ -15,7 +15,7 @@ import { type PHPConstants, getBlueprintDeclaration, } from '@wp-playground/blueprints'; -import type { SupportedPHPVersion } from '@php-wasm/universal'; +import type { AllPHPVersion } from '@php-wasm/universal'; import { RecommendedPHPVersion } from '@wp-playground/common'; import { loadPersistedBlueprintBundle } from './opfs-blueprint-bundle-storage'; @@ -210,7 +210,7 @@ function storedFormatToMetadata(data: string) { * The preferred PHP version to use. * If not specified, the latest supported version will be used */ - php: SupportedPHPVersion | 'latest'; + php: AllPHPVersion | 'latest'; /** * The preferred WordPress version to use. * If not specified, the latest supported version will be used @@ -234,7 +234,7 @@ function storedFormatToMetadata(data: string) { metadata.runtimeConfiguration = { phpVersion: - (legacyConfig.preferredVersions?.php as SupportedPHPVersion) ?? + (legacyConfig.preferredVersions?.php as AllPHPVersion) ?? RecommendedPHPVersion, wpVersion: legacyConfig.preferredVersions?.wp ?? 'latest', intl: legacyConfig.features?.intl ?? false, diff --git a/packages/playground/website/src/lib/state/redux/site-management-api-middleware.ts b/packages/playground/website/src/lib/state/redux/site-management-api-middleware.ts index 4281c79b93..09b9757008 100644 --- a/packages/playground/website/src/lib/state/redux/site-management-api-middleware.ts +++ b/packages/playground/website/src/lib/state/redux/site-management-api-middleware.ts @@ -18,10 +18,10 @@ import { randomSiteName } from './random-site-name'; import { persistTemporarySite } from './persist-temporary-site'; import { selectClientBySiteSlug } from './slice-clients'; import type { PlaygroundClient } from '@wp-playground/remote'; -import type { SupportedPHPVersion } from '@php-wasm/universal'; +import type { AllPHPVersion } from '@php-wasm/universal'; export interface SiteSettings { - phpVersion?: SupportedPHPVersion; + phpVersion?: AllPHPVersion; wpVersion?: string; networking?: boolean; language?: string; @@ -92,7 +92,7 @@ export interface PlaygroundSitesAPI { * @param version The PHP version to use (e.g. `"8.4"`). * @throws When no site is selected or the site is temporary. */ - setPhpVersion(version: SupportedPHPVersion): Promise; + setPhpVersion(version: AllPHPVersion): Promise; /** * Enables or disables network access for the active site @@ -238,7 +238,7 @@ export function createSitesAPI( return { slug: site.slug, storage }; }, - async setPhpVersion(version: SupportedPHPVersion) { + async setPhpVersion(version: AllPHPVersion) { const site = selectActiveSite(getState()); if (!site) { throw new Error('No active site selected'); From dd1c519505916443fe0774e2a4a3cc1d2abc008d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Wed, 15 Apr 2026 20:27:16 +0200 Subject: [PATCH 05/24] Label WordPress versions with their release code names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Show each WordPress release's jazz-musician shorthand next to its number in the Site Settings version picker (e.g. "6.9 (Gene)", "4.9 (Tipton)"). Labels without a matching release — trunk, beta, and pre-release majors — stay unchanged. The mapping uses the single-word shorthand each release's announcement URL on wordpress.org/news carries (first name, last name, or nickname, depending on the release). --- .../unconnected-site-settings-form.tsx | 7 +- .../wordpress-release-names.ts | 70 +++++++++++++++++++ 2 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 packages/playground/website/src/components/site-manager/site-settings-form/wordpress-release-names.ts diff --git a/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx b/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx index 7303809553..297a4e2485 100644 --- a/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx +++ b/packages/playground/website/src/components/site-manager/site-settings-form/unconnected-site-settings-form.tsx @@ -13,6 +13,7 @@ import { isOlderWordPressVersion, OlderWordPressVersions, } from './older-wordpress-versions'; +import { formatWordPressVersionLabel } from './wordpress-release-names'; type ConfigurableFields = Record< keyof SiteFormData & ('wpVersion' | 'language' | 'multisite'), @@ -119,7 +120,9 @@ export function UnconnectedSiteSettingsForm({ const wpVersionOptions = useMemo(() => { const modernOptions = Object.keys(supportedWPVersions || {}).map( (version) => ({ - label: `${supportedWPVersions[version]}`, + label: formatWordPressVersionLabel( + `${supportedWPVersions[version]}` + ), value: version, }) ); @@ -146,7 +149,7 @@ export function UnconnectedSiteSettingsForm({ disabled: true, }, ...OlderWordPressVersions.map((version) => ({ - label: version, + label: formatWordPressVersionLabel(version), value: version, })), ]; diff --git a/packages/playground/website/src/components/site-manager/site-settings-form/wordpress-release-names.ts b/packages/playground/website/src/components/site-manager/site-settings-form/wordpress-release-names.ts new file mode 100644 index 0000000000..e710926d3b --- /dev/null +++ b/packages/playground/website/src/components/site-manager/site-settings-form/wordpress-release-names.ts @@ -0,0 +1,70 @@ +/** + * Release code names for WordPress versions, taken from the shorthand + * each release's announcement URL uses on wordpress.org/news (e.g. + * `/news/2025/12/gene/` → "Gene" for 6.9). The full jazz-musician names + * are listed at https://wordpress.org/about/history/. + */ +export const WordPressReleaseNames: Record = { + '1.0': 'Miles', + '1.2': 'Mingus', + '1.5': 'Strayhorn', + '2.0': 'Duke', + '2.1': 'Ella', + '2.2': 'Getz', + '2.3': 'Dexter', + '2.5': 'Brecker', + '2.6': 'Tyner', + '2.7': 'Coltrane', + '2.8': 'Baker', + '2.9': 'Carmen', + '3.0': 'Thelonious', + '3.1': 'Reinhardt', + '3.2': 'Gershwin', + '3.3': 'Sonny', + '3.4': 'Green', + '3.5': 'Elvin', + '3.6': 'Oscar', + '3.7': 'Basie', + '3.8': 'Parker', + '3.9': 'Smith', + '4.0': 'Benny', + '4.1': 'Dinah', + '4.2': 'Powell', + '4.3': 'Billie', + '4.4': 'Clifford', + '4.5': 'Coleman', + '4.6': 'Pepper', + '4.7': 'Vaughan', + '4.8': 'Evans', + '4.9': 'Tipton', + '5.0': 'Bebo', + '5.1': 'Betty', + '5.2': 'Jaco', + '5.3': 'Kirk', + '5.4': 'Adderley', + '5.5': 'Eckstine', + '5.6': 'Simone', + '5.7': 'Esperanza', + '5.8': 'Tatum', + '5.9': 'Joséphine', + '6.0': 'Arturo', + '6.1': 'Misha', + '6.2': 'Dolphy', + '6.3': 'Lionel', + '6.4': 'Shirley', + '6.5': 'Regina', + '6.6': 'Dorsey', + '6.7': 'Rollins', + '6.8': 'Cecil', + '6.9': 'Gene', +}; + +/** + * Decorates a WordPress version label with its release code name when + * one is known, e.g. "6.9" → "6.9 (Gene)". Labels that don't map to a + * released version (trunk, beta, unreleased majors) are returned as-is. + */ +export function formatWordPressVersionLabel(label: string): string { + const name = WordPressReleaseNames[label]; + return name ? `${label} (${name})` : label; +} From 26f0a2961f2e9738d56e1f990da9f0cf0d6200cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Thu, 16 Apr 2026 10:47:33 +0200 Subject: [PATCH 06/24] Inline TinyMCE content_css to fix service worker gap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TinyMCE loads its content_css (editor styles, dashicons, theme CSS) via tags inside an about:blank iframe it creates for the editing area. The Playground service worker cannot intercept sub-resource requests from about:blank documents, so those CSS files return 404 — visible as "Failed to load content css" in TinyMCE's notification bar. This affects all WP versions that use TinyMCE (3.9–4.9, and modern WP with Classic Editor) on both localhost and 127.0.0.1 with a fresh browser context. Add a mu-plugin that hooks tiny_mce_before_init, reads each content_css file from disk, and passes the combined CSS inline via TinyMCE's content_style setting. This bypasses the network request entirely. Written in PHP 5.2-compatible syntax so it works across all supported PHP versions. --- packages/playground/wordpress/src/index.ts | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/packages/playground/wordpress/src/index.ts b/packages/playground/wordpress/src/index.ts index d909b839cb..5232d3d14e 100644 --- a/packages/playground/wordpress/src/index.ts +++ b/packages/playground/wordpress/src/index.ts @@ -822,6 +822,43 @@ function playground_load_mu_plugins() { ` ); + // TinyMCE's editor iframe uses document.open(), which creates a + // document not controlled by the service worker. Sub-resource + // requests from it (content_css) bypass the SW and 404. + // Inline the CSS via content_style so no network request is needed. + await php.writeFile( + '/internal/shared/mu-plugins/inline-tinymce-content-css.php', + ` Date: Fri, 17 Apr 2026 09:39:29 +0200 Subject: [PATCH 07/24] Isolate legacy WP logic under a dedicated legacy-wp/ directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Everything a legacy WordPress / legacy PHP setup needs now lives under packages/playground/wordpress/src/legacy-wp/: * legacy-boot.ts — bootLegacyWordPress(), the self-contained entry point mirroring bootWordPress's step ordering for PHP 5.2 + WP 1.0–4.9 on SQLite. Also hosts applyLegacyPhpIniOverrides (called from bootRequestHandler). * legacy-fixes.ts — WordPress source-file patches (patchWordPressSourceFiles, backportWpPreV62MysqlCheck), generateDbPhpContent, runPostInstallLegacyFixups, and the LEGACY_WP_ERROR_REPORTING_* constants. * mysql-shims.ts — PHP shims for mysql_* / mysqli_* APIs that old WP expects. boot.ts stays modern-first: a single `if (isLegacyPHPVersion(options.phpVersion)) return bootLegacyWordPress(...)` dispatches at the top of bootWordPress, and the body has zero legacy conditionals. assertValidDatabaseConnection no longer takes a phpVersion param — only the modern path reaches it. The installWordPressSafe + assertValidDatabaseConnectionSafe wrappers are gone; each boot path owns its own error handling. Also: * Gate backportWpPreV62MysqlCheck explicitly to WP 5.0–6.1 (renamed from patchLegacyMysqlCheckForModernWp); skip the placeholder db.php write on WP 6.2+ so modern trunk behaviour is preserved. * Replace parseInt(phpVersion, 10) < 7 checks with isLegacyPHPVersion() so non-numeric values like 'latest' never slip into the legacy branch. --- packages/playground/wordpress/src/boot.ts | 624 +++--------------- .../wordpress/src/database-prerequisites.ts | 75 +++ packages/playground/wordpress/src/index.ts | 4 +- .../wordpress/src/legacy-wp/legacy-boot.ts | 410 ++++++++++++ .../legacy-fixes.ts} | 102 ++- .../src/{ => legacy-wp}/mysql-shims.ts | 0 6 files changed, 658 insertions(+), 557 deletions(-) create mode 100644 packages/playground/wordpress/src/database-prerequisites.ts create mode 100644 packages/playground/wordpress/src/legacy-wp/legacy-boot.ts rename packages/playground/wordpress/src/{legacy-wp-fixes.ts => legacy-wp/legacy-fixes.ts} (97%) rename packages/playground/wordpress/src/{ => legacy-wp}/mysql-shims.ts (100%) diff --git a/packages/playground/wordpress/src/boot.ts b/packages/playground/wordpress/src/boot.ts index f965f20e80..d1921bb636 100644 --- a/packages/playground/wordpress/src/boot.ts +++ b/packages/playground/wordpress/src/boot.ts @@ -9,6 +9,7 @@ import type { Remote, } from '@php-wasm/universal'; import { + isLegacyPHPVersion, PHP, PHPRequestHandler, sandboxedSpawnHandlerFactory, @@ -26,78 +27,12 @@ import { import { basename, dirname, joinPaths } from '@php-wasm/util'; import { logger } from '@php-wasm/logger'; import { ensureWpConfig } from './wp-config'; +import { assertDatabasePrerequisites } from './database-prerequisites'; import { - generateDbPhpContent, - LEGACY_WP_ERROR_REPORTING_PHP_EXPR, - LEGACY_WP_ERROR_REPORTING_VALUE, - patchWordPressSourceFiles, - runPostInstallLegacyFixups, -} from './legacy-wp-fixes'; - -/** - * Network I/O functions that must be disabled on legacy PHP builds - * (< 7) to avoid "null function or function signature mismatch" - * WASM crashes when WordPress calls fsockopen or cURL during cron, - * update checks, dashboard RSS widgets, etc. - */ -const LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS = [ - 'fsockopen', - 'pfsockopen', - 'curl_init', - 'curl_exec', - 'curl_multi_exec', -] as const; - -/** - * Minimal wp-content/db.php drop-in for modern WordPress. Its job - * is simply to exist, so WP's file_exists(WP_CONTENT_DIR . '/db.php') - * escape hatches (in wp_check_php_mysql_versions() and install.php - * step=2's mysql version check) both fall through. The real SQLite - * wiring is handled by the preloaded lazy $wpdb loader, not by this - * file — so the content is deliberately an empty, marked placeholder - * that WordPress require()s as a no-op. - */ -const MODERN_PLAYGROUND_DB_PHP = ` { - const loadPhp = joinPaths(documentRoot, 'wp-includes/load.php'); - if (!php.fileExists(loadPhp)) { - return; - } - const content = php.readFileAsText(loadPhp); - const patched = content.replace( - "extension_loaded( 'mysqli' )", - "function_exists( 'mysqli_connect' )" - ); - if (patched !== content) { - await php.writeFile(loadPhp, patched); - } -} + applyLegacyPhpIniOverrides, + bootLegacyWordPress, +} from './legacy-wp/legacy-boot'; +import { backportWpPreV62MysqlCheck } from './legacy-wp/legacy-fixes'; export type PhpIniOptions = Record; export type Hook = (php: PHP) => void | Promise; @@ -288,6 +223,10 @@ export async function bootWordPress( requestHandler: PHPRequestHandler, options: BootWordPressOptions ) { + if (isLegacyPHPVersion(options.phpVersion)) { + return bootLegacyWordPress(requestHandler, options); + } + const php = await requestHandler.getPrimaryPhp(); if (options.hooks?.beforeWordPressFiles) { await options.hooks.beforeWordPressFiles(php); @@ -316,41 +255,7 @@ export async function bootWordPress( * them. This is needed because some WordPress backups and exports may not * include definitions for some of the necessary constants. */ - const phpMajor = Number.isFinite(parseInt(options.phpVersion ?? '', 10)) - ? parseInt(options.phpVersion!, 10) - : 8; - if (phpMajor >= 7) { - await ensureWpConfig(php, requestHandler.documentRoot); - } else { - // For legacy PHP, skip ensureWpConfig since the pre-built - // WordPress already has a valid wp-config-sample.php and - // php.run() with the large transformer code hangs. - // Just copy wp-config-sample.php to wp-config.php if needed. - const wpConfigPath = joinPaths( - requestHandler.documentRoot, - 'wp-config.php' - ); - if ( - !php.fileExists(wpConfigPath) && - php.fileExists( - joinPaths(requestHandler.documentRoot, 'wp-config-sample.php') - ) - ) { - await php.writeFile( - wpConfigPath, - await php.readFileAsBuffer( - joinPaths( - requestHandler.documentRoot, - 'wp-config-sample.php' - ) - ) - ); - } - } - if (phpMajor < 7) { - await patchWordPressSourceFiles(php, requestHandler.documentRoot); - } - + await ensureWpConfig(php, requestHandler.documentRoot); // Run "before database" hooks to mount/copy more files in if (options.hooks?.beforeDatabaseSetup) { await options.hooks.beforeDatabaseSetup(php); @@ -366,51 +271,7 @@ export async function bootWordPress( await options.sqliteIntegrationPluginZip, { phpVersion: options.phpVersion } ); - - // Write wp-content/db.php. Two distinct WordPress code paths - // rely on the file_exists(WP_CONTENT_DIR . '/db.php') escape - // hatch and cannot be fixed by a userland function stub: - // - // * wp-includes/load.php :: wp_check_php_mysql_versions() - // uses extension_loaded('mysqli') on WP 5.0–6.1. - // * wp-admin/install.php step=2 has its own mysql version - // check that compares $wpdb->db_version() against - // $required_mysql_version and falls through on db.php - // existence. WP_SQLite_DB's reported version does not - // satisfy WP's mysql minimum, so install dies silently - // without this file. - // - // Legacy PHP needs a full-content db.php because old - // WordPress actually uses the MySQL function stubs from it. - // Modern PHP only needs the file to exist — the preload's - // lazy $wpdb loader still owns the real connection, as long - // as the preload's guard recognises our @playground-managed - // marker and does not self-skip on our own file. - const wpContentDir = joinPaths( - requestHandler.documentRoot, - 'wp-content' - ); - const dbPhpPath = joinPaths(wpContentDir, 'db.php'); - if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { - await php.writeFile( - dbPhpPath, - phpMajor < 7 ? generateDbPhpContent() : MODERN_PLAYGROUND_DB_PHP - ); - } - - // WordPress 5.0–6.1's `wp_check_php_mysql_versions()` runs - // before `wp_initial_constants()` defines WP_CONTENT_DIR, so - // the file_exists escape hatch above alone cannot rescue the - // early check — the path collapses to 'WP_CONTENT_DIR/db.php' - // via an undefined constant. Patch wp-includes/load.php to - // use function_exists('mysqli_connect') instead, matching the - // fix WordPress itself shipped in 6.2. Also a no-op on 6.2+. - if (phpMajor >= 7) { - await patchLegacyMysqlCheckForModernWp( - php, - requestHandler.documentRoot - ); - } + await backportWpPreV62MysqlCheck(php, requestHandler.documentRoot); } const installationMode = @@ -428,18 +289,20 @@ export async function bootWordPress( hasCustomDatabasePath, }); // Install WordPress if it's not installed. - await installWordPressSafe( - php, - phpMajor, - hasCustomDatabasePath, - requestHandler, - options.phpVersion - ); + try { + await installWordPress(php); + } catch (error) { + // If installation failed, check if it's a database issue + // to provide a more specific error message (but skip if user provided custom DB path) + if (!hasCustomDatabasePath) { + await assertValidDatabaseConnection(requestHandler); + } + // If we get here, the database is valid but installation failed for another reason + throw error; + } + // Validate the database connection after installation (skip if user provided custom DB path) if (!hasCustomDatabasePath) { - await assertValidDatabaseConnectionSafe( - requestHandler, - options.phpVersion - ); + await assertValidDatabaseConnection(requestHandler); } } else if ('install-from-existing-files-if-needed' === installationMode) { // Check database prerequisites before attempting installation @@ -447,144 +310,29 @@ export async function bootWordPress( usesSqlite, hasCustomDatabasePath, }); - // For legacy PHP (< 7), skip isWordPressInstalled check because - // it crashes the WASM runtime on old WordPress (< 3.0) where the - // SQLite driver initialization chain isn't fully compatible. - const isInstalled = - phpMajor >= 7 ? await isWordPressInstalled(php) : false; - if (!isInstalled) { - await installWordPressSafe( - php, - phpMajor, - hasCustomDatabasePath, - requestHandler, - options.phpVersion - ); + if (!(await isWordPressInstalled(php))) { + // Install WordPress if it's not installed. + try { + await installWordPress(php); + } catch (error) { + // If installation failed, check if it's a database issue + // to provide a more specific error message (but skip if user provided custom DB path) + if (!hasCustomDatabasePath) { + await assertValidDatabaseConnection(requestHandler); + } + // If we get here, the database is valid but installation failed for another reason + throw error; + } } - // Validate the database connection after installation + // Validate the database connection after installation (skip if user provided custom DB path) if (!hasCustomDatabasePath) { - await assertValidDatabaseConnectionSafe( - requestHandler, - options.phpVersion - ); + await assertValidDatabaseConnection(requestHandler); } } return requestHandler; } -/** - * Wrapper around installWordPress that handles errors gracefully - * for legacy PHP versions where installation errors may be non-fatal. - */ -async function installWordPressSafe( - php: PHP, - phpMajor: number, - hasCustomDatabasePath: boolean, - requestHandler: PHPRequestHandler, - phpVersion?: string -): Promise { - try { - await installWordPress(php, phpMajor); - } catch (error) { - if (!hasCustomDatabasePath) { - await assertValidDatabaseConnectionSafe(requestHandler, phpVersion); - } - if (phpMajor >= 7) { - throw error; - } - logger.warn('Legacy PHP WordPress installation error:', error); - } - // Run legacy fixups whether the installer succeeded or threw. On - // WP 1.x the installer routinely fails halfway through and we rely - // on the fixups (stage 2 in particular) to finish building the - // schema. On newer legacy WP where the installer succeeded, the - // fixups short-circuit cheaply: stage 1 exits before loading WP if - // wp_users doesn't exist yet, and stage 2 is gated to WP < 3.5, so - // the only work done on the happy path is a pair of UPDATE queries - // against wp_options (siteurl/home) plus an admin-password reset. - if (phpMajor < 7) { - await runPostInstallLegacyFixups(php, requestHandler.absoluteUrl); - } -} - -/** - * Checks if database prerequisites are in place before attempting WordPress installation. - * This performs lightweight checks that don't require WordPress to be installed. - */ -async function assertDatabasePrerequisites( - requestHandler: PHPRequestHandler, - { - usesSqlite, - hasCustomDatabasePath, - }: { - usesSqlite: boolean; - hasCustomDatabasePath: boolean; - } -) { - const php = await requestHandler.getPrimaryPhp(); - - // If SQLite integration is preloaded via core, we're good - if (php.isFile('/internal/shared/preload/0-sqlite.php')) { - return; - } - - // Check if a SQLite integration plugin directory exists (even if not provided via zip) - // This handles cases where the directory is mounted via hooks - const sqlitePluginPath = joinPaths( - requestHandler.documentRoot, - 'wp-content/mu-plugins/sqlite-database-integration' - ); - - if (php.isDir(sqlitePluginPath)) { - // The directory exists, we'll validate it after WordPress is installed - return; - } - - // Check if we provided a SQLite integration zip - if (usesSqlite) { - // We provided a zip, so SQLite will be set up during boot - return; - } - - // If we have a custom database path (dataSqlPath option was provided), - // assume it's configured - the actual connection will be validated after installation - if (hasCustomDatabasePath) { - return; - } - - // Check if wp-config.php has real MySQL credentials - if (hasValidMySQLCredentials(php)) { - return; - } - - // No SQLite integration and no MySQL credentials found - // Throw early to avoid attempting installation with no database - throw new Error('Error connecting to the MySQL database.'); -} - -/** - * For legacy PHP (< 7), skip the database connection check entirely. - * - * Calling isDatabaseConnectionValid() loads wp-load.php. On some old - * WordPress versions (2.5–2.7) this triggers a WASM "null function or - * function signature mismatch" crash that corrupts the PHP instance and - * prevents the front page from loading. The check is non-fatal for - * legacy PHP anyway — runPostInstallLegacyFixups() handles any setup - * that's needed. Skipping gives the same observable result (no error - * thrown) without the risk of state corruption. - */ -async function assertValidDatabaseConnectionSafe( - requestHandler: PHPRequestHandler, - phpVersion?: string -) { - const phpMajor = parseInt(phpVersion ?? '8', 10); - if (phpMajor < 7) { - return; - } - await assertValidDatabaseConnection(requestHandler); -} - async function assertValidDatabaseConnection( requestHandler: PHPRequestHandler ) { @@ -637,41 +385,12 @@ export async function bootRequestHandler(options: BootRequestHandlerOptions) { setPhpIniEntries(php, options.phpIniEntries); } - // Disable network I/O for legacy PHP (< 7) to prevent WASM - // crashes. Old WordPress (2.5–3.6) calls fsockopen/cURL during - // cron, update checks, and dashboard RSS widgets. The - // underlying socket/cURL operations trigger "null function or - // function signature mismatch" WASM errors; disabling them - // makes the calls fail safely (return false) instead of - // crashing. - // - // setPhpIniEntries overwrites keys, so we merge with whatever - // the caller already passed in `options.phpIniEntries` — - // otherwise a networking-disabled list from the web worker - // would be silently replaced by this legacy-only list. - if (parseInt(options.phpVersion ?? '8', 10) < 7) { - const legacyDisabled = [...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS]; - const callerDisabled = ( - options.phpIniEntries?.['disable_functions'] ?? '' - ) - .split(',') - .map((s) => s.trim()) - .filter((s) => s); - const mergedDisabled = Array.from( - new Set([...callerDisabled, ...legacyDisabled]) - ).join(','); - setPhpIniEntries(php, { - disable_functions: mergedDisabled, - allow_url_fopen: '0', - }); - } + applyLegacyPhpIniOverrides(php, { + phpVersion: options.phpVersion, + phpIniEntries: options.phpIniEntries, + }); - // Use the new AST-based SQLite driver for all supported PHP - // versions. The PHP 5.2 build of the driver is the - // `v2.2.22-php52` variant bundled alongside trunk; it has - // closures hoisted to named functions and a few polyfills so - // it runs unmodified on PHP 5.2. See the - // `sqlite-database-integration-v2.2.22-php52.zip` asset. + // Use the new AST-based SQLite driver. // TODO: Remove this once the new driver is the default; when this is closed: // https://github.com/WordPress/sqlite-database-integration/issues/195 php.defineConstant('WP_SQLITE_AST_DRIVER', true); @@ -820,69 +539,13 @@ export async function isWordPressInstalled(php: PHP) { * Without them, the installer may take 60 seconds, * 300 seconds, or even more to complete. */ -async function installWordPress(php: PHP, phpMajor = 8) { - // WP 1.0–3.0 on legacy PHP: skip the install.php HTTP request - // entirely. These old installers trigger various unreachable WASM - // traps (mail(), mysql_get_server_info(), etc.) that the PHP 5.2 - // binary can't handle. The runPostInstallLegacyFixups() PDO - // fallback creates all tables, users, options, and content - // without running any crashable PHP. - if (phpMajor < 7) { - const versionPhp = joinPaths( - php.documentRoot, - 'wp-includes/version.php' - ); - if (php.fileExists(versionPhp)) { - const content = php.readFileAsText(versionPhp); - const match = content.match(/\$wp_version\s*=\s*['"]([^'"]+)['"]/); - if (match) { - const wpVersion = match[1]; - // WP 1.0–3.0 installers trigger unreachable WASM - // traps from mail(), network calls, - // mysql_get_server_info(), etc. WP 3.1+ works - // with targeted function patches. - // - // WP 1.0-1.2: the post-install PDO fallback - // creates the very simple schema entirely. - // WP 1.5-3.0: needs dbDelta() for proper table - // schemas but skip the rest of the installer. - if (parseFloat(wpVersion) < 2.1) { - return; - } - if (parseFloat(wpVersion) <= 3.0) { - await runDbDeltaOnly(php); - return; - } - } - } - } - - const iniOverrides: Record = { - // Disable network I/O functions during installation. - // For legacy PHP (< 7), this must include all the functions - // already disabled in bootRequestHandler — setPhpIniEntries - // replaces the entire value, so listing only 'fsockopen' - // would re-enable curl_init/curl_exec and cause WASM crashes - // when the installer makes outbound HTTP requests. - disable_functions: - phpMajor < 7 - ? [...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS, 'mail'].join(',') - : 'fsockopen', - allow_url_fopen: '0', - }; - if (phpMajor < 7) { - // Suppress E_DEPRECATED (8192) and E_STRICT (2048) at - // the ini level. Old WordPress class declarations trigger - // E_STRICT warnings during compilation (e.g. Walker_Page) - // which PHP may report using the ini error_reporting value - // rather than the runtime error_reporting() call. - iniOverrides['error_reporting'] = String( - LEGACY_WP_ERROR_REPORTING_VALUE - ); - } +async function installWordPress(php: PHP) { const response = await withPHPIniValues( php, - iniOverrides, + { + disable_functions: 'fsockopen', + allow_url_fopen: '0', + }, async () => await php.request({ url: '/wp-admin/install.php?step=2', @@ -902,27 +565,7 @@ async function installWordPress(php: PHP, phpMajor = 8) { }) ); - if (phpMajor < 7) { - // Legacy PHP (< 7): skip isWordPressInstalled() entirely — it - // can trigger a WASM trap (not a PHP exception) on old WordPress - // (< 3.0), which corrupts the runtime beyond recovery. Use the - // installer response text as a heuristic instead. - const installSucceeded = - response.text?.includes('Success') || - response.text?.includes('successful') || - response.text?.includes('Finished') || - response.text?.includes('Already Installed') || - response.text?.includes('already have WordPress installed') || - false; - if (!installSucceeded) { - throw new Error( - `Failed to install WordPress – installer responded with "${response.text?.substring( - 0, - 100 - )}"` - ); - } - } else if (!(await isWordPressInstalled(php))) { + if (!(await isWordPressInstalled(php))) { throw new Error( `Failed to install WordPress – installer responded with "${response.text?.substring( 0, @@ -931,130 +574,35 @@ async function installWordPress(php: PHP, phpMajor = 8) { ); } - if (phpMajor < 7) { - // Legacy PHP: set permalink_structure via PDO instead of - // update_option(). On WP < 4.8.3, wpdb::prepare() passes - // the value through vsprintf() without escaping '%' - // characters first (the placeholder_escape mechanism was - // added in 4.8.3). The '%y', '%m', '%d', '%p' sequences - // in the permalink pattern are interpreted as sprintf - // format specifiers, mangling the stored value. - // Using PDO bypasses wpdb entirely. - try { - const result = await php.run({ - code: `setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $nice_permalinks = '/%year%/%monthnum%/%day%/%postname%/'; - $stmt = $pdo->prepare( - "UPDATE wp_options SET option_value = :val WHERE option_name = 'permalink_structure'" - ); - $stmt->execute(array(':val' => $nice_permalinks)); - if ($stmt->rowCount() === 0) { - $stmt = $pdo->prepare( - "INSERT INTO wp_options (option_name, option_value, autoload) VALUES ('permalink_structure', :val, 'yes')" - ); - $stmt->execute(array(':val' => $nice_permalinks)); - } - $check = $pdo->query( - "SELECT option_value FROM wp_options WHERE option_name = 'permalink_structure'" - )->fetchColumn(); - echo $check === $nice_permalinks ? '1' : '0'; - `, - env: { DOCUMENT_ROOT: php.documentRoot }, - }); - if (result.text !== '1') { - logger.warn( - 'Failed to default to pretty permalinks after WP install.' - ); + const defaultedToPrettyPermalinks = await php.run({ + code: ` { - try { - await php.run({ - code: `; + } +): void { + if (!isLegacyPHPVersion(options.phpVersion)) return; + const callerDisabled = (options.phpIniEntries?.['disable_functions'] ?? '') + .split(',') + .map((s) => s.trim()) + .filter((s) => s); + const mergedDisabled = Array.from( + new Set([...callerDisabled, ...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS]) + ).join(','); + setPhpIniEntries(php, { + disable_functions: mergedDisabled, + allow_url_fopen: '0', + }); +} + +/** + * Boots a legacy WordPress instance (PHP 5.2 + WP 1.0–4.9 on SQLite). + * + * Mirrors {@link bootWordPress}'s step ordering but runs the legacy + * variant of each step: + * + * * wp-config-sample fallback instead of ensureWpConfig() + * * patchWordPressSourceFiles() for WP source-level fixes + * * full-content db.php drop-in (not a placeholder) + * * defensive install.php dispatch with per-WP-version fallbacks + * * PDO-based post-install schema completion + * * no assertValidDatabaseConnection — loading wp-load.php for + * the check can trigger WASM traps that corrupt the runtime + */ +export async function bootLegacyWordPress( + requestHandler: PHPRequestHandler, + options: BootWordPressOptions +): Promise { + const php = await requestHandler.getPrimaryPhp(); + if (options.hooks?.beforeWordPressFiles) { + await options.hooks.beforeWordPressFiles(php); + } + + if (options.wordPressZip) { + await unzipWordPress(php, await options.wordPressZip); + } + + if (options.constants) { + for (const key in options.constants) { + php.defineConstant(key, options.constants[key]); + } + } + + php.defineConstant('WP_HOME', options.siteUrl); + php.defineConstant('WP_SITEURL', options.siteUrl); + + await copyWpConfigFromSample(php, requestHandler.documentRoot); + await patchWordPressSourceFiles(php, requestHandler.documentRoot); + + if (options.hooks?.beforeDatabaseSetup) { + await options.hooks.beforeDatabaseSetup(php); + } + + let usesSqlite = false; + if (options.sqliteIntegrationPluginZip) { + usesSqlite = true; + await preloadSqliteIntegration( + php, + await options.sqliteIntegrationPluginZip, + { phpVersion: options.phpVersion } + ); + await writeLegacyDbPhp(php, requestHandler.documentRoot); + } + + const installationMode = + options['wordpressInstallMode'] ?? 'download-and-install'; + const hasCustomDatabasePath = !!options.dataSqlPath; + + if ( + installationMode === 'download-and-install' || + installationMode === 'install-from-existing-files' || + // Legacy PHP: isWordPressInstalled() can trigger a WASM trap + // (not a PHP exception) on old WordPress (< 3.0) and corrupt + // the runtime beyond recovery. Always run the installer; it + // is idempotent and its post-install fixups short-circuit + // cheaply when the schema already exists. + installationMode === 'install-from-existing-files-if-needed' + ) { + await assertDatabasePrerequisites(requestHandler, { + usesSqlite, + hasCustomDatabasePath, + }); + await installLegacyWordPress(php, requestHandler); + } + + return requestHandler; +} + +/** + * Skips ensureWpConfig() because php.run() with the large transformer + * code hangs on the PHP 5.2 WASM binary. The pre-built legacy + * WordPress already ships a valid wp-config-sample.php, so a plain + * file copy is sufficient. + */ +async function copyWpConfigFromSample(php: PHP, documentRoot: string) { + const wpConfigPath = joinPaths(documentRoot, 'wp-config.php'); + const samplePath = joinPaths(documentRoot, 'wp-config-sample.php'); + if (!php.fileExists(wpConfigPath) && php.fileExists(samplePath)) { + await php.writeFile( + wpConfigPath, + await php.readFileAsBuffer(samplePath) + ); + } +} + +/** + * Writes the full-content wp-content/db.php drop-in for legacy + * WordPress. WP < 3.0 loads only db.php and skips wp-db.php, so the + * mysql_* stubs from generateDbPhpContent() must be present for the + * SQLite driver to function. + */ +async function writeLegacyDbPhp(php: PHP, documentRoot: string): Promise { + const wpContentDir = joinPaths(documentRoot, 'wp-content'); + const dbPhpPath = joinPaths(wpContentDir, 'db.php'); + if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { + await php.writeFile(dbPhpPath, generateDbPhpContent()); + } +} + +/** + * Runs the legacy WordPress install flow. + * + * Wraps the installer with defensive error handling: old WP + * installers (WP 1.x especially) routinely fail halfway through, and + * we rely on {@link runPostInstallLegacyFixups} to finish building + * the schema via direct PDO writes. This helper therefore *always* + * proceeds to the fixups regardless of whether the installer threw, + * and only logs a warning on error. + */ +async function installLegacyWordPress( + php: PHP, + requestHandler: PHPRequestHandler +): Promise { + try { + await runLegacyInstaller(php); + } catch (error) { + logger.warn('Legacy PHP WordPress installation error:', error); + } + await runPostInstallLegacyFixups(php, requestHandler.absoluteUrl); +} + +/** + * Runs the legacy install.php?step=2 POST (with dispatch to a DB- + * only fallback for WP versions where the installer crashes). Throws + * on unambiguous install failure; {@link installLegacyWordPress} + * catches the throw and proceeds to post-install fixups regardless. + */ +async function runLegacyInstaller(php: PHP): Promise { + // WP 1.0–3.0 on legacy PHP: skip the install.php HTTP request + // entirely. These old installers trigger various unreachable + // WASM traps (mail(), mysql_get_server_info(), etc.) that the + // PHP 5.2 binary can't handle. The post-install PDO fallback + // creates all tables, users, options, and content without + // running any crashable PHP. + // + // WP 1.0–1.2: the post-install PDO fallback creates the very + // simple schema entirely. + // WP 1.5–3.0: needs dbDelta() for proper table schemas but + // skips the rest of the installer. + const wpVersion = readOnDiskWpVersion(php, php.documentRoot); + if (wpVersion !== null) { + const parsed = parseFloat(wpVersion); + if (parsed < 2.1) { + return; + } + if (parsed <= 3.0) { + await runDbDeltaOnly(php); + return; + } + } + + // Disable networking + mail functions during installation. This + // must include all the functions already disabled via + // applyLegacyPhpIniOverrides() — setPhpIniEntries replaces the + // entire value, so listing only 'fsockopen' would re-enable + // curl_init/curl_exec and cause WASM crashes when the installer + // makes outbound HTTP requests. + // + // error_reporting is suppressed at the ini level too: old WP + // class declarations (e.g. Walker_Page) trigger E_STRICT during + // compile, which PHP may report using the ini value rather than + // the runtime error_reporting() call. + const iniOverrides: Record = { + disable_functions: [ + ...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS, + 'mail', + ].join(','), + allow_url_fopen: '0', + error_reporting: String(LEGACY_WP_ERROR_REPORTING_VALUE), + }; + + const response = await withPHPIniValues( + php, + iniOverrides, + async () => + await php.request({ + url: '/wp-admin/install.php?step=2', + method: 'POST', + body: { + language: 'en', + prefix: 'wp_', + weblog_title: 'My WordPress Website', + user_name: 'admin', + admin_password: 'password', + admin_password2: 'password', + Submit: 'Install WordPress', + pw_weak: '1', + admin_email: 'admin@localhost.com', + }, + }) + ); + + // Skip isWordPressInstalled() entirely — it can trigger a WASM + // trap (not a PHP exception) on old WordPress (< 3.0), which + // corrupts the runtime beyond recovery. Use the installer + // response text as a heuristic instead. + const installSucceeded = + response.text?.includes('Success') || + response.text?.includes('successful') || + response.text?.includes('Finished') || + response.text?.includes('Already Installed') || + response.text?.includes('already have WordPress installed') || + false; + if (!installSucceeded) { + throw new Error( + `Failed to install WordPress – installer responded with "${response.text?.substring( + 0, + 100 + )}"` + ); + } + + await setLegacyPermalinkStructureViaPdo(php); +} + +/** + * Sets permalink_structure via PDO on legacy WP. update_option() + * can't be used because on WP < 4.8.3, wpdb::prepare() passes the + * value through vsprintf() without escaping '%' characters first + * (the placeholder_escape mechanism was added in 4.8.3). The '%y', + * '%m', '%d', '%p' sequences in the permalink pattern are + * interpreted as sprintf format specifiers, mangling the stored + * value. PDO bypasses wpdb entirely. + */ +async function setLegacyPermalinkStructureViaPdo(php: PHP): Promise { + try { + const result = await php.run({ + code: `setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $nice_permalinks = '/%year%/%monthnum%/%day%/%postname%/'; + $stmt = $pdo->prepare( + "UPDATE wp_options SET option_value = :val WHERE option_name = 'permalink_structure'" + ); + $stmt->execute(array(':val' => $nice_permalinks)); + if ($stmt->rowCount() === 0) { + $stmt = $pdo->prepare( + "INSERT INTO wp_options (option_name, option_value, autoload) VALUES ('permalink_structure', :val, 'yes')" + ); + $stmt->execute(array(':val' => $nice_permalinks)); + } + $check = $pdo->query( + "SELECT option_value FROM wp_options WHERE option_name = 'permalink_structure'" + )->fetchColumn(); + echo $check === $nice_permalinks ? '1' : '0'; + `, + env: { DOCUMENT_ROOT: php.documentRoot }, + }); + if (result.text !== '1') { + logger.warn( + 'Failed to default to pretty permalinks after WP install.' + ); + } + } catch { + logger.warn( + 'Failed to set pretty permalinks after WP install (non-fatal).' + ); + } +} + +/** + * Runs dbDelta() and populate_options/populate_roles without the + * full wp_install() function. Used for WP 2.3–3.0 where the + * installer crashes but we still need the table schemas. + */ +async function runDbDeltaOnly(php: PHP): Promise { + try { + await php.run({ + code: `db_version() against $required_mysql_version + * + * Both have a `file_exists(WP_CONTENT_DIR . '/db.php')` escape + * hatch. We rely on that hatch for install.php (placeholder db.php), + * but the wp_check_php_mysql_versions() call runs before + * wp_initial_constants() defines WP_CONTENT_DIR, so its escape + * hatch collapses to 'WP_CONTENT_DIR/db.php' via an undefined + * constant and never fires — hence the source patch. + * + * WP 6.2+ switched wp_check_php_mysql_versions() to + * `function_exists('mysqli_connect')`, which the preload's stub + * provides, so neither fix is needed there. + */ +export async function backportWpPreV62MysqlCheck( + php: PHP, + documentRoot: string +): Promise { + const wpVersion = readOnDiskWpVersion(php, documentRoot); + if (wpVersion === null) return; + const parsed = parseFloat(wpVersion); + if (!Number.isFinite(parsed) || parsed < 5.0 || parsed >= 6.2) { + return; + } + + const wpContentDir = joinPaths(documentRoot, 'wp-content'); + const dbPhpPath = joinPaths(wpContentDir, 'db.php'); + if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { + await php.writeFile(dbPhpPath, WP_PRE_V62_PLACEHOLDER_DB_PHP); + } + + const loadPhp = joinPaths(documentRoot, 'wp-includes/load.php'); + if (!php.fileExists(loadPhp)) return; + const content = php.readFileAsText(loadPhp); + const patched = content.replace( + "extension_loaded( 'mysqli' )", + "function_exists( 'mysqli_connect' )" + ); + if (patched !== content) { + await php.writeFile(loadPhp, patched); + } +} + +function readOnDiskWpVersion(php: PHP, documentRoot: string): string | null { + const versionPhp = joinPaths(documentRoot, 'wp-includes/version.php'); + if (!php.fileExists(versionPhp)) return null; + const content = php.readFileAsText(versionPhp); + const match = content.match(/\$wp_version\s*=\s*['"]([^'"]+)['"]/); + return match ? match[1] : null; +} + /** * PHP error_reporting mask for legacy WordPress: all errors EXCEPT * E_DEPRECATED (8192) and E_STRICT (2048). Old WordPress class @@ -33,8 +120,7 @@ export const LEGACY_WP_ERROR_REPORTING_PHP_EXPR = 'E_ALL & ~8192 & ~2048'; * Applies all necessary patches to make old WordPress versions * (1.0 through 2.8) work with modern PHP and the SQLite integration. * - * This function must only be called for legacy PHP (< 7); callers - * in boot.ts already gate on that. + * Called from legacy-wp/legacy-boot.ts; legacy boot path only. */ export async function patchWordPressSourceFiles( php: PHP, diff --git a/packages/playground/wordpress/src/mysql-shims.ts b/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts similarity index 100% rename from packages/playground/wordpress/src/mysql-shims.ts rename to packages/playground/wordpress/src/legacy-wp/mysql-shims.ts From 4915f8297f11c3f16190f1b8ffee8c7273f13a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Fri, 17 Apr 2026 11:03:19 +0200 Subject: [PATCH 08/24] =?UTF-8?q?Isolate=20legacy=20code=20paths=20in=20in?= =?UTF-8?q?dex.ts;=20drop=20WP=205.0=E2=80=936.1=20db.php=20placeholder?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extract every legacy mu-plugin and SQLite preload setup from index.ts into dedicated files under legacy-wp/: * legacy-mu-plugins.ts — setupLegacyPlatformLevelMuPlugins, LEGACY_AUTO_LOGIN_BODY, legacy preload env.php, PHP 5.2 error handler, legacy auto_prepend_file. * legacy-sqlite-preload.ts — preloadLegacySqliteIntegration, buildLegacySqlitePreload, mysql*/mysqli* stubs, str_* polyfills, WP < 3.1 add_action() guard. Shared helpers live in neutral files at src/ root so legacy-wp/ doesn't import from the parent index.ts: * platform-mu-plugins.ts — writeCommonPlatformMuPlugins (0-playground.php, sitemap-redirect.php, inline-tinymce-content-css.php), called from both paths. * sqlite-preload-loader.ts — SQLITE_PRELOAD_LOADER_CLASS, referenced by both modern and legacy preload builders. setupPlatformLevelMuPlugins and preloadSqliteIntegration now dispatch to the legacy helpers at the top and their bodies carry no phpMajor / isPhp52 branches. index.ts goes from 1521 lines to 691. Also drop the WP 5.0–6.1 db.php placeholder. backportWpPreV62MysqlCheck used to write an empty wp-content/db.php so install.php step=2's \$mysql_compat check would fall through its file_exists(WP_CONTENT_DIR . '/db.php') escape hatch. The placeholder was never needed — WP_SQLite_DB::db_version() returns '8.0' (per the SQLite plugin's docstring: "it returns mysql version number, but it means nothing for SQLite. So it returns the newest mysql version"), which satisfies install.php's version_compare check directly via the lazy-\$wpdb loader. With this change no file is ever written to wp-content on the modern boot path. --- packages/playground/wordpress/src/index.ts | 1050 ++--------------- .../wordpress/src/legacy-wp/legacy-fixes.ts | 66 +- .../src/legacy-wp/legacy-mu-plugins.ts | 611 ++++++++++ .../src/legacy-wp/legacy-sqlite-preload.ts | 208 ++++ .../wordpress/src/platform-mu-plugins.ts | 212 ++++ .../wordpress/src/sqlite-preload-loader.ts | 80 ++ 6 files changed, 1240 insertions(+), 987 deletions(-) create mode 100644 packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts create mode 100644 packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts create mode 100644 packages/playground/wordpress/src/platform-mu-plugins.ts create mode 100644 packages/playground/wordpress/src/sqlite-preload-loader.ts diff --git a/packages/playground/wordpress/src/index.ts b/packages/playground/wordpress/src/index.ts index 024eac3d10..128c40adb1 100644 --- a/packages/playground/wordpress/src/index.ts +++ b/packages/playground/wordpress/src/index.ts @@ -1,9 +1,12 @@ import type { PHP, UniversalPHP } from '@php-wasm/universal'; +import { isLegacyPHPVersion } from '@php-wasm/universal'; import { joinPaths, phpVar } from '@php-wasm/util'; import { unzipFile, createMemoizedFetch } from '@wp-playground/common'; import { logger } from '@php-wasm/logger'; -import { LEGACY_WP_ERROR_REPORTING_PHP_EXPR } from './legacy-wp/legacy-fixes'; -import { MYSQL_SHIMS_PHP } from './legacy-wp/mysql-shims'; +import { writeCommonPlatformMuPlugins } from './platform-mu-plugins'; +import { SQLITE_PRELOAD_LOADER_CLASS } from './sqlite-preload-loader'; +import { setupLegacyPlatformLevelMuPlugins } from './legacy-wp/legacy-mu-plugins'; +import { preloadLegacySqliteIntegration } from './legacy-wp/legacy-sqlite-preload'; export { bootWordPress, @@ -22,177 +25,6 @@ export { getLoadedWordPressVersion } from './version-detect'; export * from './version-detect'; export * from './rewrite-rules'; -/** - * Auto-login body for modern WordPress (2.5+). - * - * Uses the standard WP API: is_user_logged_in(), get_user_by(), - * wp_set_current_user(), wp_set_auth_cookie(). - */ -const MODERN_AUTO_LOGIN_BODY = ` - if ( is_user_logged_in() ) { - return; - } - $user = get_user_by('login', $user_name); - if (!$user) { - return; - } - if (headers_sent()) { - _doing_it_wrong('playground_auto_login', 'Headers already sent, the Playground runtime will not auto-login the user', '1.0.0'); - return; - } - wp_set_current_user( $user->ID, $user->user_login ); - wp_set_auth_cookie( $user->ID ); - do_action( 'wp_login', $user->user_login, $user ); - setcookie('playground_auto_login_already_happened', '1'); - if (headers_sent()) { - _doing_it_wrong('playground_auto_login', 'Headers already sent, the Playground runtime will not auto-login the user', '1.0.0'); - return; - } - $redirect_url = $_SERVER['REQUEST_URI']; - header( "Location: $redirect_url", true, 302 ); - exit; -`; - -/** - * Auto-login body for legacy WordPress (1.0-2.5). - * - * Handles three auth eras: - * - WP 2.5+: wp_set_current_user() + wp_set_auth_cookie() (HMAC cookies) - * - WP 1.5-2.4: USER_COOKIE/PASS_COOKIE constants + wp_setcookie() - * - WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies + global vars - * - * Each era uses different cookie names and hashing. The code detects - * which API is available and uses the appropriate method. - */ -const LEGACY_AUTO_LOGIN_BODY = ` - // WP 2.5+: modern auth API - if (function_exists('is_user_logged_in') && is_user_logged_in()) { - return; - } - if (headers_sent()) { - return; - } - $_pg_skip_redirect = defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT') - && PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT; - - // WP 2.5+: use the standard auth API - if (function_exists('wp_set_current_user') && function_exists('wp_set_auth_cookie')) { - $user = function_exists('get_user_by') - ? get_user_by('login', $user_name) - : (function_exists('get_userdatabylogin') - ? get_userdatabylogin($user_name) : null); - if (!$user) return; - - wp_set_current_user($user->ID, $user->user_login); - if ($_pg_skip_redirect) { - // Persist auth cookies so that subsequent PHP requests - // (e.g. form POSTs to post.php) also see the user as - // logged in. wp_set_auth_cookie() emits Set-Cookie - // headers that are captured by HttpCookieStore and - // re-injected as Cookie: on every following request. - // We also populate $_COOKIE in-process so that - // auth_redirect() and wp_verify_nonce() work for the - // remainder of this request without needing a redirect. - wp_set_auth_cookie($user->ID); - if (function_exists('wp_generate_auth_cookie')) { - $_pg_exp = time() + 172800; - if (defined('AUTH_COOKIE')) - $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'auth'); - if (defined('SECURE_AUTH_COOKIE')) - $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'secure_auth'); - if (defined('LOGGED_IN_COOKIE')) - $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'logged_in'); - } - } else { - wp_set_auth_cookie($user->ID); - if (function_exists('do_action')) { - do_action('wp_login', $user->user_login, $user); - } - setcookie('playground_auto_login_already_happened', '1'); - if (!headers_sent()) { - header("Location: " . $_SERVER['REQUEST_URI'], true, 302); - exit; - } - } - return; - } - - // WP 1.5-2.4: USER_COOKIE/PASS_COOKIE with double-md5 - if (defined('USER_COOKIE') && defined('PASS_COOKIE')) { - $_pg_pass_cookie = md5(md5('password')); - $_COOKIE[USER_COOKIE] = $user_name; - $_COOKIE[PASS_COOKIE] = $_pg_pass_cookie; - // Persist cookies to the browser so subsequent requests - // see the user as logged in. Without these setcookie() - // calls, only the current request would be authenticated. - if (!headers_sent()) { - $_pg_exp = time() + 172800; - setcookie(USER_COOKIE, $user_name, $_pg_exp, '/'); - setcookie(PASS_COOKIE, $_pg_pass_cookie, $_pg_exp, '/'); - } - // Reset cached anonymous user so capability checks work - $GLOBALS['current_user'] = null; - if (function_exists('get_currentuserinfo')) { - get_currentuserinfo(); - } - if (!$_pg_skip_redirect) { - setcookie('playground_auto_login_already_happened', '1', 0, '/'); - if (!headers_sent()) { - header("Location: " . $_SERVER['REQUEST_URI'], true, 302); - exit; - } - } - return; - } - - // WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies - // and global user variables instead of WP_User objects. - $cookiehash = defined('COOKIEHASH') - ? COOKIEHASH - : (isset($GLOBALS['cookiehash']) && $GLOBALS['cookiehash'] - ? $GLOBALS['cookiehash'] - : (function_exists('get_settings') - ? md5(get_settings('siteurl')) - : '')); - if ($cookiehash) { - $_pg_user_cookie_name = 'wordpressuser_' . $cookiehash; - $_pg_pass_cookie_name = 'wordpresspass_' . $cookiehash; - $_pg_pass_cookie_value = md5(md5('password')); - $_COOKIE[$_pg_user_cookie_name] = $user_name; - $_COOKIE[$_pg_pass_cookie_name] = $_pg_pass_cookie_value; - // Persist cookies to the browser so subsequent requests - // see the user as logged in. - if (!headers_sent()) { - $_pg_exp = time() + 172800; - setcookie($_pg_user_cookie_name, $user_name, $_pg_exp, '/'); - setcookie($_pg_pass_cookie_name, $_pg_pass_cookie_value, $_pg_exp, '/'); - } - // Populate global user variables that WP 1.0-1.2 uses - // instead of a WP_User object. - if (function_exists('get_userdatabylogin')) { - $userdata = get_userdatabylogin($user_name); - if ($userdata) { - $GLOBALS['user_login'] = $user_name; - $GLOBALS['userdata'] = $userdata; - $GLOBALS['user_level'] = isset($userdata->user_level) ? (int) $userdata->user_level : 10; - $GLOBALS['user_ID'] = $userdata->ID; - $GLOBALS['user_email'] = isset($userdata->user_email) ? $userdata->user_email : ''; - $GLOBALS['user_url'] = isset($userdata->user_url) ? $userdata->user_url : ''; - $GLOBALS['user_nickname'] = isset($userdata->user_nickname) ? $userdata->user_nickname : $user_name; - $GLOBALS['user_pass_md5'] = md5(isset($userdata->user_pass) ? $userdata->user_pass : ''); - } - } - if (!$_pg_skip_redirect) { - setcookie('playground_auto_login_already_happened', '1', 0, '/'); - if (!headers_sent()) { - header("Location: " . $_SERVER['REQUEST_URI'], true, 302); - exit; - } - } - return; - } -`; - /** * Preloads the platform mu-plugins from /internal/shared/mu-plugins. * This avoids polluting the WordPress installation with mu-plugins @@ -204,286 +36,14 @@ export async function setupPlatformLevelMuPlugins( php: UniversalPHP, options: { phpVersion?: string } = {} ) { - const phpMajor = parseInt(options.phpVersion ?? '8', 10); - const phpVersion = options.phpVersion ?? '8'; - const isPhp52 = phpVersion === '5.2'; - await php.mkdir('/internal/shared/mu-plugins'); - - if (phpMajor < 7) { - // Overwrite auto_prepend_file.php to add PHP 4 superglobal - // polyfills that WP 1.0-2.5 needs. The default - // auto_prepend_file only loads consts and preload files; - // legacy PHP also needs the superglobals set up first. - await php.writeFile( - '/internal/shared/auto_prepend_file.php', - ` $value) { - if (!defined($const) && is_scalar($value)) { - define($const, $value); - } - } - } -} -foreach (glob('/internal/shared/preload/*.php') as $file) { - require_once $file; -} -// Start output buffering so that PHP notices and warnings from -// WordPress's initialisation phase do not prematurely send the -// HTTP response headers. Without buffering, the first notice -// (printed as an HTML Warning: ... snippet) commits the -// headers, making headers_sent() return true for the rest of -// the request. That prevents the auto-login mu-plugin from -// calling wp_set_auth_cookie() and setcookie() later during -// the init hook, which in turn breaks nonce validation for -// POST requests (e.g. saving a new post). -// PHP flushes the buffer automatically at script end, so all -// WordPress output is still delivered to the browser. -ob_start(); -` - ); + if (isLegacyPHPVersion(options.phpVersion)) { + return setupLegacyPlatformLevelMuPlugins(php, options); } + await php.mkdir('/internal/shared/mu-plugins'); await php.writeFile( '/internal/shared/preload/env.php', - phpMajor < 7 - ? `...,'accepted_args'=>N). -// Returns 'wp10', 'wp12', or 'wp15'. -function _playground_detect_wp_hook_format() { - static $format = null; - if ($format !== null) return $format; - $doc_root = isset($_SERVER['DOCUMENT_ROOT']) - ? $_SERVER['DOCUMENT_ROOT'] : '/wordpress'; - $version_path = $doc_root . '/wp-includes/version.php'; - $wp_version = '1.0'; - if (file_exists($version_path)) { - include $version_path; - } - if (version_compare($wp_version, '1.5', '>=')) { - $format = 'wp15'; - } elseif (version_compare($wp_version, '1.2', '>=')) { - $format = 'wp12'; - } else { - $format = 'wp10'; - } - return $format; -} - -// Allow adding filters/actions prior to loading WordPress. -// $function_to_add MUST be a string. -// Stores the callback in the $wp_filter format that the target -// WordPress version's apply_filters() expects. -function playground_add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { - global $wp_filter; - $fmt = _playground_detect_wp_hook_format(); - if ($fmt === 'wp10') { - $wp_filter[$tag][] = $function_to_add; - } elseif ($fmt === 'wp12') { - $wp_filter[$tag][$priority][] = $function_to_add; - } else { - $wp_filter[$tag][$priority][$function_to_add] = array( - 'function' => $function_to_add, - 'accepted_args' => $accepted_args - ); - } -} -function playground_add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { - playground_add_filter( $tag, $function_to_add, $priority, $accepted_args ); -} - -// Set legacy WordPress auth cookies BEFORE WordPress loads. -// -// For WP 1.0-2.4, the auto-login mu-plugin runs too late: by the -// time the init hook fires (or may not fire at all on the front -// page), WordPress has already determined the user's login state -// from $_COOKIE. We set $_COOKIE here in the preload so WordPress -// sees the user as logged in from the very first request, and we -// also persist the cookies via setcookie() so subsequent requests -// bring them back automatically through Playground's HttpCookieStore. -function playground_legacy_set_auth_cookies_early() { - if (!defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) return; - if (isset($_COOKIE['playground_auto_login_already_logged_out'])) return; - - // Skip if auth cookies are already set by a previous request. - foreach ($_COOKIE as $name => $_) { - if (strncmp($name, 'wordpressuser_', 14) === 0) return; - } - - $user_name = PLAYGROUND_AUTO_LOGIN_AS_USER; - $pass_md5 = md5(md5('password')); - - // Read the actual siteurl from the SQLite database so the cookie - // hash matches what WordPress 1.0-2.4 computes from get_settings(). - $siteurl = null; - $db_path = defined('DB_DIR') ? DB_DIR . '.ht.sqlite' : ''; - if ($db_path && class_exists('PDO') && file_exists($db_path)) { - try { - $pdo = new PDO('sqlite:' . $db_path); - $stmt = $pdo->query("SELECT option_value FROM wp_options WHERE option_name = 'siteurl' LIMIT 1"); - if ($stmt) $siteurl = $stmt->fetchColumn(); - $pdo = null; - } catch (Exception $e) {} - } - if (!$siteurl && defined('WP_SITEURL')) $siteurl = WP_SITEURL; - if (!$siteurl) return; - - $cookiehash = md5($siteurl); - $user_cookie_name = 'wordpressuser_' . $cookiehash; - $pass_cookie_name = 'wordpresspass_' . $cookiehash; - $_COOKIE[$user_cookie_name] = $user_name; - $_COOKIE[$pass_cookie_name] = $pass_md5; - - if (!headers_sent()) { - $exp = time() + 172800; - setcookie($user_cookie_name, $user_name, $exp, '/'); - setcookie($pass_cookie_name, $pass_md5, $exp, '/'); - } -} -playground_legacy_set_auth_cookies_early(); - -// Fix date function comparisons for the SQLite driver. -// Old WordPress (< 4.0) generates date queries like: -// YEAR(post_date)='2026' AND MONTH(post_date)='4' -// using string literals. The SQLite driver's user-defined -// YEAR/MONTH/DAYOFMONTH/DAY functions return integers, and -// SQLite does not coerce types the way MySQL does (integer -// 4 != text '4' in SQLite). This filter strips quotes around -// numeric values in these comparisons so both sides are integers. -function playground_fix_sqlite_date_comparisons($query) { - if ( - stripos($query, 'YEAR') === false && - stripos($query, 'MONTH') === false && - stripos($query, 'DAY') === false - ) { - return $query; - } - return preg_replace( - '/\\b(YEAR|MONTH|DAYOFMONTH|DAY)\\s*\\(([^)]+)\\)\\s*=\\s*\\'(\\d+)\\'/i', - '$1($2) = $3', - $query - ); -} -playground_add_filter( 'query', 'playground_fix_sqlite_date_comparisons' ); - -// WP < 2.2 doesn't natively override get_option('siteurl') / -// get_option('home') with the WP_SITEURL / WP_HOME constants. -// Modern WP (2.2+) checks these constants in get_option() and -// returns the constant value, bypassing the DB. For WP 1.0-2.1, -// we replicate this behavior via option_siteurl / option_home -// filters so that admin navigation links use the correct -// Playground scoped URL instead of whatever the DB stores. -function playground_override_siteurl($value) { - if (defined('WP_SITEURL')) { - return WP_SITEURL; - } - return $value; -} -function playground_override_home($value) { - if (defined('WP_HOME')) { - return WP_HOME; - } - return $value; -} -playground_add_filter( 'option_siteurl', 'playground_override_siteurl' ); -playground_add_filter( 'option_home', 'playground_override_home' ); - -// Load our mu-plugins after customer mu-plugins. -// NOTE: this means our mu-plugins can't use the muplugins_loaded action! -playground_add_action( 'muplugins_loaded', 'playground_load_mu_plugins', 0 ); -// WP < 2.8 doesn't fire muplugins_loaded, so also hook into init -// as a fallback. The $loaded flag ensures mu-plugins load only once. -playground_add_action( 'init', 'playground_load_mu_plugins', -1000 ); -function playground_load_mu_plugins() { - static $loaded = false; - if ($loaded) return; - $loaded = true; - // Load all PHP files from /internal/shared/mu-plugins sorted by filename - $mu_plugins_dir = '/internal/shared/mu-plugins'; - if(!is_dir($mu_plugins_dir)){ - return; - } - $mu_plugins = glob( $mu_plugins_dir . '/*.php' ); - sort( $mu_plugins ); - global $wp_version; - $is_legacy_wp = isset($wp_version) && version_compare($wp_version, '2.8', '<'); - foreach ( $mu_plugins as $mu_plugin ) { - // sqlite-database-integration.php is loaded separately - // by the preload lazy loader or db.php. - if (strpos($mu_plugin, 'sqlite-database-integration') !== false) { - continue; - } - // Most mu-plugins use closures in add_action/add_filter - // or call functions like site_url() that don't exist in - // very old WordPress. WP < 2.8 crashes on closures in - // hooks; WP < 2.6 lacks site_url(). Only load mu-plugins - // that are explicitly written for legacy WP compatibility. - if ($is_legacy_wp) { - // 1-auto-login.php uses LEGACY_AUTO_LOGIN_BODY which - // handles WP 1.0-2.5 auth APIs with named functions - // only (no closures, no site_url()). - if (strpos($mu_plugin, '1-auto-login.php') === false) { - continue; - } - } - require_once $mu_plugin; - } - // On WP < 2.8, this function runs during init (priority - // -1000). PHP 5.x's foreach iterates over a copy of the - // array, so add_action() calls inside the loaded mu-plugin - // (e.g. add_action('init', 'playground_auto_login', 1)) - // won't fire — the init hook list was already snapshotted. - // Call the functions directly as a workaround. - // - // PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT tells the auto-login - // function to set cookies in-process without redirecting. - // In Playground's service worker, a redirect+Set-Cookie - // can cause a race because the cookie isn't applied before - // the redirected request fires. Define it unconditionally - // for all legacy PHP so the init-hook auto-login uses the - // in-process path. - if (!defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT')) { - define('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT', true); - } - - // WP < 2.8: add_action() calls inside mu-plugins won't - // fire because PHP 5.x's foreach iterates a copy. Call - // auto-login directly here as a workaround. - if ($is_legacy_wp) { - if (function_exists('playground_auto_login_redirect_target')) { - playground_auto_login_redirect_target(); - } - if (function_exists('playground_auto_login')) { - playground_auto_login(); - } - } -} -` - : `ID, $user->user_login ); + wp_set_auth_cookie( $user->ID ); + do_action( 'wp_login', $user->user_login, $user ); + + setcookie('playground_auto_login_already_happened', '1'); + + /** + * Confirm that nothing in WordPress, plugins, or filters have finalized + * the headers sending phase. See the comment above for more context. + */ + if (headers_sent()) { + _doing_it_wrong('playground_auto_login', 'Headers already sent, the Playground runtime will not auto-login the user', '1.0.0'); + return; + } + + /** + * Reload page to ensure the user is logged in correctly. + * WordPress uses cookies to determine if the user is logged in, + * so we need to reload the page to ensure the cookies are set. + */ + $redirect_url = $_SERVER['REQUEST_URI']; + + /** + * Intentionally do not use wp_redirect() here. It removes + * %0A and %0D sequences from the URL, which we don't want. + * There are valid use-cases for encoded newlines in the query string, + * for example html-api-debugger accepts markup with newlines + * encoded as %0A via the query string. + */ + header( "Location: $redirect_url", true, 302 ); + exit; } /** * Autologin users from the wp-login.php page. @@ -640,224 +261,16 @@ function playground_load_mu_plugins() { * Disable the Site Admin Email Verification Screen for any session started * via autologin. */ - ${ - phpMajor < 7 - ? `if (function_exists('add_filter')) { - add_filter('admin_email_check_interval', 'playground_disable_admin_email_check'); - } - function playground_disable_admin_email_check($interval) { + add_filter('admin_email_check_interval', function($interval) { if(false === playground_get_username_for_auto_login()) { return 0; } return $interval; - }` - : `function playground_disable_admin_email_check($interval) { - if(false === playground_get_username_for_auto_login()) { - return 0; - } - return $interval; - } - add_filter('admin_email_check_interval', 'playground_disable_admin_email_check');` - } - ` - ); - - await php.writeFile( - '/internal/shared/mu-plugins/0-playground.php', - ` 'sqlite', - 'path' => FQDB, - 'driver_path' => defined('WP_MYSQL_ON_SQLITE_LOADER_PATH') - ? WP_MYSQL_ON_SQLITE_LOADER_PATH - : dirname(SQLITE_MAIN_FILE) . '/wp-pdo-mysql-on-sqlite.php', - ); - } else { - $db_info = array( - 'type' => 'mysql', - // TODO: Save MySQL connection config. - ); - } - $wp_env = array('db' => $db_info); - $wp_env_php = sprintf('flush_rules(); - } - @file_put_contents($flag, '1'); - } - add_action('init', 'playground_maybe_flush_rewrite_rules', 99999); - - // Create the fonts directory if missing - if(!file_exists(WP_CONTENT_DIR . '/fonts')) { - mkdir(WP_CONTENT_DIR . '/fonts'); - } - - $log_file = WP_CONTENT_DIR . '/debug.log'; - if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { - if ( is_string( WP_DEBUG_LOG ) ) { - $log_file = WP_DEBUG_LOG; - } - ini_set('error_log', $log_file); - } else { - ini_set('log_errors', '0'); - } - define('ERROR_LOG_FILE', $log_file); - ?>` - ); - - /** - * WordPress 6.7+ only generates the sitemap.xml → wp-sitemap.xml rewrite - * rule when installed at the domain root. Since Playground may use non-root - * installations, the rule isn't generated. This mu-plugin handles the - * redirect manually by using the site URL to determine the correct base path. - * - * @see https://github.com/WordPress/wordpress-playground/issues/2051 - */ - await php.writeFile( - '/internal/shared/mu-plugins/sitemap-redirect.php', - `prop = value), which - * was valid in PHP 4 but triggers E_WARNING in PHP 5.x. - * These are benign and cannot be fixed in WP core since - * Playground downloads unmodified WordPress releases. - */ - if (strpos($message, "Creating default object from empty value") !== false) { - return; - } - /** - * SimplePie/RSS errors when feeds can't be fetched in WASM. - * WP 2.8's dashboard widget calls get_error_string() on a - * null SimplePie object when HTTP requests fail. - */ - if (strpos($message, "get_error_string() on null") !== false || - strpos($message, "get_error_string() on a non-object") !== false) { - return; - } /** * Don't complain about network errors when not connected to the network. */ @@ -945,8 +324,8 @@ function _playground_error_handler($severity, $message, $file, $line) { return; } return false; - ${isPhp52 ? '}' : '});'} - ${isPhp52 ? "set_error_handler('_playground_error_handler');" : phpMajor < 7 ? '});' : '})();'}` + }); + })();` ); } @@ -980,6 +359,9 @@ export async function preloadSqliteIntegration( sqliteZip: File, options: SqliteIntegrationOptions = {} ) { + if (isLegacyPHPVersion(options.phpVersion)) { + return preloadLegacySqliteIntegration(php, sqliteZip, options); + } if (await php.isDir('/tmp/sqlite-database-integration')) { await php.rmdir('/tmp/sqlite-database-integration', { recursive: true, @@ -996,8 +378,6 @@ export async function preloadSqliteIntegration( }`; await php.mv(temporarySqlitePluginFolder, SQLITE_PLUGIN_FOLDER); - const phpMajor = parseInt(options.phpVersion ?? '8', 10); - // WP 5.0–6.1 compat: the SQLite plugin declares // `private $allow_unsafe_unquoted_parameters` on WP_SQLite_DB and // then, from `prepare()`, calls `$this->__get(...)` expecting WP's @@ -1009,20 +389,18 @@ export async function preloadSqliteIntegration( // kills install.php and every subsequent request. Widening the // declaration to `protected` lets both class contexts reach it and // leaves behaviour identical on every supported WordPress version. - if (phpMajor >= 7) { - const sqliteDbClassPath = joinPaths( - SQLITE_PLUGIN_FOLDER, - 'wp-includes/sqlite/class-wp-sqlite-db.php' + const sqliteDbClassPath = joinPaths( + SQLITE_PLUGIN_FOLDER, + 'wp-includes/sqlite/class-wp-sqlite-db.php' + ); + if (await php.fileExists(sqliteDbClassPath)) { + const classSource = await php.readFileAsText(sqliteDbClassPath); + const patched = classSource.replace( + 'private $allow_unsafe_unquoted_parameters', + 'protected $allow_unsafe_unquoted_parameters' ); - if (await php.fileExists(sqliteDbClassPath)) { - const classSource = await php.readFileAsText(sqliteDbClassPath); - const patched = classSource.replace( - 'private $allow_unsafe_unquoted_parameters', - 'protected $allow_unsafe_unquoted_parameters' - ); - if (patched !== classSource) { - await php.writeFile(sqliteDbClassPath, patched); - } + if (patched !== classSource) { + await php.writeFile(sqliteDbClassPath, patched); } } @@ -1031,7 +409,7 @@ export async function preloadSqliteIntegration( const dbCopy = await php.readFileAsText( joinPaths(SQLITE_PLUGIN_FOLDER, 'db.copy') ); - let dbPhp = dbCopy + const dbPhp = dbCopy .replace( "'{SQLITE_IMPLEMENTATION_FOLDER_PATH}'", phpVar(SQLITE_PLUGIN_FOLDER) @@ -1040,45 +418,19 @@ export async function preloadSqliteIntegration( "'{SQLITE_PLUGIN}'", phpVar(joinPaths(SQLITE_PLUGIN_FOLDER, 'load.php')) ); - if (phpMajor < 7) { - // Guard every top-level add_action() call for WordPress < 3.1 - // compatibility: when loaded via the lazy $wpdb loader, - // WordPress hooks may not be available yet. Wrap the call so - // it short-circuits to a no-op when add_action is undefined. - // Anchors on start-of-line regardless of how the call is - // formatted (single-line, multi-line, with or without space). - dbPhp = dbPhp.replace( - /^add_action\(/gm, - 'function_exists("add_action") && add_action(' - ); - } const dbPhpPath = joinPaths(await php.documentRoot, 'wp-content/db.php'); - const SQLITE_MUPLUGIN_PATH = - '/internal/shared/mu-plugins/sqlite-database-integration.php'; - - // Playground writes a @playground-managed db.php drop-in for both - // legacy and modern WordPress (see boot.ts). The preload guard - // must therefore recognise our own marker and *not* skip itself - // on its own file — a blind `file_exists` guard (trunk's old - // behaviour) would short-circuit the lazy-$wpdb setup on every - // request. Only a real user-supplied db.php should abort the - // preload. - const dbPhpGuard = ` -if(file_exists(${phpVar(dbPhpPath)})) { - $_pg_db_php = @file_get_contents(${phpVar(dbPhpPath)}); - if (strpos($_pg_db_php, '@playground-managed') === false) { + const stopIfDbPhpExists = `` + dbPhp); + ?>`; + const SQLITE_MUPLUGIN_PATH = + '/internal/shared/mu-plugins/sqlite-database-integration.php'; + await php.writeFile(SQLITE_MUPLUGIN_PATH, stopIfDbPhpExists + dbPhp); await php.writeFile( `/internal/shared/preload/0-sqlite.php`, - phpMajor < 7 - ? buildLegacySqlitePreload(dbPhpGuard, SQLITE_MUPLUGIN_PATH, phpVar) - : buildModernSqlitePreload(dbPhpGuard, SQLITE_MUPLUGIN_PATH, phpVar) + buildModernSqlitePreload(stopIfDbPhpExists, SQLITE_MUPLUGIN_PATH) ); /** * Ensure the SQLite integration is loaded and clearly communicate @@ -1103,202 +455,20 @@ if(file_exists(${phpVar(dbPhpPath)})) { * minimal mysqli_connect stub. */ function buildModernSqlitePreload( - dbPhpGuard: string, - muPluginPath: string, - phpVarFn: typeof phpVar + stopIfDbPhpExists: string, + muPluginPath: string ): string { - return ` - - -reinitialize_sqlite(); - }` -)} -// These stubs return truthy values because old WordPress (< 3.0) -// calls mysql_connect() directly in wpdb::__construct() and calls -// bail() on a falsy return. -if(!function_exists('mysqli_connect')) { - function mysqli_connect() { return true; } -} -if(!function_exists('mysqli_init')) { - function mysqli_init() { return true; } -} -if(!function_exists('mysql_connect')) { - function mysql_connect() { return true; } -} -if(!function_exists('mysql_select_db')) { - function mysql_select_db() { return true; } -} -${MYSQL_SHIMS_PHP} -if (!function_exists('str_contains')) { - function str_contains($haystack, $needle) { - return $needle === '' || strpos($haystack, $needle) !== false; - } -} -if (!function_exists('str_starts_with')) { - function str_starts_with($haystack, $needle) { - return strncmp($haystack, $needle, strlen($needle)) === 0; - } -} -if (!function_exists('str_ends_with')) { - function str_ends_with($haystack, $needle) { - return $needle === '' || substr($haystack, -strlen($needle)) === $needle; - } -} -if (PHP_MAJOR_VERSION < 7) { - // E_DEPRECATED (8192) and E_STRICT (2048) are constants - // added in PHP 5.3 - use numeric values for PHP 5.2 compat. - $level = ${LEGACY_WP_ERROR_REPORTING_PHP_EXPR}; - error_reporting($level); - ini_set('error_reporting', $level); -} -if (!isset($_SERVER['SERVER_PROTOCOL'])) { - $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1'; -} -if (!ini_get('date.timezone')) { - date_default_timezone_set('UTC'); -} - - `; -} - -/** - * The shared Playground_SQLite_Integration_Loader class definition, - * parameterized by the load_sqlite_integration() body. - */ -function SQLITE_PRELOAD_LOADER_CLASS(loadBody: string): string { - return ` -/** - * Loads the SQLite integration plugin before WordPress is loaded - * and without creating a drop-in "db.php" file. - * - * Technically, it creates a global $wpdb object whose only two - * purposes are to: - * - * * Exist – because the require_wp_db() WordPress function won't - * connect to MySQL if $wpdb is already set. - * * Load the SQLite integration plugin the first time it's used - * and replace the global $wpdb reference with the SQLite one. - * - * This lets Playground keep the WordPress installation clean and - * solves dillemas like: - * - * * Should we include db.php in Playground exports? - * * Should we remove db.php from Playground imports? - * * How should we treat stale db.php from long-lived OPFS sites? - * - * @see https://github.com/WordPress/wordpress-playground/discussions/1379 for - * more context. - */ -class Playground_SQLite_Integration_Loader { - public function __call($name, $arguments) { - $this->load_sqlite_integration(); - if($GLOBALS['wpdb'] === $this) { - throw new Exception('Infinite loop detected in $wpdb – SQLite integration plugin could not be loaded'); - } - return call_user_func_array( - array($GLOBALS['wpdb'], $name), - $arguments - ); - } - public function __get($name) { - $this->load_sqlite_integration(); - if($GLOBALS['wpdb'] === $this) { - throw new Exception('Infinite loop detected in $wpdb – SQLite integration plugin could not be loaded'); - } - return $GLOBALS['wpdb']->$name; - } - public function __set($name, $value) { - $this->load_sqlite_integration(); - if($GLOBALS['wpdb'] === $this) { - throw new Exception('Infinite loop detected in $wpdb – SQLite integration plugin could not be loaded'); - } - $GLOBALS['wpdb']->$name = $value; - } - protected function load_sqlite_integration() { - ${loadBody} - } -} -/** - * The Query Monitor plugin short-circuits in the CLI SAPI. However, in Playground, - * the SAPI is always "cli" at the moment. Let's set a constant to disable the CLI - * detection. - * - * @see https://github.com/WordPress/sqlite-database-integration/pull/212 - * @see https://github.com/WordPress/sqlite-database-integration/pull/215 - */ -define('QM_TESTS', true); -$wpdb = $GLOBALS['wpdb'] = new Playground_SQLite_Integration_Loader(); - -/** - * WordPress is capable of using a preloaded global $wpdb. However, if - * it cannot find the drop-in db.php plugin it still checks whether - * the mysqli_connect() function exists even though it's not used. - * - * What WordPress demands, Playground shall provide. - */ -`; + ` + ); } /** diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index 9a0a2982a1..d759033ceb 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -21,47 +21,25 @@ import { joinPaths } from '@php-wasm/util'; import { MYSQL_SHIMS_PHP } from './mysql-shims'; /** - * Minimal wp-content/db.php drop-in for WP 5.0–6.1 on modern PHP. - * - * Its only job is to exist so WordPress' - * file_exists(WP_CONTENT_DIR . '/db.php') escape hatches — in - * wp_check_php_mysql_versions() and install.php step=2's mysql - * version check — both fall through. The real SQLite wiring is - * handled by the preloaded lazy $wpdb loader, so the content is an - * empty, marked placeholder that WordPress require()s as a no-op. - */ -const WP_PRE_V62_PLACEHOLDER_DB_PHP = `db_version() against $required_mysql_version - * - * Both have a `file_exists(WP_CONTENT_DIR . '/db.php')` escape - * hatch. We rely on that hatch for install.php (placeholder db.php), - * but the wp_check_php_mysql_versions() call runs before - * wp_initial_constants() defines WP_CONTENT_DIR, so its escape - * hatch collapses to 'WP_CONTENT_DIR/db.php' via an undefined - * constant and never fires — hence the source patch. - * - * WP 6.2+ switched wp_check_php_mysql_versions() to - * `function_exists('mysqli_connect')`, which the preload's stub - * provides, so neither fix is needed there. + * Backports WP 6.2's `wp_check_php_mysql_versions()` mysqli check + * to WP 5.0–6.1 running on modern PHP + SQLite. No-op on WP 6.2+ + * and on WP < 5.0 (handled by the legacy boot path instead). + * + * WP 5.0–6.1 hard-check `extension_loaded('mysqli')` inside + * `wp_check_php_mysql_versions()`, which runs before `$wpdb` is + * constructed and before `wp_initial_constants()` defines + * `WP_CONTENT_DIR`. That means neither a userland `mysqli_connect()` + * stub nor a `wp-content/db.php` drop-in can satisfy it — the + * source itself has to change. We rewrite the single + * `extension_loaded('mysqli')` call in wp-includes/load.php to + * `function_exists('mysqli_connect')`, matching the fix WordPress + * itself shipped in 6.2. + * + * The sibling `$mysql_compat` check in wp-admin/install.php is + * already satisfied: by the time it runs, `$wpdb->db_version()` + * dispatches through the preload's lazy loader to WP_SQLite_DB, + * which deliberately returns `'8.0'` — high enough for every + * `$required_mysql_version`. */ export async function backportWpPreV62MysqlCheck( php: PHP, @@ -74,12 +52,6 @@ export async function backportWpPreV62MysqlCheck( return; } - const wpContentDir = joinPaths(documentRoot, 'wp-content'); - const dbPhpPath = joinPaths(wpContentDir, 'db.php'); - if (php.isDir(wpContentDir) && !php.fileExists(dbPhpPath)) { - await php.writeFile(dbPhpPath, WP_PRE_V62_PLACEHOLDER_DB_PHP); - } - const loadPhp = joinPaths(documentRoot, 'wp-includes/load.php'); if (!php.fileExists(loadPhp)) return; const content = php.readFileAsText(loadPhp); diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts new file mode 100644 index 0000000000..1006f9f9b5 --- /dev/null +++ b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts @@ -0,0 +1,611 @@ +/** + * Platform-level mu-plugin setup for legacy PHP (< 7) running old + * WordPress (1.0–2.8). Self-contained mirror of + * {@link setupPlatformLevelMuPlugins} in index.ts — the modern + * function dispatches here when isLegacyPHPVersion(phpVersion) is + * true, and this file owns every PHP string that differs from the + * modern path. + * + * The three common mu-plugins (0-playground.php, sitemap-redirect, + * inline-tinymce-content-css) are shared with the modern path via + * {@link writeCommonPlatformMuPlugins} to avoid duplicating ~200 + * lines of identical PHP. + */ +import type { UniversalPHP } from '@php-wasm/universal'; +import { writeCommonPlatformMuPlugins } from '../platform-mu-plugins'; + +/** + * Auto-login body for legacy WordPress (1.0-2.5). + * + * Handles three auth eras: + * - WP 2.5+: wp_set_current_user() + wp_set_auth_cookie() (HMAC cookies) + * - WP 1.5-2.4: USER_COOKIE/PASS_COOKIE constants + wp_setcookie() + * - WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies + global vars + * + * Each era uses different cookie names and hashing. The code detects + * which API is available and uses the appropriate method. + */ +const LEGACY_AUTO_LOGIN_BODY = ` + // WP 2.5+: modern auth API + if (function_exists('is_user_logged_in') && is_user_logged_in()) { + return; + } + if (headers_sent()) { + return; + } + $_pg_skip_redirect = defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT') + && PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT; + + // WP 2.5+: use the standard auth API + if (function_exists('wp_set_current_user') && function_exists('wp_set_auth_cookie')) { + $user = function_exists('get_user_by') + ? get_user_by('login', $user_name) + : (function_exists('get_userdatabylogin') + ? get_userdatabylogin($user_name) : null); + if (!$user) return; + + wp_set_current_user($user->ID, $user->user_login); + if ($_pg_skip_redirect) { + // Persist auth cookies so that subsequent PHP requests + // (e.g. form POSTs to post.php) also see the user as + // logged in. wp_set_auth_cookie() emits Set-Cookie + // headers that are captured by HttpCookieStore and + // re-injected as Cookie: on every following request. + // We also populate $_COOKIE in-process so that + // auth_redirect() and wp_verify_nonce() work for the + // remainder of this request without needing a redirect. + wp_set_auth_cookie($user->ID); + if (function_exists('wp_generate_auth_cookie')) { + $_pg_exp = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'logged_in'); + } + } else { + wp_set_auth_cookie($user->ID); + if (function_exists('do_action')) { + do_action('wp_login', $user->user_login, $user); + } + setcookie('playground_auto_login_already_happened', '1'); + if (!headers_sent()) { + header("Location: " . $_SERVER['REQUEST_URI'], true, 302); + exit; + } + } + return; + } + + // WP 1.5-2.4: USER_COOKIE/PASS_COOKIE with double-md5 + if (defined('USER_COOKIE') && defined('PASS_COOKIE')) { + $_pg_pass_cookie = md5(md5('password')); + $_COOKIE[USER_COOKIE] = $user_name; + $_COOKIE[PASS_COOKIE] = $_pg_pass_cookie; + // Persist cookies to the browser so subsequent requests + // see the user as logged in. Without these setcookie() + // calls, only the current request would be authenticated. + if (!headers_sent()) { + $_pg_exp = time() + 172800; + setcookie(USER_COOKIE, $user_name, $_pg_exp, '/'); + setcookie(PASS_COOKIE, $_pg_pass_cookie, $_pg_exp, '/'); + } + // Reset cached anonymous user so capability checks work + $GLOBALS['current_user'] = null; + if (function_exists('get_currentuserinfo')) { + get_currentuserinfo(); + } + if (!$_pg_skip_redirect) { + setcookie('playground_auto_login_already_happened', '1', 0, '/'); + if (!headers_sent()) { + header("Location: " . $_SERVER['REQUEST_URI'], true, 302); + exit; + } + } + return; + } + + // WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies + // and global user variables instead of WP_User objects. + $cookiehash = defined('COOKIEHASH') + ? COOKIEHASH + : (isset($GLOBALS['cookiehash']) && $GLOBALS['cookiehash'] + ? $GLOBALS['cookiehash'] + : (function_exists('get_settings') + ? md5(get_settings('siteurl')) + : '')); + if ($cookiehash) { + $_pg_user_cookie_name = 'wordpressuser_' . $cookiehash; + $_pg_pass_cookie_name = 'wordpresspass_' . $cookiehash; + $_pg_pass_cookie_value = md5(md5('password')); + $_COOKIE[$_pg_user_cookie_name] = $user_name; + $_COOKIE[$_pg_pass_cookie_name] = $_pg_pass_cookie_value; + // Persist cookies to the browser so subsequent requests + // see the user as logged in. + if (!headers_sent()) { + $_pg_exp = time() + 172800; + setcookie($_pg_user_cookie_name, $user_name, $_pg_exp, '/'); + setcookie($_pg_pass_cookie_name, $_pg_pass_cookie_value, $_pg_exp, '/'); + } + // Populate global user variables that WP 1.0-1.2 uses + // instead of a WP_User object. + if (function_exists('get_userdatabylogin')) { + $userdata = get_userdatabylogin($user_name); + if ($userdata) { + $GLOBALS['user_login'] = $user_name; + $GLOBALS['userdata'] = $userdata; + $GLOBALS['user_level'] = isset($userdata->user_level) ? (int) $userdata->user_level : 10; + $GLOBALS['user_ID'] = $userdata->ID; + $GLOBALS['user_email'] = isset($userdata->user_email) ? $userdata->user_email : ''; + $GLOBALS['user_url'] = isset($userdata->user_url) ? $userdata->user_url : ''; + $GLOBALS['user_nickname'] = isset($userdata->user_nickname) ? $userdata->user_nickname : $user_name; + $GLOBALS['user_pass_md5'] = md5(isset($userdata->user_pass) ? $userdata->user_pass : ''); + } + } + if (!$_pg_skip_redirect) { + setcookie('playground_auto_login_already_happened', '1', 0, '/'); + if (!headers_sent()) { + header("Location: " . $_SERVER['REQUEST_URI'], true, 302); + exit; + } + } + return; + } +`; + +/** + * Full legacy version of {@link setupPlatformLevelMuPlugins}. Writes + * a custom auto_prepend_file, legacy-aware preload env.php, legacy + * auto-login mu-plugin, the common platform mu-plugins, and the PHP + * 5.2 variant of the error handler. + */ +export async function setupLegacyPlatformLevelMuPlugins( + php: UniversalPHP, + options: { phpVersion?: string } = {} +): Promise { + const isPhp52 = (options.phpVersion ?? '') === '5.2'; + await php.mkdir('/internal/shared/mu-plugins'); + + // Overwrite auto_prepend_file.php to add PHP 4 superglobal + // polyfills that WP 1.0-2.5 needs. The default + // auto_prepend_file only loads consts and preload files; + // legacy PHP also needs the superglobals set up first. + await php.writeFile( + '/internal/shared/auto_prepend_file.php', + ` $value) { + if (!defined($const) && is_scalar($value)) { + define($const, $value); + } + } + } +} +foreach (glob('/internal/shared/preload/*.php') as $file) { + require_once $file; +} +// Start output buffering so that PHP notices and warnings from +// WordPress's initialisation phase do not prematurely send the +// HTTP response headers. Without buffering, the first notice +// (printed as an HTML Warning: ... snippet) commits the +// headers, making headers_sent() return true for the rest of +// the request. That prevents the auto-login mu-plugin from +// calling wp_set_auth_cookie() and setcookie() later during +// the init hook, which in turn breaks nonce validation for +// POST requests (e.g. saving a new post). +// PHP flushes the buffer automatically at script end, so all +// WordPress output is still delivered to the browser. +ob_start(); +` + ); + + await php.writeFile( + '/internal/shared/preload/env.php', + `...,'accepted_args'=>N). +// Returns 'wp10', 'wp12', or 'wp15'. +function _playground_detect_wp_hook_format() { + static $format = null; + if ($format !== null) return $format; + $doc_root = isset($_SERVER['DOCUMENT_ROOT']) + ? $_SERVER['DOCUMENT_ROOT'] : '/wordpress'; + $version_path = $doc_root . '/wp-includes/version.php'; + $wp_version = '1.0'; + if (file_exists($version_path)) { + include $version_path; + } + if (version_compare($wp_version, '1.5', '>=')) { + $format = 'wp15'; + } elseif (version_compare($wp_version, '1.2', '>=')) { + $format = 'wp12'; + } else { + $format = 'wp10'; + } + return $format; +} + +// Allow adding filters/actions prior to loading WordPress. +// $function_to_add MUST be a string. +// Stores the callback in the $wp_filter format that the target +// WordPress version's apply_filters() expects. +function playground_add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { + global $wp_filter; + $fmt = _playground_detect_wp_hook_format(); + if ($fmt === 'wp10') { + $wp_filter[$tag][] = $function_to_add; + } elseif ($fmt === 'wp12') { + $wp_filter[$tag][$priority][] = $function_to_add; + } else { + $wp_filter[$tag][$priority][$function_to_add] = array( + 'function' => $function_to_add, + 'accepted_args' => $accepted_args + ); + } +} +function playground_add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { + playground_add_filter( $tag, $function_to_add, $priority, $accepted_args ); +} + +// Set legacy WordPress auth cookies BEFORE WordPress loads. +// +// For WP 1.0-2.4, the auto-login mu-plugin runs too late: by the +// time the init hook fires (or may not fire at all on the front +// page), WordPress has already determined the user's login state +// from $_COOKIE. We set $_COOKIE here in the preload so WordPress +// sees the user as logged in from the very first request, and we +// also persist the cookies via setcookie() so subsequent requests +// bring them back automatically through Playground's HttpCookieStore. +function playground_legacy_set_auth_cookies_early() { + if (!defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) return; + if (isset($_COOKIE['playground_auto_login_already_logged_out'])) return; + + // Skip if auth cookies are already set by a previous request. + foreach ($_COOKIE as $name => $_) { + if (strncmp($name, 'wordpressuser_', 14) === 0) return; + } + + $user_name = PLAYGROUND_AUTO_LOGIN_AS_USER; + $pass_md5 = md5(md5('password')); + + // Read the actual siteurl from the SQLite database so the cookie + // hash matches what WordPress 1.0-2.4 computes from get_settings(). + $siteurl = null; + $db_path = defined('DB_DIR') ? DB_DIR . '.ht.sqlite' : ''; + if ($db_path && class_exists('PDO') && file_exists($db_path)) { + try { + $pdo = new PDO('sqlite:' . $db_path); + $stmt = $pdo->query("SELECT option_value FROM wp_options WHERE option_name = 'siteurl' LIMIT 1"); + if ($stmt) $siteurl = $stmt->fetchColumn(); + $pdo = null; + } catch (Exception $e) {} + } + if (!$siteurl && defined('WP_SITEURL')) $siteurl = WP_SITEURL; + if (!$siteurl) return; + + $cookiehash = md5($siteurl); + $user_cookie_name = 'wordpressuser_' . $cookiehash; + $pass_cookie_name = 'wordpresspass_' . $cookiehash; + $_COOKIE[$user_cookie_name] = $user_name; + $_COOKIE[$pass_cookie_name] = $pass_md5; + + if (!headers_sent()) { + $exp = time() + 172800; + setcookie($user_cookie_name, $user_name, $exp, '/'); + setcookie($pass_cookie_name, $pass_md5, $exp, '/'); + } +} +playground_legacy_set_auth_cookies_early(); + +// Fix date function comparisons for the SQLite driver. +// Old WordPress (< 4.0) generates date queries like: +// YEAR(post_date)='2026' AND MONTH(post_date)='4' +// using string literals. The SQLite driver's user-defined +// YEAR/MONTH/DAYOFMONTH/DAY functions return integers, and +// SQLite does not coerce types the way MySQL does (integer +// 4 != text '4' in SQLite). This filter strips quotes around +// numeric values in these comparisons so both sides are integers. +function playground_fix_sqlite_date_comparisons($query) { + if ( + stripos($query, 'YEAR') === false && + stripos($query, 'MONTH') === false && + stripos($query, 'DAY') === false + ) { + return $query; + } + return preg_replace( + '/\\b(YEAR|MONTH|DAYOFMONTH|DAY)\\s*\\(([^)]+)\\)\\s*=\\s*\\'(\\d+)\\'/i', + '$1($2) = $3', + $query + ); +} +playground_add_filter( 'query', 'playground_fix_sqlite_date_comparisons' ); + +// WP < 2.2 doesn't natively override get_option('siteurl') / +// get_option('home') with the WP_SITEURL / WP_HOME constants. +// Modern WP (2.2+) checks these constants in get_option() and +// returns the constant value, bypassing the DB. For WP 1.0-2.1, +// we replicate this behavior via option_siteurl / option_home +// filters so that admin navigation links use the correct +// Playground scoped URL instead of whatever the DB stores. +function playground_override_siteurl($value) { + if (defined('WP_SITEURL')) { + return WP_SITEURL; + } + return $value; +} +function playground_override_home($value) { + if (defined('WP_HOME')) { + return WP_HOME; + } + return $value; +} +playground_add_filter( 'option_siteurl', 'playground_override_siteurl' ); +playground_add_filter( 'option_home', 'playground_override_home' ); + +// Load our mu-plugins after customer mu-plugins. +// NOTE: this means our mu-plugins can't use the muplugins_loaded action! +playground_add_action( 'muplugins_loaded', 'playground_load_mu_plugins', 0 ); +// WP < 2.8 doesn't fire muplugins_loaded, so also hook into init +// as a fallback. The $loaded flag ensures mu-plugins load only once. +playground_add_action( 'init', 'playground_load_mu_plugins', -1000 ); +function playground_load_mu_plugins() { + static $loaded = false; + if ($loaded) return; + $loaded = true; + // Load all PHP files from /internal/shared/mu-plugins sorted by filename + $mu_plugins_dir = '/internal/shared/mu-plugins'; + if(!is_dir($mu_plugins_dir)){ + return; + } + $mu_plugins = glob( $mu_plugins_dir . '/*.php' ); + sort( $mu_plugins ); + global $wp_version; + $is_legacy_wp = isset($wp_version) && version_compare($wp_version, '2.8', '<'); + foreach ( $mu_plugins as $mu_plugin ) { + // sqlite-database-integration.php is loaded separately + // by the preload lazy loader or db.php. + if (strpos($mu_plugin, 'sqlite-database-integration') !== false) { + continue; + } + // Most mu-plugins use closures in add_action/add_filter + // or call functions like site_url() that don't exist in + // very old WordPress. WP < 2.8 crashes on closures in + // hooks; WP < 2.6 lacks site_url(). Only load mu-plugins + // that are explicitly written for legacy WP compatibility. + if ($is_legacy_wp) { + // 1-auto-login.php uses LEGACY_AUTO_LOGIN_BODY which + // handles WP 1.0-2.5 auth APIs with named functions + // only (no closures, no site_url()). + if (strpos($mu_plugin, '1-auto-login.php') === false) { + continue; + } + } + require_once $mu_plugin; + } + // On WP < 2.8, this function runs during init (priority + // -1000). PHP 5.x's foreach iterates over a copy of the + // array, so add_action() calls inside the loaded mu-plugin + // (e.g. add_action('init', 'playground_auto_login', 1)) + // won't fire — the init hook list was already snapshotted. + // Call the functions directly as a workaround. + // + // PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT tells the auto-login + // function to set cookies in-process without redirecting. + // In Playground's service worker, a redirect+Set-Cookie + // can cause a race because the cookie isn't applied before + // the redirected request fires. Define it unconditionally + // for all legacy PHP so the init-hook auto-login uses the + // in-process path. + if (!defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT')) { + define('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT', true); + } + + // WP < 2.8: add_action() calls inside mu-plugins won't + // fire because PHP 5.x's foreach iterates a copy. Call + // auto-login directly here as a workaround. + if ($is_legacy_wp) { + if (function_exists('playground_auto_login_redirect_target')) { + playground_auto_login_redirect_target(); + } + if (function_exists('playground_auto_login')) { + playground_auto_login(); + } + } +} +` + ); + + /** + * Automatically logs the user in to aid the login Blueprint step and + * the Playground runtimes. See the modern counterpart in + * index.ts for the shared doc. + */ + await php.writeFile( + '/internal/shared/mu-plugins/1-auto-login.php', + `prop = value), which + * was valid in PHP 4 but triggers E_WARNING in PHP 5.x. + * These are benign and cannot be fixed in WP core since + * Playground downloads unmodified WordPress releases. + */ + if (strpos($message, "Creating default object from empty value") !== false) { + return; + } + /** + * SimplePie/RSS errors when feeds can't be fetched in WASM. + * WP 2.8's dashboard widget calls get_error_string() on a + * null SimplePie object when HTTP requests fail. + */ + if (strpos($message, "get_error_string() on null") !== false || + strpos($message, "get_error_string() on a non-object") !== false) { + return; + } + /** + * Don't complain about network errors when not connected to the network. + */ + if ( + ( + ! defined('USE_FETCH_FOR_REQUESTS') || + ! USE_FETCH_FOR_REQUESTS + ) && + strpos($message, "WordPress could not establish a secure connection to WordPress.org") !== false) + { + return; + } +`; diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts new file mode 100644 index 0000000000..243361829f --- /dev/null +++ b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts @@ -0,0 +1,208 @@ +/** + * Legacy WordPress SQLite preload setup for legacy PHP (< 7) running + * WP 1.0–4.9 on SQLite. Self-contained mirror of + * {@link preloadSqliteIntegration} in index.ts — the modern function + * dispatches here when isLegacyPHPVersion(phpVersion) is true. + * + * Uses the shared {@link SQLITE_PRELOAD_LOADER_CLASS} helper so the + * Playground_SQLite_Integration_Loader class definition stays in + * sync between modern and legacy preloads. + */ +import type { UniversalPHP } from '@php-wasm/universal'; +import { joinPaths, phpVar } from '@php-wasm/util'; +import { unzipFile } from '@wp-playground/common'; +import type { SqliteIntegrationOptions } from '..'; +import { SQLITE_PRELOAD_LOADER_CLASS } from '../sqlite-preload-loader'; +import { LEGACY_WP_ERROR_REPORTING_PHP_EXPR } from './legacy-fixes'; +import { MYSQL_SHIMS_PHP } from './mysql-shims'; + +export async function preloadLegacySqliteIntegration( + php: UniversalPHP, + sqliteZip: File, + // eslint-disable-next-line @typescript-eslint/no-unused-vars -- keep the signature aligned with preloadSqliteIntegration for symmetry + _options: SqliteIntegrationOptions = {} +): Promise { + if (await php.isDir('/tmp/sqlite-database-integration')) { + await php.rmdir('/tmp/sqlite-database-integration', { + recursive: true, + }); + } + await php.mkdir('/tmp/sqlite-database-integration'); + await unzipFile(php, sqliteZip, '/tmp/sqlite-database-integration'); + const SQLITE_PLUGIN_FOLDER = '/internal/shared/sqlite-database-integration'; + + // The SQLite integration plugin was extracted into the sole subdirectory + // of /tmp/sqlite-database-integration. Move it to SQLITE_PLUGIN_FOLDER. + const temporarySqlitePluginFolder = `/tmp/sqlite-database-integration/${ + (await php.listFiles('/tmp/sqlite-database-integration'))[0] + }`; + await php.mv(temporarySqlitePluginFolder, SQLITE_PLUGIN_FOLDER); + + // Prevents the SQLite integration from trying to call activate_plugin() + await php.defineConstant('SQLITE_MAIN_FILE', '1'); + const dbCopy = await php.readFileAsText( + joinPaths(SQLITE_PLUGIN_FOLDER, 'db.copy') + ); + let dbPhp = dbCopy + .replace( + "'{SQLITE_IMPLEMENTATION_FOLDER_PATH}'", + phpVar(SQLITE_PLUGIN_FOLDER) + ) + .replace( + "'{SQLITE_PLUGIN}'", + phpVar(joinPaths(SQLITE_PLUGIN_FOLDER, 'load.php')) + ); + + // Guard every top-level add_action() call for WordPress < 3.1 + // compatibility: when loaded via the lazy $wpdb loader, + // WordPress hooks may not be available yet. Wrap the call so + // it short-circuits to a no-op when add_action is undefined. + // Anchors on start-of-line regardless of how the call is + // formatted (single-line, multi-line, with or without space). + dbPhp = dbPhp.replace( + /^add_action\(/gm, + 'function_exists("add_action") && add_action(' + ); + + const dbPhpPath = joinPaths(await php.documentRoot, 'wp-content/db.php'); + const SQLITE_MUPLUGIN_PATH = + '/internal/shared/mu-plugins/sqlite-database-integration.php'; + + // Playground writes a @playground-managed db.php drop-in for + // legacy WordPress (see legacy-wp/legacy-boot.ts). The preload + // guard must therefore recognise our own marker and *not* skip + // itself on its own file — a blind `file_exists` guard would + // short-circuit the lazy-$wpdb setup on every request. Only a + // real user-supplied db.php should abort the preload. + const dbPhpGuard = ` +if(file_exists(${phpVar(dbPhpPath)})) { + $_pg_db_php = @file_get_contents(${phpVar(dbPhpPath)}); + if (strpos($_pg_db_php, '@playground-managed') === false) { + return; + } + unset($_pg_db_php); +} +`; + + await php.writeFile(SQLITE_MUPLUGIN_PATH, `` + dbPhp); + await php.writeFile( + `/internal/shared/preload/0-sqlite.php`, + buildLegacySqlitePreload(dbPhpGuard, SQLITE_MUPLUGIN_PATH) + ); + + /** + * Ensure the SQLite integration is loaded and clearly communicate + * if it isn't. This is useful because WordPress database errors + * may be cryptic and won't mention the SQLite integration. + */ + await php.writeFile( + `/internal/shared/mu-plugins/sqlite-test.php`, + ` + +reinitialize_sqlite(); + }` +)} +// These stubs return truthy values because old WordPress (< 3.0) +// calls mysql_connect() directly in wpdb::__construct() and calls +// bail() on a falsy return. +if(!function_exists('mysqli_connect')) { + function mysqli_connect() { return true; } +} +if(!function_exists('mysqli_init')) { + function mysqli_init() { return true; } +} +if(!function_exists('mysql_connect')) { + function mysql_connect() { return true; } +} +if(!function_exists('mysql_select_db')) { + function mysql_select_db() { return true; } +} +${MYSQL_SHIMS_PHP} +if (!function_exists('str_contains')) { + function str_contains($haystack, $needle) { + return $needle === '' || strpos($haystack, $needle) !== false; + } +} +if (!function_exists('str_starts_with')) { + function str_starts_with($haystack, $needle) { + return strncmp($haystack, $needle, strlen($needle)) === 0; + } +} +if (!function_exists('str_ends_with')) { + function str_ends_with($haystack, $needle) { + return $needle === '' || substr($haystack, -strlen($needle)) === $needle; + } +} +if (PHP_MAJOR_VERSION < 7) { + // E_DEPRECATED (8192) and E_STRICT (2048) are constants + // added in PHP 5.3 - use numeric values for PHP 5.2 compat. + $level = ${LEGACY_WP_ERROR_REPORTING_PHP_EXPR}; + error_reporting($level); + ini_set('error_reporting', $level); +} +if (!isset($_SERVER['SERVER_PROTOCOL'])) { + $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1'; +} +if (!ini_get('date.timezone')) { + date_default_timezone_set('UTC'); +} + + `; +} diff --git a/packages/playground/wordpress/src/platform-mu-plugins.ts b/packages/playground/wordpress/src/platform-mu-plugins.ts new file mode 100644 index 0000000000..416f884921 --- /dev/null +++ b/packages/playground/wordpress/src/platform-mu-plugins.ts @@ -0,0 +1,212 @@ +import type { UniversalPHP } from '@php-wasm/universal'; + +/** + * Writes the Playground platform mu-plugins that run on every + * supported PHP/WordPress combination — 0-playground.php, + * sitemap-redirect.php, inline-tinymce-content-css.php. + * + * Both {@link setupPlatformLevelMuPlugins} (modern path) and + * {@link setupLegacyPlatformLevelMuPlugins} call this to avoid + * duplicating ~200 lines of identical PHP strings. + */ +export async function writeCommonPlatformMuPlugins( + php: UniversalPHP +): Promise { + await php.writeFile( + '/internal/shared/mu-plugins/0-playground.php', + ` 'sqlite', + 'path' => FQDB, + 'driver_path' => defined('WP_MYSQL_ON_SQLITE_LOADER_PATH') + ? WP_MYSQL_ON_SQLITE_LOADER_PATH + : dirname(SQLITE_MAIN_FILE) . '/wp-pdo-mysql-on-sqlite.php', + ); + } else { + $db_info = array( + 'type' => 'mysql', + // TODO: Save MySQL connection config. + ); + } + $wp_env = array('db' => $db_info); + $wp_env_php = sprintf('flush_rules(); + } + @file_put_contents($flag, '1'); + } + add_action('init', 'playground_maybe_flush_rewrite_rules', 99999); + + // Create the fonts directory if missing + if(!file_exists(WP_CONTENT_DIR . '/fonts')) { + mkdir(WP_CONTENT_DIR . '/fonts'); + } + + $log_file = WP_CONTENT_DIR . '/debug.log'; + if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) { + if ( is_string( WP_DEBUG_LOG ) ) { + $log_file = WP_DEBUG_LOG; + } + ini_set('error_log', $log_file); + } else { + ini_set('log_errors', '0'); + } + define('ERROR_LOG_FILE', $log_file); + ?>` + ); + + /** + * WordPress 6.7+ only generates the sitemap.xml → wp-sitemap.xml rewrite + * rule when installed at the domain root. Since Playground may use non-root + * installations, the rule isn't generated. This mu-plugin handles the + * redirect manually by using the site URL to determine the correct base path. + * + * @see https://github.com/WordPress/wordpress-playground/issues/2051 + */ + await php.writeFile( + '/internal/shared/mu-plugins/sitemap-redirect.php', + `load_sqlite_integration(); + if($GLOBALS['wpdb'] === $this) { + throw new Exception('Infinite loop detected in $wpdb – SQLite integration plugin could not be loaded'); + } + return call_user_func_array( + array($GLOBALS['wpdb'], $name), + $arguments + ); + } + public function __get($name) { + $this->load_sqlite_integration(); + if($GLOBALS['wpdb'] === $this) { + throw new Exception('Infinite loop detected in $wpdb – SQLite integration plugin could not be loaded'); + } + return $GLOBALS['wpdb']->$name; + } + public function __set($name, $value) { + $this->load_sqlite_integration(); + if($GLOBALS['wpdb'] === $this) { + throw new Exception('Infinite loop detected in $wpdb – SQLite integration plugin could not be loaded'); + } + $GLOBALS['wpdb']->$name = $value; + } + protected function load_sqlite_integration() { + ${loadBody} + } +} +/** + * The Query Monitor plugin short-circuits in the CLI SAPI. However, in Playground, + * the SAPI is always "cli" at the moment. Let's set a constant to disable the CLI + * detection. + * + * @see https://github.com/WordPress/sqlite-database-integration/pull/212 + * @see https://github.com/WordPress/sqlite-database-integration/pull/215 + */ +define('QM_TESTS', true); +$wpdb = $GLOBALS['wpdb'] = new Playground_SQLite_Integration_Loader(); + +/** + * WordPress is capable of using a preloaded global $wpdb. However, if + * it cannot find the drop-in db.php plugin it still checks whether + * the mysqli_connect() function exists even though it's not used. + * + * What WordPress demands, Playground shall provide. + */ +`; +} From e0453772d7c6366a15c8ddc29921925b2c12eb9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Fri, 17 Apr 2026 16:44:38 +0200 Subject: [PATCH 09/24] Simplify legacy-wp/ patches and trim verbose comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed every patch in legacy-wp/legacy-fixes.ts (and supporting files) for need, gating tightness, and comment clarity. Net: 4828 → 3637 lines. Verified WP 1.0–4.9 + PHP 5.2 still boot end-to-end. Notable changes: - Drop ensureLegacyAdminAuth — duplicated the auto-login flow already provided by legacy-mu-plugins.ts. - Drop the wp_check_mysql_version no-op — mysql-shims.ts already returns '8.0.0' from mysql_get_server_info. - Drop the dead overrides array in patchWpAdminRelativePaths — the generic regex pass already covers every entry. - Drop duplicate mysql_/mysqli_/str_* stubs from generateDbPhpContent — the 0-sqlite.php preload runs first and already defines them. - Promote `mail` to LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS so it's blocked across the whole boot lifecycle, and drop the wp_mail no-op in patchWpInstallMailCrash (PHPMailer's SMTP fallback also dies on the disabled fsockopen, so it now fails safely with a WP_Error). - Drop the dead collapseWp1xInstallerSteps helper — install.php is never reached during legacy boot, and runPostInstallLegacyFixups seeds the admin user via PDO so a manual visit short-circuits to "Already Installed". - Drop the dead `if (!\$_pg_skip_redirect)` redirect branches from all three eras of LEGACY_AUTO_LOGIN_BODY — playground_load_mu_plugins unconditionally defines PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT before invoking the body in legacy contexts. - Restrict playground_legacy_set_auth_cookies_early to WP < 2.5; the wordpressuser_* cookies it sets are inert on later versions. - Share legacyAuthCookieBlock(usernameExpr) between patchAdminAuthRedirect and patchAdminAjaxAuth; replace their brittle wp-settings.php text scans with readOnDiskWpVersion gates. - Move every WP-version-specific gate out of the patch functions and into patchWordPressSourceFiles — the orchestrator now reads the WP version once and dispatches each patch only when its range matches. The previously needle-only patches (e.g. patchWp10*, patchWp21*, patchCheckAdminReferer) get explicit ranges too, so they short-circuit at the front door instead of reading files they can't apply to. - Replace the fragile one-level-nesting regex in patchCheckAdminReferer with a reusable balanced-brace helper (replacePhpFunctionBody), reused by the "not installed" die() and the do_action('init') rewrite extracted out of patchWpSettingsPhp. - Fix patchWpSettingsPhp bug where settingsChanged was set unconditionally inside the error_reporting block, rewriting wp-settings on every boot. - Split the PHP 5.2 vs 5.3+ error-handler boilerplate in legacy-mu-plugins.ts into named helpers instead of inline ternaries. - Trim multi-paragraph "## The bug / ## The fix" docblocks to a single why-sentence each, dropping embedded WP source samples and indentation diagrams. --- .../wordpress/src/legacy-wp/legacy-boot.ts | 94 +- .../wordpress/src/legacy-wp/legacy-fixes.ts | 2303 +++++------------ .../src/legacy-wp/legacy-mu-plugins.ts | 409 ++- .../src/legacy-wp/legacy-sqlite-preload.ts | 41 +- .../wordpress/src/legacy-wp/mysql-shims.ts | 22 +- 5 files changed, 840 insertions(+), 2029 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts b/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts index b5003a0f59..6e07e773e4 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts @@ -31,10 +31,11 @@ import { } from './legacy-fixes'; /** - * Network I/O functions that must be disabled on legacy PHP builds - * (< 7) to avoid "null function or function signature mismatch" - * WASM crashes when WordPress calls fsockopen or cURL during cron, - * update checks, dashboard RSS widgets, etc. + * Network/transport I/O functions disabled on legacy PHP (< 7) to + * keep fsockopen/cURL calls (cron, update checks, dashboard RSS) and + * mail() (no sendmail/SMTP transport in the WASM sandbox; same "null + * function or function signature mismatch" WASM trap) from crashing + * the runtime — let them fail safely instead. */ const LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS = [ 'fsockopen', @@ -42,24 +43,13 @@ const LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS = [ 'curl_init', 'curl_exec', 'curl_multi_exec', + 'mail', ] as const; /** - * Disables network I/O on legacy PHP (< 7) and merges the legacy - * disable_functions list with any caller-supplied list. - * - * No-op on modern PHP — called unconditionally from bootRequestHandler. - * - * Old WordPress (2.5–3.6) calls fsockopen/cURL during cron, update - * checks, and dashboard RSS widgets. The underlying socket/cURL - * operations trigger "null function or function signature mismatch" - * WASM errors; disabling them makes the calls fail safely (return - * false) instead of crashing. - * - * setPhpIniEntries overwrites keys, so we merge with whatever the - * caller already passed in `phpIniEntries` — otherwise a - * networking-disabled list from the web worker would be silently - * replaced by this legacy-only list. + * Merges the legacy network disable list into php.ini for legacy PHP + * (no-op on modern). Merge instead of overwrite so a caller-supplied + * disable_functions list is preserved. */ export function applyLegacyPhpIniOverrides( php: PHP, @@ -220,17 +210,12 @@ async function installLegacyWordPress( * catches the throw and proceeds to post-install fixups regardless. */ async function runLegacyInstaller(php: PHP): Promise { - // WP 1.0–3.0 on legacy PHP: skip the install.php HTTP request - // entirely. These old installers trigger various unreachable - // WASM traps (mail(), mysql_get_server_info(), etc.) that the - // PHP 5.2 binary can't handle. The post-install PDO fallback - // creates all tables, users, options, and content without - // running any crashable PHP. - // - // WP 1.0–1.2: the post-install PDO fallback creates the very - // simple schema entirely. - // WP 1.5–3.0: needs dbDelta() for proper table schemas but - // skips the rest of the installer. + // WP 1.0–3.0 installers trigger WASM traps (mail(), + // mysql_get_server_info(), etc.) on the PHP 5.2 binary, so skip + // the install.php HTTP request entirely. + // WP 1.0–1.2: post-install PDO fallback builds the full schema. + // WP 1.5–3.0: needs dbDelta() for the schema; the rest is left + // to the PDO fallback. const wpVersion = readOnDiskWpVersion(php, php.documentRoot); if (wpVersion !== null) { const parsed = parseFloat(wpVersion); @@ -243,22 +228,15 @@ async function runLegacyInstaller(php: PHP): Promise { } } - // Disable networking + mail functions during installation. This - // must include all the functions already disabled via - // applyLegacyPhpIniOverrides() — setPhpIniEntries replaces the - // entire value, so listing only 'fsockopen' would re-enable - // curl_init/curl_exec and cause WASM crashes when the installer - // makes outbound HTTP requests. - // - // error_reporting is suppressed at the ini level too: old WP - // class declarations (e.g. Walker_Page) trigger E_STRICT during - // compile, which PHP may report using the ini value rather than - // the runtime error_reporting() call. + // withPHPIniValues replaces values wholesale, so re-list every + // function from LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS (mail() is + // already in there — the installer otherwise calls it and crashes). + // error_reporting is suppressed at the ini level because old WP + // class declarations trigger E_STRICT at compile time, which PHP + // reports against the ini value rather than the runtime + // error_reporting() call. const iniOverrides: Record = { - disable_functions: [ - ...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS, - 'mail', - ].join(','), + disable_functions: LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS.join(','), allow_url_fopen: '0', error_reporting: String(LEGACY_WP_ERROR_REPORTING_VALUE), }; @@ -284,10 +262,9 @@ async function runLegacyInstaller(php: PHP): Promise { }) ); - // Skip isWordPressInstalled() entirely — it can trigger a WASM - // trap (not a PHP exception) on old WordPress (< 3.0), which - // corrupts the runtime beyond recovery. Use the installer - // response text as a heuristic instead. + // isWordPressInstalled() can WASM-trap on old WP (< 3.0) and + // corrupt the runtime, so detect success from the installer + // response text instead. const installSucceeded = response.text?.includes('Success') || response.text?.includes('successful') || @@ -357,8 +334,8 @@ async function setLegacyPermalinkStructureViaPdo(php: PHP): Promise { /** * Runs dbDelta() and populate_options/populate_roles without the - * full wp_install() function. Used for WP 2.3–3.0 where the - * installer crashes but we still need the table schemas. + * full wp_install(). Used for WP 2.1–3.0 where install.php crashes + * but we still need the table schemas. */ async function runDbDeltaOnly(php: PHP): Promise { try { @@ -370,26 +347,17 @@ async function runDbDeltaOnly(php: PHP): Promise { ob_start(); require getenv('DOCUMENT_ROOT') . '/wp-load.php'; ob_clean(); - // Load upgrade functions for dbDelta if (file_exists(ABSPATH . 'wp-admin/includes/upgrade.php')) { require_once ABSPATH . 'wp-admin/includes/upgrade.php'; } elseif (file_exists(ABSPATH . 'wp-admin/upgrade-functions.php')) { require_once ABSPATH . 'wp-admin/upgrade-functions.php'; } - // Create tables via dbDelta — the critical step that - // creates the proper schema for the WP version. if (function_exists('make_db_current_silent')) { make_db_current_silent(); } - // populate_options/populate_roles on WP 2.3+ only. - // WP 2.1-2.2 crash in these functions (WASM traps - // from mail/network calls that bypass PHP try/catch). - // The PDO fallback seeds essential options/roles. - global $wp_version; - // populate_options sets db_version and other essential - // options. populate_roles creates the roles/capabilities. - // On PHP 5.2 WP 2.1-2.2 these crash with WASM traps. - // Run them for any WP version that defines them. + // Seed essential options/roles when the loader exposes + // them. The PDO fallback in runPostInstallLegacyFixups + // backfills anything missing if either call dies. if (function_exists('populate_options')) populate_options(); if (function_exists('populate_roles')) populate_roles(); echo 'OK'; diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index d759033ceb..9eaa904674 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -18,37 +18,22 @@ import type { PHP } from '@php-wasm/universal'; import { logger } from '@php-wasm/logger'; import { joinPaths } from '@php-wasm/util'; -import { MYSQL_SHIMS_PHP } from './mysql-shims'; /** - * Backports WP 6.2's `wp_check_php_mysql_versions()` mysqli check - * to WP 5.0–6.1 running on modern PHP + SQLite. No-op on WP 6.2+ - * and on WP < 5.0 (handled by the legacy boot path instead). - * - * WP 5.0–6.1 hard-check `extension_loaded('mysqli')` inside - * `wp_check_php_mysql_versions()`, which runs before `$wpdb` is - * constructed and before `wp_initial_constants()` defines - * `WP_CONTENT_DIR`. That means neither a userland `mysqli_connect()` - * stub nor a `wp-content/db.php` drop-in can satisfy it — the - * source itself has to change. We rewrite the single - * `extension_loaded('mysqli')` call in wp-includes/load.php to - * `function_exists('mysqli_connect')`, matching the fix WordPress - * itself shipped in 6.2. - * - * The sibling `$mysql_compat` check in wp-admin/install.php is - * already satisfied: by the time it runs, `$wpdb->db_version()` - * dispatches through the preload's lazy loader to WP_SQLite_DB, - * which deliberately returns `'8.0'` — high enough for every - * `$required_mysql_version`. + * Backports WP 6.2's mysqli check to WP 5.0–6.1 on SQLite: the + * `extension_loaded('mysqli')` guard in `wp_check_php_mysql_versions()` + * runs before `$wpdb` and before `WP_CONTENT_DIR` is defined, so + * neither a userland stub nor a `wp-content/db.php` drop-in can + * satisfy it — the source itself has to change. */ export async function backportWpPreV62MysqlCheck( php: PHP, documentRoot: string ): Promise { - const wpVersion = readOnDiskWpVersion(php, documentRoot); - if (wpVersion === null) return; - const parsed = parseFloat(wpVersion); - if (!Number.isFinite(parsed) || parsed < 5.0 || parsed >= 6.2) { + const wpVersionString = readOnDiskWpVersion(php, documentRoot); + if (wpVersionString === null) return; + const wpVersion = parseFloat(wpVersionString); + if (!Number.isFinite(wpVersion) || wpVersion < 5.0 || wpVersion >= 6.2) { return; } @@ -100,125 +85,133 @@ export async function patchWordPressSourceFiles( ) { await ensureVersionPhp(php, documentRoot); await ensureWpLoadPhp(php, documentRoot); - await patchWp10DoubleQuotedSqlLiterals(php, documentRoot); + + // Version-agnostic patches. Each one's match pattern is narrow + // enough to be a no-op on WP versions that don't need it. await patchWpSettingsPhp(php, documentRoot); - await patchWpFunctionsPhp(php, documentRoot); await patchWpInstallPhp(php, documentRoot); await patchWpDbPhp(php, documentRoot); await patchWpSchemaPhp(php, documentRoot); await patchWpAdminRelativePaths(php, documentRoot); - await patchCheckAdminReferer(php, documentRoot); - await patchWpAdminDashboard(php, documentRoot); await patchWpLoginDisable1Password(php, documentRoot); - await ensureLegacyAdminAuth(php, documentRoot); - await patchAdminAuthRedirect(php, documentRoot); - await patchAdminAjaxAuth(php, documentRoot); - await patchLegacyWpCategoriesZeroPk(php, documentRoot); - await patchWp10LoginPlaintextCompare(php, documentRoot); - await patchWp33ScreenPhpSelfThis(php, documentRoot); - await patchWp21PluginsPhpInArray(php, documentRoot); - await patchWp41AutoDraftZeroDatetime(php, documentRoot); - await patchWp15AdminPostAutoIncrement(php, documentRoot); - await patchWp21InsertPostEmptyDates(php, documentRoot); - await patchWp27InsertPostZeroDateGmt(php, documentRoot); - await patchWp10AdminLogoLink(php, documentRoot); - await patchWp10EditPhpPostTitleLinks(php, documentRoot); - await patchWp10PostPhpInsertNullId(php, documentRoot); - await patchWp12PostPhpInsertNullId(php, documentRoot); await patchErrorReportingInWpLoad(php, documentRoot); - await patchAdminNetworkCalls(php, documentRoot); await patchWpInstallMailCrash(php, documentRoot); - await patchWp47ThemeSearchForms(php, documentRoot); + + // Version-gated patches. If version.php is missing or unparseable, + // skip them all rather than guessing. + const wpVersionString = readOnDiskWpVersion(php, documentRoot); + if (wpVersionString === null) return; + const wpVersion = parseFloat(wpVersionString); + if (!Number.isFinite(wpVersion)) return; + + if (wpVersion < 1.2) { + await patchWp10DoubleQuotedSqlLiterals(php, documentRoot); + await patchWp10PostPhpInsertNullId(php, documentRoot); + await patchWp10LoginPlaintextCompare(php, documentRoot); + } + if (wpVersion < 1.5) { + await patchWp10AdminLogoLink(php, documentRoot); + } + if (1.2 <= wpVersion && wpVersion < 1.5) { + await patchWp12PostPhpInsertNullId(php, documentRoot); + } + if (1.5 <= wpVersion && wpVersion < 2.0) { + await patchWp15AdminPostAutoIncrement(php, documentRoot); + await patchWpAdminDashboard(php, documentRoot); + } + if (wpVersion < 2.0) { + await patchWp10EditPhpPostTitleLinks(php, documentRoot); + await patchWpFunctionsPhp(php, documentRoot); + } + if (2.0 <= wpVersion && wpVersion < 2.3) { + await patchLegacyWpCategoriesZeroPk(php, documentRoot); + } + if (2.1 <= wpVersion && wpVersion < 2.3) { + await patchWp21PluginsPhpInArray(php, documentRoot); + } + if (2.1 <= wpVersion && wpVersion < 2.7) { + await patchWp21InsertPostEmptyDates(php, documentRoot); + } + if (wpVersion < 2.5) { + await patchCheckAdminReferer(php, documentRoot); + } + if (2.7 <= wpVersion && wpVersion < 3.0) { + await patchWp27InsertPostZeroDateGmt(php, documentRoot); + } + if (wpVersion < 2.8) { + await patchAdminAuthRedirect(php, documentRoot); + await patchAdminAjaxAuth(php, documentRoot); + } + if (2.9 <= wpVersion && wpVersion < 3.6) { + await patchAdminNetworkCalls(php, documentRoot); + } + if (3.1 <= wpVersion && wpVersion < 4.2) { + await patchWp41AutoDraftZeroDatetime(php, documentRoot); + } + if (3.3 <= wpVersion && wpVersion < 3.4) { + await patchWp33ScreenPhpSelfThis(php, documentRoot); + } + if (wpVersion >= 4.7) { + await patchWp47ThemeSearchForms(php, documentRoot); + } } /** - * Patches WP 4.7+ themes for PHP 5.2 WASM compatibility. - * - * ## The bug - * - * WP 4.7+ themes (Twenty Seventeen, Twenty Sixteen, Twenty Fifteen) - * include `searchform.php` templates that crash the PHP 5.2 WASM - * runtime with `unreachable` WASM errors when included via - * `get_search_form()`. The crash occurs during sidebar widget - * rendering (search widget) and any other code path that calls - * `get_search_form()`. - * - * The crash is a WASM-level fatal (`unreachable` instruction) that - * kills the entire PHP instance, not a PHP error. The exact cause - * is somewhere in the template inclusion path — the same functions - * called inline (esc_url, home_url, twentyseventeen_get_svg) all - * work fine, but requiring the template file via ob_start/require/ - * ob_get_clean triggers the crash. - * - * ## The fix - * - * Remove theme `searchform.php` files so that `get_search_form()` - * falls back to its inline HTML form builder, which works correctly. - * The inline form has the same functionality (search input + submit - * button) but without the theme-specific styling/SVG icons. + * Removes theme `searchform.php` templates on WP 4.7+ so + * `get_search_form()` falls back to its inline HTML builder. Including + * a theme template via ob_start/require triggers an `unreachable` WASM + * trap on the PHP 5.2 binary that the runtime cannot recover from. */ async function patchWp47ThemeSearchForms(php: PHP, documentRoot: string) { - // Only apply to WP 4.7+ (WP_Hook class is the WP 4.7 marker) - const wpHookPath = joinPaths(documentRoot, 'wp-includes/class-wp-hook.php'); - if (!php.fileExists(wpHookPath)) return; - const themesDir = joinPaths(documentRoot, 'wp-content/themes'); if (!php.isDir(themesDir)) return; - const themes = php.listFiles(themesDir); - for (const theme of themes) { + for (const theme of php.listFiles(themesDir)) { const searchformPath = joinPaths(themesDir, theme, 'searchform.php'); - if (!php.fileExists(searchformPath)) continue; - php.unlink(searchformPath); + if (php.fileExists(searchformPath)) { + php.unlink(searchformPath); + } } } /** - * Patches wp-admin/admin.php to prevent network calls that crash WASM. - * WP 2.9–3.5 admin.php triggers SimplePie RSS fetches and update checks - * that call fsockopen/cURL, causing "null function" WASM crashes. + * Short-circuits dashboard RSS widgets, admin_init update hooks, and + * SimplePie's HTTP fetcher on WP 2.9–3.5. fsockopen/cURL are already + * disabled, but the surrounding HTTP machinery still touches stream + * APIs that the PHP 5.2 WASM binary cannot tolerate. */ async function patchAdminNetworkCalls(php: PHP, documentRoot: string) { - // Patch wp-admin/includes/dashboard.php to skip RSS widgets const dashPath = joinPaths(documentRoot, 'wp-admin/includes/dashboard.php'); if (php.fileExists(dashPath)) { let dash = php.readFileAsText(dashPath); - // Disable the WordPress Blog (Primary) RSS widget if ( dash.includes('function wp_dashboard_primary()') && !dash.includes('/* pg_no_rss */') ) { - dash = dash.replace( - /function wp_dashboard_primary\(\)\s*\{/, - 'function wp_dashboard_primary() { /* pg_no_rss */ return;' - ); - dash = dash.replace( - /function wp_dashboard_secondary\(\)\s*\{/, - 'function wp_dashboard_secondary() { /* pg_no_rss */ return;' - ); - // Also disable other RSS-fetching widgets - dash = dash.replace( - /function wp_dashboard_plugins\(\)\s*\{/, - 'function wp_dashboard_plugins() { /* pg_no_rss */ return;' - ); + for (const fn of [ + 'wp_dashboard_primary', + 'wp_dashboard_secondary', + 'wp_dashboard_plugins', + ]) { + dash = dash.replace( + new RegExp(`function ${fn}\\(\\)\\s*\\{`), + `function ${fn}() { /* pg_no_rss */ return;` + ); + } await php.writeFile(dashPath, dash); } } - // WP 2.9–3.5: Remove admin_init hooks that make network calls. - // These crash WASM via fsockopen/cURL. The hooks are registered - // in wp-includes/update.php and wp-admin/includes/update.php. - { - const adminPhpPath2 = joinPaths(documentRoot, 'wp-admin/admin.php'); - if (php.fileExists(adminPhpPath2)) { - let admin2 = php.readFileAsText(adminPhpPath2); - if ( - admin2.includes("do_action('admin_init');") && - !admin2.includes('/* pg_admin_init_cleanup */') - ) { - admin2 = admin2.replace( - "do_action('admin_init');", - `/* pg_admin_init_cleanup */ + const adminPhpPath = joinPaths(documentRoot, 'wp-admin/admin.php'); + if (php.fileExists(adminPhpPath)) { + let admin = php.readFileAsText(adminPhpPath); + if ( + admin.includes("do_action('admin_init');") && + !admin.includes('/* pg_admin_init_cleanup */') + ) { + admin = admin.replace( + "do_action('admin_init');", + `/* pg_admin_init_cleanup */ if (function_exists('remove_action')) { @remove_action('admin_init', '_maybe_update_plugins'); @remove_action('admin_init', '_maybe_update_themes'); @@ -228,34 +221,26 @@ if (function_exists('remove_action')) { @remove_action('admin_init', 'wp_update_themes'); } do_action('admin_init');` - ); - await php.writeFile(adminPhpPath2, admin2); - } + ); + await php.writeFile(adminPhpPath, admin); } } - // Patch wp-admin/includes/update.php to disable network-calling - // update checks that crash WASM on WP 2.9–3.5. const adminUpdatePath = joinPaths( documentRoot, 'wp-admin/includes/update.php' ); if (php.fileExists(adminUpdatePath)) { let adminUpdate = php.readFileAsText(adminUpdatePath); - // wp_plugin_update_rows and wp_theme_update_rows make network - // calls. The admin update.php file also registers various - // admin_init hooks. Disable all update-related functions. if (!adminUpdate.includes('/* pg_admin_no_updates */')) { - // Prepend a return-early to all functions that fetch updates - const fns = [ + for (const fn of [ 'wp_plugin_update_rows', 'wp_plugin_update_row', 'wp_theme_update_rows', 'wp_theme_update_row', 'wp_update_plugins', 'wp_update_themes', - ]; - for (const fn of fns) { + ]) { const pattern = new RegExp( `function ${fn}\\s*\\([^)]*\\)\\s*\\{` ); @@ -270,17 +255,10 @@ do_action('admin_init');` } } - // Patch SimplePie to not make network calls. - // SimplePie's file.php uses fsockopen/cURL to fetch RSS feeds. - const simplePieFilePath = joinPaths( - documentRoot, - 'wp-includes/SimplePie/File.php' - ); - const simplePieOldPath = joinPaths( - documentRoot, - 'wp-includes/class-simplepie.php' - ); - for (const spPath of [simplePieFilePath, simplePieOldPath]) { + for (const spPath of [ + joinPaths(documentRoot, 'wp-includes/SimplePie/File.php'), + joinPaths(documentRoot, 'wp-includes/class-simplepie.php'), + ]) { if (!php.fileExists(spPath)) continue; let sp = php.readFileAsText(spPath); if ( @@ -299,85 +277,26 @@ do_action('admin_init');` } /** - * Prevents the WP installer from calling wp_mail() which crashes the - * PHP 5.2 WASM runtime. - * - * ## The bug - * - * `wp_install()` calls `wp_new_blog_notification()` at the end of the - * installation, which calls `wp_mail()`. PHP's `mail()` function - * invokes sendmail/SMTP operations that trigger `unreachable` WASM - * traps in the PHP 5.2 binary. The crash happens after all tables - * and data are already created, so the installation succeeds but the - * crash propagates as `RuntimeError: unreachable`. - * - * `disable_functions = 'mail'` prevents user-space calls to `mail()`, - * but WordPress's pluggable `wp_mail()` catches the disabled function - * and may still invoke PHPMailer's SMTP transport, which also crashes. - * - * ## The fix - * - * Replace `wp_new_blog_notification()` with a no-op in the upgrade - * functions file. This is safe because the notification email can't - * be delivered anyway in the WASM sandbox. + * No-ops the install-time pretty-permalink HTTP probe so the PHP 5.2 + * WASM binary doesn't trap inside wp_remote_get(); the probe just + * times out anyway. wp_mail() is no longer patched: mail() is in + * LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS and PHPMailer's SMTP fallback + * also needs fsockopen (also disabled), so wp_mail() now fails + * safely with a WP_Error rather than trapping. */ async function patchWpInstallMailCrash(php: PHP, documentRoot: string) { - // Disable functions that crash the PHP 5.2 WASM runtime during - // WordPress installation: - // - // 1. wp_mail() — mail delivery is impossible in WASM and the - // underlying mail()/SMTP operations trigger `unreachable` - // WASM traps. - // - // 2. wp_install_maybe_enable_pretty_permalinks() (WP 3.0+) — - // makes an HTTP request via wp_remote_get() during install. - // Even with transports disabled, the HTTP infrastructure - // code path triggers WASM crashes. - - // Patch wp_mail() — in pluggable.php (WP 2.2+) or functions.php (WP 2.0-2.1) - const mailFiles = [ - joinPaths(documentRoot, 'wp-includes/pluggable.php'), - // WP 1.5-2.5 used pluggable-functions.php (renamed to - // pluggable.php in WP 2.6). - joinPaths(documentRoot, 'wp-includes/pluggable-functions.php'), - joinPaths(documentRoot, 'wp-includes/functions.php'), - ]; - for (const filePath of mailFiles) { - if (!php.fileExists(filePath)) { - continue; - } - const content = php.readFileAsText(filePath); - if (content.includes('/* pg_no_mail */')) continue; - const idx = content.indexOf('function wp_mail('); - if (idx === -1) continue; - const braceIdx = content.indexOf('{', idx); - if (braceIdx === -1) continue; - await php.writeFile( - filePath, - content.substring(0, braceIdx + 1) + - ' /* pg_no_mail */ return true;' + - content.substring(braceIdx + 1) - ); - } - - // Patch functions in the upgrade/install files that crash the - // PHP 5.2 WASM runtime during WordPress installation. - const upgradeFiles = [ - joinPaths(documentRoot, 'wp-admin/includes/upgrade.php'), - joinPaths(documentRoot, 'wp-admin/upgrade-functions.php'), - ]; - // Functions to make no-ops (return immediately) and the marker - // comment used for idempotent patching. + // wp_check_mysql_version is left untouched: mysql_get_server_info is + // shimmed in mysql-shims.ts, so the version check now passes safely. const noOpFunctions: Array<[string, string]> = [ - // Calls wp_mail() which invokes sendmail/SMTP → WASM crash. ['function wp_new_blog_notification', 'pg_no_blog_notification'], - // Makes HTTP request via wp_remote_get() → WASM crash. [ 'function wp_install_maybe_enable_pretty_permalinks', 'pg_no_permalink_check', ], - // Calls mysql_get_server_info() with a fake handle → crash. - ['function wp_check_mysql_version', 'pg_no_mysql_check'], + ]; + const upgradeFiles = [ + joinPaths(documentRoot, 'wp-admin/includes/upgrade.php'), + joinPaths(documentRoot, 'wp-admin/upgrade-functions.php'), ]; for (const filePath of upgradeFiles) { if (!php.fileExists(filePath)) continue; @@ -402,70 +321,34 @@ async function patchWpInstallMailCrash(php: PHP, documentRoot: string) { } /** - * Patches wp-load.php (WP 2.6+) to suppress E_STRICT and E_DEPRECATED. - * wp-load.php sets error_reporting before wp-settings.php loads, so both - * files need the same patch. + * Mask E_STRICT/E_DEPRECATED in wp-load.php — it sets error_reporting + * before wp-settings.php's matching patch runs, so both need patching. */ async function patchErrorReportingInWpLoad(php: PHP, documentRoot: string) { const wpLoadPath = joinPaths(documentRoot, 'wp-load.php'); if (!php.fileExists(wpLoadPath)) return; - let content = php.readFileAsText(wpLoadPath); + const content = php.readFileAsText(wpLoadPath); if (!content.includes('error_reporting(')) return; if (content.includes('~8192') && content.includes('~2048')) return; - content = content.replace( + const patched = content.replace( /error_reporting\(([^)]+)\)/g, - (_match: string, flags: string) => { - if (flags.includes('~8192') && flags.includes('~2048')) { - return _match; - } - return `error_reporting((${flags}) & ~8192 & ~2048)`; - } + (_match: string, flags: string) => + `error_reporting((${flags}) & ~8192 & ~2048)` ); - await php.writeFile(wpLoadPath, content); + await php.writeFile(wpLoadPath, patched); } /** - * Patches WP 1.0 and WP 1.2 admin templates to neutralise absolute - * `http://wordpress.org` links that crash Playground. - * - * ## The bug - * - * Three locations contain absolute `http://wordpress.org` links: - * - * 1. WP 1.0's `wp-admin/menu.php` (header logo): - * ```html - *

    WordPress

    - * ``` - * 2. WP 1.2's `wp-admin/admin-header.php` (header logo): - * ```html - *

    WordPress

    - * ``` - * 3. Both versions' `wp-admin/admin-footer.php` (footer version badge): - * ```html - * WordPress 1.0.2 ... - * ``` - * - * Clicking any of these causes the browser to navigate the scoped iframe - * to `https://wordpress.org/`. WordPress.org sets `X-Frame-Options: - * sameorigin`, so the browser refuses to embed it. Worse, the navigation - * destroys the scoped iframe — leaving the Playground shell with no inner - * frame, effectively crashing the entire Playground session. - * - * ## The fix - * - * Replace each offending `href="http://wordpress.org[/]"` with `href="#"` - * in the three affected files. This keeps the visual elements intact while - * preventing any navigation that would escape the Playground scope. - * - * Scoped to the exact literals that identify WP 1.0/1.2 templates; later - * WP versions (1.5+) use a different template structure and are unaffected. + * Neutralises absolute `http://wordpress.org` links in WP 1.0/1.2 admin + * templates. Clicking them navigates the scoped iframe to wordpress.org, + * which `X-Frame-Options: sameorigin` then refuses to render — destroying + * the Playground frame. */ async function patchWp10AdminLogoLink(php: PHP, documentRoot: string) { - // WP 1.0: logo is the first line of menu.php + // WP 1.0: header logo lives in wp-admin/menu.php. const menuPhpPath = joinPaths(documentRoot, 'wp-admin/menu.php'); if (php.fileExists(menuPhpPath)) { const content = php.readFileAsText(menuPhpPath); - // Marker prevents double-patching (idempotent). if (!content.includes('/* pg_wp10_logo_link */')) { const needle = '

    WordPress

    '; @@ -481,22 +364,15 @@ async function patchWp10AdminLogoLink(php: PHP, documentRoot: string) { } } - // WP 1.2: logo is in admin-header.php body section. - // The exact source line is: - //

    - // - // Note: the opening tag contains `?>` inside the title attribute, - // so [^>]* would stop early at the `>` in `?>`. We locate the - // anchor by finding its start/end string positions directly and - // splice the replacement in without regex. + // WP 1.2: header logo lives in admin-header.php. The opening anchor + // tag contains a `?>` inside the title attribute, so [^>]* would stop + // short — splice by start/end indices instead of using a regex. const adminHeaderPath = joinPaths( documentRoot, 'wp-admin/admin-header.php' ); if (php.fileExists(adminHeaderPath)) { const content = php.readFileAsText(adminHeaderPath); - // Marker prevents double-patching (idempotent). if (!content.includes('/* pg_wp12_logo_link */')) { const logoStart = 'WordPress - // WP 1.2 exact source: - // WordPress - // Both are neutralised the same way. + // WP 1.0 (no trailing slash) and WP 1.2 (with slash): footer badge. const adminFooterPath = joinPaths( documentRoot, 'wp-admin/admin-footer.php' @@ -529,7 +400,6 @@ async function patchWp10AdminLogoLink(php: PHP, documentRoot: string) { if (php.fileExists(adminFooterPath)) { const content = php.readFileAsText(adminFooterPath); if (!content.includes('/* pg_wp10_footer_link */')) { - // Match both WP 1.0 (no trailing slash) and WP 1.2 (with slash). const patched = content .replace( 'WordPress', @@ -547,75 +417,22 @@ async function patchWp10AdminLogoLink(php: PHP, documentRoot: string) { } /** - * Patches WP 1.0, 1.2, and 1.5's `wp-admin/edit.php` so that post titles - * in the "Edit Posts" list link to the edit form instead of the - * front-end permalink (or to nothing, in WP 1.5's case). - * - * ## The bug - * - * WP 1.0's `edit.php` renders each post's title as: - * - * ```php - * - * ``` - * - * WP 1.2's `edit.php` renders it as: - * - * ```php - *
    - * ``` - * - * A separate "Edit" text link (`post.php?action=edit&post=$id`) exists - * but is easy to miss. The title should be the primary affordance for - * editing. - * - * ## The fix - * - * WP 1.0: Replace the `permalink_link()` call in the title `` - * anchor with `post.php?action=edit&post=`. - * - * WP 1.2: Replace the `the_permalink()` call in the table cell anchor - * with the same edit URL. WP 1.2's loop variable for the post ID is - * also `$id` (set by `start_wp()`). - * - * WP 1.5: Wrap the plain `the_title()` output in a link to - * `post.php?action=edit&post=$id`. The `$id` variable is also set by - * `start_wp()` in WP 1.5's loop. - * - * All variants remove `rel="permalink"` since the link no longer - * points to the canonical URL. - * - * Scoped to `edit.php` files that contain the exact markup; later WP - * versions (2.0+) use `wp_insert_post()` and a different template - * structure and are unaffected. + * Rewrites post-title links in WP 1.0/1.2/1.5 `wp-admin/edit.php` so they + * open the edit form. WP 1.0/1.2 link to the front-end permalink (which + * navigates away from the admin), and WP 1.5 renders no link at all — a + * separate inline "Edit" link exists but is easy to miss. `$id` is set by + * `start_wp()` in all three versions' loops. */ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { const editPhpPath = joinPaths(documentRoot, 'wp-admin/edit.php'); if (!php.fileExists(editPhpPath)) return; const content = php.readFileAsText(editPhpPath); - // Marker prevents double-patching (idempotent). if (content.includes('/* pg_wp10_post_title_edit */')) return; let patched = content; // WP 1.0: title wrapped in , href uses permalink_link(). - // Exact source string: - // const needleWp10 = ''; if (patched.includes(needleWp10)) { @@ -625,11 +442,8 @@ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { ); } - // WP 1.2: title in a - // Wrap in an edit link using $id (set by start_wp()). + // WP 1.5: title is plain text — wrap it in an edit link. const needleWp15 = '"; @@ -661,46 +471,18 @@ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { } /** - * Patches WP 1.0's `wp-admin/post.php` so that newly created posts - * receive a proper auto-incremented ID instead of ID=0. - * - * ## The bug - * - * WP 1.0's INSERT statement for new posts explicitly passes `'0'` as the - * `ID` column value: - * - * ```sql - * INSERT INTO wp_posts (ID, post_author, ...) VALUES ('0', ...) - * ``` - * - * In MySQL, inserting `0` into an `AUTO_INCREMENT` column is equivalent - * to inserting `NULL` — MySQL ignores the zero and generates the next - * sequence value. SQLite does not implement this behaviour: it stores the - * literal value `0`, so every new post ends up with `ID = 0`. A second - * insert then collides with the first, and even when it succeeds the - * post-title links in `edit.php` render as `post=0`. - * - * ## The fix - * - * Replace `'0'` with `NULL` in the `VALUES` list of both INSERT variants - * (with and without geo-position columns). SQLite treats `NULL` inserted - * into an `INTEGER PRIMARY KEY` column as an auto-generate request, - * which is the intended behaviour. - * - * Scoped to the exact literals present in WP 1.0's `post.php`; the - * geo-positions branch and the plain branch are patched separately. + * WP 1.0's wp-admin/post.php inserts `ID = '0'` literally, which MySQL + * silently turns into the next AUTO_INCREMENT value but SQLite stores as + * 0. Rewrite the literal to `NULL` so SQLite picks the next rowid. */ async function patchWp10PostPhpInsertNullId(php: PHP, documentRoot: string) { const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); if (!php.fileExists(postPhpPath)) return; const content = php.readFileAsText(postPhpPath); - // Idempotency marker. if (content.includes('/* pg_wp10_insert_null_id */')) return; - // Both INSERT variants in WP 1.0's post.php share the same VALUES prefix. - // The geo-positions branch includes lat/lon columns; the plain branch does - // not. Both use the same VALUES prefix `('0', '$user_ID', ...`, which is - // the only place this literal appears. + // Unique to WP 1.0 (WP 1.2 adds '$now_gmt' to this prefix). Matches + // both the plain and the geo-positions INSERT branches. const needle = "('0', '$user_ID', '$now', '$content', '$post_title'"; if (!content.includes(needle)) return; @@ -714,36 +496,15 @@ async function patchWp10PostPhpInsertNullId(php: PHP, documentRoot: string) { } /** - * Patches WP 1.2's `wp-admin/post.php` so that newly created posts - * receive a proper auto-incremented ID instead of ID=0. - * - * ## The bug - * - * Identical to the WP 1.0 issue: WP 1.2 explicitly inserts `'0'` as the - * post `ID`, which MySQL silently turns into the next AUTO_INCREMENT value - * but SQLite stores literally as `0`. - * - * ## The fix - * - * Replace `'0'` with `NULL` in both INSERT variants (plain and - * geo-positions). The VALUES prefix in WP 1.2 differs from WP 1.0 because - * it also includes `post_date_gmt`: - * - * ```sql - * VALUES ('0', '$user_ID', '$now', '$now_gmt', '$content', ...) - * ``` - * - * Scoped to the exact string present only in WP 1.2's `post.php`. + * Same SQLite zero-PK fix as WP 1.0, scoped to WP 1.2's post.php + * (its VALUES prefix adds `$now_gmt`, making the needle unique). */ async function patchWp12PostPhpInsertNullId(php: PHP, documentRoot: string) { const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); if (!php.fileExists(postPhpPath)) return; const content = php.readFileAsText(postPhpPath); - // Idempotency marker. if (content.includes('/* pg_wp12_insert_null_id */')) return; - // WP 1.2's VALUES prefix includes '$now_gmt' (missing in WP 1.0), making - // this needle unique to WP 1.2. const needle = "('0', '$user_ID', '$now', '$now_gmt', '$content', '$post_title'"; if (!content.includes(needle)) return; @@ -758,56 +519,19 @@ async function patchWp12PostPhpInsertNullId(php: PHP, documentRoot: string) { } /** - * Patches WP 1.5's `wp-admin/post.php` to fix two SQL compatibility - * issues that prevent saving posts under the SQLite integration. - * - * ## Bug 1: NULL post ID from SHOW TABLE STATUS - * - * WP 1.5's `wp-admin/post.php` determines the next post ID by querying: - * - * ```php - * $id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE '$wpdb->posts'"); - * $post_ID = $id_result->Auto_increment; - * ``` - * - * In MySQL, `SHOW TABLE STATUS` returns the next `AUTO_INCREMENT` value. - * The SQLite integration implements this query but always returns - * `Auto_increment = NULL` because SQLite has no AUTO_INCREMENT concept. - * - * With `$post_ID = NULL`, the INSERT becomes: - * ```sql - * INSERT INTO wp_posts (ID, ...) VALUES ('', ...) - * ``` - * Inserting an empty string into an INTEGER PRIMARY KEY causes a - * "datatype mismatch" SQLite error. - * - * **Fix:** After the lookup, add a fallback that computes the next ID - * as `MAX(ID) + 1` when `Auto_increment` is NULL or zero. - * - * ## Bug 2: Missing NOT NULL columns in the INSERT - * - * The WP 1.5 `$postquery` INSERT omits `pinged` and - * `post_content_filtered`. The `wp_posts` table created by the SQLite - * integration has those columns as `NOT NULL` with a `NULL` default - * (matching the MySQL schema where MySQL's lenient mode would accept - * an empty value). Under the SQLite integration's strict mode this - * raises a NOT NULL constraint violation. - * - * **Fix:** Append `pinged, post_content_filtered` to the column list - * and the corresponding `'', ''` to the values list in `$postquery`. - * - * Both fixes are scoped to the exact strings present in WP 1.5's - * `wp-admin/post.php`; later versions removed this code path. + * Two WP 1.5 post.php fixes for SQLite: + * 1. SHOW TABLE STATUS returns Auto_increment = NULL on SQLite, so + * add a MAX(ID)+1 fallback. + * 2. The $postquery INSERT omits `pinged` and `post_content_filtered`, + * which are NOT NULL in the SQLite-built schema; add empty values. + * Both needles are unique to WP 1.5's post.php. */ async function patchWp15AdminPostAutoIncrement(php: PHP, documentRoot: string) { const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); if (!php.fileExists(postPhpPath)) return; let content = php.readFileAsText(postPhpPath); - // Idempotency marker. if (content.includes('/* pg_wp15_post_id_fallback */')) return; - // Fix 1: NULL Auto_increment from SHOW TABLE STATUS. - // The exact two-line sequence that uniquely identifies the bug site. const needleAutoInc = '$id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE \'$wpdb->posts\'");\n' + '\t$post_ID = $id_result->Auto_increment;'; @@ -816,18 +540,11 @@ async function patchWp15AdminPostAutoIncrement(php: PHP, documentRoot: string) { needleAutoInc, '$id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE \'$wpdb->posts\'");\n' + '\t$post_ID = $id_result->Auto_increment;\n' + - '\t// Playground fallback: SHOW TABLE STATUS returns Auto_increment = NULL\n' + - '\t// on SQLite. Compute the next ID from MAX(ID) instead. /* pg_wp15_post_id_fallback */\n' + - '\tif ( ! $post_ID ) {\n' + + '\tif ( ! $post_ID ) { /* pg_wp15_post_id_fallback */\n' + '\t\t$post_ID = (int) $wpdb->get_var("SELECT COALESCE(MAX(ID), 0) + 1 FROM $wpdb->posts");\n' + '\t}' ); - // Fix 2: Add missing NOT NULL columns to the $postquery INSERT. - // WP 1.5's INSERT omits 'pinged' and 'post_content_filtered'. - // The table schema (set up by the SQLite integration from the WP 2.x - // schema) has both columns as NOT NULL with a NULL default, so - // omitting them causes a NOT NULL constraint violation. const needleInsertCols = '(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, post_modified, post_modified_gmt, post_parent, menu_order)'; const needleInsertVals = @@ -851,88 +568,20 @@ async function patchWp15AdminPostAutoIncrement(php: PHP, documentRoot: string) { } /** - * Patches WP 2.1–2.6's `wp-includes/post.php` to always initialise - * empty post dates to the current time, even for draft posts. - * - * ## The bug - * - * WP 2.1–2.2's `wp_insert_post()` contains: - * - * ```php - * // If the post date is empty (due to having been new or a draft) - * // and status is not 'draft', set date to now - * if (empty($post_date)) { - * if ( 'draft' != $post_status ) - * $post_date = current_time('mysql'); - * } - * if (empty($post_date_gmt)) { - * if ( 'draft' != $post_status ) - * $post_date_gmt = get_gmt_from_date($post_date); - * } - * ``` - * - * WP 2.3 uses the same comment but an `in_array` guard without an else - * branch: - * - * ```php - * if (empty($post_date)) { - * if ( !in_array($post_status, array('draft', 'pending')) ) - * $post_date = current_time('mysql'); - * } - * if (empty($post_date_gmt)) { - * if ( !in_array($post_status, array('draft', 'pending')) ) - * $post_date_gmt = get_gmt_from_date($post_date); - * } - * ``` - * - * WP 2.5–2.6 uses the same `in_array` check but adds an explicit `else` - * branch that stores `'0000-00-00 00:00:00'` for drafts: - * - * ```php - * if (empty($post_date)) { - * if ( !in_array($post_status, array('draft', 'pending')) ) - * $post_date = current_time('mysql'); - * else - * $post_date = '0000-00-00 00:00:00'; // ← problem - * } - * if (empty($post_date_gmt)) { - * if ( !in_array($post_status, array('draft', 'pending')) ) - * $post_date_gmt = get_gmt_from_date($post_date); - * else - * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem - * } - * ``` - * - * In all three cases, saving a post with `post_status = 'draft'` causes - * `$post_date` and/or `$post_date_gmt` to end up as an empty string or - * `'0000-00-00 00:00:00'`. The SQLite integration's datetime coercion - * rejects these, throwing: - * - * *Incorrect datetime value: '0000-00-00 00:00:00'* (or *''*) - * - * That causes `wp_insert_post()` to return `0`/`false`, producing a - * blank "Write Post" page with no saved post and no error message. - * - * ## The fix - * - * Remove the inner draft-status guard (and any explicit zero-date `else` - * branch) so that `$post_date` and `$post_date_gmt` are always set to - * the current time when empty, regardless of `$post_status`. - * - * This is semantically harmless: the guard was intended to leave the - * date unset for drafts (so MySQL would store a zero date), but the - * SQLite integration rejects zero/empty dates. Using the current time - * for draft posts matches the behaviour all subsequent WP versions - * adopted. - * - * Three needle variants cover WP 2.1–2.2, WP 2.3, and WP 2.5–2.6 respectively. - * WP 2.7+ adopted a different structure where `$post_date` is always - * initialised but `$post_date_gmt` can still be zero for drafts; - * `patchWp27InsertPostZeroDateGmt` handles that case. + * WP 2.1–2.6 `wp_insert_post()` leaves `$post_date`/`$post_date_gmt` + * empty (or `'0000-00-00 00:00:00'` in WP 2.5–2.6) for draft/pending + * posts. The SQLite integration runs with NO_ZERO_DATE + + * STRICT_TRANS_TABLES and rejects those values, so saving a draft + * silently fails (insert returns 0, page reloads blank). + * + * Always initialise empty dates from current time — this is what + * WP 2.7+ already does. Three needle variants cover the WP 2.1–2.2, + * WP 2.3, and WP 2.5–2.6 source styles. WP 2.7+ is handled by + * `patchWp27InsertPostZeroDateGmt`. */ async function patchWp21InsertPostEmptyDates(php: PHP, documentRoot: string) { // WP 2.0 keeps wp_insert_post() in wp-includes/functions-post.php, - // while WP 2.1+ moved it to wp-includes/post.php. Try both paths. + // while WP 2.1+ moved it to wp-includes/post.php. const candidates = [ joinPaths(documentRoot, 'wp-includes/post.php'), joinPaths(documentRoot, 'wp-includes/functions-post.php'), @@ -940,14 +589,10 @@ async function patchWp21InsertPostEmptyDates(php: PHP, documentRoot: string) { const postPhpPath = candidates.find((p) => php.fileExists(p)); if (!postPhpPath) return; let content = php.readFileAsText(postPhpPath); - // Idempotency marker. if (content.includes('/* pg_wp21_insert_post_date */')) return; const replacement = - '// Playground patch: always initialise empty dates, even for drafts.\n' + - '\t// The original guard left $post_date empty for drafts, which the\n' + - '\t// SQLite integration rejects as an invalid datetime value.\n' + - '\t// /* pg_wp21_insert_post_date */\n' + + '/* pg_wp21_insert_post_date */\n' + '\tif (empty($post_date)) {\n' + "\t\t$post_date = current_time('mysql');\n" + '\t}\n' + @@ -982,9 +627,8 @@ async function patchWp21InsertPostEmptyDates(php: PHP, documentRoot: string) { '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + '\t}'; - // WP 2.5–2.6 variant: same `!in_array` guard as WP 2.3 but WITH an - // explicit `else $x = '0000-00-00 00:00:00'` branch for both fields. - // The zero date in the else branch is the direct cause of the SQLite error. + // WP 2.5–2.6 variant: same `!in_array` guard as WP 2.3 plus an explicit + // zero-date `else` branch (the direct trigger of the SQLite rejection). const needleWp25 = "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + '\tif (empty($post_date)) {\n' + @@ -1015,62 +659,23 @@ async function patchWp21InsertPostEmptyDates(php: PHP, documentRoot: string) { } /** - * Patches `wp-includes/post.php` in WP 2.7–2.9 to avoid inserting a zero - * `post_date_gmt` that the SQLite integration rejects in strict mode. - * - * ## The bug - * - * WP 2.7 restructured the date initialisation in `wp_insert_post()`. - * `$post_date` is now always set to `current_time('mysql')` when empty: - * - * ```php - * if ( empty($post_date) || '0000-00-00 00:00:00' == $post_date ) - * $post_date = current_time('mysql'); - * ``` - * - * However, `$post_date_gmt` still stores a zero value for draft/pending posts: - * - * ```php - * if ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) { - * if ( !in_array( $post_status, array( 'draft', 'pending' ) ) ) - * $post_date_gmt = get_gmt_from_date($post_date); - * else - * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem - * } - * ``` - * - * The SQLite integration is configured with `NO_ZERO_DATE` + - * `STRICT_TRANS_TABLES` SQL modes active. Inserting `'0000-00-00 00:00:00'` - * into a `DATETIME` column raises: - * - * *Incorrect datetime value: '0000-00-00 00:00:00'* - * - * That error causes `wp_insert_post()` to return `false`. The form - * submission to `post.php` then receives post ID 0, `redirect_post(0)` - * sends the user back to `post-new.php` without a `?posted=` parameter, - * and the page renders as a blank empty "Write Post" form — the user sees - * no error and no confirmation that anything was saved. - * - * WP 2.7–2.9 use this two-space-indented, single-array variant. - * WP 3.0 added `'auto-draft'` to the array — that pattern is already - * covered by `patchWp41AutoDraftZeroDatetime`. - * - * ## The fix - * - * Replace the `'0000-00-00 00:00:00'` literal in the `else` branch with - * `get_gmt_from_date($post_date)`, which always produces a valid datetime. - * `$post_date` is guaranteed non-empty by this point, so this is safe. + * WP 2.7–2.9 `wp_insert_post()` writes a zero `post_date_gmt` for + * draft/pending posts. The SQLite integration runs with NO_ZERO_DATE + + * STRICT_TRANS_TABLES, the insert fails, and post.php redirects back to + * an empty "Write Post" form with no error. + * + * Replace the zero-date else branch with `get_gmt_from_date($post_date)`, + * which is safe because `$post_date` is already guaranteed non-empty. + * WP 3.0+ added `'auto-draft'` to the same `in_array` and is handled by + * `patchWp41AutoDraftZeroDatetime`. */ async function patchWp27InsertPostZeroDateGmt(php: PHP, documentRoot: string) { const postPhpPath = joinPaths(documentRoot, 'wp-includes/post.php'); if (!php.fileExists(postPhpPath)) return; const content = php.readFileAsText(postPhpPath); - // Idempotency marker. if (content.includes('/* pg_wp27_post_date_gmt */')) return; - // WP 2.7–2.9: single-line post_date init (always set), then a braced - // post_date_gmt block with draft/pending-only array (no 'auto-draft'). - // Indentation from WP 2.7 source: one tab throughout. + // WP 2.7–2.9: draft/pending-only array (no 'auto-draft' yet). const needle = "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + "\t\tif ( !in_array( $post_status, array( 'draft', 'pending' ) ) )\n" + @@ -1095,81 +700,24 @@ async function patchWp27InsertPostZeroDateGmt(php: PHP, documentRoot: string) { } /** - * Patches `wp-includes/post.php` in WP 3.1–4.1 to avoid inserting zero - * datetime values that the SQLite integration rejects in strict mode. - * - * ## The bug - * - * `post-new.php` calls: - * - * ```php - * $post = get_default_post_to_edit( $post_type, true ); - * ``` - * - * The `$create_in_db = true` argument causes `get_default_post_to_edit()` - * to persist the draft immediately via `wp_insert_post()`. Inside - * `wp_insert_post()`, when the post status is `'auto-draft'` (or - * `'draft'`/`'pending'`), WordPress deliberately stores a zero GMT - * timestamp: - * - * WP 3.1–3.9 variant (tab-indented, braceless if/else): - * ```php - * if ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) { - * if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) - * $post_date_gmt = get_gmt_from_date($post_date); - * else - * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem - * } - * ``` - * - * WP 4.0–4.1 variant (space-indented, braced if/else): - * ```php - * if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) { - * $post_date_gmt = get_gmt_from_date( $post_date ); - * } else { - * $post_date_gmt = '0000-00-00 00:00:00'; // ← problem - * } - * ``` - * - * The SQLite integration is configured with `NO_ZERO_DATE` + - * `STRICT_TRANS_TABLES` SQL modes active. Inserting `'0000-00-00 00:00:00'` - * into a `DATETIME` column raises: - * - * *Incorrect datetime value: '0000-00-00 00:00:00'* - * - * That error causes `wp_insert_post()` to return `0`. `get_default_post_to_edit()` - * then calls `get_post(0)`, which returns null. In `post-new.php`, `$post->ID` - * is 0, so the post form renders with `post_ID=0`. When that form is - * submitted, `post.php` processes it as an edit of post 0, and the - * capability check `current_user_can('edit_post', 0)` fails even for admins - * (post 0 doesn't exist), producing "You are not allowed to edit this post." - * In WP 3.3–3.4, the nonce check for `update-post_0` also fails because the - * nonce was generated for a real post ID. - * - * For WP 3.7–3.9, the same error also fires from the Quick Draft widget on - * the dashboard, which calls `get_default_post_to_edit('post', true)` to - * create an auto-draft for the quick-press form, producing a DB error and - * silently discarding the published post. - * - * ## The fix - * - * Replace the `'0000-00-00 00:00:00'` literal in the `else` branch with - * `get_gmt_from_date($post_date)`, which always produces a valid datetime. - * This is safe: `$post_date` is guaranteed non-empty by this point, so - * converting it to GMT never yields a zero date. - * - * Two needles handle the two code styles across WP versions: - * - WP 3.1–3.9: tab-indented braceless pattern - * - WP 4.0–4.1: space-indented braced pattern - * - * WP 4.2+ uses a completely rewritten `wp_insert_post()` that avoids the - * zero-date, so no patch is needed there. + * WP 3.1–4.1 `wp_insert_post()` writes a zero `post_date_gmt` for + * draft/pending/auto-draft posts. With NO_ZERO_DATE + STRICT_TRANS_TABLES + * the insert fails. Concrete failure modes: post-new.php's + * `get_default_post_to_edit($type, true)` returns null and the form + * renders with `post_ID=0`, leading to "You are not allowed to edit this + * post" / nonce failures on submit; WP 3.7–3.9's Quick Draft widget + * silently discards the published post. + * + * Replace the zero-date else branch with `get_gmt_from_date($post_date)` + * (safe: `$post_date` is already guaranteed non-empty). Two needles + * cover the WP 3.1–3.9 (tab-indented, braceless) and WP 4.0–4.1 + * (space-indented, braced) source styles. WP 4.2+ rewrote the function + * and no longer emits the zero date. */ async function patchWp41AutoDraftZeroDatetime(php: PHP, documentRoot: string) { const postPhpPath = joinPaths(documentRoot, 'wp-includes/post.php'); if (!php.fileExists(postPhpPath)) return; const content = php.readFileAsText(postPhpPath); - // Markers prevent double-patching (idempotent). if ( content.includes('/* pg_wp41_auto_draft_gmt */') || content.includes('/* pg_wp31_auto_draft_gmt */') @@ -1179,13 +727,6 @@ async function patchWp41AutoDraftZeroDatetime(php: PHP, documentRoot: string) { // WP 3.1–3.9: tab-indented, braceless if/else inside an outer // `if ( empty($post_date_gmt) || ... )` guard. - // Indentation (confirmed from WP 3.1 source): - // ↓ one tab if ( empty($post_date_gmt) || ... ) { - // ↓ two tabs if ( !in_array( ... ) ) - // ↓ three tabs $post_date_gmt = get_gmt_from_date($post_date); - // ↓ two tabs else - // ↓ three tabs $post_date_gmt = '0000-00-00 00:00:00'; - // ↓ one tab } const needleWp31 = "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + "\t\tif ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )\n" + @@ -1209,13 +750,7 @@ async function patchWp41AutoDraftZeroDatetime(php: PHP, documentRoot: string) { return; } - // WP 4.0–4.1: space-indented, braced if/else. - // Indentation uses real tab characters (as confirmed from WP 4.1 source): - // ↓ two tabs if ( ! in_array(...) ) { - // ↓ three tabs $post_date_gmt = get_gmt_from_date( $post_date ); - // ↓ two tabs } else { - // ↓ three tabs $post_date_gmt = '0000-00-00 00:00:00'; - // ↓ two tabs } + // WP 4.0–4.1: braced if/else, indented two extra tabs deeper than WP 3.x. const needleWp41 = "if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {\n" + '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date );\n' + @@ -1237,32 +772,9 @@ async function patchWp41AutoDraftZeroDatetime(php: PHP, documentRoot: string) { } /** - * Patches WP 3.3's `wp-admin/includes/screen.php` to fix an invalid - * `self::$this` reference in `WP_Screen::render_screen_meta()`. - * - * ## The bug - * - * WP 3.3.3's screen.php line 706 reads: - * - * ```php - * _help_sidebar; ?> - * ``` - * - * This is a typo: `self::` resolves static members, and `$this` is - * never a static property. Modern PHP (5.3+) raises a fatal error: - * *"Access to undeclared static property: WP_Screen::$this"*. The - * line sits inside `render_screen_meta()` — an instance method — so - * the fix is to drop the `self::` qualifier. - * - * The fatal only fires when `$this->_help_sidebar` is non-empty. - * `/wp-admin/post-new.php` triggers it because `edit-form-advanced.php` - * calls `get_current_screen()->set_help_sidebar(...)` before the - * admin header renders. Other admin pages that don't populate the - * sidebar never enter the `if ($has_sidebar)` branch. - * - * WP 3.4 rewrote the method to use a local `$help_sidebar` variable - * and never regressed, so this patch is scoped to WP 3.3 only via a - * content check for the exact buggy expression. + * Fix WP 3.3's `self::$this->_help_sidebar` typo in screen.php — PHP + * 5.3+ fatals on it whenever the sidebar is populated (e.g. post-new.php). + * WP 3.4 rewrote the method; gated by the buggy expression itself. */ async function patchWp33ScreenPhpSelfThis(php: PHP, documentRoot: string) { const screenPath = joinPaths(documentRoot, 'wp-admin/includes/screen.php'); @@ -1279,60 +791,16 @@ async function patchWp33ScreenPhpSelfThis(php: PHP, documentRoot: string) { } /** - * Patches WP 2.1's `wp-admin/plugins.php` to guard the `in_array()` - * call against a non-array `active_plugins` option value. - * - * ## The bug - * - * WP 2.1's plugins.php line 7 reads the active plugins list: - * - * ```php - * $current = get_option('active_plugins'); - * ``` - * - * And line 13 immediately passes it to `in_array()`: - * - * ```php - * if (!in_array($plugin, $current)) { - * ``` - * - * When the `active_plugins` option has never been written (fresh - * Playground install), `get_option()` returns an empty string `""` - * instead of an array. PHP then emits: - * - * *Warning: in_array() expects parameter 2 to be array, string given* - * - * WP 2.0 had an explicit sanity-check block immediately after the - * page header that reset a non-array result to `[]` and persisted it. - * That block was removed in WP 2.1 without a replacement guard at the - * point of use, leaving both the `activate` and `deactivate` branches - * vulnerable. - * - * WP 2.2 has the same code at line 13 and is patched here as well. - * WP 2.3+ introduced `maybe_unserialize()` in `get_option()` which - * ensures the stored value is always unserialized; the default for - * `active_plugins` was also set to `array()` from then on. - * - * ## The fix - * - * After the `$current = get_option(...)` assignment, insert: - * - * ```php - * if (!is_array($current)) $current = array(); - * ``` - * - * This mirrors the sanity check WP 2.0 already had and is idempotent - * (a real array value passes `is_array()` unchanged). + * Guard WP 2.1/2.2 plugins.php `in_array($plugin, $current)`: fresh + * installs return `""` from `get_option('active_plugins')` and PHP + * then warns. WP 2.0 had its own sanity block; WP 2.3+ unserializes + * and defaults to array(). */ async function patchWp21PluginsPhpInArray(php: PHP, documentRoot: string) { const pluginsPath = joinPaths(documentRoot, 'wp-admin/plugins.php'); if (!php.fileExists(pluginsPath)) return; const content = php.readFileAsText(pluginsPath); - // Marker prevents double-patching (idempotent). if (content.includes('/* pg_wp21_active_plugins_array */')) return; - // Only patch the WP 2.1/2.2 variant: get_option() + in_array() with - // no intervening array guard. WP 2.0 uses get_settings() and already - // has its own sanity check; WP 2.3+ initialises the option correctly. const needle = "$current = get_option('active_plugins');"; if (!content.includes(needle)) return; const patched = content.replace( @@ -1346,66 +814,24 @@ async function patchWp21PluginsPhpInArray(php: PHP, documentRoot: string) { } /** - * Patches WP 1.0's `wp-login.php` so manual logins work against the - * MD5-stored admin password that the Playground seeds. - * - * ## The bug - * - * WP 1.0's `wp-login.php` checks the submitted password by running: - * - * ```php - * $query = "SELECT ID, user_login, user_pass FROM $tableusers - * WHERE user_login = '$user_login' AND user_pass = '$password'"; - * ``` - * - * i.e. it expects `user_pass` to be stored *in plaintext* and - * compares it to the form-submitted password directly. Later on - * (line ~98) the same expectation is echoed in an in-PHP check - * `$login->user_pass == $password`. + * Teaches WP 1.0's `wp-login.php` to accept an md5-hashed `user_pass`. + * WP 1.0 compares submitted passwords to `user_pass` in plaintext, but + * Playground seeds every legacy admin row with `MD5('password')` to match + * the cookie-auth format WP 1.2+ and the auto-login mu-plugin expect. + * Without this patch the manual login form rejects the seeded admin. * - * Playground seeds every legacy admin user with `MD5('password')` - * because WP 1.2+ and the wider cookie-auth flow (wp_login / - * $user_pass_md5 cookie validation) assume that format. Mixing the - * two means WP 1.0's manual /wp-login.php form is rejected for the - * admin user even though the seeded row is internally consistent - * for every other auth path (mu-plugin auto-login, admin.php cookie - * shimming, and WP 1.0's own cookie validator which explicitly - * re-hashes user_pass). - * - * ## The fix - * - * Teach WP 1.0's `login()` function to also accept an already-MD5'd - * password by wrapping both comparison sites in "or md5" fallbacks. - * The SQL path becomes: - * - * ```php - * WHERE user_login = '$user_login' - * AND (user_pass = '$password' OR user_pass = MD5('$password')) - * ``` - * - * and the PHP post-query check gains the matching `md5($password)` - * branch. Both forms are still rejected when the submitted password - * is wrong — the extra branch only accepts a correct plaintext - * submission whose stored form happens to be the md5 hash. - * - * Scoped to WP 1.0 only via a content check for the exact `user_pass - * = '$password'` SQL fragment that disappeared in WP 1.2 when + * Scoped via the exact plaintext SQL fragment, which WP 1.2 removed when * `wp_login()` moved into `wp-includes/functions.php`. */ async function patchWp10LoginPlaintextCompare(php: PHP, documentRoot: string) { const loginPath = joinPaths(documentRoot, 'wp-login.php'); if (!php.fileExists(loginPath)) return; const content = php.readFileAsText(loginPath); - // WP 1.0 signature: the inline login() function in wp-login.php - // that runs the direct plaintext query. WP 1.2+ delegates to - // wp_login() and never contains this exact substring. const sqlMarker = "AND user_pass = '$password'"; if (!content.includes(sqlMarker)) return; if (content.includes('pg_wp10_plain_or_md5')) return; let patched = content.replace( sqlMarker, - // pg_wp10_plain_or_md5: accept either the original plaintext - // comparison or the md5-hashed form Playground seeds. "AND (user_pass = '$password' OR user_pass = MD5('$password')) /* pg_wp10_plain_or_md5 */" ); patched = patched.replace( @@ -1418,74 +844,28 @@ async function patchWp10LoginPlaintextCompare(php: PHP, documentRoot: string) { } /** - * Patches WP 2.0–2.2's install.php / upgrade-functions.php / admin-db.php - * to stop inserting `cat_ID = '0'` into the categories table. - * - * ## The bug - * - * WP 2.0 creates the default "Uncategorized" term by calling: - * - * ```php - * $wpdb->query("INSERT INTO $wpdb->categories (cat_ID, cat_name, ...) - * VALUES ('0', 'Uncategorized', ...)"); - * ``` - * - * The `'0'` is intentional: MySQL treats an INSERT of `0` into an - * `AUTO_INCREMENT` column as "please use the next auto-increment - * value" unless the `NO_AUTO_VALUE_ON_ZERO` sql_mode flag is set. - * The new row therefore gets `cat_ID = 1`. - * - * SQLite has no such special-case: an `INTEGER PRIMARY KEY AUTOINCREMENT` - * column stores whatever value it's given, so the row ends up with - * `cat_ID = 0`. Because the same row also has `category_parent = 0`, - * `get_nested_categories()` in `wp-admin/admin-functions.php` recurses - * on itself forever when rendering the category picker on - * `/wp-admin/post.php`: - * - * ```php - * $cats = return_categories_list($parent); // SELECT cat_ID WHERE category_parent = 0 → ['0'] - * foreach ($cats as $cat) { - * $result[$cat]['children'] = get_nested_categories($default, $cat); // loops forever - * } - * ``` - * - * The infinite recursion never emits output, so PHP flushes the - * headers sent so far (Content-Type from admin-header.php) and then - * hangs — which the service worker surfaces as `ERR_FAILED` after - * the 25 s request timeout. - * - * ## The fix - * - * Rewrite the offending `VALUES ('0', …)` expressions to - * `VALUES (NULL, …)`. SQLite's primary key then auto-assigns a fresh - * row id (1 for the first row), and MySQL behaves identically because - * inserting `NULL` into an `AUTO_INCREMENT` column also triggers the - * "next value" behavior. - * - * Scoped to install.php / upgrade-functions.php / admin-db.php only — - * that's where the `cat_ID = '0'` pattern appears in WP 2.0–2.2. - * WP 2.3+ replaced these direct INSERTs with helpers that pass NULL. + * WP 2.0–2.2 inserts `cat_ID = '0'` literally into wp_categories. + * MySQL turns the 0 into the next AUTO_INCREMENT, but SQLite stores 0, + * so `get_nested_categories()` then recurses forever (cat_ID 0 + + * category_parent 0) and hangs the request. Rewrite the leading '0' + * to NULL. WP 2.3+ uses helpers that pass NULL, so this is gated to + * 2.0–2.2 by version. */ async function patchLegacyWpCategoriesZeroPk(php: PHP, documentRoot: string) { const files = [ - // WP 2.0 inserts Uncategorized from install.php. + // WP 2.0: install.php. joinPaths(documentRoot, 'wp-admin/install.php'), - // WP 2.1/2.2 moved the insert to upgrade-functions.php. + // WP 2.1/2.2: upgrade-functions.php. joinPaths(documentRoot, 'wp-admin/upgrade-functions.php'), - // Used by wp_create_category() in WP 2.0–2.2 for every new - // category added post-install. + // wp_create_category() for runtime-added categories. joinPaths(documentRoot, 'wp-admin/admin-db.php'), ]; - // Match INSERT INTO
    - * ``` - * - * Both `permalink_link()` and `the_permalink()` output the front-end - * URL (e.g. `http://127.0.0.1:5400/scope:xxx/2006/01/01/hello-world/`), - * so clicking a title navigates away from the admin to the public-facing - * post. Users reasonably expect clicking a post title in an admin post - * list to open the edit form, not the front end. - * - * WP 1.5's `case 'title':` in `edit.php` renders the title as plain - * text with no link at all: - * - * ```php - * - * post_status) _e(' - Private'); ?>, href uses the_permalink(). - // Exact source string (with leading whitespace): - // - // The closing is on a separate line so we only patch the - // opening tag, which is sufficient to fix the href. + // WP 1.2: title in a , href uses the_permalink(). Closing is + // on a separate line; patching the opening tag is sufficient. const needleWp12 = ''; if (patched.includes(needleWp12)) { @@ -639,11 +453,7 @@ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { ); } - // WP 1.5: title column has no link at all — just plain text. - // Exact source (case 'title': block): - // - // post_status) _e(' - Private'); ?>\n' + "\t\tpost_status) _e(' - Private'); ?>
    .categories (cat_ID, ...) VALUES ('0', ...) - // and rewrite the leading '0' to NULL. Keep the match conservative - // so we don't accidentally touch other INSERTs. const insertRe = /(INSERT INTO\s+[^`"']*?categories\s*\([^)]*\bcat_ID\b[^)]*\)\s*VALUES\s*\()\s*'0'\s*,/g; for (const path of files) { if (!php.fileExists(path)) continue; const content = php.readFileAsText(path); if (!insertRe.test(content)) continue; - // Reset regex state (test() advances lastIndex on /g regexes). insertRe.lastIndex = 0; const patched = content.replace(insertRe, '$1NULL, '); if (patched !== content) { @@ -1507,33 +887,15 @@ async function ensureVersionPhp(php: PHP, documentRoot: string) { } /** - * Patches WP 1.0.2 SQL-emission bugs that break the SQLite - * integration's AST parser. - * - * Two problems on WP 1.0.2: - * - * 1. wp-blog-header.php line 303 builds the main query with: - * $where .= ' AND (post_status = "publish"'; - * MySQL accepts double quotes as string delimiters unless - * ANSI_QUOTES mode is enabled, but the SQLite integration's - * AST parser treats DOUBLE_QUOTED_TEXT as an identifier, not a - * string literal. The WHERE clause is rejected and every - * front-page request fails with "Failed to parse the MySQL - * query". Replace with single quotes, which the parser accepts - * as SINGLE_QUOTED_TEXT. - * - * 2. wp-includes/vars.php line 272 does: - * add_filter('all', 'wptexturize'); - * This registers wptexturize as a callback on the "all" filter, - * which means EVERY apply_filters() call in WP 1.0.2 runs its - * input through wptexturize — including SQL date literals. The - * result is that 'publish' becomes ‘publish’ (smart - * quotes) and the AST parser rejects the query. WP 1.2 fixed - * this by hooking wptexturize to specific content filters - * (the_content, the_title, etc.) instead of 'all'. Remove the - * 'all' hook entirely — we lose pretty quotes in content but - * gain working SQL, which is a reasonable tradeoff for a - * 20-year-old WP version. + * Two WP 1.0.2 SQL-emission bugs that the SQLite AST parser can't + * tolerate: + * 1. wp-blog-header.php emits `post_status = "publish"`. The parser + * reads double-quoted strings as identifiers, so the WHERE clause + * is rejected. Switch to single quotes. + * 2. wp-includes/vars.php registers `add_filter('all', 'wptexturize')`, + * which pipes EVERY apply_filters() value (including SQL literals) + * through wptexturize and produces smart-quoted SQL. Remove that + * hook; WP 1.2+ already wires wptexturize to specific filters. */ async function patchWp10DoubleQuotedSqlLiterals( php: PHP, @@ -1591,71 +953,49 @@ async function patchWpSettingsPhp(php: PHP, documentRoot: string) { const wpSettingsPath = joinPaths(documentRoot, 'wp-settings.php'); if (!php.fileExists(wpSettingsPath)) return; - let settings = php.readFileAsText(wpSettingsPath); - let settingsChanged = false; + const original = php.readFileAsText(wpSettingsPath); + let settings = original; - if (settings.includes("extension_loaded('mysql')")) { - settings = settings.replace( - /if\s*\(\s*!extension_loaded\('mysql'\)\s*\)\s*\n\s*die/, - 'if ( false ) // Patched for SQLite\n\tdie' - ); - settingsChanged = true; - } + // WP 1.5/2.0 abort with die() when the mysql extension is missing, + // before db.php gets a chance to load. + settings = settings.replace( + /if\s*\(\s*!extension_loaded\('mysql'\)\s*\)\s*\n\s*die/, + 'if ( false ) // Patched for SQLite\n\tdie' + ); - // Replace all error_reporting() calls with a version that - // suppresses E_DEPRECATED (8192) and E_STRICT (2048). - // Must use `& ~` (AND NOT), not `^` (XOR), because XOR - // toggles bits — on PHP 5.2 where E_ALL doesn't include - // E_STRICT, XOR would ENABLE it. Use numeric values because - // PHP 5.2 doesn't define the E_DEPRECATED constant. - { - settings = settings.replace( - /error_reporting\(([^)]+)\)/g, - (_match, flags) => { - // Already patched with & ~8192 & ~2048 - if (flags.includes('~8192') && flags.includes('~2048')) { - return _match; - } - return `error_reporting((${flags}) & ~8192 & ~2048)`; - } - ); - settingsChanged = true; - } + // Mask E_DEPRECATED (8192) and E_STRICT (2048) — old class + // declarations (e.g. Walker_Page) emit E_STRICT at compile time on + // PHP 5.2, which doesn't define these constants. Use `& ~`, not + // `^`: XOR would *enable* E_STRICT where E_ALL doesn't include it. + settings = settings.replace( + /error_reporting\(([^)]+)\)/g, + (match, flags) => + flags.includes('~8192') && flags.includes('~2048') + ? match + : `error_reporting((${flags}) & ~8192 & ~2048)` + ); - // set_magic_quotes_runtime() removed in PHP 7.0. - if (settings.includes('set_magic_quotes_runtime')) { - settings = settings.replace( - /set_magic_quotes_runtime\(\s*0\s*\)\s*;/g, - '// set_magic_quotes_runtime(0); // Removed' - ); - settingsChanged = true; - } + // set_magic_quotes_runtime removed in PHP 7.0. + settings = settings.replace( + /set_magic_quotes_runtime\(\s*0\s*\)\s*;/g, + '// set_magic_quotes_runtime(0); // Removed' + ); - // get_magic_quotes_gpc() removed in PHP 8.0. - if ( - settings.includes('get_magic_quotes_gpc()') && - !settings.includes("function_exists('get_magic_quotes_gpc')") - ) { + // get_magic_quotes_gpc removed in PHP 8.0. + if (!settings.includes("function_exists('get_magic_quotes_gpc')")) { settings = settings.replace( /get_magic_quotes_gpc\(\)/g, "(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc())" ); - settingsChanged = true; } // "=& new" triggers compile-time E_DEPRECATED in PHP 5.3+. - if (settings.includes('=& new') || settings.includes('=&new')) { - settings = settings.replace(/=\s*&\s*new\b/g, '= new'); - settingsChanged = true; - } + settings = settings.replace(/=\s*&\s*new\b/g, '= new'); // $HTTP_SERVER_VARS removed in PHP 5.4. - if (settings.includes('$HTTP_SERVER_VARS')) { - settings = settings.replace(/\$HTTP_SERVER_VARS/g, '$_SERVER'); - settingsChanged = true; - } + settings = settings.replace(/\$HTTP_SERVER_VARS/g, '$_SERVER'); - // WP_CONTENT_DIR missing in WP < 2.0. + // WP < 2.0 has no WP_CONTENT_DIR; the SQLite db.php drop-in needs it. if ( !settings.includes('WP_CONTENT_DIR') && settings.includes("define('WPINC'") @@ -1664,77 +1004,63 @@ async function patchWpSettingsPhp(php: PHP, documentRoot: string) { /define\('WPINC',\s*'wp-includes'\);/, `define('WPINC', 'wp-includes');\nif (!defined('WP_CONTENT_DIR')) define('WP_CONTENT_DIR', ABSPATH . 'wp-content');` ); - settingsChanged = true; - } - - // WP 2.5–3.x clears $wp_filter at the top of wp-settings.php - // to prevent interference from register_globals. This also - // destroys hooks set by the preload (auto_prepend_file) such - // as the playground_load_mu_plugins hook. Remove $wp_filter - // from the unset() call so the preload hooks survive. - if (settings.includes('$wp_filter')) { - const before = settings; - settings = settings.replace(/unset\(\s*\$wp_filter\s*,/, 'unset('); - if (settings !== before) { - settingsChanged = true; - } } - // WP 1.x–2.x "not installed" die() check. - { - // The die() may be wrapped in sprintf/__()/etc. Match any - // die(...installed WP...) by finding the balanced parens. - // Simple approach: find "die(" before "installed WP" and - // the matching ");" after it. - const instIdx = settings.indexOf('installed WP'); - const dieStart = settings.lastIndexOf('die(', instIdx); - let dieEnd = -1; - if (dieStart !== -1) { - let depth = 0; - for (let i = dieStart + 3; i < settings.length; i++) { - if (settings[i] === '(') depth++; - if (settings[i] === ')') { - depth--; - if (depth === 0) { - dieEnd = i + 1; - // Include trailing semicolon - if (settings[dieEnd] === ';') dieEnd++; - break; - } - } - } - } - const dieMatched = - dieStart !== -1 && dieEnd !== -1 - ? settings.substring(0, dieStart) + + // WP 2.5–3.x unsets $wp_filter to defeat register_globals — that + // also wipes hooks our auto_prepend_file preload registered (e.g. + // playground_load_mu_plugins). Drop $wp_filter from the unset list. + settings = settings.replace(/unset\(\s*\$wp_filter\s*,/, 'unset('); + + settings = removeNotInstalledDie(settings); + settings = injectInitHookCleanup(settings); + + if (settings !== original) { + await php.writeFile(wpSettingsPath, settings); + } +} + +/** + * Removes the WP 1.x–2.x "you haven't installed WP yet" die(). The + * call may be wrapped in sprintf/__/etc., so we match by locating + * "installed WP" and walking back to the enclosing die(...); + */ +function removeNotInstalledDie(settings: string): string { + const instIdx = settings.indexOf('installed WP'); + if (instIdx === -1) return settings; + const dieStart = settings.lastIndexOf('die(', instIdx); + if (dieStart === -1) return settings; + + let depth = 0; + for (let i = dieStart + 3; i < settings.length; i++) { + if (settings[i] === '(') depth++; + else if (settings[i] === ')') { + depth--; + if (depth === 0) { + let dieEnd = i + 1; + if (settings[dieEnd] === ';') dieEnd++; + return ( + settings.substring(0, dieStart) + 'true; /* die removed by Playground */' + settings.substring(dieEnd) - : settings; - if (dieMatched !== settings) { - settings = dieMatched; - settingsChanged = true; + ); + } } } + return settings; +} - // WP 2.5–2.7 hooks wp_cron() and wp_version_check() to the - // 'init' action. Both make outbound HTTP requests (fsockopen / - // wp_remote_post) that crash the PHP 5.2 WASM runtime with - // "null function or function signature mismatch". - // WP 2.8+ moved these to scheduled events and added - // DISABLE_WP_CRON. Old WP doesn't check that constant. - // Fix: remove these specific hooks right before do_action('init') - // runs. This is more reliable than patching individual files - // because it works regardless of WP version differences. - // WP 2.5–2.7 hooks functions that make outbound HTTP requests - // (fsockopen / wp_remote_post) to the 'init' and 'admin_init' - // actions. These crash the PHP 5.2 WASM runtime with "null - // function or function signature mismatch" because fsockopen's - // underlying socket calls can't work in WASM. - // Remove all known network-calling hooks before they fire. - if (settings.includes("do_action('init');")) { - settings = settings.replace( - "do_action('init');", - `// Remove hooks that make outbound HTTP requests (crash WASM). +/** + * Strips network-calling hooks and disables HTTP transports right + * before do_action('init') in wp-settings.php. WP 2.5–2.7 wires + * wp_cron/wp_version_check/etc. into 'init' and 'admin_init'; their + * fsockopen/cURL paths trigger "null function or function signature + * mismatch" WASM traps on the PHP 5.2 binary. WP 3.2+ honors the + * use_*_transport filters as a second line of defense. + */ +function injectInitHookCleanup(settings: string): string { + return settings.replace( + "do_action('init');", + `// Remove hooks that make outbound HTTP requests (crash WASM). if (function_exists('remove_action')) { @remove_action('init', 'wp_cron'); @remove_action('init', 'wp_version_check'); @@ -1752,9 +1078,6 @@ if (function_exists('remove_action')) { @remove_action('wp_update_plugins', 'wp_update_plugins'); @remove_action('wp_version_check', 'wp_version_check'); } -// Disable cURL and streams HTTP transports. The underlying -// libcurl/fsockopen crash the WASM runtime. WP 3.2+ checks -// these filters before using each transport. if (function_exists('add_filter')) { function _pg_disable_curl() { return false; } function _pg_disable_streams() { return false; } @@ -1764,16 +1087,9 @@ if (function_exists('add_filter')) { @add_filter('use_fsockopen_transport', '_pg_disable_streams'); } do_action('init');` - ); - settingsChanged = true; - } - - if (settingsChanged) { - await php.writeFile(wpSettingsPath, settings); - } + ); } -/** Patches wp-includes/functions.php. */ async function patchWpFunctionsPhp(php: PHP, documentRoot: string) { const functionsPhpPath = joinPaths( documentRoot, @@ -1784,7 +1100,8 @@ async function patchWpFunctionsPhp(php: PHP, documentRoot: string) { let functionsPhp = php.readFileAsText(functionsPhpPath); let functionsPhpChanged = false; - // WP 1.5: $all_options not initialized as object. + // WP 1.5 writes `$all_options->{$option->option_name}` without first + // initialising `$all_options`; PHP 5.3+ warns and the cache stays empty. if ( functionsPhp.includes('$all_options->{$option->option_name}') && !functionsPhp.includes('$all_options = new stdClass') @@ -1801,111 +1118,88 @@ async function patchWpFunctionsPhp(php: PHP, documentRoot: string) { } } -/** Patches wp-admin/install.php for old WP versions. */ +/** + * Patches wp-admin/install.php for old WP versions. The legacy boot + * flow itself bypasses install.php (see runLegacyInstaller in + * legacy-boot.ts), but a user can still navigate to /wp-admin/install.php + * manually — these patches keep the page loadable rather than fataling + * at parse/include time on PHP 5.2+. + */ async function patchWpInstallPhp(php: PHP, documentRoot: string) { const installPhpPath = joinPaths(documentRoot, 'wp-admin/install.php'); if (!php.fileExists(installPhpPath)) return; - let installPhp = php.readFileAsText(installPhpPath); - let installPhpChanged = false; + const original = php.readFileAsText(installPhpPath); + let installPhp = original; - // Fix relative paths to absolute. - if ( - installPhp.includes("'../wp-config.php'") || - installPhp.includes("'../wp-load.php'") - ) { - const absAdminDir = joinPaths(documentRoot, 'wp-admin'); - const absRoot = documentRoot; - installPhp = installPhp - .replace(/'\.\.\/(wp-config\.php)'/g, `'${absRoot}/$1'`) - .replace(/'\.\.\/(wp-load\.php)'/g, `'${absRoot}/$1'`) - .replace(/'\.\/(upgrade-functions\.php)'/g, `'${absAdminDir}/$1'`) - .replace(/'(upgrade-functions\.php)'/g, `'${absAdminDir}/$1'`) - .replace(/'\.\/(includes\/upgrade\.php)'/g, `'${absAdminDir}/$1'`) - .replace(/'\.\.\/(wp-includes\/[^']+)'/g, `'${absRoot}/$1'`); - installPhpChanged = true; - } + // WP 1.x–2.5 use relative require paths that break when CWD isn't + // wp-admin/ (Playground's CWD is the document root). + const absAdminDir = joinPaths(documentRoot, 'wp-admin'); + installPhp = installPhp + .replace(/'\.\.\/(wp-config\.php)'/g, `'${documentRoot}/$1'`) + .replace(/'\.\.\/(wp-load\.php)'/g, `'${documentRoot}/$1'`) + .replace(/'\.\/(upgrade-functions\.php)'/g, `'${absAdminDir}/$1'`) + .replace(/'(upgrade-functions\.php)'/g, `'${absAdminDir}/$1'`) + .replace(/'\.\/(includes\/upgrade\.php)'/g, `'${absAdminDir}/$1'`) + .replace(/'\.\.\/(wp-includes\/[^']+)'/g, `'${documentRoot}/$1'`); // $HTTP_GET_VARS/$HTTP_POST_VARS removed in PHP 5.4. - if (installPhp.includes('$HTTP_GET_VARS')) { - installPhp = installPhp.replace(/\$HTTP_GET_VARS/g, '$_GET'); - installPhpChanged = true; - } - if (installPhp.includes('$HTTP_POST_VARS')) { - installPhp = installPhp.replace(/\$HTTP_POST_VARS/g, '$_POST'); - installPhpChanged = true; - } + installPhp = installPhp + .replace(/\$HTTP_GET_VARS/g, '$_GET') + .replace(/\$HTTP_POST_VARS/g, '$_POST'); - // WP 1.x multi-step installer: combine steps into single request. - if ( - installPhp.includes('mysql_list_tables') && - installPhp.includes('switch($step)') - ) { - installPhp = installPhp.replace( - /^(if\s*\(isset\(\$_GET\['step'\]\)\)\s*\n\s*\$step\s*=\s*\$_GET\['step'\];\s*\n\s*else\s*\n\s*\$step\s*=\s*0;)/m, - `$1\n// Playground: run all install steps in one request\nif ($step >= 1) $step = 1;` - ); - installPhp = installPhp.replace( - /^(\$step\s*=\s*\$_GET\['step'\];\s*\n\s*if\s*\(!\$step\)\s*\$step\s*=\s*0;)/m, - `$1\n// Playground: run all install steps in one request\nif ($step >= 1) $step = 1;` - ); - installPhp = installPhp.replace( - /break;\s*\n(\s*case\s+2\s*:)/, - '// break; // Playground: fall through\n$1' - ); - installPhp = installPhp.replace( - /break;\s*\n(\s*case\s+3\s*:)/, - '// break; // Playground: fall through\n$1' - ); - installPhpChanged = true; - } - - if (installPhpChanged) { + if (installPhp !== original) { await php.writeFile(installPhpPath, installPhp); } } -/** Patches wp-includes/wp-db.php (wpdb class). */ +/** + * Patches wp-includes/wp-db.php so old wpdb classes (WP 1.5–2.5) can + * delegate to WP_SQLite_DB and expose the methods that newer WP + * callers (and the SQLite drop-in) expect. + */ async function patchWpDbPhp(php: PHP, documentRoot: string) { const wpDbPath = joinPaths(documentRoot, 'wp-includes/wp-db.php'); if (!php.fileExists(wpDbPath)) return; - let wpDb = php.readFileAsText(wpDbPath); - let wpDbChanged = false; + const original = php.readFileAsText(wpDbPath); + let wpDb = original; - // Guard $wpdb creation so the lazy loader isn't overwritten. - if ( - wpDb.includes( - '$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);' - ) && - !wpDb.includes('isset($wpdb)') - ) { + // The SQLite db.php drop-in instantiates $wpdb itself; guard the + // global write so wp-db.php doesn't overwrite the lazy loader. + if (!wpDb.includes('isset($wpdb)')) { wpDb = wpDb.replace( '$wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);', 'if ( !isset($wpdb) ) { $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); }' ); - wpDbChanged = true; } - // Old wpdb (< 3.0) calls mysql_connect() inline — patch to - // call db_connect() when available (i.e., WP_SQLite_DB). + // WP < 3.0 calls mysql_connect() inline in the constructor; the + // SQLite-backed wpdb subclass exposes db_connect() instead. if (!wpDb.includes('db_connect')) { - const mysqlConnectPattern = - /\$this->dbh\s*=\s*@mysql_connect\(\$dbhost\s*,\s*\$dbuser\s*,\s*\$dbpassword(?:\s*,\s*true)?\);/; - if (mysqlConnectPattern.test(wpDb)) { - wpDb = wpDb.replace( - mysqlConnectPattern, - 'if (method_exists($this, "db_connect")) { $this->dbname = $dbname; $this->db_connect(); } else { $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); }' - ); - wpDbChanged = true; - } + wpDb = wpDb.replace( + /\$this->dbh\s*=\s*@mysql_connect\(\$dbhost\s*,\s*\$dbuser\s*,\s*\$dbpassword(?:\s*,\s*true)?\);/, + 'if (method_exists($this, "db_connect")) { $this->dbname = $dbname; $this->db_connect(); } else { $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword); }' + ); } - // Inject method polyfills for old wpdb classes. - { - const polyfills: string[] = []; - if (!wpDb.includes('function set_prefix')) { - polyfills.push(` + wpDb = injectWpdbPolyfills(wpDb); + + if (wpDb !== original) { + await php.writeFile(wpDbPath, wpDb); + } +} + +/** + * Injects polyfill methods into the wpdb class. WP 1.5–2.4 ship a + * minimal wpdb (no set_prefix, init_charset, check_connection, etc.), + * but the SQLite drop-in and WP_SQLite_DB call these methods + * unconditionally. + */ +function injectWpdbPolyfills(wpDb: string): string { + const polyfills: string[] = []; + if (!wpDb.includes('function set_prefix')) { + polyfills.push(` function set_prefix($prefix) { $this->prefix = $prefix; $tables = array('posts', 'users', 'categories', 'post2cat', 'comments', 'link2cat', 'links', 'options', 'postmeta', 'usermeta', 'terms', 'term_taxonomy', 'term_relationships'); @@ -1914,60 +1208,55 @@ async function patchWpDbPhp(php: PHP, documentRoot: string) { } return $prefix; }`); - } - if (!wpDb.includes('function timer_start')) { - polyfills.push(` + } + if (!wpDb.includes('function timer_start')) { + polyfills.push(` function timer_start() { $this->time_start = microtime(true); return true; }`); - } - if (!wpDb.includes('function timer_stop')) { - polyfills.push(` + } + if (!wpDb.includes('function timer_stop')) { + polyfills.push(` function timer_stop() { return microtime(true) - $this->time_start; }`); - } - if (!wpDb.includes('function init_charset')) { - polyfills.push(` + } + if (!wpDb.includes('function init_charset')) { + polyfills.push(` function init_charset() { if (defined('DB_CHARSET')) $this->charset = DB_CHARSET; if (defined('DB_COLLATE')) $this->collate = DB_COLLATE; }`); - } - if (!wpDb.includes('function bail')) { - polyfills.push(` + } + if (!wpDb.includes('function bail')) { + polyfills.push(` function bail($message, $error_code = '500') { die($message); }`); - } - if (!wpDb.includes('function check_connection')) { - polyfills.push(` + } + if (!wpDb.includes('function check_connection')) { + polyfills.push(` function check_connection($allow_bail = true) { return true; }`); - } - if (polyfills.length > 0) { - const classEndMatch = wpDb.match( - /^(\s*})\s*\n+(\$wpdb|\?>\s*$|if\s*\(\s*!\s*isset\(\s*\$wpdb\s*\))/m - ); - if (classEndMatch && classEndMatch.index !== undefined) { - const polyfillBlock = - '\n\t// Polyfills added by WordPress Playground.\n' + - polyfills.join('\n') + - '\n\n'; - wpDb = - wpDb.substring(0, classEndMatch.index) + - polyfillBlock + - wpDb.substring(classEndMatch.index); - wpDbChanged = true; - } - } } + if (polyfills.length === 0) return wpDb; - if (wpDbChanged) { - await php.writeFile(wpDbPath, wpDb); - } + const classEndMatch = wpDb.match( + /^(\s*})\s*\n+(\$wpdb|\?>\s*$|if\s*\(\s*!\s*isset\(\s*\$wpdb\s*\))/m + ); + if (!classEndMatch || classEndMatch.index === undefined) return wpDb; + + const polyfillBlock = + '\n\t// Polyfills added by WordPress Playground.\n' + + polyfills.join('\n') + + '\n\n'; + return ( + wpDb.substring(0, classEndMatch.index) + + polyfillBlock + + wpDb.substring(classEndMatch.index) + ); } /** @@ -1980,16 +1269,11 @@ async function patchWpDbPhp(php: PHP, documentRoot: string) { * `dirname(__FILE__)` instead. */ async function patchWpAdminRelativePaths(php: PHP, documentRoot: string) { - // Generic fix: replace all relative require/include statements in - // wp-admin PHP files with dirname(__FILE__)-based absolute paths. - // This handles WP 1.2 through 3.6 where many files use - // './file.php' or '../file.php'. - // - // The emitted replacement is always in canonical form: - // `./foo` → dirname(__FILE__) . '/foo' - // `../foo` → dirname(dirname(__FILE__)) . '/foo' - // `foo.php` → dirname(__FILE__) . '/foo.php' - // (No literal './' or '../' survives in the output.) + // CWD during a Playground request is the document root, so + // require/include statements with './' or '../' resolve relative to + // /wordpress instead of the file's own directory. Rewrite every + // relative require/include in wp-admin to a dirname(__FILE__)-based + // absolute path. Covers WP 1.2 through 3.6. const toDirnameExpr = (relPath: string): string => { let remaining = relPath; let upLevels = 0; @@ -2013,51 +1297,40 @@ async function patchWpAdminRelativePaths(php: PHP, documentRoot: string) { const filePath = joinPaths(wpAdminDir, file); const content = php.readFileAsText(filePath); const patched = content - // ../path — parent directory (with parentheses) .replace( /((?:require|include)(?:_once)?)\s*\(\s*(['"])(\.\.\/[^'"]+)\2\s*\)/g, (_, keyword, _q, path) => `${keyword}(${toDirnameExpr(path)})` ) - // ./path — current directory (with parentheses) .replace( /((?:require|include)(?:_once)?)\s*\(\s*(['"])(\.\/[^'"]+)\2\s*\)/g, (_, keyword, _q, path) => `${keyword}(${toDirnameExpr(path)})` ) - // Bare filename without ./ prefix (with parentheses) - // (e.g. 'admin-header.php'). Only match filenames - // ending in .php to avoid false positives. + // Bare filename (e.g. 'admin-header.php'). Restrict to + // .php to avoid false positives. .replace( /((?:require|include)(?:_once)?)\s*\(\s*(['"])([a-z][\w-]*\.php)\2\s*\)/g, (_, keyword, _q, path) => `${keyword}(${toDirnameExpr(path)})` ) - // Statement form without parentheses: - // require_once '../wp-config.php'; - // require './admin.php'; - // include 'admin-header.php'; - // WP 2.0 uses this form in several wp-admin files. - // ../path (no parens) + // Statement form without parentheses (WP 2.0 uses this). .replace( /((?:require|include)(?:_once)?)\s+(['"])(\.\.\/[^'"]+)\2/g, (_, keyword, _q, path) => `${keyword}(${toDirnameExpr(path)})` ) - // ./path (no parens) .replace( /((?:require|include)(?:_once)?)\s+(['"])(\.\/[^'"]+)\2/g, (_, keyword, _q, path) => `${keyword}(${toDirnameExpr(path)})` ) - // Bare filename (no parens) .replace( /((?:require|include)(?:_once)?)\s+(['"])([a-z][\w-]*\.php)\2/g, (_, keyword, _q, path) => `${keyword}(${toDirnameExpr(path)})` ) - // Fix ABSPATH . '/path' → ABSPATH . 'path' - // (removes double slash) + // Drop the leading slash from `ABSPATH . '/wp-...'`. .replace(/ABSPATH\s*\.\s*'\/wp-/g, "ABSPATH . 'wp-"); if (patched !== content) { await php.writeFile(filePath, patched); @@ -2065,69 +1338,6 @@ async function patchWpAdminRelativePaths(php: PHP, documentRoot: string) { } } - // Specific patches for patterns the generic fix above can't handle - // (e.g., require without parentheses, unusual spacing). The - // replacement paths use `toDirnameExpr` to stay canonical (no - // stray './' or '../' literals in the emitted PHP). - const patches: Array<{ file: string; from: RegExp; to: string }> = [ - // WP < 2.6: require_once('../wp-config.php') in admin.php - { - file: 'wp-admin/admin.php', - from: /require_once\s*\(\s*'\.\.\/wp-config\.php'\s*\)/, - to: `require_once(${toDirnameExpr('../wp-config.php')})`, - }, - // WP 2.6-2.9: require_once('../wp-load.php') in admin.php - { - file: 'wp-admin/admin.php', - from: /require_once\s*\(\s*'\.\.\/wp-load\.php'\s*\)/, - to: `require_once(${toDirnameExpr('../wp-load.php')})`, - }, - // WP 3.0-3.6: require_once('./admin.php') in index.php and index-extra.php - { - file: 'wp-admin/index.php', - from: /require_once\s*\(\s*'\.\/admin\.php'\s*\)/, - to: `require_once(${toDirnameExpr('./admin.php')})`, - }, - { - file: 'wp-admin/index-extra.php', - from: /require_once\s*\(\s*'\.\/admin\.php'\s*\)/, - to: `require_once(${toDirnameExpr('./admin.php')})`, - }, - // WP 3.0: require('./includes/dashboard.php') in index-extra.php - { - file: 'wp-admin/index-extra.php', - from: /require\s*\(\s*'\.\/includes\/dashboard\.php'\s*\)/, - to: `require(${toDirnameExpr('./includes/dashboard.php')})`, - }, - // WP < 3.7: require[_once]('./admin-header.php') in index.php - { - file: 'wp-admin/index.php', - from: /require(?:_once)?\s*\(\s*'\.\/admin-header\.php'\s*\)/, - to: `require_once(${toDirnameExpr('./admin-header.php')})`, - }, - // WP < 3.7: require[_once]('./admin-footer.php') in index.php - { - file: 'wp-admin/index.php', - from: /require(?:_once)?\s*\(\s*'\.\/admin-footer\.php'\s*\)/, - to: `require_once(${toDirnameExpr('./admin-footer.php')})`, - }, - // WP 1.x: require('../wp-config.php') in index.php - { - file: 'wp-admin/index.php', - from: /require\s*\(\s*'\.\.\/wp-config\.php'\s*\)/, - to: `require(${toDirnameExpr('../wp-config.php')})`, - }, - ]; - - for (const { file, from, to } of patches) { - const filePath = joinPaths(documentRoot, file); - if (!php.fileExists(filePath)) continue; - const content = php.readFileAsText(filePath); - if (from.test(content)) { - await php.writeFile(filePath, content.replace(from, to)); - } - } - // WP 1.2: index.php redirects using get_settings('siteurl') which // may be 'http://localhost' (wrong host for the Playground). Replace // with relative redirects that work regardless of siteurl. @@ -2163,16 +1373,10 @@ async function patchWpAdminRelativePaths(php: PHP, documentRoot: string) { } /** - * Bypasses referer-based check_admin_referer() in WP < 2.5. - * - * In WP 1.2-1.5, check_admin_referer() verifies that - * $_SERVER['HTTP_REFERER'] contains the siteurl. In Playground's - * service worker environment, the Referer header is often missing - * or incorrect, causing plugin activation and other admin actions - * to fail with "you need to enable sending referrers". - * - * WP 2.5+ switched to nonce-based verification and doesn't need - * this patch. + * Bypasses referer-based check_admin_referer() in WP < 2.5. The + * Referer header is unreliable inside Playground's service worker, so + * the original die() short-circuits plugin activation and other admin + * actions. WP 2.5+ uses nonces and doesn't need this patch. */ async function patchCheckAdminReferer(php: PHP, documentRoot: string) { const adminFunctionsPath = joinPaths( @@ -2182,9 +1386,6 @@ async function patchCheckAdminReferer(php: PHP, documentRoot: string) { if (!php.fileExists(adminFunctionsPath)) return; const content = php.readFileAsText(adminFunctionsPath); - // Only patch the referer-based version (WP < 2.5). - // The function body checks $_SERVER['HTTP_REFERER'] and die()s - // if it doesn't contain the admin URL. if ( !content.includes('function check_admin_referer()') || !content.includes("$_SERVER['HTTP_REFERER']") @@ -2192,18 +1393,10 @@ async function patchCheckAdminReferer(php: PHP, documentRoot: string) { return; } - // The regex uses (?:[^{}]|\{[^}]*\})* instead of [^}]* to - // handle one level of brace nesting. WP 1.2 wraps the die() - // in an if-block with braces; WP 1.5 uses a braceless if. - const patched = content.replace( - /function check_admin_referer\(\)\s*\{(?:[^{}]|\{[^}]*\})*\$_SERVER\['HTTP_REFERER'\](?:[^{}]|\{[^}]*\})*\}/, - `function check_admin_referer() { - // Patched by Playground: skip referer check. - // The Referer header is unreliable in the service worker - // environment. The original function die()d when the header - // was missing or didn't match the admin URL. - do_action('check_admin_referer', ''); -}` + const patched = replacePhpFunctionBody( + content, + 'check_admin_referer', + `\n\tdo_action('check_admin_referer', '');\n` ); if (patched !== content) { await php.writeFile(adminFunctionsPath, patched); @@ -2211,65 +1404,72 @@ async function patchCheckAdminReferer(php: PHP, documentRoot: string) { } /** - * Patches the WP 1.5 admin dashboard to fix missing posts listing. - * - * WP 1.5's wp-admin/index.php queries recent posts with: - * post_date_gmt < '$today' - * where $today = current_time('mysql', 1). This date comparison - * can fail in SQLite when the post_date_gmt value is a zero date - * ('0000-00-00 00:00:00') or when the SQLite driver doesn't - * handle the comparison correctly. Remove the date condition so - * the recent posts list displays on the dashboard. + * Replaces the body of a top-level PHP function `fnName` (zero-arg) + * with `newBody` using a balanced-brace walker. Returns the original + * string if the function isn't found. */ -async function patchWpAdminDashboard(php: PHP, documentRoot: string) { - const indexPhpPath = joinPaths(documentRoot, 'wp-admin/index.php'); - if (!php.fileExists(indexPhpPath)) return; - - let content = php.readFileAsText(indexPhpPath); - let changed = false; - - // Remove the "AND post_date_gmt < '$today'" condition from - // the recent posts query. The condition filters out future - // scheduled posts, but the post_status = 'publish' check is - // sufficient for the dashboard — scheduled posts have status - // 'future' (WP 2.1+) or aren't published (WP 1.x). - const dateCondition = /AND post_date_gmt < '\$today'/; - if (dateCondition.test(content)) { - content = content.replace(dateCondition, ''); - changed = true; +function replacePhpFunctionBody( + source: string, + fnName: string, + newBody: string +): string { + const sig = `function ${fnName}()`; + const sigIdx = source.indexOf(sig); + if (sigIdx === -1) return source; + const openIdx = source.indexOf('{', sigIdx + sig.length); + if (openIdx === -1) return source; + + let depth = 1; + for (let i = openIdx + 1; i < source.length; i++) { + const ch = source[i]; + if (ch === '{') depth++; + else if (ch === '}') { + depth--; + if (depth === 0) { + return ( + source.substring(0, openIdx + 1) + + newBody + + source.substring(i) + ); + } + } } + return source; +} - if (changed) { - await php.writeFile(indexPhpPath, content); +/** + * Removes WP 1.5's `AND post_date_gmt < '$today'` from the dashboard + * recent-posts query: SQLite mishandles the comparison against the + * '0000-00-00 00:00:00' values seeded by the legacy installer, leaving + * the dashboard empty. The post_status='publish' filter alone is + * enough — scheduled posts use status 'future' (WP 2.1+) or aren't + * published yet (WP 1.x). + */ +async function patchWpAdminDashboard(php: PHP, documentRoot: string) { + const indexPhpPath = joinPaths(documentRoot, 'wp-admin/index.php'); + if (php.fileExists(indexPhpPath)) { + const content = php.readFileAsText(indexPhpPath); + const patched = content.replace(/AND post_date_gmt < '\$today'/, ''); + if (patched !== content) { + await php.writeFile(indexPhpPath, patched); + } } - // WP 1.5's rss-functions.php calls a global error() function - // from fetch_rss() when the RSS fetch fails, but that function - // is only defined as a method on the RSSCache class — not as a - // standalone function. In Playground, outbound HTTP always fails - // (no network), so every fetch_rss() call hits this path and - // causes a fatal "Call to undefined function error()" that kills - // the dashboard rendering mid-page. Define the missing stub. await patchRssFunctionsErrorStub(php, documentRoot); } /** - * Defines a global error() function stub in rss-functions.php. - * - * WP 1.5's Magpie RSS library calls error() as a standalone function - * from fetch_rss() and _response_to_rss(), but error() is only - * defined as a method on the RSSCache class. When the RSS fetch - * fails (which always happens in Playground — no outbound HTTP), - * PHP hits "Call to undefined function error()" — a fatal error - * that @ cannot suppress, killing the script mid-page. + * WP 1.5's Magpie RSS library calls a bare `error()` function from + * fetch_rss() / _response_to_rss(), but `error()` only exists as a + * method on the RSSCache class. RSS fetches always fail in Playground + * (no outbound HTTP), so without a global stub the dashboard dies on + * "Call to undefined function error()". */ async function patchRssFunctionsErrorStub(php: PHP, documentRoot: string) { const rssPath = joinPaths(documentRoot, 'wp-includes/rss-functions.php'); if (!php.fileExists(rssPath)) return; let content = php.readFileAsText(rssPath); - // Only patch if the file calls error() as a standalone function - // and doesn't already define a global error() function. if ( !/^\s*error\s*\(/m.test(content) || /^function\s+error\s*\(/m.test(content) @@ -2277,13 +1477,9 @@ async function patchRssFunctionsErrorStub(php: PHP, documentRoot: string) { return; } - // Insert a global error() stub right after the opening `) does not already carry the opt-out. const re = new RegExp( - `(\\bname=(['"])${fieldName}\\2)(?!.*data-1p-ignore)` + `(\\bname=(['"])${fieldName}\\2)(?![^>]*data-1p-ignore)` ); if (re.test(content)) { content = content.replace(re, '$1 data-1p-ignore'); @@ -2329,147 +1522,25 @@ async function patchWpLoginDisable1Password(php: PHP, documentRoot: string) { } /** - * Writes a mu-plugin that forces admin authentication for legacy PHP. - * - * On old WordPress (< 3.5), the auth cookies set during auto-login - * may not validate correctly for the admin area. This mu-plugin - * ensures the user is logged in for admin/login requests. - * - * IMPORTANT: This must only create a new session when the user is - * NOT already authenticated. Creating a new session on every request - * (via wp_set_auth_cookie) would generate a new session token each - * time, breaking nonce verification — nonces embed the session token - * from the request that rendered the form, and verification fails - * when the token changes between form render and form submit. - * - * Written to wp-content/mu-plugins/ (real WP mu-plugins directory) - * rather than /internal/shared/mu-plugins/ because the internal - * mu-plugins load via the muplugins_loaded hook, which fires after - * wp_get_mu_plugins() but may not work reliably on all old WP. - */ - -async function ensureLegacyAdminAuth(php: PHP, documentRoot: string) { - const muDir = joinPaths(documentRoot, 'wp-content/mu-plugins'); - if (!php.isDir(muDir)) { - php.mkdir(muDir); - } - await php.writeFile( - joinPaths(muDir, '0-legacy-admin-auth.php'), - `ID, $user->user_login); - - // Create a single session and set cookies via response - // headers. This must only happen once per session — not on - // every request — because each call generates a new session - // token, which would invalidate nonces. - if (!headers_sent()) { - wp_set_auth_cookie($user->ID); - } - - // On WP < 4.0, wp_set_auth_cookie() does not update $_COOKIE - // in-process. auth_redirect() reads $_COOKIE to decide whether - // to redirect to wp-login.php, so we must populate it manually. - // Generate cookies with wp_generate_auth_cookie() — these have - // no session token (pre-4.0) and validate for auth_redirect(). - if (!isset($_COOKIE[LOGGED_IN_COOKIE]) || empty($_COOKIE[LOGGED_IN_COOKIE])) { - $expiration = time() + 172800; - if (defined('AUTH_COOKIE')) - $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $expiration, 'auth'); - if (defined('SECURE_AUTH_COOKIE')) - $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $expiration, 'secure_auth'); - if (defined('LOGGED_IN_COOKIE')) - $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $expiration, 'logged_in'); - } - return; - } - - // WP < 2.5 auth system: USER_COOKIE + PASS_COOKIE with - // double-md5 hashed password. SECURITY NOTE: the admin password - // was hardcoded to 'password' during legacy WP installation (see - // the SQLite user-row seeding in this same file), so we hardcode - // md5(md5('password')) here to match. The generated site only - // exists inside the Playground WASM sandbox; there is no real - // account to steal credentials for. - if (defined('USER_COOKIE') && defined('PASS_COOKIE')) { - $_COOKIE[USER_COOKIE] = $username; - $_COOKIE[PASS_COOKIE] = md5(md5('password')); - if (function_exists('wp_setcookie') && !headers_sent()) { - wp_setcookie($username, 'password'); - } - } -} -add_action('init', 'playground_legacy_admin_auth', 0); -` - ); -} - -/** - * Patches wp-admin/admin.php to inject auth cookie population before - * auth_redirect(). This is needed for WP < 2.8 which doesn't have - * mu-plugin support — the mu-plugin-based auth fix can't run. - * - * Inserts PHP code that populates $_COOKIE with valid auth cookies - * right before the auth_redirect() call. + * Injects auth-cookie population before `auth_redirect()` in + * `wp-admin/admin.php` (WP 2.0-2.7) and replaces `wp-admin/auth.php` + * with a stub that pre-populates user globals (WP 1.2). WP < 2.8 has + * no mu-plugin support, so the auto-login mu-plugin can't run. */ async function patchAdminAuthRedirect(php: PHP, documentRoot: string) { - // Bail out entirely on WP 2.8+ where mu-plugins handle auth. - const wpSettingsPath = joinPaths(documentRoot, 'wp-settings.php'); - if (php.fileExists(wpSettingsPath)) { - const settings = php.readFileAsText(wpSettingsPath); - if (settings.includes('mu_plugin') || settings.includes('mu-plugin')) { - return; - } - } - - // WP 2.0-2.7 path: patch wp-admin/admin.php before the - // auth_redirect() call. WP 1.2 doesn't have admin.php — the - // wp-admin/auth.php patch at the bottom of this function - // handles that case and must run even when admin.php is missing. + // Session tokens don't exist until WP 4.0, so cookies generated + // here can't mismatch a token. Nonces in WP < 4.0 only depend on + // user ID, action, and secret keys. const adminPhpPath = joinPaths(documentRoot, 'wp-admin/admin.php'); - const content = php.fileExists(adminPhpPath) - ? php.readFileAsText(adminPhpPath) - : ''; - const shouldPatchAdminPhp = content.includes('auth_redirect()'); - - // For WP 2.5-2.7: modern auth with wp_generate_auth_cookie - // For WP < 2.5: legacy auth with USER_COOKIE/PASS_COOKIE - // - // This code only runs on WP < 2.8 (no mu-plugin support). - // Session tokens don't exist until WP 4.0, so generating - // cookies with wp_generate_auth_cookie() here is safe — there - // is no session token to mismatch. Nonces in WP < 4.0 only - // depend on user ID, action, and secret keys. - const authCode = ` + if (php.fileExists(adminPhpPath)) { + const content = php.readFileAsText(adminPhpPath); + if (content.includes('auth_redirect()')) { + const authCode = ` // Playground: populate auth cookies and force admin user before auth_redirect. if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { - // Skip if user is already logged in from the auto-login mu-plugin. if (function_exists('is_user_logged_in') && is_user_logged_in()) { - // Still need $_COOKIE populated for auth_redirect(). - // On old WP, wp_set_auth_cookie() does not update $_COOKIE. + // On WP < 4.0, wp_set_auth_cookie() does not update $_COOKIE + // in-process — auth_redirect() reads $_COOKIE, so re-emit. if (function_exists('wp_generate_auth_cookie') && defined('LOGGED_IN_COOKIE') && empty($_COOKIE[LOGGED_IN_COOKIE])) { $_pg_uid = wp_get_current_user()->ID; $_pg_exp = time() + 172800; @@ -2478,60 +1549,26 @@ if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_uid, $_pg_exp, 'secure_auth'); $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_uid, $_pg_exp, 'logged_in'); } - } elseif (function_exists('wp_generate_auth_cookie')) { - $_pg_user = function_exists('get_user_by') - ? get_user_by('login', PLAYGROUND_AUTO_LOGIN_AS_USER) - : (function_exists('get_userdatabylogin') - ? get_userdatabylogin(PLAYGROUND_AUTO_LOGIN_AS_USER) : null); - if ($_pg_user) { - wp_set_current_user($_pg_user->ID, $_pg_user->user_login); - $_pg_exp = time() + 172800; - if (defined('AUTH_COOKIE')) - $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'auth'); - if (defined('SECURE_AUTH_COOKIE')) - $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'secure_auth'); - if (defined('LOGGED_IN_COOKIE')) - $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'logged_in'); - } - } elseif (defined('USER_COOKIE') && defined('PASS_COOKIE')) { - // WP 2.0-2.4: double-md5 PASS_COOKIE with the sandbox admin - // password ('password'). See SECURITY NOTE at the top of the - // auto-login mu-plugin — this is only safe because the - // generated site lives entirely inside the WASM sandbox. - $_COOKIE[USER_COOKIE] = PLAYGROUND_AUTO_LOGIN_AS_USER; - $_COOKIE[PASS_COOKIE] = md5(md5('password')); - // Reset $current_user so get_currentuserinfo() re-evaluates - // with the cookies we just set. On WP 2.0-2.4, kses_init() - // fires during do_action('init') inside wp-settings.php and - // calls get_currentuserinfo() when no cookies exist yet, - // caching $current_user as WP_User(0). Without this reset, - // the cached anonymous user persists and all capability - // checks fail. - $GLOBALS['current_user'] = null; - if (function_exists('get_currentuserinfo')) { - get_currentuserinfo(); + } else { + ${legacyAuthCookieBlock('PLAYGROUND_AUTO_LOGIN_AS_USER')} + // WP 2.0-2.4: kses_init() runs during do_action('init') inside + // wp-settings.php and caches $current_user as WP_User(0) when + // no cookies were set yet. Reset and re-evaluate so capability + // checks see the user we just authenticated. + if (!function_exists('wp_generate_auth_cookie')) { + $GLOBALS['current_user'] = null; + if (function_exists('get_currentuserinfo')) { + get_currentuserinfo(); + } } - } elseif (defined('COOKIEHASH')) { - // WP 1.5-1.x: hardcoded cookie names without constants. The - // same sandbox-only admin password ('password') applies here; - // see the SECURITY NOTE in the auto-login mu-plugin for the - // full rationale. - $_COOKIE['wordpressuser_' . COOKIEHASH] = PLAYGROUND_AUTO_LOGIN_AS_USER; - $_COOKIE['wordpresspass_' . COOKIEHASH] = md5(md5('password')); - } - // Force admin capabilities on the current user. The WP_User - // object loads caps from the database. If populate_roles() - // didn't run during install (e.g. WP 2.5 where the installer - // may crash before writing roles), the user has no caps and - // every current_user_can() check fails with "insufficient - // permissions". Set caps directly in-memory so admin works. + } + // Force admin caps in-memory: if populate_roles() never ran + // (e.g. WP 2.0, or WP 2.5 installs that crashed before writing + // roles), the user has no caps and every current_user_can() fails. $_pg_cu = isset($GLOBALS['current_user']) ? $GLOBALS['current_user'] : null; if ($_pg_cu && isset($_pg_cu->ID) && $_pg_cu->ID > 0 && empty($_pg_cu->allcaps['read'])) { - // Respect the user_level stored in the DB if one exists, so - // a blueprint asking to auto-login as a lower-privilege user - // doesn't silently get level 10 admin. Fall back to 10 only - // when the field is absent (e.g. WP 2.0 installs where - // populate_roles() never ran). + // Respect a DB-stored user_level so a blueprint that auto-logs + // in as a lower-privilege user doesn't silently get level 10. $_pg_db_level = isset($_pg_cu->user_level) ? (int) $_pg_cu->user_level : null; @@ -2541,11 +1578,6 @@ if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { : null; } $_pg_cu->user_level = $_pg_db_level !== null ? $_pg_db_level : 10; - // Grant the capability set that corresponds to the resolved - // user_level. On WP 2.0-2.7 capability names are level_N - // markers plus the role-specific flags; we build the cap list - // up to the effective level instead of unconditionally adding - // level_10/administrator. $_pg_effective_level = $_pg_cu->user_level; $_pg_caps = array('read'); for ($_pg_i = 0; $_pg_i <= $_pg_effective_level; $_pg_i++) { @@ -2569,21 +1601,22 @@ if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { } } `; - if (shouldPatchAdminPhp) { - const patched = content.replace( - 'auth_redirect();', - authCode + 'auth_redirect();' - ); - if (patched !== content) { - await php.writeFile(adminPhpPath, patched); + const patched = content.replace( + 'auth_redirect();', + authCode + 'auth_redirect();' + ); + if (patched !== content) { + await php.writeFile(adminPhpPath, patched); + } } } - // WP 1.2: auth.php uses $cookiehash variable (not admin.php/auth_redirect). - // Replace it with a stub that loads wp-config.php and pre-populates - // the user globals so get_currentuserinfo() in wp-admin/index.php - // sees an authenticated admin. Also set the wordpressuser_ cookie - // so any downstream code that reads it still works. + // WP 1.2 routes admin auth through wp-admin/auth.php (no admin.php + // / auth_redirect). The original auth.php calls wp_login()/veriflog() + // with cookie values Playground can't reliably reproduce: the pass + // cookie is md5 of the stored pw and get_settings('siteurl') is not + // stable during install. Short-circuit by setting cookies AND + // populating the user globals get_currentuserinfo() would have set. const authPhpPath = joinPaths(documentRoot, 'wp-admin/auth.php'); if (php.fileExists(authPhpPath)) { const authPhp = php.readFileAsText(authPhpPath); @@ -2591,22 +1624,12 @@ if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { authPhp.includes('$cookiehash') && !authPhp.includes('Playground: bypass auth') ) { + // WP 1.2 defines both `$cookiehash` and the COOKIEHASH + // constant; WP 1.0 only the variable. Check both, with a + // siteurl-derived fallback. const bypassedAuth = `ID, $_pg_user->user_login); - $_pg_exp = time() + 172800; - if (defined('AUTH_COOKIE')) - $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'auth'); - if (defined('SECURE_AUTH_COOKIE')) - $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'secure_auth'); - if (defined('LOGGED_IN_COOKIE')) - $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'logged_in'); - } - } + ${legacyAuthCookieBlock('PLAYGROUND_AUTO_LOGIN_AS_USER')} } `; @@ -2717,8 +1701,60 @@ if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { await php.writeFile(ajaxPhpPath, content); } -/** Patches wp-admin/includes/schema.php for WP < 3.3. */ +/** + * PHP snippet that resolves a username to a WP_User and, when the + * HMAC auth API is available (WP 2.5+), populates `$_COOKIE` with the + * three auth cookies. Falls through to the WP < 2.5 USER_COOKIE / + * PASS_COOKIE pair and the WP 1.x `wordpressuser_$cookiehash` / + * `wordpresspass_$cookiehash` pair when the modern API is missing. + * + * `$_pg_user` (WP_User|null on WP 2.5+, null otherwise) is left in + * scope for callers that need to read DB-level capability info. + * + * SECURITY NOTE: legacy installs hardcode the admin password to + * 'password' (see the SQLite user-row seeding); the WP < 2.5 and + * WP 1.x branches reuse that hash. The generated site only exists + * inside the WASM sandbox, so there is no real account to steal. + */ +function legacyAuthCookieBlock(usernamePhpExpr: string): string { + return ` +$_pg_user = null; +if (function_exists('wp_generate_auth_cookie')) { + $_pg_user = function_exists('get_user_by') + ? get_user_by('login', ${usernamePhpExpr}) + : (function_exists('get_userdatabylogin') + ? get_userdatabylogin(${usernamePhpExpr}) : null); + if ($_pg_user) { + wp_set_current_user($_pg_user->ID, $_pg_user->user_login); + $_pg_exp = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'logged_in'); + } +} elseif (defined('USER_COOKIE') && defined('PASS_COOKIE')) { + $_COOKIE[USER_COOKIE] = ${usernamePhpExpr}; + $_COOKIE[PASS_COOKIE] = md5(md5('password')); +} elseif (defined('COOKIEHASH')) { + $_COOKIE['wordpressuser_' . COOKIEHASH] = ${usernamePhpExpr}; + $_COOKIE['wordpresspass_' . COOKIEHASH] = md5(md5('password')); +} +`; +} + +/** + * Wraps WP 2.1–3.2's top-level `$wp_queries = "CREATE TABLE …"` in a + * wp_get_db_schema() polyfill. Consumed by runDbDeltaOnly() in + * legacy-boot.ts; WP 3.3+ ships the function natively. + */ async function patchWpSchemaPhp(php: PHP, documentRoot: string) { + const wpVersion = readOnDiskWpVersion(php, documentRoot); + if (wpVersion === null) return; + const parsed = parseFloat(wpVersion); + if (!Number.isFinite(parsed) || parsed >= 3.3) return; + const schemaPhpPath = joinPaths( documentRoot, 'wp-admin/includes/schema.php' @@ -2808,23 +1844,19 @@ async function patchInlineSchemaPhp( * WP actually uses the stubs defined here. */ export function generateDbPhpContent(): string { + // 0-sqlite.php preload runs first via auto_prepend_file and already + // defines mysql_*, mysqli_connect/init, and str_* polyfills. Only + // the mysqli_* stubs that the preload doesn't cover live here. return `dbh as a boolean stub. -// -// Only do this for old WP: check if wpdb lacks db_connect() -// as a method defined in the class itself (not inherited). -// Modern WP (3.0+) uses the lazy $wpdb loader successfully. +// Old wpdb (WP < 3.0) has no db_connect() and calls mysql_connect() +// inline, so the SQLite driver never gets a chance to attach. Load +// the integration here and reinitialise to swap the dbh in place. if ( class_exists('wpdb', false) && isset($GLOBALS['wpdb']) && @@ -2832,7 +1864,6 @@ if ( !method_exists('wpdb', 'db_connect') && file_exists('/internal/shared/mu-plugins/sqlite-database-integration.php') ) { - // This block loads SQLite integration for old WP (< 3.0). require_once '/internal/shared/mu-plugins/sqlite-database-integration.php'; if ( isset($GLOBALS['wpdb']) && @@ -2842,44 +1873,8 @@ if ( $GLOBALS['wpdb']->reinitialize_sqlite(); } } -// -// Polyfills for PHP functions used by the SQLite integration -// but missing on older PHP versions. -if (!function_exists('str_contains')) { - function str_contains($haystack, $needle) { - return $needle === '' || strpos($haystack, $needle) !== false; - } -} -if (!function_exists('str_starts_with')) { - function str_starts_with($haystack, $needle) { - return strncmp($haystack, $needle, strlen($needle)) === 0; - } -} -if (!function_exists('str_ends_with')) { - function str_ends_with($haystack, $needle) { - return $needle === '' || substr($haystack, -strlen($needle)) === $needle; - } -} -// Provides MySQL/MySQLi function stubs so WordPress 4.x -// doesn't die on the extension_loaded() check. -// The actual SQLite database is set up by the -// 0-sqlite.php preload via auto_prepend_file. -// -// mysql_connect and mysql_select_db return truthy values because -// WordPress < 3.0 calls mysql_connect() directly in wpdb::__construct -// and dies on false. The return value is never used for real queries. -if (!function_exists('mysql_connect')) { - function mysql_connect() { return true; } -} -if (!function_exists('mysql_select_db')) { - function mysql_select_db() { return true; } -} -if (!function_exists('mysqli_connect')) { - function mysqli_connect() { return true; } -} -if (!function_exists('mysqli_init')) { - function mysqli_init() { return true; } -} +// Remaining mysqli_* stubs not covered by the 0-sqlite.php preload. +// WP 4.x's extension_loaded('mysqli') check expects these to exist. if (!function_exists('mysqli_real_connect')) { function mysqli_real_connect() { return true; } } @@ -2901,28 +1896,26 @@ if (!function_exists('mysqli_select_db')) { if (!function_exists('mysqli_close')) { function mysqli_close() { return true; } } -${MYSQL_SHIMS_PHP} `; } /** - * Runs post-install fixups for old WordPress versions. + * Post-install fixups for legacy WordPress. * - * Two-stage approach: - * 1. Load WordPress and fix data via $wpdb (admin password, seed content) - * 2. PDO fallback that directly creates tables and seeds data when the - * WordPress-based fixup fails (WP 1.x where loading WP may crash) + * Stage 1 (always): boots WordPress and patches data via $wpdb — + * siteurl/home, admin password, roles/caps, default content. * - * Stage 2 is gated to WP < 3.5: later versions install cleanly through - * the AST SQLite driver and the PDO fallback would just pollute their - * schema with stale WP 1.x-shaped tables that the driver never sees in - * its information_schema. + * Stage 2 (WP < 3.5 only): direct PDO writes that create the WP 1.x-era + * schema and seed users/posts/categories/options. Runs in addition to + * stage 1 (idempotent guards), so it backfills whatever stage 1 missed + * — including the case where wp-load.php crashed before stage 1 ran. + * Skipped for WP 3.5+ to avoid polluting the AST driver's schema with + * legacy-shaped tables it never registers in information_schema. */ export async function runPostInstallLegacyFixups( php: PHP, siteUrl: string ): Promise { - // Parse the on-disk wp_version to decide whether stage 2 should run. let wpVersion: string | null = null; const versionPhp = joinPaths(php.documentRoot, 'wp-includes/version.php'); if (php.fileExists(versionPhp)) { @@ -2932,12 +1925,10 @@ export async function runPostInstallLegacyFixups( if (m) wpVersion = m[1]; } const needsStage2 = wpVersion !== null && parseFloat(wpVersion) < 3.5; - // Stage 1: wpdb-based fixups (loads WordPress) try { await php.run({ code: `options) ? $wpdb->options : $GLOBALS['table_prefix'] . 'options'; try { $_pg_url = getenv('PLAYGROUND_SITE_URL'); @@ -2976,13 +1961,10 @@ export async function runPostInstallLegacyFixups( } } catch (Exception $e) {} - // Fix admin password for WP < 2.5. - // Use $wpdb->users if available (WP 1.5+), - // fall back to $table_prefix . 'users' (WP 1.2). + // $wpdb->users exists on WP 1.5+; older WP needs the prefix. $users_table = !empty($wpdb->users) ? $wpdb->users : $GLOBALS['table_prefix'] . 'users'; - // WP 1.2/1.0: the installer may fail to create the - // users table or the admin user. Create both if missing. + // WP 1.0/1.2 installers often leave the users table or admin row missing. $wpdb->query("CREATE TABLE IF NOT EXISTS {$users_table} ( ID int(10) unsigned NOT NULL auto_increment, user_login varchar(20) NOT NULL default '', @@ -3016,10 +1998,7 @@ export async function runPostInstallLegacyFixups( "UPDATE {$users_table} SET user_pass = MD5('password') WHERE user_login = 'admin'" ); - // Ensure WordPress roles exist and the admin user has - // admin capabilities. The installer calls populate_roles() - // but it may fail on SQLite. Set up roles and user caps - // directly via database queries as a fallback. + // populate_roles() can fail on SQLite; seed the admin role and caps directly. $p = $GLOBALS['table_prefix']; $roles_key = $p . 'user_roles'; try { @@ -3030,7 +2009,6 @@ export async function runPostInstallLegacyFixups( $has_roles = 0; } if (!$has_roles) { - // Minimal administrator role with essential capabilities. $roles = array('administrator' => array( 'name' => 'Administrator', 'capabilities' => array( @@ -3059,7 +2037,6 @@ export async function runPostInstallLegacyFixups( )); $wpdb->query("INSERT INTO {$p}options (option_name, option_value, autoload) VALUES ('{$roles_key}', '" . addslashes(serialize($roles)) . "', 'yes')"); } - // Set admin user capabilities and level in usermeta. $um = isset($wpdb->usermeta) ? $wpdb->usermeta : $p . 'usermeta'; try { $has_cap = $wpdb->get_var("SELECT COUNT(*) FROM {$um} WHERE user_id=1 AND meta_key='{$p}capabilities'"); @@ -3073,32 +2050,21 @@ export async function runPostInstallLegacyFixups( } } catch (Exception $e) {} - // Seed default content when the posts table is empty. - // Covers both old WP 1.5 (SQLite NOT NULL fix) and - // WP 2.5+ where the install may have failed to seed - // data due to SQLite compatibility issues. + // Seed default content when the install left the posts table empty. $posts_table = !empty($wpdb->posts) ? $wpdb->posts : $GLOBALS['table_prefix'] . 'posts'; $has_posts = false; try { $has_posts = (bool)$wpdb->get_var("SELECT COUNT(*) FROM {$posts_table}"); } catch (Exception $e) {} if (!$has_posts) { $now = date('Y-m-d H:i:s'); $now_gmt = gmdate('Y-m-d H:i:s'); - - // Default category if (isset($wpdb->categories)) { $wpdb->query("INSERT INTO {$wpdb->categories} (cat_ID, cat_name, category_nicename, category_description, category_parent) VALUES (1, 'Uncategorized', 'uncategorized', '', 0)"); } - - // Default post — use only basic columns that exist - // in all WP versions (1.0+). + // Columns common to WP 1.0+. $wpdb->query("INSERT INTO {$posts_table} (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered) VALUES (1, 1, '{$now}', '{$now_gmt}', 'Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!', 'Hello world!', '', 'publish', 'open', 'open', '', 'hello-world', '', '', '{$now}', '{$now_gmt}', '')"); - - // Default comment if (isset($wpdb->comments)) { $wpdb->query("INSERT INTO {$wpdb->comments} (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES (1, 'Mr WordPress', '', 'http://wordpress.org', '127.0.0.1', '{$now}', '{$now_gmt}', 'Hi, this is a comment. To delete a comment, just log in and view the post comments. There you will have the option to edit or delete them.', 0, '1', '', '', 0, 0)"); } - - // Link post to category if (isset($wpdb->post2cat)) { $wpdb->query("INSERT INTO {$wpdb->post2cat} (rel_id, post_id, category_id) VALUES (1, 1, 1)"); } @@ -3110,12 +2076,9 @@ export async function runPostInstallLegacyFixups( }, }); } catch (error) { - // Non-fatal: post-install fixups may fail on some WP versions logger.warn('Legacy WP post-install fixups failed (non-fatal):', error); } - // Stage 2: PDO fallback for WP < 3.5 where loading WordPress may crash - // or where the AST driver can't bootstrap the schema on its own. if (!needsStage2) return; try { await php.run({ @@ -3123,18 +2086,14 @@ export async function runPostInstallLegacyFixups( $db_dir = getenv('DOCUMENT_ROOT') . '/wp-content/database/'; if (!is_dir($db_dir)) { @mkdir($db_dir, 0777, true); } $db_path = $db_dir . '.ht.sqlite'; - // Create database file if it doesn't exist yet - // (the SQLite driver may have failed to initialize) $pdo = new PDO('sqlite:' . $db_path); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - // Check if admin user exists $prefix = 'wp_'; $table = $prefix . 'users'; try { $count = $pdo->query("SELECT COUNT(*) FROM {$table}")->fetchColumn(); } catch (Exception $e) { - // Table might not exist — create it $pdo->exec("CREATE TABLE IF NOT EXISTS {$table} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, user_login TEXT NOT NULL DEFAULT '', @@ -3159,18 +2118,11 @@ export async function runPostInstallLegacyFixups( } if ($count == 0) { $now = date('Y-m-d H:i:s'); - // SECURITY NOTE: WP 1.0-1.2 stores a single-md5 - // password hash directly in the users table. We - // seed the admin row with md5('password') so that - // auto-login works without a blueprint-supplied - // password. This is safe because the generated - // site only runs inside the Playground WASM - // sandbox and has no network-reachable login - // surface; it is NOT safe to lift verbatim into - // any real WordPress install. + // SECURITY: md5('password') matches WP 1.0-1.2's single-md5 + // scheme so auto-login works without a blueprint password. + // Safe only inside the Playground WASM sandbox. $pass = md5('password'); try { - // Build INSERT with defaults for ALL columns $col_info = $pdo->query("PRAGMA table_info({$table})")->fetchAll(PDO::FETCH_ASSOC); $known = array( 'ID' => '1', 'user_login' => "'admin'", @@ -3196,17 +2148,13 @@ export async function runPostInstallLegacyFixups( $pdo->exec("INSERT INTO {$table} (" . implode(',', $ins_cols) . ") VALUES (" . implode(',', $ins_vals) . ")"); } catch (Exception $e) {} } else { - // See SECURITY NOTE above: the fixed 'password' - // here is only ever written into the ephemeral - // sandbox DB. + // See SECURITY note above. $pass = md5('password'); try { $pdo->exec("UPDATE {$table} SET user_pass = '{$pass}' WHERE user_login = 'admin'"); } catch (Exception $e) {} } - // Create essential WP tables if missing. For WP 1.0-1.2, - // the install may fail to create tables because the - // SQLite driver can't process the old-style CREATE TABLE - // through the WordPress query path. + // WP 1.0-1.2 install often leaves these tables missing because + // the SQLite driver can't translate the old-style CREATE TABLEs. $now = date('Y-m-d H:i:s'); $now_gmt = gmdate('Y-m-d H:i:s'); $tables_sql = array( @@ -3328,8 +2276,7 @@ export async function runPostInstallLegacyFixups( foreach ($tables_sql as $t => $sql) { try { $pdo->exec($sql); } catch (Exception $e) {} } - // Add missing columns to existing tables (for WP 1.0-1.2 - // where the install creates tables with fewer columns). + // Backfill columns that WP 1.0-1.2 installs leave off but later code paths read. $alter_cols = array( 'categories' => array( 'category_nicename' => "TEXT NOT NULL DEFAULT ''", @@ -3337,9 +2284,7 @@ export async function runPostInstallLegacyFixups( 'category_parent' => "INTEGER NOT NULL DEFAULT 0", 'category_count' => "INTEGER NOT NULL DEFAULT 0", ), - // WP 1.5+ reads comment_count directly off wp_posts in - // get_comments_number(). The WP 1.x legacy schemas above - // don't include it, so back-fill the column if missing. + // WP 1.5+ get_comments_number() reads comment_count off wp_posts. 'posts' => array( 'comment_count' => "INTEGER NOT NULL DEFAULT 0", ), @@ -3354,8 +2299,7 @@ export async function runPostInstallLegacyFixups( } } catch (Exception $e) {} } - // Seed default data — use dynamic column detection - // to handle varying schemas across WP versions. + // Dynamic column detection because the schema differs across WP 1.x. try { if (!$pdo->query("SELECT COUNT(*) FROM {$prefix}posts")->fetchColumn()) { $post_cols = $pdo->query("PRAGMA table_info({$prefix}posts)")->fetchAll(PDO::FETCH_COLUMN, 1); @@ -3391,20 +2335,13 @@ export async function runPostInstallLegacyFixups( $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value) VALUES ('blogdescription', 'Just another WordPress weblog')"); $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value) VALUES ('home', '{$site}')"); } - // Always update siteurl/home to the scoped Playground - // URL. preCreateLegacyTables seeds 'http://localhost' - // which breaks CSS/JS paths when the actual URL has a - // scope prefix. + // Overwrite the placeholder 'http://localhost' with the scoped URL. if ($env_site) { $pdo->exec("UPDATE {$prefix}options SET option_value = '{$env_site}' WHERE option_name = 'siteurl'"); $pdo->exec("UPDATE {$prefix}options SET option_value = '{$env_site}' WHERE option_name = 'home'"); } - // Ensure template/stylesheet options exist. The WP - // installer sets these via populate_options(), but if - // the install crashes before that runs, WP can't find - // any theme and the front page fatals. + // populate_options() sets template/stylesheet; backfill if it crashed. if (!$pdo->query("SELECT COUNT(*) FROM {$prefix}options WHERE option_name='template'")->fetchColumn()) { - // Detect the first available theme directory. $themes_dir = getenv('DOCUMENT_ROOT') . '/wp-content/themes/'; $tpl = 'default'; if (is_dir($themes_dir)) { @@ -3423,10 +2360,7 @@ export async function runPostInstallLegacyFixups( $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value, autoload) VALUES ('template', '{$tpl}', 'yes')"); $pdo->exec("INSERT INTO {$prefix}options (option_name, option_value, autoload) VALUES ('stylesheet', '{$tpl}', 'yes')"); } - // Ensure db_version matches $wp_db_version from version.php. - // Without this, WP 2.0-2.5 admin redirects to upgrade.php - // with "Your database is out of date" because populate_options() - // may have crashed before setting the correct db_version. + // Without a correct db_version, WP 2.0-2.5 admin redirects to upgrade.php. $version_path = getenv('DOCUMENT_ROOT') . '/wp-includes/version.php'; if (file_exists($version_path)) { $wp_db_version = 0; @@ -3448,7 +2382,6 @@ export async function runPostInstallLegacyFixups( }, }); } catch (error) { - // Non-fatal: PDO fallback may fail if SQLite isn't available logger.warn('Legacy WP PDO fallback failed (non-fatal):', error); } } diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts index 1006f9f9b5..f1f05007cb 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts @@ -15,28 +15,29 @@ import type { UniversalPHP } from '@php-wasm/universal'; import { writeCommonPlatformMuPlugins } from '../platform-mu-plugins'; /** - * Auto-login body for legacy WordPress (1.0-2.5). - * - * Handles three auth eras: - * - WP 2.5+: wp_set_current_user() + wp_set_auth_cookie() (HMAC cookies) - * - WP 1.5-2.4: USER_COOKIE/PASS_COOKIE constants + wp_setcookie() - * - WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies + global vars - * - * Each era uses different cookie names and hashing. The code detects - * which API is available and uses the appropriate method. + * Auto-login body for legacy WordPress, dispatching to the cookie/auth + * API actually present at runtime: + * WP 2.5+ — wp_set_current_user() + wp_set_auth_cookie() (HMAC). + * WP 1.5–2.4 — USER_COOKIE/PASS_COOKIE constants + double-md5. + * WP 1.0–1.2 — wordpressuser_/wordpresspass_ cookies + globals. */ const LEGACY_AUTO_LOGIN_BODY = ` - // WP 2.5+: modern auth API if (function_exists('is_user_logged_in') && is_user_logged_in()) { return; } if (headers_sent()) { return; } - $_pg_skip_redirect = defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT') - && PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT; - // WP 2.5+: use the standard auth API + // All branches below run with PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT + // in effect: playground_load_mu_plugins() in env.php defines it + // unconditionally before invoking playground_auto_login() (and + // before the init hook can fire it), so the legacy auto-login + // flow never redirects — it populates $_COOKIE in-process and + // relies on wp_set_auth_cookie() / setcookie() for persistence + // across requests via HttpCookieStore. + + // WP 2.5+ if (function_exists('wp_set_current_user') && function_exists('wp_set_auth_cookie')) { $user = function_exists('get_user_by') ? get_user_by('login', $user_name) @@ -45,69 +46,44 @@ const LEGACY_AUTO_LOGIN_BODY = ` if (!$user) return; wp_set_current_user($user->ID, $user->user_login); - if ($_pg_skip_redirect) { - // Persist auth cookies so that subsequent PHP requests - // (e.g. form POSTs to post.php) also see the user as - // logged in. wp_set_auth_cookie() emits Set-Cookie - // headers that are captured by HttpCookieStore and - // re-injected as Cookie: on every following request. - // We also populate $_COOKIE in-process so that - // auth_redirect() and wp_verify_nonce() work for the - // remainder of this request without needing a redirect. - wp_set_auth_cookie($user->ID); - if (function_exists('wp_generate_auth_cookie')) { - $_pg_exp = time() + 172800; - if (defined('AUTH_COOKIE')) - $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'auth'); - if (defined('SECURE_AUTH_COOKIE')) - $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'secure_auth'); - if (defined('LOGGED_IN_COOKIE')) - $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'logged_in'); - } - } else { - wp_set_auth_cookie($user->ID); - if (function_exists('do_action')) { - do_action('wp_login', $user->user_login, $user); - } - setcookie('playground_auto_login_already_happened', '1'); - if (!headers_sent()) { - header("Location: " . $_SERVER['REQUEST_URI'], true, 302); - exit; - } + // Populate $_COOKIE in-process so auth_redirect() and + // wp_verify_nonce() see the session for the remainder + // of this request; wp_set_auth_cookie() also emits + // Set-Cookie for subsequent requests. + wp_set_auth_cookie($user->ID); + if (function_exists('wp_generate_auth_cookie')) { + $_pg_exp = time() + 172800; + if (defined('AUTH_COOKIE')) + $_COOKIE[AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'auth'); + if (defined('SECURE_AUTH_COOKIE')) + $_COOKIE[SECURE_AUTH_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'secure_auth'); + if (defined('LOGGED_IN_COOKIE')) + $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($user->ID, $_pg_exp, 'logged_in'); } return; } - // WP 1.5-2.4: USER_COOKIE/PASS_COOKIE with double-md5 + // WP 1.5–2.4 if (defined('USER_COOKIE') && defined('PASS_COOKIE')) { $_pg_pass_cookie = md5(md5('password')); $_COOKIE[USER_COOKIE] = $user_name; $_COOKIE[PASS_COOKIE] = $_pg_pass_cookie; - // Persist cookies to the browser so subsequent requests - // see the user as logged in. Without these setcookie() - // calls, only the current request would be authenticated. if (!headers_sent()) { $_pg_exp = time() + 172800; setcookie(USER_COOKIE, $user_name, $_pg_exp, '/'); setcookie(PASS_COOKIE, $_pg_pass_cookie, $_pg_exp, '/'); } - // Reset cached anonymous user so capability checks work $GLOBALS['current_user'] = null; if (function_exists('get_currentuserinfo')) { get_currentuserinfo(); } - if (!$_pg_skip_redirect) { - setcookie('playground_auto_login_already_happened', '1', 0, '/'); - if (!headers_sent()) { - header("Location: " . $_SERVER['REQUEST_URI'], true, 302); - exit; - } - } return; } - // WP 1.0-1.2: wordpressuser_/wordpresspass_ cookies - // and global user variables instead of WP_User objects. + // WP 1.0–1.2: cookies are usually already set by + // playground_legacy_set_auth_cookies_early() in env.php, + // but WP 1.0–1.2 reads its user state from globals (no + // WP_User), so populate those explicitly here. $cookiehash = defined('COOKIEHASH') ? COOKIEHASH : (isset($GLOBALS['cookiehash']) && $GLOBALS['cookiehash'] @@ -121,15 +97,11 @@ const LEGACY_AUTO_LOGIN_BODY = ` $_pg_pass_cookie_value = md5(md5('password')); $_COOKIE[$_pg_user_cookie_name] = $user_name; $_COOKIE[$_pg_pass_cookie_name] = $_pg_pass_cookie_value; - // Persist cookies to the browser so subsequent requests - // see the user as logged in. if (!headers_sent()) { $_pg_exp = time() + 172800; setcookie($_pg_user_cookie_name, $user_name, $_pg_exp, '/'); setcookie($_pg_pass_cookie_name, $_pg_pass_cookie_value, $_pg_exp, '/'); } - // Populate global user variables that WP 1.0-1.2 uses - // instead of a WP_User object. if (function_exists('get_userdatabylogin')) { $userdata = get_userdatabylogin($user_name); if ($userdata) { @@ -143,13 +115,6 @@ const LEGACY_AUTO_LOGIN_BODY = ` $GLOBALS['user_pass_md5'] = md5(isset($userdata->user_pass) ? $userdata->user_pass : ''); } } - if (!$_pg_skip_redirect) { - setcookie('playground_auto_login_already_happened', '1', 0, '/'); - if (!headers_sent()) { - header("Location: " . $_SERVER['REQUEST_URI'], true, 302); - exit; - } - } return; } `; @@ -174,12 +139,10 @@ export async function setupLegacyPlatformLevelMuPlugins( await php.writeFile( '/internal/shared/auto_prepend_file.php', `Warning: ... snippet) commits the -// headers, making headers_sent() return true for the rest of -// the request. That prevents the auto-login mu-plugin from -// calling wp_set_auth_cookie() and setcookie() later during -// the init hook, which in turn breaks nonce validation for -// POST requests (e.g. saving a new post). -// PHP flushes the buffer automatically at script end, so all -// WordPress output is still delivered to the browser. +// Buffer early output so a stray PHP notice doesn't commit the +// response headers before the auto-login mu-plugin gets a chance +// to call wp_set_auth_cookie() / setcookie() on the init hook — +// otherwise nonce validation breaks on POST requests. PHP flushes +// the buffer at script end so output still reaches the browser. ob_start(); ` ); @@ -224,14 +180,11 @@ ob_start(); await php.writeFile( '/internal/shared/preload/env.php', `...,'accepted_args'=>N). -// Returns 'wp10', 'wp12', or 'wp15'. -function _playground_detect_wp_hook_format() { - static $format = null; - if ($format !== null) return $format; +// Reads $wp_version from the WordPress install on disk. Falls back +// to '1.0' so callers can use version_compare() unconditionally. +function _playground_detect_wp_version() { + static $version = null; + if ($version !== null) return $version; $doc_root = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : '/wordpress'; $version_path = $doc_root . '/wp-includes/version.php'; @@ -239,6 +192,16 @@ function _playground_detect_wp_hook_format() { if (file_exists($version_path)) { include $version_path; } + $version = $wp_version; + return $version; +} + +// Returns 'wp10', 'wp12', or 'wp15' based on the WP version on +// disk — the three $wp_filter shapes apply_filters() understands. +function _playground_detect_wp_hook_format() { + static $format = null; + if ($format !== null) return $format; + $wp_version = _playground_detect_wp_version(); if (version_compare($wp_version, '1.5', '>=')) { $format = 'wp15'; } elseif (version_compare($wp_version, '1.2', '>=')) { @@ -249,10 +212,9 @@ function _playground_detect_wp_hook_format() { return $format; } -// Allow adding filters/actions prior to loading WordPress. -// $function_to_add MUST be a string. -// Stores the callback in the $wp_filter format that the target -// WordPress version's apply_filters() expects. +// Adds filters/actions before WordPress is loaded by writing the +// $wp_filter shape the target version expects. $function_to_add +// MUST be a string (no closures). function playground_add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) { global $wp_filter; $fmt = _playground_detect_wp_hook_format(); @@ -271,20 +233,18 @@ function playground_add_action( $tag, $function_to_add, $priority = 10, $accepte playground_add_filter( $tag, $function_to_add, $priority, $accepted_args ); } -// Set legacy WordPress auth cookies BEFORE WordPress loads. -// -// For WP 1.0-2.4, the auto-login mu-plugin runs too late: by the -// time the init hook fires (or may not fire at all on the front -// page), WordPress has already determined the user's login state -// from $_COOKIE. We set $_COOKIE here in the preload so WordPress -// sees the user as logged in from the very first request, and we -// also persist the cookies via setcookie() so subsequent requests -// bring them back automatically through Playground's HttpCookieStore. +// Set WP 1.0–2.4 auth cookies before WordPress loads — by the time +// the init hook fires (and on WP 1.0–1.2 it may not fire at all on +// the front page) WordPress has already read $_COOKIE. setcookie() +// also persists them across requests via HttpCookieStore. +// WP 2.5+ uses the HMAC auth cookie scheme and doesn't read these +// wordpressuser_/wordpresspass_ cookies at all — bail there so we +// don't write inert cookies the runtime would have to clean up. function playground_legacy_set_auth_cookies_early() { if (!defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) return; if (isset($_COOKIE['playground_auto_login_already_logged_out'])) return; + if (version_compare(_playground_detect_wp_version(), '2.5', '>=')) return; - // Skip if auth cookies are already set by a previous request. foreach ($_COOKIE as $name => $_) { if (strncmp($name, 'wordpressuser_', 14) === 0) return; } @@ -292,8 +252,8 @@ function playground_legacy_set_auth_cookies_early() { $user_name = PLAYGROUND_AUTO_LOGIN_AS_USER; $pass_md5 = md5(md5('password')); - // Read the actual siteurl from the SQLite database so the cookie - // hash matches what WordPress 1.0-2.4 computes from get_settings(). + // Read siteurl from SQLite so the cookie hash matches what + // WP 1.0–2.4 derives from get_settings('siteurl'). $siteurl = null; $db_path = defined('DB_DIR') ? DB_DIR . '.ht.sqlite' : ''; if ($db_path && class_exists('PDO') && file_exists($db_path)) { @@ -321,14 +281,10 @@ function playground_legacy_set_auth_cookies_early() { } playground_legacy_set_auth_cookies_early(); -// Fix date function comparisons for the SQLite driver. -// Old WordPress (< 4.0) generates date queries like: -// YEAR(post_date)='2026' AND MONTH(post_date)='4' -// using string literals. The SQLite driver's user-defined -// YEAR/MONTH/DAYOFMONTH/DAY functions return integers, and -// SQLite does not coerce types the way MySQL does (integer -// 4 != text '4' in SQLite). This filter strips quotes around -// numeric values in these comparisons so both sides are integers. +// WP < 4.0 emits YEAR(post_date)='2026' AND MONTH(post_date)='4' +// against MySQL's loose type coercion. The SQLite driver's UDFs +// return integers and SQLite is strictly typed (4 != '4'), so +// strip quotes around numeric RHS values to keep both sides ints. function playground_fix_sqlite_date_comparisons($query) { if ( stripos($query, 'YEAR') === false && @@ -345,13 +301,9 @@ function playground_fix_sqlite_date_comparisons($query) { } playground_add_filter( 'query', 'playground_fix_sqlite_date_comparisons' ); -// WP < 2.2 doesn't natively override get_option('siteurl') / -// get_option('home') with the WP_SITEURL / WP_HOME constants. -// Modern WP (2.2+) checks these constants in get_option() and -// returns the constant value, bypassing the DB. For WP 1.0-2.1, -// we replicate this behavior via option_siteurl / option_home -// filters so that admin navigation links use the correct -// Playground scoped URL instead of whatever the DB stores. +// WP 2.2+ checks WP_SITEURL/WP_HOME inside get_option(); WP <2.2 +// doesn't, so backfill the same behaviour via the option filters +// to keep admin links on the Playground-scoped URL. function playground_override_siteurl($value) { if (defined('WP_SITEURL')) { return WP_SITEURL; @@ -367,17 +319,16 @@ function playground_override_home($value) { playground_add_filter( 'option_siteurl', 'playground_override_siteurl' ); playground_add_filter( 'option_home', 'playground_override_home' ); -// Load our mu-plugins after customer mu-plugins. -// NOTE: this means our mu-plugins can't use the muplugins_loaded action! +// Load mu-plugins last so customer mu-plugins win — and so they +// can't depend on muplugins_loaded. WP < 2.8 doesn't fire that +// action at all, so init -1000 acts as a fallback (the $loaded +// flag keeps it idempotent). playground_add_action( 'muplugins_loaded', 'playground_load_mu_plugins', 0 ); -// WP < 2.8 doesn't fire muplugins_loaded, so also hook into init -// as a fallback. The $loaded flag ensures mu-plugins load only once. playground_add_action( 'init', 'playground_load_mu_plugins', -1000 ); function playground_load_mu_plugins() { static $loaded = false; if ($loaded) return; $loaded = true; - // Load all PHP files from /internal/shared/mu-plugins sorted by filename $mu_plugins_dir = '/internal/shared/mu-plugins'; if(!is_dir($mu_plugins_dir)){ return; @@ -387,47 +338,31 @@ function playground_load_mu_plugins() { global $wp_version; $is_legacy_wp = isset($wp_version) && version_compare($wp_version, '2.8', '<'); foreach ( $mu_plugins as $mu_plugin ) { - // sqlite-database-integration.php is loaded separately - // by the preload lazy loader or db.php. + // Loaded separately by the preload lazy loader or db.php. if (strpos($mu_plugin, 'sqlite-database-integration') !== false) { continue; } - // Most mu-plugins use closures in add_action/add_filter - // or call functions like site_url() that don't exist in - // very old WordPress. WP < 2.8 crashes on closures in - // hooks; WP < 2.6 lacks site_url(). Only load mu-plugins - // that are explicitly written for legacy WP compatibility. + // WP < 2.8 crashes on closures in hooks and lacks + // site_url() (added 2.6). 1-auto-login.php is written + // without either, so it's the only mu-plugin we load + // on legacy WP. if ($is_legacy_wp) { - // 1-auto-login.php uses LEGACY_AUTO_LOGIN_BODY which - // handles WP 1.0-2.5 auth APIs with named functions - // only (no closures, no site_url()). if (strpos($mu_plugin, '1-auto-login.php') === false) { continue; } } require_once $mu_plugin; } - // On WP < 2.8, this function runs during init (priority - // -1000). PHP 5.x's foreach iterates over a copy of the - // array, so add_action() calls inside the loaded mu-plugin - // (e.g. add_action('init', 'playground_auto_login', 1)) - // won't fire — the init hook list was already snapshotted. - // Call the functions directly as a workaround. - // - // PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT tells the auto-login - // function to set cookies in-process without redirecting. - // In Playground's service worker, a redirect+Set-Cookie - // can cause a race because the cookie isn't applied before - // the redirected request fires. Define it unconditionally - // for all legacy PHP so the init-hook auto-login uses the - // in-process path. + // Set cookies in-process without redirecting: a redirect + + // Set-Cookie races against the service worker — the cookie + // may not be applied before the redirected request fires. if (!defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT')) { define('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT', true); } - // WP < 2.8: add_action() calls inside mu-plugins won't - // fire because PHP 5.x's foreach iterates a copy. Call - // auto-login directly here as a workaround. + // PHP 5.x's foreach over $wp_filter['init'] iterates a copy, + // so add_action() calls made by the mu-plugin we just loaded + // won't fire on this same init run. Call them directly. if ($is_legacy_wp) { if (function_exists('playground_auto_login_redirect_target')) { playground_auto_login_redirect_target(); @@ -504,22 +439,19 @@ function playground_load_mu_plugins() { await writeCommonPlatformMuPlugins(php); - // Load the error handler before any other PHP file to ensure it - // treats all the errors, even those trigerred before mu-plugins - // are loaded. - // - // PHP 5.2 doesn't support anonymous functions — use a named - // function + set_error_handler. Legacy PHP 5.3+ uses a closure - // inside call_user_func() because return statements inside the - // handler are swallowed if written as top-level statements in - // PHP < 7. + // Loaded before any other PHP file so it catches errors from + // the very first line, including the preload phase. PHP 5.2 + // has no closures — use a named function; PHP 5.3+ uses a + // closure wrapped in call_user_func() because top-level + // `return` inside the handler is swallowed in PHP < 7. await php.writeFile( '/internal/shared/preload/error-handler.php', - `prop = value), which - * was valid in PHP 4 but triggers E_WARNING in PHP 5.x. - * These are benign and cannot be fixed in WP core since - * Playground downloads unmodified WordPress releases. - */ - if (strpos($message, "Creating default object from empty value") !== false) { - return; - } - /** - * SimplePie/RSS errors when feeds can't be fetched in WASM. - * WP 2.8's dashboard widget calls get_error_string() on a - * null SimplePie object when HTTP requests fail. - */ - if (strpos($message, "get_error_string() on null") !== false || - strpos($message, "get_error_string() on a non-object") !== false) { - return; - } - /** - * Don't complain about network errors when not connected to the network. - */ - if ( - ( - ! defined('USE_FETCH_FOR_REQUESTS') || - ! USE_FETCH_FOR_REQUESTS - ) && - strpos($message, "WordPress could not establish a secure connection to WordPress.org") !== false) - { + // http_api_transports is deprecated since 6.4.0 but Playground's + // networking layer still registers it for wp_http_supports(). + // @see https://core.trac.wordpress.org/ticket/37708 + if ( + strpos($message, "http_api_transports") !== false && + strpos($message, "since version 6.4.0 with no alternative available") !== false + ) { + return; + } + // Playground predefines constants (SITE_URL, WP_DEBUG, …) that + // wp-config.php is allowed to redefine; ours take precedence. + if (strpos($message, "already defined") !== false) { + foreach($playground_consts as $const) { + if(strpos($message, "Constant $const already defined") !== false) { return; } + } + } + // Legacy WP (2.0–3.5) assigns props on uninitialised vars, + // valid in PHP 4 but E_WARNING since 5.x. Unfixable in core — + // Playground ships unmodified WordPress releases. + if (strpos($message, "Creating default object from empty value") !== false) { + return; + } + // WP 2.8's dashboard widget calls get_error_string() on a + // null SimplePie when feed HTTP requests fail in WASM. + if (strpos($message, "get_error_string() on null") !== false || + strpos($message, "get_error_string() on a non-object") !== false) { + return; + } + // Don't complain about WordPress.org connection errors when + // the runtime isn't using fetch(). + if ( + ( + ! defined('USE_FETCH_FOR_REQUESTS') || + ! USE_FETCH_FOR_REQUESTS + ) && + strpos($message, "WordPress could not establish a secure connection to WordPress.org") !== false) + { + return; + } `; diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts index 243361829f..1f37bb65bf 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts @@ -53,12 +53,9 @@ export async function preloadLegacySqliteIntegration( phpVar(joinPaths(SQLITE_PLUGIN_FOLDER, 'load.php')) ); - // Guard every top-level add_action() call for WordPress < 3.1 - // compatibility: when loaded via the lazy $wpdb loader, - // WordPress hooks may not be available yet. Wrap the call so - // it short-circuits to a no-op when add_action is undefined. - // Anchors on start-of-line regardless of how the call is - // formatted (single-line, multi-line, with or without space). + // When loaded via the lazy $wpdb loader on WP < 3.1, the hook + // API isn't available yet. Skip top-level add_action() calls + // in that window; the multiline anchor matches all formattings. dbPhp = dbPhp.replace( /^add_action\(/gm, 'function_exists("add_action") && add_action(' @@ -68,12 +65,9 @@ export async function preloadLegacySqliteIntegration( const SQLITE_MUPLUGIN_PATH = '/internal/shared/mu-plugins/sqlite-database-integration.php'; - // Playground writes a @playground-managed db.php drop-in for - // legacy WordPress (see legacy-wp/legacy-boot.ts). The preload - // guard must therefore recognise our own marker and *not* skip - // itself on its own file — a blind `file_exists` guard would - // short-circuit the lazy-$wpdb setup on every request. Only a - // real user-supplied db.php should abort the preload. + // Recognise our own @playground-managed db.php marker so the + // preload doesn't skip itself on its own drop-in — only a + // real user-supplied db.php should abort. const dbPhpGuard = ` if(file_exists(${phpVar(dbPhpPath)})) { $_pg_db_php = @file_get_contents(${phpVar(dbPhpPath)}); @@ -118,10 +112,10 @@ function buildLegacySqlitePreload( return ` reinitialize_sqlite(); }` )} -// These stubs return truthy values because old WordPress (< 3.0) -// calls mysql_connect() directly in wpdb::__construct() and calls -// bail() on a falsy return. +// WP < 3.0's wpdb::__construct calls mysql_connect()/mysqli_init() +// inline and bail()s on a falsy return, so make these truthy. if(!function_exists('mysqli_connect')) { function mysqli_connect() { return true; } } @@ -191,8 +184,8 @@ if (!function_exists('str_ends_with')) { } } if (PHP_MAJOR_VERSION < 7) { - // E_DEPRECATED (8192) and E_STRICT (2048) are constants - // added in PHP 5.3 - use numeric values for PHP 5.2 compat. + // E_DEPRECATED (8192) / E_STRICT (2048) are PHP 5.3+ symbols; + // LEGACY_WP_ERROR_REPORTING_PHP_EXPR uses numeric literals. $level = ${LEGACY_WP_ERROR_REPORTING_PHP_EXPR}; error_reporting($level); ini_set('error_reporting', $level); diff --git a/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts b/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts index 1b7ca97f3a..5e449698dc 100644 --- a/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts +++ b/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts @@ -1,19 +1,17 @@ /** - * PHP code that provides functional mysql_* function stubs. + * mysql_* function stubs that delegate to $wpdb (the SQLite driver) + * so WP 1.x code paths that call mysql_query() / mysql_list_tables() + * / mysql_fetch_row() directly (bypassing $wpdb) still execute. * - * WP 1.x calls mysql_query(), mysql_list_tables(), mysql_fetch_row(), - * etc. directly (not through $wpdb). These stubs delegate to $wpdb - * (the SQLite driver) so the queries actually execute. + * Result sets returned by mysql_query() / mysql_list_tables() live in + * the $_mysql_results global keyed by an integer id; mysql_fetch_* + * consume rows from there. * - * A global array $_mysql_results tracks result sets returned by - * mysql_query() and mysql_list_tables(), keyed by an integer ID. - * mysql_fetch_row/mysql_fetch_object consume rows from these. + * Every stub is function_exists()-guarded so the constant is safe to + * include alongside real ext/mysql or to interpolate twice. * - * All stubs are guarded by function_exists() so they're safe to - * include multiple times or alongside real mysql_* extensions. - * - * This constant is interpolated into PHP template literals in both - * boot.ts (db.php for WP < 3.0) and index.ts (0-sqlite.php preload). + * Interpolated into the 0-sqlite.php preload built by + * {@link buildLegacySqlitePreload} in legacy-sqlite-preload.ts. */ export const MYSQL_SHIMS_PHP = ` // WordPress < 3.0 wpdb::__construct calls mysql_set_charset directly. From 728217a0395eb2379ba0e5ddf53c0524356ecd4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Fri, 17 Apr 2026 16:44:45 +0200 Subject: [PATCH 10/24] Document the blind find-and-replace approach in legacy-fixes.ts Spell out in the top-of-file doc block that the legacy patches run as plain, idempotent string replacements without parsing PHP, why this relies on legacy WP releases being frozen, and point at the boot-smoke suite as the safety net for changes here. --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index 9eaa904674..99e9d6d90b 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -14,6 +14,21 @@ * ({@link runPostInstallLegacyFixups}) and a legacy-db.php generator * ({@link generateDbPhpContent}) that legacy-wp/legacy-boot.ts composes * into its install flow. + * + * Patches are plain, idempotent string replacements — no PHP parser. + * Each one plants a `pg_*` marker so re-runs are no-ops, and its + * match string is narrow enough that non-matching WP versions are + * silently skipped. {@link patchWordPressSourceFiles} also gates + * range-specific patches on the on-disk `$wp_version`; the rest + * rely on match specificity alone. Legacy WP releases are frozen, + * so a needle that matches today will keep matching tomorrow. + * + * The balance is delicate: a patch may have been quietly covering + * more WP versions than it advertises, so tightening a needle or + * changing the replacement can break one you didn't know about. + * The boot-smoke suite in `tests/test-legacy-wp-version-boot.mjs` + * exercises every supported legacy WP version end-to-end; run it + * before landing changes here. */ import type { PHP } from '@php-wasm/universal'; import { logger } from '@php-wasm/logger'; From 3d9ce97b2d772d91fa0d0e3ad329d749aa464538 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Fri, 17 Apr 2026 16:44:50 +0200 Subject: [PATCH 11/24] Add CLI regression test for mounted wp-content not gaining drop-ins Guards against Playground writing its own db.php, object-cache.php, advanced-cache.php, or sunrise.php into a user-mounted wp-content. Studio and similar consumers mount real wp-content directories into Playground, and a stray Playground-managed drop-in there would silently take over the user's external site. --- packages/playground/cli/tests/run-cli.spec.ts | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/packages/playground/cli/tests/run-cli.spec.ts b/packages/playground/cli/tests/run-cli.spec.ts index c55e1d6ed9..228455bf46 100644 --- a/packages/playground/cli/tests/run-cli.spec.ts +++ b/packages/playground/cli/tests/run-cli.spec.ts @@ -329,6 +329,81 @@ describe.each(blueprintVersions)( expect(response.text).toContain('My WordPress Website'); }); + // Regression test: Playground must not write its own drop-ins + // (db.php, object-cache.php, advanced-cache.php, sunrise.php) + // into a user-mounted wp-content. Studio and other consumers + // mount real wp-content directories into Playground, and any + // Playground-managed file written at the wp-content root would + // silently take over the user's external site. + test('should not drop any new files at the wp-content root when wp-content is mounted', async () => { + const hostWpContent = await mkdtemp( + path.join(tmpdir(), 'playground-test-mount-wpcontent-') + ); + // Minimal wp-content skeleton. `plugins/` and `themes/` + // stay empty so WP's unzip step fills them in; any file + // added at the root of hostWpContent after boot must come + // from Playground itself. + mkdirSync(path.join(hostWpContent, 'plugins')); + mkdirSync(path.join(hostWpContent, 'themes')); + writeFileSync( + path.join(hostWpContent, 'index.php'), + ' !filesBefore.has(f)) + .filter( + (f) => + !lstatSync( + path.join(hostWpContent, f) + ).isDirectory() + ); + expect(unexpectedNewFiles).toEqual([]); + } finally { + rmSync(hostWpContent, { recursive: true, force: true }); + } + }, 120000); + // Regression test: mounting files under /tmp (which is already // NODEFS-mounted to a shared host directory) used to race // across 6 workers and intermittently fail with ErrnoError 20 From 19bfabadde90192724d027d81abebbd32fd8ac2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Fri, 17 Apr 2026 17:20:30 +0200 Subject: [PATCH 12/24] Speed up test-legacy-wp-version-boot.mjs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two targeted changes that remove ~2/3 of the per-version wall time: - Drop waitForWPFrame's 3 s poll granularity down to 500 ms, so the loop reflects how fast Playground actually responds instead of always burning whole 3 s ticks. - Replace the two unconditional waitForTimeout(8000) waits after post-click (Phase 2) and plugin-activate click (Phase 5) with an event-based wait: waitForWPFrame now accepts `excludeUrl` (skip the scoped frame while its URL still matches the pre-click value) and `contentPredicate` (require specific outcome text before returning, so we don't race the intermediate admin shell between POST and post-redirect render). Phase 5 also explicitly waits for any Activate link to become visible before selecting one — navigateViaUrlBar returns as soon as plugins.php has any body text, which on slow CI boots can be just the admin shell before the plugin list is populated. Local run on 7 representative versions (6.2, 6.1, 6.0, 5.9, 5.8, 4.9, 3.2) goes from ~33 s/version to ~10 s/version, all 5 phases pass including the ones that flaked under the prior code. --- .../tests/test-legacy-wp-version-boot.mjs | 77 +++++++++++++++---- 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs index 989e0719c2..877695556f 100644 --- a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs +++ b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs @@ -89,21 +89,34 @@ const results = []; /** * Finds the WordPress content frame (the one whose URL contains "scope:") * and returns its body text once it has meaningful content. + * + * Options: + * - `excludeUrl`: skip the scoped frame while its URL still matches the + * pre-click value — lets callers wait for a post-click navigation to + * actually commit instead of racing against the previous page's body. + * - `contentPredicate`: a `(body) => boolean` that must also return + * true before we return. Without this, any body ≥ 20 chars counts, + * which is too eager on slow CI boots where pages render in stages + * (e.g. admin shell first, plugin list later). + * * Returns null on timeout. */ -async function waitForWPFrame(page, timeoutSeconds) { - for (let i = 0; i < timeoutSeconds / 3; i++) { - await page.waitForTimeout(3000); +async function waitForWPFrame(page, timeoutSeconds, opts = {}) { + const { excludeUrl = null, contentPredicate = null } = opts; + const iterations = Math.ceil((timeoutSeconds * 1000) / 500); + for (let i = 0; i < iterations; i++) { + await page.waitForTimeout(500); for (const frame of page.frames()) { try { const furl = frame.url(); if (!furl.includes('scope:')) continue; + if (excludeUrl && furl === excludeUrl) continue; const body = await frame .locator('body') .innerText({ timeout: 2000 }); - if (body && body.length >= 20) { - return { body, frame }; - } + if (!body || body.length < 20) continue; + if (contentPredicate && !contentPredicate(body)) continue; + return { body, frame }; } catch {} } } @@ -117,8 +130,9 @@ async function waitForWPFrame(page, timeoutSeconds) { * or login page to appear. */ async function waitForAdminFrame(page, timeoutSeconds) { - for (let i = 0; i < timeoutSeconds / 3; i++) { - await page.waitForTimeout(3000); + const iterations = Math.ceil((timeoutSeconds * 1000) / 500); + for (let i = 0; i < iterations; i++) { + await page.waitForTimeout(500); for (const frame of page.frames()) { try { const furl = frame.url(); @@ -393,9 +407,19 @@ for (const { wp, php } of MATRIX) { }) .first(); if ((await link.count()) > 0) { + const prevFrameUrl = wp1.frame.url(); await link.click({ timeout: 5000 }); - await page.waitForTimeout(8000); - const wp1b = await waitForWPFrame(page, 30); + const wp1b = await waitForWPFrame(page, 30, { + excludeUrl: prevFrameUrl, + // Don't return on the transient redirect body — wait + // until the single-post page actually renders (or + // WordPress emits its own not-found message). + contentPredicate: (body) => + body.includes('Welcome to WordPress') || + body.includes('Hello world') || + body.includes('Not Found') || + body.includes("can't find"), + }); if (!wp1b) { postStatus = { status: 'TIMEOUT' }; } else { @@ -589,6 +613,20 @@ for (const { wp, php } of MATRIX) { // Fall back to the first Activate link for very old WP // where Hello Dolly may not be present or the href // format differs. + // Wait for any Activate link to render — navigateViaUrlBar + // returns as soon as plugins.php has *any* body text, which + // on slow CI boots can be just the admin shell before the + // plugin list renders. + const anyActivate = wp4.frame + .locator('a') + .filter({ hasText: 'Activate' }) + .first(); + try { + await anyActivate.waitFor({ + state: 'visible', + timeout: 15000, + }); + } catch {} const helloActivate = wp4.frame .locator('a[href*="hello.php"]') .filter({ hasText: 'Activate' }) @@ -596,14 +634,21 @@ for (const { wp, php } of MATRIX) { const activateLink = (await helloActivate.count()) > 0 ? helloActivate - : wp4.frame - .locator('a') - .filter({ hasText: 'Activate' }) - .first(); + : anyActivate; if ((await activateLink.count()) > 0) { + const prevFrameUrl = wp4.frame.url(); await activateLink.click({ timeout: 5000 }); - await page.waitForTimeout(8000); - const wp4b = await waitForWPFrame(page, 20); + const wp4b = await waitForWPFrame(page, 20, { + excludeUrl: prevFrameUrl, + // Don't match on the intermediate admin shell + // between the POST and the post-redirect body — + // only return once the result page actually + // shows activation outcome text. + contentPredicate: (body) => + body.includes('Plugin activated') || + body.includes('Deactivate') || + body.includes('Are you sure'), + }); if (!wp4b) { pluginStatus = { status: 'TIMEOUT' }; } else { From 4f2a45e09e01cceedd9e725858ac34fb263378e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Fri, 17 Apr 2026 21:58:03 +0200 Subject: [PATCH 13/24] Drop zero-date WP source patches; relax SQLite driver sql_mode instead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SQLite integration plugin ships with MySQL 8 strict defaults (NO_ZERO_DATE + STRICT_TRANS_TABLES + ONLY_FULL_GROUP_BY), but legacy WordPress (1.0–4.9, contemporary with MySQL 4.1–5.6) was written against empty or near-empty sql_mode defaults. Three `patchWp*ZeroDate*` helpers were previously patching every wp_insert_post() variant that emits '0000-00-00 00:00:00' for drafts, just to make those INSERTs pass. Reset the driver's default `active_sql_modes` to `array()` once during SQLite preload for legacy PHP boots. One regex on the driver source, two source variants (standard multi-line and the php52-downgraded single-line form) covered by the same needle. WP 3.9+ already achieves the same effect at runtime via wpdb::set_sql_mode(), so the relaxed driver default is a no-op there and strictly an improvement for WP < 3.9. Net: -213 lines in legacy-fixes.ts (three patch functions + their needles), +39 in legacy-sqlite-preload.ts. Smoke test across WP 1.5 / 2.1 / 2.5 / 2.8 / 3.2 / 3.5 / 4.0 / 4.1 all pass on PHP 5.2. --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 213 ------------------ .../src/legacy-wp/legacy-sqlite-preload.ts | 39 ++++ 2 files changed, 39 insertions(+), 213 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index 99e9d6d90b..461d5aa0f6 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -144,15 +144,9 @@ export async function patchWordPressSourceFiles( if (2.1 <= wpVersion && wpVersion < 2.3) { await patchWp21PluginsPhpInArray(php, documentRoot); } - if (2.1 <= wpVersion && wpVersion < 2.7) { - await patchWp21InsertPostEmptyDates(php, documentRoot); - } if (wpVersion < 2.5) { await patchCheckAdminReferer(php, documentRoot); } - if (2.7 <= wpVersion && wpVersion < 3.0) { - await patchWp27InsertPostZeroDateGmt(php, documentRoot); - } if (wpVersion < 2.8) { await patchAdminAuthRedirect(php, documentRoot); await patchAdminAjaxAuth(php, documentRoot); @@ -160,9 +154,6 @@ export async function patchWordPressSourceFiles( if (2.9 <= wpVersion && wpVersion < 3.6) { await patchAdminNetworkCalls(php, documentRoot); } - if (3.1 <= wpVersion && wpVersion < 4.2) { - await patchWp41AutoDraftZeroDatetime(php, documentRoot); - } if (3.3 <= wpVersion && wpVersion < 3.4) { await patchWp33ScreenPhpSelfThis(php, documentRoot); } @@ -582,210 +573,6 @@ async function patchWp15AdminPostAutoIncrement(php: PHP, documentRoot: string) { await php.writeFile(postPhpPath, content); } -/** - * WP 2.1–2.6 `wp_insert_post()` leaves `$post_date`/`$post_date_gmt` - * empty (or `'0000-00-00 00:00:00'` in WP 2.5–2.6) for draft/pending - * posts. The SQLite integration runs with NO_ZERO_DATE + - * STRICT_TRANS_TABLES and rejects those values, so saving a draft - * silently fails (insert returns 0, page reloads blank). - * - * Always initialise empty dates from current time — this is what - * WP 2.7+ already does. Three needle variants cover the WP 2.1–2.2, - * WP 2.3, and WP 2.5–2.6 source styles. WP 2.7+ is handled by - * `patchWp27InsertPostZeroDateGmt`. - */ -async function patchWp21InsertPostEmptyDates(php: PHP, documentRoot: string) { - // WP 2.0 keeps wp_insert_post() in wp-includes/functions-post.php, - // while WP 2.1+ moved it to wp-includes/post.php. - const candidates = [ - joinPaths(documentRoot, 'wp-includes/post.php'), - joinPaths(documentRoot, 'wp-includes/functions-post.php'), - ]; - const postPhpPath = candidates.find((p) => php.fileExists(p)); - if (!postPhpPath) return; - let content = php.readFileAsText(postPhpPath); - if (content.includes('/* pg_wp21_insert_post_date */')) return; - - const replacement = - '/* pg_wp21_insert_post_date */\n' + - '\tif (empty($post_date)) {\n' + - "\t\t$post_date = current_time('mysql');\n" + - '\t}\n' + - '\n' + - '\tif (empty($post_date_gmt)) {\n' + - '\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t}'; - - // WP 2.1–2.2 variant: `if ( 'draft' != $post_status )` guard, no else branch. - const needleWp21 = - "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + - '\tif (empty($post_date)) {\n' + - "\t\tif ( 'draft' != $post_status )\n" + - "\t\t\t$post_date = current_time('mysql');\n" + - '\t}\n' + - '\n' + - '\tif (empty($post_date_gmt)) {\n' + - "\t\tif ( 'draft' != $post_status )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t}'; - - // WP 2.3 variant: `!in_array` guard, no else branch. - const needleWp23 = - "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + - '\tif (empty($post_date)) {\n' + - "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + - "\t\t\t$post_date = current_time('mysql');\n" + - '\t}\n' + - '\n' + - '\tif (empty($post_date_gmt)) {\n' + - "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t}'; - - // WP 2.5–2.6 variant: same `!in_array` guard as WP 2.3 plus an explicit - // zero-date `else` branch (the direct trigger of the SQLite rejection). - const needleWp25 = - "// If the post date is empty (due to having been new or a draft) and status is not 'draft', set date to now\n" + - '\tif (empty($post_date)) {\n' + - "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + - "\t\t\t$post_date = current_time('mysql');\n" + - '\t\telse\n' + - "\t\t\t$post_date = '0000-00-00 00:00:00';\n" + - '\t}\n' + - '\n' + - '\tif (empty($post_date_gmt)) {\n' + - "\t\tif ( !in_array($post_status, array('draft', 'pending')) )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t\telse\n' + - "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + - '\t}'; - - if (content.includes(needleWp21)) { - content = content.replace(needleWp21, replacement); - } else if (content.includes(needleWp23)) { - content = content.replace(needleWp23, replacement); - } else if (content.includes(needleWp25)) { - content = content.replace(needleWp25, replacement); - } else { - return; - } - - await php.writeFile(postPhpPath, content); -} - -/** - * WP 2.7–2.9 `wp_insert_post()` writes a zero `post_date_gmt` for - * draft/pending posts. The SQLite integration runs with NO_ZERO_DATE + - * STRICT_TRANS_TABLES, the insert fails, and post.php redirects back to - * an empty "Write Post" form with no error. - * - * Replace the zero-date else branch with `get_gmt_from_date($post_date)`, - * which is safe because `$post_date` is already guaranteed non-empty. - * WP 3.0+ added `'auto-draft'` to the same `in_array` and is handled by - * `patchWp41AutoDraftZeroDatetime`. - */ -async function patchWp27InsertPostZeroDateGmt(php: PHP, documentRoot: string) { - const postPhpPath = joinPaths(documentRoot, 'wp-includes/post.php'); - if (!php.fileExists(postPhpPath)) return; - const content = php.readFileAsText(postPhpPath); - if (content.includes('/* pg_wp27_post_date_gmt */')) return; - - // WP 2.7–2.9: draft/pending-only array (no 'auto-draft' yet). - const needle = - "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + - "\t\tif ( !in_array( $post_status, array( 'draft', 'pending' ) ) )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t\telse\n' + - "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + - '\t}'; - if (!content.includes(needle)) return; - - const patched = content.replace( - needle, - "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + - "\t\tif ( !in_array( $post_status, array( 'draft', 'pending' ) ) )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t\telse\n' + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date); /* pg_wp27_post_date_gmt */\n' + - '\t}' - ); - if (patched !== content) { - await php.writeFile(postPhpPath, patched); - } -} - -/** - * WP 3.1–4.1 `wp_insert_post()` writes a zero `post_date_gmt` for - * draft/pending/auto-draft posts. With NO_ZERO_DATE + STRICT_TRANS_TABLES - * the insert fails. Concrete failure modes: post-new.php's - * `get_default_post_to_edit($type, true)` returns null and the form - * renders with `post_ID=0`, leading to "You are not allowed to edit this - * post" / nonce failures on submit; WP 3.7–3.9's Quick Draft widget - * silently discards the published post. - * - * Replace the zero-date else branch with `get_gmt_from_date($post_date)` - * (safe: `$post_date` is already guaranteed non-empty). Two needles - * cover the WP 3.1–3.9 (tab-indented, braceless) and WP 4.0–4.1 - * (space-indented, braced) source styles. WP 4.2+ rewrote the function - * and no longer emits the zero date. - */ -async function patchWp41AutoDraftZeroDatetime(php: PHP, documentRoot: string) { - const postPhpPath = joinPaths(documentRoot, 'wp-includes/post.php'); - if (!php.fileExists(postPhpPath)) return; - const content = php.readFileAsText(postPhpPath); - if ( - content.includes('/* pg_wp41_auto_draft_gmt */') || - content.includes('/* pg_wp31_auto_draft_gmt */') - ) { - return; - } - - // WP 3.1–3.9: tab-indented, braceless if/else inside an outer - // `if ( empty($post_date_gmt) || ... )` guard. - const needleWp31 = - "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + - "\t\tif ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t\telse\n' + - "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + - '\t}'; - if (content.includes(needleWp31)) { - const patched = content.replace( - needleWp31, - "\tif ( empty($post_date_gmt) || '0000-00-00 00:00:00' == $post_date_gmt ) {\n" + - "\t\tif ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date);\n' + - '\t\telse\n' + - '\t\t\t$post_date_gmt = get_gmt_from_date($post_date); /* pg_wp31_auto_draft_gmt */\n' + - '\t}' - ); - if (patched !== content) { - await php.writeFile(postPhpPath, patched); - } - return; - } - - // WP 4.0–4.1: braced if/else, indented two extra tabs deeper than WP 3.x. - const needleWp41 = - "if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date );\n' + - '\t\t} else {\n' + - "\t\t\t$post_date_gmt = '0000-00-00 00:00:00';\n" + - '\t\t}'; - if (!content.includes(needleWp41)) return; - const patched = content.replace( - needleWp41, - "if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) {\n" + - '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date );\n' + - '\t\t} else {\n' + - '\t\t\t$post_date_gmt = get_gmt_from_date( $post_date ); /* pg_wp41_auto_draft_gmt */\n' + - '\t\t}' - ); - if (patched !== content) { - await php.writeFile(postPhpPath, patched); - } -} - /** * Fix WP 3.3's `self::$this->_help_sidebar` typo in screen.php — PHP * 5.3+ fatals on it whenever the sidebar is populated (e.g. post-new.php). diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts index 1f37bb65bf..b46c9f451a 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts @@ -38,6 +38,8 @@ export async function preloadLegacySqliteIntegration( }`; await php.mv(temporarySqlitePluginFolder, SQLITE_PLUGIN_FOLDER); + await relaxSqliteDriverSqlModes(php, SQLITE_PLUGIN_FOLDER); + // Prevents the SQLite integration from trying to call activate_plugin() await php.defineConstant('SQLITE_MAIN_FILE', '1'); const dbCopy = await php.readFileAsText( @@ -101,6 +103,43 @@ if(file_exists(${phpVar(dbPhpPath)})) { ); } +/** + * Resets the SQLite driver's default `active_sql_modes` to an empty + * set. Matches the MySQL 4.1–5.5 default `sql_mode` that legacy + * WordPress (1.0–4.9) was written against — and which WP 3.9+ already + * achieves at runtime via `wpdb::set_sql_mode()` by stripping + * `NO_ZERO_DATE`, `STRICT_TRANS_TABLES`, etc. from whatever the + * server returns. The driver, however, ships with MySQL 8 strict + * defaults, which reject values old WP (and the legacy installer) + * emit unchanged — most visibly the `'0000-00-00 00:00:00'` draft + * placeholder in `wp_insert_post()`. + * + * Applying this at the driver source level is simpler than patching + * every legacy `wp_insert_post()` variant, and it covers WP < 3.9 + * where `wpdb::set_sql_mode()` doesn't exist. + */ +async function relaxSqliteDriverSqlModes( + php: UniversalPHP, + sqlitePluginFolder: string +): Promise { + const driverPath = joinPaths( + sqlitePluginFolder, + 'wp-includes/database/sqlite/class-wp-pdo-mysql-on-sqlite.php' + ); + if (!(await php.fileExists(driverPath))) return; + const content = await php.readFileAsText(driverPath); + // Two source variants: multi-line `private` in the standard build, + // single-line `public` in the PHP 5.2-downgraded build. The regex + // normalises both to an empty array literal. + const patched = content.replace( + /\$active_sql_modes\s*=\s*array\s*\([^)]*\)\s*;/, + '$active_sql_modes = array();' + ); + if (patched !== content) { + await php.writeFile(driverPath, patched); + } +} + /** * Builds the 0-sqlite.php preload content for legacy PHP (< 7). * Includes MySQL/MySQLi stubs, str_* polyfills, and error suppression. From f96ee1ff08bd689c8213213fad7816b2d7565ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Sat, 18 Apr 2026 18:04:29 +0200 Subject: [PATCH 14/24] Retry Phase 3 once on timeout in legacy WP boot smoke test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 3 (wp-admin dashboard load via URL bar) has been flaking on shared CI runners for one random modern-WP version per run — 5.5, 5.9, 6.0 across recent runs, always with the same empty-detail `admin [TIMEOUT]` after the full 120 s navigateViaUrlBar budget. The iframe gets stuck partway into the first /wp-admin/ load and never progresses; a fresh URL-bar fill+Enter almost always unsticks it on the second try. Retry once on timeout inline. Cheap and keeps real admin failures visible — the retry only kicks in when the first attempt returned null, so a genuine admin-page error still reports as the specific failure mode (ERROR / UNKNOWN) rather than getting retried. --- .../tests/test-legacy-wp-version-boot.mjs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs index 877695556f..2d8f186276 100644 --- a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs +++ b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs @@ -450,11 +450,23 @@ for (const { wp, php } of MATRIX) { // --- Phase 3: Admin dashboard (auto-login) --- if (frontStatus.status === 'OK' || frontStatus.status === 'PARTIAL') { try { - const wp2 = await navigateViaUrlBar( + // Retry once on timeout — modern WP admin occasionally + // hangs the first /wp-admin/ load on shared CI runners + // (see the long-standing admin-phase flake across runs + // on 5.5, 5.9, 6.0, ...). One fresh fill+Enter of the + // URL bar almost always unblocks it. + let wp2 = await navigateViaUrlBar( page, '/wp-admin/', TIMEOUT_S ); + if (!wp2) { + wp2 = await navigateViaUrlBar( + page, + '/wp-admin/', + TIMEOUT_S + ); + } if (!wp2) { adminStatus = { status: 'TIMEOUT' }; } else { From 96b050b2f9dcfead4170a7896796af46af120d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Mon, 20 Apr 2026 09:11:38 +0200 Subject: [PATCH 15/24] Drop dead code from legacy WP support Three provably-dead snippets removed from the legacy boot path: - PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT: defined in env.php but never read anywhere. LEGACY_AUTO_LOGIN_BODY has no redirect branch that would consult it. Delete the define() and collapse the misleading docblock to describe what the code actually does. - waitForAdminFrame(): 47-line helper in the legacy boot smoke test, never called. Phase 3 uses navigateViaUrlBar + waitForWPFrame. - str_contains/str_starts_with/str_ends_with polyfills in the legacy SQLite preload: the downgraded v2.2.22-php52 plugin ships identical function_exists-guarded polyfills in its own php-polyfills.php, and no code between the preload and the lazy-wpdb first touch calls str_*. The preload copies were redundant. playground-wordpress build + lint + 80/80 unit tests stay green. --- .../src/legacy-wp/legacy-mu-plugins.ts | 17 ++---- .../src/legacy-wp/legacy-sqlite-preload.ts | 15 ------ .../tests/test-legacy-wp-version-boot.mjs | 54 ------------------- 3 files changed, 4 insertions(+), 82 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts index f1f05007cb..c81db2d417 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts @@ -29,13 +29,10 @@ const LEGACY_AUTO_LOGIN_BODY = ` return; } - // All branches below run with PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT - // in effect: playground_load_mu_plugins() in env.php defines it - // unconditionally before invoking playground_auto_login() (and - // before the init hook can fire it), so the legacy auto-login - // flow never redirects — it populates $_COOKIE in-process and - // relies on wp_set_auth_cookie() / setcookie() for persistence - // across requests via HttpCookieStore. + // Legacy auto-login never redirects; it populates $_COOKIE + // in-process for the current request and relies on + // setcookie() / wp_set_auth_cookie() to persist across + // requests via HttpCookieStore. // WP 2.5+ if (function_exists('wp_set_current_user') && function_exists('wp_set_auth_cookie')) { @@ -353,12 +350,6 @@ function playground_load_mu_plugins() { } require_once $mu_plugin; } - // Set cookies in-process without redirecting: a redirect + - // Set-Cookie races against the service worker — the cookie - // may not be applied before the redirected request fires. - if (!defined('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT')) { - define('PLAYGROUND_SKIP_AUTO_LOGIN_REDIRECT', true); - } // PHP 5.x's foreach over $wp_filter['init'] iterates a copy, // so add_action() calls made by the mu-plugin we just loaded diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts index b46c9f451a..67defd0212 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts @@ -207,21 +207,6 @@ if(!function_exists('mysql_select_db')) { function mysql_select_db() { return true; } } ${MYSQL_SHIMS_PHP} -if (!function_exists('str_contains')) { - function str_contains($haystack, $needle) { - return $needle === '' || strpos($haystack, $needle) !== false; - } -} -if (!function_exists('str_starts_with')) { - function str_starts_with($haystack, $needle) { - return strncmp($haystack, $needle, strlen($needle)) === 0; - } -} -if (!function_exists('str_ends_with')) { - function str_ends_with($haystack, $needle) { - return $needle === '' || substr($haystack, -strlen($needle)) === $needle; - } -} if (PHP_MAJOR_VERSION < 7) { // E_DEPRECATED (8192) / E_STRICT (2048) are PHP 5.3+ symbols; // LEGACY_WP_ERROR_REPORTING_PHP_EXPR uses numeric literals. diff --git a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs index 2d8f186276..a23935f3dd 100644 --- a/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs +++ b/packages/playground/wordpress/tests/test-legacy-wp-version-boot.mjs @@ -123,60 +123,6 @@ async function waitForWPFrame(page, timeoutSeconds, opts = {}) { return null; } -/** - * Like waitForWPFrame, but specifically waits for an admin page. - * Skips PHP error output from background requests like - * prefetchUpdateChecks, and waits for the actual admin dashboard - * or login page to appear. - */ -async function waitForAdminFrame(page, timeoutSeconds) { - const iterations = Math.ceil((timeoutSeconds * 1000) / 500); - for (let i = 0; i < iterations; i++) { - await page.waitForTimeout(500); - for (const frame of page.frames()) { - try { - const furl = frame.url(); - if (!furl.includes('scope:')) continue; - const body = await frame - .locator('body') - .innerText({ timeout: 2000 }); - if (!body || body.length < 20) continue; - - // Skip frames that ONLY show a PHP error — these are - // from background requests (prefetchUpdateChecks), not - // the actual admin page. - const isOnlyError = - body.length < 300 && - (body.includes('Parse error') || - body.includes('Fatal error')); - if (isOnlyError) continue; - - // Accept admin pages, login pages, or any page with - // substantial content from a wp-admin URL. - const isAdmin = furl.includes('wp-admin'); - const isLogin = - furl.includes('wp-login') || - (body.includes('Username') && body.includes('Password')); - if (isAdmin || isLogin) { - return { body, frame }; - } - - // Also accept if the page has admin-like content - const hasAdminContent = [ - 'Dashboard', - 'Write', - 'Manage', - 'Options', - ].some((ind) => body.includes(ind)); - if (hasAdminContent) { - return { body, frame }; - } - } catch {} - } - } - return null; -} - /** * Checks body text for PHP errors. * Returns the full error line (including file path and line number) From 25cb17a05fe17835683c3133a58e29ec7a33fa01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Mon, 20 Apr 2026 09:26:08 +0200 Subject: [PATCH 16/24] Drop redundant non-HMAC branches from legacyAuthCookieBlock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit env.php's playground_legacy_set_auth_cookies_early runs via auto_prepend_file before every PHP script (including the source- patched wp-admin/admin.php and wp-admin/admin-ajax.php). For WP < 2.5 it already populates wordpressuser_/wordpresspass_ cookies, which are identical to the USER_COOKIE/PASS_COOKIE constants WP 1.5–2.4 reads (both resolve to wordpressuser_\$cookiehash / wordpresspass_\$cookiehash). So the USER_COOKIE and COOKIEHASH elseif branches of legacyAuthCookieBlock were re-setting cookies that were already there. Keep the HMAC branch (WP 2.5+) and the \$_pg_user=null default; drop both elseif branches. Smoke test across WP 1.2 / 2.1 / 2.5 / 4.9 / 6.2 unchanged. --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index 461d5aa0f6..dfe92c3a33 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -1504,19 +1504,16 @@ if (defined('PLAYGROUND_AUTO_LOGIN_AS_USER')) { } /** - * PHP snippet that resolves a username to a WP_User and, when the - * HMAC auth API is available (WP 2.5+), populates `$_COOKIE` with the - * three auth cookies. Falls through to the WP < 2.5 USER_COOKIE / - * PASS_COOKIE pair and the WP 1.x `wordpressuser_$cookiehash` / - * `wordpresspass_$cookiehash` pair when the modern API is missing. + * PHP snippet that, on WP 2.5+, resolves a username to a WP_User and + * populates `$_COOKIE` with the three HMAC auth cookies. * - * `$_pg_user` (WP_User|null on WP 2.5+, null otherwise) is left in - * scope for callers that need to read DB-level capability info. - * - * SECURITY NOTE: legacy installs hardcode the admin password to - * 'password' (see the SQLite user-row seeding); the WP < 2.5 and - * WP 1.x branches reuse that hash. The generated site only exists - * inside the WASM sandbox, so there is no real account to steal. + * On WP < 2.5 the block is a no-op: env.php's + * {@link playground_legacy_set_auth_cookies_early} runs via + * auto_prepend_file before every script and already populated the + * `wordpressuser_$cookiehash` / `wordpresspass_$cookiehash` pair + * (which also backs the USER_COOKIE/PASS_COOKIE constants WP 1.5–2.4 + * reads). `$_pg_user` is left `null` there; callers that care about + * DB-level capability info fall back to `$GLOBALS['current_user']`. */ function legacyAuthCookieBlock(usernamePhpExpr: string): string { return ` @@ -1536,12 +1533,6 @@ if (function_exists('wp_generate_auth_cookie')) { if (defined('LOGGED_IN_COOKIE')) $_COOKIE[LOGGED_IN_COOKIE] = wp_generate_auth_cookie($_pg_user->ID, $_pg_exp, 'logged_in'); } -} elseif (defined('USER_COOKIE') && defined('PASS_COOKIE')) { - $_COOKIE[USER_COOKIE] = ${usernamePhpExpr}; - $_COOKIE[PASS_COOKIE] = md5(md5('password')); -} elseif (defined('COOKIEHASH')) { - $_COOKIE['wordpressuser_' . COOKIEHASH] = ${usernamePhpExpr}; - $_COOKIE['wordpresspass_' . COOKIEHASH] = md5(md5('password')); } `; } From 05eea112f14e52eeba811df7c7d5507c7f03a9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Mon, 20 Apr 2026 09:27:15 +0200 Subject: [PATCH 17/24] Collapse PHP 5.2 vs 5.3+ error-handler split MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The legacy error handler had two builders — buildPhp52ErrorHandler (named function + \$GLOBALS) and buildModernErrorHandler (closure wrapped in call_user_func) — chosen by isPhp52. The named-function form works on every PHP version from 5.2 through 8.x, so the split is unnecessary. Drop buildModernErrorHandler and the isPhp52 flag; emit the named-function form unconditionally. setupLegacyPlatformLevelMuPlugins no longer needs its phpVersion option. --- packages/playground/wordpress/src/index.ts | 2 +- .../src/legacy-wp/legacy-mu-plugins.ts | 40 ++++--------------- 2 files changed, 8 insertions(+), 34 deletions(-) diff --git a/packages/playground/wordpress/src/index.ts b/packages/playground/wordpress/src/index.ts index 128c40adb1..d47e9013b7 100644 --- a/packages/playground/wordpress/src/index.ts +++ b/packages/playground/wordpress/src/index.ts @@ -37,7 +37,7 @@ export async function setupPlatformLevelMuPlugins( options: { phpVersion?: string } = {} ) { if (isLegacyPHPVersion(options.phpVersion)) { - return setupLegacyPlatformLevelMuPlugins(php, options); + return setupLegacyPlatformLevelMuPlugins(php); } await php.mkdir('/internal/shared/mu-plugins'); diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts index c81db2d417..3cf584c2a0 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts @@ -123,10 +123,8 @@ const LEGACY_AUTO_LOGIN_BODY = ` * 5.2 variant of the error handler. */ export async function setupLegacyPlatformLevelMuPlugins( - php: UniversalPHP, - options: { phpVersion?: string } = {} + php: UniversalPHP ): Promise { - const isPhp52 = (options.phpVersion ?? '') === '5.2'; await php.mkdir('/internal/shared/mu-plugins'); // Overwrite auto_prepend_file.php to add PHP 4 superglobal @@ -431,18 +429,12 @@ function playground_load_mu_plugins() { await writeCommonPlatformMuPlugins(php); // Loaded before any other PHP file so it catches errors from - // the very first line, including the preload phase. PHP 5.2 - // has no closures — use a named function; PHP 5.3+ uses a - // closure wrapped in call_user_func() because top-level - // `return` inside the handler is swallowed in PHP < 7. + // the very first line, including the preload phase. Named + // function + $GLOBALS so the same source works on PHP 5.2 + // (no closures) through 8.x. await php.writeFile( '/internal/shared/preload/error-handler.php', - isPhp52 ? buildPhp52ErrorHandler() : buildModernErrorHandler() - ); -} - -function buildPhp52ErrorHandler(): string { - return ` Date: Mon, 20 Apr 2026 09:28:31 +0200 Subject: [PATCH 18/24] Move SERVER_PROTOCOL and date.timezone out of the SQLite preload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neither has anything to do with SQLite; both were sitting at the tail of buildLegacySqlitePreload for historical reasons. * SERVER_PROTOCOL default moves to the legacy auto_prepend_file (next to the other \$_SERVER / register_globals polyfills), so it's set before preloads run and on every entry point — HTTP requests, php.run() fixups, CLI scripts. * date.timezone moves into applyLegacyPhpIniOverrides as an ini entry, guarded so a caller-supplied value still wins. No runtime behaviour change on any tested WP version; smoke test across WP 1.2 / 2.1 / 2.5 / 4.9 / 6.2 still green. --- .../playground/wordpress/src/legacy-wp/legacy-boot.ts | 11 +++++++++-- .../wordpress/src/legacy-wp/legacy-mu-plugins.ts | 6 ++++++ .../wordpress/src/legacy-wp/legacy-sqlite-preload.ts | 6 ------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts b/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts index 6e07e773e4..3eac4e0a80 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-boot.ts @@ -66,10 +66,17 @@ export function applyLegacyPhpIniOverrides( const mergedDisabled = Array.from( new Set([...callerDisabled, ...LEGACY_PHP_DISABLED_NETWORK_FUNCTIONS]) ).join(','); - setPhpIniEntries(php, { + const iniOverrides: Record = { disable_functions: mergedDisabled, allow_url_fopen: '0', - }); + }; + // PHP 5.2 warns on every date_*() call when date.timezone is + // unset; WP hits those during boot. Default to UTC unless the + // caller set it explicitly. + if (!options.phpIniEntries?.['date.timezone']) { + iniOverrides['date.timezone'] = 'UTC'; + } + setPhpIniEntries(php, iniOverrides); } /** diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts index 3cf584c2a0..6cb2a43766 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-mu-plugins.ts @@ -150,6 +150,12 @@ if (isset($_SESSION)) $GLOBALS['HTTP_SESSION_VARS'] = &$_SESSION; if (isset($_SERVER['PHP_SELF'])) $GLOBALS['PHP_SELF'] = $_SERVER['PHP_SELF']; if (isset($_SERVER['REMOTE_ADDR'])) $GLOBALS['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['REQUEST_URI'])) $GLOBALS['REQUEST_URI'] = $_SERVER['REQUEST_URI']; +// Default SERVER_PROTOCOL for scripts invoked outside an HTTP +// request (e.g. php.run() during boot/fixups) — legacy WP reads +// it unconditionally in places like wp_redirect(). +if (!isset($_SERVER['SERVER_PROTOCOL'])) { + $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1'; +} if(file_exists('/internal/shared/consts.json')) { $consts = json_decode(file_get_contents('/internal/shared/consts.json'), true); if ($consts) { diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts index 67defd0212..35bb78e630 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts @@ -214,12 +214,6 @@ if (PHP_MAJOR_VERSION < 7) { error_reporting($level); ini_set('error_reporting', $level); } -if (!isset($_SERVER['SERVER_PROTOCOL'])) { - $_SERVER['SERVER_PROTOCOL'] = 'HTTP/1.1'; -} -if (!ini_get('date.timezone')) { - date_default_timezone_set('UTC'); -} `; } From 950e168c3e9e9e6bbed641402051c27cc9c301c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Mon, 20 Apr 2026 09:29:36 +0200 Subject: [PATCH 19/24] Consolidate mysqli_connect/init/mysql_connect/select_db into MYSQL_SHIMS_PHP The four connection stubs that legacy WordPress (<3.0) needs for wpdb::__construct to not bail() on a falsy return were inlined at the top of buildLegacySqlitePreload, while the rest of the mysql_* family lived in MYSQL_SHIMS_PHP. Split by historical accident, not by design. Move the four connection stubs into MYSQL_SHIMS_PHP at the top (connection stubs first, then query/result stubs). The preload emits the same PHP output as before, but there's now one source of truth in mysql-shims.ts for every mysql_*/mysqli_* shim. --- .../src/legacy-wp/legacy-sqlite-preload.ts | 14 ------------- .../wordpress/src/legacy-wp/mysql-shims.ts | 21 ++++++++++++++++--- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts index 35bb78e630..cddc1e2bb2 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-sqlite-preload.ts @@ -192,20 +192,6 @@ ${SQLITE_PRELOAD_LOADER_CLASS( $GLOBALS['wpdb']->reinitialize_sqlite(); }` )} -// WP < 3.0's wpdb::__construct calls mysql_connect()/mysqli_init() -// inline and bail()s on a falsy return, so make these truthy. -if(!function_exists('mysqli_connect')) { - function mysqli_connect() { return true; } -} -if(!function_exists('mysqli_init')) { - function mysqli_init() { return true; } -} -if(!function_exists('mysql_connect')) { - function mysql_connect() { return true; } -} -if(!function_exists('mysql_select_db')) { - function mysql_select_db() { return true; } -} ${MYSQL_SHIMS_PHP} if (PHP_MAJOR_VERSION < 7) { // E_DEPRECATED (8192) / E_STRICT (2048) are PHP 5.3+ symbols; diff --git a/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts b/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts index 5e449698dc..b652a8f125 100644 --- a/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts +++ b/packages/playground/wordpress/src/legacy-wp/mysql-shims.ts @@ -1,7 +1,9 @@ /** - * mysql_* function stubs that delegate to $wpdb (the SQLite driver) - * so WP 1.x code paths that call mysql_query() / mysql_list_tables() - * / mysql_fetch_row() directly (bypassing $wpdb) still execute. + * mysql_* / mysqli_* function stubs for legacy WordPress (<3.0) whose + * wpdb::__construct calls mysql_connect() / mysqli_init() inline and + * bail()s on a falsy return, and for WP 1.x code paths that call + * mysql_query() / mysql_list_tables() / mysql_fetch_row() directly + * (bypassing $wpdb). * * Result sets returned by mysql_query() / mysql_list_tables() live in * the $_mysql_results global keyed by an integer id; mysql_fetch_* @@ -14,6 +16,19 @@ * {@link buildLegacySqlitePreload} in legacy-sqlite-preload.ts. */ export const MYSQL_SHIMS_PHP = ` +// Connection stubs — wpdb::__construct bails on a falsy return. +if (!function_exists('mysqli_connect')) { + function mysqli_connect() { return true; } +} +if (!function_exists('mysqli_init')) { + function mysqli_init() { return true; } +} +if (!function_exists('mysql_connect')) { + function mysql_connect() { return true; } +} +if (!function_exists('mysql_select_db')) { + function mysql_select_db() { return true; } +} // WordPress < 3.0 wpdb::__construct calls mysql_set_charset directly. if (!function_exists('mysql_set_charset')) { function mysql_set_charset() { return true; } From b89fc04e36cb82724327b0e349cf554061f95063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Tue, 28 Apr 2026 20:19:50 +0200 Subject: [PATCH 20/24] Bump legacy SQLite plugin source from v2.2.22 to v3.0.0-rc.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The newly-tagged v3.0.0-rc.3 release ships AUTO_INCREMENT value management (sqlite-database-integration#367): * SHOW TABLE STATUS LIKE returns a real Auto_increment computed from sqlite_sequence (was NULL). * INSERT … VALUES('0', …) into AUTO_INCREMENT columns is rewritten to NULLIF(CAST(… AS INTEGER), 0), so MySQL's "0 advances the sequence" semantics work on SQLite. * AUTO_INCREMENT = N table option support. These improvements obviate several legacy-WP source patches we maintained against v2.2.22's behaviour. Bring them into the legacy PHP 5.2 boot path by retargeting the offline downgrader at the new upstream zip and renaming the produced artefact accordingly. Mechanical: SRC_ZIP/OUT_ZIP in patch-sqlite-for-php52.mjs, the 'v2.2.22-php52' literal in the worker endpoint and CLI handler, the version union in download.ts, and the resolver entry in get-sqlite-driver-module-details.ts. Follow-up: drop the now-redundant patches in legacy-fixes.ts. --- .../src/blueprints-v1/blueprints-v1-handler.ts | 4 ++-- .../cli/src/blueprints-v1/download.ts | 2 +- ...playground-worker-endpoint-blueprints-v1.ts | 4 ++-- .../get-sqlite-driver-module-details.ts | 8 ++++---- ...lite-database-integration-v2.2.22-php52.zip | Bin 266160 -> 0 bytes .../sqlite-database-integration-v2.2.22.zip | Bin 263816 -> 0 bytes ...-database-integration-v3.0.0-rc.3-php52.zip | Bin 0 -> 210820 bytes ...sqlite-database-integration-v3.0.0-rc.3.zip | Bin 0 -> 207811 bytes scripts/patch-sqlite-for-php52.mjs | 8 ++++---- 9 files changed, 13 insertions(+), 13 deletions(-) delete mode 100644 packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip delete mode 100644 packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22.zip create mode 100644 packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3-php52.zip create mode 100644 packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3.zip diff --git a/packages/playground/cli/src/blueprints-v1/blueprints-v1-handler.ts b/packages/playground/cli/src/blueprints-v1/blueprints-v1-handler.ts index a30ca4e01b..be204ee02c 100644 --- a/packages/playground/cli/src/blueprints-v1/blueprints-v1-handler.ts +++ b/packages/playground/cli/src/blueprints-v1/blueprints-v1-handler.ts @@ -117,11 +117,11 @@ export class BlueprintsV1Handler { sqliteIntegrationPluginZip = undefined; } else { this.cliOutput.updateProgress('Preparing SQLite database'); - // Use pre-patched v2.2.22 for legacy PHP (closures replaced + // Use pre-patched v3.0.0-rc.3 for legacy PHP (closures replaced // with named functions, PHP 5.2 polyfills added offline). const phpVersion = this.args.php || RecommendedPHPVersion; const isLegacyPhp = isLegacyPHPVersion(phpVersion); - const sqliteVersion = isLegacyPhp ? 'v2.2.22-php52' : 'trunk'; + const sqliteVersion = isLegacyPhp ? 'v3.0.0-rc.3-php52' : 'trunk'; sqliteIntegrationPluginZip = await fetchSqliteIntegration(sqliteVersion); } diff --git a/packages/playground/cli/src/blueprints-v1/download.ts b/packages/playground/cli/src/blueprints-v1/download.ts index 094f07345b..ea90f48497 100644 --- a/packages/playground/cli/src/blueprints-v1/download.ts +++ b/packages/playground/cli/src/blueprints-v1/download.ts @@ -7,7 +7,7 @@ import path, { basename } from 'path'; export const CACHE_FOLDER = path.join(os.homedir(), '.wordpress-playground'); export async function fetchSqliteIntegration( - version: 'trunk' | 'v2.1.16' | 'v2.2.22' | 'v2.2.22-php52' = 'trunk' + version: 'trunk' | 'v2.1.16' | 'v3.0.0-rc.3-php52' = 'trunk' ): Promise { // Production builds: the ZIP sits next to the bundled JS. const dir = diff --git a/packages/playground/remote/src/lib/playground-worker-endpoint-blueprints-v1.ts b/packages/playground/remote/src/lib/playground-worker-endpoint-blueprints-v1.ts index 40bda82934..8296619807 100644 --- a/packages/playground/remote/src/lib/playground-worker-endpoint-blueprints-v1.ts +++ b/packages/playground/remote/src/lib/playground-worker-endpoint-blueprints-v1.ts @@ -154,12 +154,12 @@ class PlaygroundWorkerEndpointBlueprintsV1 extends PlaygroundWorkerEndpoint { } // Select the right SQLite version: - // - PHP 5.2: pre-patched v2.2.22 (closures replaced, PHP 5.2 + // - PHP 5.2: pre-patched v3.0.0-rc.3 (closures replaced, PHP 5.2 // polyfills added) // - Everything else: whatever the caller requested const isLegacyPhp = isLegacyPHPVersion(phpVersion); const effectiveSqliteVersion = isLegacyPhp - ? 'v2.2.22-php52' + ? 'v3.0.0-rc.3-php52' : sqliteDriverVersion!; const sqliteDriverModuleDetails = getSqliteDriverModuleDetails( effectiveSqliteVersion diff --git a/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts b/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts index b9b94c2295..35a9671471 100644 --- a/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts +++ b/packages/playground/wordpress-builds/src/sqlite-database-integration/get-sqlite-driver-module-details.ts @@ -3,7 +3,7 @@ import url_trunk from './sqlite-database-integration-trunk.zip?url'; // @ts-ignore import url_v2_1_16 from './sqlite-database-integration-v2.1.16.zip?url'; // @ts-ignore -import url_v2_2_22_php52 from './sqlite-database-integration-v2.2.22-php52.zip?url'; +import url_v3_0_0_rc_3_php52 from './sqlite-database-integration-v3.0.0-rc.3-php52.zip?url'; /** * This file was auto generated by: @@ -33,11 +33,11 @@ export function getSqliteDriverModuleDetails( size: 84250, url: url_v2_1_16, }; - case 'v2.2.22-php52': + case 'v3.0.0-rc.3-php52': /** @ts-ignore */ return { - size: 268892, - url: url_v2_2_22_php52, + size: 210820, + url: url_v3_0_0_rc_3_php52, }; } throw new Error( diff --git a/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip b/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip deleted file mode 100644 index 4947c4836255027bcead929c7a232ac4088489cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266160 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

    Dx{euXeEU6nzzCwr>T4Mi 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

    lKDx;Q| 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 NhaVXdnNGlh#&ZRX?>tx47bzLAq2~|uT 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

    %?)e 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%0A0oOcJGY4IvRz(SNOGtXH$hyeW$X&11B> zJPU8urCxjA_`a0t#)cZ0Euh}o|}BQ_ec-3=iW zi^SQa{i=^;)-c-`Kds_z9-k0oN1thysMLH?;*AP({Knn#{){wQmVSy(W2XgPN;09_ zDt2?j?=V#6ZL+pAITJ-HdJ{CCdHx(@i zX%pdhB*Fcq$xSI`OV)7UGQP-GF(XIJMcMd@G9b9ni$GK=o;;fdY-%n<3|P9EGWL-d z)lEV&UV`iV@@Y$Q{!Zz`xF=nd~R-)5z9d#lz$(H7v>NDu(w2_ljh54nPN-V ze+Q>s{i|F=Q;FWkka(&{a3U*FAKpcid^~5UtvDH~NF>a*OO4hdS!%$&DZimeaUkfp z*Un;#6fxQ)*;z|VXXpOQ?!l#$(*S*No$-&Ln{Gfu!^uJlB@mc)@I&PJ-gB24pxRNf z$eLna1Td_W3^gg;nfMbmj;>l9)3_`{gZEaMUOB%0ti`t=j<41Rxn+5oXbp0AYH(pU zfvu8%XB*w+%`}C7s7?o7Zoj!HIA>3XA>zTnpe}q(227xkyJ`#Cl%D6js!MxUh2d{N zD2S9g$i9K7CG`0hqB$6T#h&N0iLpm2q;k5W@AS(9@Tk$83(+G}SKTsNgxgLql6h3x z=taws?Ud7O#{ci!gwseyBTC&0vfN2fJzZ+zHskjk?1g~=c1fs}Y6+oUGJHXWtejeo zBS=$#P6$>2KH|(DT@~*#aK=)4O6o{dr8OauB>)>=2*p;-#{Ah%=AUo%=Sy{?cA5Mg zy@iaslg6W+uVYONm4`39z5>H?w^4NkXOAVdcpA1ADp2c!<#Cu}BA;cK-nVrtc&s!x zOfj1Zt0(7y2dd5ZjlAaH%$T^FZO|$HY-KqPEsIZka=+oI-;Rlz(ZALQllnWaYD_Dq zeF8))2dcKKrVFCUJVxy(MwRH;+Z;9Bf}26I)~=b|?^Lcs!PsXqKR&aE_OaoMr8 z#*839y&Cj2%S4x3dR=NDI8-sAVGI!@Gal1@4}AUjQ*=5dhW=K%_2=UYL1E$>o)YQL zzuSEa#&lpa4w_(b8+WN`j39P%r`p96$#z7AP=s8COOlkRfr3835YVkPX|llhW&asK zK>V;pVARht+ueI1dXmm4V_&Ai@6(|zBNoUAwy2|f)9+@Q`9bm!VMpw;9WW(et9A@o z@d~%U6x7%{9>lYZj0hN5)q3b_9&Xb11{`T@W~UZQ*7bIV(L4En*LH9ft<&N(RzqKLRLy;Ti98#5g1Ss+q7AG6<# zgm7;qlmELh4p;P8x+eA_sf1-@otU;52h$Exvsjy)okl5B)OJD?`y>*W;|YtWHV0#% zR=*g<2_Hf$4AX|NrEv9#NYC~u!C?J>{Nvgqvtz%srFz(}If>r-o5F)RP>Bq@X_Aa% z1YTna9mAda*M|E(P4`ul)lr-#6aV$iq7Hk^gBlW~14`D?tUEXvl4sWPKe8k>j6f0k z-XEVVl9b=f+2-+Fn$*J45lUB1853M)bk$^`$;VM-H5zvdSbRKs>%vR|6U*T+R?#@0 zf1=HOykTF!tB;4INy(`Fr%^fv2fCcDsrh?>r1&a?t8sd zI73N~VA;N3sU>rXY%Q_p2{NK>k^-|6)JKA-R@I+zfu|6X{pIFMf`6p=d-5ZKH&dt2 z1D%9#`%9}R3}R5SC{o|(T(0m$Ir%q&DiskR-%Gob(pl;w_=C}`{kMfAB1{=VX?I(ZLv zhq7wFot_-1f*-@`67#NlZE!$K2n0{gTy8luF3(CZdfh`sI`_`P7@ch# zZ+FCM&WlTzaJ>b4Q0!Rh^JZXWe*C2KYN;(tbEHdLxW@+Ms{khz#_fy=wANa9{*y7! z=e_-jZ4OD$r0e1rZ_sWkcOC2-r}C4sn`YN>S@a`5=kJ&J$(FTj!3=bP|4(8#cj7S##pIR`>`Z>QBe`tpGHc(?+w}z*-q6)*6z9N8jgP|Pw9jGr;YQMRTOa#7zk(@ z0tiU_f3|Uca-FocHkNM2W|o%!HRZXa^v5QX0f~2@CRIW?xe{jEV9{_%s;jXjY5jd% z8lqO;5)*e$IpKSoaTi{%g^E*5a~80j5yL+4Y4SHMwQ7a2Qm^Ew4oOj+!V$E?hP!o& zO;_u;60~TAJ$Yk2wjl4DhZV_kDc-YQzC;-}Y_-sfT_tQ)w60iRV*I9cFW@6C1q-ZO zRireN`3cpa$X3~7)Lx63yLQdO`BxP2Y}(>ie7_!5;z0db#V@c30|fz)e)Gys5(RxLlIHv|Bl8>)}NiWS5KIVqzR3fSF6)uQ(?5v zNKoRhOL*bZ~0nCZp7TxXEZ$|1D{-(EJnZ{YYUyy9oo?KjU>K0ZC_)d&^h;vu$R1*Ap{ zB?!PDO}a;rcpsbqQolGKIi6bl2qKZ)j=Nf)g&WIr<`j43rzy&sO5ZpjJTCZ3-M@n2 z{-+^HMmrj?AQ#Hmc@*SE=XUi_G_qcDLJUH>W3S;$X{Z1Pr*fU zP&QzaDEvc@WY35ngweLdbNKFHG=qS*!Ay-O)))$J=7*Tb&|__g;A4@VN!2n&WT-)M z-CcbXu|npwcJN$0v{31GAKj!#7tvS4R~==oTFEn-2q#tHgN-*Vqv2Ywbe6@7fvc`( z@pifQoDue7j<dE3#1Ld$9?O8 z#UYeXlV_hWPc_NmUF_`idT)HN05Uv-vGC(7N~x@Vo@Tu+pkE0f<;-H3*%3rZd8WP8 z9~!a=6RQ;98h*rOG*t3sy(hR1y8V;;%ZvJj{`{$rNm666VA($~HfRcqgNvoy6=c&6 zvg^kwL9a#J+$cGwuK|03RNztM@5fP`iy(4@JKo3FVpgV*PxrrI{TZLr{pm!N2`}Y( zb);xM)Y!9u`j1f2U)9MXnXvC@6Gw`HeddheAAjj!W9z%8wm->2lkwfUS@vGwN;>Kvia2{Jeap5;` z3u$B*Tde`SLR1NKNui)2U{n~1;aFSnl2cNnv}>YRwu{XigjsZ?}`a2Q5hl zE)bcWL?z^MZ7m)fW~szt+eMOL<`}ucb?N$b!tvmbN({T4%TiyOA#FEeNl*^rpa!2} z@4E2Kc$GDl2eMuvN45mf5LMT#_Fw| zS=41pJIzd;^zzZ~H8clDO(IC3m>^3EE9Bx72k^vQbHSUfG(<`a{uI>4pXSVVJbyHm zIBijfO#jiN>q8(#i9uajGYKbywl8dD*{DJw%L0t|Fl*Np{}3EO*1NO`je4y~`{5(5 zBo5ot@Q&1>!@EQ1khQF&FeHYN!K7KyKkiIvV$5e5YBaQ7P!@2x6K`vDo$2>rZ;fFt zEfDe(X)xusE=37ay&Cw|MQe1s&`9#%yF_YroBo8^uT7+g2o{zea^z{*q!Ob82r^i7gaQrk*Ouv=j}san*I?_vq1-6#{M)vP~Wl$J$9k~MG39g~*M=Ro=! zmG0nD#V&XvSspyr)dr1+@F0CGv7*91(h(k?H*erIxoZL6AB*7rO`%en6nsAIW2lIv zk~zS=uW5Z9(<6dBF8?W^2-TIf*E|3G%6G)&GK-Wz=HD=EEKeGTwoNhI??k_+{ah;6*1iLapA65~TMujIrzmH}f<|h$Ruz8-EN*3B1%OkBJqxB|X ztieP2YL(r7$Tzjo%j#rhWlN-?m$;ssUE8ec^-taVS!iTUAJ?uG$ga&mkr$Obvt{%z zYkjd*2*rlsV*Q7OBgr%yk)~Ferb(GPPgzLKtt~mm{4WDC%QWC%=YAS#5t+6;a(%+H zHR;U|y9lI?^WcbExQ+E;L_gZk*|=*I3;NcDTZQ_|h(0&;&@QNvxT2#eTQ=y|PS0Si z`8_3h#Y7kMX$Nr<4fWgNQP5k;UtL_@z0GEAar;#IfAz{;&IcEfLGIA8$+o~W__iTy zG+U1*S%mUM3~{kyt|T7vG3I77?U31t^IzadUrqqKyFs>EuZTsHqM0FML1=HpF!e7y z`KaK3Jo6%nkPfM*$$_Kqhfw@KBs5$lFFkT8lX{z4X;nz<>T?lYiLZ#dwQKR|MW$uo z-W`&o;u1mLCvo-0=%rxflHihEc_IJgK?H{QLH^yG%(hKZX~F6cx0P^{=rLzI*W!ks zQc=3W#9U_u+!>vV%=H$qq!vGXcFdQmj^m}UT!GTQHjD-&Mq%60#ze#rO&fpgE~Gh@ zJeYuKqm^2kz$epca!Fz;3$O0Lf5CvDN|z7D!`Vw7Nw0UTu;2=EhyT(e(|Eg z$cJB9 z`Iu7{!R0{Wc!{m5yr8uF9F$K~73%ue1IrMLyvIRa@*Qw670d=jhL-Ux+;A3#i!j-< z(r%C$Nl$I+6ce_z>n+M<77$KBr)9$G_Q#2@29|%^Y$0*cv~bh8f`#*oqkOXK{Q4x8 zqs&!>^ov!_6jLVfoU7n+{e&L*AxdXojDJ0)msR9qMZ3Tn`kmKhU*zs*VmRhi-t7Aq z5|LP5lS!E8%vL-ueVHgEzj}O>h$GA0M}rkL0Zx22I~Hlvi1##UgPOEa>b^pJoiBhy zzYm|`WJ+x;c<0Y$N7&oew*yc9y=iKDx-u)~0! zq`@{hZnh@PVT7rJst5%^DS%XR7M>v5*Gyfc%Ves}U~4By472`k_*(*nPvAj8539c8 z00J^7#nc=m@-B=Nd+KMpX!RCp?qup|{GEML%Ei}ans-#%4$YI;;qDxw%qR!9Y)lRF z43)Z|IVPCWiCvA;dx{e6+>QhV@+8SOkP{UQ*<0+Q5g&LCw%kY`*p`BdyR=GD>B)lzXUtKz(Ci$XCB8|r5Y zG<4G_6#iME2T4`@7IFg2M!E8Hkvl^BVW6)&ZW5so$k)@(spYck_Sok`mA!F0fJ^9} zv8ATw9Z{xg3WGrEJ5y;mJWdTXKD0$sWWtlBt1ti^BHlhaxUN|~-@IN&!uQ{h3}W(S znaL1T#!8udcYM@d@KT?Jkd`ENBQsNY48$&qtbe=i18I9A$Y6uV)5aayH((lxSHy=8 z_sqYp!)+SNM_$Xv51ws7SmBhSQYp%^khD&*RBVc5^skt$t|S+($I`Tj<|!W>GUJ{N zGg>NDgHB#Yd@!9w{{%)YC~ReyIKDjcOzwY)ERB}wGvU@VzpBiBb9~sn@c*ZV--<;H zBmB|uU4%eD(*LuDH?wwd)U&kwfA0gDQuA@ZZ9)Fbctf)lgQra4nwQKlBb5%LnX6OR zP?Q+A&M;=!#h1wE+s?WPL2tfwx!C}>?JOweNRyejM~Q)=!H5{z@aouIpl>j0W_SH? zmE*yvNt6tfl(R`b0Kw5?-W>AZ6J4;Zn z&zlFnN>Q{(`k=)}0Pjt5Em|>VQMdtHDO-mX8sbrV<(s8)rs0lHX~62bFr7;VxLXpOd7o$N7A}mvh!bG*_S3Xb_zn zKfwh)p76O=kpn2=#td|3@{n2Kk1Mfx6+uhdm_NB zMoLdVcoz1u06-kbdx_tCm>FZIx9cwWP3K*3#1dbGbrX%k|=w9dqU<=)AxBU2&&b<*^*!aOOxO zesEiH5fR71*%WZyf%kd!6S*F08w8I2W}e!*@I=a^8Ynt#x~;Fd*Thrh-jf$2W8sLoJ zI$upqkw-C9y%m99YxJ9dH|t2>7KVpa1&lm@)PC>*PnIAq74Wy11Eq%=iv3G|$NLGt zpcwQ)6r%Rd{4L5#ZLEL}*8A7w%wCPe%%A+g9-rpcnUcj81uEJ^xxVlgnH|ICTqk^edz5^Phu2dN9KtIoUH~k=`|h zt34AM;g}j>%US-*TaplCC2aR+Uw}f?7T*llD5QkBiy`a~*$Cd~dD;(Qh@;{+&h5F9 zdWa<(ki@?(_xNOulnZ5*YIam_Ey!AmKZ<6_g|Pl~zO~`f{gw+{+HKO0nsFAgvcGOr z+>bJ4*F>kF&YB(-_w_}jAal0;77#{mziDq7w5nv*8dC0jaC{prLS-(To96BgI}WZI z4$bgp1j?SWGwd!3VmEg|7~uz~W(3`mPg6zGSZSk#`bm&o>!AF5ho9Iz|GI?#UJ2s< z{n0f}I{Ir$+9$^gsAPV>x9_uM5-MQC1K;*0C|fz=w_SFLs2!9n%uYD>U%H_RR()z+ zWVtUWs6wPr`qK}!BooR9d(zx^iNiN7Bik6wcC^lV&2kjM8qr|8O-jw7!mlPu9VO;U zUx)x|wT6dED$)34nz$i!=RUHARWxZj4jci=d+-dl)|6Gv^L8xWj!*UMm>Tkgd(49S zp7zbB-b(Q+CR&OQy6iE`l?2KiNG*(DzHiSLaIcfCUWxd9Oj2BlxPN_f;#+@Q?^7q0 zv@vME`13Umv@8qPdU&_kRJ^!9reOeI9bhz-oH7N(Wuonq$KoWeLM&D;0(K5G5=r<5 zKe>zq+L-;tevSJ2b2gjC7ZVtTNFIC~OA(2%L zPA*L8DC>n=8lLt}v@_NvD|e4;6B}`X)ZdIaIzIN61Gj?kMQUcRH!OLPPh&SB0|k4v z+V>jssCMB7)6I15W+#sE94ufb%zdIA+G2JKvncxKU0G|>|sGK zooRcI;O6B^d+vJtZ$(d)1pN~|?GNSBTZ7A0JFvCaA-uKMGnTWu8yI5!Kh<>XkA)T{ zW0MEGllMb>DBaXUZZZmrCxNtD5t<8NPNyOsDbAg>e>ld~irKPp{)OQ?Z{jSa!=A6h zYK2o7+)d3_hPQRt>7Jkui=JT_`wN^i6P>q`k`OP`r$-mmJz-D zD~PrO$yMY1r&Qr^jLus)O`)}P56S%;s$5^nfwB?Y^>E;vLVF~e6hMLcyAQ$OfvDF( zRD2qEAV1UrXy|r>qHyNl5!XV7@JXGiSFyZ3x3{E?I4v6cGO_Gggi~tRx`l!&OLF)F z-P~(4NRQjqWwF0IAUnOAfydB3;RHKewXI1Kxu-1k_% z)|4}*Lf>ozA|}Xc4_I%tEUtM3#~R*>7D+++4i)#w@xE-No~+E1Ax4Y(z?qTUTg&NqIhV#i1$WkrA_1j zRb*qWovr1y)&BtD_8tKfk~?UaV|11=xB}@Z3!$5wxCCpFle?PFr^H#W+wvfq zsMtML_b!~G=Mn%+z zd2i>zVJh4>T~WSHNr|acSxUz?m>9{YY!*Rrt5;ccoc_7_526CYY#)bdbHjt=)V!1A z!Y_x7fyRcJ;xp424YgoPX60LhWwEHwGUENLEv12zZ4So=z91_rMRtJ=$~c`%RH{WM z-c3|FzKf0%mX(y1q8je5#MZHrT+r6LhcfM~e6rbP8|{e&;NTpDOt{Uo3(oSv$KQ5p zihFrrRSljq^|;geycFR-V-nK%Vv<08+cIKs_byQtKe!!Lq8`Z1MfuME#NdtRV zpGruUJO(IRuo3#_OyM{)aV(9RVDg#qK4Hs zqXtYhY$Wi1Y=aF!z_F25D4)Z(sg^#F-=a=^Cox`nHmBvqpQtp7sD-xr|B9fmWK|I= z`+&$JvT3iDH>Mhd8lIBtc^4|*$IB}{i)L1^(F*j|JNsFH@*{r9SnV3GvQZ+?UAGr+ zkakwNaVt=5!75Z>UfWn>3r(pE@%5pKws6D0EtNjCCDmEqG#h;w)rPv*J$FmsXVMDl zoNnlpeK7lZ6n*>3e)s&RMu&#Wy6NNt0)kcn{{MK-ZfWFdWdGmp*{{6LoN>kLk8RE< z=j*Kl5?f8{IwgwNMRO%oU^D7sl{N@+q0l57YiB70P;QcLVqRHe7-yJbnB)T}|cwbX##&jfXZt2oW9wpm}3(PW$p?PXGCn<`(=B+m&4%Q62bH4bty24T@d6=^_ zX%3FA2s(jwZWsRWxMS*&9u7>=<&sqxx-jYd&}Lm()g~#4|Df1+sc#k1KR?%yRa`s{ zZJRP~K#G~P*hTa3)cWWEc4U)NB93TC7Y+{$(c~m~VoF*lS&VN9IKm{KPq-xi-BP8I z-lKnTk)6TU#>S6@%N!dvXIGQ4&wij=9TAYqW=Kx2gSuk1;xkBojC{U71FD`&S5cTE z_+^bRushwno7%<7h7Pst-}UP7Zir03zq;o15fnX8yLl~~%mc)1`AS2k4z{5=f6e4{ z-sQ4K(Z^F3iRon>-WidV*xh;CIK$fK<>Szcy-yt4W6V73Tza+S_zsFxxKJiJ-ng@7 zm`5%J4AfRPJU(b3HXj?>B?#QmCc6u3T-BmJsN-iHvQrHKCH^j=Vv|-`iLiq)M-%R$ zL9LffV04ClI{XMP$8_Glxd2m^4BahxzD413gpSqmUfAA7;Mzjk#($DkZ=&nu(55@s zsCs|CzPd>;4TABG1F~-V#eRWaG=oMp)FMx z7lCWSidvp9Vj?638;pysvWxF~It{oyJJP3yja9pH?JE*uoUwDt)C%788{QYoDDdO`I!G#Qbif0ZMc)bMX`}yeC z%hB!bSRG}}G`MKfVEnxb%HNRMUb%P>j^>9s-;%c&XZLWUqB6=OG9HJLd%ja;(iZrh z!ld@kk@T!nty#VQfY$}ub095APQrgBrRb-U?8_%VZ>fA=v}rwEtO*1x-N@^no3Pb4 z*;t!kas}U)dyCR$zJc2?dN;v8jTrihB&5a5>Mlmx!Y#-t#jV^Ub5Q^n#>l0?;vHzuc-mE$?7!!O5LuNwGdW(8)+HxAAs5v};>OEXE^Sd1eW z_|)`rrIUzZMAeyNhtnU|bgAk10+S-{NxO;{#gmhFEg&%pOI`plC}>Y7X0Moc5#E-; zVV%gBaXt!f-@zvLM47?`$r4FDgF7gt&Ij~)@livWiVdOYffa@0drdn;aX7Du`YG!X zz#uahKoy~Yau4ETh~NB?42O=0r)ux{Ys1v5^Nn4(u2PgG@g3w~jD z*~8C$q~ud{p1{gtyL(2fhvUZtfV2K+0r6r)b{eoLmT(kd%kXttG$Zj=dGmsUi3!6- zl$iX$y%WQ1hbq)!XUqi8i3t20-oZy{E3YnHazii&&ZwHZENO8-j7)nee8tLfbn-*J zLd-N6#T=h@Z)<#Pl{ojIZie#}Ya|QGOs?9+5SJ0ns9%ea9Gk55uSow@|2d&L-#s-_ z!he@8k(l%-i*N+2*NnT!9A}3Hk#!r=k#y~Pyp>M?NQMeSbRC(5e}@*yXqzMjW2B7+ z7XyY|1Va7;AI0w^lPjb2F7$G* z^jcryyPA;us;O>??n7L>eXV)9pP^`~L7*Bh>G=@-d?*P1P!Rrd1+?dTx>tQU=kh+Q ze-|peK2W|N?j#SCx?ng7kJFcY!XNC9gx{S#T0Aa%&&K97%6(JvTg|3zSvzi822K&g zyN+c%ev*;wvU@s9JD#>AW>|e5WPjO-f4@k5wpuaKGI^pUgZ;UFcWn=j%Px+X1B3g* zy3#`lKt8msm$6Qkl==jEJMLtpvdIc9p41RkI-34r9M@LStfbbVH>uf^|5ROZf*m9;sK06 zOtsM223Iw|Z?D#>-4Bahm9saiaX*X%n{2PDFh2}CtA9Dp{Py9*YgTuHRMp>k(uAAv zwpjY8`xLgJK`^wjT=Y7K0N*-$(~t45ws4fPRC>1FQ0Ted!Xy`b9>m36-q>DE_Srbc z9nB+f?mE(lVawg%dMe&n6(DCMd>Rfu+5TYL3ec`YbV|ufTyGuCtEZkG*G!D=;T}wRXYmb)1GL z2(OQD!ww5-2+>JXOt~*RBpOOc|H3Qfcl@f#4tk!M_o&`4v>kgKF1(U``d@XABi*-0 zdC1N`&+5N-0X9)1yhl?)$S7)SvRM_}cfCS^ z-@EOhOs%cKr7b^cTrEsg-|}+bifv+kk+7Kym7a%GiCv+Jn^1UD*mJ^>l3TFgAqU1I zf`>#;iuU>EJP+m5KP1|$RzXBdNIhqCJI-vx8T6K^{sXH#4Ek)RM-*33bur8|M>vCN zXS%fOayqrOMcIJvH2N8fJ3?~m@Y3hr&`V4?GWv{yLpa)iT*P^e2vVd=xa^l7LTS3N=_v{+HN5jdE5nVXx zyh~3^Wb^2jZ6gCwuZnG~$T|~cKU^JHPpJ9H*LwYXlp1m_?{;ML1{7_;x_jAJlAF7~ z^%Jxc$+ZhM!Nk|XsOo13epc}+D&O}X*J%;4ST1BoQGB&-+pttcEqJyJ%vG$i4f15K z8qX+nE1oxIMbjfT0VwPZ;mxy_(Jf0?&1Y{fBGxsqgyWi~b0YLU-iUb+E4(}?HOJg8 zoW#qd-wu#Sj9s>+K3mi(JjU70mwk=+3G&Gz4Lz{c`?8z2UGISUYAVp^yez@u!b&_d zs{ATwiWemq5djIHFRR*zYd^#XCw$V2O#Y`sVEhtZd1VJPn^))l0dJ*eT;Z(Rb$brk zC6{OQ><{OD?Vbb55ZQ_y2NJCCoEvBSvF!7PUZVFgV2xvn4C=Ory&WOB_l+x;jc7M% zQvPVo1#_6EKMhXD^9p?CwX)<^}ErmjSAMBz=z%AB=QEh{g)$Si;`d0mITJ*)PZY1!RtUYm3Nj;K=d zRkwqI!Q6|VpdIPjF+ZF3Lb;azd7zkeK>j@YQ+vv~kfa&Av4fm8gHho;K>;!SWC=4i z9FH($IXqGS@8|m!%_$4f*lj*89-&LWfyH3KB6*C4qh2m#^3uCIn?e5I(hnbKnJHBN zecefu{CdE~bsHhwIi_+rL4m#A7zAYl=RuY$uSzp-u|WN?*P0^9wH|{&xL1#onu1aP z5uOgX!LgnxI$*t*FRx}DQogA-*-TOkQFg$Y`flJ$laS+B_^1`CZWq(_3{>Ca2~HMY zn1%V_j6Kvvb4?-`921FC3S8Y=6R`>=Pp=Q&kru9^t&v((rEY5Wx=Wen7*pHPf@rkD z2tU(abJ5q(@duR~wWJNXW$k7%%BaL$x%|GYUX^XKwovbxeMAbGYyxkd++MKXQSg`H zVg%zzVc59B0guHBIY#{%4)ncO-t&2Fw{*!&b=k}OU{&wK{*k#>iGWA`vRBmIoV1k9R@)b`(U@otiso za)A5*-&(~BhKXb0Va9Ht`UqPvX)}Ri2Po9sxQW&x4&^i!g1>i-C3KYkm3}E>?O=`+ z9=hJucyX^AZ-rX2pacyCXkjdN_}#V8`>OcRUs7@VK|$ zdq82)I!Sfc9}lO>c&(RVyiXK!Sj_^7wIZw5kxEowE~ZYUPmaIVz)n-KK%H;@j;R5< zpJFGP^O{M|51(7*NwkcW@=0`&CgYAmw}VKe()eg>2xs{`Q{CZm7lDY&=`0reiLoLt z$vGI~U%-s-VcB9M^%JI1Fs~QHSqpxIq7y}+B;hz$0TRD&NS~HCpK3XG9_O~al@mK2 zUO*a_K)W>yFE~FTf_asnn@(ggqGK0ew-qyuycD+m-hoi8f%8~lq;p~l<4~aF8*(^` zQC-X0c9oy2A951E zQn-UD4I9Vg3HYklkSc05p43`OXZJ&1bwJC7fnA~XSGZ;8i3}zr(wK-tUN|}euaGH05WtK5F zk~Fb|5CZVHh#s*-1rsMKS6zZUQH2J#^{^gd&m>|N;T&i3-KR>?)Hf21(+m~FRt8xH z6hki8kA?eYDEEXZ`o0$4?26Y?b%uGG`WcD3y&Ul)j54P2c7U`09vaLu;sH=Lz%Lz zeZ882pI#wWZPB=YWW?#su2d~6`C-Bp`nT{P*adZzllHE!c1?#A`IrQwmmc3pYY;bnl$2A4G`%}A$1PCD1I z);rMB%cPr>zrWL!$*g7Ah_RfXQ#Ju{osp3wXfk?rrS8x*2e+F3nMeRR23mh#?cjWv zHoqlpWysH;`8pz+r|x8__G+_pz={wI{6|`htp6^9^FYaTx6E{_M!V&y`*Xs`njU3; z$&}(;a@BCFvKn##*lbIa*7af&ho-?m@v3Xh>qDG~27ee7GHGQuvZtZTbFt<_eVW8p zkfNcrf7LrXrnpGgUP^wL7V>Z{JdRa<7P_BIUfjwMs8<)=>QW$XK8A>>jRX#YRP&LK#& zpv%@}+qP}nwr%5Mfo?0Yx8z{QgV=GW$6XCH)T))HB~Ftu#$@1dSfjgu@&#MiN#45WY-c-L?+1S#3r3&u*SXJ@6l&oK zoyZmA=_RDI@O!Ixbgox}qlz&kr*?%@nm5X-#q&&yW#&4=I3*_Z+MkaDy$jl=3TyS9 zEvod4M6CZ8x2AHCNH$ySVN~Ga-d+vPR(_x*aCzY!;lf;S0heduV!ZI8iB^bGpBh4e zl{!)(xYNj`KV>|%=6}>69)HC;g;rysQ4jAu7mf{`31?If7Y!2?HDNaovs2JFPxV@KtlnBM1;ujE=>`Zw9b!}^ zm*7pFrITVlX$2($7oup#G=H8o z#_&B~_~*8pZ#!k+3%6q&vs{UY+mCeOci2Q5Vh#-+%h(cM3L%;gAcMY4B8}t(#Xe**J>~K8|~48iv+{iSz1rx);(l;7e0A)Z~j@ ziIY?N2`wqw=O;9(c4DEu52g@P9|rCZ;*81RhhFD{-=$#6zt9LxwavJ4v{b^^%8onYJO+=4 zf#Zx3ux}}(b^<#f_IILHm7W9BQ4t(3BwVqp=`=`k44FZSc^tBMnQ4Dl8T!>CkImXr zf+G&ZFA9&Vc!i#9nk_L^!>CAOrx`BrAbzl!RP=FVh}ip4vRZL!8`0WJ;H}5vsN~8; zkVLLO2$kH>pV8=4NKv#FqvdXa7JNXMU2?4@nrW6?`4N!$cLtIs|k8df~KU zg_5p|*#I}QH{#n>7&Asv@GtcT*YxqSy+98=JmiN7@t|UZvjgC-YS&&Gl3?JZ&7tCZ z<0Hz!a;FH@2WT5^heMak%Ce%Y|_SlW{3=kcniyP6iyHFsEJYX!cU)Z?c|4Z+h48w#RhSzJyKVWTw%#5l5mFO?6M zxKyu>LjTM1zx3tSajz4>_74(16~hMgzR+r__J_}b?m_+2VzbtcdDYTKOfB{iG?cj5 zig~3mR~#U(BPMofH>L`N)sAQ*(4pwn0Jwfx*a6cm=*Het+jY2~YK)r-*NTr<9ki8I z4=8y6wl7<}aBbV)^i@BF(|+2$B89tiBUtWFxcm&>HB#WeBST%W+xEJ9eFbUlW!}HsooE`D>lWE>(xB(@&cs& zuvz~C1E+nu9PFjNLq1v%BC&g*6}TXB{~HXpIa@&)1boNpD4a;;ZUb99vO0+OMOs36 zf1bpppNkHBzCY)}$$s*Q3Elor&#?pc_M;7}$Q-tg+wFo%f58%y725eZvfo|CoEZLNIZLI# z?y2i#(UvBvDsu2{zws70_!6)H&w#s9Sy6K-2}HpolQHRuy&ceZ2mW$SS{6i?AwRAX zxVZSNPcBq@7vQ=hLFzBDDMAJO_hx!-aI|iG8Os2w*mSxJTu9e^5BkrFb*!X~s$JQ( zy{$c*;d|cn9d!@)S#G?%H+@)FEm@5lYC@PzQ4I(LiS}-eLzvqtqst{Ofu{JOu_H}p4{`J2EI@RishAa(cY( zZ}?G+a3uWXvIN0}w&W#oO>S06(*D;DBsvuf-WrwJtkLXZf-Vkc!?~*k9%R>E7mK*z zP`2{N-F}6kaYb4$xri)%A^&s?43yoA_Cv^PWtHSWlZKbd->9n5%Apo3m)b2>PD0b*1D?OV*hs`a6Pr*Vt*}C7}(1# zidslL*^<_0G`Ck@ORlbSH)=hfUX*ZpZJDHg@pA>629q27R$I^W<3+@&w z@K*E>Cj-xg7;p@m9O?~~Y4r3Cz@4`%Kr`}BttBiMXYia{-n?;j`Wnk>Gj^S0dRQ2_ z)mC^3@GdAm&U*VYfb~A*e(#3OI{5Tmd}DbJ)Ia={u$|NE1?dFeJdFJIkaa;c9XyD~Te+quB+K#iX7qZm<{T`hJB*D)0 za4G0(pAV1yn;@}nx9eBFkl5u53Cw773#zy^J7so%9Z*}Z5DQb>@f{DBK=9<~<^KI1 z;6t6Pnq-w~dyPp@QG3(A71}DKLsq8MV`QtpZhw{`g|%U|fQ8l9KKqwt*URvs;l^88 z`M_`3Z7GEo06ik)k~If2ZS&dyx_q*LT(f*jzICocVokIF*Q{4BOIa9N9D8jbQhP+g zrqmd}J-4V~k5C!783yDNI|ESQyyzAhhR8_F>o=>U` zEaM>15n~$Y=^t!I?u*USaTBOHAOog=_h>Yk=wzT&G()>kdv058F4r2EbPv#>Cs*-r z>BehuM$Ce1vUBy1GtBC0N>CRf|D$#THxGEL2Pit51gQ}}iM5!qn4SV+FfMcdMT%7+ zwHaLr(ob?6+e-60*9&w0XE;Whv=xcfJX++Zk7Fd?EH6)KI`=tyWSgihAn`>ebf9af zwGu)w?{yb+K(5%Q;tVA!lSC!4y0s;lukNhUv0R42o2F5-P$$A4-)x1hbRBbr$eF;* zzhq5vi2c!Aq0|4kXyI}nVHFy*)@XQ@-?rT;@p^hB0TJNgIusPfa$M};~2c=4* zBv6q$3!6-l*Z~b)+J6EiO*AUF@th@QiSahSj-cN5awk!IXjEukO$^&)MIzN^_gr(6h%ICbIl z*v7Ibs&O#!`$db%#4}?UbZ$Bjjwm&9yt=0={RCyW4BE(UW#T;abdF@x#N-~R} zgWVD_%8jYV^|awP-fz4dk1^0%dO6OZziB8SO~=nU1$V{GtyDf~!_b&V+P+n-c{BvA zA7e7Db*ZsZXe&Zpc;?3K7TF$@LbM^&1L3YL_XM6=@>2%B9tk9xBXx%>g;a)?zjmm^ z)h!Gvxuq19u8)TL9AF!DGT^31 z(s33j{quzFo1cF9#1U(TH`M_u4!Y!izucnjAK0c3NdFOsx6>z%mtep}dgzXtv~n#g zgvMSqVU&CGSN`cVZ+A=@i9YTAI_}(xGeiG6e!}}X!Ux!|A?~Vdt?oYIw*YUqioP@v zUR>o4`okmg08GNae>4F|++k{Q9MBHO=f*(koyY5Ri%E2&>fZ+S-IBwb4}yvZeH@KqlN6u?onby1EU z;V+{$ela3AWj!TW+-p+l4Os%woWL++r37#(lBTSF1y zJim(Y$^njK}H%1 zdemmpjW$AA%@w4-EzH#0#C-Cq`K=AR4vLLO6LDdgHA1(QnRaUPNYj5*xL+9DkUuAP zUy(~Nj(o^g_fc5d^)0BVYgx>BTYHwe-}SvryK%aVcfNCEkWaa%L{C^S>dqOcP(<2t zxMG$2&K+4x4IM-KQ7rXgD^zf*#xB5CiX6AbQ$89acPm9aCt0O+MB+=Ioxi_1Z#&Yg6!|IdI%xj4zx5RBAZn>NE!FQbW zy4A*Axl>7J)-;k0kTfMZScCKdN)bjc>Bb10B@T4zy zVvLjoe@}~*;sBI~%%m-^o|HvdpWu%P7|NUpkUMf)o?#lCFRx_4BwIRRQPK^QtFm>= zMW+Iz3Q5a*qZEP$?uz&RTSXQUKes=?9D}79Y*j9Q6iR`)XopcU-E>eX5576Yd6~2R zV?&uiI~s9NS(fz1{r^lVV-p`e8@BHs&hSsxe%%}J!rNWN3f%ZN ztb=je2mJg-c=fd;=YOmZZUO~$>3-OQc}pgIBuUA=P{T>JiSE%#xU+O%2d7cNS{ziC zHj_w4Inl}{iJO>-!$sDP4qcPgXC}T)rJ-WISee`aR_ayO27!uZ-pG|yMCl^bft;F^`9VSC}QK2VX|av?r_D2(78)+GKs`%VGh2%s*fY)`9bzJEL-@w5Qj? z;K0H*m~jF`j&JLS46-OZqyObeAQ>6f~){+n{E$|@yzrg5dyO*N;FCdtK?FhN!* zOFSk65VA_3-Qf3}#S;0A)HWNkjomsl1M{&+?tq;X*Oo<&1pR#vZsVf99t|LOA~l-_chAHl0kzE(Ac~N($J% z{TV^`?*Js@)D+nw4H1>m5N`Z$oBTikK5BUvrIa4{1+;p25|TM*M^7Bxx|V9 z)#@9S<;=xD#>2k_krafFGJ69Zzfm3OT7tgs()x}teczDOdH+U64yox{Uf)<((?o;~ zyQM9?QjvlYi9heBBV*1t;Se|=!ZYXIq;#jR0&PT*Hcf8b`n;1+Bqu1ivnS=tD)>EE zjTtKVEJan?W5is4Z2Ulr0?>N{xdPfA{o&Z&0`}UpWR(Ej{%L$rKHj4O=^fJ7=(Fxt zMBP*_j``_k0%-6Kr<+=J9dfD;DLq{#J3#UO`}f~HN}}REoR;7V6W;k6Osts$(`g=` z_6I>!|HiD+Gc*5+RoD}kiS*o1Q%a8%qJXy1?c~acbDS&rtuT@y9+#k7dSFlyzoH*l zFCdY{*~34EV19wX&N2z?IoOyx+0j(Q# z9Kjl}sK3lvg=TPZ_(3U1bq4T|9R@l{BLdA-{Wc~ZRZuyS^~_d=yjCJl`>fAyt6U41 z+X~Xe|I&F#>)@l|q_iHgbzwtPzy82pm9XDaY)G{cN(hVn++zm_{s4 zmfDWS5Dg7ll$McFG-LG1gE`n3IkMu_+<`-T1dQ%JHgE`X`jy+Z>Z%PAI^o;LB%n>x z<%IB!#hAQORX4^YWpFuXbngFw$KfH|TWJ>f3xJy+%#)C$H~DwLz|8U`)U#ox7t16(IwtaT={zk9x(0L$tRNj_4z7BBA~AAPl?v z>8&emkhL^^AMvzw0#CeKaF$&WeC}lcx_yKKw8yS`j`9SsE>kd5v+TFu7fn|#yEIj@ zm?>6J?*ZAtJY?pu?r8Ux)bEhSGx)%ZrxjT$g&LzjdiI|Rlmr5~2lz&O%X}%S)`}T$9{65wBL%&g zg;+rDZp*vrTi-J_HFQTUJ+7R*jncI9hFbM)Fil-qKw+bYS0*(@0>MwKR2?<6UV@9S zPqVuO1dZnQA_09#hfju)v1EzsPF!cmbfB#y+qQ8@&v4bLxdH7oHQ|K;A~mwW>8ttI zfvG)wPx7a3b;iNpNq*+^Grh=D0`gdh?R#If5i8#n7A?(Y0NmoqH14r|AWA z5N*%KjDd4|Qy>J&WA#8Rc_BWZKnrsw{JS@eZ{(C?IK-sp@_P)F`3B&FEkxdyoD~)w z&hwnzt|0myy6$-*@Dg;>3k$h7Q0rIi6J}VbNL|tAe@;A6G!oGA$4~Sd1jzF7m@U)Z zR^ZgW%k_vXHk6*I4fFoK12fY<^mPfRe5XQC{8ir|S>hAI$eLLeN%awpBe{BJ%JRx1 z6y_e%d^hp?yci8t#n|!=y9B;|ruCoZ?T;Z#C4OmKgzst)a}(llpY3T(li)`i$RQ@| zR}O)9>Ipd7(S;A1qAgt`8~FJfAPYG4exE!#$A@yqH^KiX{xa6?QE|=2c{xNnDIuRQ zPoSm!I&M=wKzlcQ>&e3pP9EGlCbnbB4js$W8-QBFO% z-7oFxnCvbm!D{L$hj;9Btd9ngO%Hl2qoawu4cWTC&zm z#h)KkI(Ph17mcb!Fq}h?x6~sXLLhWih0y22D_GRnyEW;~j##ID5~5#TO?rhYe%rS4 z<)ShV3$@vp%|5MLFv`6)<~X!g3ipQaHg@XK@fDMNhF@wWG}|OtbkA)9=#2^$T-Cqe z)gPcza~$B%9|L_K4W;*{M{;?wYd!m4#R-|zN7>BbPJMolv9!2M*n350w_ zN8jNC5U+LespKLY6hq@CDBlA&X4+B|MK|fUZt!y?-#j{~G~N)Q=@p-`J7#`Eh8aYt zXj*0~BYg{{A4naiu<83rh1nUNC!c!r@)XQE3CD&+_D=)Skt#(-2s`&6;KN~33s>uu zI9rBXp>TCT48iy=Ud{x*Z@3JqvCXT3t;?AfW`M;>6-!4fU}1kjpq#&hxkwK1?@yK0 z-Rk8#O!C^`jI*>uJ?5A-yeqktTWb8Gdv75E?yXcNrAvlD1o*jIqPXATw(+! zYy{R)M;HRkA(!|VJ&4XowbO5R1LbDbDXq^~&2@Fb|J+C3@yU_@FQ`y9hGn6FeNsJR6IZ_hwl1W}T za=NjFg%6D>4Vy`3QekGLDvwQDSXy3DB1f8dc zv)`U>GwQz$ZAxg5*b+}ROy|oTMwz^WPE(dV))~pvywu_0gg(<-f1T}Db)zgDnTkQ^ zKfym>l@T9Hh5nJNaxBDWXMi{I-m&#pWHfmcl8F}Oys#WOUDp>rY>IemDx4{MFd)7^ zR*)&OH_I4l=5D!c2HaRogQd;8;Qw;~wPbx!)@1%Ky7A#^VvZHaX{dWX2Uf6`>sx;Z zZ9PUX71MXa;>-!hdlirj{>QvamlO5xU$;L0kHx}`IaOVkmgw5UAioIw|!u=@S+5FPmM|hJ>j!b+bga7gtQ=&AWdL;<{W&xOD83?hFv(*ms3{!h@ zYcZSl9qR;DgRPT$h3u*y2ePc*cMA{G@HL|u(IC}~)AX8NfX)Z6@kg3HIYDLgnRJpaGA)&0?!a+ywe7#%dHYjX3xLq-IdcUXBg2T{Dc)41u=PVcRWf-DYTn(OA__w$R1v1=-b7{x zhmQcKfA#mCzw_k+_hT~^Zx{6XAP=LNsnFHG> z3a=f8W{&_D{b+r{=3`dm+DOak=N%!)q(4U|GlpoxBZg71?fdOdvvvrHWvYW9&P)f< zFTR$}A;ZuvSk+?IHQ;eHbXIKAow~KH-rV0&%*bW8BkzIe)hNQ9hnqrrQ5NQ&je)3r zbFMvtd~j{qdP}3dC%PupNNW60^JJL9_H|3S@r$Uuh|}to_GSKj&E#=Gd=24w3kS)~ z&Z6iho8#ed4~%&&2o5@x14}qFi@^_wQUcmLCViV;jV(%a<(X3U`0iL_Kwf`N z6T<{|cCgkM9EkGf?(LA~?!70d$Hb<8P+^)8yJmTK$n?%Cd(iEWp)O(i;*&rAP)Y!x zmzUOh>Phksior)=>s+?tMg3K0wSY0IqqOVy)eXFM&DpHwefBZ2H~>q}ad;eZyjcSK z7z60bqTEe``xpj7{$>jxxH~oJcxO+aAt}|TZ4T{m;`RDhJ7;X~tKE7mwB{br@a(yc z(o$n=rX6j-dGrEb3pBl7)oO(;of!DPxWT6<u zywJ6?e8ddZGh2j?3DR>NZ(TW=qi!z=uQoa=q&BJNa;ztf$KkCM!6vzG$52#?$+%w0 zF!dPD3c=q~+*25#ef@Ob6<*nZ#?2zB^inEytY=TUiBiSokRp}f@Obl>JPWZYB!fCQ zvAz!dK#>oRyYVqs{PK}PD%Pepc(ix#U2}H~F*WMkG`DXT4n2Tq z_#>ffVz*s(Gw?lQ4)apvNqt7ito>7C{KLidLh5`uVt%GJZ|A0Usz`hm;t>|ew@_nN z8$Q*w#Qq>9y7TqY=hBwnh4+28rR4W&zPZ9(@#dCSaB{^5yb}7Ybszi6l6zw<^uyN| z`}pzj3bfZ=A^Kf_VZh^XA9Fsm)Ws_2w*p_<>OGsdXtWM3^~CcpL)2(eQ)xao`ya@1 zTSu8pH&$uHtsbdaWbquDuWL?vNkoa)+S$UQvlS{dST$RH@##xxTT|3Xnugh&UJL1N zh@`jcca0ZgR^oLPbULW4OGkOH77I6Oq6>>xhbgb|Xs%=TwwP0x)R%vZ!OyfVo{%MT zBzPk(+Q*!l4~51`gNpChit&iAsm4O^D9(h>NR~T{2u#vX~ef+8%%Vsv%OqCnR6m~hvf^skXr#06;1H^I;v0d z5a3Pbw~b$I`DDiyjT=w3Nz;t^X`~vGw0Xej6bX26d>tlyM2(?lrCOZ zf(wz*Hqx_JBAmVBqjd`! z+cBF`GB#~|Q;^&u_{oOJrEWq0k#0*lQix{+nc{~59#hfG%#Khu0{B%Q6E@VCE0cGY zuv1us*_uxm0)JAbCScI>+phPOfgLA4gIA87dspna*rx((zkY{aK=@Wmd>8n~hDUrt1sqLDvX>HuwR2(H1=%>TWZTy>P#_*`ac>}(SfXU{EAps=n~&VxnDDxd3>q$pYM1L$vGp* z3|fs&ZcrQR#^OI*UUGh`w+hPF)kr$h8IetGwPd#~IjE&WgvC?6#vj<{G3p&& zc7JqHa>;>C2)Gq=%mp}kWe6g*LfNsk9I0CQychA@pTM+eR6sPfLQb^w3ZpjK*Qo>Z!Z$CRtLJE_n+nJTm5uBr^X4WsY?f3*L;m0Nw7xQ97Q-6VvnIesA> zaea0p^12yxXt%Ek(eJa8Y=nh5w(pCrPDt!>@6XG`PV(1VUKg{C$y;Wvu5Ny^KUOQ` z8*g1^bZ(D2TCP>*o=uX{%fPmrX>-%Uc!vhf#98-V>UuXg!r`=7S5HvK0Jg4}<4>s@ z_sO)%B9C0dGa%k*nK!BN=!kH6a1OF(caS;RrOm^YVwI0mA~?{l4%GkLABsAEG-K23 zA>--R@EoMVWZEK8cxd++8#9_x7Q#4o^fsWi*WvHVB7^L)7)A-6xcPQwRa1RaYPP1# z_DwEt&5=>MzzliWywfmxySfBs0Ac90lKg*0W>ZWX<;hs!B1}V4^i;>?ip#{eewqrc zN3+c56IXhi{<1;~KD`cW0?tJ)VGpBsG`h#`-_3%Im|AcK{-U_svybZBe8ttsdWt|@ zF0y=TU!tht%8tu8j7C|@I5<-TC-@ww2Dx(I0>V-!3DdfJ=H7X*BFgPOSve%7*dSYks=vu^ULBd>xKc`CK;gcVhPxkL*? zw>zIrRh_RS`ceIjEc5qG0yj!`ocC#Cu6SR@j(kl#`2Pq|-}nCwdxEjB!TAazKS8Q9 ztl+&kp7lsuS3+Ee!zqKg>%gT;*e*qoBUU$38!5PgUFf$8`6KPe;Kz$xNB79wuz^GO zO)5lGXZ|+L$~T>rM2+7$VY1Zb*Itupk8g~aj{AIlV{W*yF6g$I;Pwuj>4JPX!Uk%n z4C?z9JrDZ)J^Ir)*9NQ!KYc6mPyXzi|K{g^fUfj{jc_c00RXmsVOPxmH_(-ZsiBRt z1?_*gEdJku@*`?{_Dc*1zIs2AUg;9-H8ZdG{%lf)7XlJCMw|0^2#wiCi|L$l^*Jd4 zFMUp~i8Z<^&tbvtPFJ@#y|>=?J6R4HDLsGu`oKT_unPMc6VS4(!w?G7*|LQ*N89%g zV<~13{>6F9L8KCM=i|Y_d%sN_WA~0^pawrFLqP)<(#*E96D@#1eA%SH4{k0e94OBe z8l(j;=;w&yGC;13an31taF)`Ph2#{qCJ^Tx8OBuVZl8DGCjc8T5hX)1QdO`tHHfW~G5*@|UP3Qa|TEzG_TCGGo z;huJ~5N1kh^6oeaJ?3d zhWeiL&6In{X(rx}k>jTd%f?|*@y;FDu1P^_-g|oZ%43T}UXEwvj_wr&X;DOb;Wz%S z^p*Qv%n0VCeqaSDkJR$V(g|I*&DG<+qo<{b`yFDg9nISjsToK_>OGC~E~QD!xM|8x z5nKF^pq03_ETq<*meJ`-ZK1J3(k&;`AtS~6UN%0xhmYXRsZJqSr`zd5*2KLYpN@>& z#g0;xww-l`ntD5^DX}ko(Kg{#1NP~jCZp$*lii12)7F_6>h+xJZ+{-aEqxFD*D0m4 z^14Wvwbsk+N3zidl=7?8QTT~jDC4%4n(&|2*2vTL8ry6KSv2h|bfr$DooSxaK8&=+ zbi+ZN%RP=>CjnZqf?My>hTbx!B@5~rEAX+N4?OwAQdFgiwV8R`4o6*gyVO=$syAbZ zp=ae{Wrb}xcPmvjwG|)R0<8Zl!_3sOskhD8pM%7+Mk!Rqxjp<7U zSJyhWx~84!nEOx))|q+4(VV;xa(8bZP09#hDu!Duu;|n~;+M&uSQRjFQSqs2oGaGJs!LfVNu7&u$NJcKmwmXW;$S&GeOfpLb2;K+Qcad6xX_`jepy@uBSTEx|rjQ1?% zznJu_bR{)J!KWO#;Dl%?@iKP%FoV(58jn0-pt6**qzMvli=?guG9R&lfk4Md$iQ6) zNV;KVe_(D28jg~TG33Y>XkKr?n+UV#PxF}T zfo)x~1{xNHD&*x15F6Cqi5{MF;K+|YZcM!aFLn{AugZ``e$rAs7!6cxg_>N#P(@JF zS%Fd~N9rgMC|!D|tVzqM-4;9Ruz=>O0iYFVrnA$#a%QZeaRCyzDl!5R9H!2m`R&n7?%2X6g%Yt_~-qBD%?p1^`E%Qm+^)mHGMoL_Z)&FhN$Vdu{$|;Mgsz3q&pUuo! z{%5$jLjwSUoc|uF|2^gCXgh6Yb7=owfP?@ zh`<2BfW@c&d_S%20K>T7-$YPjYm+c6Ev?nj6I;Xocw_Nz$PeBBVQO!SlUM&&WG(#z zJGNB7`M~n+?NA~gwe5Sg(YMyogzx))9>n<4xqdVGWU9OIcnSS}SI7VSO6{f1WnMN? z=_xH`ZXd;^Plif6-&EwiaEtk2&XaVs*T~Yg6q#G=`NF2FYVDPUD!S369#VJrc^dHb zE9}Gb_x{|K;q$MTo%gT*t)g}VRZQ^gaycfep=xVZHAEMQm3=7DE$yXR^3dg!o}0D2 zgzc5dVQ|1XheDF}*Aeo9}Z@bD;p8m@p zS0c^!IQ_R`V>9HqM;EnZXWpDyO#a)Km!}CZmyc|m;nE35GidH{5K>*Zn7y?;)Dk$kl6`0KhJaS%ju{D}&FrV) zKzr>)x|+-GTX+y>9@&IjYrdOQ7j0A;)5dz6OF+t{m2Prwdo$s2KDq3*XsO8JTk|@H z&vkO9D_k3eL|C}bV-DnWuUjshg**<;jL&hR>CfQiX<=&=$!XI~_55JAdLS=kJ%vU~ zZ>_G~UU;2$nl~_WdPP7yUN4YfiFQZhuw^(PRUh8dvW@g+9^9)!Ug0!;xgO18aiCJV z%L5fqY%*~pIb#v<`&CD!+}mKL!TM;pWL3M$zX!7{f!*H}mCrfeFA5DYOsf|S!WKGCm z;i510w@QB%sdd{4@Z_?0GqPJ}SHh?lO{Mz-XmvG6-1OY_#k6ytnMEp9_TZF|qLXqF zW4RZBghoGQnkCfbG))I-{r0`Y8MdOZr--7dH_wJvNdwM%t7`+7P~S==KE^JXF2`ns zTjeBdcS+SB32r4VD)N*5nr0n?-oa=Z=N5Xk(c7B}=AK4l;7is@vll-wFdif*cG!_Y2-3~P$ox--_jaG`EXz4;H)!1>s=qa_z3 zSV*I0E(k^$?@7CKzCDhs119$T?clnzV!$d`RnQNm#Px(0`+I_hA}MebL%7lJy`&ZDoiyV#QK^aFJT za1b%3S&{Tz5IG#8nY453&ff?U?a7sdNfOv>{K)BQf*sxZCI?*2mg$*2lyI%oq^^Dr z**VB^$nf;!5Y8Tnv;k()T&5XYNkCePEk6<2=P>#`WUPiR`jNh*A&g zN&5>jeb%A;WsZ`Sph}WIIn>IlZ-AF8!r<$Nsk|Zf-B_He50E2dz9S<2J>vmA>fMAU zQ-A?JR$313&ESz{gR`ec$UA5pG^a2j+vwq0+(4ICBWKy-6uoCzb%CxnMJA@OS1~O- zu8@M|oJWm+kkI&^Ko>~5_!Aev_DiR_9~sL7+>MK2VRBAv2(h6cSqqq$_#WPBL5IMq zH%g;A%YDeYlI9G@ znSe^F3+Q~XL{ugu7V}1%pf1N(>E7~SikEuQj^a47Z%EGX%Bf4Du%Kx_GjKQsr4TWM zLVRkEF9HXe&AhE!#Rl@~Daxthsi*HVt~6oZ+dPTP2s#oU!d4fSF|ZA+Fs%&vFid1$y@cx}S|Pmea*#_AmEF-nUGPhX%h7E{8ze02Ek=L|)Go>lo(8&4 zMVBxScB>w{!@~DXvf(1howU8;XcD^TlPb}x@_0xU41W5%C{|S8ZES&) zlaYm@5ZEJ6M$)=%h8X%3w3?`cK;yE^;DwVe7oHXrKZwd!JFKLOSDXN72*Gt<=Vsz7 z$7H*M`o}hWpnhb63PZ>yh)4qfuWbR(N?U8%c1lCh$a>U7di_RR>qFveZ@rv%S?Muw zb)GHHhNymK`@)lL9~qV~P4b+RZuDXd^|69sZ#A9BDim054@z#*i4(8&M;j|4Tb@Cn ze=u3-GxVZ8a#x_a#15IkY-T`6iuehTywI_Fv4`Y1(FkxVPp{EFd{K!aYayzqJO)6j z14Wp{$UEC9R+lv60db1#&(^oRcX^g^L%Pqx0w(R0nFxYLfUAKs}b$ zRJ^n$y=WznkRIsPVdmzHf^dIc!6a{$lbJ~l@FIa$$ggfiffdf7USbW-`a%GIj zY`{r#D`ll!0=VWo%liEIZcr`4FWcgPIi|6K+T?epu>n|3Fu?ME;l~6@cgk5oPs=Ak zD`Ko6w*Z2WtUHJG{;KZKS~cq=rc&?vVML1B3?kEr46c$iSFHY5cP5g?^3m;HFRT+v znz8Pw32wFRXym7x9mPkbvRSGOd`4mQmy~$w04YUHq$6iKo?g*W%^RplARzqeVC6N@ zQO_-7f*S5~)K^YCPzxV}=i>nmdBc1BWI;=xX-S{xOd8pXwJhM!!^$F*)I-X!(=-H- zUtYWw$l_oke-AVh5otSKnMD~lS5q$fBc&ra{V8}zO>MzfViiOM=7&CDeHfSDeGZQw z*5pYiieMISU%r+`rsFV<4Y%o2U!JQXQn*Go!=+nfM(e>>9%!VE_UCiM=>w@1%}8ohE5#{9Jg=mAq{CIamB~Nip&V!v^OZM7x?A&%vgs z=^qqYU~TTd+oh#=L%M#!|M7X9=(~24vGyqwt`fP0YKLgYm2t^ItgjAJy6?8*Wsd zO>kVB2{4q~ck29fvfry0ma`eg=Ww_3)5N)yquKgO*mT>STIMw%2(UZgG>DN;{On8Z zFycvPr+ly>Dn~nT5M!U{t90Ut0e^L1xK-D4oxtcsXM4_w{TR9(XA@pz4)MNafruW` zLUW7A=V<1a(`gBx;ZcEf2_Y^&q$3MCo%M%C@3KwN5ouZN=Jfot05f1`#q4G03y<0j zd7+gSAyvtfwDTtS-Itm`e%MrC_nM8LXq<>KixICaK7_6N%#38GeD;MG9#D#R;zk#< z%{x+a6WC`wuZ)qg+=|FeUkN3L#Z(U7xWV?mB`lMPu2}2R@LX^UE5ptqVPT}m()6FN zRj=nA%oM?x3c=nrHNI<6X0@lOD4JAxeZlv3PFU%Z(bA-yqpGd*{rD#g$IqYD^F*xa z7~kXNJRA$_F4wD(rsMe>ay(eu_dso*%S*?ITua7~*T(GmMv7(&txNG==F;xQOmcsu zGq}Xhi7k6L(rq#&KCLJtC#W}YU0AQ?izd6RVpR@Jy7#dhC|7}auUbAUM+N$iV&k_q zey-+n6rRR!=DZR-i!s)eb;nJw9l?c_VD2U5HSQ(7xTidS4W?;!oxXK8m``-9;ZFLNS>?HT2zrqPjZNyhn>%^NcF%HFwPYud2Z6Q zI5)EYo+$2m`u(ZP2DF^Cvi!EpSt^stG+_s*t;s)e#2>8WQ9!GG(533(_)AE(h;>TQ zex}dBJk{Iz5f%HM6VAh;G8rci7eMi>G^NeEK5N(CZ3Y;NlFb$U^jzQMSqsn7#_WdD zNZ6NRUKW_j-I+8Lwd zt(rNz&O_e%@G@E@4Xqjq^H;2|TO+09NAon>&^1nM`6}EE$`9?`Z53 z>6V19N5*v=?0!k{S4|)3)-252e$d#FaLsR2(osFtP~IYeZZL8FU~l5{EAXebZAYzI znqK6DD8I29sPt>)n=xoTCv52%JdxS-CRdAfn87-$-Msi-&r8n3(+%wzNpJGd@ir>6 z6r4AZj}npxJDx?0%I$a1fln>GK1k2-+2T#iB{M|jil2T{=t_`j;M2T=Cjxd-FW7T- zQuW^-4^`!Gopnpfm6%%bS8lF$Dh_M6tBynWAYNkJN0J9lH)Rcz7@|?3mA9s!B!*M6 zJk4bPqqj;;#Vo_aR!7`k+bJ4$ub0cC#yhn})%-)_%@$q2I7Z!=PiDMGV*1%NSs;vO zNac2D#Gjh5>DWXAPIXj)NH4vIFspvGq{YMVTWTfIPZO_>Y3}jY^38NhACl8gW8oes z;iwzn)su)Wu2uGV9EA;;jqL0{dFdr(ddMK|NYQy$u`X3Amz*@VOY^p=SG29|#xv*o zD{a#9&z?nhx6}(TrwNKV)*fhvv(+)E*-GZW0eA&a_xG#TI^b5TaZTKjvaoLMM^-pPDF3GU48lteUsFLO0rbTqQQ7F1j4}=B7QOU`W5feV0sU+!c#}h zAYnD{Pui1>oNuts?4;nbEqcys+7>6FDf7Hcm@*fh7dWo_$*^)Y{p`Up%2hw9%XANK zx!J@po(Ph!=2JC|^!Hb+IG+${o>1?mk{Y4Z#~q}?$uQe^y{4AiM4dh;04>wRvS62z zdX6pYD&O+tsD@kPLc2PHSf>6h&g=dkyeQ9~uUH;=bJBf|5*GcSF~pIP-|ge{ppO?{ z*{5gB-LmQQ^9}A^_s#TfbuY6(qq+xLr+Nn4htvj!>BLm;uaeDnLi?NR5ei&p^xX?c ze2-dhpOXI5gU$%<(cgIPg#j>cp5R<5^+9^xt!m!CxO}~kmGFQ%Jay11LFu-7Mb~2P@2EYrw`GcI2{(SAhDphQ#e}( zgL%6r;=5|+gFexm=%!h_+&fi&l27$f;m2FWlo$HivBz$QCgwcttba-t;G_FKHf5h6 zIo;_f^o~r*%!r;0RN|>Se=aO$q^mQO>Mv8CFfZ1>S<8MSe%I%}$i<&f-izXm-|s6o zl^sK;K;^(q$(voXG`m_*2r)#w&5A)PHqAIVqhLFHgU-WdbY^*v)cTYzTGq3db{9~1W<35R#)NI> z#Q;AQZ*S(drI^Y73y6&O^%m6;FkJl^W+x6Br?QYgMW~6V3075KcAQ*Xg_j99*Qsdxxg%Pi;EXJ6lFGCMW%a2&Ngl_oHF)~XA=c>0 zXzzD1RFjX8Cv0zgHz>It+Ssh=YV$Cf;qVy zk5c;<@AqY`Ctk>nS$9_5>Sd4AtO`jZ@olzwcUwLpWbZgm(+y!G+?io=>EHwlsXC7( z)nCaSYV@;vu$=qH>Kmk%4WoFBXPVK@Z~3VPEt`)wNCZcAU`f)UUj%o*JC0`^aj8L1 zLX^jZhZFdZyUXND40a|ZCmRGCK3fy8L7#*GpI7EWWPuxHPSw=o;Q^`SyA*vJRKo?5 zWlvw@jp%O^yeiuY(KcdjS<1hhXrL0to38Yy<9z(+UxuVMNgY#|q?0Tm9sy<-GhEhQ zjlb1(6HJP2c|G#|Lfz8VXlX@`tG@mkz~nm{&~O0TJto=$BM<}&J4`T451e!Mf0F6 zlGB51oV%AA`}^iK`FpymuXFK8PW!*j!td-%xYNsLGZ5N+!?23~P71gRU&Tth>&jTC zv@w&R=NxAPXMfCbJY*Aa~=%ZR_ff zIi0panIZ!5cqDe<#uB#mo!Mj`ORT+@EDg7+*Mm7t({Y=JxN?c4s)3?>9Jf!cr@}?) zoFt%<$%)mk;hqxYJ$NY6aQ20Vxn~gP9ML2}C1jA4IWj!z^^<(tE$v9-i(j zXOG41ov-DDN#6@7REV|=pzX;U6MUh9K}nZXoZp195^7NVp3geZb~TvQ(A&IPlUi9%!>OLyZ&6NI)T)hZAkU?Lt+CV-WW6rkHP*6!*|~@ zRIPV`QUJhNI?%reR4osFvei2$WLW>}f49STnj;=fpGm+)7~zZnphrM6!ThT<&KL}S zD=dep;y$W@EKwi}lz_zzjCCS3vz?ebc%fQ66*R|fQ27u7q4eO%ibM#-BEhIbO5y|X z#AX+mcuDzfFwm^2zCOoaPh;!Zg+YWUkqBo=7mQCJvGP3hcF{(FvK)CfXEQNzqU5co z6(6`85!vkL!S=T~0pM%4=8z#uEO@j$3hmf*7JTtK`rkw8=ej3MbW5^Z*8M+f@D9ZJdJ(M*&nMw~g~959 z0GF)T5GVs9_p1ypUT_=^0y@YyBnTeki6lZl-_suLplZh|5&)*mNjI?xf#)?55%oX% z<|h4YV*BB^CgN(bYJ+4)iX{NdkbgZj>c{kOBkxz)*3|{JL*Cx-jWeW(gSy7pAs`4Y z*fRoCX19?5NVXkk>mCCA$8Xku2m4+G5e4eI!5+LYS@Na?05)wcd`QlC&7Rd2fH;30=fy--%YpO(nsj`^IY5K0t+7s zk0jdfWuezU@q>Op#|Z!q1j<2i|1!ise!mU{0ar$&k>GHXm=@u?_XC1o0`ngOz?VB@ z0E_^UU*z{8`XDeHH5&8x(EQ(x`5iLpvj0>Ts6z`l0C*EXI(+zjkQ;jZ%IXJ}9tZ;I zib5k1n@>e2t{6>QoN9)EroSf&Y|?8UBk8tN-iH7E#PqHxH$QNC1GA-a-l?`@6bFuY z7UefXdT{hh=JklG9-qLuGa#5^+57cBZ9{|`A7~fy?_d#wLAAv=I zefCy-)B5@>MJQPBqrst^3jv;()c+G61R3Ch^x0~p-(p0)QU)iGa={Tjh5%Gg=C^~Q z(5@J)_qXXb2oBtVl7Y=Ez~imywy48D=6h@G6UEl@Ib1D&%9oPbj$ zP@3(v?aBt{N5Hn3Sc1n*&|sut7c zQAniO?;>@Ojb2{c zYdQ%}8vk+5h%IWnK%2F+<%ul9o!dV`**6mf^?&zq6W4+h?k@dNu+$@>1aI1FN}N=} l?Rh^+MRpP;^`Fgp|4kkRSf#!`8I%JUc)@wquUq(l{{T?1S_1$8 diff --git a/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3-php52.zip b/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3-php52.zip new file mode 100644 index 0000000000000000000000000000000000000000..2a6eaa3c3e05ade467be22f0f1b52f3a568e33d3 GIT binary patch literal 210820 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
      xQN)Ez^NJJ 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 literal 0 HcmV?d00001 diff --git a/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3.zip b/packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3.zip new file mode 100644 index 0000000000000000000000000000000000000000..c8707bbf17c7b868f0121169291ea12d3f491cb4 GIT binary patch literal 207811 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 NQzrh?) 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 z
      tnc30V*;=`qm|I!>#Mb|@F!){w!vSb%KViXCMZQ{YpSZS9?KjQRlx- z&dC<|7V2LS-A*q;j3UqsrGRS3|AO5o{lCxduLjeN1w?}=U?!9e{1JM=!prdQvv4tX za0E^n`*U&pu^Zt1Cy`%$VzANQCt~dmEQkKI7f^4`!p>F#c2t0a0OVc>RNRc=Hr-J#H2l$npm9d-gUo!u4#Bm}LpoK{Sb@-+EmlA^f zZQuRtru~lFU-zAsGeOj(K;L8pOxj)wPMhSvOztO*|Bto(Wza*W{rlX0E&czry0b7; zJP-l}bPmj4wO?pf#D7lWU)%R9DLUXe%EtH~vj_j&EBrhDQNSgOF9IhYBHI7}jxQ+k zv;W6(`aMN+8xvax>wolr(fu+S*IJ*>!T2BNKL=++U~kr6A)b`ta*z#_t0K^sTfZRQ zr}AGXZf9gm=L}4D=!}d_%x#Q~em~~%=W?K9MZZBhpgOdW0|2@&D8t$P*C_+VYGQ8c z4D7c1YjU07f!uNg7J0w2{hs8s`+tw*F9Nl5uyu2%1D^ezjIE7r{@D-mbCOi4IE4rR zhW2paiN^4SB-eo_<-eQK{?odDueC-F=D=`EXY6KZZ1+p+;$P9yT14|*PT+wr4;cWk zeL?gg?7vR*56tUtk?y)9XtP-XN_H3QcY3-J{of<~iwgW26>a~g67^Rk3-y(vkN{{* zUO?xi{z9^QW}yFnRN$}B0~^E1PXuP@Iin!Ib5F?*|8;tQu<-`Y=2k{OlWY8O$YlSg zM1M^XX9xc><-ZsyUyfk^?J-Aa=9HEyJ z)qYDTclqxU`kzruKgZzZIH=z;FkSz<41T{~e~r=0?^J%vNbl;W82#(3mH$fue{3!P zQ}_PWTHJ4c3hy_?_PBz?2Q}{{XC~LrDMt literal 0 HcmV?d00001 diff --git a/scripts/patch-sqlite-for-php52.mjs b/scripts/patch-sqlite-for-php52.mjs index e7e5247e69..269cbc282f 100644 --- a/scripts/patch-sqlite-for-php52.mjs +++ b/scripts/patch-sqlite-for-php52.mjs @@ -4,7 +4,7 @@ * * Pipeline: * - * 1. Unzip `sqlite-database-integration-v2.2.22.zip` to a temp dir. + * 1. Unzip `sqlite-database-integration-v3.0.0-rc.3.zip` to a temp dir. * 2. Run `scripts/php52-downgrader/bin/downgrade.php` over the dir. * The downgrader is an AST-based pipeline built on nikic/php-parser * v5 that handles every mechanical PHP 7+ -> 5.2 rewrite — type @@ -13,7 +13,7 @@ * don't survive a pure AST round-trip (PHP_VERSION_ID-gated * traits, ReflectionProperty access, WP compatibility polyfills, * etc.). - * 4. Re-zip to `sqlite-database-integration-v2.2.22-php52.zip`. + * 4. Re-zip to `sqlite-database-integration-v3.0.0-rc.3-php52.zip`. * * Usage: node scripts/patch-sqlite-for-php52.mjs * @@ -39,11 +39,11 @@ const REPO_ROOT = path.resolve( ); const SRC_ZIP = path.join( REPO_ROOT, - 'packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22.zip' + 'packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3.zip' ); const OUT_ZIP = path.join( REPO_ROOT, - 'packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v2.2.22-php52.zip' + 'packages/playground/wordpress-builds/src/sqlite-database-integration/sqlite-database-integration-v3.0.0-rc.3-php52.zip' ); const DOWNGRADER_DIR = path.join(REPO_ROOT, 'scripts/php52-downgrader'); const DOWNGRADER = path.join(DOWNGRADER_DIR, 'bin/downgrade.php'); From 359f29e2933315c51ae444dca8ea2651346d156f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Tue, 28 Apr 2026 14:56:51 +0200 Subject: [PATCH 21/24] Drop patchWp10PostPhpInsertNullId; SQLite plugin handles it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WP 1.0's wp-admin/post.php emits `INSERT … VALUES ('0', …)` into the AUTO_INCREMENT `ID` column. v2.2.22 stored the literal 0; we rewrote the source to NULL so SQLite would pick the next rowid. v3.0.0-rc.3's INSERT translator now wraps every AUTO_INCREMENT value in `NULLIF(CAST(… AS INTEGER), 0)` (unless NO_AUTO_VALUE_ON_ZERO is active). The 0-literal advances the sequence on its own, so the source patch is a no-op. Verified: WP 1.0 boot smoke test still PASS on front / post / admin / new post phases. --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index dfe92c3a33..cf354ebece 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -121,7 +121,6 @@ export async function patchWordPressSourceFiles( if (wpVersion < 1.2) { await patchWp10DoubleQuotedSqlLiterals(php, documentRoot); - await patchWp10PostPhpInsertNullId(php, documentRoot); await patchWp10LoginPlaintextCompare(php, documentRoot); } if (wpVersion < 1.5) { @@ -476,31 +475,6 @@ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { } } -/** - * WP 1.0's wp-admin/post.php inserts `ID = '0'` literally, which MySQL - * silently turns into the next AUTO_INCREMENT value but SQLite stores as - * 0. Rewrite the literal to `NULL` so SQLite picks the next rowid. - */ -async function patchWp10PostPhpInsertNullId(php: PHP, documentRoot: string) { - const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); - if (!php.fileExists(postPhpPath)) return; - const content = php.readFileAsText(postPhpPath); - if (content.includes('/* pg_wp10_insert_null_id */')) return; - - // Unique to WP 1.0 (WP 1.2 adds '$now_gmt' to this prefix). Matches - // both the plain and the geo-positions INSERT branches. - const needle = "('0', '$user_ID', '$now', '$content', '$post_title'"; - if (!content.includes(needle)) return; - - const patched = content.replaceAll( - needle, - "(NULL /* pg_wp10_insert_null_id */, '$user_ID', '$now', '$content', '$post_title'" - ); - if (patched !== content) { - await php.writeFile(postPhpPath, patched); - } -} - /** * Same SQLite zero-PK fix as WP 1.0, scoped to WP 1.2's post.php * (its VALUES prefix adds `$now_gmt`, making the needle unique). From cf5f5f29dcb50f76e7fd8d87d578d7483c5024d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Tue, 28 Apr 2026 14:57:30 +0200 Subject: [PATCH 22/24] Drop patchWp12PostPhpInsertNullId; SQLite plugin handles it Same story as the WP 1.0 patch one commit back: WP 1.2's wp-admin/post.php inserts a literal '0' into the AUTO_INCREMENT ID column, and v3.0.0-rc.3 now NULLIFs it transparently. Verified: WP 1.2 boot smoke test PASS on all five phases (front, post, admin, new post, plugin activation). --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index cf354ebece..f883454ea7 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -126,9 +126,6 @@ export async function patchWordPressSourceFiles( if (wpVersion < 1.5) { await patchWp10AdminLogoLink(php, documentRoot); } - if (1.2 <= wpVersion && wpVersion < 1.5) { - await patchWp12PostPhpInsertNullId(php, documentRoot); - } if (1.5 <= wpVersion && wpVersion < 2.0) { await patchWp15AdminPostAutoIncrement(php, documentRoot); await patchWpAdminDashboard(php, documentRoot); @@ -475,29 +472,6 @@ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { } } -/** - * Same SQLite zero-PK fix as WP 1.0, scoped to WP 1.2's post.php - * (its VALUES prefix adds `$now_gmt`, making the needle unique). - */ -async function patchWp12PostPhpInsertNullId(php: PHP, documentRoot: string) { - const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); - if (!php.fileExists(postPhpPath)) return; - const content = php.readFileAsText(postPhpPath); - if (content.includes('/* pg_wp12_insert_null_id */')) return; - - const needle = - "('0', '$user_ID', '$now', '$now_gmt', '$content', '$post_title'"; - if (!content.includes(needle)) return; - - const patched = content.replaceAll( - needle, - "(NULL /* pg_wp12_insert_null_id */, '$user_ID', '$now', '$now_gmt', '$content', '$post_title'" - ); - if (patched !== content) { - await php.writeFile(postPhpPath, patched); - } -} - /** * Two WP 1.5 post.php fixes for SQLite: * 1. SHOW TABLE STATUS returns Auto_increment = NULL on SQLite, so From 34cf27b09d41d94f32a75e421b94fd463286607c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Tue, 28 Apr 2026 14:58:33 +0200 Subject: [PATCH 23/24] Drop patchLegacyWpCategoriesZeroPk; SQLite plugin handles it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WP 2.0-2.2 install.php / upgrade-functions.php / admin-db.php inserts the seed category as `INSERT INTO wp_categories (…, cat_ID, …) VALUES ('0', …)`. v2.2.22 stored the literal 0 and the resulting cat_ID=0 / category_parent=0 self-loop hung get_nested_categories() in an infinite recursion. v3.0.0-rc.3 NULLIFs zero-valued AUTO_INCREMENT inserts at the SQL translator layer, so cat_ID becomes the next sequence value as on MySQL. The rewriting source patch is no longer required. Verified: WP 2.0 / 2.1 / 2.2 boot smoke tests all PASS on the five phases (front, post, admin, new post, plugin activation), so neither the dashboard nor the categories admin recurses any more. --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 34 ------------------- 1 file changed, 34 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index f883454ea7..e743e1c270 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -134,9 +134,6 @@ export async function patchWordPressSourceFiles( await patchWp10EditPhpPostTitleLinks(php, documentRoot); await patchWpFunctionsPhp(php, documentRoot); } - if (2.0 <= wpVersion && wpVersion < 2.3) { - await patchLegacyWpCategoriesZeroPk(php, documentRoot); - } if (2.1 <= wpVersion && wpVersion < 2.3) { await patchWp21PluginsPhpInArray(php, documentRoot); } @@ -593,37 +590,6 @@ async function patchWp10LoginPlaintextCompare(php: PHP, documentRoot: string) { } } -/** - * WP 2.0–2.2 inserts `cat_ID = '0'` literally into wp_categories. - * MySQL turns the 0 into the next AUTO_INCREMENT, but SQLite stores 0, - * so `get_nested_categories()` then recurses forever (cat_ID 0 + - * category_parent 0) and hangs the request. Rewrite the leading '0' - * to NULL. WP 2.3+ uses helpers that pass NULL, so this is gated to - * 2.0–2.2 by version. - */ -async function patchLegacyWpCategoriesZeroPk(php: PHP, documentRoot: string) { - const files = [ - // WP 2.0: install.php. - joinPaths(documentRoot, 'wp-admin/install.php'), - // WP 2.1/2.2: upgrade-functions.php. - joinPaths(documentRoot, 'wp-admin/upgrade-functions.php'), - // wp_create_category() for runtime-added categories. - joinPaths(documentRoot, 'wp-admin/admin-db.php'), - ]; - const insertRe = - /(INSERT INTO\s+[^`"']*?categories\s*\([^)]*\bcat_ID\b[^)]*\)\s*VALUES\s*\()\s*'0'\s*,/g; - for (const path of files) { - if (!php.fileExists(path)) continue; - const content = php.readFileAsText(path); - if (!insertRe.test(content)) continue; - insertRe.lastIndex = 0; - const patched = content.replace(insertRe, '$1NULL, '); - if (patched !== content) { - await php.writeFile(path, patched); - } - } -} - // ── Private helpers ────────────────────────────────────────────── /** WP < 1.5 lacks wp-includes/version.php. Create a stub. */ From 7085c529598b4614b6771b6ec369d9e1a562d9e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jake=C5=A1?= Date: Tue, 28 Apr 2026 14:59:28 +0200 Subject: [PATCH 24/24] Drop patchWp15AdminPostAutoIncrement; SQLite plugin handles both halves The patch did two things, both now redundant with v3.0.0-rc.3: 1. SHOW TABLE STATUS LIKE 'wp_posts' previously returned Auto_increment = NULL on SQLite, so we backfilled with a MAX(ID)+1 fallback. v3.0.0-rc.3 reads the value from sqlite_sequence and returns the real next-value, so $id_result->Auto_increment is populated already. 2. WP 1.5's $postquery INSERT omits `pinged` and `post_content_filtered`, which are NOT NULL in the SQLite-built schema. v3.0.0-rc.3's INSERT translator fills omitted NOT NULL columns with their IMPLICIT DEFAULT under non-strict mode (we already clear active_sql_modes via relaxSqliteDriverSqlModes in the legacy preload), so the handwritten `''` columns are no longer required. Verified: WP 1.5 boot smoke test PASS on all five phases. --- .../wordpress/src/legacy-wp/legacy-fixes.ts | 50 ------------------- 1 file changed, 50 deletions(-) diff --git a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts index e743e1c270..7b769ab0f7 100644 --- a/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts +++ b/packages/playground/wordpress/src/legacy-wp/legacy-fixes.ts @@ -127,7 +127,6 @@ export async function patchWordPressSourceFiles( await patchWp10AdminLogoLink(php, documentRoot); } if (1.5 <= wpVersion && wpVersion < 2.0) { - await patchWp15AdminPostAutoIncrement(php, documentRoot); await patchWpAdminDashboard(php, documentRoot); } if (wpVersion < 2.0) { @@ -469,55 +468,6 @@ async function patchWp10EditPhpPostTitleLinks(php: PHP, documentRoot: string) { } } -/** - * Two WP 1.5 post.php fixes for SQLite: - * 1. SHOW TABLE STATUS returns Auto_increment = NULL on SQLite, so - * add a MAX(ID)+1 fallback. - * 2. The $postquery INSERT omits `pinged` and `post_content_filtered`, - * which are NOT NULL in the SQLite-built schema; add empty values. - * Both needles are unique to WP 1.5's post.php. - */ -async function patchWp15AdminPostAutoIncrement(php: PHP, documentRoot: string) { - const postPhpPath = joinPaths(documentRoot, 'wp-admin/post.php'); - if (!php.fileExists(postPhpPath)) return; - let content = php.readFileAsText(postPhpPath); - if (content.includes('/* pg_wp15_post_id_fallback */')) return; - - const needleAutoInc = - '$id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE \'$wpdb->posts\'");\n' + - '\t$post_ID = $id_result->Auto_increment;'; - if (!content.includes(needleAutoInc)) return; - content = content.replace( - needleAutoInc, - '$id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE \'$wpdb->posts\'");\n' + - '\t$post_ID = $id_result->Auto_increment;\n' + - '\tif ( ! $post_ID ) { /* pg_wp15_post_id_fallback */\n' + - '\t\t$post_ID = (int) $wpdb->get_var("SELECT COALESCE(MAX(ID), 0) + 1 FROM $wpdb->posts");\n' + - '\t}' - ); - - const needleInsertCols = - '(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, post_modified, post_modified_gmt, post_parent, menu_order)'; - const needleInsertVals = - "('$post_ID', '$post_author', '$now', '$now_gmt', '$content', '$post_title', '$excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$trackback', '$now', '$now_gmt', '$post_parent', '$menu_order')"; - if ( - content.includes(needleInsertCols) && - content.includes(needleInsertVals) - ) { - content = content - .replace( - needleInsertCols, - '(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_content_filtered, post_modified, post_modified_gmt, post_parent, menu_order)' - ) - .replace( - needleInsertVals, - "('$post_ID', '$post_author', '$now', '$now_gmt', '$content', '$post_title', '$excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$trackback', '', '', '$now', '$now_gmt', '$post_parent', '$menu_order')" - ); - } - - await php.writeFile(postPhpPath, content); -} - /** * Fix WP 3.3's `self::$this->_help_sidebar` typo in screen.php — PHP * 5.3+ fatals on it whenever the sidebar is populated (e.g. post-new.php).