Add test PDF for visual inspector demo

- Created test_visual_inspector.pdf with 6 images containing text
- 3 pages: Pages 1-2 have issues, Page 3 is correct
- Demonstrates visual markers on actual issues
- Script included to regenerate if needed

🤖 Generated with [Claude Code](https://claude.com/claude-code)
This commit is contained in:
DJP 2025-10-20 16:21:18 -04:00
parent 59efe72607
commit 0986285d4b
5 changed files with 310 additions and 0 deletions

View file

@ -0,0 +1,128 @@
#!/usr/bin/env python3
"""
Create a test PDF with images that will trigger the visual inspector
"""
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from PIL import Image, ImageDraw, ImageFont
import io
def create_image_with_text(text, width=300, height=100, bg_color='red', text_color='white'):
"""Create an image with text in it (accessibility violation)"""
img = Image.new('RGB', (width, height), color=bg_color)
draw = ImageDraw.Draw(img)
# Try to use a decent font
try:
font = ImageFont.truetype("/System/Library/Fonts/Helvetica.ttc", 24)
except:
font = ImageFont.load_default()
# Draw text on image
bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
position = ((width - text_width) // 2, (height - text_height) // 2)
draw.text(position, text, fill=text_color, font=font)
# Convert to bytes
buffer = io.BytesIO()
img.save(buffer, format='PNG')
buffer.seek(0)
return ImageReader(buffer)
def create_test_pdf():
"""Create a test PDF with accessibility issues"""
filename = "test_visual_inspector.pdf"
c = canvas.Canvas(filename, pagesize=letter)
width, height = letter
# Page 1 - Images with text (will show markers)
c.setFont("Helvetica-Bold", 24)
c.drawString(50, height - 50, "Page 1: Images with Text Issues")
c.setFont("Helvetica", 12)
c.drawString(50, height - 80, "These images contain text - accessibility violations!")
# Image 1 - Red box with "CLICK HERE" (bad practice)
img1 = create_image_with_text("CLICK HERE", 300, 100, 'red', 'white')
c.drawImage(img1, 50, height - 250, width=300, height=100)
# Image 2 - Yellow box with "Important Info" (bad practice)
img2 = create_image_with_text("Important Information", 350, 120, 'orange', 'black')
c.drawImage(img2, 50, height - 400, width=350, height=120)
# Image 3 - Blue box with "Warning" (bad practice)
img3 = create_image_with_text("⚠️ WARNING", 280, 90, 'blue', 'yellow')
c.drawImage(img3, 50, height - 550, width=280, height=90)
c.showPage()
# Page 2 - More images
c.setFont("Helvetica-Bold", 24)
c.drawString(50, height - 50, "Page 2: More Text-in-Image Issues")
c.setFont("Helvetica", 12)
c.drawString(50, height - 80, "All of these should be actual text, not images!")
# Image 4 - Green box with "Submit" (button as image)
img4 = create_image_with_text("SUBMIT", 200, 80, 'green', 'white')
c.drawImage(img4, 100, height - 200, width=200, height=80)
# Image 5 - Purple box with "Learn More" (link as image)
img5 = create_image_with_text("Learn More →", 250, 90, 'purple', 'white')
c.drawImage(img5, 100, height - 350, width=250, height=90)
# Image 6 - Gray box with instructions (bad practice)
img6 = create_image_with_text("Instructions Here", 320, 100, 'gray', 'white')
c.drawImage(img6, 100, height - 500, width=320, height=100)
c.showPage()
# Page 3 - Correct way (no images with text)
c.setFont("Helvetica-Bold", 24)
c.drawString(50, height - 50, "Page 3: Correct Implementation")
c.setFont("Helvetica", 12)
c.drawString(50, height - 80, "This page uses actual text - much better!")
# Use actual text instead of images
c.setFont("Helvetica-Bold", 18)
c.setFillColorRGB(1, 0, 0)
c.drawString(100, height - 150, "CLICK HERE")
c.setFillColorRGB(1, 0.5, 0)
c.drawString(100, height - 200, "Important Information")
c.setFillColorRGB(0, 0, 1)
c.drawString(100, height - 250, "⚠️ WARNING")
c.setFillColorRGB(0, 0.5, 0)
c.drawString(100, height - 300, "SUBMIT")
c.setFillColorRGB(0.5, 0, 0.5)
c.drawString(100, height - 350, "Learn More →")
c.setFillColorRGB(0, 0, 0)
c.setFont("Helvetica", 12)
c.drawString(50, height - 450, "This page should show NO markers in the visual inspector!")
c.drawString(50, height - 470, "(Because it uses proper accessible text)")
c.showPage()
c.save()
print(f"✅ Created {filename}")
print(f"")
print(f"This PDF has:")
print(f" • Page 1: 3 images with text (will show 3 markers)")
print(f" • Page 2: 3 images with text (will show 3 markers)")
print(f" • Page 3: Proper text (will show 0 markers)")
print(f"")
print(f"Upload this to test the Visual Page Inspector!")
print(f"You should see red/orange markers highlighting each image.")
if __name__ == "__main__":
create_test_pdf()

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

182
test_visual_inspector.pdf Normal file
View file

@ -0,0 +1,182 @@
%PDF-1.3
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 12 0 R /F4 13 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 100 /Length 1451 /Subtype /Image
/Type /XObject /Width 300
>>
stream
Gb"0U:P__`(r5Yt,l\28,"<@I,_]>K;\UNM/2/TUKS@F<@6n$%)pH;'AY[?(A8K7P(<BUV5oP5_)H'2LKKEZjcgQ:2kA?a"F7-S[hR>5Ke+`K+F5HMYqn-F1kFQb_3ELetzzzzzzzzzzzzz!!!!-Pbh%7gc9ZY>2%[UT9kiZ\T1,>XXXaK2c%;%cCBBH/t-eFe<mAeVosi+]%+I7b*DM-b`:YfI!O-84F*Y%-VsFQr:*-H0'CR\NW8W"5/tgK[8jA:QSiOco;5659H$*"/mTr1!2ad+N;+?^WWt1`eAs^qgsZF`4ZI;I]RR,S3]^`m]A%l1@!&BKo1FT#))=VJh:"U\T0IATJlGalfWd2RW6Ce_a,eF4hn&('/ZG\QnX_n22I0.l#L2PGG<4U6.I5S59uF:B2f.^DIqI>c]6>'O%iZi'(<GmtFrDl3\>MUc*'J&[3496qX)6O+hJ>\EHSB<JTL]SgR3HS,l<m\[mZfno!UmjdH)pc9;$5$6\8r!fbf#@dhQA_Tlr_Z&X&h0OWQD=>oUnR_+Kbqs:Y#oqn6ih=9Bg/T8Il`+05Eg?K6mr9bhg$:!;X9d+($j:okI^Hj2U>`:CfL^$[VL(Ue1.BQ#4<Rg\UPXQ;8$GmkEm2k7l")qKa`D]6@3?imWMil%5KiR*/'BZX)CpX08^'-9Z%F$9s$kJ=7DN'Zc[2J9'pSMHtUUcll[Oj2-N@ie@@,_1NH*d+s=#Q[\59#nusFao2+Jp!"En4k`%&1?Qar/V&HY;s`MmK+@.?)-^<loLn*-f!>Sp(A"+/NA#QqU9RQF/%nh'A&=\6X\H'Y:CfL^Me84R5>\JbQA6"DkHA7c_jS6O6N>j`9\Y3W^<+BS?7Csjc^sB.3T3oZhL'Xr+^Hq"Bu!H4FC`rRq=RBNU)u'9)"?iWF7QkXR6?\XkOm?S3<_2#k"RFXqYI"T>g=+(<L'``oUnR_BZB71_gVFKi6ImiV_R*m(n*\H:1NZppCt]9RMmc.[^O&n_kOSWeX6&R))Y#fI<s6`>u9T'rLcIIk`HASr$aF7QC(.0oUoX<7Er,d]6alq9P(&K4RBk7pje5/H2:JBbTSMWn``>pF@#G0eRm.Yo/a3?IOp*V-V^@`H8'`VDU0Bu'ZclPB=.rfjd!Aal+Qc2&`)0kV2m]m,G*5]V+haO5-nO!CH!7tS2?5rl+ukHps:2Y'Z_>:b1G.=ARLNpF`k!'OcGA?.8,uJ[;33mUPCGI*_`%U8F/W`7bZLnRlWWBn`$:l.%_Oh5LDW6_EA&X.@7BuAa$gLF;.bToM.^=daI\F3;0sWWR:sH^-?;f$GnUIQS8#9;6dlD^OCCKS-aD[QgDPC"q>6`Q8)kh;]r-bL"NtZEoVmTO_KL;hrXZT/]\ec$7#Lr0NG]W<"BoEpY15IVrIm%V[(P<Z$YljiKsZHzzzzzzzzzzzz!!!#uU&P*!Ym<5~>endstream
endobj
5 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 120 /Length 2263 /Subtype /Image
/Type /XObject /Width 350
>>
stream
Gb"0UH#+0p*5M)GH>j0WTFrdu!g24eE`>HpUC[t>'p3IV%>':aW)s+$0lf["&PF]GM:%uQ_8O8"9oPfDs6tg_K/`R\)@sIqlL4BTh4<6Ph)?@cgR@Tlo>g:bRsjmWn$g'"g"f[M<g<Xbzzzzzzzzzzzzzzzzzz!3#KQhP/$PWtnE/7YZ6JmdqSsNGZBuaYr[hoH+CbMs8jW"W_Z0qN&SO+8_>V^><!?7L9aGiB:36<aR>/De,dTs"dW/n=tYn@@IYt^3f"@Ih/A?Y]VGp81uG[peeoHYgio'hm`&MIoP`;r/k<j=`#c!V-O^Ah.5(#,1Rr/okLDu0@G?8`o9S$Z!k)PUpXA^;>knsZL?SBHJbh\e9?tPU-dD(Q"lPcpYA$^kFD>#2DouOmZWj2:RsH:=3!s=*D5MZ=-M86YuE:mV>CthWtA3qhm*"QghM7'CW;XWP?[gWX45f0n*F)8;h#fa%np!ZoCPH3Q"LM'-[/"j,p(#\L5AEgdbd,So\Dp[JeN2#Cgn571;7rG8S;JH,"St`=Y5Ok\=5D^p<HY?0Cq*I\i-jtW=4!0<ul@qh'Vf;'o*UWk`#1N)&[24oLL'fr&5@hr!lI,3R.cr=ii;RD>%B+lkYTMR>AL_IXTH)G$ZXci_^=fL)L:EjRV!Bd(V9fbeeftOCIac\j;'chH1e#Ue[9@cd2K4Fr!a)n!p&bgn@MDEqV5'I;66tYGhqu%9.4dp!e$T9:>X"[ltDF?F"F:k&gK8LOO6r-MLF\CfGoP=!tGV'k<dXSlt<"1W_<I2JoD8(9!itST`nkfe9f",8"sjPfIeGqIZ).HHFI^4l7Z-bq:MF\'+;h^K:A?Y0%RGA!ZN0H'&mOF#RMlMRf5OBQKsqA8oC:T4JFJ5(U)27A*a+Q/ZA_BDIQ&4,qDk?+[RaV&PI03DW@\OR8<B=1>ThlUJEQ1tSl<L?kb#Y+AjVV5&0[cZ[T4PPh_O]$nPU1S7e3SVV8k+5QqcXkqauS+#Wco@:ELU60\bTJ9,$8o/&E)4WD(B,O(+b$[5f5d<X*`QRPT/R5dJT5Se:n!sojh$8)QNI0eI:JGEae'U77S-[>M_cum"<&&$L_map'IJT$]MO\$'cR$?=G<FPis.2APU&&r\4lsTu4hJ@mY1\XP1NiT9?8WTH?4:[?nPk84_$RGqQ8)':)=1uJ-rrm8GZd2@\#Z"R'U\9C]rq&Ph-E$N.RR(,cTjYaoUcUG<pssK?:sWC@_9$cVZ12PG:*,3HTcci]OrP&hVFiKP\XmAf=pn4`uUbo?p:ZM-3kl%5o6S!/7W?LMPi4_%o/MRZ]&>@b$[Gl5d<X*`QRNc#Iq?FVq,SV>5M?TNRN7Z)Ht[4f51-X?2?jF-N;'7m:-%G"'$G=S)fXD\;g6SI<pT2ogE`/c1M>%Z'E-]4)q2K%gSWVb$[#_V_Wo9:71.LN+(/W?pBQ7YsKqZbNc&1Y&8e?_p2CK".>4mb870k=6Ts1\a+T)-8">6[k_?&G^QL>.-J)dU\*a=a%Q&;B]^fF:M'%>Y-N4#K?Yg9aq-`r@@#4pL.NnJr@A#h$E6uDQ!sV*T7K&4d=43g9"hrF5A6/;o1ceAU%q+Q[<;=[TZYWn]l'7b8,_Is=io3?<#NOX-d;-a`\;+<Yb+@W=<WrEUG@df\S%-@b,G.>o&MFro02?daHuAcFurlMY0"e+^;[Oa$th&[f6h:l[r_;VqG\?L#H,SbB-5$eQ,.nbJRX=4Wf>/_Q0J,`:+RHcg[dKd:X-(S`a.OdR.48CG.DcR:[K[Mfa?n(G=fI2Sk"[.T(Sp8KF^h;Qd7jM2W%\Ac6?)dO@loX).`'#X++Y1kCljHohQdV<decZl<<?`@a5PXaVK;YH"*gQ4lfN4]a(*GnWI7"=ACo_4aDD8X0,koFA(5olHOZul@-67O"73d-sO0a*q*@eg?50u-t-TK4%a=##T9-db@_\[hoL$lKB4Wc`<rSD)jN__D:qm6[UirR4')Bq-$kbJd'<h;54OeC'Qf2uA^4PDbRLnl0.?"\S[4j,k1;JAnh>6O0JW2?-+5R^$r32OZ](SrA7C$/D)7*C.tX"bNQSJCZ;,PaW7K48VY08N^RL6(qH1#:[Zn7US:L06WbDRKs)OL"1.Y3O2_eCKeaM2O-2O^p3(MRHGp$`VC&G)<?dm./dJm6TR>8MOe2W2sU\IlE0Yn(%I$QMZNK!=U<$e)(ckSi0<F$KjIO"pY%OqR2=B#J)Z)A'2@Sn!Czzzzzzzzzzzzzzzzzz!%ICZ[=\bf~>endstream
endobj
6 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 90 /Length 2549 /Subtype /Image
/Type /XObject /Width 280
>>
stream
Gb"0U$#g>t*!btg,d%GnKncJs5U@_PXUpaH)Ti3CWhW1eN^;K$ALJRAheM.!lABp.UPPpALo-1h8DKGcOG&E.+qjGBSbsfr41jtKHS9[,2<I!lREY+!s53kE^ANGls8Tf]-Bm+N6psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF26psF2ru7_'0//kii9d)4WUf\/P`t-fWn>rHrJ#asCm5A2"&B_B^UJ.5Pg)(W4tUjAf'D)"GAH+82g'Isrrd%Tku'ZgpDf*>*^&'j%Alo!_-k#Hm)R^:BuZ,#j5QM<A5pRB?GHJOA7TAgI_V1!pVc1n8h.3@TNI-"W&JJ@6Amu`DZ$t#kgF%?VQ+_#>uHrS=0cl.$r(S`p^gCfHs!XaaZN9thnJDf_ha+TerJNh*iU_n0Nr1o`'5C=/bZ0)s,@upTEO@Flpm!P1EX/;nPE.^HpU/o>TODT3(;.<AANm'Pr(cWQ7j>]Cu2M]Akd,/Jj7EPmL@Y>H0!&eZ;jq+fa8Jn[CBSc,Q1K).J#A=+<K?2&$9%XQ?";NF*$0!][a$YlhbcPNu[EiE#XrL%j,\KHR19qji]m^o1L&^DXQ>m2,O;58\$0Bi`mN;<!\XWL^/Pj&f'!g#kmWLL^#5&I\8.)EMGG7e'bo!GMTh`e5]g]R4hm25WLIER]Yl)q$0n*Wq>puBJ<i00,AbH/WW<adb2aa[Er=#MEt.7`;buHhl+`kB52'#3Rgi,fO!6Gb*6W:p;e\nWouZ7.MeP;7l!NMoiXH!Y@%;R$BYq<LG-V5C23DS-!i"-*BNPN\AGIHe(_6D;c(2B;t$PULLVJg\u!B:)Wq]KhV8bR%NK.0X%N<epnT%O0[spgk`!J:[53m1mft4hnR?p2@+JrWBU^pY9=i)obG0Y/jchl*VF[gmrLjq"4\F_o")tM6Y\@!Ik0+,[aisD*9TB[)2fHE]Wcmb>":)t<-J#>J6bcQhH*h^0%lD(/=]OH'\&."82dmjZ.`C>7g6kJ)pX?"an$5N;#3QFZB?@PQPGYrS.`bI^aWkASU`Qna<jQG"a"iB"=IqMB-`-OhYneb@]t9K*.g\5[(J9s=Ngr^6o#9nTaZo'7C7Ie]-/H-')B+PS\O]?BnW24fQs_Ihn%MMGVY928Sc-Vuj7;<C0)p.E9B)0u1)3KF%NYC6<Y<>S=_3k4rq,H=Y^H*,7oG8e96PJmMg]%oL[t94a2mP93T"<=b*@2CHaK)/<N=hE11FUrTr7&u.G)Lf@,PbSl#?+/Tk_m&TffWY+,heV\n0&t0)p.E9B*$8Ot"hS8"R5O@'sk+KCT!L.>-0:/YckY<O(ONXL;e^9L;T4ZTtX'?U-lhPUIcrB$L>)m*Xs:n(?88?f*-*]dE_ec'g:C2nME;OZiZ53qY[;QRs0Anp`U3,gOOW-/dn,mD=RPe8p"]pDftG9"K3%J^k&?An!bFUU'a<!t6%[Nq.i+Is'_H9D)*u*^2uu8"4dWad7=`V2tZAePgHeNus^l=nB)u9HDA&S,Jj=pE!?O0-6fIKcN7dl44isjmo>m7l`)\PUY%:&W9?e;eG^SPk'ORW`<D9H/H=G=PgHdZ_eD(7ZAKS>@!%u6m4UX>FWL`\./VOOH?EZ6pGbl]+#V>8\%%a!W+Y859!RoWM=`LZ_-IFQ<;tIiH*8;165`ZcH7A1_%^V<[dFu,8P&XP,q?=noK,(DQ6tW+BP`'Gl.0^`]"RWT#)jC1X0AhA;IVB[4Zo<A^&#/mDCflN)>CIdI:%'pUJ'VX&1>O].]/`'7l!M*8b!Z\Ge$!ZlINXb/pOWe()f(nX)9V0hH8f#d_,B`o=6g"F_H;XO]@>0%imb"5p<*Z(h=CCO,WrR3,k]SrrISN>0-sjTF?%48&^T(o158niPLMfCY/:31m$<.AA3-bIMMP:aNZ:q275KfLCO,`hm:OrEcTsc0B(R-UMJK<;NEE3`BQa[L8)>1s0Y;;,D1HX^!l'<$)W^5NY\8,R59hi8&^]+o10b'M-dk>1_!Kg*2qBTgt>,%eZ%#8'L$m+ThK+KW`Hg"S*Qph$JN_!ZY(5G<F9M[`.*CDkL'=c]/>TjDdJYj1?`AuU64U9-^Mn7;[l;Dh_?jHMCBq8Of;`G,\%Yo^SY&OrrUXqrJ$d%;VStd;`$I^3`%91R7HfWl.ii0ACVh%6!fijL!CoqI`du$P.])`/%K-.T]"`FClZ-3O&&B/*a@`&:Rq3AGuRHPrI&TAjgRd#ED?)5Ln*YS91]4RUJd+\O5+V,`N[q"nk0>OeJap&,i=&W\F?Z60lA!2Pq"r4:p]A2A??rhTN&'b(9LpAQ&!C9gsDHZ`K>65-m0X=)Io"@YsE2B&8L[iX/_a2N?((kL$@jPXSj]qPlEREI^q7Meot#$1QUVk9n;Jna]A>Wd%SX?Sk%B.;1sZn7RZl@9(L6P/tJEpKf$hh[s@T*;MuPMO,/UJLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCM!1,r+3k=+Zi~>endstream
endobj
7 0 obj
<<
/Contents 18 0 R /MediaBox [ 0 0 612 792 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
/FormXob.2c2d8c1a59ccd390014a13df1823520c 6 0 R /FormXob.4239313bbffe37482d3f1e78247febb9 5 0 R /FormXob.c61c5faae8c5519bf83811c2a31afbe3 4 0 R
>>
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
8 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 80 /Length 1760 /Subtype /Image
/Type /XObject /Width 200
>>
stream
Gb"0SHUnlS*!btK%spT278X2APSBr^+VdBXo_M3)&dk?LrDb",77$mGWO]17lYB4#;)>3%bSOEbO!W"Th-+sQopKFU[<0sbgT0/2GJACT__fZh74r[f^;G_nF3\\DS,%*ebc(-al%k.OLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLknUFdH%':2/+Xj/L0D?U!H(`SMcPE7;i!2gZ1uM`-+3?['^uUfj9Mei0%Kqg_[`OU:&rJNJ>IBZLB_;CQsT)lOP9^Z?DP)0frt"_5)_7b2US(1s\@2S)Soc1GHj^:4,LCk+stsS%W0TX6OPe/%N%u[QB1'ahsD:d;Pe^S].eR:GZ(oIjUp<[kUr@RB*OQc7aB\<JO;dfCQ.`%,EoCmegVsbP!=Mc`G;((Yn>1Qa2([\Q]!WE`n%$X:JH`.Hf-pkQ$@Cla,]7W#ls#_nR4E*JhDk=_^$67ImA%Q*jsPZo%EU?hs^V7pj<NOZm%5MqJmoO$9RiKHYuq0^nElfkHXT8XFKN@qaXQN\E!LHUiC_3i]FET&;g.W3)1d1"=S+n8[A2F(L-F.Ku$R@fOE28"Clp73qTFm?*sJc':DFl[;iG4m"I]K!Bq3f]8gG*#nAs!#$8lAV\2u`,r9LgJs[G=T"i-1Y#FtfJZfU2%ZNuK@_U=Z)W#)El!dM?glq?TK9+N;`TTf@bnVM]9k*1KK,C>9XrAn9mOn#o+Z#1X./oD1%_XGSa;L)/*tl3eRO)Igg9(c=9P?3YHHNu1Rbk[:LU).nsp'X5g\g>O2i<mVD"M-f'OEjhf'h/L='PMCjGBF@rb,kA,kDdHcdEV>l4>c$jN#+ba!Un$eOd_gRU^&Q7o_YY.B^%6afL%=4PVV=.1'pFZ/9]no/0CG/`gb:304;ZCn#$"J'dIeM1-KDm%FAh*:?$HJoT?*`o?p*B"@bRu?Hl?]gtdniu7Do:BVjqu$jpoW,N(jl+?e!CDKg"ACZ(ICB\`Pi!RMX4[[&.D,c&rZ3S-Z#\YQemm1kb.l#)1p*m`Q3Jm/OqT>Z`T[-Ao;[,a`4UkR4:jq[I$]Y7)^CfqeLZtcQ_h8fh8A(4_>Ucb8<]_R"h+hVM<<=RG29o?af>BD<n3*T(@Bbp!a[\kh\W#4jP^]uA?P8t`MX&JAE@;l74aT@%?7Y`]]054#AViMGrk_G&-\u[:5PQVF*/]"KNMoEYHOs23I!XLqt4X67(KB->\P6<pDA62SVg;,b!)ZRVW/jbXa+Z`5^](ir+(k53+>mk=aqRaJ4RZAnBI\?g0C2j3+JBOMi:anWH&.SAJ&V82n>#m!BWl&,fq4lb!+ci9\`S:HDRo.BQZsTMri-ss5GA_qi3e;l504J.+=N^E]A3E0HK76j^T!CH)c0nj.>1hAlV?$:.#M7PTM3=/,P"?esj*,QAN@<j1We3^?ZF3-&BU=n4cuU?P0!Kd$Da)b+lm+LBY?:9-:&c-V%N6,k-'$EUek'.jVDDMll(JBA!m1,NZ*C1$\;]6WGci0oq1+f-(*<a=d$f,_qa;]7ici[hN&JCi0,fGdOF[=V80<i-g/g^!U@QQ[)>/4RI=sXK:J,?`0/>^^Hh!HrBo2g!<pV1X'$oWLb!8)6J=h,Nb+co-e3#]Er%1Zd<Wajrp*Z:8XS0f'r#nmfshA0H0GN$@3`R*9"!![$E49K?ZR(%k8[2`O]d7.m"8+4=iPTl[ZcU&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J<DAoagkMd>.~>endstream
endobj
9 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 90 /Length 2270 /Subtype /Image
/Type /XObject /Width 250
>>
stream
Gb"0TI8!XP*!bu?=)2B:rFIL[<U7o;C2'm*S(3g?[8s>/XdQTi]!gmb[^Idi+ta!1:qXS4:d@8L'MpPrJg`9]G_&*oj[B;t]5lk:?7t$ILI[@8kAi3\CIb/gh.Q)Ek</Lok<AWechX,Q0jS?G&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J5Te&J=7Cogk<ooF^UY`+:%758<isS9sUbYU%%h\*1l-06V]]CH%]2VJFo/2O&LQFs,_YQ':p/VdeHX*kT2EIG&9.^M`nEI:RR*Is]prrFYn#fWG+UG,:[DKPCJ$R=8l=\+R45gTY'gD"6j*nR)JXFWU"Y\(ImSZt%<DqOH2dJnb6d9I]?p[fiB5^p.n#3Fk?iYM<;q?=9A/kN:ATf4<C`)JnVO4)M%AWCpE`A=@MC6e:fZ]P)Raq5RY#Psgr1[eA;6etG7qa#p^FrDr!/Sc@Q=pU4/4]D>gc>*2Vn1,m/Gn3kt8li['\Hn5te(OPl/pWGa:.L7N>_;@'9@<[JIfm!Y;Fq#iQ>*W-"?9%?^H5lQWk=<Lu)bGP5ObE.$h3ueCl2fsEdh>lTn6C@jE`DEN@Y6eMrn/d0i\NHOV7gu!C#d$!c-s:"Fp6_:k[T8imJ(imbu`b$:NMTpr=[DAT>d[e:Mt8r3&G@,o^\lq^-V.Z8)/H?fJDcrV_gUnVVOd(duGZT-kBK3>2u38o=s-HoZkh#<J:\\i(1$E%%S1a)KC;H17f>'HO)g7iPAqb*?VHJ-=VTGHa%]JF'3,%lla\.dQTcMN;e)ejTWs:%[[umnS*_+Za2jAnhE\CDT?cfD27\&:WLNs_X7auj8$^d=E\jJjg;5%@nm"!I^E'mX,_Qe&oVaV4_kS13@#q!q9<I-_q%%:)GIc*FJ_4uX).EJF?3I[[T[Q%?<<*Z`kk3Q-1/B&q1trKafIf*XtP!U<=p/r^rsb%=JQsubg/'+G&+AuNQ3q!o.`f/Sd^nm<Yi28.jDM+Nm_T'*-N1B#ah.UZKO'F2A\=L>s7W0<kQ7iQ03N*>Q=V70^V?XR<HLKI8KQNg;E@e([#RuX?N6D2q.4hko':A'<sh`Th1SA]4V_=o5+uk:]>gka/d9qO+'F+WK,Cnma+q_KLX-/jm#i@42rBQm+X_ZVL=*kL5UK>;"%oHQTRK+]92`]*Tq!u(?gCneoRmJNV7C/L2"P8)itN!c#Kl;?%8Q@eYKmPTL#nCO`pQK:Y>[:G-j1KC@^n$jKsQ<U(MaWMMk^R($_>]3UQ)WXLrhTkAL1Nqp](e_I6for/>(<NMIrhW+k(O4lk$Jjm<a%SE6l$kPB!(2UAaW(-Ef.<N/uep?`qNBl?2jm,PcmdOm/<;::9Nm&u[`!u6_rQ.)>/,QZ*6DWc\b(&-m8I'UZEYbsNH18`kuHI@h;pnXOZH6&@OI_'4/n[p-QAEOajbmVe+LoX:Set;ZYPY+[I-);QJW*%($W`ZD'UE6ImY9f'+3UL&-fRd[]Mg`IuMJk,M8%]:X9(SgoZl;S4g4NuBM*C5I>sIQ`gQ!_l->Kl%='W'uDQh0\0f\R!VF47Uk!oU$#tFHDU\BX]08rLu]D,]k%$.>k<VW/CgHi*j`d/TtPibJgBfD4#X&RhfV%+)MF!"3kM]_@G]qhc<gT0(g:A`ZqOaL)Vk-@Z3<$YGAS)gs:&lK-"rl'-,5*M9ZU"qTa'"@_N%9r#nG[fBdUbhC,+\E4!Ehl-FX!ID,=L8V2%,a`PBpiBBpXPO9:8Mi4hq9Jc`Se+-(0e#sAo0W$I2iVDDl'D%1j:).pF::q\nUk@]<`:?.)UEC>OVK7@+pU91[Q?,6QDZ>O,qk&.sg4Q*]br2pUa\[#&)fll[H8)WI:\/C:U4Z]YGM+6U9^"OU"r0`)g?f3J@+Ci'L9m(mB-5CW(].TGe^7*=S;MTPi2Rh6P+rr"A(6QcGDq]71jX+KFt[W)E.je3]n![peTp*t>+'88?kl4`HDs4l]n*a"b`C6WIld>bWJ(Y'u_7%uuW0hrKT)nOnirBfD%MCo!"GD;9O\:"i=i%pST,'b75d[?%e*l^o7.rXYfeoV^M%qTF529R4sP*n7Ig(40>)S[_Ul@:!We&UqeUjQpnr+naYj1^;eRLcPQ4'N$S9m>8"nMT59!dcGYu[$sMuMpfSliP7EmKkjDgWjh9t+)0=k5;K+,LkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkpkCLkr2^IfkUlr,2~>endstream
endobj
10 0 obj
<<
/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 100 /Length 2098 /Subtype /Image
/Type /XObject /Width 320
>>
stream
Gb"0UBiEMR(l%"a5&LXl$S!>%iiZ9`.U&YaY./u`/g0/6Q90sJ14UL"F.VBnPD\TMe!!(WkM4Z:dW?k)VOqsC&dedBzzzzzzzzzzzzzz!!!AhcCHJPbE!]-qU6h_PKfRUQ^@*q]/Q_7]6E^CTs(Zg2kCib%eoDIe(Ap=m+JSpq:`5lD/a6SregYUF^4Kqs.96dIe/EoU))hacQ^-&KpuFRB54fT=gR8-KaSP-';\T@AnGY"G^.]7:#WO'F`l<=?2O9YP:A+7/81DnGB^*QrV$'YkN/==RSKD7V4[53\PljB5;4da4[4Ak<968+4Y"3rs*j#;X^(P:L"j(TfD-,=`MKE-l07H+TqQ>X[\Y')G5^4KfQd;emA['6qi%;FUMXjbi<oRt;6`JteWSh_ldoLWH<$lM\@AK?:tJ-25,kSGRj7rrniJfjq!-D18.[*q-eGJ)B@ZY+s7"u7feGBC[VF?m6DaTp[#C',>Ibd15JIF6*n6:0m/6bTml(+Ao=Jqu5.,DqJjNOUDtnEFXN^LjQ06>W09KcCq!g^!*7RRFC<u%`^SLc[/^r#T%1QL$G'.rlO/m:1$*0q[7[rl(^Mdt+eJ+c/HtR*Tm-Le\:RjCQF^it-2Q3uAA`r-rP8a-qm[7Dk4ABZBH2-l;;cAkmeDB&"j&7=hEnj37orIoaH'LL:n6j:s*Vp%G[r/m!j+]EREo]bk^#@WfY&*parp<m_&)P^]U!5/n[TpRrh0,X\>C'@t2Fm`mj]D'j&(_d=),[*mgSP1T2Dmn?Fj?L;'<[O^hoO_/Gir/O?#==ILF4s5>"_n]/($r/NTBibX]sM,oB&bXEpW8`=8Bmt+04Z9cOOpuq5l'8hp\K!X(6*cDSq2<m`B7D@%0_nmF`KTQ]tk5<(:WV:t07,2KdoQ9r0:Mk:-5Wi/%TW-bjD*PGUF:fs:G+Z"$AG%Hf\&O4=ciIC-E4FR7m(SfQh5Q=!p@<-%6OV:_!`KPOM';HJ3'8,agr2uH+"3I^n9b$Vo4D4A5P]f*%M^4!%$`go28\iW^0n&q%N,F*]JX+d^g6dOeIo@r'UC_c7#lJ1O1kd;_DB5`$<Lb$C>=j()&k#J/QGIOk`QgCc'fWOpdNr2Pmn*&tKUo',R?+OlO)&X>2$;V3h1GbJJ>$>*]-7Sb5T31pM=$t7[Lm2h2P)^L,n,E:_p%,Y2hdW)09PRM=B5`$<LatiAIAUhmLQ1\9s5qD;V#7eaE^sqSq)Qa>M\gNVA=%BG='&IirH:X#X)T*>pX#U$qK[(#1&XI>bcgE3==hHMf4nI'4aQa6[CoGB6X1N"X+bu@!8?EU[]B@r,QDN&Da4]XcH]0(Bq!XSY?kL:U&5B2%gVpd]mI6UYeIh8j[3%lDgQiC--ORi9Zp*+DHY$&g`&g*il[?ih4.Z4MG*ToY4cdor*-/uRYHP$)uLJAWq*3)WuUk_o&n>kKD]KNg&;L%3"W'd>L?j,XI.mQ5Ak3G+$Qds;Q43QG&-=O[mOERSf^[$9pJX!9:;TYp2#cebEcM;'(tk_ltg39Z-fK^CYoM"Q!Z&ncjJ[bl:0"k&3N/q)]Nj.hU^7ia0g,cI%DG5pXN'24GfTJj2[5(b7B=*Hc*Tc>hS[`pCo*<e?nnj_SUo<oTdqVT$<CIRHNJLaiX,E(HX3#/]s!kVad>=[.(Q4p/j6N<&A;c=TmgJc't011du.7e]Q@ted1j$dEuCQH@("(<ZP7#ZX:Ir%>QS0\<6^Wfs<'91?d*Yrl3mSTZ+%D\[e`snF)HpD#)TdT:;<KiQ0)2;cAmnJ8t;L=`p&<042G`hUS4BOaiejWtfI?'hqf8=L9HR`g4$kfe@,:(&iV1,#$I*GB\9,kP$@MT0Mcc=3Kri)`OW6f6r-(GW-j@i=3Q%iLaK'%Z/:)rhSi6Pq><=OC/NZda^P+Oajdos0fAEWg`(adP<,I^V;uQ,2'A>fD,-N%IAuJeO7d5e"ckTDd&(U]mEh-;jtkSs"A%krSkeSq>#<dS=#\REofpSPlpcjZ2_S3@B9X=-6qnjH?ra2&2aktW9XB6VaDYCq>Z/g`^Y*/:0Yce<C4%)h>RXW]%X&Bzzzzzzzzzzzzz!!!#WYOE("02E8~>endstream
endobj
11 0 obj
<<
/Contents 19 0 R /MediaBox [ 0 0 612 792 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject <<
/FormXob.1310210de56a359f75cadd6058093d5c 8 0 R /FormXob.85598c76e5387c61e079109a4090d1fe 10 0 R /FormXob.fe6121c1aa08a49ce6c0bd2422036546 9 0 R
>>
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
12 0 obj
<<
/BaseFont /ZapfDingbats /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
13 0 obj
<<
/BaseFont /Symbol /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
14 0 obj
<<
/Contents 20 0 R /MediaBox [ 0 0 612 792 ] /Parent 17 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
15 0 obj
<<
/PageMode /UseNone /Pages 17 0 R /Type /Catalog
>>
endobj
16 0 obj
<<
/Author (anonymous) /CreationDate (D:20251020161349-04'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20251020161349-04'00') /Producer (ReportLab PDF Library - www.reportlab.com)
/Subject (unspecified) /Title (untitled) /Trapped /False
>>
endobj
17 0 obj
<<
/Count 3 /Kids [ 7 0 R 11 0 R 14 0 R ] /Type /Pages
>>
endobj
18 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 341
>>
stream
GarWr9i&Y\$jPX:ItbE6&maiL1uX6udNf;FjhN`n',IsXJs<Hg:Y-'n#Xrd8=7TiGM"0G'\HB?`YZN(lJP1Nn<o@lRg/V'H5\cXLWQe5!HU8*Re2Z'rnZ@:sJ/>HT`hpOU*nK9/qZ*Zp?=GnqpB^3Zg\lWZTo68Cf!.WaZc`5in9GDZ%R(!@*)"BsDt<AuYIWQc+ns`3FKk/3P![CZplDX#&*C#u/GnVu^(3)n,O=E=1orRgOGl#P9O=Gh+\K90X1KCIpC'cT[(dJIdRo`IU_IC8%(.j!C^d9i`=VAP6Y9rsUsP`DLoE7j?<cPm=s6^fP\i`S;Np$AJa*p4#]m6~>endstream
endobj
19 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 344
>>
stream
GarWs9hPRC&-h(ireg6C@b[=(,b'$WZqsRqaMDY\bhC3WKAA-SoA/g1NJ)uDKfj9?JA\,A)-_W,%uV_71&)YXbn^"8\FmfqB4*UZD!1LRV[l*=<,/qp_WaF4(>qiqc[,[GDuFLaS#tC!?$4sh\hih/i6T1!ru6I11s&fn"1a/8,Fq*/abM4Z=s1c_&/sbfWXIJ@*k#Q]GOhNl[:$otBErSq[H$5h`F>80m8I?;W?c#k,hdoL]=QEFUh!;+FCil4DK>8,14!Eb`$k;JWPoEIU_(lWjeA,ulbnYu9;@dJA4iG\d24hBH&gG/fiT->V6-I8_9*A$T[7,A=saK3GDm#MXT~>endstream
endobj
20 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 442
>>
stream
GasbV92EDi'SZ;\MW51?/=k35\e>/!#\\19)`FO!BXP%f9\#d(oV'c<'%:B[h"6!gSBbOsou"r$O+@VX@*ZP=n/[m5f\d.]pdmKT@+iNS)B7_SSCInc`.b=90mXAeShRgo1_kUi"ZO^NMCDDo$Ibd]rX+,JKC*!s`3K`nK2<aBfXW76cW@Xn6.)UI3TAg)YU-,:S@1@Y@,oZp1Ih%l$8;+t<Qm9SWZt1Rmdq!uZh:C#@kaEJQ#g*-FO3u80@>oG>q4iWhFc1hYI4r'_j8bX;T\rNki)>`]lI15^[ObkfsST8VodBK%7U*+4ust^O'%Jk&hHsIW1DRX-QC5H*H?@\rGCjBpH>n<pFV"SO'[^q#?LST4n2!.,#"X2_L!\h,(tfsFPG7;rAVi!7GdY`jEnI,#ZXm%9V`O4h'ntl%(?h6^"W)t.%GYckaT]4~>endstream
endobj
xref
0 21
0000000000 65535 f
0000000073 00000 n
0000000136 00000 n
0000000243 00000 n
0000000355 00000 n
0000001997 00000 n
0000004451 00000 n
0000007190 00000 n
0000007544 00000 n
0000009494 00000 n
0000011954 00000 n
0000014244 00000 n
0000014600 00000 n
0000014684 00000 n
0000014762 00000 n
0000014958 00000 n
0000015028 00000 n
0000015325 00000 n
0000015399 00000 n
0000015831 00000 n
0000016266 00000 n
trailer
<<
/ID
[<e9790a42050f762a07099aba1d88bb8b><e9790a42050f762a07099aba1d88bb8b>]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
/Info 16 0 R
/Root 15 0 R
/Size 21
>>
startxref
16799
%%EOF