From 565ce9bf873cd19cd409ed4aef9ce35158803dea Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 09:41:27 +0300 Subject: [PATCH 1/8] Guide figures render with a bundled font instead of the host's None of the 24 generated figures could be reproduced outside CI. Running the generator on a Mac reproduces 0 of 24 byte-for-byte, with 3-20% of pixels differing. Two consecutive local runs are byte-identical, so the generator is deterministic on one host; the variable is the font. `PreAdvancedThemingScreenshots` styled with `Font.createSystemFont`, which resolves through `JavaSEPort.fontFaceSystem` -- "Arial" on macOS and Linux alike. Arial exists on a developer's Mac and not on a stock CI runner, so AWT silently substitutes and every glyph changes. The differences are exactly that: for `flow-layout.png` every differing pixel sits in y 10-130, the title and label rows, while the colored blocks below match to the pixel. So the byte-exact gate has only ever been green because CI both generates and verifies. A developer regenerating locally could not match it, and at the scale the guide's remaining ~260 app screenshots would need, that is untenable. The figures now load `native:MainRegular`, which `JavaSEPort.loadTrueTypeFont` reads from `/com/codename1/impl/javase/Roboto-Medium.ttf` on the classpath rather than from an installed-font lookup. This is also what the project's font rule requires everywhere: never `createSystemFont`, always the `native:` scheme. A null return refuses loudly rather than falling back to a host font, because a silent fallback would restore the exact non-determinism this removes. The committed baselines are regenerated from a Mac. CI byte-compares them on Linux, so the check either passes -- proving host independence rather than asserting it -- or fails and says so immediately. Composition, dimensions and colours are unchanged; only the typeface moves. Co-Authored-By: Claude Opus 5 (1M context) --- .../PreAdvancedThemingScreenshots.java | 49 ++++++++++++++++-- .../developer-guide/img/border-layout-RTL.png | Bin 10475 -> 10375 bytes .../img/border-layout-center.png | Bin 10451 -> 10416 bytes docs/developer-guide/img/border-layout.png | Bin 10547 -> 10515 bytes .../img/box-layout-x-no-grow.png | Bin 8072 -> 7969 bytes docs/developer-guide/img/box-layout-x.png | Bin 11498 -> 11348 bytes docs/developer-guide/img/box-layout-y.png | Bin 9115 -> 9209 bytes .../img/flow-layout-center-middle.png | Bin 8561 -> 8650 bytes .../img/flow-layout-center.png | Bin 8562 -> 8650 bytes .../developer-guide/img/flow-layout-right.png | Bin 8621 -> 8714 bytes docs/developer-guide/img/flow-layout.png | Bin 8393 -> 8416 bytes docs/developer-guide/img/grid-layout-2x2.png | Bin 10759 -> 10897 bytes docs/developer-guide/img/grid-layout-2x4.png | Bin 10345 -> 10597 bytes .../img/grid-layout-autofit-landscape.png | Bin 10033 -> 10153 bytes .../img/grid-layout-autofit-portrait.png | Bin 10691 -> 11441 bytes docs/developer-guide/img/gridbag-layout.png | Bin 10810 -> 10780 bytes docs/developer-guide/img/group-layout.png | Bin 11908 -> 11976 bytes .../img/guibuilder-2-insets-1.png | Bin 6196 -> 6070 bytes .../img/guibuilder-2-insets-2.png | Bin 6057 -> 5955 bytes .../img/guibuilder-2-insets-3.png | Bin 7263 -> 7232 bytes docs/developer-guide/img/layered-layout.png | Bin 6849 -> 6627 bytes docs/developer-guide/img/mig-layout.png | Bin 10475 -> 10723 bytes docs/developer-guide/img/table-layout-2x2.png | Bin 9313 -> 9460 bytes .../img/table-layout-constraints.png | Bin 13418 -> 13760 bytes .../img/table-layout-enclose.png | Bin 9718 -> 10008 bytes 25 files changed, 45 insertions(+), 4 deletions(-) diff --git a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java index b168677eabf..ada871b775b 100644 --- a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java +++ b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java @@ -1,3 +1,25 @@ +/* + * Copyright (c) 2026, Codename One and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Codename One designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Codename One through http://www.codenameone.com/ if you + * need additional information or have any questions. + */ package com.codenameone.developerguide.screenshots; import com.codename1.components.SpanLabel; @@ -40,10 +62,29 @@ public final class PreAdvancedThemingScreenshots { private static final int BLUE = 0x0b57d0; private static final int GREEN = 0x06a806; private static final int WHITE = 0xffffff; - private static final Font TITLE_FONT = Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_LARGE) - .derive(35, Font.STYLE_PLAIN); - private static final Font BLOCK_FONT = Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_LARGE) - .derive(24, Font.STYLE_PLAIN); + private static final Font TITLE_FONT = screenshotFont(35); + private static final Font BLOCK_FONT = screenshotFont(24); + + /// Loads a figure font from the port's bundled Roboto rather than from the host. + /// + /// `Font.createSystemFont` resolves through `JavaSEPort.fontFaceSystem`, which is + /// "Arial" on macOS and Linux alike. Arial exists on a developer's Mac and not on a + /// stock CI runner, so AWT silently substitutes a different face and every glyph in + /// every figure changes -- which is why none of these screenshots could be + /// regenerated outside CI and byte-compared against what was committed. The + /// `native:` scheme reads `/com/codename1/impl/javase/Roboto-*.ttf` off the + /// classpath, so the result does not depend on what the machine happens to have + /// installed. It is also what this project's font rule requires everywhere. + private static Font screenshotFont(int pixelSize) { + Font font = Font.createTrueTypeFont("native:MainRegular", "native:MainRegular"); + if (font == null) { + // Falling back to a host font would quietly restore the very + // non-determinism this exists to remove, so refuse instead. + throw new IllegalStateException( + "the native font scheme is unavailable, so figures would render with a host font"); + } + return font.derive(pixelSize, Font.STYLE_PLAIN); + } private PreAdvancedThemingScreenshots() { } diff --git a/docs/developer-guide/img/border-layout-RTL.png b/docs/developer-guide/img/border-layout-RTL.png index 95e79675f1fa51b1e97f03a66042de73aa6fd3e1..edf98faecdae43b8bc6bd1af7b4546d191561d68 100644 GIT binary patch literal 10375 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 Ycgs29lWRLK7z+J)$>w6|1+NGH3rZ-On*aa+ literal 10475 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 LMmOGTJ3ahAIDn4X literal 10451 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 diff --git a/docs/developer-guide/img/border-layout.png b/docs/developer-guide/img/border-layout.png index b88ae54439085b61d3bd991e2b32169282391e2d..b31ed1a2f835db450add8c2fd25af92a44d5bd2e 100644 GIT binary patch literal 10515 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 BZHfQ@ literal 10547 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 T?x7jKzM1rN4Ik9rcX<9kNrm9{ literal 8072 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

W^lmSe8OmCNErJk@B3 za9exz0}&^d`6t?2e?!MS0L75r8QVW!r63&pHcVUOe+zgXIR=1+ZAV9*=ypSGS2y_C zUcPcYn)^#rf93VA+QKd8K82UI?NxX>!Bvm%o9sHqk9XZlA2`mZ&%Z5HHoI*?vZ<2I zz}Yl~O`qIM9h+%!vr^bBp8kInhIQtLcVGWL^*rFC-CS3r)ml&r{mazL$2R_91{^;c LdZgj&b65WZR2-yt diff --git a/docs/developer-guide/img/box-layout-y.png b/docs/developer-guide/img/box-layout-y.png index 6c5aa6e082b09406fc956eb7f4c75aed7b17fb2d..aff6e8fa8ba46f7cf2bb6c3cfda1ef567621416d 100644 GIT binary patch literal 9209 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 OpmkSIqxkldm;VpSiWs8+ literal 9115 zcmeHtXH=8hx^7UHz(PU6g@q;}qS8d9_oAqPh$vlO0N8u!qUkjNfX9&g8R6T_{iZMZttkK?<9^B1=z63JqY#{X^9FcrZ3`P?Ou0Yb}Sa5iL8Wp9Ef;&cRJbsAfNI5aXpdX5f z$D?~Qw*tEgv0&ZCO~WF&a(%bGi;QcQfCO>+thxwn*y9RL35#=F-J~3`ppTAWIlKmW zUkj!$Ex*!Zr)I<0?OV+-#73OjM~rz5&-9P=2Lm6s{05z*C{PwUB0>x}VGv}oa^Tv= zOPb0?qLYYT$+XD8_wlPOpzA=MLjxZpT$vmtn*J)0-sNh5Rb4oH)x^5QN6Z0Xk+BO9j(8oEQyVUMAJhRD{ zX{{PI$g`Z%hRH_<5rj5A=g@BVfP`TAO;&@Tz&IB#%og{QfFmTQiL{ zYsuHe?iEXta>bUf*=*dO-FyNM&|syl?7pza!EdQ6i6Syq=tFC0MGTTbLZQpUSAg^I z0lAHWYZ;P>$$NVSI#*NWYNysH{lE&=Itw}%zK+?%jIGIigTO+$MkX{vsTa^MQHsGh zmGD|g)f@=syDV6a5ZDl4y1g;ix3Z~ zQTjqWI8~uvK!J>R=EZ7yB?xl~UwJTurFLA6lx(@y~a`cEL?{sLY)jx04I# zPDvkm%zpM}1vM@*;9iIYib z>zzW6;$E6$_r#2dEqWb=eDA6$b#q!6%+QTJ$dVSBXv!ap>~ZM$gGSerPe-!xpQZFO znw(3NFW)}!ts6dnamCgcUS*pKbTJ6fUo8CQ)5>A@5Xt;fW^-r5rr~NN7CKdVljF2g zWg>Z4@jwn{t{5_yJ3WK+=#WEvBAh*8ZdFsR4w#7jQo^2${mS}pGf&aWB!zc#J+Ag!S?w9;*XaTQph}<~qW_{b62th0b$4a_de|BwqW@Y~*&&whk=4TfOcpUnWwwV8^!(6~x z2`uiL)A^!0vss$OM~}~}3D*xb)*k+ zRNQCjC%IoARNzu&;Z>rl_*@0O{>oWECd*H7{ody)r8QzOwU?buy<+e{{>(tFX+(+lx&emu+OO!V2J9cdtMs z%=O(Ay|YyuqTk%?=b7esXMN|VyJMMwAwA(0@bV96v6N&_S@qf<#XqNB5HqDI8a-RYaV*9@i& zl>$AO-!~^jnn|wXJx4oBpg8@jk~NPNQDvF>ZWYgLm%=v9#Joh+_y#33Y6W#NTx>;ydeyymxmM4Uc-}N-Y#1uW|*ymZj!{t`L$L?Fo z@sDp**#=c2|L;piQpC;WNhjpy1e(VBbF>SU)%&;U2<}nUycJeEjiigJAak763g6(*zo?j<(q`(tp>(Az`f_j za}r~YS-i&Iiea-_n+dQHeo(c2l1GP~_nU(QQwDg6V|L=9{0eOS(WZj4#o{{tcel-| z@thR6IC1M4{<*7?pPI&s^A%5Qu*hj%=w?^wQpl3<^Uz}ZOr%$SOmi@~&7V!EceUyC z2$I67a=d>aT@+$EsCL_J&yXM8GR2NdXhdPyUec;9!jZy{Loc07Lv@&5ctI3mW|TT# z*=XmbC+Ima=%@pyKg0riWNTv%J*4_)zR!4?<>8WjEo*ry$NYBGEyDrZPWEk1ttAT8 zf6H>$(QlLz4$3WlVB9V265v?&NT+2Zx;k`CbO2Sy)y}G?<@v;`Lys~RLO#qs1(+%n z?HYo|K!C%|Q|^#FUE9Q6N8LXjI-8eWd+%_$*^YfG?$VxW_Y3wWG};$(#rA%QrQ@jx zVx}4d&Z=L*iSw76|2OLUmqc&EJB{%Jp8vjMAE5739YUJ7JqX3nD#K+cn3hQgcH#L-Y*uHzYe%LlM?AXRPokgg9p*EkPMGZ7H&2PhH zv9R9=;QprnZp`(s%*P7|!5#Z-6q!FRicJxfT<>7>s=<#32b;d$g-xHkIdl`-WKh6P zoXl~G^{uT5MAxtjSzWU`%ezE^b={QmfS24MD$PW*yMNguYqmY~mm+`})AQ?Q(Uta* z@mkT}ZrgXuP+gP1ukM%Fb+puRelcCW+vfx9H}8*|`@Ki{?nmh%8IZ1lsX3^Jz77*T zIp^y`fmso@;;`%qN}ygX?T(In*+am`>*#%{i*4}~Hn~|(pzBnI)uq1k5o>lD#Y)ys zX815N3EM%c35*_sIKLZ0rr4i3W(^F|uI^Z);wEE(t(mIAtH#>Rj7Km2D`Gxn5O~2c z%B~X0h|F(15c_X`zMc{_bE4hs)jVFqb+jjAK`n|0s{V@xX6N2c)_Eu-y*n8B@ zHNu&OnD983(VqXzHu>FKM``8AwH-kGk`qCQ$oY)Wt~#v|JNE_!CM(bWO#6hSl2GHHVQzqFz8kw>b2W z>a8V!YGrJJuQt__g>Dd>?K9#ImfC+GEPu83|2lp89|Q0J-WmaR+;ikJ1Y8y1;RE=& z3Gdq9&)tguJfHrn*PLDgD#vtNkhMDkd@1h3v(b2Q{a8|fX2S)y0sU??xiz8pt+AK%cO)h!Yddj^RRAU z)nU!B=j%U!QW~yXLpfb(8k?j5-D(vTQU3Ri14e*>DsyNKiMf`q3{kai`L=|%uGi*! zf25Y%HsIhMXtZrn!lwzJ;_z*ob6-TvxCZ7|fFd;tu&utCNhc&2uP}@uy$!D=o6l(I z44=adZ}Xp{>fx+P9Zx7DZR zQ(Wp4Rpvc-=cpHqEU&FZ{}|y_6PEOh5SD z;iZ**paG5O_1j;22i^Tej>wIth@A_2s%LUwoQ3rpy@4f)V{gA?>&G;64D8w4wY5`{ zmPLq%zLql>5q{))bF=@!{gXzr?b;uBGI)>Ae%rZMhy-&DSU(?>k2rPU_^y_!$5FId z)?99@Ny={vH#(DR;$EK#?v>`*UV*rPy0 zsa^%csY>YQg4*@T!LQxwGLva%Xg8OKs1t82g4!og^bqD)U0r=>r^CyWJhO>q$zfxj zMW#>rQ@)3JbRNHiQd!7f)ThX>m>8Wag)x5a7NoIY{1O#6At?N$@#S}-VlvF*zYXGWdNFKc(bZD_sHJ$mzBn-Gyr?6O^JwcR@^SDJ9uS!EzVB69OG*w15Y-g7 zL70j93it~mQ08}=RhGc*Oq<&Z0||mVsuHr&a2tcA@IeO$had9(>z;#85MA|i@p!^V zjT4jeABL(ov#FX8J-BX)w2x0H_9XL@=bD|q3mvpdL#uICH$#LSU7eQHmWN-_{7o+C z#~5W38+tb`4eL^oU8n$u@4i0I>^L?857@l) z;Z{iJ;X-FYyq;>F=F{_iI+O@9-pheckuK1pQslhVSyEB(MM68gy|N|a6TvDd_UuM< zb>GC7urzYbV~Lv*w(E`$PO2L{n;==z)7#kN3ie8?URr6piUy1u^}FD#2%%HO2K)Qp5-@)dY@wiu4?k!6I9ThG4E#N_Ol-jmr4k zY?<1tVFHtM@7cJZEEVXe?GzAbJQg=ix&wMg`wb+TyMNg%_r4A917!?0@N zL84Hb6YytcPqy)o@!G(C8~447l#ED`WhxkCRqDoHNo!FF7^pI}%wz$LL3W@&pWZKU z;kaM7Y?paJPnbEH!Uf%ZJ zaP*u&*tSylJJog}d)VG80EB`rbH#2xgFy+TnJX&i$&0$AJMl(NG|Mx{hVVPOvtR!# zZ;C=A3PxIUSEHFvIYaaJD($j*@O)dEZfDye+CvY;_~iFusz;Y*5#vz=K0QuK@=)J5 zwU8HFc{4PygVnsfssEo!wR7^L@BA>f9B2C`!5vrA9r)V{3Et~4^vZK3iCxc+`7bth zFZp!#KCIj348$jus&!4>|{x2Eg6JYZuOOrI4jvgk7biOfAy-$%VYZ zdhh(n;;wL43b{5f$x@^kvKwK!?FSx=G|*#y^`?CRV;7}CG_wECnWjL73M*+_93k@p zU3Ka}Tc<9(0H*{WS_m6Qb2X1@Bzfc`^M1{1E(LjNE!4y{=Su{WL*$vrb9TygKmA7^0sdwb2a|y>H=moWGYtY!U>~h=rUM!*azgO!^ zR_xqXhd0GewmW{fBk>$jE;9c5Nq){yKzCtm!j;VSuZLVWhH?V* z*7QErCU%;3zS{^Xow<_%uEl(QXG}3huiRpAVQ0T};Xlybe}6N$y@-1|2mp|eaxXm< zcO3RKcr^Qec)^G&b4W@Nz_48E#~sm;G4;LSH*H0fmw9Y z?FBy!OV5X_mE@RBB=kP~IpmhH!vbD1G%9Q_3%NtNBYtrNk9ciX`#LIgD z8VF5O&+ir~^md}CtD=01Ugx{yM1oC!^45f;7%Bw(;&W`PMlw@-Y4EOR26rsH^9^Kp z;3vB?Nhj5nDqyw(ptx=R9bHbym$ni@`GAXa($p0T6>HUBgc!Rk6#Yba?ta^PcL$Um z?Wj1H_crWW(TP+CmDT|#m{WRXcH0TX>#0BHo;whw5SSV+uv{=X6Zp@+(QuPn&O>ta zAJ?M)WDxTxQIQOLE|CVi}|JHne*LA;65B|N#@82o- icM1Uif2Lqd*})OnajMWPp8Ka8z@_t7Oe>9VJ@^j^y8?p% diff --git a/docs/developer-guide/img/flow-layout-center-middle.png b/docs/developer-guide/img/flow-layout-center-middle.png index f67dfa2281b75936119d1ba830abfc1976afc444..291aff0a991f36dc5eb80c2a86182319af8cd5e2 100644 GIT binary patch literal 8650 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 literal 8561 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 I!`qMl16(gyb^rhX diff --git a/docs/developer-guide/img/flow-layout-center.png b/docs/developer-guide/img/flow-layout-center.png index abb0f26a28aee8e35f07ffb89893d2d48944449e..1f1e88ca09554ead7958af632b637e8e1990abf8 100644 GIT binary patch literal 8650 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 literal 8562 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 T*qZwv4}hV8$z|jv=ZF6RO%$0L literal 8621 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 diff --git a/docs/developer-guide/img/flow-layout.png b/docs/developer-guide/img/flow-layout.png index 609f84de599c504c9ee0ba9db4362da12446d070..20825fa27fb14227692fa4f0086a97e86b2dff91 100644 GIT binary patch literal 8416 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 diff --git a/docs/developer-guide/img/grid-layout-2x2.png b/docs/developer-guide/img/grid-layout-2x2.png index ba2329cce9b047b06a29cb95a0783c665742f367..898c1124e72c971c39487865332a62e639f9bb3d 100644 GIT binary patch literal 10897 zcmeI2XHZjH*zb1$K}DJhs5CnkiUooYnqoaPJxU85q!Umep(aETP!O;jLFvj7FoY6F zXn}x4M5P3Ugc3sN2uY|CN(kKGdGC8?-h1cHow+mj!=3YCf7!G5v(|c^wVwU||7JhA zX>mx?+7WtAjFx#WIx|8&6+IeY^7&=?eg+h2pATwY&$$+{L7;jkh!0G9XLFKeg$0q1Ue0R{8-ppNLoe=D{}C#r0ovl%Zg>Y(T^{< z91}d)_{TpFvg6{Bei8RO0w?5E7^|hUT9!w&lkKAc?i{9H@A1AKlq^~-YW3?#(dLrF z*^%$mX7-hg1Z{;%*^H{06RFsKsM+fp(n`wn)&$F_Ku;KPaIUT>TOGj;JBwvA#Wxpg z`t=xRuL3iXwC<4+zZ}h(tnz%@x*$KC2R+%1k+ETQqs-4VS8gwrhbinwfY>?bsZ0He(RiN9hsTEGWQEEK{*>f6DJtrmL)A) zbm(M5raji7XNl+jHn?qhH0p*{h32v;^R|#Q@f;7pr+(z@vC&rSEiOZlxg(=#9fbx? zM9G}aYN=&2r`z@gkm;}eFM;)qq@)z8tU?w0=lx#1oAYcMsX)Yqx$2zf>>W1C@ipuD z`kgI&@8`-Zi9oDtT76!&?d^5nl@}w0Al?IPO{QA{KA)0!1J z{)0|t1FN%}>re{xbwqik0(x`O*;AhGT&oqD?M!;V((^Vkv7#i?d3{uyB6~!|o>6^i z-t9u&%wO5g2*lk4{*UFq05)Vt8a+rzXhy*@C+3-75N9i%@T3Z z^izE<5%S3FP1W1pN&MQ4y%^O8@M`+dlae$jgMtv6i;fPxN_Ow{Lr!i+Vk)y&`!y{z zJg=YNuW{cKmLkY^c<*OVf_g)DqwCq5{CReqPPg~_=r3!#2wjY;`{DK7g2Y+?sKpfV z1InWtsy#H?4nDcQRe{zprFkFP@`1Zmqq5nfKxALhj00^huK(DplCI|np*}5f8~eR- zFAjlg{acN=oc-f2E#iKasr;vvQlxfjsLo6ZKN>lBQvto&#cxdvH`S5PsAQk8=Ik23 z=84rLMe>_Qk|6fD-wB~@)l-PpY)2mHGx6y8Gf>R#W5FW@p3S za`#QxQ^L!m3=Z{(%w7weu?g*7##af=#mF1n<~l-E$}C6i>QVM*;TxY9;GtTYzv6JG z4{#@^Cc%PL5l&}5n=_DL_<0ret=;0-A`yLwEon-V!D;>)aZl~-GP!|^2?my!z)94K z0!2$d1+FlqS3>A~wM^0?kF4<&8mjf)74>BO@E4xL^|2HNKb?6Rff3DxD`ZDC4=glF z){MV>MFkg&<~r6o*DO9-){SW|6SlHUMhKM=r@d*KQlVwu)2~x|e1r>QbRo&v^dP6D;27 zIWW);;A70mA15mN-p^Gbl!uI}eQxO@3+xgPBY=LxN4x0ZtADdzi)Hcdgon$!<;`1H z&^UP&2TX=($}^!wJZeJyel+5%LOFbr`oQs9^hA8cH`BqF(PyhN@0BVpF+SH67&Q>) z7dGZ~+f_U1C&C{aMB7$rCU_K8fwAr&FLg@v3a4T`>yJ$&MSOf-uH21NIihq9pxT4H z^VVoeZod1VIk`P-i-X7khqiM7$NaV-pS-4HM?~yJ)AmPyswzlR!4d$jxM8)mP-no> zPP^JgG-2b2BSka}%RGM66Ud&QT|AK8noX>Lc(B0@(!@`M){B0z@wP@TmJ@b}(1zM_ zK|0rHmo}yva!QNck@peTZhmRF5nbW9a7r)9Z!@cfXucOIm+u?&uVM>c8kQ5!r z%q6@fp-Sk?Ul*S_bz7Vo?>%lFzDW9z#LR534*oG62TR{JloF?gF+h0RfL4r1>vxNn zCe;f(H-c>4TMt?T{l|)&z(}5D)-uk{lrmu-*UO^HUAL?~*56lJ!WPu!Vq8UZMQiff z1-Nn^qo9P<`)T!=X^CG{7VV)pZezAApe0rGu9wYanw|tsGxeV2aZq)un($m>bfH)- z`~)k)GjN;BwZ-m%5}{7XFVe)Pc)5p$$wjJuPXRpbuS!w&?k*vV9xIN8JnVg3?=kz+ zDP3*ZY#XoXNJ01Zx5|i8ahpvnStMi?w@4F9^|35iDwizd$`HEn2|AWlZ)4p>YAMS} z1qM7)LEdTh2}wVuBRn-g-puJk?G}%28rVfbfMR9~%H`mvwb|PA>&m`ecImEsGlXAm z2{WM{=dAQ$)+bOTmyznFj$zH%JDH`|zs;m|QRQO{KihX?Llu68^TIWi0|Qrn{1um4 z7W-TqXyQa4vJnU0d{22ht^Rk~V42@s>^~EjK2e5DoYu>4XH*yxI=@?LahsQ}02?b4 zpDh;e0q@^Llyf}+XwDD(Bp9quGS4bAJ?U6=o--B*9v{gOgAY1(KCdVIo|2{T+@q|P z7v^@;lI=pBc)5VbDiqo|ah$tN74^x8QoGbHYB+w_!Ax+N`b2ZN8NE7Xf+nkHS*$74 zxh8E=Tbpswk~X;0n8o_O+yQl%UHfCQwDb-5Fm_LNQb|+&oBEo6h7sy~c!S5l%6g@h z#;7>hDZA&J@7XzZ0?_{XnG_QGH2EQYyd=QyNd2J(n5zXgz`d)YP9Olz(ExTx282q*mL{HFDJu|jw#Hrrn#NqI#uOlt# z62^Y3zAEqeg>eKIIKz4kFoz&Gl1ExJ;bafQ$pP%?p@J$cCr4X=rH84!04w|KCo-f_ zAz@5>Ww!cl7ODU@lR+bD_PVLw^r|{C^|ikXz^f!t8_RWFHd!NUTA9|}#7lVXyIJf& zy*yMoroP@eOHgGZs4(Y!y>+BgZFZk8klsKnn&0<>_(0U4cO5hQ%UQ=l-WPmBuUquu zuga^emS1aPq``e?nrh#z(T9Lpq0_m(Ctct4aeG1D!J^tn^)fKI>I2!Lx$R3kaVn3f zH)@J~ZyU;$c;YqNi$oJ%abALzZ{sU+OqWzm*78O9Zj|*bJcCMdAFf?;ClCO|5z72UmjDhcC?Kp56Ft1;(IPz=EM-|9$%nnJr zhwm3X{VOfAIOkN91+iNSG9!_pxi7c@Y9(Aoe6;ySSUeR`milJKrqB^J?G=dsq3+_m zD`LEJKX;E^OX$51{zlLuM{w~EHGtrJ_EW&l&ZS_Svq-MbBF|I9f3V3fj-QTa_+e7q zKkqW`I$nZ6`1cK*<2|Q669|Dm^%%ynT?hPzAN9^2o&MXQOEmA2zgt-rfa4ZfMV<#Z zFPJDP+<9#52Xz&3Sz?;wvU5Gcl6PY0ocblxp+yZj6Eye6$-7U0AvWO^4aichOcW{8%?LHZ@WJm(Be4RWQ=;K z3yE*%z4Fa4@mwbMv!nU^s&0_C&Ue=AA;d3Y6!=@Ak*tUCHdLhbmdp}-IYNplKS~a> zTV$|H9xa*tcZqPKtzYjNC!}O7Z8Og>O|u(id+4%#r=!o2O2lTFjzLyNw59AlNtJ&)kSI+6wbQ1cpZ*p|4rYV_;XJTjBo)-JF% zkBKpI+Yimwlo`H$fII?v+#65gtrsXj`)My|@GU_q!@Ev&pl!;PFOjDrwgm2D8G_0u z0?H>tt0YDqoIc2==?GN0@u$bx3#~O0Z{^*D_tzS7i$xB)U54y5&d|iL+?b}o;j6!X zrcH4A8sp7lYyEyqTg;9&lm1U!+S<9S+#SG~n+E}qOXHv0hMXC{Y#t-?-@!k<))P5+ z{ML6pH!~$6>6eAxN@w#WL62|T!6)y#9S?judJ1~&=?4?QZMSUkkN@Dd-rdc|8H``Zai{T<(3*9kF~{xU%B7*+T9n!_)v`aAroh@AaSXknYH*w5Q8 ztw%EJLW@ZdjJJU*CF7nG&WCrLF)mt?6%3pIcCi!-gFHJ5oY&sfc=B|?Ut%HGly%p> z^mB2?fJK9iWaZ!xocrYFE?(%ThceAo*(=ub)D{wSJz!!sL4ppxQ#vf)g}OyY9lQZ} z`tCy?k$;M%-Zlj$BG)CNQDKA>X3hd1$`=krpjgQ)_Vufr}9 z+ONFSz@!>2G#wc)U!v3G1C_Y65!z&cIxWD_-ptnUEwtqlJN|aGt$xk)*M+gNJ?{O} zJ|5z(O#9_xnthq;#U;gW^X@67oUWO_-z_=d4UHy|N0>H683;4ooSMz^5`-S+`q~KO zWy5W!a9iduM!hIOEX}|+bMcFAb8BEkI0x6J!(5mcDX`qchea%PjnBK&%^eJJ)pIy; zNL?F>(O!C51GPTl_9NlOcyKQ`r8KOrI%MI!hk1_*F~q;70ioCsF;~=z#7|b3^5ww| zH+N+lRfq97fu%4n)YweQ-cYsbJjH`}euewy-}hBz&@~5+021OCygK@IJ&+A_?&)kh zz8S&64)1#F{+Gul-{3nM9lZ_YuW24|?1kI1kdQ zNlLEv*)S(acDv<(OU9# zLjY?3&@e)7E~6@tW@VZh0EP0+0nfWwK#NVMrS|E(qi&v=l(K5y*!WqPl6u=$v|Z(n zdX;bojj>tDZx!x>iX~?OmHw2Eku;DnmJw{2IlBT}#~tqMTcB zST6#h7Il9>KC#qn{ST89(1ze@^WG7>`*d48MXe+2UI2MP#b7nhH^XLE#FeuFebpF5 zPZKfW_UD{GGr65U5+6O)uiN)ji3{JOC&N6V^9|Bs*B9Dbi_){iNbL&oB%I>j5Vfbp z$0CRG z$%c(}DGfRLOM4iMa`-Qn7mDG!5BmCoQS{oRgf{VyvQcuGrjhf;`*~+fC64A=-JTH; zep}WsQAeXBHG24?<{i4N%k)|KxY4hp7A3x}0JJfV;xRncdv>N({b%N_#H-r+X-X7J zY}7l<9`yeGr-2N37+t5>_0V!nLsW@%;BnCF&H2y)ev531M)aLf;$8L&Tr+PrDw@3J z+AstnOBNbr$G&oHc|ySY_a!X`U@LvV3d7|m(`4P{QcfVo@>_=r(?MBlk^C%u^ zW`?k)Fa*D%86I4Ex+7u*J5n0B%IaS`4(g3gZXjP(vRo2z7nlTA)}>_o2MCoKoChy;BzIWs)uFEE%7|gyQrz3X zLIa!gWYDYnIJQ+0eSWOhI94-I6(Aduss^~J{lPNmH~lsOC9KYc1wgNb+E#pboc&a3 zIyM*d`uA8U4OO=IZCGQIE`0sNc=>$mXPZ{+`$D=_*UV`|`qHFbVOVIA)H?|z!kf^3 zYgy5X{#mHchagp!2PiJEpZV${(flu@osB6;8@5&zQ@ht*hicSSU>aD-p;oQrm&Y)bss*o_FBH zMY5>1VMtGWLZIPByBjOHcsxj9-;T+#3$?HD=mpH6KKKTXLxY-Vg+TA z^^)Y2$)D?MmdfAAbuA+cH5%E7SC)D5BN3Z(lbZ{xK_yxI&N!J$HMnvvBQEr_iPv8g zS>@1SePjCZIxRu_T8*RaCOivLdqhSN5kj3#FPDP#xUm5|&(Ok0!FCdYbIm&iv`Y;x zeT>^bpO7q$ePmoJ!n@G$IEgPTh~CF`KyeU%Q){R?BJa7 zi_rgt_^-15U)u#MKnU2SwcQxl zS0;@H&bS=fawbg&xBu%!{xw+t)qEznrzIB;X7U5+4c37ZGI=Q{QejYQY;WDW3!ZIf z2@%8%6nC}=xw>MYQcC4jB+$+lb27#FH@vFE8)q#x0+vQ<$y*|{DsVEU!L47G3hrsE z&9@G;5jx|XQa@{p+@TaieOly8pA3LZUX1>62ylL<3JO~(Bqzoy$jO<4HBKgzmVZL) z9d|TFF_eVnaIz^@yz1rlNS*F}U8%K~9Rc!al{!{TbNHSPzquAmes#ph^R%`?YP*dT z3SNV>P|*jyE_DSg>~!BF^ke^VD!SK!nK)2y+m>Fbcj37Zl+(M!EP)BX|F9#x7?Fb@ z+wTwKZ#>t8tEao2 zGb>49tg#F*0iugf*$>!n*MTM8O+4a$Yx z@AfCow-w{Ypuw9*Pb+JtXctYbjix3QWt)=<8KonVOVVQ=fbt31{2ScH+F38yQRJv0`?vjM14tR2Gcq|&{o^{IVYtso@xv{ zek}uNYefjp!N^Q&Ge>Rhu<<1Q`n9QZ-A%BF-RL;wNQOkCHRZntZh*JY%7uAb5?muA z$PO2^xPU>-JPIy?L3bFFNgUW40vEgS`E8(@m__FI#H;d?`au@=w-k19j6h*)(swj& z$#s+048mN=$Y1jXdkYLgp!b<0Jk0o>G)uLfB~HWv^wltSpL;KY7CNPPZsb`|Uv|v0 znqbrD|FqN-$=!#V<35NdbgAgoV;pssYkk8{gTlyl3JE>C!p+H}cAdI;a!IG0P+bD4 zuk`poBy@P+^ohAwU8UH{)utHd!c=?d*qr6lV)f;Rep)Dp23fIu05F8xX3Yca4FnrW z5_AGVTa6T0=c0aw_-sk4K=bk#wa%QHI0GXrCVFkdvS%7x(0K@0EYAWI^`q|zMCF$< zN0eU7gcK%qSqsQeiu5c36;k@Xhj-?LY&XVLNRjelieCZ0!sFh$I(KFSh6fj0{N80R zZ7ej18tFd4myrtglwOj1q&DYNh`^x2!pxipy8wR#`;7pYUZeE=4wNNDV*J*zR#m14 zi}#>c`z=&*r3`xuOKAfzNaZV5o3l;>^eVt5306_L__0a>?W)4G4~R7VJst#f0k(wq z&G5`Ckh_#D@o+UrsBBq)k8r=^ZYfHPg^CL@D^uXG;|(GB{)xiKWDJ!Pua#LQb&vhR zv1JSr5PgjdR#JNDs1$h|bRD4iPsRl5037hiYmk?)ZVmR4qrdZlpVCOSj17Wa?#*w$ zplTTAW+g6W+4S9Y(R8%o4z*SRJ(`wOO2ciml+il=BTK(0fe&O{QINA@4b;qajIiS= z8X8gTrZ`=wDCl(>M`TDjhU@*4TPD3eQmrXhkZeR)7YbnqB$ZiS&?m7qo(Ae~B#mI> zDW^)Z;c(q+l&JtaH%noXVcRhU2^o9qQJl4yYcwT|c7v!y5kcOlX_BREMr9y| zCXTaDQT)A6jTf`38Y*5B5Y}_w6mXD>zs~iniId$A-JPkep)v)BVvq6#0bI}>eS7{J z^gr5FGs18sTO@aN%Y;;l`d6aDH1CByF#{$%1cQ(^CVJ%4EbHt1$LaO8MO9c0F$0b8 zkrza)nh4Ns zz9YS@4s(GwT#-mg=KB*m+)pbPO>ZGyGFN0MQE03Yy>pA??wvHhP->E*h`bAnT-y2q zCE3=x<4+C)Nu^|~T8v;>&&@pm=aRaTm?R_Y9|7p{zt^@KJ-_YuLPT7mw$7cuo276k>e%PLWg1e! z_jertQ12(fKXB%Yg0B)T=WDqxa*Li|Wzd>C1;^55Pvil#fMZ-DBnNL15pAKlEB_ft zKYC=9YCsaeMvY|RW_6G*XyqNCTSgZi@=fb0@t&2xiI;h81fhCI?H z;_h`<1NQv(^YhgYsTX$dF5CO`rgs^&?1`1^{pXnJKPHa%8O#LbLrts(Ge>17_;w}{ zmj~)-2G@ptb1M92&p<^ z8ebj7E)JkS^$mD0l(4>G>tm6J6cy-ZXQNy;3u_PCa*j`xjwU7q91?y;H#_Am`qz!= zis-;hxDL)nyoQIe--;5?DSJC@_VxeRgdP`83f!e)AqGCUm>LDwGBM|mMrkodSe1k^qC#F zf^(5Pq!)_7y6$*vBimsODq6+07+?_b-D~NwkzuJl)oY??E+3aqrnvO$nKxYFm%*d? zJ-$Qm;7YAlOyIAv97lI*H{)Cz9TL7NXYNi5@Y*?Ki6P64?MvZP zCFv?(^S-F_^RKW}oB5fHr?-O>W1VF)wKTq+8`bo4onUC}$&tF4_VlY?HM`dCDs$}s z(imHx21sXi$AR+W7)OdRCk&=*^58sHsANG}s(YJg5EGlQQu_@xlMa9(1o8%;bBs>Rz{Y;8vGn>gDAB3x^5agmEAdyV?otdca;+9Ty4b1Vk+ScB`53|~zelwlKK4KZBfP}}?Oob=Y7Uw?U<1K*XH}yju11@cgn0m$HQQ9q17sGj6F>6M!|y93<~qx^o)3;w^3xExVeptp_Z?SqalHQDU}1d=5MPaQhtSYI}+AkoA636_+&HWG^4ulgdN{B9UXxKIm8m-SC@ z28`qoQg4rQ8iTvPiQnB&J`M%yA|>gQPc5w7`W0WvPmx^5$;otK^Fz|BX)Tw5tHal=n7(y|Ev@Fz&n^F|5Eg_X3{Stq0R;HJJTy|BEi_C++!3zdjl*$ev82^$@Nq)fvdN&9mr^F~;&u7W8|-G;IAjaL`Bzw2@u+v#p;cNi^R=wl-0sJ4 zD4669Z*@%}`i)ljxRgBZU87x@(~6DyW30=o)?_#Bd#z@(>4H#>xW~{y6AEaJ!C8je z4Wllo&|8a%#=P&LOyidym+fCb)#B>ZICxT$cO;FG9afq$m3}GE1QPU8a$0%3C+@*r z(kY28%^(XNTnczsO&idDvPD#f?uk@=`@p!b3g?%mr&S^r1HeH(JpE!~0AWTpQXs*; z3xnS~B^~UElaw&KZ!IP`TT6u;&TCQ%aVOFUQ$rp;hV4xpO}!)egxpy`^_l49PEQBJ z`=;LBOI*)diAwFs4ri9aavmFNznM(~pr<`~g^5B1mmJ!^=VG3vca&4S{GO`;uRdS? zTwr;CnZDZ4dvQ@<4&@rZgwHcRjK6>#C7D)mOI+<9rL@+GV~DyBwqVNy<^vartOfcZ zF^Ob(JnU5>+sRDQNYc>^?I&vg0&ue+c*(q=MaLI8-8qwc=Md!R)J-=tF`~F>HsgM? zz~y)Zbhb7!M)QBoPx=HD4)s3w*X&#iWyXO7K}(Ej!jE zdIQ{&OcZh9Epq3Os$peL^Tg%|;XJlM80w+Zs(wNPnVivviD5 zTO5H-zD=5v^;X_Y@As?%P8&EOI}mYtms^GqE`NAGP$Lvj5JEG$E^Fu)EFth`EUxxxaYU^g)2Q0NQh3?aDy%wHx!dlniQyeD8w#++_90zZByTS<^7iHquw{B zd7SC(P4krzEh(|(PwvF0;@woDMg4mH%fW8f_8HzH**zpgnz`J#m1PD3g0Kl6F=o0A z;nOY%W=RJ`HEj9DW**jHc{rzQU9oKHOVj0Hre(u{Lr-rU02(3r8Nq=kc`@mY$*?C3 zM?ihusiDR#Y;nOtK6;7D+a1yv6a>6t>WP<8SfV^%_71yPW{<}cuNP+O(KNq^Wpo3RDukJ-oxjFK^lPQaiisX03A4pX0 zz>Ae#MDl}#FA~?~IXl+7dDN^kh%UN*4*&vFdw#HX)UKXGdwU`;)%S=}jkbz|VN;hw zwF4x@YtfrH0wfga`5WKv4)hHkqo3GH6?b0)K=LHLBR^K2Gx;6gB$0{49{ls`(O+p%bz>n-|^} z2~VP`*uU0Y`lG1C;e(e5kzcgKnEo~h5AbRngg)+jv;^+2XxdAt7!o#EBoO*K)$iF!3eBb$s{?xwsAk z4|+u+sws*=_pHV`h+ip^onEx)kliN^X)xwnWFLwSU%0|_+>DF4*>`=WCm((Rb#SxO z8v0!);a%ee$+zDvT$Gylc<@^u5Oa@o4cPj-RZs5@`ZIfwgg2Rq)wkUQ5sx(+WkhUn zR&NrT|2bG{ORaXg4ZBConu6+AiT<27pe9A&z~wAd=S!eLvY)iG*QT_8=fxy^q`r*6 zm7V}UI9y|Ue`eFlPOaKzBg2bQ;d^lYBUgtUI}B)7L6Zl$ga+`aAIsz7!wu2*7~U2< zd2KPc0nz((quZ@5rbxGl8q;S}FOW*q#HRC*)FBSj)en14MV5QL;`KO#O{Xa0^9LNY z$C9KI6adD>1a01aNqpmZ`#zwCuR5sju6sHDc~zC@x}-Nn^~I4t?x%H_E#03SOeMb+ zxb$Y6P^gaBT6&8{wyDH9Qcbk$%6QmqV)h;Qy-|(yO*)(GuBWt?i$mVD-1?3Tl<;~D zo5wl6S`cS1UfQPqo`9cBDULZ0N@rqC9xu^+~l?98Hhv6Nw8cOa@xu63L%HHFISQutn`$MeR$?OyZ|$ibi|8sre=T45B2Ts zC5PVM5;#@HVFtYz0Jx>5NMt2>%nn+{$-E({(u>u*hdLQTuIas#N@25Q-@9B*0@p5{ zY?yiJs$EG_3?;J6))++A-d|gy3U3pKGF0Zm_ukb;Reri~;?UIJ~7u7`7fCFN9ItF8faqDl1*E;+z6%ybXgogRIO#Kcz`Z)v) z+1Z@_194wEO+Df`IL8Swy&vd+^GwzbasJeVC;!jl(a|^?s|DKsavMm)|5KON8z;q_ z(RQizrplcq-P=Ky_wV(rcNea^@$A?!QSu(-s>7d)ijeOfLsx7II?I4wItgC3uC^=$ zZ25AnM)I%c3F*(yC4t_V?e%s!{ptwllHT88{-@L?!x6;m>UPWI&z6Ny|1mhpv$-Ah zG;f2nH^D9TGJ9tLzawoZJuT+;DWkfB2~t7loy{u2G2g^$ap%J$papEUV*J}Z;hW*oUCxX#as*|0&F$fvwlq9jyi)suq-&C3T^=wpnISFW$f`@!!5=jDoHPlZ-$INzs2eo1V3Jzzn6lI0Kv+D~0jJwx!YBHO}KF^ca zI3-lz?yC09QIV_O+|2!j2feTqT#%Q81JIx1+{ViTu%|GQ;APcs{ZzwTAAG{8XZ4qY z>LS|`1C&xp0K2#WDp~mBk&~8F{isR6oM6O5G9=MW;`Q|FHK9ji=s0t<2V0T-gnX_{-{$d!1x2QRqPB5Q!dwx2D!MejY;v9=9jfm3)5{%RV0XU0!8 zfR|;K905T%xPmA}Gt=n5AKEuR**=u#Nv(z6JSZvaI5I!5Z|3gu4k!Qf zgZg&Y?Y@6ILU*PeDuW8`7Px$Rwj`{ayXAg|J}Z(oEyty=)8XZlJ2B`{>%nU*yK+e~ zgXX3MRf8M-JaHI9vB$S#uA*YasjVm$%t=w}zM;~3eC*rDvLe|zg8MJprme0r@$!h@ zW}9$>o(9Q!=kK;}=!+DFgS+MXjwOM@t37FcM2=hEWC~Y9 zg0$=LaJd_=5Rb(hs~2x_6BTb4IG2i0R>e-<>$q;fGgu*EM{_Th-U*{QLX1N>3jT;f zf$SlM*5)l_bIBY3>LBqfVZu-qT;K7kM6=l@axp0Q3^!zJ24f-P>@m@X_oFId97`U_ zt$$Vfx#?@_=)$*pUkSQb@Zls7wPMUA5ax1&+XT<)2$MhCL0|8`eXUX{6S8qVExLZn zx8=074J~c0l!25NMY5D4om=|y8!O|@APT*8*+1j~<yb1V=7}vpS6($o-o0d#in4Nn(zno>`?+AdnNhXXFS!$x27w zT3-IYB@l33!`*j_U4I{46wa~IFD)O7Y@AOUBAa4;WDlGUmcUH+hr0kujb~-*#_5cn zXX!p&D5UHS+kgek3t;G)`nak^iHQE)t~93QYj`qU`F?s%9I?g@T5I88u(=jTlgCzC zbS_@^xDU6G20xcAgbf(w%kP(ZDAOGh-j=ZYs^xdjCWa3Te5y3XIbI0M&IpcLX`QO> z7)oM|ii7tvU{}>QWq+Tjnj`f_;sigmj6wg|rK&t(yn_LJ%XquTzWT3@upPFXC-~h2 zs!b_y-|sAZ6GSQs=+Tx0tMv(WJOY5MmIMZfGoFg7aa|~KvOFp}E(cQ8BxdDVwn6JQ zyjYi{QpL+e9#MdxDKGz`?2AVp`Zu7kFXF*#Gz3V0BCo+AN;{m0imzTuNR`!D4|Ot& zS($dZ>D;Kf6FGkHg2U@_$}$9Bt=bo;4NaZ~W_U28cf2|+tM|@ww3{UVn%y_@p0g0z z8Raw7_ef{U{)z_T@6nsx zJJG^2h%%21m%$Kyb@G-;d2ghyo9)D&Clhr-@Q@%W(vWDFn3kgEtUszhlI+_k9gN4a zItN-~{A3*+=r9*|GQNRW-rq1XaP`fc=9>9<7;q_D-r%PaarJLuASYSdK`$k?Z5`v~ zStb`_e)fP@W1KzP86(#K`K?-dV6Z(27m**^mg12!CmKyMX-_!k+3#p}A7Un~I3@aX z?c5(EQQrU)&o+swcIK=|@8lA#M?`g1ny{Mk<)O@$apIs%2xkX9>pcDnx}uQau*5(S zC25^oAgE$%m&{fo9dBQO6Zq9Cvdi0lk4hJp*SCIlD5*8CgdJ7u!w>^PXCEsHH{#N1 zOTh^Y?PfUTX%bCjRjGtWxE3#op(@zKE&nR+OjeDXnlKQ24cS6hr#>Q&eE|qBycj06 zGEX=j?CYJAyoA00l1wceJrm=p2#tfs0STub5{(`h~YL%+Ng%Cr% z2dV_pgy>*a(BKv&iq+Ser>wgm%HI7~Bvw@&DJ~LlO3oz5QA;4OHWozEf`grauJ{T9 za<~WgO?XDxxoA0*{CIW6v%vuMNm*Y=Bi}OA@Ge`5jVFcL_yH%owu3Z7c-^gJUzWo>OG1RgQc^TdN@&@=GmP%BfgT4;Yb$1|9-Vva8`+?k!y`v;94ArfJgijK=eP_g;? z2A`wK-hUt(=tU{B9c$E>xae?YU{4;&@)jNk%Xy^kF8|uZ5=UiGaME~;Yn60$Zw=aI zQ?jRh?6E_`**kym^BiB=&6;pr8b43X&8lPR!$Ja+P$0Qq$zJ(m!~UR|q*mqa{k8PyV-_YxJ^pApde_ z(6Tp=?|@d^*rTnn3goV5e$!u1RWNdl~T zSE^@qbro66Jy$t%V_J8toEX;*0gM}#Hf?P{l}ui)(-rhuTfMjbX)smG&;9Y@QF;~B z{^GYcy8>h+)}LOd+T09KJQ@$+u4GdDum`mM?QK^zL+QSB@RZFy9nE~KKO1uTPb5^- zz-fLmKWiZHv$w73Pw{ilhYI08od?UnSjkjCyWHACl6ovST9&7V*qg_z-l#3Zx&re^ z_X!UsWYo;A6c?0#wO`94@vUN|FY)7_aC1HRq!gs(xt}5j7r!ZVNC2p$cA5+;2tJsS9vBbDCRsQFMQk(Yt-hj zW~kNgOJ%NZ!KmU{ZdoxWOAVQ%#clr)tjS8QqgL|PX1#SUC}c7o=s!S&{h9u>5cKZ) v()hoR*#FPIGPYtH=*{_COI@#RaiyjZoVyF=kgooNC+Ng6*Q5BK{crvkSEses diff --git a/docs/developer-guide/img/grid-layout-2x4.png b/docs/developer-guide/img/grid-layout-2x4.png index af3242b504a71d0050708bf353eed9985bd58fc4..34f340e6257f884812630378383f5364684b2268 100644 GIT binary patch literal 10597 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 diff --git a/docs/developer-guide/img/grid-layout-autofit-landscape.png b/docs/developer-guide/img/grid-layout-autofit-landscape.png index 4cf353d56262515b609816626450cee82f0b71c9..e01088fc2ed9e90a61852ac40e9ef0c9273a4818 100644 GIT binary patch literal 10153 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 literal 10033 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 diff --git a/docs/developer-guide/img/grid-layout-autofit-portrait.png b/docs/developer-guide/img/grid-layout-autofit-portrait.png index 7e62c765a54bdf6ec48283bcef91d1ec283323bd..4404b3936a58ff839bec1e7b3a4241c0008d1c78 100644 GIT binary patch literal 11441 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 literal 10691 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 J{(|>|{{p1=v$FsI diff --git a/docs/developer-guide/img/gridbag-layout.png b/docs/developer-guide/img/gridbag-layout.png index e9c6b977d5f69b4673345a7b275ca1f413ce2d07..651217b3dedf9498f2b55a94b19eac113e34efab 100644 GIT binary patch literal 10780 zcmeHtXH=6-yKaIYib}Bnz6gjYs353x5D-C-j`U)r7wG~CLI}Y^Q9x9rcR_kWlLQh< zR0NR{T4*7Fg&L9|EkFqD=@Mw5g4d68 z*j;ID@zAvQ_NsZQ4g_-r3h&p7i*Tz&e`IZD6#@9%4V}q@&Yz;3$sOlke=G4z7cn zaAf*IFE+SJEIiH_Bp3YFOd~#L9w9A3Uzqzoiun} zZb)zdsfL(HWYApUHE^3zMXxUhr%#YoNk>SjbDNC2QWJaJpyYRUAt{ptOd)0N20+P# zO%TBzC;PPXwhx$=7FV&8YYt}0K`4xoSQ!!(hikxgwtn-)idR&|h$Zg6G zMANf+(_gdK%=nCqcp5d`{k3NQZ1&6c2d5RS9+p3~7URl)jL*)tQyLP%g;K|pjV5c! zpN3m{nMa(qhMV(xwtE`C|5y~OCM(o!1dBxpNdgnB*&2+Q)PT9!Q-|Arj-<3?4yM;& za^Iq>wl2$53mQK$AeLEOG?TZtUg=g#SWL|6RIa=GcxrZ1tFcONF97aeDiNhF zACl4=k&ylU4jy-{`D;T=hlrJnl9Cult$`_jiW(&Enna1Q?u3hCDu`1gf4|Q_BpLVvE(a3IclpY zj+-4c&9H@p?7YGP0qk@7ddbW%cJs3)?dWGE-zv4G3EXu)|}^<=5OH-s37k=?@$|n#;g`Ru2iocxfnHv=*~&lsA!e#tQ04t?BVKs zg4nKzhKpwYD1O{P(kqpCJob~$8(kBA=Eh%qI0i$*wCVnH5CQfM$9}EHxcUcH7W7rc z=N@(0KqF+pZXR-#O;AV-I8p3BiBg*b1ok)AlXX!*>5xwz{fB*9jT?cL%ZM0z_G%IS zqi-rMg2KkvLpYEXKMfk-0dZr@2LWNeZ$Zt{i^9122YDDSP*b>Puj+_qt@LW$j~O26 z9y?P>ZAebQ)U^@6v0Oy`jZ&G`UD4pH46&#hK9&o3wd`w83dl&atFm9^2-FC-7R0HV zjZ01WLAA|5{WeSL%6lD!UCG3f6;Ps;5RRq{H5dTz(mjXWkk=1!L}OgERq1!PrW)yO zU$d0D^)W7{O#D{oM6c|0&==x&zX-!e@H|AY;Y9h7Ms)lIC-4kx7Zm^MSm|C^IM`fH%twh5q_@+W7PMhi z0npfVl*ESSDJk^F)WjT%AgbXrUX973T37*DuKA$rppsh^TY0@1K&nlHPR{7m(zh{< zW#`NZV%yB<6bc^h7eAx0;WaYIE(gkqd3_8w^CrI^1%cm9REgPP?73mf6m-iNaoYZJ zt_v$q1%f-W6@Vs^?2u;s9Syl-8tdHC_RXeX6^A86U@R432W4}^mV?cY)<%$eyH!_? zL49=VkG=6<3(T?S2t1!$-Ddzm7hue*Bg9RWvftH3t`@vFfbJB)DbdeIVok~bku=j1 z4`d`*w2qWSA8u*1v0`Pm#E$WrZZqRu6?!kMg;}{{qZHn!7nl297}ZLixR6od2>Qg@ z`x8-Of6t~Yw(7~9t?7Ym20@|{9ay1&KC@Jr+=^4vgiWvW45K_AC}x%cS`03*Thh!_Fz=#uy2q$ zZyU8k$n~hTN@{rCioom-E&P5SBBjtk7OP43c8~;!8ICL&Ni2=!eYeUIhH7jjtqwx| z_U#z&+47rpuPNcRc5JpbI$~Sg-wJ-^Sf`$B!o!hrYFH0scxjP0hrLv7kUGL>ACx?2 zW6#5F_x)}*mVg)=%~<%0r-r7lDd+a!DgBgG6rBz;08wJUk1kRk>_y9tbUQ>|Rq=F5 z`Os$)If$?ogLPEmcMey;4wDslXhMU3)?S{&fso?GJ|B8e*lwxKY1%Cu@23OULwWk! z#vE%{x%Vqc_bMHfvb4#=R4M4>MT1NuJ!x}p`>@9q)BWW^Xi~1!?kHXmcqg8|K=DBa z!HgHb$e*3^L~e12MN@gW>**hS*fIjd|Ax9;ICzi{4=Qh2G`H04<;LOJP@=Ve_gwClK6 zd)l)(f@k3X;jFar5Ldr4DqwF^Hh7<{x^T3K*+HjDR&`6PC-sG&et#v5`_!-?uo4>M z7wTCBs0e zD?wJ~*1FLUAQZ$i2<$qtz6kIV-Rz44r0%;r`l7D)RkO`yy*-BwY&?9K5tbpTO*j(; zzK(X(D~&aJLLMbLubnN9;B7iIX_XsBAN>A2>OBc55 zQ}m_8 zxun5$m|~bzXt_Kpi{YJNuf9QSnR8i$6ofb7&6pyqw-*m-heUg8TkKVh^@MxHSsoZy z1F*PdHzQ|wgXF~| zCmfqup)t2#;Dg9!*THFnexs!b9%vu1^)FUAq@O#Kb2jBoHURnB^|7AX@HQ-*!1RH` zKWJ#H=9TQ+i!7!W3T{99kjxcg1z%WP>NIWqamYyxdFl=H3uSwB`zS8GlmYdW?Se;V z@xUZ0cIY|Lq)JbKp?XNc=>6ODx8n!(S*cfenjmH7HSjWZiXK9JkayE2cjMVDPDbE0 z6-&7g%7ef-Oc+?o?pE`@1`*mIqjF(5r><#-R-v(r8FMFPEr~X{pm_-C@EUsyqA@AW za~Hx|v1NdP#)0XL*MN3QVKW7lo180Y{CE)xjT`U@nmPomGZSeVpy|va_dPDdL{>6=<21HB09%HbfelnKL*zv;2HvwmA8Kv%k z5i-mGdMNcqFVe!O$98zNkdRpUSHEEW-7F6ua!u-@gsgnUSa|@%+@{9+dVO()2UC4M zD`n?F6El)>11JqfKQwthbOKqhucw{6RY-`a$0k^Fv#C*!dNBG?J95y<@^thm*nP;= z6D~Gs0No|F7{}vgw;1*COkVeq1ul`W{&(5>?yes0*a1EV)-X%9>k?+<* zU5l6!npi5w+Jl&4f5q05#ZatMkjt?O-Xosti`Ey^-E^j+D>+}z`)tYQdiARhLL7S* zJKzf984md+PGg-G;fLJ|lDXTEGQfnd-w0IZCQls-Tl!nb~!vnRwltuA-6i17#< zKianCkW3{am1m`r7;`Xe=7YDy&fJLm+Wm9N;;3i;=i}PHpYPt=jAl&%0f7A7v%sA% zdX7&=1JxlaF5*SImx~_(+P#7RZRzH4K?^N_tGo)p#i&d(q3m?jmCRFsE5$>i?UuYa zL1XSHL5oEm*NX?75+pdUCtO&My>f#6vTpLe)9tUfKc;iB2^Mw&d0h>d&PE)-g#I6Z zxGQh}&3wNlFyhN+ivi7NFVvxXW7WZrv)=i?!op@L)XzXY57ehLm>w;(p)OamYu$F} zBVw{fb#T%sd}+nj98Q4Rwtk#I3CN|1P}3>88!8^*H4YGI4u6LYT#9}w zkcjZQz&}4L}+#Rs~Is&|oTG8GSpk z6Q;V%vs)9ze(9+)qK)2e9>meVAxVL*eb>Y0U_&LUOgpex b<=K=}MryJQe)*J?8 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 JLEdnB^dB2KaE$-} literal 10810 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 KXqVl76!C8p6&URR diff --git a/docs/developer-guide/img/group-layout.png b/docs/developer-guide/img/group-layout.png index 9a886156db265d90dc474a1dfa8a37b993583f55..c1f087123cab6d9ff88c65f686e770e15ef4ee8b 100644 GIT binary patch literal 11976 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 literal 11908 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 diff --git a/docs/developer-guide/img/guibuilder-2-insets-1.png b/docs/developer-guide/img/guibuilder-2-insets-1.png index 179a9cebcea5c28e4522e3d1863af1bfafd3748a..257fd9e0448e913e39215ec534be4a5a11bcd912 100644 GIT binary patch literal 6070 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 beH#chCw6icMyqA-@c>7A7rXjj0&o2X`j{i8 literal 6196 zcmeHMX;hQvwg%6&oGVvQ@jz(+6_r7SR6yoIYb|0K1cfjJqB6-C0|W>OV5_YnLsTXM z0aOr$2oWI=APKYrQ9_^sAu&ufF+>O?gpdgW+}L{VIzR4Ocip?z{nsDgpYPq@yZ3(f z^Xzx8_scu)>$!8sS35K`GI%HsWgFN4#}^&ku_H9WQW%IU z(sp@fVVZA|Z)$q;(A~QyHU4(sz@bB$d+uLbb7wkHD`lZJ6!#tH>+Op-y}h##-&+|%_HDPgQ0bLxW=1AGDJ#IEx0N)|>pb*|BW41= zA7FZF4vxo+*5r8sp$&(*g4Pe(%YIuMjSIErNzZa#UO^JX?bD2Kq_8=;JKK*StFL0@ z86-DEY|RUBT9lO)in5|pu`n6ST)Hva)c{2W&&Z{KSpJ4`C}mJ=19ZQVBvtN9Y%GIh z#KLLq5WJ`!Bi-z0PvX!uS*g+wubLMtW6xJCP^-nwfsEYT*hqN)(91{+Qq6O+pa&bDTycbyu!eB3Ytaie~{ zwj&}Wd$FVvN5hkA*{%}jMRs-ue5|ayaSYhmR4aF>#O z$Z?f}(N>4J)_AON!#1}seda{elUUVNrEKB77UXTm^Oy+5djew(Gr~rd(5}V=h~A<~ zB;T2Bkc4m4@nZ1`+`FJ3{WJYh1dG0uic^R;{>-6aJ>*W^P5v+YdLJZHhsmvDMF(ZB zk1x@p8F6bva)%|!R{0>JJGkcTqGkaO%ufl?enX@s+;Mvbt4bG7P@)-mZj*`vI;a!t zT#Q1`)nYS7M+DWw_pN(bm5#CR+83-K#7Aqb8Q?(UWgzIH?gPtK&tcVUPlfWU^bdJ} z#;^_%W+Nlg@5Pef8cN#K58|Yt&JU9kCl_6}5Nvuj_uf;=Mq{@7>lSy<5fmd!xQ?$5 zpQVzL5mMcKCG>= z#UG)vZQk$+9xtP`m$iDPf;QfKN&V`|-wGo23GMiXo^>{lQB{aP1vA27>oMl!Xx<`- ztf(;D_hU-M>ye<5?4OkLjmC_~Sa%}Nj!u#s6~sR6$&NXATYBVaUI}{#(c3_vN4-^% zdzB*3pKR13EbgR6q>wV6q;&lhHN`7+U#0`r>l-94T2{Cqum^|@aTb(O;!I)3p36FJ z;pYK0eqEVpQy*S%n3<9!^DIl$95x58EwkU{uHV#dUoB)R2c0UZ71n#GQ}JR(tr5CU zt3F*aF-`8N;Mv_sQ7Ka)hi4@Osk%D#tVm=2{%nvy^0Obr!^Om0#{~9znKuyOty=ft z+5N$mwPYHS>5cujhW@;IQ+;$X)0dZ7*RUkWz%)J!)5cQY-_a%uC?wvv(n3;++Sq8Efn4=S#-6NBK$hIJw2>#Ues< zz(_)F^c($4q~B*%;-=HIMrev&>DywkZA8NxmNRqk$@*csLoWYtVfFte|7 zZt;bmgMCc`C)dUO=B#rLBp7q`wObHCs}x^NT`U5s`v`Pue$Hj2(j)iPYugT3c$85D zg6-10Q0XzsK-vjYzbx@`#cz}z4!JHiaMIBMUhE{r3?{5!f#RJ^Vma}!UMKqxDTZ+U z6lL#zUdqAR0j(!EXTwCb9oD6TQH|@rc49ZB^gZ%l^vKloP{}okeZxPTldF||CtO+ zb@W|2{emr>oAtmME_h0MmlN?*Vg{~=T z?Ny6X-^MSD^WnQDSKOx*;*LvEI5{g1LXChxs@9+6SEnwy z@|NY2e?LF+9E^cV%!Gx57fbv8z2MX!k8pTKajM7}aeB5bDG$G$-a~@L(an9kJJ%|8 zo9B(WdH0Ko?O|`>szrbB7>fjH2S-%Zrz8feV|zs*it-vVmmnLng2q|o2EN=-&KihF zojT}xwv+U!n-;oEqvjgUyy^41PhO2=%G__YfcC}?aL@awe)PvWCSdLMWok!)ME)gl zRzd(8S>(B~;-9ofU9YGk+Sd+L(AHjI94MXCnJPks3?Qnuv8x;@zp=w9*yt5PRy5E46};@hFf>N zs%E-XsdageXo4rzwC!bH><9ijB)54GGYD}qlog+SwZ~&>7sPzvA3g9dbHy~?xSB)* zZ|a!ld&)gg;^$#sL}0`6TP%9w*4%nwY7dGv!&}}zyUFXva@ye^vMI$mXwC_=ThHY| zL|0~nJW72+e8>5zsI^F(&<2Zf+yOjyTnH(cWL5NdyTpg6LBHk$RGeSeO2qc@wrxq5 zDv>>k-5y4}Jo*eF860<-0?|Y)Psc*Wla5g5iq!*M=a6Hip+O0izA6^{(qeAREa(q* zo35)qU8O#dKXnXqiZMx^AV5-`xF-sjwtJ|BK&)kJW|L>Qdtl6ck-zHR9Tyi4`<>%% zhU+88#ZLIAsm$9)bFMemtI!^sQ| zWflhX+;wmM_BQaz#~(Mv9}{Gq%SzUmgUrX=bj*0WBf2fG23fP3jWHd~-ut_&%~_RA z+TzZ#u{*CMtUiS2(kwsdgDRFCi7pH?^ZF)AzIe_;eLA6a|f+K9)mXTg_>5^yf^ zsgR^ea#JWFDG)wT7<&=gy_&?(^UJ+5>ze=O$^=1>)|vdL%PxPXE6UxBY1=K^b565Y zM*D5dOD_xT6BDtYBl(%fGa!*1M#7Pz#-b3ow{+aLI@E2o?pBblv-lLF*f%#o%8^8X zjk_0E@pRdVY>Bm*b_f%Bh%F1C8T{4hA%W{~A)_>VNcDKJd zS&+s&d9!1Rm7sqR*Xk%NASs9Dyt0*Q#= zGlo(f_CR<^UsdJ=C$T#l*n|uaA(`5>FoyF8cUv3xl+!`O>%U4Of~zQ-tMS|_08%n@ zZG9($&qPtO7UR%WRhyl$9v#l}YsHO~LSlnFFn7aPfE#I2g5kZETB}yw;2dReWr|_a zf5jgiW-XwnvVb}Q0H74MNp6peuOY7JwQhyq`3A+-t)6fec?O~Cj!P+z7fs|#)Id?^ zqFa-BX7fxsTza?IWVB0l3Qe#qe_Qs?yh!sL2kG3qY`Jiu6_neaB?}p87G|h6*6INz ze>kYHeuwgss`k0{$WOTL*~*@8DwhphfiC}I?oNcyq&i^3j5B3FFkboPWI}=Vz6*Ub zmx5d1{Zn>)qhL4A2hY`&L2XD#(v(sVR|JMd3A#$r=&t~uxz^>cWDTMNk)jzFmt0h7 z!L~c!6yTpG{p2{@!?gEVy3?e-GjV*cna%aTc@!GP5PMJxiqc{nKU-8;|O2QyZyS>H~S*Ag5GVfi{8t|Xp(HaK^X7nuTOG9ewZlYqExan8 z)_x2p%>8v^eSkZ(ywXHNj7x8`HU?UK-*3!^|F-O%B)pfBgu^sI5%z#x3rav(Xs zXkRKjGOL{2cLF}5dT)yx0dHX9N2ZZ#5I#P>A;ZX@m3m4|(As5@n-BPx%{`uH4Tp@( zZxjSwP>SrsNlMNFg6|HMIrl0=MEkG%3_re1jOW?>0n$BUqFLYe30_uV@jp3TaL_v6 zDU0_uTQYzjcs@;O$D)E%LqSd04*NylyJ6|m0d5;we$c886e?h>&CLX{^-?}k8##2AK=KaBK;l9H+_&{SA&sy%kB(xGfO?T*_B3t+`pUuw{<)W;!R_n4>a^l+AE zc&A{$C|<;AeRgX;_Bn+rZ@>5*yPN}((`?*6YyZvaXI}qbjQ*IoH$04oFD>-!jGa;c Q4bbp9n+a diff --git a/docs/developer-guide/img/guibuilder-2-insets-2.png b/docs/developer-guide/img/guibuilder-2-insets-2.png index e3051918c76d6afb877106018a83b70ff883b92c..939d38580afeeb0c5d55798a4842385c8eb01c05 100644 GIT binary patch literal 5955 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 literal 6057 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 diff --git a/docs/developer-guide/img/guibuilder-2-insets-3.png b/docs/developer-guide/img/guibuilder-2-insets-3.png index 3aa0bfbf4786b7d45602a6a857289bd7eb0b3a73..fd09549adee8f8171427455e2719496caaf105a8 100644 GIT binary patch literal 7232 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 LvA4#Y^M3Fj8Ro)N literal 7263 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 DMD}`8 diff --git a/docs/developer-guide/img/layered-layout.png b/docs/developer-guide/img/layered-layout.png index af04164ae341dc115a4ed14f487a253dfd326565..2c8aa052ecd52d93870dc33a7b472f5f58ccadc0 100644 GIT binary patch literal 6627 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 C?~&yI literal 6849 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 Pio?tZYFK&o#=U<5h}gtC diff --git a/docs/developer-guide/img/mig-layout.png b/docs/developer-guide/img/mig-layout.png index 910e722133cfb6bdb5cc755add707ad22f0e5b74..76a5ac43d752d077483a9b3c4b45fcc8c9efcdfd 100644 GIT binary patch literal 10723 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 VM(q3?^Us^W^(%(D#o9Jc{{vEBFgO4J literal 10475 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 diff --git a/docs/developer-guide/img/table-layout-constraints.png b/docs/developer-guide/img/table-layout-constraints.png index c9afd65acc6eb590b9510eefab33232d1622d20f..16c14a3b0d2154d72927981d9a48e123f5ec8501 100644 GIT binary patch literal 13760 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

4HuILtMB{Z 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 diff --git a/docs/developer-guide/img/table-layout-enclose.png b/docs/developer-guide/img/table-layout-enclose.png index 0bce1e15513c54a256425cb9e502a90654f6ac46..90eb64903a39db06616e671d4ddc08540b2f4e7e 100644 GIT binary patch literal 10008 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 literal 9718 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 Ix^e&i0RL!B&j0`b From 5813db469b54e5b4dc2db692588b6f8b010e4466 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:11:38 +0300 Subject: [PATCH 2/8] Pin the font on every component, not just the ones that get block colours CI reported one stale figure out of 24: `guibuilder-2-insets-3.png`, the only one containing a `TextField`. The other 23 matched Linux byte for byte, so the bundled-font change worked -- it just did not reach far enough. `applyBlockStyleToContent` styled `Label` and `Button`. Everything else kept the theme's default font, which resolves through the host, so the text field and its hint were still host-dependent. Enumerating the types that carry text would have left the next one added broken the same way, so the walk now pins the face on every component it visits, plus the hint label, which is painted by a `Label` that is not in the component tree and so is never reached by the walk. The first attempt used `BLOCK_FONT` for this and regressed the figure: at 29px against the theme default's 13px the field grew and squeezed "Submit" down to a clipped sliver. `FIELD_FONT` is sized to reproduce the original height, so the composition is unchanged and only the typeface moves. Verified locally by rendering twice, once with `JavaSEPort.setFontFaces` pointed at a family that does not exist -- which is what a machine without Arial looks like to the port. All 24 come out byte-identical, so nothing in these figures reads an installed font any more. Co-Authored-By: Claude Opus 5 (1M context) --- .../PreAdvancedThemingScreenshots.java | 21 ++++++++++++++++++ .../img/guibuilder-2-insets-3.png | Bin 7232 -> 7092 bytes .../img/table-layout-constraints.png | Bin 13760 -> 13573 bytes 3 files changed, 21 insertions(+) diff --git a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java index ada871b775b..754d15d88e8 100644 --- a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java +++ b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java @@ -34,6 +34,7 @@ import com.codename1.ui.Graphics; import com.codename1.ui.Image; import com.codename1.ui.Label; +import com.codename1.ui.TextArea; import com.codename1.ui.TextField; import com.codename1.ui.layouts.BorderLayout; import com.codename1.ui.layouts.BoxLayout; @@ -64,6 +65,10 @@ public final class PreAdvancedThemingScreenshots { private static final int WHITE = 0xffffff; private static final Font TITLE_FONT = screenshotFont(35); private static final Font BLOCK_FONT = screenshotFont(24); + /// Sized to match the height the theme's own default font had (13px), so + /// pinning the face on components the block styling does not touch keeps + /// their layout exactly where it was. + private static final Font FIELD_FONT = screenshotFont(11); /// Loads a figure font from the port's bundled Roboto rather than from the host. /// @@ -369,6 +374,22 @@ private static void applyScreenshotStyle(Form form) { private static void applyBlockStyleToContent(Container container) { for (int i = 0; i < container.getComponentCount(); i++) { Component component = container.getComponentAt(i); + // Pin the font on EVERY component rather than on the types that also + // get block colours. Anything left on the theme's default font + // resolves through the host, and that is what made + // guibuilder-2-insets-3.png -- the only figure containing a + // TextField -- differ between a Mac and CI while the other 23 + // matched byte for byte. Enumerating the types that carry text + // would leave the next one to be added broken in the same way. + component.getAllStyles().setFont(FIELD_FONT); + if (component instanceof TextArea) { + // The hint is painted by a Label that is not in the component + // tree, so the walk above never reaches it. + Label hint = ((TextArea) component).getHintLabel(); + if (hint != null) { + hint.getAllStyles().setFont(FIELD_FONT); + } + } if (component instanceof Label || component instanceof Button) { styleBlock(component); } diff --git a/docs/developer-guide/img/guibuilder-2-insets-3.png b/docs/developer-guide/img/guibuilder-2-insets-3.png index fd09549adee8f8171427455e2719496caaf105a8..a200270d4b40f2a0bb6d73fc34c05883b086799b 100644 GIT binary patch literal 7092 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 literal 7232 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 LvA4#Y^M3Fj8Ro)N diff --git a/docs/developer-guide/img/table-layout-constraints.png b/docs/developer-guide/img/table-layout-constraints.png index 16c14a3b0d2154d72927981d9a48e123f5ec8501..8ef75925dd6e2ca3f2cc827380e0c937a122e9e2 100644 GIT binary patch literal 13573 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 literal 13760 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 Date: Wed, 2 Sep 2026 10:31:55 +0300 Subject: [PATCH 3/8] Publish what the runner actually rendered when a screenshot fails "Committed screenshot is stale: " names the file and nothing else, so there is no way to tell a real regression from an environment difference without adding a debugging round trip to CI. The generated directory is now uploaded as an artifact when the step fails. Needed immediately: one figure still differs between a Mac and the runner after the font fix, and host fonts, JDK version and working directory have each been ruled out locally. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/developer-guide-docs.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/developer-guide-docs.yml b/.github/workflows/developer-guide-docs.yml index 7393eaee936..eb8278df68a 100644 --- a/.github/workflows/developer-guide-docs.yml +++ b/.github/workflows/developer-guide-docs.yml @@ -122,6 +122,7 @@ jobs: run: | set -euo pipefail GENERATED_DIR="$RUNNER_TEMP/pre-advanced-theming-screenshots" + echo "GUIDE_GENERATED_SCREENSHOTS=$GENERATED_DIR" >> "$GITHUB_ENV" rm -rf "$GENERATED_DIR" mkdir -p "$GENERATED_DIR" xvfb-run -a mvn -B -ntp \ @@ -149,6 +150,18 @@ jobs: fi done + # When the byte compare fails, the message names the file but not what it + # actually rendered, which leaves no way to tell a real regression from an + # environment difference. Publishing what this runner produced makes the + # two distinguishable without adding a debugging round trip to CI. + - name: Upload generated screenshots when they do not match + if: failure() && env.GUIDE_GENERATED_SCREENSHOTS != '' + uses: actions/upload-artifact@v7 + with: + name: guide-generated-screenshots + path: ${{ env.GUIDE_GENERATED_SCREENSHOTS }} + if-no-files-found: warn + - name: Verify developer guide images are referenced if: github.event_name != 'pull_request' || steps.changes.outputs.docs == 'true' || steps.changes.outputs.demos == 'true' || steps.changes.outputs.workflow == 'true' run: | From fc4086e42286acc2b039665e573b57de3b7d3430 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:49:46 +0300 Subject: [PATCH 4/8] Pin MigLayout's platform, and stop demanding byte equality of a glyph edge The artifact step paid for itself immediately. Downloading what the runner rendered showed two figures differing, not the one the gate reported -- it exits on the first mismatch -- and the two had nothing in common. `mig-layout.png` differed by 12.8% of its pixels, a real layout shift. MigLayout takes its default gaps from `PlatformDefaults`, which reads `System.getProperty("os.name")` and answers MAC_OSX, GNOME or WINDOWS_XP, each with different spacing. The figure was rendering with macOS gaps on a Mac and GNOME gaps on the runner. Pinning the platform fixes it: with the pin, 23 of the 24 figures now match the runner's own output byte for byte. `layered-layout.png` differed by 173 pixels, 0.113%, inside a 25x25 box. That one is not fixable. Measured against the runner's bytes, the material glyph lands at exactly the same size and the same origin -- a 55x49 bounding box -- and differs only in antialiased edge coverage, 946 fully-white pixels against 916. Java2D rasterizes the same glyph, from the same bundled font, at the same size, slightly differently on the two platforms. Demanding byte equality there would mean deleting legitimate content from the figure or carrying a permanently red check. So the comparison moves from `cmp -s` to a comparer that still requires byte equality by default and accepts a bounded difference only where a figure carries a `.tolerance` sidecar explaining itself, in the same key=value shape the CN1SS suites already use. The area bound does the work: a per-pixel delta that large is meaningless on its own, since a glyph edge flips between white and the block behind it, but a regression that changed the icon would move far more than 0.3% of the image. Verified by running the comparer with the runner's own output against the committed figures -- which is exactly what CI will do -- and by four probes: an untoleranced figure that differs fails, the toleranced figure fails when changed beyond its budget, a missing figure fails the count, and a clean run passes. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/developer-guide-docs.yml | 24 +--- .../PreAdvancedThemingScreenshots.java | 8 ++ .../img/layered-layout.tolerance | 13 ++ docs/developer-guide/img/mig-layout.png | Bin 10723 -> 10699 bytes .../developer-guide/compare-screenshots.py | 124 ++++++++++++++++++ 5 files changed, 152 insertions(+), 17 deletions(-) create mode 100644 docs/developer-guide/img/layered-layout.tolerance create mode 100755 scripts/developer-guide/compare-screenshots.py diff --git a/.github/workflows/developer-guide-docs.yml b/.github/workflows/developer-guide-docs.yml index eb8278df68a..7d6b8715e0c 100644 --- a/.github/workflows/developer-guide-docs.yml +++ b/.github/workflows/developer-guide-docs.yml @@ -132,23 +132,13 @@ jobs: -P guide-screenshot-generator \ -Dguide.screenshot.output="$GENERATED_DIR" \ verify - COUNT="$(find "$GENERATED_DIR" -maxdepth 1 -type f -name '*.png' | wc -l | tr -d ' ')" - if [ "$COUNT" != "24" ]; then - echo "::error::Expected 24 generated pre-Advanced Theming screenshots, found $COUNT" - exit 1 - fi - for generated in "$GENERATED_DIR"/*.png; do - name="$(basename "$generated")" - committed="docs/developer-guide/img/$name" - if [ ! -f "$committed" ]; then - echo "::error::Generated screenshot has no committed counterpart: $name" - exit 1 - fi - if ! cmp -s "$generated" "$committed"; then - echo "::error::Committed screenshot is stale: $name" - exit 1 - fi - done + pip install --user --quiet Pillow + # Byte equality is still the rule; a figure only gets a bounded + # difference if it carries a .tolerance sidecar saying why. + python3 scripts/developer-guide/compare-screenshots.py \ + --generated "$GENERATED_DIR" \ + --committed docs/developer-guide/img \ + --expected-count 24 # When the byte compare fails, the message names the file but not what it # actually rendered, which leaves no way to tell a real regression from an diff --git a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java index 754d15d88e8..9703e3757cb 100644 --- a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java +++ b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java @@ -99,6 +99,14 @@ public interface ScreenshotSink { } public static void generate(ScreenshotSink sink) throws IOException { + // MigLayout picks its default gaps from PlatformDefaults, which reads + // System.getProperty("os.name") and returns MAC_OSX, GNOME or WINDOWS_XP. + // The gaps differ per platform, so mig-layout.png came out with macOS + // spacing on a Mac and GNOME spacing on the Linux runner -- a 12.8% pixel + // difference that has nothing to do with fonts. Pin it so the figure shows + // the same thing wherever it is generated. + com.codename1.ui.layouts.mig.PlatformDefaults.setPlatform( + com.codename1.ui.layouts.mig.PlatformDefaults.GNOME); write(sink, "flow-layout.png", flow("Flow Layout", Component.LEFT, Component.TOP), PORTRAIT_WIDTH, PORTRAIT_HEIGHT); write(sink, "flow-layout-center.png", flow("Flow Layout", Component.CENTER, Component.TOP), PORTRAIT_WIDTH, PORTRAIT_HEIGHT); write(sink, "flow-layout-right.png", flow("Flow Layout", Component.RIGHT, Component.TOP), PORTRAIT_WIDTH, PORTRAIT_HEIGHT); diff --git a/docs/developer-guide/img/layered-layout.tolerance b/docs/developer-guide/img/layered-layout.tolerance new file mode 100644 index 00000000000..bb3d578480b --- /dev/null +++ b/docs/developer-guide/img/layered-layout.tolerance @@ -0,0 +1,13 @@ +# This figure contains a FontImage material glyph. Measured against the CI +# runner's own output, the glyph lands at exactly the same size and position -- +# a 55x49 bounding box at the same origin -- and differs only in antialiased +# edge coverage: 946 fully-white pixels against 916, 173 differing pixels in +# total, 0.113% of the image. Java2D rasterizes the same glyph from the same +# bundled font at the same size slightly differently on macOS and Linux. +# +# The area bound is what does the work here: a per-pixel delta this large is +# meaningless on its own (a glyph edge flips between white and the green block +# behind it), but a regression that changed the icon would move far more than +# 0.3% of the image. +maxChannelDelta=160 +maxMismatchPercent=0.3 diff --git a/docs/developer-guide/img/mig-layout.png b/docs/developer-guide/img/mig-layout.png index 76a5ac43d752d077483a9b3c4b45fcc8c9efcdfd..4f57360b62f2a6b4d68cbd5f7dea82c5cc5c974c 100644 GIT binary patch literal 10699 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 Ou3t5{Qmknc^1lGvWj4M5 literal 10723 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 VM(q3?^Us^W^(%(D#o9Jc{{vEBFgO4J diff --git a/scripts/developer-guide/compare-screenshots.py b/scripts/developer-guide/compare-screenshots.py new file mode 100755 index 00000000000..47248f2263c --- /dev/null +++ b/scripts/developer-guide/compare-screenshots.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python3 +"""Compare generated guide figures against the committed ones. + +Byte equality is the default and is what nearly every figure achieves: with the +font loaded from the port's bundled Roboto and MigLayout's platform pinned, 23 of +the 24 render identically on macOS and on the Linux runner. + +The exception is a figure containing a `FontImage` material glyph. Measured +against the runner's own output, the glyph lands at exactly the same size and +position -- a 55x49 bounding box at the same origin -- and differs only in +antialiased edge coverage, 946 fully-white pixels against 916. That is Java2D +rasterizing the same glyph from the same font at the same size slightly +differently on the two platforms, and no amount of pinning on our side changes +it. Demanding byte equality there would mean either deleting legitimate content +from the figure or carrying a permanently red check. + +So a figure may carry a `.tolerance` sidecar, in the same key=value shape +the CN1SS screenshot suites already use, and only then is a bounded difference +accepted. Everything without a sidecar must still match exactly. +""" +from __future__ import annotations + +import argparse +import sys +from pathlib import Path + +try: + from PIL import Image +except ImportError: # pragma: no cover - the workflow installs Pillow + print("Pillow is required to compare screenshots", file=sys.stderr) + raise + + +def read_tolerance(path: Path) -> tuple[int, float] | None: + if not path.exists(): + return None + max_delta, max_percent = 0, 0.0 + for line in path.read_text(encoding="utf-8").split("\n"): + line = line.split("#", 1)[0].strip() + if not line or "=" not in line: + continue + key, _, value = line.partition("=") + if key.strip() == "maxChannelDelta": + max_delta = int(value) + elif key.strip() == "maxMismatchPercent": + max_percent = float(value) + return max_delta, max_percent + + +def compare(generated: Path, committed: Path, tolerance: tuple[int, float] | None) -> str | None: + """Return None when the pair is acceptable, else a description of the failure.""" + if generated.read_bytes() == committed.read_bytes(): + return None + if tolerance is None: + return "differs and has no tolerance sidecar" + max_delta, max_percent = tolerance + a = Image.open(generated).convert("RGB") + b = Image.open(committed).convert("RGB") + if a.size != b.size: + return f"size changed: generated {a.size[0]}x{a.size[1]}, committed {b.size[0]}x{b.size[1]}" + pa, pb = a.load(), b.load() + width, height = a.size + mismatched = 0 + worst = 0 + for y in range(height): + for x in range(width): + first, second = pa[x, y], pb[x, y] + if first == second: + continue + delta = max(abs(first[i] - second[i]) for i in range(3)) + worst = max(worst, delta) + if delta > max_delta: + mismatched += 1 + percent = 100.0 * mismatched / (width * height) + if percent > max_percent: + return ( + f"{percent:.3f}% of pixels exceed maxChannelDelta={max_delta} " + f"(allowed {max_percent}%), worst channel delta {worst}" + ) + return None + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--generated", required=True, type=Path) + parser.add_argument("--committed", required=True, type=Path) + parser.add_argument("--expected-count", type=int, required=True) + args = parser.parse_args() + + produced = sorted(args.generated.glob("*.png")) + if len(produced) != args.expected_count: + print( + f"::error::Expected {args.expected_count} generated figures, found {len(produced)}", + file=sys.stderr, + ) + return 1 + + failures = 0 + tolerated = 0 + for image in produced: + committed = args.committed / image.name + if not committed.exists(): + print(f"::error::Generated figure has no committed counterpart: {image.name}", file=sys.stderr) + failures += 1 + continue + sidecar = args.committed / (image.stem + ".tolerance") + tolerance = read_tolerance(sidecar) + problem = compare(image, committed, tolerance) + if problem: + print(f"::error::{image.name}: {problem}", file=sys.stderr) + failures += 1 + elif tolerance is not None and image.read_bytes() != committed.read_bytes(): + tolerated += 1 + print(f"{image.name}: within its tolerance sidecar") + + if failures: + print(f"\n{failures} figure(s) do not match.", file=sys.stderr) + return 1 + print(f"All {len(produced)} figures match ({tolerated} within a tolerance sidecar).") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) From ed05ce6ac9b51d27c81f568364df894a32291345 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:58:52 +0300 Subject: [PATCH 5/8] Guard the iOS font branch, and stop the comparator gating itself out Two review findings on this PR. The first says `native:MainRegular` does not give host-independent output, because `loadTrueTypeFont` resolves native fonts to the first installed SF or Helvetica family before reaching the bundled Roboto. The branch is real, but it is reached only when `isIOS` is set, which `loadSkinFile` does for a skin whose systemFontFamily contains "helvetica" -- and this generator never loads a skin. The measurement agrees: figures rendered on a Mac match the Linux runner byte for byte, which could not happen if one side were resolving Helvetica Neue and the other Roboto. So the conclusion does not hold today, but the risk is real for tomorrow: a change that loads a skin here would put host fonts back into the output with no other symptom. The generator now refuses to run under an iOS platform, and says why, rather than leaving that to a comment nobody reads. The second finding is straightforwardly right and is the more serious of the two. `on.pull_request.paths` triggers on `scripts/developer-guide/**`, but the `Determine changed components` filter named only two scripts, so a pull request touching any other script here started the workflow with `docs` false and skipped the steps that script governs. A change to compare-screenshots.py could have merged without the screenshot check ever running it -- a gate that skips itself. The filter now covers the whole directory, which also removes the two-copies-drift the surrounding comment already warns about. Verified the guard changes no output: all 24 figures are unchanged, and the comparer still passes against the runner's own bytes. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/developer-guide-docs.yml | 9 +++++++-- .../PreAdvancedThemingScreenshots.java | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/.github/workflows/developer-guide-docs.yml b/.github/workflows/developer-guide-docs.yml index 7d6b8715e0c..e4a0423550c 100644 --- a/.github/workflows/developer-guide-docs.yml +++ b/.github/workflows/developer-guide-docs.yml @@ -50,8 +50,13 @@ jobs: docs: - 'docs/developer-guide/**' - 'docs/demos/common/src/main/snippets/**' - - 'scripts/developer-guide/migrate-inline-guide-snippets.py' - - 'scripts/developer-guide/validate-guide-snippets.py' + # The whole directory, not two named files. on.pull_request.paths + # already triggers on scripts/developer-guide/**, so a change to any + # other script here started the workflow while leaving this filter + # false -- which skipped the very steps that script governs. A + # change to compare-screenshots.py could have merged without the + # screenshot check ever running it. + - 'scripts/developer-guide/**' - '.github/workflows/developer-guide-docs.yml' # Triggering the workflow is not enough on its own: the HTML and PDF # build and the steps beside it are gated on this filter, so the diff --git a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java index 9703e3757cb..effa4dc28ae 100644 --- a/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java +++ b/docs/demos/common/src/main/java/com/codenameone/developerguide/screenshots/PreAdvancedThemingScreenshots.java @@ -27,6 +27,7 @@ import com.codename1.ui.Button; import com.codename1.ui.Component; import com.codename1.ui.Container; +import com.codename1.ui.Display; import com.codename1.ui.CN; import com.codename1.ui.FontImage; import com.codename1.ui.Font; @@ -99,6 +100,24 @@ public interface ScreenshotSink { } public static void generate(ScreenshotSink sink) throws IOException { + // JavaSEPort.loadTrueTypeFont has an earlier branch for native: fonts: + // when isIOS is set -- which loadSkinFile does for any skin whose + // systemFontFamily contains "helvetica" -- it resolves to the first + // INSTALLED SF or Helvetica family and never reaches the bundled Roboto. + // This generator never loads a skin, so that branch is not taken, and the + // measurement agrees: figures rendered on a Mac match the Linux runner + // byte for byte, which could not happen if one side were using Helvetica + // Neue. Guard it anyway, because a future change that loads a skin here + // would put the host's fonts back into the output without any other + // symptom. + String platform = Display.getInstance().getPlatformName(); + if ("ios".equals(platform)) { + throw new IllegalStateException( + "an iOS skin is active, so native: fonts would resolve to installed " + + "system faces instead of the bundled ones and these figures would " + + "stop being reproducible off this machine"); + } + // MigLayout picks its default gaps from PlatformDefaults, which reads // System.getProperty("os.name") and returns MAC_OSX, GNOME or WINDOWS_XP. // The gaps differ per platform, so mig-layout.png came out with macOS From edb8a63fd40281ea3aec0255d3c8083f10fb471c Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 11:05:58 +0300 Subject: [PATCH 6/8] Count every changed pixel toward the area budget, not just the loud ones The comparator incremented its mismatch counter only for pixels whose channel delta EXCEEDED maxChannelDelta, which is what the CN1SS comparator does. With a sidecar written the way this one was -- a large delta bound paired with a small area bound -- that leaves an unbounded hole, and review gave the exploit in the figures' own palette: recolouring the green #06a806 to #a608a6 moves every channel by exactly 160, so with maxChannelDelta=160 not one pixel is counted and a dramatically different image reports zero mismatches. Reproduced it before fixing: the recolour changes 4191 pixels, 2.73% of the image, at a worst delta of exactly 160 -- and passed. The two bounds are now independent. maxMismatchPercent limits how much of the image may change at all, counting every differing pixel; maxChannelDelta caps how far any single pixel may move. The measured legitimate noise -- 173 pixels, 0.113%, worst delta 141 -- still passes, the recolour now fails on area, and a five-pixel solid overwrite fails on delta. Co-Authored-By: Claude Opus 5 (1M context) --- .../developer-guide/compare-screenshots.py | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/scripts/developer-guide/compare-screenshots.py b/scripts/developer-guide/compare-screenshots.py index 47248f2263c..4a90ec38314 100755 --- a/scripts/developer-guide/compare-screenshots.py +++ b/scripts/developer-guide/compare-screenshots.py @@ -17,6 +17,12 @@ So a figure may carry a `.tolerance` sidecar, in the same key=value shape the CN1SS screenshot suites already use, and only then is a bounded difference accepted. Everything without a sidecar must still match exactly. + +The two bounds are applied independently, which is where this differs from the +CN1SS comparator: `maxMismatchPercent` limits how much of the image may change at +all, and `maxChannelDelta` caps how far any single pixel may move. Counting only +the pixels that exceed the delta would let an unlimited number of sub-threshold +changes through. """ from __future__ import annotations @@ -60,23 +66,27 @@ def compare(generated: Path, committed: Path, tolerance: tuple[int, float] | Non return f"size changed: generated {a.size[0]}x{a.size[1]}, committed {b.size[0]}x{b.size[1]}" pa, pb = a.load(), b.load() width, height = a.size - mismatched = 0 + changed = 0 worst = 0 for y in range(height): for x in range(width): first, second = pa[x, y], pb[x, y] if first == second: continue - delta = max(abs(first[i] - second[i]) for i in range(3)) - worst = max(worst, delta) - if delta > max_delta: - mismatched += 1 - percent = 100.0 * mismatched / (width * height) + # Every changed pixel counts toward the area budget, and the channel + # delta is a separate ceiling. Counting only the pixels that EXCEED + # the delta -- which is what the CN1SS comparator does -- leaves an + # unbounded hole: with maxChannelDelta=160, recolouring these figures' + # green #06a806 to #a608a6 moves every channel by exactly 160, so not + # one pixel would be counted and a completely different image would + # pass. + changed += 1 + worst = max(worst, max(abs(first[i] - second[i]) for i in range(3))) + percent = 100.0 * changed / (width * height) if percent > max_percent: - return ( - f"{percent:.3f}% of pixels exceed maxChannelDelta={max_delta} " - f"(allowed {max_percent}%), worst channel delta {worst}" - ) + return f"{percent:.3f}% of pixels changed (allowed {max_percent}%)" + if worst > max_delta: + return f"worst channel delta {worst} exceeds maxChannelDelta={max_delta}" return None From 4b624d8720b6841b001103b7c7e0351be0da222f Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 11:06:33 +0300 Subject: [PATCH 7/8] Correct the sidecar's rationale to match how the bounds now work The previous commit changed the comparator so every differing pixel counts toward the area budget and the channel delta is a separate ceiling. The sidecar still explained the old behaviour -- that the area bound did the work and the delta was meaningless on its own -- which is now wrong in a file whose whole purpose is to justify the numbers beside it. Co-Authored-By: Claude Opus 5 (1M context) --- docs/developer-guide/img/layered-layout.tolerance | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/developer-guide/img/layered-layout.tolerance b/docs/developer-guide/img/layered-layout.tolerance index bb3d578480b..4f1e24ed098 100644 --- a/docs/developer-guide/img/layered-layout.tolerance +++ b/docs/developer-guide/img/layered-layout.tolerance @@ -5,9 +5,11 @@ # total, 0.113% of the image. Java2D rasterizes the same glyph from the same # bundled font at the same size slightly differently on macOS and Linux. # -# The area bound is what does the work here: a per-pixel delta this large is -# meaningless on its own (a glyph edge flips between white and the green block -# behind it), but a regression that changed the icon would move far more than -# 0.3% of the image. +# The two bounds are independent and both bind. maxMismatchPercent limits how +# much of the image may change AT ALL -- every differing pixel counts, not only +# those past the delta -- so a wholesale recolour cannot slip through by moving +# each channel a little at a time. maxChannelDelta then caps how far any single +# pixel may move: 160 clears the measured worst of 141 with room, while a solid +# overwrite still fails on it. maxChannelDelta=160 maxMismatchPercent=0.3 From 815afcf3197e9c023c34ebc6fd7213a2ff35067c Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Wed, 2 Sep 2026 11:13:50 +0300 Subject: [PATCH 8/8] Compare figures in RGBA, because they have an alpha channel The comparator converted both images to RGB before counting differences. The committed figures are genuine RGBA PNGs -- four channels, currently opaque everywhere -- so that dropped a real channel, and any change confined to alpha was invisible to the tolerance path. A regression that turned the whole figure transparent while leaving every colour channel intact reported zero changed pixels and passed. Byte equality, which every figure without a sidecar is still held to, always caught this. Only a figure carrying a sidecar could reach the weakened path, so today the exposure was one image -- but that image is exactly the one whose comparison is relaxed. Verified: making layered-layout.png fully transparent with its RGB channels untouched now reports 100% of pixels changed, the real runner output still passes, and the recolour and untoleranced-difference probes still fail as they did. Co-Authored-By: Claude Opus 5 (1M context) --- scripts/developer-guide/compare-screenshots.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scripts/developer-guide/compare-screenshots.py b/scripts/developer-guide/compare-screenshots.py index 4a90ec38314..a57efcaca40 100755 --- a/scripts/developer-guide/compare-screenshots.py +++ b/scripts/developer-guide/compare-screenshots.py @@ -60,8 +60,12 @@ def compare(generated: Path, committed: Path, tolerance: tuple[int, float] | Non if tolerance is None: return "differs and has no tolerance sidecar" max_delta, max_percent = tolerance - a = Image.open(generated).convert("RGB") - b = Image.open(committed).convert("RGB") + # RGBA, not RGB: these figures are saved with an alpha channel, and dropping + # it would make a change that touches only transparency invisible here -- + # including one that turned the whole figure see-through while leaving every + # colour channel intact. + a = Image.open(generated).convert("RGBA") + b = Image.open(committed).convert("RGBA") if a.size != b.size: return f"size changed: generated {a.size[0]}x{a.size[1]}, committed {b.size[0]}x{b.size[1]}" pa, pb = a.load(), b.load() @@ -81,7 +85,7 @@ def compare(generated: Path, committed: Path, tolerance: tuple[int, float] | Non # one pixel would be counted and a completely different image would # pass. changed += 1 - worst = max(worst, max(abs(first[i] - second[i]) for i in range(3))) + worst = max(worst, max(abs(first[i] - second[i]) for i in range(4))) percent = 100.0 * changed / (width * height) if percent > max_percent: return f"{percent:.3f}% of pixels changed (allowed {max_percent}%)"