From 884a3e4f357b5bfd286c9395ab31a7ce89d52541 Mon Sep 17 00:00:00 2001
From: mudrd8mz
Date: Tue, 29 Jul 2008 22:22:15 +0000
Subject: [PATCH] MDL-15055 Upgrade shipped library TCPDF to version tcpdf_php5
TCPDF 4.0.015
Modified lib/pdflib.php wrapper
---
lib/pdflib.php | 28 +-
lib/tcpdf/CHANGELOG.TXT | 488 +
lib/tcpdf/LICENSE.TXT | 504 +
lib/tcpdf/README-MOODLE.TXT | 14 +
lib/tcpdf/README.TXT | 127 +-
lib/tcpdf/barcodes.php | 808 +
lib/tcpdf/config/lang/eng.php | 36 +-
lib/tcpdf/config/tcpdf_config.php | 387 +-
lib/tcpdf/config/tcpdf_config_alt.php | 227 +
lib/tcpdf/fonts/.noencode | 0
lib/tcpdf/fonts/FreeMono.ctg.z | Bin 5009 -> 0 bytes
lib/tcpdf/fonts/FreeMono.z | Bin 111208 -> 0 bytes
lib/tcpdf/fonts/FreeMonoBold.ctg.z | Bin 2983 -> 0 bytes
lib/tcpdf/fonts/FreeMonoBold.z | Bin 67393 -> 0 bytes
lib/tcpdf/fonts/FreeMonoBoldOblique.ctg.z | Bin 1684 -> 0 bytes
lib/tcpdf/fonts/FreeMonoBoldOblique.z | Bin 51235 -> 0 bytes
lib/tcpdf/fonts/FreeMonoOblique.ctg.z | Bin 2412 -> 0 bytes
lib/tcpdf/fonts/FreeMonoOblique.z | Bin 81664 -> 0 bytes
lib/tcpdf/fonts/FreeSans.ctg.z | Bin 4481 -> 0 bytes
lib/tcpdf/fonts/FreeSans.z | Bin 148324 -> 0 bytes
lib/tcpdf/fonts/FreeSansBold.ctg.z | Bin 2193 -> 0 bytes
lib/tcpdf/fonts/FreeSansBold.z | Bin 46328 -> 0 bytes
lib/tcpdf/fonts/FreeSansBoldOblique.ctg.z | Bin 2039 -> 0 bytes
lib/tcpdf/fonts/FreeSansBoldOblique.z | Bin 45965 -> 0 bytes
lib/tcpdf/fonts/FreeSansOblique.ctg.z | Bin 2317 -> 0 bytes
lib/tcpdf/fonts/FreeSansOblique.z | Bin 55670 -> 0 bytes
lib/tcpdf/fonts/FreeSerif.ctg.z | Bin 7004 -> 0 bytes
lib/tcpdf/fonts/FreeSerif.z | Bin 314198 -> 0 bytes
lib/tcpdf/fonts/FreeSerifBold.ctg.z | Bin 3046 -> 0 bytes
lib/tcpdf/fonts/FreeSerifBold.z | Bin 98326 -> 0 bytes
lib/tcpdf/fonts/FreeSerifBoldItalic.ctg.z | Bin 2647 -> 0 bytes
lib/tcpdf/fonts/FreeSerifBoldItalic.z | Bin 65516 -> 0 bytes
lib/tcpdf/fonts/FreeSerifItalic.ctg.z | Bin 2889 -> 0 bytes
lib/tcpdf/fonts/FreeSerifItalic.z | Bin 81237 -> 0 bytes
lib/tcpdf/fonts/README.TXT | 28 +-
lib/tcpdf/fonts/almohanad.ctg.z | Bin 0 -> 2780 bytes
lib/tcpdf/fonts/almohanad.php | 101 +
lib/tcpdf/fonts/almohanad.z | Bin 0 -> 121292 bytes
lib/tcpdf/fonts/courier.php | 5 +
lib/tcpdf/fonts/courierb.php | 5 +
lib/tcpdf/fonts/courierbi.php | 5 +
lib/tcpdf/fonts/courieri.php | 5 +
lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/AUTHORS | 44 +
lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/BUGS | 3 +
lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/LICENSE | 99 +
lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/NEWS | 1055 +
lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/README | 59 +
.../fonts/dejavu-fonts-ttf-2.25/langcover.txt | 193 +
.../fonts/dejavu-fonts-ttf-2.25/unicover.txt | 160 +
lib/tcpdf/fonts/dejavusans-extralight.ctg.z | Bin 0 -> 3485 bytes
lib/tcpdf/fonts/dejavusans-extralight.php | 119 +
lib/tcpdf/fonts/dejavusans-extralight.z | Bin 0 -> 147954 bytes
lib/tcpdf/fonts/dejavusans.ctg.z | Bin 0 -> 9642 bytes
lib/tcpdf/fonts/dejavusans.php | 322 +
lib/tcpdf/fonts/dejavusans.z | Bin 0 -> 326816 bytes
lib/tcpdf/fonts/dejavusansb.ctg.z | Bin 0 -> 9384 bytes
lib/tcpdf/fonts/dejavusansb.php | 314 +
lib/tcpdf/fonts/dejavusansb.z | Bin 0 -> 297973 bytes
lib/tcpdf/fonts/dejavusansbi.ctg.z | Bin 0 -> 8419 bytes
lib/tcpdf/fonts/dejavusansbi.php | 285 +
lib/tcpdf/fonts/dejavusansbi.z | Bin 0 -> 280423 bytes
lib/tcpdf/fonts/dejavusanscondensed.ctg.z | Bin 0 -> 9642 bytes
lib/tcpdf/fonts/dejavusanscondensed.php | 322 +
lib/tcpdf/fonts/dejavusanscondensed.z | Bin 0 -> 278499 bytes
lib/tcpdf/fonts/dejavusanscondensedb.ctg.z | Bin 0 -> 9384 bytes
lib/tcpdf/fonts/dejavusanscondensedb.php | 314 +
lib/tcpdf/fonts/dejavusanscondensedb.z | Bin 0 -> 275365 bytes
lib/tcpdf/fonts/dejavusanscondensedbi.ctg.z | Bin 0 -> 8419 bytes
lib/tcpdf/fonts/dejavusanscondensedbi.php | 285 +
lib/tcpdf/fonts/dejavusanscondensedbi.z | Bin 0 -> 266323 bytes
lib/tcpdf/fonts/dejavusanscondensedi.ctg.z | Bin 0 -> 8672 bytes
lib/tcpdf/fonts/dejavusanscondensedi.php | 293 +
lib/tcpdf/fonts/dejavusanscondensedi.z | Bin 0 -> 263109 bytes
lib/tcpdf/fonts/dejavusansi.ctg.z | Bin 0 -> 8672 bytes
lib/tcpdf/fonts/dejavusansi.php | 293 +
lib/tcpdf/fonts/dejavusansi.z | Bin 0 -> 280376 bytes
lib/tcpdf/fonts/dejavusansmono.ctg.z | Bin 0 -> 5840 bytes
lib/tcpdf/fonts/dejavusansmono.php | 196 +
lib/tcpdf/fonts/dejavusansmono.z | Bin 0 -> 181541 bytes
lib/tcpdf/fonts/dejavusansmonob.ctg.z | Bin 0 -> 5593 bytes
lib/tcpdf/fonts/dejavusansmonob.php | 188 +
lib/tcpdf/fonts/dejavusansmonob.z | Bin 0 -> 174731 bytes
lib/tcpdf/fonts/dejavusansmonobi.ctg.z | Bin 0 -> 4451 bytes
lib/tcpdf/fonts/dejavusansmonobi.php | 152 +
lib/tcpdf/fonts/dejavusansmonobi.z | Bin 0 -> 125365 bytes
lib/tcpdf/fonts/dejavusansmonoi.ctg.z | Bin 0 -> 4675 bytes
lib/tcpdf/fonts/dejavusansmonoi.php | 160 +
lib/tcpdf/fonts/dejavusansmonoi.z | Bin 0 -> 127172 bytes
lib/tcpdf/fonts/dejavuserif.ctg.z | Bin 0 -> 5499 bytes
lib/tcpdf/fonts/dejavuserif.php | 189 +
lib/tcpdf/fonts/dejavuserif.z | Bin 0 -> 164620 bytes
lib/tcpdf/fonts/dejavuserifb.ctg.z | Bin 0 -> 5230 bytes
lib/tcpdf/fonts/dejavuserifb.php | 180 +
lib/tcpdf/fonts/dejavuserifb.z | Bin 0 -> 148570 bytes
lib/tcpdf/fonts/dejavuserifbi.ctg.z | Bin 0 -> 5237 bytes
lib/tcpdf/fonts/dejavuserifbi.php | 180 +
lib/tcpdf/fonts/dejavuserifbi.z | Bin 0 -> 145186 bytes
lib/tcpdf/fonts/dejavuserifcondensed.ctg.z | Bin 0 -> 5499 bytes
lib/tcpdf/fonts/dejavuserifcondensed.php | 189 +
lib/tcpdf/fonts/dejavuserifcondensed.z | Bin 0 -> 144262 bytes
lib/tcpdf/fonts/dejavuserifcondensedb.ctg.z | Bin 0 -> 5230 bytes
lib/tcpdf/fonts/dejavuserifcondensedb.php | 180 +
lib/tcpdf/fonts/dejavuserifcondensedb.z | Bin 0 -> 133065 bytes
lib/tcpdf/fonts/dejavuserifcondensedbi.ctg.z | Bin 0 -> 5237 bytes
lib/tcpdf/fonts/dejavuserifcondensedbi.php | 180 +
lib/tcpdf/fonts/dejavuserifcondensedbi.z | Bin 0 -> 146449 bytes
lib/tcpdf/fonts/dejavuserifcondensedi.ctg.z | Bin 0 -> 5466 bytes
lib/tcpdf/fonts/dejavuserifcondensedi.php | 188 +
lib/tcpdf/fonts/dejavuserifcondensedi.z | Bin 0 -> 149250 bytes
lib/tcpdf/fonts/dejavuserifi.ctg.z | Bin 0 -> 5466 bytes
lib/tcpdf/fonts/dejavuserifi.php | 188 +
lib/tcpdf/fonts/dejavuserifi.z | Bin 0 -> 147838 bytes
lib/tcpdf/fonts/freefont-20060126/AUTHORS | 181 +
lib/tcpdf/fonts/freefont-20060126/COPYING | 341 +
lib/tcpdf/fonts/freefont-20060126/CREDITS | 480 +
lib/tcpdf/fonts/freefont-20060126/ChangeLog | 1443 ++
lib/tcpdf/fonts/freefont-20060126/INSTALL | 57 +
lib/tcpdf/fonts/freefont-20060126/README | 142 +
lib/tcpdf/fonts/freemono.ctg.z | Bin 0 -> 5015 bytes
lib/tcpdf/fonts/freemono.php | 330 +-
lib/tcpdf/fonts/freemono.z | Bin 0 -> 122679 bytes
lib/tcpdf/fonts/freemonob.ctg.z | Bin 0 -> 2991 bytes
lib/tcpdf/fonts/freemonob.php | 196 +-
lib/tcpdf/fonts/freemonob.z | Bin 0 -> 75439 bytes
lib/tcpdf/fonts/freemonobi.ctg.z | Bin 0 -> 2002 bytes
lib/tcpdf/fonts/freemonobi.php | 117 +-
lib/tcpdf/fonts/freemonobi.z | Bin 0 -> 70716 bytes
lib/tcpdf/fonts/freemonoi.ctg.z | Bin 0 -> 3320 bytes
lib/tcpdf/fonts/freemonoi.php | 191 +-
lib/tcpdf/fonts/freemonoi.z | Bin 0 -> 108815 bytes
lib/tcpdf/fonts/freesans.ctg.z | Bin 0 -> 5485 bytes
lib/tcpdf/fonts/freesans.php | 315 +-
lib/tcpdf/fonts/freesans.z | Bin 0 -> 296475 bytes
lib/tcpdf/fonts/freesansb.ctg.z | Bin 0 -> 3497 bytes
lib/tcpdf/fonts/freesansb.php | 183 +-
lib/tcpdf/fonts/freesansb.z | Bin 0 -> 85403 bytes
lib/tcpdf/fonts/freesansbi.ctg.z | Bin 0 -> 2632 bytes
lib/tcpdf/fonts/freesansbi.php | 153 +-
lib/tcpdf/fonts/freesansbi.z | Bin 0 -> 63094 bytes
lib/tcpdf/fonts/freesansi.ctg.z | Bin 0 -> 2909 bytes
lib/tcpdf/fonts/freesansi.php | 171 +-
lib/tcpdf/fonts/freesansi.z | Bin 0 -> 163535 bytes
lib/tcpdf/fonts/freeserif.ctg.z | Bin 0 -> 7842 bytes
lib/tcpdf/fonts/freeserif.php | 473 +-
lib/tcpdf/fonts/freeserif.z | Bin 0 -> 606181 bytes
lib/tcpdf/fonts/freeserifb.ctg.z | Bin 0 -> 4557 bytes
lib/tcpdf/fonts/freeserifb.php | 250 +-
lib/tcpdf/fonts/freeserifb.z | Bin 0 -> 146460 bytes
lib/tcpdf/fonts/freeserifbi.ctg.z | Bin 0 -> 3160 bytes
lib/tcpdf/fonts/freeserifbi.php | 192 +-
lib/tcpdf/fonts/freeserifbi.z | Bin 0 -> 91038 bytes
lib/tcpdf/fonts/freeserifi.ctg.z | Bin 0 -> 3441 bytes
lib/tcpdf/fonts/freeserifi.php | 208 +-
lib/tcpdf/fonts/freeserifi.z | Bin 0 -> 214494 bytes
lib/tcpdf/fonts/helvetica.php | 5 +
lib/tcpdf/fonts/helveticab.php | 5 +
lib/tcpdf/fonts/helveticabi.php | 5 +
lib/tcpdf/fonts/helveticai.php | 5 +
lib/tcpdf/fonts/hysmyeongjostdmedium.php | 45 +
lib/tcpdf/fonts/kozgopromedium.php | 62 +
lib/tcpdf/fonts/kozminproregular.php | 60 +
lib/tcpdf/fonts/msungstdlight.php | 37 +
lib/tcpdf/fonts/stsongstdlight.php | 38 +
lib/tcpdf/fonts/symbol.php | 5 +
lib/tcpdf/fonts/times.php | 5 +
lib/tcpdf/fonts/timesb.php | 5 +
lib/tcpdf/fonts/timesbi.php | 5 +
lib/tcpdf/fonts/timesi.php | 5 +
lib/tcpdf/fonts/utils/README.TXT | 80 +
lib/tcpdf/fonts/utils/enc/cp1250.map | 251 +
lib/tcpdf/fonts/utils/enc/cp1251.map | 255 +
lib/tcpdf/fonts/utils/enc/cp1252.map | 251 +
lib/tcpdf/fonts/utils/enc/cp1253.map | 239 +
lib/tcpdf/fonts/utils/enc/cp1254.map | 249 +
lib/tcpdf/fonts/utils/enc/cp1255.map | 233 +
lib/tcpdf/fonts/utils/enc/cp1257.map | 244 +
lib/tcpdf/fonts/utils/enc/cp1258.map | 247 +
lib/tcpdf/fonts/utils/enc/cp874.map | 225 +
lib/tcpdf/fonts/utils/enc/iso-8859-1.map | 256 +
lib/tcpdf/fonts/utils/enc/iso-8859-11.map | 248 +
lib/tcpdf/fonts/utils/enc/iso-8859-15.map | 256 +
lib/tcpdf/fonts/utils/enc/iso-8859-16.map | 256 +
lib/tcpdf/fonts/utils/enc/iso-8859-2.map | 256 +
lib/tcpdf/fonts/utils/enc/iso-8859-4.map | 256 +
lib/tcpdf/fonts/utils/enc/iso-8859-5.map | 256 +
lib/tcpdf/fonts/utils/enc/iso-8859-7.map | 250 +
lib/tcpdf/fonts/utils/enc/iso-8859-9.map | 256 +
lib/tcpdf/fonts/utils/enc/koi8-r.map | 256 +
lib/tcpdf/fonts/utils/enc/koi8-u.map | 256 +
lib/tcpdf/fonts/utils/makefont.php | 564 +
lib/tcpdf/fonts/utils/pfm2afm.exe | Bin 0 -> 22891 bytes
lib/tcpdf/fonts/utils/src/pfm2afm-src.zip | Bin 0 -> 9321 bytes
lib/tcpdf/fonts/utils/src/ttf2ufm-src.zip | Bin 0 -> 741674 bytes
lib/tcpdf/fonts/utils/ttf2ufm.exe | Bin 0 -> 258048 bytes
lib/tcpdf/fonts/zapfdingbats.php | 5 +
lib/tcpdf/html2pdf.php | 195 -
lib/tcpdf/html_entity_decode_php4.php | 309 -
lib/tcpdf/htmlcolors.php | 207 +
lib/tcpdf/images/bug.eps | 1809 ++
lib/tcpdf/images/image_demo.jpg | Bin 0 -> 573845 bytes
lib/tcpdf/images/logo_example.gif | Bin 0 -> 21022 bytes
lib/tcpdf/images/logo_example.jpg | Bin 0 -> 32732 bytes
lib/tcpdf/images/pelican.ai | 147 +
lib/tcpdf/images/tcpdf_logo.jpg | Bin 0 -> 17633 bytes
lib/tcpdf/images/tiger.ai | 3599 +++
lib/tcpdf/tcpdf.php | 13660 ++++++++----
lib/tcpdf/tcpdfprotection.php | 207 -
lib/tcpdf/unicode_data.php | 18321 ++++++++++++++++
208 files changed, 52543 insertions(+), 6364 deletions(-)
create mode 100644 lib/tcpdf/CHANGELOG.TXT
create mode 100644 lib/tcpdf/LICENSE.TXT
create mode 100644 lib/tcpdf/README-MOODLE.TXT
create mode 100644 lib/tcpdf/barcodes.php
create mode 100644 lib/tcpdf/config/tcpdf_config_alt.php
create mode 100644 lib/tcpdf/fonts/.noencode
delete mode 100755 lib/tcpdf/fonts/FreeMono.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeMono.z
delete mode 100755 lib/tcpdf/fonts/FreeMonoBold.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeMonoBold.z
delete mode 100755 lib/tcpdf/fonts/FreeMonoBoldOblique.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeMonoBoldOblique.z
delete mode 100755 lib/tcpdf/fonts/FreeMonoOblique.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeMonoOblique.z
delete mode 100755 lib/tcpdf/fonts/FreeSans.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSans.z
delete mode 100755 lib/tcpdf/fonts/FreeSansBold.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSansBold.z
delete mode 100755 lib/tcpdf/fonts/FreeSansBoldOblique.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSansBoldOblique.z
delete mode 100755 lib/tcpdf/fonts/FreeSansOblique.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSansOblique.z
delete mode 100755 lib/tcpdf/fonts/FreeSerif.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSerif.z
delete mode 100755 lib/tcpdf/fonts/FreeSerifBold.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSerifBold.z
delete mode 100755 lib/tcpdf/fonts/FreeSerifBoldItalic.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSerifBoldItalic.z
delete mode 100755 lib/tcpdf/fonts/FreeSerifItalic.ctg.z
delete mode 100755 lib/tcpdf/fonts/FreeSerifItalic.z
create mode 100644 lib/tcpdf/fonts/almohanad.ctg.z
create mode 100644 lib/tcpdf/fonts/almohanad.php
create mode 100644 lib/tcpdf/fonts/almohanad.z
create mode 100644 lib/tcpdf/fonts/courier.php
create mode 100644 lib/tcpdf/fonts/courierb.php
create mode 100644 lib/tcpdf/fonts/courierbi.php
create mode 100644 lib/tcpdf/fonts/courieri.php
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/AUTHORS
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/BUGS
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/LICENSE
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/NEWS
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/README
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/langcover.txt
create mode 100644 lib/tcpdf/fonts/dejavu-fonts-ttf-2.25/unicover.txt
create mode 100644 lib/tcpdf/fonts/dejavusans-extralight.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusans-extralight.php
create mode 100644 lib/tcpdf/fonts/dejavusans-extralight.z
create mode 100644 lib/tcpdf/fonts/dejavusans.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusans.php
create mode 100644 lib/tcpdf/fonts/dejavusans.z
create mode 100644 lib/tcpdf/fonts/dejavusansb.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansb.php
create mode 100644 lib/tcpdf/fonts/dejavusansb.z
create mode 100644 lib/tcpdf/fonts/dejavusansbi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansbi.php
create mode 100644 lib/tcpdf/fonts/dejavusansbi.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensed.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensed.php
create mode 100644 lib/tcpdf/fonts/dejavusanscondensed.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedb.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedb.php
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedb.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedbi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedbi.php
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedbi.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedi.php
create mode 100644 lib/tcpdf/fonts/dejavusanscondensedi.z
create mode 100644 lib/tcpdf/fonts/dejavusansi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansi.php
create mode 100644 lib/tcpdf/fonts/dejavusansi.z
create mode 100644 lib/tcpdf/fonts/dejavusansmono.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansmono.php
create mode 100644 lib/tcpdf/fonts/dejavusansmono.z
create mode 100644 lib/tcpdf/fonts/dejavusansmonob.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansmonob.php
create mode 100644 lib/tcpdf/fonts/dejavusansmonob.z
create mode 100644 lib/tcpdf/fonts/dejavusansmonobi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansmonobi.php
create mode 100644 lib/tcpdf/fonts/dejavusansmonobi.z
create mode 100644 lib/tcpdf/fonts/dejavusansmonoi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavusansmonoi.php
create mode 100644 lib/tcpdf/fonts/dejavusansmonoi.z
create mode 100644 lib/tcpdf/fonts/dejavuserif.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserif.php
create mode 100644 lib/tcpdf/fonts/dejavuserif.z
create mode 100644 lib/tcpdf/fonts/dejavuserifb.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifb.php
create mode 100644 lib/tcpdf/fonts/dejavuserifb.z
create mode 100644 lib/tcpdf/fonts/dejavuserifbi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifbi.php
create mode 100644 lib/tcpdf/fonts/dejavuserifbi.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensed.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensed.php
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensed.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedb.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedb.php
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedb.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedbi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedbi.php
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedbi.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedi.php
create mode 100644 lib/tcpdf/fonts/dejavuserifcondensedi.z
create mode 100644 lib/tcpdf/fonts/dejavuserifi.ctg.z
create mode 100644 lib/tcpdf/fonts/dejavuserifi.php
create mode 100644 lib/tcpdf/fonts/dejavuserifi.z
create mode 100644 lib/tcpdf/fonts/freefont-20060126/AUTHORS
create mode 100644 lib/tcpdf/fonts/freefont-20060126/COPYING
create mode 100644 lib/tcpdf/fonts/freefont-20060126/CREDITS
create mode 100644 lib/tcpdf/fonts/freefont-20060126/ChangeLog
create mode 100644 lib/tcpdf/fonts/freefont-20060126/INSTALL
create mode 100644 lib/tcpdf/fonts/freefont-20060126/README
create mode 100644 lib/tcpdf/fonts/freemono.ctg.z
create mode 100644 lib/tcpdf/fonts/freemono.z
create mode 100644 lib/tcpdf/fonts/freemonob.ctg.z
create mode 100644 lib/tcpdf/fonts/freemonob.z
create mode 100644 lib/tcpdf/fonts/freemonobi.ctg.z
create mode 100644 lib/tcpdf/fonts/freemonobi.z
create mode 100644 lib/tcpdf/fonts/freemonoi.ctg.z
create mode 100644 lib/tcpdf/fonts/freemonoi.z
create mode 100644 lib/tcpdf/fonts/freesans.ctg.z
create mode 100644 lib/tcpdf/fonts/freesans.z
create mode 100644 lib/tcpdf/fonts/freesansb.ctg.z
create mode 100644 lib/tcpdf/fonts/freesansb.z
create mode 100644 lib/tcpdf/fonts/freesansbi.ctg.z
create mode 100644 lib/tcpdf/fonts/freesansbi.z
create mode 100644 lib/tcpdf/fonts/freesansi.ctg.z
create mode 100644 lib/tcpdf/fonts/freesansi.z
create mode 100644 lib/tcpdf/fonts/freeserif.ctg.z
create mode 100644 lib/tcpdf/fonts/freeserif.z
create mode 100644 lib/tcpdf/fonts/freeserifb.ctg.z
create mode 100644 lib/tcpdf/fonts/freeserifb.z
create mode 100644 lib/tcpdf/fonts/freeserifbi.ctg.z
create mode 100644 lib/tcpdf/fonts/freeserifbi.z
create mode 100644 lib/tcpdf/fonts/freeserifi.ctg.z
create mode 100644 lib/tcpdf/fonts/freeserifi.z
create mode 100644 lib/tcpdf/fonts/helvetica.php
create mode 100644 lib/tcpdf/fonts/helveticab.php
create mode 100644 lib/tcpdf/fonts/helveticabi.php
create mode 100644 lib/tcpdf/fonts/helveticai.php
create mode 100644 lib/tcpdf/fonts/hysmyeongjostdmedium.php
create mode 100644 lib/tcpdf/fonts/kozgopromedium.php
create mode 100644 lib/tcpdf/fonts/kozminproregular.php
create mode 100644 lib/tcpdf/fonts/msungstdlight.php
create mode 100644 lib/tcpdf/fonts/stsongstdlight.php
create mode 100644 lib/tcpdf/fonts/symbol.php
create mode 100644 lib/tcpdf/fonts/times.php
create mode 100644 lib/tcpdf/fonts/timesb.php
create mode 100644 lib/tcpdf/fonts/timesbi.php
create mode 100644 lib/tcpdf/fonts/timesi.php
create mode 100644 lib/tcpdf/fonts/utils/README.TXT
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1250.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1251.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1252.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1253.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1254.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1255.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1257.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp1258.map
create mode 100644 lib/tcpdf/fonts/utils/enc/cp874.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-1.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-11.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-15.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-16.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-2.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-4.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-5.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-7.map
create mode 100644 lib/tcpdf/fonts/utils/enc/iso-8859-9.map
create mode 100644 lib/tcpdf/fonts/utils/enc/koi8-r.map
create mode 100644 lib/tcpdf/fonts/utils/enc/koi8-u.map
create mode 100644 lib/tcpdf/fonts/utils/makefont.php
create mode 100644 lib/tcpdf/fonts/utils/pfm2afm.exe
create mode 100644 lib/tcpdf/fonts/utils/src/pfm2afm-src.zip
create mode 100644 lib/tcpdf/fonts/utils/src/ttf2ufm-src.zip
create mode 100644 lib/tcpdf/fonts/utils/ttf2ufm.exe
create mode 100644 lib/tcpdf/fonts/zapfdingbats.php
delete mode 100644 lib/tcpdf/html2pdf.php
delete mode 100755 lib/tcpdf/html_entity_decode_php4.php
create mode 100644 lib/tcpdf/htmlcolors.php
create mode 100644 lib/tcpdf/images/bug.eps
create mode 100644 lib/tcpdf/images/image_demo.jpg
create mode 100644 lib/tcpdf/images/logo_example.gif
create mode 100644 lib/tcpdf/images/logo_example.jpg
create mode 100644 lib/tcpdf/images/pelican.ai
create mode 100644 lib/tcpdf/images/tcpdf_logo.jpg
create mode 100644 lib/tcpdf/images/tiger.ai
delete mode 100644 lib/tcpdf/tcpdfprotection.php
create mode 100644 lib/tcpdf/unicode_data.php
diff --git a/lib/pdflib.php b/lib/pdflib.php
index c689c2391c..aca158b7b4 100644
--- a/lib/pdflib.php
+++ b/lib/pdflib.php
@@ -39,8 +39,8 @@
*
* Example usage:
* $doc = new pdf;
- * $doc->print_header = false;
- * $doc->print_footer = false;
+ * $doc->setPrintHeader(false);
+ * $doc->setPrintFooter(false);
* $doc->AddPage();
* $doc->Write(5, 'Hello World!');
* $doc->Output();
@@ -53,13 +53,13 @@
/// Includes
-require_once('tcpdf/tcpdf.php');
+require_once(dirname(__FILE__).'/tcpdf/tcpdf.php');
/// Constants
define('PDF_CUSTOM_FONT_PATH', $CFG->dataroot.'/fonts/');
-define('PDF_DEFAULT_FONT', 'FreeSerif');
+define('PDF_DEFAULT_FONT', 'DejaVuSerif');
@@ -70,11 +70,13 @@ define('PDF_DEFAULT_FONT', 'FreeSerif');
class pdf extends TCPDF {
/**
- * Constructor
+ * Class constructor
+ *
+ * See the parent class documentation for the parameters info.
*/
- function pdf($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8') {
+ public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8') {
- parent::TCPDF($orientation, $unit, $format, $unicode, $encoding);
+ parent::__construct($orientation, $unit, $format, $unicode, $encoding);
if (is_dir(PDF_CUSTOM_FONT_PATH)) {
$fontfiles = $this->_getfontfiles(PDF_CUSTOM_FONT_PATH);
@@ -92,19 +94,11 @@ class pdf extends TCPDF {
}
- /**
- * Fake constructor to keep PHP5 happy.
- */
- function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8') {
- $this->pdf($orientation, $unit, $format, $unicode, $encoding);
- }
-
-
/**
* Return fonts path
* Overriding TCPDF::_getfontpath()
*/
- function _getfontpath() {
+ protected function _getfontpath() {
global $CFG;
if (is_dir(PDF_CUSTOM_FONT_PATH)
@@ -120,7 +114,7 @@ class pdf extends TCPDF {
/**
* Get the .php files for the fonts
*/
- function _getfontfiles($fontdir) {
+ protected function _getfontfiles($fontdir) {
$dirlist = get_directory_list($fontdir);
$fontfiles = array();
diff --git a/lib/tcpdf/CHANGELOG.TXT b/lib/tcpdf/CHANGELOG.TXT
new file mode 100644
index 0000000000..47c682c16e
--- /dev/null
+++ b/lib/tcpdf/CHANGELOG.TXT
@@ -0,0 +1,488 @@
+4.0.015 (2008-07-29)
+ - Some functions were changed to support different page formats (see example_028.php).
+ - The signature of setPage() function is changed.
+
+4.0.014 (2008-07-29)
+ - K_PATH_MAIN calculation on tcpdf_config.php was fixed.
+ - HTML support for EPS/AI images was added (see example_006.php).
+ - Bugs item #2030807 "Truncated text on multipage html fields" was fixed.
+ - PDF header bug was fixed.
+ - helvetica was added as default font family.
+ - Stroke mode was fixed on Text function.
+ - several minor bugs were fixed.
+
+4.0.013 (2008-07-27)
+ - Bugs item #2027799 " Big spaces between lines after page break" was fixed.
+ - K_PATH_MAIN calculation on tcpdf_config.php was changed.
+ - Function setVisibility() was fixed to avoid the "Incorrect PDEObject type" error message.
+
+4.0.012 (2008-07-24)
+ - Addpage(), Header() and Footer() functions were changed to simplify the implementation of external header/footer functions.
+ - The following functions were added:
+ setHeader()
+ setFooter()
+ getImageRBX()
+ getImageRBY()
+ getCellHeightRatio()
+ getHeaderFont()
+ getFooterFont()
+ getRTL()
+ getBarcode()
+ getHeaderData()
+ getHeaderMargin()
+ getFooterMargin()
+
+4.0.011 (2008-07-23)
+ - Font support was improved.
+ - The folder /fonts/utils contains new utilities and instructions for embedd font files.
+ - Documentation was updated.
+
+4.0.010 (2008-07-22)
+ - HTML tables were fixed to work across pages.
+ - Header() and Footer() functions were updated to preserve previous settings.
+ - example_035.php was added.
+
+4.0.009 (2008-07-21)
+ - UTF8StringToArray() function was fixed for non-unicode mode.
+
+4.0.008 (2008-07-21)
+ - Barcodes alignment was fixed (see example_027.php).
+ - unicode_data.php was updated.
+ - Arabic shaping for "Zero-Width Non-Joiner" character (U+200C) was fixed.
+
+4.0.007 (2008-07-18)
+ - str_split was replaced by preg_split for compatibility with PHP4 version.
+ - Clipping mode was added to all graphic functions by using parameter $style = "CNZ" or "CEO" (see example_034.php).
+
+4.0.006 (2008-07-16)
+ - HTML rowspan bug was fixed.
+ - Line style for MultiCell() was fixed.
+ - WriteHTML() function was improved.
+ - CODE128C barcode was fixed (barcodes.php).
+
+4.0.005 (2008-07-11)
+ - Bug [2015715] "PHP Error/Warning" was fixed.
+
+4.0.004 (2008-07-09)
+ - HTML cell internal padding was fixed.
+
+4.0.003 (2008-07-08)
+ - Removed URL encoding when F option is selected on Output() function.
+ - fixed some minor bugs in html tables.
+
+4.0.002 (2008-07-07)
+ - Bug [2000861] was still unfixed and has been fixed.
+
+4.0.001 (2008-07-05)
+ - Bug [2000861] was fixed.
+
+4.0.000 (2008-07-03)
+ - THIS IS A MAIN RELEASE THAT INCLUDES SEVERAL NEW FEATURES AND BUGFIXES
+ - Signature fo SetTextColor() and SetFillColor() functions was changed (parameter $storeprev was removed).
+ - HTML support was completely rewritten and improved (see example 6).
+ - Alignments parameters were fixed.
+ - Functions GetArrStringWidth() and GetStringWidth() now include font parameters.
+ - Fonts support was improved.
+ - All core fonts were replaced and moved to fonts/ directory.
+ - The following functions were added: getMargins(), getFontSize(), getFontSizePt().
+ - File config/tcpdf_config_old.php was renamed tcpdf_config_alt.php and updated.
+ - Multicell and WriteHTMLCell fill function was fixed.
+ - Several minor bugs were fixed.
+ - barcodes.php was updated.
+ - All examples were updated.
+
+------------------------------------------------------------
+
+3.1.001 (2008-06-13)
+ - Bug [1992515] "K_PATH_FONTS default value wrong" was fixed.
+ - Vera font was removed, DejaVu font and Free fonts were updated.
+ - Image handling was improved.
+ - All examples were updated.
+
+3.1.000 (2008-06-11)
+ - setPDFVersion() was added to change the default PDF version (currently 1.7).
+ - setViewerPreferences() was added to control the way the document is to be presented on the screen or printed (see example 29).
+ - SetDisplayMode() signature was changed (new options were added).
+ - LinearGradient(), RadialGradient(), CoonsPatchMesh() functions were added to print various color gradients (see example 30).
+ - PieSector() function was added to render render pie charts (see example 31).
+ - ImageEps() was added to display EPS and AI images with limited support (see example 32).
+ - writeBarcode() function is now depracated, a new write1DBarcode() function was added. The barcode directory was removed and a new barcodes.php file was added.
+ - The new write1DBarcode() function support more barcodes and do not need the GD library (see example 027). All barcodes are directly written to PDF using graphic functions.
+ - HTML lists were improved and could be nested (you may now represent trees).
+ - AddFont() bug was fixed.
+ - _putfonts() bug was fixed.
+ - graphics functions were fixed.
+ - unicode_data.php file was updated (fixed).
+ - almohanad font was updated.
+ - example 18 was updated (Farsi and Arabic languages).
+ - source code cleanup.
+ - All examples were updated and new examples were added.
+
+3.0.015 (2008-06-06)
+ - AddPage() function signature is changed to include page format.
+ - example 28 was added to show page format changes.
+ - setPageUnit() function was added to change the page units of measure.
+ - setPageFormat() function was added to change the page format and orientation between pages.
+ - setPageOrientation() function was added to change the page orientation.
+ - Arabic font shaping was fixed for laa letter and square boxes (see the example 18).
+
+3.0.014 (2008-06-04)
+ - Arabic font shaping was fixed.
+ - setDefaultTableColumns() function was added.
+ - $cell_height_ratio variable was added.
+ - setCellHeightRatio() function was added to define the default height of cell repect font height.
+
+3.0.013 (2008-06-03)
+ - Multicell height parameter was fixed.
+ - Arabic font shaping was improved.
+ - unicode_data.php was updated.
+
+3.0.012 (2008-05-30)
+ - K_PATH_MAIN and K_PATH_URL constants are now automatically set on config file.
+ - DOCUMENT_ROOT constant was fixed for IIS Webserver (config file was updated).
+ - Arabic font shaping was improved.
+ - TranslateY() function was fixed (bug [1977962]).
+ - setVisibility() function was fixed.
+ - writeBarcode() function was fixed to scale using $xref parameter.
+ - All examples were updated.
+
+3.0.011 (2008-05-23)
+ - CMYK color support was added to all graphic functions.
+ - HTML table support was improved:
+ -- now it's possible to include additional html tags inside a cell;
+ -- colspan attribute was added.
+ - example 006 was updated.
+
+3.0.010 (2008-05-21)
+ - fixed $laa_array inclusion on utf8Bidi() function.
+
+3.0.009 (2008-05-20)
+ - unicode_data.php was updated.
+ - Arabic laa letter problem was fixed.
+
+3.0.008 (2008-05-12)
+ - Arabic support was fixed and improved (unicode_data.php was updated).
+ - Polycurve() function was added to draw a poly-Bezier curve.
+ - list items alignment was fixed.
+ - example 6 was updated.
+
+3.0.007 (2008-05-06)
+ - Arabic support was fixed and improved.
+ - AlMohanad (arabic) font was added.
+ - C128 barcode bugs were fixed.
+
+3.0.006 (2008-04-21)
+ - Condition to check negative width values was added.
+
+3.0.005 (2008-04-18)
+ - back-Slash character escape was fixed on writeHTML() function.
+ - Exampe 6 was updated.
+
+3.0.004 (2008-04-11)
+ - Bug [1939304] (Right to Left Issue) was fixed.
+
+3.0.003 (2008-04-07)
+ - Bug [1934523](Words between HTML tags in cell not kept on one line) was fixed.
+ - "face" attribute of "font" tag is now fully supported.
+
+3.0.002 (2008-04-01)
+ - Write() functions now return the number of cells and not the number of lines.
+ - TCPDF is released under LGPL 2.1, or any later version.
+
+3.0.001 (2008-05-28)
+ - _legacyparsejpeg() and _legacyparsepng() were renamed _parsejpeg() and _parsepng().
+ - function writeBarcode() was fixed.
+ - all examples were updated.
+ - example 27 was added to show various barcodes.
+
+3.0.000 (2008-03-27)
+ - private function pixelsToMillimeters() was changed to public function pixelsToUnits() to fix html image size bug.
+ - Image-related functions were rewritten.
+ - resize parameter was added to Image() signature to reduce the image size and fit width and height (see example 9).
+ - TCPDF now supports all images supported by GD library: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM.
+ - CMYK support was added to SetDrawColor(), SetFillColor(), SetTextColor() (see example 22).
+ - Page Groups were added (see example 23).
+ - setVisibility() function was added to restrict the rendering of some elements to screen or printout (see example 24).
+ - All private variables and functions were changed to protected.
+ - setAlpha() function was added to give transparency support for all objects (see example 25).
+ - Clipping and stroke modes were added to Text() function (see example 26).
+ - All examples were moved to "examples" directory.
+ - function setJPEGQuality() was added to set the JPEG image comrpession (see example 9).
+
+2.9.000 (2008-03-26)
+ - htmlcolors.php file was added to include html colors.
+ - Support for HTML color names and three-digit hexadecimal color codes was added.
+ - private function convertColorHexToDec() was renamed convertHTMLColorToDec().
+ - color and bgcolor attributes are now supported on all HTML tags (color nesting is also supported).
+ - Write() function were fixed.
+ - example_006.php was updated.
+ - private function setUserRights() was added to release user rights on Acrobat Reader (this allows to display forms, see example 14)
+
+2.8.000 (2008-03-20)
+ - Private variables were changed to protected.
+ - Function Write() was fixed and improved.
+ - Support for dl, dt, dd, del HTML tags was introduced.
+ - Line-trought mode was added for HTML and text.
+ - Text vertical alignment on cells were fixed.
+ - Examples were updated to reflect changes.
+
+2.7.002 (2008-03-13)
+ - Bug "[1912142] Encrypted PDF created/modified date" was fixed.
+
+2.7.001 (2008-03-10)
+ - Cell justification was fixed for non-unicode mode.
+
+2.7.000 (2008-03-09)
+ - Cell() stretching mode 4 (forced character spacing) was fixed.
+ - writeHTMLCell() now uses Multicell() to write.
+ - Multicell() has a new parameter $ishtml to act as writeHTMLCell().
+ - Write() speed was improved for non-arabic strings.
+ - Example n. 20 was changed.
+
+2.6.000 (2008-03-07)
+ - various alignments bugs were fixed.
+
+2.5.000 (2008-03-07)
+ - Several bugs were fixed.
+ - example_019.php was added to test non-unicode mode using old fonts.
+
+2.4.000 (2008-03-06)
+ - RTL support was deeply improved.
+ - GetStringWidth() was fixed to support RTL languages.
+ - Text() RTL alignment was fixed.
+ - Some functions were added: GetArrStringWidth(), GetCharWidth(), uniord(), utf8Bidi().
+ - example_018.php was added and test_unicode.php was removed.
+
+2.3.000 (2008-03-05)
+ - MultiCell() signature is changed. Now support multiple columns across pages (see example_017).
+ - Write() signature is changed. Now support the cell mode to be used with MultiCell.
+ - Header() and Footer() were changed.
+ - The following functions were added: UTF8ArrSubString() and unichr().
+ - Examples were updated to reflect last changes.
+
+2.2.004 (2008-03-04)
+ - Several examples were added.
+ - AddPage() Header() and Footer() were fixed.
+ - Documentation is now available on http://www.tcpdf.org
+
+2.2.003 (2008-03-03)
+ - [1894853] Performance of MultiCell() was improved.
+ - RadioButton and ListBox functions were added.
+ - javascript form functions were rewritten and properties names are changed. The properties function supported by form fields are listed on Possible values are listed on http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf.
+
+2.2.002 (2008-02-28)
+ - [1900495] html images path was fixed.
+ - Legacy image functions were reintroduced to allow PNG and JPEG support without GD library.
+
+2.2.001 (2008-02-16)
+ - The bug "[1894700] bug with replace relative path" was fixed
+ - Justification was fixed
+
+2.2.000 (2008-02-12)
+ - fixed javascript bug introduced with latest release
+
+2.1.002 (2008-02-12)
+ - Justify function was fixed on PHP4 version.
+ - Bookmank function was added ([1578250] Table of contents).
+ - Javascript and Form fields support was added ([1796359] Form fields).
+
+2.1.001 (2008-02-10)
+ - The bug "[1885776] Race Condition in function justitfy" was fixed.
+ - The bug "[1890217] xpdf complains that pdf is incorrect" was fixed.
+
+2.1.000 (2008-01-07)
+ - FPDF_FONTPATH constant was changed to K_PATH_FONTS on config file
+ - Bidirectional Algorithm to correctly reverse bidirectional languages was added.
+ - SetLeftMargin, SetTopMargin, SetRightMargin functions were fixed.
+ - SetCellPadding function was added.
+ - writeHTML was updated with new parameters.
+ - Text function was fixed.
+ - MultiCell function was fixed, now works also across multiple pages.
+ - Line width was fixed on Header and Footer functions and
tag.
+ - "GetImageSize" was renamed "getimagesize".
+ - Document version was changed from 1.3 to 1.5.
+ - _begindoc() function was fixed.
+ - ChangeDate was fixed and ModDate was added.
+ - The following functions were added:
+ setPage() : Move pointer to the specified document page.
+ getPage() : Get current document page number.
+ lastpage() : Reset pointer to the last document page.
+ getNumPages() : Get the total number of inserted pages.
+ GetNumChars() : count the number of (UTF-8) characters in a string.
+ - $stretch parameter was added to Cell() function to fit text on cell:
+ 0 = disabled
+ 1 = horizontal scaling only if necessary
+ 2 = forced horizontal scaling
+ 3 = character spacing only if necessary
+ 4 = forced character spacing
+ - Line function was fixed for RTL.
+ - Graphic transformation functions were added [1811158]:
+ StartTransform()
+ StopTransform()
+ ScaleX()
+ ScaleY()
+ ScaleXY()
+ Scale()
+ MirrorH()
+ MirrorV()
+ MirrorP()
+ MirrorL()
+ TranslateX()
+ TranslateY()
+ Translate()
+ Rotate()
+ SkewX()
+ SkewY()
+ Skew()
+ - Graphic function were added/updated [1688549]:
+ SetLineStyle()
+ _outPoint()
+ _outLine()
+ _outRect()
+ _outCurve()
+ Line()
+ Rect()
+ Curve
+ Ellipse
+ Circle
+ Polygon
+ RegularPolygon
+
+2.0.000 (2008-01-04)
+ - RTL (Right-To-Left) languages support was added. Language direction is set using the $l['a_meta_dir'] setting on /configure/language/xxx.php language files.
+ - setRTL($enable) method was added to manually enable/disable the RTL text direction.
+ - The attribute "dir" was added to support custom text direction on HTML tags. Possible values are: ltr - for Left-To-Right and RTL for Right-To-Left.
+ - RC4 40bit encryption was added. Check the SetProtection method.
+ - [1815213] Improved image support for GIF, JPEG, PNG formats.
+ - [1800094] Attribute "value" was added to ordered list items .
+ - Image function now has a new "align" parameter that indicates the alignment of the pointer next to image insertion and relative to image height. The value can be:
+ T: top-right for LTR or top-left for RTL
+ M: middle-right for LTR or middle-left for RTL
+ B: bottom-right for LTR or bottom-left for RTL
+ N: next line
+ - Attribute "align" was added to
html tag to set the above image "align" parameter. Possible values are:
+ top: top-right for LTR or top-left for RTL
+ middle: middle-right for LTR or middle-left for RTL
+ bottom: bottom-right for LTR or bottom-left for RTL
+ - [1798103] newline was added after , and
tages.
+ - [1816393] Documentation was updated.
+ - 'ln' parameter was fixed on writeHTMLCell. Now it's possible to print two or more columns across several pages;
+ - The method lastPage() was added to move the pointer on the last page;
+
+------------------------------------------------------------
+
+1.53.0.TC034 (2007-07-30)
+ - fixed htmlentities conversion.
+ - MultiCell() function returns the number of cells.
+
+1.53.0.TC033 (2007-07-30)
+ - fixed bug 1762550: case sensitive for font files
+ - NOTE: all fonts files names must be in lowercase!
+
+1.53.0.TC032 (2007-07-27)
+ - setLastH method was added to resolve bug 1689071.
+ - all fonts names were converted in lowercase (bug 1713005).
+ - bug 1740954 was fixed.
+ - justification was added as Cell option.
+
+1.53.0.TC031 (2007-03-20)
+ - ToUnicode CMap were added on _puttruetypeunicode function. Now you may search and copy unicode text.
+
+1.53.0.TC030 (2007-03-06)
+ - fixed bug on PHP4 version.
+
+1.53.0.TC029 (2007-03-06)
+ - DejaVu Fonts were added.
+
+1.53.0.TC028 (2007-03-03)
+ - MultiCell function signature were changed: the $ln parameter were added. Check documentation for further information.
+ - Greek language were added on example sentences.
+ - setPrintHeader() and setPrintFooter() functions were added to enable or disable page header and footer.
+
+1.53.0.TC027 (2006-12-14)
+ - $attr['face'] bug were fixed.
+ - K_TCPDF_EXTERNAL_CONFIG control where introduced on /config/tcpdf_config.php to use external configuration files.
+
+1.53.0.TC026 (2006-10-28)
+ - writeHTML function call were fixed on examples.
+
+1.53.0.TC025 (2006-10-27)
+ - Bugs item #1421290 were fixed (0D - 0A substitution in some characters)
+ - Bugs item #1573174 were fixed (MultiCell documentation)
+
+1.53.0.TC024 (2006-09-26)
+ - getPageHeight() function were fixed (bug 1543476).
+ - fixed missing breaks on closedHTMLTagHandler function (bug 1535263).
+ - fixed extra spaces on Write function (bug 1535262).
+
+1.53.0.TC023 (2006-08-04)
+ - paths to barcode directory were fixed.
+ - documentation were updated.
+
+1.53.0.TC022 (2006-07-16)
+ - fixed bug: [ 1516858 ] Probs with PHP autoloader and class_exists()
+
+1.53.0.TC021 (2006-07-01)
+ - HTML attributes with whitespaces are now supported (thanks to Nelson Benitez for his support)
+
+1.53.0.TC020 (2006-06-23)
+ - code cleanup
+
+1.53.0.TC019 (2006-05-21)
+ - fixed and closing tags
+
+1.53.0.TC018 (2006-05-18)
+ - fixed font names bug
+
+1.53.0.TC017 (2006-05-18)
+ - the TTF2UFM utility to convert True Type fonts for TCPDF were included on fonts folder.
+ - new free unicode fonts were included on /fonts/freefont.
+ - test_unicode.php example were exended.
+ - parameter $fill were added on Write, writeHTML and writeHTMLCell functions.
+ - documentation were updated.
+
+1.53.0.TC016 (2006-03-09)
+ - fixed closing tag on html parser.
+
+1.53.0.TC016 (2005-08-28)
+ - fpdf.php and tcpdf.php files were joined in one single class (you can still extend TCPDF with your own class).
+ - fixed problem when mb_internal_encoding is set.
+
+1.53.0.TC014 (2005-05-29)
+ - fixed WriteHTMLCell new page issue.
+
+1.53.0.TC013 (2005-05-29)
+ - fixed WriteHTMLCell across pages.
+
+1.53.0.TC012 (2005-05-29)
+ - font color attribute bug were fixed.
+
+1.53.0.TC011 (2005-03-31)
+ - SetFont function were fixed (thank Sjaak Lauwers for bug notice).
+
+1.53.0.TC010 (2005-03-22)
+ - the html functions were improved (thanks to Manfred Vervuert for bug reporting).
+
+1.53.0.TC009 (2005-03-19)
+ - a wrong reference to convertColorHexToDec were fixed.
+
+1.53.0.TC008 (2005-02-07)
+ - removed some extra bytes from PHP files.
+
+1.53.0.TC007 (2005-01-08)
+ - fill attribute were removed from writeHTMLCell method.
+
+1.53.0.TC006 (2005-01-08)
+ - the documentation were updated.
+
+1.53.0.TC005 (2005-01-05)
+ - Steven Wittens's unicode methods were removed.
+ - All unicode methods were rewritten from scratch.
+ - TCPDF is now licensed as LGPL.
+
+1.53.0.TC004 (2005-01-04)
+ - this changelog were added.
+ - removed comercial fonts for licensing issue.
+ - Bitstream Vera Fonts were added (http://www.bitstream.com/font_rendering/products/dev_fonts/vera.html).
+ - Now the AddFont and SetFont functions returns the basic font if the styled version do not exist.
+
diff --git a/lib/tcpdf/LICENSE.TXT b/lib/tcpdf/LICENSE.TXT
new file mode 100644
index 0000000000..b1e3f5a263
--- /dev/null
+++ b/lib/tcpdf/LICENSE.TXT
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ , 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/lib/tcpdf/README-MOODLE.TXT b/lib/tcpdf/README-MOODLE.TXT
new file mode 100644
index 0000000000..98d53aaf39
--- /dev/null
+++ b/lib/tcpdf/README-MOODLE.TXT
@@ -0,0 +1,14 @@
+Moodle-specific changes to TCPDF are tracked here.
+
+2008/07/29
+Upgrade to tcpdf_php5 TCPDF 4.0.015 (MDL-15055)
+by David Mudrak
+
+* deleted cache/ doc/ examples/
+* modified config/tcpdf_config.php
+ Default values for K_PATH_MAIN and K_PATH_URL are automatically set for
+ the Moodle installation. K_PATH_CACHE set to Moodle datadir cache.
+ K_PATH_URL_CACHE can't be mapped in Moodle as datadir should not be
+ accessible directly. However, it doesn't seem to be used within the
+ library code.
+
diff --git a/lib/tcpdf/README.TXT b/lib/tcpdf/README.TXT
index 998db3de78..8073c61800 100755
--- a/lib/tcpdf/README.TXT
+++ b/lib/tcpdf/README.TXT
@@ -1,70 +1,91 @@
-
-This is a trimmed down distribution of TCPDF, tailored for Moodle. The API
-and code are the same. However, extra fonts and font-convertion utilities have
-been removed to keep the Moodle download size to a minimum.
-
-Following is the original TCPDF README.
-
-
-
TCPDF - README
============================================================
+IF YOU'D LIKE TO SUPPORT TCPDF, PLEASE CONSIDER MAKING A
+DONATION:
+http://sourceforge.net/donate/index.php?group_id=128076
+
+------------------------------------------------------------
+
Name:
- TCPDF
+ TCPDF
Version:
- 1.53.0.TC023_PHP4
-
+ 4.0.015
+
Release date:
- 2006-08-05
+ 2008-07-29
Author:
- Nicola Asuni
-
-Copyright (c) 2001-2006:
- Tecnick.com S.r.l.
- Via Ugo Foscolo n.19
- 09045 Quartu Sant'Elena (CA)
- ITALY
- www.tecnick.com
-
+ Nicola Asuni
+
+Copyright (c) 2001-2008:
+ Nicola Asuni
+ Tecnick.com s.r.l.
+ Via Della Pace, 11
+ 09044 Quartucciu (CA)
+ ITALY
+ www.tecnick.com
+
URLs:
- http://tcpdf.sourceforge.net/
- http://tcpdf.sf.net/
-
+ http://www.tcpdf.org
+ http://www.sourceforge.net/projects/tcpdf
+
Description:
- TCPDF is a PHP4 class for generating PDF files on-the-fly without requiring external extensions.
- TCPDF is an extension and improvement of the FPDF class by Olivier Plathey (http://www.fpdf.org).
-
- Main Features:
-
- - supports all ISO page formats;
- - supports UTF-8 Unicode;
- - includes methods to publish some xhtml code, supporting the following elements: h1, h2, h3, h4, h5, h6, b, u, i, a, img, p, br, strong, em, font, blockquote, li, ul, ol, hr, td, th, tr, table, sup, sub, small;
- - includes a method to print various barcode formats using an improved version of "Generic Barcode Render Class" by Karim Mribti (http://www.mribti.com/barcode/) (require GD library: http://www.boutell.com/gd/)
- - supports TrueTypeUnicode, TrueType, Type1 and encoding;
- - supports custom page formats, margins and units of measure;
- - includes methods for page header and footer management;
- - supports automatic page break;
- - supports automatic page numbering;
- - supports automatic line break and text justification;
- - supports JPEG and PNG images;
- - supports colors;
- - supports links;
- - support page compression (require zlib extension: http://www.gzip.org/zlib/);
- - the source code is full documented in PhpDocumentor Style (http://www.phpdoc.org).
+ TCPDF is a PHP class for generating PDF files on-the-fly without requiring external extensions.
+ TCPDF has been originally derived from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org).
+
+Main Features:
+// * no external libraries are required for the basic functions;
+// * supports all ISO page formats;
+// * supports UTF-8 Unicode and Right-To-Left languages;
+// * supports document encryption;
+// * includes methods to publish some XHTML code;
+// * includes graphic (geometric) and transformation methods;
+// * includes bookmarks;
+// * includes Javascript and forms support;
+// * includes a method to print various barcode formats;
+// * supports TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;
+// * supports custom page formats, margins and units of measure;
+// * includes methods for page header and footer management;
+// * supports automatic page break;
+// * supports automatic page numbering and page groups;
+// * supports automatic line break and text justification;
+// * supports JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;
+// * supports stroke and clipping mode for text;
+// * supports clipping masks;
+// * supports Grayscale, RGB and CMYK colors and transparency;
+// * supports links;
+// * supports page compression (requires zlib extension);
+// * supports PDF user's rights.
-Installation:
- 1. copy the folder on your Web server
- 2. set your installation path on the config/tcpdf_config.php
- 3. call the test_unicode.php page with your browser to see an example
- NOTE: the test_old.php require proper font setup on tcpdf_config.
+Installation (full instructions on http://www.tcpdf.org):
+ 1. copy the folder on your Web server
+ 2. set your installation path on the config/tcpdf_config.php
+ 3. call the example/example_001.php page with your browser to see an example
Source Code Documentation:
- doc/index.html
+ doc/index.html
+
+For Additional Documentation:
+ http://www.tcpdf.org
License
- GNU LESSER GENERAL PUBLIC LICENSE v.2.1
- http://www.gnu.org/copyleft/lesser.html
+ Copyright (C) 2002-2008 Nicola Asuni - Tecnick.com S.r.l.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 2.1 of the License, or
+ (at your option) any later version.
+
+ This program 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 Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see .
+
+ See LICENSE.TXT file for more information.
+
============================================================
\ No newline at end of file
diff --git a/lib/tcpdf/barcodes.php b/lib/tcpdf/barcodes.php
new file mode 100644
index 0000000000..93256f32f1
--- /dev/null
+++ b/lib/tcpdf/barcodes.php
@@ -0,0 +1,808 @@
+.
+//
+// See LICENSE.TXT file for more information.
+// ----------------------------------------------------------------------------
+//
+// Description : PHP class to creates array representations for
+// common 1D barcodes to be used with TCPDF.
+//
+// Author: Nicola Asuni
+//
+// (c) Copyright:
+// Nicola Asuni
+// Tecnick.com S.r.l.
+// Via della Pace, 11
+// 09044 Quartucciu (CA)
+// ITALY
+// www.tecnick.com
+// info@tecnick.com
+//============================================================+
+
+/**
+ * PHP class to creates array representations for common 1D barcodes to be used with TCPDF.
+ * @package com.tecnick.tcpdf
+ * @abstract Functions for generating string representation of common 1D barcodes.
+ * @author Nicola Asuni
+ * @copyright 2008 Nicola Asuni - Tecnick.com S.r.l (www.tecnick.com) Via Della Pace, 11 - 09044 - Quartucciu (CA) - ITALY - www.tecnick.com - info@tecnick.com
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @version 1.0.001
+ */
+
+ /**
+ * PHP class to creates array representations for common 1D barcodes to be used with TCPDF (http://www.tcpdf.org).
+ * @name TCPDFBarcode
+ * @package com.tecnick.tcpdf
+ * @version 1.0.001
+ * @author Nicola Asuni
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ */
+class TCPDFBarcode {
+
+ /**
+ * @var array representation of barcode.
+ * @access protected
+ */
+ protected $barcode_array;
+
+ /**
+ * This is the class constructor.
+ * Return an array representations for common 1D barcodes:
+ * - $arrcode["code"] code to be printed on text label
+ * - $arrcode["maxh"] max bar height
+ * - $arrcode["maxw"] max bar width
+ * - $arrcode["bcode"][$k] single bar or space in $k position
+ * - $arrcode["bcode"][$k]["t"] bar type: true = bar, false = space.
+ * - $arrcode["bcode"][$k]["w"] bar width in units.
+ * - $arrcode["bcode"][$k]["h"] bar height in units.
+ * - $arrcode["bcode"][$k]["p"] bar top position (0 = top, 1 = middle)
+ * @param string $code code to print
+ * @param string $type type of barcode: - C39 : CODE 39
- C39+ : CODE 39 with checksum
- C39E : CODE 39 EXTENDED
- C39E+ : CODE 39 EXTENDED with checksum
- I25 : Interleaved 2 of 5
- C128A : CODE 128 A
- C128B : CODE 128 B
- C128C : CODE 128 C
- EAN13 : EAN 13
- UPCA : UPC-A
- POSTNET : POSTNET
- CODABAR : CODABAR
+ */
+ public function __construct($code, $type) {
+ $this->setBarcode($code, $type);
+ }
+
+ /**
+ * Return an array representations of barcode.
+ * @return array
+ */
+ public function getBarcodeArray() {
+ return $this->barcode_array;
+ }
+
+ /**
+ * Set the barcode.
+ * @param string $code code to print
+ * @param string $type type of barcode: - C39 : CODE 39
- C39+ : CODE 39 with checksum
- C39E : CODE 39 EXTENDED
- C39E+ : CODE 39 EXTENDED with checksum
- I25 : Interleaved 2 of 5
- C128A : CODE 128 A
- C128B : CODE 128 B
- C128C : CODE 128 C
- EAN13 : EAN 13
- UPCA : UPC-A
- POSTNET : POSTNET
- CODABAR : CODABAR
+ * @return array
+ */
+ public function setBarcode($code, $type) {
+ switch (strtoupper($type)) {
+ case "C39": { // CODE 39
+ $arrcode = $this->barcode_code39($code, false, false);
+ break;
+ }
+ case "C39+": { // CODE 39 with checksum
+ $arrcode = $this->barcode_code39($code, false, true);
+ break;
+ }
+ case "C39E": { // CODE 39 EXTENDED
+ $arrcode = $this->barcode_code39($code, true, false);
+ break;
+ }
+ case "C39E+": { // CODE 39 EXTENDED with checksum
+ $arrcode = $this->barcode_code39($code, true, true);
+ break;
+ }
+ case "I25": { // Interleaved 2 of 5
+ $arrcode = $this->barcode_i25($code);
+ break;
+ }
+ case "C128A": { // CODE 128 A
+ $arrcode = $this->barcode_c128($code, "A");
+ break;
+ }
+ case "C128B": { // CODE 128 B
+ $arrcode = $this->barcode_c128($code, "B");
+ break;
+ }
+ case "C128C": { // CODE 128 C
+ $arrcode = $this->barcode_c128($code, "C");
+ break;
+ }
+ case "EAN13": { // EAN 13
+ $arrcode = $this->barcode_ean13($code, 13);
+ break;
+ }
+ case "UPCA": { // UPC-A
+ $arrcode = $this->barcode_ean13($code, 12);
+ break;
+ }
+ case "POSTNET": { // POSTNET
+ $arrcode = $this->barcode_postnet($code);
+ break;
+ }
+ case "CODABAR": { // CODABAR
+ $arrcode = $this->barcode_codabar($code);
+ break;
+ }
+ default: {
+ $this->barcode_array = false;
+ }
+ }
+ $this->barcode_array = $arrcode;
+ }
+
+ /**
+ * CODE 39
+ * @param string $code code to represent.
+ * @param boolean $checksum if true add a checksum to the code
+ * @return array barcode representation.
+ * @access protected
+ */
+ protected function barcode_code39($code, $extended=false, $checksum=false) {
+ $chr['0'] = '111221211';
+ $chr['1'] = '211211112';
+ $chr['2'] = '112211112';
+ $chr['3'] = '212211111';
+ $chr['4'] = '111221112';
+ $chr['5'] = '211221111';
+ $chr['6'] = '112221111';
+ $chr['7'] = '111211212';
+ $chr['8'] = '211211211';
+ $chr['9'] = '112211211';
+ $chr['A'] = '211112112';
+ $chr['B'] = '112112112';
+ $chr['C'] = '212112111';
+ $chr['D'] = '111122112';
+ $chr['E'] = '211122111';
+ $chr['F'] = '112122111';
+ $chr['G'] = '111112212';
+ $chr['H'] = '211112211';
+ $chr['I'] = '112112211';
+ $chr['J'] = '111122211';
+ $chr['K'] = '211111122';
+ $chr['L'] = '112111122';
+ $chr['M'] = '212111121';
+ $chr['N'] = '111121122';
+ $chr['O'] = '211121121';
+ $chr['P'] = '112121121';
+ $chr['Q'] = '111111222';
+ $chr['R'] = '211111221';
+ $chr['S'] = '112111221';
+ $chr['T'] = '111121221';
+ $chr['U'] = '221111112';
+ $chr['V'] = '122111112';
+ $chr['W'] = '222111111';
+ $chr['X'] = '121121112';
+ $chr['Y'] = '221121111';
+ $chr['Z'] = '122121111';
+ $chr['-'] = '121111212';
+ $chr['.'] = '221111211';
+ $chr[' '] = '122111211';
+ $chr['*'] = '121121211';
+ $chr['$'] = '121212111';
+ $chr['/'] = '121211121';
+ $chr['+'] = '121112121';
+ $chr['%'] = '111212121';
+
+ $code = strtoupper($code);
+ if ($extended) {
+ // extended mode
+ $code = $this->encode_code39_ext($code);
+ }
+ if ($code === false) {
+ return false;
+ }
+ if ($checksum) {
+ // checksum
+ $code .= $this->checksum_code39($code);
+ }
+ // add start and stop codes
+ $code = "*".$code."*";
+
+ $bararray = array("code" => $code, "maxw" => 0, "maxh" => 1, "bcode" => array());
+ $k = 0;
+ for($i=0; $i < strlen($code); $i++) {
+ $char = $code{$i};
+ if(!isset($chr[$char])) {
+ // invalid character
+ return false;
+ }
+ for($j=0; $j < 9; $j++) {
+ if (($j % 2) == 0) {
+ $t = true; // bar
+ } else {
+ $t = false; // space
+ }
+ $w = $chr[$char]{$j};
+ $bararray["bcode"][$k] = array("t" => $t, "w" => $w, "h" => 1, "p" => 0);
+ $bararray["maxw"] += $w;
+ $k++;
+ }
+ $bararray["bcode"][$k] = array("t" => false, "w" => 1, "h" => 1, "p" => 0);
+ $bararray["maxw"] += 1;
+ $k++;
+ }
+ return $bararray;
+ }
+
+ /**
+ * Encode a string to be used for CODE 39 Extended mode.
+ * @param string $code code to represent.
+ * @return encoded string.
+ * @access protected
+ */
+ protected function encode_code39_ext($code) {
+ $encode = array(
+ chr(0) => '%U', chr(1) => '$A', chr(2) => '$B', chr(3) => '$C',
+ chr(4) => '$D', chr(5) => '$E', chr(6) => '$F', chr(7) => '$G',
+ chr(8) => '$H', chr(9) => '$I', chr(10) => '$J', chr(11) => '£K',
+ chr(12) => '$L', chr(13) => '$M', chr(14) => '$N', chr(15) => '$O',
+ chr(16) => '$P', chr(17) => '$Q', chr(18) => '$R', chr(19) => '$S',
+ chr(20) => '$T', chr(21) => '$U', chr(22) => '$V', chr(23) => '$W',
+ chr(24) => '$X', chr(25) => '$Y', chr(26) => '$Z', chr(27) => '%A',
+ chr(28) => '%B', chr(29) => '%C', chr(30) => '%D', chr(31) => '%E',
+ chr(32) => ' ', chr(33) => '/A', chr(34) => '/B', chr(35) => '/C',
+ chr(36) => '/D', chr(37) => '/E', chr(38) => '/F', chr(39) => '/G',
+ chr(40) => '/H', chr(41) => '/I', chr(42) => '/J', chr(43) => '/K',
+ chr(44) => '/L', chr(45) => '-', chr(46) => '.', chr(47) => '/O',
+ chr(48) => '0', chr(49) => '1', chr(50) => '2', chr(51) => '3',
+ chr(52) => '4', chr(53) => '5', chr(54) => '6', chr(55) => '7',
+ chr(56) => '8', chr(57) => '9', chr(58) => '/Z', chr(59) => '%F',
+ chr(60) => '%G', chr(61) => '%H', chr(62) => '%I', chr(63) => '%J',
+ chr(64) => '%V', chr(65) => 'A', chr(66) => 'B', chr(67) => 'C',
+ chr(68) => 'D', chr(69) => 'E', chr(70) => 'F', chr(71) => 'G',
+ chr(72) => 'H', chr(73) => 'I', chr(74) => 'J', chr(75) => 'K',
+ chr(76) => 'L', chr(77) => 'M', chr(78) => 'N', chr(79) => 'O',
+ chr(80) => 'P', chr(81) => 'Q', chr(82) => 'R', chr(83) => 'S',
+ chr(84) => 'T', chr(85) => 'U', chr(86) => 'V', chr(87) => 'W',
+ chr(88) => 'X', chr(89) => 'Y', chr(90) => 'Z', chr(91) => '%K',
+ chr(92) => '%L', chr(93) => '%M', chr(94) => '%N', chr(95) => '%O',
+ chr(96) => '%W', chr(97) => '+A', chr(98) => '+B', chr(99) => '+C',
+ chr(100) => '+D', chr(101) => '+E', chr(102) => '+F', chr(103) => '+G',
+ chr(104) => '+H', chr(105) => '+I', chr(106) => '+J', chr(107) => '+K',
+ chr(108) => '+L', chr(109) => '+M', chr(110) => '+N', chr(111) => '+O',
+ chr(112) => '+P', chr(113) => '+Q', chr(114) => '+R', chr(115) => '+S',
+ chr(116) => '+T', chr(117) => '+U', chr(118) => '+V', chr(119) => '+W',
+ chr(120) => '+X', chr(121) => '+Y', chr(122) => '+Z', chr(123) => '%P',
+ chr(124) => '%Q', chr(125) => '%R', chr(126) => '%S', chr(127) => '%T');
+ $code_ext = '';
+ for ($i = 0 ; $i < strlen($code); $i++) {
+ if (ord($code{$i}) > 127) {
+ return false;
+ }
+ $code_ext .= $encode[$code{$i}];
+ }
+ return $code_ext;
+ }
+
+ /**
+ * Calculate CODE 39 checksum (modulo 43).
+ * @param string $code code to represent.
+ * @return char checksum.
+ * @access protected
+ */
+ protected function checksum_code39($code) {
+ $chars = array(
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
+ 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
+ 'W', 'X', 'Y', 'Z', '-', '.', ' ', '$', '/', '+', '%');
+ $sum = 0;
+ for ($i=0 ; $i < strlen($code); $i++) {
+ $k = array_keys($chars, $code{$i});
+ $sum += $k[0];
+ }
+ $j = ($sum % 43);
+ return $chars[$j];
+ }
+
+ /**
+ * Interleaved 2 of 5 barcodes.
+ * Contains digits (0 to 9) and encodes the data in the width of both bars and spaces.
+ * @param string $code code to represent.
+ * @param boolean $checksum if true add a checksum to the code
+ * @return array barcode representation.
+ * @access protected
+ */
+ protected function barcode_i25($code) {
+ $chr['0'] = '11221';
+ $chr['1'] = '21112';
+ $chr['2'] = '12112';
+ $chr['3'] = '22111';
+ $chr['4'] = '11212';
+ $chr['5'] = '21211';
+ $chr['6'] = '12211';
+ $chr['7'] = '11122';
+ $chr['8'] = '21121';
+ $chr['9'] = '12121';
+ $chr['A'] = '11';
+ $chr['Z'] = '21';
+
+ if((strlen($code) % 2) != 0) {
+ // add leading zero if code-length is odd
+ $code = '0'.$code;
+ }
+ // add start and stop codes
+ $code = 'AA'.strtolower($code).'ZA';
+
+ $bararray = array("code" => $code, "maxw" => 0, "maxh" => 1, "bcode" => array());
+ $k = 0;
+ for($i=0; $i < strlen($code); $i=$i+2) {
+ $char_bar = $code{$i};
+ $char_space = $code{$i+1};
+ if((!isset($chr[$char_bar])) OR (!isset($chr[$char_space]))) {
+ // invalid character
+ return false;
+ }
+ // create a bar-space sequence
+ $seq = "";
+ for($s=0; $s < strlen($chr[$char_bar]); $s++){
+ $seq .= $chr[$char_bar]{$s} . $chr[$char_space]{$s};
+ }
+ for($j=0; $j < strlen($seq); $j++) {
+ if (($j % 2) == 0) {
+ $t = true; // bar
+ } else {
+ $t = false; // space
+ }
+ $w = $seq{$j};
+ $bararray["bcode"][$k] = array("t" => $t, "w" => $w, "h" => 1, "p" => 0);
+ $bararray["maxw"] += $w;
+ $k++;
+ }
+ }
+ return $bararray;
+ }
+
+ /**
+ * C128 barcodes.
+ *
+ * @param string $code code to represent.
+ * @param string $type barcode type: A, B or C
+ * @return array barcode representation.
+ * @access protected
+ */
+ protected function barcode_c128($code, $type="B") {
+ $chr = array(
+ '212222', /* 00 */
+ '222122', /* 01 */
+ '222221', /* 02 */
+ '121223', /* 03 */
+ '121322', /* 04 */
+ '131222', /* 05 */
+ '122213', /* 06 */
+ '122312', /* 07 */
+ '132212', /* 08 */
+ '221213', /* 09 */
+ '221312', /* 10 */
+ '231212', /* 11 */
+ '112232', /* 12 */
+ '122132', /* 13 */
+ '122231', /* 14 */
+ '113222', /* 15 */
+ '123122', /* 16 */
+ '123221', /* 17 */
+ '223211', /* 18 */
+ '221132', /* 19 */
+ '221231', /* 20 */
+ '213212', /* 21 */
+ '223112', /* 22 */
+ '312131', /* 23 */
+ '311222', /* 24 */
+ '321122', /* 25 */
+ '321221', /* 26 */
+ '312212', /* 27 */
+ '322112', /* 28 */
+ '322211', /* 29 */
+ '212123', /* 30 */
+ '212321', /* 31 */
+ '232121', /* 32 */
+ '111323', /* 33 */
+ '131123', /* 34 */
+ '131321', /* 35 */
+ '112313', /* 36 */
+ '132113', /* 37 */
+ '132311', /* 38 */
+ '211313', /* 39 */
+ '231113', /* 40 */
+ '231311', /* 41 */
+ '112133', /* 42 */
+ '112331', /* 43 */
+ '132131', /* 44 */
+ '113123', /* 45 */
+ '113321', /* 46 */
+ '133121', /* 47 */
+ '313121', /* 48 */
+ '211331', /* 49 */
+ '231131', /* 50 */
+ '213113', /* 51 */
+ '213311', /* 52 */
+ '213131', /* 53 */
+ '311123', /* 54 */
+ '311321', /* 55 */
+ '331121', /* 56 */
+ '312113', /* 57 */
+ '312311', /* 58 */
+ '332111', /* 59 */
+ '314111', /* 60 */
+ '221411', /* 61 */
+ '431111', /* 62 */
+ '111224', /* 63 */
+ '111422', /* 64 */
+ '121124', /* 65 */
+ '121421', /* 66 */
+ '141122', /* 67 */
+ '141221', /* 68 */
+ '112214', /* 69 */
+ '112412', /* 70 */
+ '122114', /* 71 */
+ '122411', /* 72 */
+ '142112', /* 73 */
+ '142211', /* 74 */
+ '241211', /* 75 */
+ '221114', /* 76 */
+ '413111', /* 77 */
+ '241112', /* 78 */
+ '134111', /* 79 */
+ '111242', /* 80 */
+ '121142', /* 81 */
+ '121241', /* 82 */
+ '114212', /* 83 */
+ '124112', /* 84 */
+ '124211', /* 85 */
+ '411212', /* 86 */
+ '421112', /* 87 */
+ '421211', /* 88 */
+ '212141', /* 89 */
+ '214121', /* 90 */
+ '412121', /* 91 */
+ '111143', /* 92 */
+ '111341', /* 93 */
+ '131141', /* 94 */
+ '114113', /* 95 */
+ '114311', /* 96 */
+ '411113', /* 97 */
+ '411311', /* 98 */
+ '113141', /* 99 */
+ '114131', /* 100 */
+ '311141', /* 101 */
+ '411131', /* 102 */
+ '211412', /* 103 START A */
+ '211214', /* 104 START B */
+ '211232', /* 105 START C */
+ '233111', /* STOP */
+ '200000' /* END */
+ );
+ $keys = "";
+ switch(strtoupper($type)) {
+ case "A": {
+ $startid = 103;
+ $keys = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_';
+ for($i = 0; $i < 32; $i++) {
+ $keys .= chr($i);
+ }
+ break;
+ }
+ case "B": {
+ $startid = 104;
+ $keys = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'.chr(127);
+ break;
+ }
+ case "C": {
+ $startid = 105;
+ $keys = "";
+ if ((strlen($code) % 2) != 0) {
+ //echo "The length of barcode value must be even ($code). You must pad the number with zeros.\n";
+ return false;
+ }
+ for($i = 0; $i <= 99; $i++) {
+ $keys .= chr($i);
+ }
+ $new_code = "";
+ for ($i=0; $i < (strlen($code) / 2); $i++) {
+ $new_code .= chr(intval($code{(2 * $i)}.$code{(2 * $i + 1)}));
+ }
+ $code = $new_code;
+ break;
+ }
+ default: {
+ return false;
+ }
+ }
+ // calculate check character
+ $sum = $startid;
+ for ($i=0; $i < strlen($code); $i++) {
+ $sum += (strpos($keys, $code{$i}) * ($i+1));
+ }
+ $check = ($sum % 103);
+
+ // add start, check and stop codes
+ $code = chr($startid).$code.chr($check).chr(106).chr(107);
+ $bararray = array("code" => $code, "maxw" => 0, "maxh" => 1, "bcode" => array());
+ $k = 0;
+ $len = strlen($code);
+ for($i=0; $i < $len; $i++) {
+ $ck = strpos($keys, $code{$i});
+ if (($i == 0) OR ($i > ($len-4))) {
+ $seq = $chr[ord($code{$i})];
+ } elseif(($ck >= 0) AND isset($chr[$ck])) {
+ $seq = $chr[$ck];
+ } else {
+ // invalid character
+ return false;
+ }
+ for($j=0; $j < 6; $j++) {
+ if (($j % 2) == 0) {
+ $t = true; // bar
+ } else {
+ $t = false; // space
+ }
+ $w = $seq{$j};
+ $bararray["bcode"][$k] = array("t" => $t, "w" => $w, "h" => 1, "p" => 0);
+ $bararray["maxw"] += $w;
+ $k++;
+ }
+ }
+ return $bararray;
+ }
+
+ /**
+ * EAN13 and UPC-A barcodes.
+ * @param string $code code to represent.
+ * @param string $len barcode type: 13 = EAN13, 12 = UPC-A
+ * @return array barcode representation.
+ * @access protected
+ */
+ protected function barcode_ean13($code, $len=13) {
+ //Padding
+ $code = str_pad($code, $len-1, '0', STR_PAD_LEFT);
+ if($len == 12) {
+ $code = '0'.$code;
+ }
+ // add check digit
+ if(strlen($code) == 12) {
+ $sum=0;
+ for($i=1;$i<=11;$i+=2) {
+ $sum += (3 * $code{$i});
+ }
+ for($i=0; $i <= 10; $i+=2) {
+ $sum += ($code{$i});
+ }
+ $r = $sum % 10;
+ if($r > 0) {
+ $r = (10 - $r);
+ }
+ $code .= $r;
+ } else { // test checkdigit
+ $sum = 0;
+ for($i=1; $i <= 11; $i+=2) {
+ $sum += (3 * $code{$i});
+ }
+ for($i=0; $i <= 10; $i+=2) {
+ $sum += $code{$i};
+ }
+ if ((($sum + $code{12}) % 10) != 0) {
+ return false;
+ }
+ }
+ //Convert digits to bars
+ $codes = array(
+ 'A'=>array(
+ '0'=>'0001101',
+ '1'=>'0011001',
+ '2'=>'0010011',
+ '3'=>'0111101',
+ '4'=>'0100011',
+ '5'=>'0110001',
+ '6'=>'0101111',
+ '7'=>'0111011',
+ '8'=>'0110111',
+ '9'=>'0001011'),
+ 'B'=>array(
+ '0'=>'0100111',
+ '1'=>'0110011',
+ '2'=>'0011011',
+ '3'=>'0100001',
+ '4'=>'0011101',
+ '5'=>'0111001',
+ '6'=>'0000101',
+ '7'=>'0010001',
+ '8'=>'0001001',
+ '9'=>'0010111'),
+ 'C'=>array(
+ '0'=>'1110010',
+ '1'=>'1100110',
+ '2'=>'1101100',
+ '3'=>'1000010',
+ '4'=>'1011100',
+ '5'=>'1001110',
+ '6'=>'1010000',
+ '7'=>'1000100',
+ '8'=>'1001000',
+ '9'=>'1110100')
+ );
+ $parities = array(
+ '0'=>array('A','A','A','A','A','A'),
+ '1'=>array('A','A','B','A','B','B'),
+ '2'=>array('A','A','B','B','A','B'),
+ '3'=>array('A','A','B','B','B','A'),
+ '4'=>array('A','B','A','A','B','B'),
+ '5'=>array('A','B','B','A','A','B'),
+ '6'=>array('A','B','B','B','A','A'),
+ '7'=>array('A','B','A','B','A','B'),
+ '8'=>array('A','B','A','B','B','A'),
+ '9'=>array('A','B','B','A','B','A')
+ );
+
+ $bararray = array("code" => $code, "maxw" => 0, "maxh" => 1, "bcode" => array());
+ $k = 0;
+ $seq = '101';
+ $p = $parities[$code{0}];
+ for($i=1; $i < 7; $i++) {
+ $seq .= $codes[$p[$i-1]][$code{$i}];
+ }
+ $seq .= '01010';
+ for($i=7; $i < 13; $i++) {
+ $seq .= $codes['C'][$code{$i}];
+ }
+ $seq .= '101';
+ $len = strlen($seq);
+ $w = 0;
+ for($i=0; $i < $len; $i++) {
+ $w += 1;
+ if (($i == ($len - 1)) OR (($i < ($len - 1)) AND ($seq{$i} != $seq{($i+1)}))) {
+ if ($seq{$i} == '1') {
+ $t = true; // bar
+ } else {
+ $t = false; // space
+ }
+ $bararray["bcode"][$k] = array("t" => $t, "w" => $w, "h" => 1, "p" => 0);
+ $bararray["maxw"] += $w;
+ $k++;
+ $w = 0;
+ }
+ }
+ return $bararray;
+ }
+
+ /**
+ * POSTNET barcodes.
+ * @param string $code zip code to represent. Must be a string containing a zip code of the form DDDDD or DDDDD-DDDD.
+ * @return array barcode representation.
+ * @access protected
+ */
+ protected function barcode_postnet($code) {
+ // bar lenght
+ $barlen = Array(
+ 0 => Array(2,2,1,1,1),
+ 1 => Array(1,1,1,2,2),
+ 2 => Array(1,1,2,1,2),
+ 3 => Array(1,1,2,2,1),
+ 4 => Array(1,2,1,1,2),
+ 5 => Array(1,2,1,2,1),
+ 6 => Array(1,2,2,1,1),
+ 7 => Array(2,1,1,1,2),
+ 8 => Array(2,1,1,2,1),
+ 9 => Array(2,1,2,1,1)
+ );
+ $bararray = array("code" => $code, "maxw" => 0, "maxh" => 2, "bcode" => array());
+ $k = 0;
+ $code = str_replace("-", "", $code);
+ $code = str_replace(" ", "", $code);
+ $len = strlen($code);
+ // calculate checksum
+ $sum = 0;
+ for($i=0; $i < $len; $i++) {
+ $sum += intval($code{$i});
+ }
+ if(($sum % 10) == 0) {
+ return false;
+ }
+ $code .= "".(10 - ($sum % 10))."";
+ $len = strlen($code);
+ // start bar
+ $bararray["bcode"][$k++] = array("t" => 1, "w" => 1, "h" => 2, "p" => 0);
+ $bararray["bcode"][$k++] = array("t" => 0, "w" => 1, "h" => 2, "p" => 0);
+ $bararray["maxw"] += 2;
+ for ($i=0; $i < $len; $i++) {
+ for ($j=0; $j < 5; $j++) {
+ $h = $barlen[$code{$i}][$j];
+ $p = floor(1 / $h);
+ $bararray["bcode"][$k++] = array("t" => 1, "w" => 1, "h" => $h, "p" => $p);
+ $bararray["bcode"][$k++] = array("t" => 0, "w" => 1, "h" => 2, "p" => 0);
+ $bararray["maxw"] += 2;
+ }
+ }
+ // end bar
+ $bararray["bcode"][$k++] = array("t" => 1, "w" => 1, "h" => 2, "p" => 0);
+ $bararray["maxw"] += 1;
+ return $bararray;
+ }
+
+ /**
+ * CODABAR barcodes.
+ * @param string $code code to represent.
+ * @return array barcode representation.
+ * @access protected
+ */
+ protected function barcode_codabar($code) {
+ $chr = array(
+ '0' => '11111221',
+ '1' => '11112211',
+ '2' => '11121121',
+ '3' => '22111111',
+ '4' => '11211211',
+ '5' => '21111211',
+ '6' => '12111121',
+ '7' => '12112111',
+ '8' => '12211111',
+ '9' => '21121111',
+ '-' => '11122111',
+ '$' => '11221111',
+ ':' => '21112121',
+ '/' => '21211121',
+ '.' => '21212111',
+ '+' => '11222221',
+ 'A' => '11221211',
+ 'B' => '12121121',
+ 'C' => '11121221',
+ 'D' => '11122211'
+ );
+
+ $bararray = array("code" => $code, "maxw" => 0, "maxh" => 1, "bcode" => array());
+ $k = 0;
+ $w = 0;
+ $seq = "";
+ $code = "A".strtoupper($code)."A";
+ $len = strlen($code);
+ for($i=0; $i < $len; $i++) {
+ if (!isset($chr[$code{$i}])) {
+ return false;
+ }
+ $seq = $chr[$code{$i}];
+ for($j=0; $j < 8; $j++) {
+ if (($j % 2) == 0) {
+ $t = true; // bar
+ } else {
+ $t = false; // space
+ }
+ $w = $seq{$j};
+ $bararray["bcode"][$k] = array("t" => $t, "w" => $w, "h" => 1, "p" => 0);
+ $bararray["maxw"] += $w;
+ $k++;
+ }
+ }
+ return $bararray;
+ }
+
+} // end of class
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
diff --git a/lib/tcpdf/config/lang/eng.php b/lib/tcpdf/config/lang/eng.php
index a86a3bbf59..b6a084c2db 100755
--- a/lib/tcpdf/config/lang/eng.php
+++ b/lib/tcpdf/config/lang/eng.php
@@ -1,22 +1,22 @@
*
* Moodle-specific changes:
* Default values for K_PATH_MAIN and K_PATH_URL are automatically set for
- * the Moodle installation.
- */
-
-// PLEASE SET THE FOLLOWING CONSTANTS:
-
-/**
- * installation path
- */
-define ('K_PATH_MAIN', $CFG->dirroot.'/lib/tcpdf/');
-
-/**
- * url path
- */
-define ('K_PATH_URL', $CFG->wwwroot.'/lib/tcpdf/');
-
-/**
- * path for PDF fonts
- */
-define ("FPDF_FONTPATH", K_PATH_MAIN."fonts/");
-
-/**
- * cache directory for temporary files (full path)
- */
-define ("K_PATH_CACHE", K_PATH_MAIN."cache/");
-
-/**
- * cache directory for temporary files (url path)
- */
-define ("K_PATH_URL_CACHE", K_PATH_URL."cache/");
-
-/**
- *images directory
- */
-define ("K_PATH_IMAGES", K_PATH_MAIN."images/");
-
-/**
- * blank image
- */
-define ("K_BLANK_IMAGE", K_PATH_IMAGES."_blank.png");
-
-/**
- * page format
- */
-define ("PDF_PAGE_FORMAT", "A4");
-
-/**
- * page orientation (P=portrait, L=landscape)
- */
-define ("PDF_PAGE_ORIENTATION", "P");
-
-/**
- * document creator
- */
-define ("PDF_CREATOR", "pdf creator");
-
-/**
- * document author
- */
-define ("PDF_AUTHOR", "pdf author");
-
-/**
- * header title
- */
-define ("PDF_HEADER_TITLE", "header title");
-
-/**
- * header description string
- */
-define ("PDF_HEADER_STRING", "first row\nsecond row\nthird row");
-
-/**
- * image logo
- */
-define ("PDF_HEADER_LOGO", "logo_example.png");
-
-/**
- * header logo image width [mm]
- */
-define ("PDF_HEADER_LOGO_WIDTH", 20);
-
-/**
- * document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]
- */
-define ("PDF_UNIT", "mm");
-
-/**
- * header margin
- */
-define ("PDF_MARGIN_HEADER", 5);
-
-/**
- * footer margin
- */
-define ("PDF_MARGIN_FOOTER", 10);
-
-/**
- * top margin
- */
-define ("PDF_MARGIN_TOP", 27);
-
-/**
- * bottom margin
- */
-define ("PDF_MARGIN_BOTTOM", 25);
-
-/**
- * left margin
- */
-define ("PDF_MARGIN_LEFT", 15);
-
-/**
- * right margin
- */
-define ("PDF_MARGIN_RIGHT", 15);
-
-/**
- * main font name
- */
-define ("PDF_FONT_NAME_MAIN", "FreeSans"); //vera
-
-/**
- * main font size
- */
-define ("PDF_FONT_SIZE_MAIN", 10);
-
-/**
- * data font name
- */
-define ("PDF_FONT_NAME_DATA", "FreeSerif"); //verase
-
-/**
- * data font size
- */
-define ("PDF_FONT_SIZE_DATA", 8);
-
-/**
- * scale factor for images (number of points in user unit)
- */
-define ("PDF_IMAGE_SCALE_RATIO", 4);
-
-/**
- * magnification factor for titles
- */
-define("HEAD_MAGNIFICATION", 1.1);
-
-/**
- * height of cell repect font height
- */
-define("K_CELL_HEIGHT_RATIO", 1.25);
-
-/**
- * title magnification respect main font size
- */
-define("K_TITLE_MAGNIFICATION", 1.3);
-
-/**
- * reduction factor for small font
- */
-define("K_SMALL_RATIO", 2/3);
+ * the Moodle installation. K_PATH_CACHE set to Moodle datadir cache.
+ * K_PATH_URL_CACHE can't be mapped in Moodle as datadir should not be
+ * accessible directly. However, it doesn't seem to be used within the
+ * library code.
+ */
+
+if (empty($CFG)) {
+ die("ERROR: The library can be used by Moodle script only.");
+}
+
+// If you define the constant K_TCPDF_EXTERNAL_CONFIG, the following settings will be ignored.
+
+if (!defined("K_TCPDF_EXTERNAL_CONFIG")) {
+
+ // DOCUMENT_ROOT fix for IIS Webserver
+ if ((!isset($_SERVER['DOCUMENT_ROOT'])) OR (empty($_SERVER['DOCUMENT_ROOT']))) {
+ if(isset($_SERVER['SCRIPT_FILENAME'])) {
+ $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0-strlen($_SERVER['PHP_SELF'])));
+ } elseif(isset($_SERVER['PATH_TRANSLATED'])) {
+ $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0-strlen($_SERVER['PHP_SELF'])));
+ } else {
+ // define here your DOCUMENT_ROOT path if the previous fails
+ $_SERVER['DOCUMENT_ROOT'] = "/var/www";
+ }
+ }
+
+ // Automatic calculation for the following K_PATH_MAIN constant
+ $k_path_main = str_replace( '\\', '/', realpath(substr(dirname(__FILE__), 0, 0-strlen("config"))));
+ if (substr($k_path_main, -1) != '/') {
+ $k_path_main .= '/';
+ }
+
+ /**
+ * Installation path (/var/www/tcpdf/).
+ * By default it is automatically calculated but you can also set it as a fixed string to improve performances.
+ */
+ //define ("K_PATH_MAIN", $k_path_main);
+ define ('K_PATH_MAIN', $CFG->dirroot.'/lib/tcpdf/');
+
+ // Automatic calculation for the following K_PATH_URL constant
+ if (isset($_SERVER["HTTP_HOST"]) AND (!empty($_SERVER["HTTP_HOST"]))) {
+ if(isset($_SERVER["HTTPS"]) AND (!empty($_SERVER["HTTPS"])) AND strtolower($_SERVER['HTTPS'])!='off') {
+ $k_path_url = "https://";
+ } else {
+ $k_path_url = "http://";
+ }
+ $k_path_url .= $_SERVER["HTTP_HOST"];
+ $k_path_url .= str_replace( '\\', '/', substr($_SERVER["PHP_SELF"], 0, -24));
+ }
+
+ /**
+ * URL path to tcpdf installation folder (http://localhost/tcpdf/).
+ * By default it is automatically calculated but you can also set it as a fixed string to improve performances..
+ */
+ //define ("K_PATH_URL", $k_path_url);
+ define ('K_PATH_URL', $CFG->wwwroot.'/lib/tcpdf/');
+
+ /**
+ * path for PDF fonts
+ * use K_PATH_MAIN."fonts/old/" for old non-UTF8 fonts
+ */
+ define ("K_PATH_FONTS", K_PATH_MAIN."fonts/");
+
+ /**
+ * cache directory for temporary files (full path)
+ */
+ //define ("K_PATH_CACHE", K_PATH_MAIN."cache/");
+ define ("K_PATH_CACHE", $CFG->dataroot.'/cache/' );
+
+ /**
+ * cache directory for temporary files (url path)
+ */
+ //define ("K_PATH_URL_CACHE", K_PATH_URL."cache/");
+ define ("K_PATH_URL_CACHE", K_PATH_URL);
+
+ /**
+ *images directory
+ */
+ define ("K_PATH_IMAGES", K_PATH_MAIN."images/");
+
+ /**
+ * blank image
+ */
+ define ("K_BLANK_IMAGE", K_PATH_IMAGES."_blank.png");
+
+ /**
+ * page format
+ */
+ define ("PDF_PAGE_FORMAT", "A4");
+
+ /**
+ * page orientation (P=portrait, L=landscape)
+ */
+ define ("PDF_PAGE_ORIENTATION", "P");
+
+ /**
+ * document creator
+ */
+ define ("PDF_CREATOR", "TCPDF");
+
+ /**
+ * document author
+ */
+ define ("PDF_AUTHOR", "TCPDF");
+
+ /**
+ * header title
+ */
+ define ("PDF_HEADER_TITLE", "TCPDF Example");
+
+ /**
+ * header description string
+ */
+ define ("PDF_HEADER_STRING", "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org");
+
+ /**
+ * image logo
+ */
+ define ("PDF_HEADER_LOGO", "tcpdf_logo.jpg");
+
+ /**
+ * header logo image width [mm]
+ */
+ define ("PDF_HEADER_LOGO_WIDTH", 30);
+
+ /**
+ * document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch]
+ */
+ define ("PDF_UNIT", "mm");
+
+ /**
+ * header margin
+ */
+ define ("PDF_MARGIN_HEADER", 5);
+
+ /**
+ * footer margin
+ */
+ define ("PDF_MARGIN_FOOTER", 10);
+
+ /**
+ * top margin
+ */
+ define ("PDF_MARGIN_TOP", 27);
+
+ /**
+ * bottom margin
+ */
+ define ("PDF_MARGIN_BOTTOM", 25);
+
+ /**
+ * left margin
+ */
+ define ("PDF_MARGIN_LEFT", 15);
+
+ /**
+ * right margin
+ */
+ define ("PDF_MARGIN_RIGHT", 15);
+
+ /**
+ * main font name
+ */
+ define ("PDF_FONT_NAME_MAIN", "dejavusans");
+
+ /**
+ * main font size
+ */
+ define ("PDF_FONT_SIZE_MAIN", 10);
+
+ /**
+ * data font name
+ */
+ define ("PDF_FONT_NAME_DATA", "dejavusans");
+
+ /**
+ * data font size
+ */
+ define ("PDF_FONT_SIZE_DATA", 8);
+
+ /**
+ * scale factor for images (number of points in user unit)
+ */
+ define ("PDF_IMAGE_SCALE_RATIO", 4);
+
+ /**
+ * magnification factor for titles
+ */
+ define("HEAD_MAGNIFICATION", 1.1);
+
+ /**
+ * height of cell repect font height
+ */
+ define("K_CELL_HEIGHT_RATIO", 1.25);
+
+ /**
+ * title magnification respect main font size
+ */
+ define("K_TITLE_MAGNIFICATION", 1.3);
+
+ /**
+ * reduction factor for small font
+ */
+ define("K_SMALL_RATIO", 2/3);
+}
//============================================================+
// END OF FILE
//============================================================+
-?>
\ No newline at end of file
+?>
diff --git a/lib/tcpdf/config/tcpdf_config_alt.php b/lib/tcpdf/config/tcpdf_config_alt.php
new file mode 100644
index 0000000000..baf98c5357
--- /dev/null
+++ b/lib/tcpdf/config/tcpdf_config_alt.php
@@ -0,0 +1,227 @@
+
diff --git a/lib/tcpdf/fonts/.noencode b/lib/tcpdf/fonts/.noencode
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/lib/tcpdf/fonts/FreeMono.ctg.z b/lib/tcpdf/fonts/FreeMono.ctg.z
deleted file mode 100755
index 07f15d5c327ad55215cd0a528d69640694521c4a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5009
zcmdtl`#Tei-v{sziX3w$>h4ZOl*5qoAygt^2s06KPIC&gTMi4MqD;fcVKzDCH0Df%
zsbS1QwvaaFG-t+hf3NHL<$0d};Q8fqUGLvM*ZYUh_4-8RF{i?_75d+tpkh}TD-3ZB
z4UMcM31`9+wYqCH<`Vx#4Hp98Gttw>$7kkxOor#;eDA=`>(3*%+MEoA#|-o|@CW@T
z4i&eitUC(hJOAP4JtP0({K>>bTVa`QW9L)6v8S@$un|+r#I1ASoW8(
z+e_Z{3mktZ-g+(d*4XYg&%g!ll0=8sGNZ;Ww|VIoxE?3odoBIh*zqe5*f`=V$IT0p
z^U3;am*$gVUn}r+I@t>InLN6}X@LW{;%Kz(sC|T68^;;_`YV_X>Xc
zhKORl*3CPRB`}sYkraiJ%(U?N0Ye-UFJY&Iw+cuw3%Rr($t0yq?P0bl%b7M$^vZ
zB|)Cbt9F{>PUg_~+>!#Go(t}@#&I{%1gDc?o+`+9nnj(=q@C7J@?Dd2@3e~IuBHjJ
zCPl8v8+KZryyZ~-hFEA0e&TcorfbK8SD{3h`*^O
z`MXbl_tNh#u?Pizs*|%Y|D#9OUYOTPN%V_4i&{PMyO!WxEBC&i&sjv7Ms}92@Bn^F
z9GUvyTD-6M|~bHTJL8az*so
zOiJTDoR*VkYI(PN-6v%aJiyCvcIXMgUK1TDIMr4zxhM2wM(+b1nSQFX9DFX6)28>1
zjx?I;ke56b%JZ%Fp^oe#)h!Rs3guAkHOEQiQ0)#ma%j)o;*~?itNH*q2{J8u`XAZQ
zv%!5TIPoT0#B{t~sN_nY0Zwv<7I!EjL^aV*gs-2H|AJbRlJ7qoC3>Icr=Q@vE?3ac
zA0={~wqRt$^KbRP0IeC?Yl=U+r=oaQe;Kr93awo*?C$SipP-$M-Pd+O(IBz$*Vo0{
z`?Pl@W@#~p|0o{)aweXm)4R_Bqh-9a!8J%*HkrDwXh6{Dm!7
z+QwAjl#1?R?XdMq#e>*q*j8+z680`50C?PpzHX9aG(JY
z46qddUL1D@Jg^38Yz_Nb0FKSull=Ft&fbL{Q0ihOUru1t{VRSz%Nn5P+m8`+Gv1XvCOS)|woV-<%ql4rv$6`)bMw|}!sks}u9
z-{4X_ferU>`%$Qcwf3+3@v#vbk-9nd7daEpB4BI$X!3CJObb?@J
z=%KIazQ`!QNdKyvnt?5*|Itm(zAkusHrOosyl#@s-Xipm
z1B{YobMB?4(c%~*?3fTfLJ#N3f8aZs8!nL#^c@5LS=NPr!$9cMx|v6Ii{pD?aUf$@
zDL=!srAGB*8pE>%r&?siuxqJTEgoV#YiX@2RA$`W4*)%M8Ucm_Kp-*^5Uv7pC69!M
z8-T#tM1k;&GdjDUti#5rUK(tcJsP*+A%&$pJ+)Bu9%{4@5juTM3VBud}quf
z$7jMKXUuj;ZDAoZmOJC@Fqna{5Gi5P!{C=x6M6dcll6uOR?=?$cXEfRvT!QsJErs=DIo(vt`%@J}wvfld%8V@KffW;{D6e
zdkW;sn|GjhQ4_wK51}?FvgD>Y^bUB!DXw6hp@2IG*l%es3SqeJH?|kAGGg}Q3b*6q
z$`$DS`zdi)6n$|&DQ-`84ooNSr^i*y(s%X~j&2*@PSq5V{yhJ3z+O11@U>W~sl61R
z746C)xX=D%>g_jI)Xn$iw*O8PHa&IWe~xw7Y4g%2V)>r7_fpMkuL^!CjS@qN+M3?I
zm2&m;rP9aQd3LsU@0w$-3Y3hC<
zruKd^)@W(XET56U4`vWQ`C&A7{cDL4PZv`wIB8sAE{0{tee?>;vmxHmHAmCWa
zEw^&$e4x^Ru>4@6b&GiuU2vu}CJZG{G>g8KNk45+>bsfePPB?PuciyMl}2tB7!obH
zc+%B>5K+}AwLTf&$*8lBO%bmZvrh+gBWe`$PKW%3c&Yd{CGaDnT=7FnuqOhc_&z1*
z7XqhPkP;$_NK|}tC-5zzL^1bHupJ^>@!g%EQAE9B{+$qY#4E+Dfxyp*Pm0LB?#J3U
z@7ZJx&1*d;SaaKtIH-e>
zgJr20e{3$J<8TitQ&xuY_DAZLRbhM?NS?AHzsE92#WIYaPrKT%HUHRXz548j)fWd%
zT0!?*$G+8TcY&941^B^zyluP?0
zBSm~lq`fVWYCfN&efyB7eLm(sRzzO)@n4G_BZO)65H#xu%hU}y4KhK4HOyH@yr!PU
z1+e0*)f6^5>6!a5*b(v0=iS4g2}FZW{=*P0M7mEFC9n}u>4T&MMOfJ_L7^h|3u
z5rQE7(|{cUl+~%PnMv?s_38t@6CkYaR?TWc0IRPRuu6zwb;Z_uj3`y8Jmm7I41ZtQ
zWTKTQ;Aci5YP}K&=%K7>y-1gOlKJ@J)DiMzpD{r)$ceH#dJqqC#OHHvkOXqvhkrvWW(_B&g&r2y`Q7+@
zIY+B{*q1fMxvlKFw%VZ(SVXO_QSnUU$@mf&>e~IjzBJI!weNkyLf~`PF2^$~_5*S3
z-1T=s;;!S4b>l$-u45B?BvNBIryt1m`@}J+B0lJeETu2r?d+81YpsK})#?uXQAi+U
zs=Kkia=B?+Z|X;5ZBUTj)X%sOy~&KmEM_2nvZ@iu433#BXv|>-9Za@2qL?APlkpt~
z*AkYg)VbHxuqWq}*$?z~$)9_er}RcM_~tF9)FPIzyYz9R=a?t;Mr=N3F~#)8ZR*CD
zXY@31-tY6-kncC+5dn*oy$F-1&x=5t6_9I!HaUma9h*r<9yyeSh$N7o6Jy$xf(`()rD^uuhs#=tZ42WnX@X1bu}
zGV^N8kAhlX=FOO&?lqFkOEDDpS|=tTX69#&Hd7^L>St{v(;#Nnuttb^@nF)h_C8bN
zV7k5LI#c=JM|*7uQ}5tsT#dpxov=Ya%WpbMd0va4*Zefo7F*SN{<-d!r>cjuV5ZSG
z^QR)9za=T=p$|Zsk~3ePs)4RaPJIat<*Hog6q&vB^fc(NoZUr{J8pJ4giDcE-R|Zv
zs(q}Oqqut2e5+M;+$+_rq2O9EA>5pV-ch&8++H&RJsd&+@y|-1_%I9?6hkC;RPB)#7>d1vJ_~R0q@2+Ts
z)ZA}V!Yfr_D}H0~GF4?23;r;F%p9X7x~e^ZD$`<7RU7c@LyOOfEP1+Nm$}C|=W>K4
z4MMl4_FyWKyOk?0crDam5J->w6S}I4%c#m)T5gH;r|(yU&bURAd$tYb*2)X~AJyiel~g>Vs(EQ88BY&xo?6MkFRe5mti;Fsk#Fu_Nr_<;G%v0s#n9cG
z$t&qGOFx@;RuT@rc79C-oRw`{Mo=KaaO!KhR5OT_;1Eqm-;(-LF6AObEMss)N4KAf
zkW2G|$Yl(z>lj|9Cg#073lX&$9MHLmre^1*+CyY)hUhv5zSLKFDH;%oZ-bOw{%_xI
z>Rev@HJu0Vm~YL?WI;HNQu&`oJ!N&_Mt%}
zHDfwO4-ORQjUEK2t~HCI2)mnBzlfYys&T#t3{V{w8yEhbQ#fM|7@{m`VtkZ@A=v_?|tu8j>JBz#hYtF7Zm{t*+Ud<9{A86Xu
znx)}mGgnz$abGic)r@H9!&fL4f80RzE}(*$c=ocQTmNJ^iWX-Wp8jalF$YP5bjo)XDvCkNd
zecz~K%Ndcsvsi4-4&wEVG`465>6n_cw-A>EraSG8$EAap$a`CH3A2B+_lE!dq!~?n
z%sBWgJ#ud*E^~HiXODek3F}nYgdaYF^(t(292koHACCSno&NuhyZyUf$1CFhA^ERk
zA=or(?Q#MHeMpBrnU{u5pjeA+ZrBKTBZn;x8waz_!v&9E?26+F^4Y6OA@9
z*=LV6Z!mIUE8yLnBjEXCUEz?!DdYWb9YQ4vhyCYIb)Oe6Nx1U$B<1{0HKpM{{_j1u
QG&w|XcAVgRdnNC`0E8OwjsO4v
diff --git a/lib/tcpdf/fonts/FreeMono.z b/lib/tcpdf/fonts/FreeMono.z
deleted file mode 100755
index 08ff94d707893d6394d9d0008cf0527db1ec8582..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 111208
zcmV)7K*zs$oW#8cm?TxTI9|7^yE^Bp?&+?c={Ox`dQ!*9Iq%M<*~rf3z_KjM5?q2v
zkSGWe!~h~JK~X^j5dlRM6_tmI0e(K8pu+AVKGa2m_}1
zsi}MJIp>~q&pDSu6h#@SODTrhIx#vn9zBtG0`9yC|Ar@K*9`Cd%(k;B3bn)a^UG)3
z;@e*S>-}*3FSuU2)@U<&OQIG
zWgl@;%nuY4<<##xbH_HzJBi&C^Rk(uBC#{Joqs_4Q~Cx6hOnbEYuO$v?Mvt@OhcBG(Ef3#drKg$ibCpf098bb=nH=jb!&gY?Jfo9R!}pQZ1m
zzeqn#{|Egt{d@YajD-;xKNDdROeZtUj4~H8*D@bxe#ZQYd6D^@VvAy@Vy|MK;w;4v
z6hBrxuXtDSPvu(WRmy9XPbhz&{Il{M`>}@G8~*9xJ@uY3&x~iCXM<;>XOrh6o<}`D
z@chd2U!K2t-tlC;W-sscdqdugx7*wA9rsRomw0dR-s}CM_siY~e2h=!Gx%J-2A|&-
z_BH$BzLf7w--~{O-{j~09)G((<}XbLmsf_ipaB+%viF~x#jBhD@TWig+Ga7nX#AD&DdV?|-!eXFe8Tv+Rwu3G|NH;G`hN|;$^6Gg*(SD`
zjj=6kE8E7lvmI=lO|VHe#irQ|+sSrmHEa(^Kr97segyx?ort0C`feWEmt6eeOFwk(
zo-^T^0a>Y1YqUDO!DupDtTv9fJL;S+!Cl|r@%sFMU}Gp8i8eLIT3XxMJK~9CDxK-<
z>h9_7>mL{#8Xf_CJ~25py=3XkvgIpQu9{uFX6?H58&26cw`ud1t=p)puKw6{w|wUF
z_uPH&7w-Gwm%j4l2OfOrt6zKg>)&|vvB$sp?QcEx9qR0zyH2CdKXl-9>fm1Ln%k&z
zDC*Sn2$cISqV9k4vK{;J_cK01ZU5+%pUz|83F>?KuV4vKSA6{P>#zO9jW^wJ>!+ws
ze(sLj;nrF3??U{0Vk=MxWEu_s`{3(-`ZmxMDysEiM78xkqEb+Qi9gILf7km6L&I0<
zVFuq;;@gj?SoE*nM-aZBu=p&EK8w$XX0pFVy6n63Z6|j7==Jc{W4X7`9(pfmS3kU;
zVFUg!6G|mB=|tRvI3^Ky*m+LHHY0zS+(xUch_fLp5?Ga6L$?|NMx|G$GXxC^kCskk
zpLDy?xJpy6rdZHJiL8?TY=bDiUz-&XA0R9Yz`rw;CmFy{e0POYfDE{Qd
zzo1nKbd_d>Ak3N(XHp>ZMiXN-GswJ75H@I*3BpRaZ!>K)BO7PlAP84%)NDjMFXs3^
zx=ifRKf25`qke_wF6OyEI(gMAe{{NE;rNTO&2m=mUi3Qs39wKoluF`(?GC$xK)_+(
z!l8g)#qylPF85l5hY98IL^u_
z+LYuS2ecKg8_OlDF{hrJ)^7_
zdIh_WH?+AtDZ5%@;Suc{Srs+0%z1)v9us0!Wq&&DT?riL(BrdcPR6}YD|k9hE5v}@=0%Ku+a`b
z+w1gAoTJUDZ?@e6_Y>Z*c)!(Yfcq^jL$mF_vsbDWdId1zht&!LgWgPgBYh!93P0)y
zHF0$vPW+B!oetfR@r3&u>!e>rdHkygUkATBav@`6Xd`N|z=vP?ISzkJSb_`+@Q7Fv4wr@qXp$m{WnqW%X~)Erp%
z`4yEZ;5-j-8_F}+04h)hIe6|$6-F(^kp>Fo-Ku6fGh=gvw};;~y1-M|tj1
z5P8by1mQWJ`-vd@gyS)8uFjo_R#P{DFGOV$OrDW`e&tODtDQykP1%1qd4+;e<7X!k
zO`B0OrGX0{jFa%e0O;N9enCJt3y9`9@tv=NtUgGcOIctARtn~@w#CYZj23OPO%*bp
z+h{N~SyVxzIciZ6IrR`=^>g@dH7E}b%CEjxvrlLYAQzQrf_%~!oS3wlXj-MAAIG08
ztc|l^^w&XCSg9bvN?!O%y27r^uW+~}NhF`2WMG
zo9D6z-`rqUXCm#Bt-Ojg0cUyp=T>#Kc!af=E{_HUVW#($bwQh>H(H-|xH%(Ddm~fK
zKu2#|b71wwBY5m*0e{QDfSI+>$mMp^iDw(865|K@nmZb>KG%#)$9mRB?LM^~
z8DP=S)HN`67VsaS5R%9ZC!0=tlE{aDQzmP*)z9<
zH@B!m8}-J~kTd0rb|D?x}`g^eZ_eXY?^Setc79KOL^zS4&~g9X1Xtun2rfu
zHjI(eayf!ye39~r62`|fdFhG1k$sut(TDC~vDBn#pEcliFC9AZPYwYhlxna6^Q+NG
zMX4^#Te4XZ(;+`ord&6dU8D03j3!4mbT%E>t{99D%%&q7*j1B}x~@QMGU|YzGtI7^
zP{(x4-5Ww(iCwd)$WTZB&ScNZrSWioYu9WX#0Dte{s5n72o8rF*~6XwrqQS?6KtLc
z)lnrhh-1sXoU^5Ci48=k+K>!P^y2(9a1}^^PFpMuXi=J?Lm&|Y)#RydAqiXhQ6g_q
z3;wjK#Gf$Mb)XG4!&q9%U7`;v2l-WALwvO4^#y%FYfD~DbXAPjf`o=i*&0Q&U1dO`
zp$WrGqPxLRQXxb34z$An+@n>hk@HVVlS-%h;SW_>rIOJqF+LL1cj!iR9%vz(To0)V
z-)L=i6g1MeLFS5|Xc^W_Hxl)PsAT|$8Q|dHuM75F3nDri)0#GCH-o9hA_Llyy+a0x
znNeslC^`iJg{H0|ygdYZCJmGkS4UAYiq}|JCyL^_l32qWe~p9f547}+a(w+vC#%}i
z?&|XPshWjmJss5Q@JFNOA5lRV?dmaG20d0k{;v1aqm3OSt*!><3x1U*sDlNgY1A^r
zI(!CJ?EzSCqX1W`$jEtF0XDzLv2xbVYe?G8Ti|9OoGP$3y1PNUG-MxZ>Cd?RD`K9u
z@YHxfuYxt-73)}+N>3-oSGSsUj7{*Z3R>cJ7k`tI0c&b(|g_P-em-}ZRIQJ=PJFm>^d<#dAbV(s1NQ^{nxO|)%nvRh#W
z#QOu;_tMLWWcPgid_j2rhmC^pIS}&`2Tc3EeG8WG=#M;i;ywKB+o&=7UpS@-GM=u7
zaq3`IwF9qP0wVhme26$93}ws9pJuGw^Y&shx+o2-MV}J)thr>Mr7Qb0LD+K3`iM2-
zi{AUfSRu(@qX(Pd007}vxTNz|
z6UM+E(5AmTb+l*M;QHSQ!jexd?MkGTY<%e_$gEdQ?&$o`l75~W?OQT6GsLo3q!z}A
zVhx)&aztxM#D8AJBno)wL-!FAr(Y1#80Qbd_y4*HuVrL@9o)jZMDl`#wfz?@f^fMY
zw8%#aGv7GZy4`O`qdWtnJbM%29rNpX7AhYD(=85k>%^6$v10_LWkZSq@TxMsT6$+@W^|mPVc2Kf?q58Z+%ddmdfQT+W+-hG
zgpGo;Rj{QyXASzPD?1y!2z@GVf2UyXVVHXY%g2hzlX1aH@}*=~7THsv)&CAS__*8M
z;uHi}QE6mMlP@r$a6P^*;)LUW@eBMj>%n)Zf<2rdK1qo^9LNi3@JX(7yR+W|7YF8s
z2EabjihnP@kyyik+X*5E;4OLQPYPU+btr$`^CPLzWy?)wo?9}tq}hEZyfh*R@Y367
zGtGlK)2)K=(b4W;E7~RL0L&e|@b(OFdQAj1$}Uu5SVVj@gd-pKEfIt-i`)VqOHf^l
z+kMdOHor0z^*5`vor17#Fy(YNz5Hl#V*mUn{`qV}XWJg$$?=bLIqXKvN0KZ8pVwxo
zToodtyoM~mlYN4)b*mt}L1yQ<3*5K@(h!bS(JSFSG2q7l6R=cHOhAbWa$5puy!B4?
zwA&46@&mF=EEnOQ&3HPuZIZd!BUrR!!+S$qB!>t>=Wr+1z+Gq7TM`vpt;M7al6e*(OSPz`R7
zh7A{0flO2!+tL}D>|ApBRV&*Yy29#z5kZa+hOErK(rS@lqMck2&2+?T0S!hyXUEJaotf7FfbG4d=E8Qtux>`kStQy@R
z!-hGcHt7U~nP#juqrm|74$WxQL;SX7o39`^x_a#-9V|hTq#b66YPr#zW(%V&@OGLOHWSZZ5)W4C|MVB+}C#RY3L
zQ6EeOUBGp7xnt;GfXR_+8nYP0l+>gEi&$kGV7|Gmq%Tm22C5
zlcK)u2{<~vkxac+Pt)dx;OMdzFR_CuKzV|yC)T_Sjd`8KiJByUhE5ZN2J=6S6DXZZ8Y$^eT-}%Tf!#00v7zShnQtEPcq+I
zMi#y27qnK?7NXEP@g9C3s115ll=TVu`#@R=NdCrv4qe!50w~??O`Qk&&*<7p-fHR}
zJaCTm;vl*vdp`P|_;Pe(_5j8ZyuV%2hYq>*D7P*%VcAHIj9h4qJ#7($D+HnczIz9W
z_P2cd>j1@mL1@1HvtSRL2_PWvKQL`xdI|sh$Di@|KlzCymtkC3_X#Xt8cTu`O!XmE
z0W>U;{_Az*^`Xz)8gaW}z`E>4pw*9hNY9G(h4-Xhi;6-6nTvyMbNi$`x|
z52DHJ+h8|s%07;|Ilc!y&w$3dvpbtqfL6!R*Sg#l=qd2`4SC%ysS4o5ZGv#^wZI*T
z6Blwk{Tq=JWYIcX!L>({)Vdu_D9to&&}5%b;=nL{?TJZ^%BVnA`f)7_pZE>8!-#|8
zh)Rh+Ma_;J(ulM4RY1!K!Q@$JJB)WK@%$=dtQi!0L}OxTo#vKXG&&q+p-=t2Rt;Ya
zPds73p&2cOa_{6Wr+4PQf%6)afE#+}i5r*1iFJBA`ZK_C31x=ah+$%Qxipz)&Q>XT
zmF{dkyhcSI+^JTwRz|Z^hvQgSK2E|atVa(4uYpbBOUZ)=RU>60TEnS=#3BKNdp7Le
z66IE$dDbsAj?DJehn7bKej>qZ8*qHu
z#Ckg$8nf?m{DD(U8Hc-**9_#^4j+&>Z@T9=6q#|JlN!g(vs0a$6S
zC8x{PpNJpy5|8(h6#Y$!Qxo2)_MtPDX>q)~dBv$`54O$rt=)vqH@Mv!g}QdPZAsg}
zmV|#&Yh-AyKC_}{<=I2+m?8tjf|TZ+=jKwvka?@h)#`f~)e~oK9m-7it=vBeS090S
zk8}*IPDMvy-Y0&_@f%KCGPq{fNM_HQ;;c8MBg65bxpXK$vKnUX#q)0T*=7D)MNrRS
zSNaMb0jh!`U^p>8X65Pjw0~OAJ_T%We)eIahnDkP-&l}0C`}fIW!o%#AC?Mu{^N8U<{!ki
z0!m48q~Jv&;zgEVAzV&_$1%$_CnnAogmVWQ`Qg(x^(Q8~m+l!tU!08x23vYo#e>5!
zv}_hc{=V+kG|#0x;mfv7^(@~ykl2jULoGeCiQr&s_qw=WviHM)i4JiEkTL6#TojWv
zYGNu~#rt~uO_ozyuz8RDzK|!K4ttC`xCD*R3d{iuAvdX|`~9*1A+o=jvjO7=
z!js)G(f=t$Yl^`yI`kG0$u%5~UnU5b4tp(34>}*r>X8jGC(otb0s72-xCk~q-Ru2K*Bx-*>~Jqvcv
zwBKZDYga17ujY6LzMSDAn*``kvWGmOUB7O$u31bb4y{^lP%Le1uXFC~@7Q{r@Pmfugu&LH*?8kXYtPzvATMbq
z03IK)?NXJ_ZK^`dlnI)jO6&|^Y#%vm&tQC}ch$ZT`r!?!dKQ7MTSwqoz6wkbV&EO$
zx}ktmF{gyZfdfHX(li=7ivMHv7R;PGKJecCOF!y>Zr*k
zSdB_rp{@6Ijf8}>4vaRzu8KM>t-Lefq>)Xnwb#dce8gsK2I$|GVt{$oP*p<~)D%4R
z*AzQEdSUYiwRR8q|UMaWUO2q#ic;JtIG(WoptXMpLW0~(*;^@gGCvtt;
zEC}ZaLh{~2Y4Uz!jv68%uuG%~egiEb{vKJNFvdAB&>JuY_7Zqh*h@!}hmC%l{RM(2
zv)7^)5H09XF#ABKAZ!bw)frfP7|I`lS8@yJt5%XhV8T1%BzlV%l@#a2%ZCJerF|1I
zVG3l1#}HB?zgFi&bs4uQqS4jWwd$BQhr5nrLk0zU`@wcW=MHIf4@NCY#8|lwr{}>I
za3fFzDI!|kgS`zV?CdLoI>{r${*j7!_x_Y68ApSW2t9OSGw8~@1v#{!eU$kuAPK^7
zQdC6*c20^yr+7YdI(tB)gZ1r>H+g*qN2ev&Xhzc}n%33#c=ddP
zqe+i*pu9=CPGfDNlXWDMn*3*GNv=B16^x)gK!1`esI+0JVk7&EWNcd=1Sw`^LWq@e
z1zpDSR6*_#8VB3tNtH&>(k@n|Mn_9h1&I&*HhPghi1z>`X&kSbS0}kTms@ox~i@65F@#%zCZAG1JEgXMJTf-R3`p~h{1z~T{;_P!f+AOMpVEghW
zXOo(<*Kzb&f^e30sx`AAqfpo-+fGdn<49wM$o%~75!uxecPYgcSFy(}0o*Q$2e|*(
zzXEESv0CXU=g2-K*u!pzVvitf7P=bS(lL*bVKkaZJk?-zD0T?KDavSAsdCtpf|0k;
z1F3$dB+dlg;k1+pK4izN6LE;9hP7EZB)%dn&aB^w}GL!Eu0A7XJju^2*yo_GYDY
zPZM#@iva-mVJkBkaJ#<2L
zne+vyGn{*dw$mG_9%@#WWhP?Vlg|}WNxRzl#It;Mgp`#?XlR4gz+xeQlM(G;#!GwU
z=orV}pK$BjJQJPgn3$lW+0f;0`Z>?t*X`6Ub$Ewv=;U37ls~$2aCLyyr!0z(^slH>
z7>877%1m!Oqpof&WaWH*N7&Qftl|zK-*VBqHK(lm@cHZ3ZdiNanM=o3Ozk*#
z>B!1yq-dFp)z{m(AHj)
z+_it{7+$xxBL{k#?x(_{pI;jDBAGFAn$Z>-nQ#3LX!
zIM)4PiW)!#vK7!*_1+64{ZjXdPY_XI;LEOm@k8>dzyC{m98J_cTXs#N`uBqm_89h8
zrJNMJQc~#k>_y_HHM*YX-Uf3N^p%uH3Hr)R;VQE{SNN$Gs*joxcdW705T!+N3rYnG
zj{K%%V2SI6_$4!QM7jmGN|OdJ>PN)L1{G13vEd1j;*f6%*w!Q;U;
z-kESH7+0h%c%CiTq*gZ?lwX;LHxP9@U5B2c2Z`MxPJu&rzbOcB3Upm0B680u@We&6
zyjHLkijx3Af?~j^-Qo7>W_MSl9ej9Yo6FPbv9#5h>5Je#{I)mLG2Yw|g*)ah_yzv8
z9_Q(ZJ1!QA$9paX2_{RE1*6{=$G%yzBwIFnCb}6svi$;TxmytKjvNw%Ly_!p03T5g
zAqL$_@5FlxwnPdq;6P=vW>W4StJwegRPg8(DJ31W*jnrgMqxBEwm>H1H!;ZV75aEfD9K~57?Y0MT|U95$3s93Mh-B*Y4`VHzhx(milm*vvQlM|&SCn8RYJm<4t
zff09iCq1E5lg*-Hqs{G3eT&`6YZzzDqzpNgEp;l5iD~jQ^w(<{^qpWb{8Pe2$qJv-~V_YqizlY{ZQl#Opf0>&_xZ(!;n+e`tqL&JM0A7?e)Xkz6
zK^62{Iit_{VN%9vSc)fmi-((GUu989F127bN`_)5y!5K#i46|iWR
ziZyhH<2_zmhuhcfv&A{5iXQ3_>U|TjhMsW8L`y?syW0o9Z+Cn9d`(k
zR?EQ8{9F|9H{2i!c=V038!s#*@fBEh)1!c~I;sh*>@gf!7Hz%?#3?Hh*=-;!5~7gj
z^T-CsKrE?loZ$HqB%|+T50OnQ4ce^3i${CwrCkQzsWI^U8eXT2(x+oOSS_f85__`S
z$zGKfeI9=*v*-GM`8t`O838JI7zg
zEBga2-NOtm%UTVdE;Q+xLeA>#I8U{^-)I{2SiK0r)rdjLTCM+qPc6$?WyG8Uh9`NS
zsYPafR&3JFn+ocZ@8DL=3#G%Q+q$Jtr56iTrSh8(tnZa5#_DjXOSNSwT%C)BtJ;S7
ze2{Iq0`Hltbf=$A_|i}vw)TBu>C*c3YO?j7hmL-mKsUBn=t=?*VxUM?bOADFK2VRE
z6v!U*)hAsRo;R~P3uB7}oZ%Lu&B?0N)d9zRpyh)e3vX82bhbu^)2URevBVJJ|0jVz
zNph$cF#}z>30v+k&N~6K=uHw2QtnMw2c4600->LJoognNMzZsI2)b)q97#WE1vpf9=Oj4
z!kI6)1!1co2!Gn-a$Uu9PoZG;cVdq3EXmDYjiZ1wzPN%7Z6;vpuMa{1gthr->4ZH!ICQoj^WlURj5N
z@+BR7p^g{C?4B7xn88IUJI4B#4&$N}e-y`UJ~iEyO0jHwDKhiiFL-X{)Q-+GXNECI
zzu@@SNBWmcFBwv?ah%^kvf1AT&vj%``Rw5Zt(IB|@1yftEY;HCU$0@WFk+TG@Dq+(
zw=W_Cq+$)#N}T^}$y%zNMgMNO-7JTwV_}Fgl`E_kNJ8mKs}0jj##Ol*~&F3Ryn*)ARAl+wiaZ%T3`;&%XISq{o9(hvIzS>3tcxB#_K|or55nt
zuC?J(8|+tWOB+NTq;{fL(F?fR4HfnkMOZ5PHpCq$c7u-WDBf^`&aBjEZxAoFpZJ6p
zmI%t=yK3DHpCDU?_%7LA`~*B@WpsFzMshFG?er$VQv|OGk>{md&ivk{L)zLD)2PLL
z5{*>wl)QdOqcJh+vEfzY+tyAFlZ){YjHF@Y?U@2pp?%rk_e{f=#45d&)vjBA_Lb|G
z4A1JVO5OTdjGar-z8*l(Mx@Bzg1>AAnMdje@|NI9R1j21k=i8%*`LX+!TAde%9V5p
zggqw%VHLey8^kNhHTXOrR%-MjgncIiVO1Sp8^$*(wf%gEtfKwJT9JZ{xOhkxvw#!^h>C<}7R1Tabdk%u|?qM4Jps5{g;-CW;&
zQ@5|V+hYNDS<#|ax4SKUU42Typ-eQG+Fai5dZSnX6GdMi3ORd19lhb6>$WBulJ!A5
zs_WO$U4fQm@rZ)Ap$PBDc&tr)U3P}#XE9=}1bqpqm6-hC)e@Dyz~aj%zAG0#%f
zZDo?FbS6{(#!M<%bMaHLmhkE#=YrlT#Zs24sR;7(
zz4d>8z7^rmli=XA%g|I;84O+QeB&*=t4%Of3y%U%>tV*j=pkwxX1iImwjI?gjKVyQ
zjTRFwYas+DVlk;uv9Az$RRTve{phRbI9Zgz0G4C3=`=bT+!re
zX8+unoP&Yhr<}4js!U>*_mt6)pcyZE|&OKo5N`5IwEU
z9#ZRYaiHGSGN!;K7|zlD#*U7lUy1a+?M}T@Wn>t$-kCO)0+%#mgW83F8vgH
z%}_&%7OTr?mIcSEAvE725=ND(R>SnzP&smAcuV5Br#q^%bg7D
zKQ2>q3j%*_g?>{=@b4h-_h6lUQZraU!k^4+Hq;RD3(jhPP1&BWnY)Ct5)Zvf&0J+D
zSXMySS+f5itEGFfJO*4GCs=))D&b$*Ku1gW6J#SjR=$H!94SC%%u5SN
zzRQ3VQmV`xdVI+lVbk!)7F@|TxOSvZtxb(?q?HC1X$F$59N)To3-BKLWJ!%1J>=hf
zdA#lP;UTfgEyAjHbTlE8LSbOsc8$VlW7?Y#kj(IOMg1G8^8<^r9e0;K=}N!Gg$&6B
zO95x*j~dTkDfnb{t5LL*&A^v96EnV;3c@N8h_xz`tBu)&T`5C&2HfRAi?O=Y->(HBMCq
zldT-ad^g?007Zihc@2tsQg4+1j@U@#+6IjdF5ssJ?9RL7S1@ua_af~<&n-62Y|Dq2
zmHB}4ZNplSn%dzmz|yMzK^>Ul+QA;USn+Z;n-~VfWxt6~dtB_CBBBr&Ife+NBiCTuX-mDY@xi@Q9IB3}0q
zye|LuB6(GTUp$_VRGZ3T!*`m>$xHL7OU6@j;vOZVOrv?4$D&Y6krcqQz
zpeScxJDSSpQHw%9khQ~-x-;1so@ygjR%UrUP$j*2*IK@jh5?9gt31pwUQ-
z?PPjsRe|`Wg}Q6G%Cy_Oy|(Tz1vQtGFkEL2(-XNY^;t8E;~j8coWrH&5IvzqaCe+4
zJWW3hch_d;%ARe(ceT%n&z8_`_~dChybbWj3VsbQ#_F^Niq{NOCIFk|h
z_T~cL;$CzSoUc&YgSQg$LegW^&UB>r*7%v*htku1tIn9bRuHbmcYY^=KAXlZ>eOIN
zO>_LpZQ!>8xLa?8feH{0VTi+p9B{Crq9osP@wwKLGyC$|GYvRQVK9vZ_kJl3?67S}pn
z=!tQ4G|e(PCS>CVb#zi^%AQfHoxI5x^&1f)hDEDN-QiKGs+IYkC*y@+h9NP>$Q$
z=3Q;1S0Fj0-ELNwSxM;z=Yfd@TSA%~Y}#!w%T1)XPq}=kqD!Q_uA%p&c(+pA*JR&v
zZB&zm50nY~(mlHVljGqk3hAWSxD4urSoz&j*dc=1FaLNmt48Q#E9TDwStzsC>K+z2Yn$pCLb9!&!dBMl}0(WJLExvJYUN{B`l5
zjnxrya>Xw4^ZHR)M_XKrCJiQ4qMt;2+hhVCW3vTdx_+T9x99{Qd`slQTAgmu0};Td
zSY7le@c#yC9bhv?uq^IF`^nuO!riy2LKPHPpAK@iL#^7Ye3Y!b-Y6>ek|`-Jx))5h
z{4V<-WyR+`R(Wq@;gzzzZG=RlRkoFVUZgN1(GCQtKU+4ZCD;z6elN`l_k!Dn-T}Vp
z$d9b59ptHcDvB-Wa8!mxvWLr#N-?T!JTFuRa`NY=;PYs~I-w5$wCyJeOTHJeVM?#4
z0?M~a8WbDYaJ|-01(0IbVtK_`Z8|ShUv{U=sGO&yEZ=Jw9a^y0Fs8bU+yH4k$n+kP
z!7ZnH2A~V6??(I~uuH6@4PD5#5ardf6Dg4(=Tgoy
z$8yY<&rn$sBr2QWiCaslKbNyfUC{ki=T|;h$?QH?8IBU?c4DNA$4HJ+dZC$>8)M}&
zdt|VlyYAcNY7Chj72H*@&zM{p0=
zojw(93sal|Fj=`Nk*rcJ|cBl&iA_~mF&gQ<%lUCJAnq)>#$2|-gh^sicbl`o$GYC
z)3y0@(iJ~@JORI@^_u=1h4J&ZI7?33?t7EyE>gJ+Ye&pxSVZM=%W5
zh2;`CNnr2;V6I$(EQGgLOTe2SYbUa$kQO;EwJ4lb+sLSewx5(ojH+O+d~-m~bt4}D
zcU8hg3!(3Yaxmw|;8YpJ|F`ExAmI8g!u5-zpQY$9j`%>d-YbP-ryW?
z8>{mDvoo;iXSAepUFZ*hiwr&qs^+wN3Jxw`2@v{b1s0Y_SSp362~C&d
zBaf^v$>Az=R{%d1SGb24QJtT6FKgAYOP*`(s`XD7^GwX->_Z>vPO@+gXJO=;d5&j@
zUhaHZjW>(?A7Zxzx!)Tn+E#>$?0--=cDafwbOB&YQoo0hML=62;vI|c0nxgR6xr*y
zYw*WMx9im8irkzBuPE$2lLdNL@QnvBfqB2ewHH(_mu+B4&d1>??^Ub8#
zLn}n$5XI(Ll7N$U&?T%TC%y{s7>z94PT81
z-0hw~d$7Kv;YZu!E?j+P1nbGwvXpb|HqlFl*X0{wTGArxTS4-NFK7Y38=m*5?JnsB_c>SK-09qKU<<{D2Vy%6JWKb>+r{!?YhtZo$
zt+N{VEVau@`LtGiWFc%;v4s|i(5uT#qJ?o!zi`(f9a&DDwF*HXHTU{
z12Mo@S+dKpd7-|L3o=0UisT|Kvg@Plq;}5?3=VNep9f_Wk
z(fMO5U8lC#nCXAP!`yX5&ZKlnn|
zcD^cN$Ppolo5ZdaIWP!xgnpTj3>KdewvV3FcP%(pl!Q!GSgh-%2_yxmkl`^7e
z1=gixm3Xu~Riz5LLFV8?yGKiWfo>v;$l0tiU*HsSSL{Y8f4Wz^PwFd+PtOs_C7u%a
zPbwsyceu#zg$p)dtl7&j`yVx`E~~XQoVV-ZsX(o_NKHtXqM|5;^WY>cEp4pwRf?qF
z${s|M*|$LuZpuE6x;cKZ#C_{Q&oc+z?mN4)NyYWROqp^ol$_=Y)}{@g8C&f<*D7fN
zWhcCrIgDiozE<>UA@c+Z@p!}<^DIYy#Vmg)OIRwO<49?yetwQSV2*+6bIg>FS31M5
z$qNL^rdQIErG$!+nzO46r&La`e2=bdlIXb#tF%bTP>oqu8MkzzU#*DTluouhU<0z|
zH0hN4M#&lvl%zrw*OC}r0=bDyj|f8c`+~52y&$X~3@66NtUTSG_D>7iXnwn>Z!E|g
zlqL(qvTYV#+(SM_#xao^pYr0PVvZ&+CTSMevpfwbfri(lBEzJRXQVxQ6w5GN;xoB#
z_h4eWZ`J;BDfI_kH4-0Mmx&I?2RCNIA8qEj)g1rn-Dsw7_SBKiJ?jC=$MD(oOzxblG(;~|E|u@QWqrh&@kQ@_VXTo)GjweB
z)-8xWCGJ^s$v{h2_GcJGmrcv)8k7nv1FNc|-W<21u4G+9roo!^#NGZ(fJQD9=xuDD
zYHQg!-Ri?Gjmu!*+$`dOf=zV|X+e*rXbj+Qz_nELD^w|-+bZ!Ku8mnS$5M{ow<@uE
ze>r9!{BJomH~eHDJmnw4JKx)
zDt>ALcw-(_1Aw+tY_%YKmaln;FAZ@T&DbiPe)Dkmc-Qpm
zv=5wl9t73#vFZNxM#JpxWy>Z4W-HRJRHNyk)e}30k{u0!I^h609Uen*JAFRcwUkK%
z2?`ikOvqnsl_`29;%LaYv6uqiwBBHJS=0-bn4;tL9SxQ?yAwDc{?KDqp$3C~{u)!U
z1L86I7IcJEl`jhR+I6PrrAoNxFET~v8>#?ZyUMh(E;9FwbmD`7)R@W+b7)3kUumtW
zB#a3B9vPRUZz`6Ro{6YJwW)vHZPR#lIuW?I8w60aP*@r*)S99{3VMCOtc3sbLI>ak
zYmbfroD=jbH29m}#mP8jlBfK@>5MNgWU7~TzO^nD8j26BNr#6!&dGjLlr>^8=l<8g
zOxmh3Cs}yiBu;*e#K|XtzIcVCLb6T)RRV{S?MvWO$<~>)O-(R5x6)`Du(A1Iw~dyf
zqT%>JyCC!p$7n?i4L4;rbht%HFtGPPckt62BCJwn@3Zmc!R-#g$MN-u5xPc$b;mX!V2XXFkPO#30n;}X?yv)d=5&hO+AR7
zE3JNeeRG3W$~@`Dr3=(L7@MW{k`80Va+|U!d!-#ip1}KLXb8v2N;6;Zo!&^Ixxr|n
zX~u4OQDO;347$++(%4J>_7qx%~8$$e%sqJgu2
z6=#yW!nSrJj_fWdhYQ&`Qe-Jak#ZjWp>ujNU7+99UVc
z!l1q0z?QJD$E2aPrBwt|WmN`YzD^@wEP{naF>oBsr)2>f;`}BR~V>>DVVsi
zLNruX7_@G|ZU65pl?`vm3k<@KV$Y+P1?|gIjfBn|Jn(X$3e7$w2%q2XLbO@4J)a%E
z4M^4vGtRzZR)D+r27dh;glgTnEFGeE<46nWm4q!^v|+=ABnMByk~JY4wi=}A>hdX;
zVSl%ve^OW`8r&;fn+0KwQ>|BXb@l;RG#E}@?(g(U;I2LrQzW!tRh0p)bf#*gv1m;M(3?%|
zD)peRJJad0`UPRyZ?d$tD;45bb3B9dKwW|#K9W5wni!)y1TT631bbV=t{G!h=nnWE
zk2FGZ*JfU<>k6r#
z@1ggz!}#cHDwUh8$baQac7y&m@?WRP@_DE{<1?S-NDrD>=4#?w;_Ef^U0~sLRr;2W
zq9Y}b!C?cn+?I~XvK5EB%M8&DN1e5p*SLaq$deRxk~vB<1$$JM&nR}$Jw`911P;yJqajFvJo#Fr~+rQkhwTX{9;)WBC3S6Z*?JK5ktxVq^szQMNhQCUan4TVl)sn
z>nO<${Lj;3b)(JwJ6hcnO^WF5wSt;=yVnVVb6jUg2x`@gOM{qIsU>IkL|3O~e6-{2
zzS(QXV|xeI-aHy@n4044`J%c$4c(y9CH4mz&CWwJ@%>BperZKQs{UJzehtv}RD(8C
z1KNDAha#vy9t$};{Y_&bq0=ACZ0L3wTS4u*T&)SUrnhwfG3Jp-Y$nk>+}hKOuA1%`
z+LCOT=or|R@>*emIepph5kLpP?rH7aWp+l^wz{VWR-ZM}3Leu@>696**lDB?%%Q70
zM};$+n@h}x`=p~~zLTzSlIo60r_V@d($L!f5zm^b@RP)oXud-Zbt!Z=+za>{s*F1@
zRrOKr4v2{x^W6;l!EcIIsHJL+5MM4dHymuuuA{e!Ibti8q5Nx
zsEd2NUZ<<^tO59bs~z;VqNSzqb>QWQ)e*Amo0Ii{DM7(B?E6^Q32sgJLkA;Gx{t#*
z-URFIkJ1;JS2dE4oQT!E^Epl884%?Mwu{k}+k4k;OZk(Lt*c!OQ^j@a56-GI%l+Zr
zVB3l)MZZ$E{iyfG&0zQj(#7PsB5SLe@hTEhmMiVp%U21
z63T;)-GW8Ket&Y!_I77$U{*gBh%$rW#D*A;soS@8f5sD!tzBnTsJvZXP)917v0~+X
zS!+`8w|jUkQrm=JhhUC!b`_6=SwYaHyM572pkAxdFbb>C#OvGjMu#xwc4I$#H-P_V
zddSSupC#I2rR1NHh;O;Xa8&HpSgOTdEXl9RHe;6;c4(KjGyu|^hI+=xAicMFy19X#
zlJCN%*uw5?e>9and)#YO;;yZF)(oo!eKI7T4b?@Y1@8V+k?v7na4O~b4`mTJvCiYU
zC9{RRkMcZ-QvcH8E2e#%SDF&CqrBq7BISX!%CT1>z7oa!j}p;)R;AcNcamHXX%~#v
zR){MxDI~82iYI67%}dh7B*|0=F*Hw(Ou5uTKWnL#B-2tNtZ$U6f$IJ?TP10`Gf8*$&nlwQiC%O+ovPCJ
zt-A4C9Y(xsEG((qmv@yx$fNVK4|9B#4dOEBQX+KAz$0pk@yO9Wpg6x!^j>n#Xnuln4jMzhr4_u7?it;;ol?x9fbuVnuuLDpVrjHP@(
zyp~-9eE;b}wB>7s-S0}ta3)Ss$VXh>$!~gB$OpWygUFu!UYeXfuaOtxWvVtuuC)sO
zRcLuUQQ8f;av7lW#eT;($(tZo=YMfuIzjwtRiTnOCDwgqircuVL>&CZ^!<33Hhb{%
zGvJwBFYer4z7qT*=bLzc_OYHp1m1{dFyJt2OIo&&b^58q
z_<_FWjs`0rQ8O|f>scSQ`&2kNUahC;2LV*j=_>%b*Kq6{T|keBv2(b)CAS@Y106C?
z(CsuQMbr_sJ{Q1ualTn20Un1t@%E@>oy7Cm$|?XJtB^E~CK7X{U4?^5WJ1_pl<9N(
ze3juMyYiZSK|P9D?DiC5^dX%J_pgJOw0azfv2303nv`eu=oAh{!_tg6c`zk8{^ChH
z-a~?^y&^`9P(C`tRT2;eq81X%xucf}3c^h9Pa;c$CR=Z`KJ9RGMw<3UrkH__-u9*#z_vo-o%RCn
z@C);fKb*oy-h(FG?zg6TYO)M#p}_{nymCiFRbElszs1=AiY>V}(Y-)-EUU!WqiF48
zSW2qd2p14}A1^?}nrJN6FBII!LahBaJdLd8f{;Nr@<9qTBlPXPS~II&yH?HW6iBQ4^S3VL_!qu)8^C0<
z3c}nMzAz^UJ)!fBYMqm-(-}SV`ZF{-u$!fFfmC}Tr>^0S3
zXDBDwdQk$q8+XyGfL!S(RsrE?0ToG*$cru3RPY_+c#9<8Ti1dfD1kq_yW6ibu8&*p
z{ql!7{uMl%>;w9Gx7N^Kr`^CP(hilH?3a{I2RoXQ~2HRyD_E2@+_O_ld+$=?2r24x1fnM$fvpd%(Mjbf)Mz_bHo!~}f+
zAZsJ%QsiN)=osUu*>&n$xYy^QLhG1+l{cFz2j}MUc2hVnvb4+9$@RFJx4%_ocPp;g
zVn&RBW7-fe*%x4{^g*zdxI%Wv07{oe=!pVA6Y+bR1!1=!SVMwv$~{eP_lE?*&((YR
z4ATbi!NnRg*NJ|UU0G;{5J3+S0wsc=vt4IO{l9L%RUlm#?GkPLAb)xn1zl|-p_`IF
zmGx@)sT8WesvL9ZPuZaYcy;LM>I7pbg9KZeT8cZCit&3fho`)Og`{(;Me&t2;k~3y
zFgrs_+&U@1-=IQVm&dE4IaVW!^1oIA|Dmx#y^1jnI_t&G7eZKrTu}qVsq}@|f3#vk
zApgZvMR1R^NecHk3l=&a)YF^sT^4ux8zpze9m(Re@~(jU@ZH>B#IAsaU54Vb@=glm
zy`+QSDymQgA$wL{13{jB|My}IM4@70${Z%pXyE?mWluj~4pC>lzYp$yNA~n%@btml
zGbmH~H12^3_n#y^Fw33?NT_Ph!yMnQ_B=I0^;doW2=I#ZywvX&_fPhdou^{k-g0kB
zvaLde76Jq4u4+Ae6C-9b>Ees-%3dpW@#TM0*|RsQrVCwry#=b5VDTy$-3b<1jKwcd
z#ivc;)6~y#r&nsOj8{HF{-zKAj(x7cF=AJS%kl515x9E|xhwWbcnjY>{xICVpH!EM
z-DL+!et1dRM50>u#3EYACeZJtM`R^A)dQEVVfJWN);{zWI#Eb9S#IwNZii28IAfhkCshjd9u-R$7
zvDhD$CVgX#Y{YI)^IVdlBZV%$WVPwfD(m7)R-69!Vi#X2%c@s=R*j!+6`v)&^2llc
z9ANHVCaw83WM?r%uYc*7Y|XEs&FG=R-Bq$@^PExbF9?57510L&=vkk@5dGm|Gm9>u
z3cjl-gARiXqTBPG8fh!N8MJGtW~at-8>^yGqwfkmr!?%{r&WUkXZ-)Tdk^?Vs%v3f
zcSgmMY^%+v%}BB&t67$;F86M)>)LDYdMn!t3%d&o8z6)f2%#-C2_+$fl0ayA384lE
zA%ygV@bZ$p^yHBjLI@DjNJ7~0|CSkPM#a1AEC28Ne*CbkyW_d%o_p@Oryu3L3Vw62
zp|LC5ybWg@&e}jt0R&^wx`M!lTYQi@Ka&@Ni_=ls-uw-&dja9El14!>%U4d+en&nL;cu;
z)?+K(Ftq}!SPLlIJFe}YJbWgnn-#t+(}jU=B**%<^k}r;=k3{Xt9{+9@Qq8bSa~zc
zTrOM;+#@6TMombqM!3V((lACx3J9ZVl~k7+-|MQ8UWCy#vODG_@uuDn$1g44F7yH(
z|GMhm;P|IxHw)gaXAUcG7P4DU{*v4*_?G?wyrs!){|x3=A0?2Wu94KG=;@~$;OOIM
zR2ab$(aVsR94Jdf!X&=sHlR_NL`0;gpPTog{7v=OkOiXZUPS+A}(FD^@+IT0(Wn16mGYRlS4CDok;R?|}em9pz})rDzAyyCGTCAtX@3Km%0)4jxd}gusnUChEhU
zz@3eH05pxC_@GPM$$Q6jI=zkt4OdC=8I%oPcsQgZMNuH`7;9|0FxH@EXpO;W0E~5w
z&6#pECN!YI*r?g!%E|&XY&fVRK;d}O3zm<9*KiL&RmhH71|wTG0kd4iFA^3}xH9Co
zPg8?E8uf=8jT#E*KRj(=_@?$t4LXCGQa3%W2++U*9YKxucde_2lOdW~f`0)2Y$?vz
z{ZUJUc~V2sv{u`w+pCDsP@}Mpc3w?O{T_&{P93h%?O{UJ?EyukbYZ_*y?n@;ArW5}
zZdK+(D&rt3WYQNaV;|0jb0TkBn9Nx^B%uC`PYVx{bk?mTB~m$|C~y+7?mFdkrQ7+7
zHTBg*g{B%`Uc~t%Vb%G6k>9T)NMA>z!t13QnN)t1YtJ{yZZWJqtC05mnC$5h@o5^4
z-&phMM`gEU8D{zYh+$TJQ+cD-(94x~DtdokT2oQOw;&T<%Yl
z2Rwj#lp>3ljJMRxtRglp2di*UJ)>xHnb=Xk5h=L6UQbJ4RCFCJ^_au@ceFcjkZhG`b{+EFmdduuFau^*
znw67J${_=;d{QY7ON_g!j5O5Mi8QRpddw<5h70HhB)W(-8L*Flvr#gx`c@DS_
zad~`OJ!fS(j_vw^Q;rO!*YvL4Hy>}NsRqO9gS&HqnT~;VDW@2?c3yFzcio|Zj-rQw
zx07LFBH6z;=Sw&^C%2jBagE323n(|Pp^JF7%!-D*wD|T7M2?ey<*?%fhJX%EI8k8v
zDObZiI7)(VKF}3Hd4B_n?vufUW$JzE{!XoHbecEzFwT9Zog}_tJJ2r{C(as573Iw*
zw`ZM@&o}q?Qhi!2q1!I%(Rz8)#agjXN>h?(-;&euEtQc_iY|{zqW
Xt$ktEjEUIRoDr#e_y6tfDpr{XYkxk|2EiQYEnoo6AQ*WTHXV*`P3njM4&`UQHtC^
zi6YvFMg%QPeUf!LS$C7eZY_ZX4s{+@fV-;6&>e3I*l60&07V)K{91UluonW{0H|L!
z8k-%l#`dHH>yrzVYz@sO@03GL0f2n@8iOHx@ASMc;_*qf2H_pMic*#GPRkLqlQ>3s
zMN!KH*b~qu(202|HRm=~%Uwy6#adH+DCS4GznOK_B3H_%*XoRQ6b2W-JP}zRTcETP
zB-vru_$ZpPD;kKA!%Pg1Jsj6lHa>m;r5(+YYB;=Pb>z#o=ezJ39X`=Bx>DmZ@YryB
zcggx(by{n7Ec@yDOhB?efBJnDr`BHGuZ%zq{sTM-q0ZE}v9XS_GMI7;`5}g_3766)
z-nj_x@R1tO0M+dBUnn)W7g=iS^{B&%OBGr0DAuNc0^p&L|I4{`R}BREG@AbPYkMI1
zm?@-z$7edaFKh|-^uL3pwbpwbl-73bIpM|RKykK9qfSK)3^QV-pxW7LGln`w3+K7D
z&MmBkhL;T5+uU-IibC265zW#jZ^K|`aj;bf1XLcMXVbz{kSXRsoW3K2^D<3OgeXgd
z_3J?B5i=f1-^!@1&FTGU3S+DxXdu6N9zn`d}1+%x$FW*{!$n{B2T(C3WVh
zrwUMTy_97>%dod%^oZHKkQe-yvU%aT7M`n>&3h^Q@vo3VT_lbhat^;No2F3oV`egR
zF00ls!f$cV+&kZicn5GH=7Hm~tu)SwnUnZLIomXk?JSw1Lgbfco8qv2c?_e7H87ZD
zT0`b0h;3Io;f+WrYI8a5LA?=*+*2eV4%-@_G0qeEz2huAg==4tKjrL(%*5MlIbDXjJ1pfKoSruyOVC
z3-C=mSSd>5W<-@TGqsDHDxB>KclQ6MY*#nr+Fug0U7><3Jd3kkjX2x&0SUr!2|~^P
z7KD$#c0wQ?`x`!cMz}K!l=h}p;!H@-6%C!_dyTjtkvA2POV>^@-3kU(AKIz%x*D}$
zM7T=Hp!O5sg}*}muonT3ej`CO(oQ&0ZtwCJ;5s~{pNp-2-HH{v-h4{QRAud46iL4z
zEZnOE@{V#p7g_Tgl5yNc-Hy9<*Q5IrXgvddRe37v_MHI{;WHJfS@X49&miauq!SZBtNWQ0KlZ_G-c_@BTp)505rj9O#67_&((f!O3Jz&K#1wYK-8FB~{scuLMLh3mnv
z#5Kh(GuUe6#CZi3+M`BN>NJw>rs!t^EQX1Wu8o~REjS`vsbAI6v!OGjY+drLrKESH
zEgxM>wG6i*S*j8Kn1*YNAUPohN^GxYTN3e`BNW8(W0)aQ)523%jkVF1b2@rKo?$;f
zjl{L-@1XRK|7iV4)TjmEK%%c@ePK3sFxZS5lw2-0D7j?|$Nia}^xD1WMJ;gkXD$~g
zKeZQf!I)TOrBrhWUaBP-7*b?bR}y+540NedQ4nm)uM61{!TCS}{}P=JBoc)-wgq0v
zT5X#A8V{$z?ft&!M>-SUZ+=t!iBvRX5cZ=Eh{@o?(6eU3c
z{$9CeIMnVmWVmZVjmA&MC)EO>f^PYn#uZ}
z(0K(#$Z9i1>fO@SnWA7wd7V|KhYAOj*VxsSS)tOb@XY%wPdB0Ynp2CX4;0*k_EOD`
zUe7$oZKbMI6UZlrSe*z3#A>s?0uF41l-H+1b==FzH^)hM27ITx#c8tBCK@z*<2CY}
z!E>v;%^F-$MO!PkS&?}SZ%jvp*FlMXnY~8=97?-xX)@uT2P}%6F{t4zBn=z>?DaP`
z1uRkn>g<09JlFuu^89+=Zfi}A3cm@t;4@Sg2KZOHBYokoa2Tw9#N&1kRqo|p4BE}
zEAV!8>hAS
z5AdIM8t9=+-+YqM04Lp`OkadhUxH(`hLHaulrN_!iq(X1He0DShRm=8T$eet{lP@v
zD8qVYJGHt~Q|_*oJ_r~#EX97;)nm2{LbWc&aifg^YBZD{NxHqX`Z+{KDBF(A3va$O
zb+D8*TF${smvZn>EO$Ywa#|w-NWllnI*3$D6pB43P&*WdBau>}!m_d)BWNPULTTJ3
zVHry-A(T&9R7eq0y;^)T%L<`b%D-NXb&FrGi`%Eq?2e>_KVz|C>Aj~owZk^Y)eo(9
zXggYG-WS74M#k;y^!ukf0}doiJloOOoNiJJ4o2$nYkKVWT;U{u%2C7X1<1NK~Z^nh*_xVhH8|DDUk9oK^*2vip4<4
zmC7BscJKkldt+YDCAP`Tp14rVe1WP$iLtmLNQu8jb0}D+jp1m1zFu4Kj=ut=~
z@RL}^;2Mx_cP*621EQ5ME7}P~e+$HFL4;3q#)w8Ksg4kd!v`Pl**Du7YFQPrgAt$q
zD(sdSB`7+0Rfca4xx6hYKL?N*@z}Ngjd3>X35@!hiKE7h*^u924?4`zmSibjp4tLA
z{c36pwdHBiatB$^?Z_4-W}o41l}ZF^b$@t?wE^L5hBnjc#YLN1Yxxc~3Z5rCaDZX1
zSK0%KPYC&KE!Znq@|Z~?rA=-zQG`U;9kuFwU=QxbyhjU$(*x`Ckyru80`D9-eCl9k
zws+yc2vsFZ{d6f4913+942zl2U;-qM-H!OjKetbJuio9C+Dy^!RSI}Aj@E@}iNJPZ
zd`*5u0@r?y+h2#r?dSRZq5=ITmRVDe)fE`_j4E!|D{(tWQ?cbgP+im(m088${yLKU
zE|uwVShBW=B8VNUCm6S-0QQds9G0lnV$ZSqwEKwj-e=yzG3?(quWruyxvV=l&y)D|
z;mq)^ZWmBn7F%Qc3S6`B0GNwOG3>n>YPNszqJAG3coth;UCTSEJ`CI58j#7;@5vUE
zYwQHBxsq#N7pPpym1rpztE1bZg-Zc6&o^9Bx(N*@a1lNe=D0b_=0b~Gx$Zq(PC#3?
z`2uj=P!lcune$drPA7CFwyhCqoUSux~-hkb|;lq?BW+Xo*x)=t&cy^8${$ph{Xl
zPpb9v`wC$P&gF!2jf9>GfGa5a|0uZRKM&++qf3
zushTSp((?8)r7Ap?ec21V5nud)h?Z~v=a^qpZD~K91zAoO0Yv%{|R0O=TJAP8W3JE
zd^#3P!MV!nJ~zZ#9WkHs#M{F}%e*2#e2AH`RR3hvYX%Wnj7uSd0zpshe)lf@a!u
zs|tX2@GEdRbv>$vR4OQvmujMc_OKaMhw5}SwmCTpklIgvkYrpPoC(hIUHI4S;$O28
zO|p<*p^XIXP=D!QT~NvKH&MV36_kRz(eJluTTNO7wkek290I~@Ss9XC@>IMbk6i(>qim+{}hnc??yaLnG#_&w=!R6o`W*s%AQVG9;@O~GLwBwO+Gy>oJ1YF@Q)Gg@E
zfb>Dj;RC>ci|*&R;pi|&IpGiZ8-n8rxZYc+GekJ>;SJ!nWj~Z2K0|z1diL9Rr=^#c
z{~!y**TNsv8Pad!EEuLiaxMZy*TUf3kAPvAG94X2IaaoEyb)rKC6Vs4P;N;(`9Y7K
zqOBIXCzM`jW2po7h)o}9GTAlOVhaPMMhAS`n@~>OO6|gxAu9Wxw97i3P`fJosC-vE
zOQ;X|ar<|J_Bt)GR_c9)s$1*<4?y~YH077NELF8F0w3nOabF^_gVK-z^fVYuentPG
zoL{X$*t?EWgRfDis9KaTOKwV8*dRo}gHX(|xB5Lfw}oZRTBC)wMT4$LqS@xs>Kdrc
z@UR)!R-c76H`t7}ki+HDG~oWvWRKnnIR&bnp^Sa6-MlKeQn#(+^rQMAJOLL`|AKqi
zi8^GKROBU>EZkHIeu|D*#B+2~WMUDRJK(_qlvbzH(R4?LL2sZatw!5{hUtn?nx;0C
zfA1*&r4~P;t{A1UZ1^C=#Z#C!TVz~3Qex+aM0UPc$<}YcKT(bhcv*M}avGg#$s8GZdsI$kBAF!^d#u@3CLPk#CUGM*9QA
zR=*(3K)L%Na@oRI8
z3!i|`b#jgHImT+V=n*{U;@Pi<5Uy9?=bdn5Qx(Q0%2#H*l$i{Ue^@UAeT
z^GCBOF$Aud(XpvgKwL5NGquJD?~n7;lv=HYzrcH>S&!}!=gwv|MdKR?bL5IHpoB7U}=4yFh}q%4a)XU+R;^L
zM7=~T2g@mN-tvo79{J_yngxB!#n6g{;flIq!{o~_Z_|VCR}>Q?zjKX{Dn7N`wR|1K
zEM((Bw#ts(2hLF1tWydDb(>1|20P@3wWP;BAUt0wG`1;4#T3H9`OAyTaHWu9&zE+8
zdC&4jG(v3;=jW*KS$KZtxmU<-
zC5)(k1#x>VI{Tqg)o`ihjj)e2w)s4%0RAHBT=PD$X$?G~|E9WoIS-D?|GF5G{`%P8
zfVoKn%pd{(Tn#M$g6f1D^$$bzQ+g=tNIU@Xdir?0{?3zO_4w?+1<(E?5O41$c!S97
z0>4{vk3jUedj#L}NANQ+P2GUGW+~#dBrV3(Mw&K&PVzw=H30P6P2>Y=j8}rUz;~!e
z;9vXky-@XrNR8NK#qB?$m|?a~V>{|T#mw_{d)h58FCW8sF+=c7Ua;J_e4klMkzCss
zR6hpi0F*(3v+9@Mz?r9m@VQCh7t3FP&mG0ju{hR^j32|}SE)qb7}S~Z_;M>AzXp%<
zV#RSZuEyinXAwc>Gp8em?HE@Q67~z56v49Q_QIcuAH|
z7E)I$q)xw1W)l!2#BB1a|8$TB_X}?n<~Z&~j`KZu9>;zADQH1`Ip`9Lc#3@&qRf<#-w$j{wp%PSz9Kl%CLAdf
zETgNt?;5)UQF9R+5Od&|1xkRBo}W7+-)`XvC}3S+vkMt;nZ~($x5sn!)t%t{O$IGori(cV1?1FVO<}Crne=H9-0J
zqc$Dj@{l_>=`|XC6Xam+E~}2>z||b*PVfxVOw$hV3n8Fw&}$pC4E!CA*zHzI2#DFP
z*bl8mP(WD3>g9-Nt5Uf|9EC`w>l5sSyF#zq8ZB)R^`UN!ZMe>VC$3Xc?l#8egC!}t
zqO(wSm~OV*a3KhsfrXT}JJOL!ZtDz96sKF>0WTLb&!640r#Cj19ZjAMIm7F2_br*p
zIN#S^1b62BsE@)$8;9aubD1z|UB>nfwRg{_TQ_37T<~VDCE6Rod^v*o@(`}dilHd=
z>p{WTk@C$xKp}s40Uu^v5aEdsS%z{$1UEhWwAt;x&<(hOJMSEFxh`}!dY^o_iEm&I
zy4{JJKayZ{fIrAlai|Zx{+5Gb96$as{Mo3d-g+HsO^}$Ldk#?*gvbUVnu0i-zz_w+
z?5dJmHG*C90kPDJ2n0St4w1TxSvzjQV<~1xjcZ8eQ(VB~^`zpi04nGLc)xw2OQ-b&
z>>9vNCEGI&hphqdYaLKqak}DRjWz+M;lZ|0_xGhcY%SCd)^2BafYo|qa^TY@injmz
zU_JxDItVihXk!B-+y|l>U1#49;0ngEEQND8LTpwNFi`=ZvY1jPj9~eJtkkux)J_AO
z_CBH*f6qRW40gwdQkS|l`FPI$J>>IJgZC|E0yDYQsk6KNy@?N;B4$KhasNoRXDJ;z
z*Xfz=Ox}M58Qpn`VQtsYk?!c$;?S1iOt}Whx6NVIY0LXdvLiVucvQ8&Bq8FwU+PpS
z2~PeV)q5f}VXj*iz^l{|G`jo`IC`I0g
z2a!=4Q0s=1QP39d>uYV)`1(9;XSj7%$_g5FLA#^P>*2gz!XAD&32CkmLhi@eODaVB
zbO~ya!{M6hVo7oQJLPv+9vXrN_8$0u-y@AqnuDAzf9tKCPT)GkgR2n{|PZc
zw1z-Alr@4^L-ICAW~+l_Hj98`(FvVWMpq6fL^+ehron<&wdlIkb~$~)wF#bf+T*KZ
zt?35++#)g#nrU-~H`|~qh8P2*ZLr%L-N0oZHmf-X-oLUfK0uiH{Zm?OPYH9UyPBooqvfF7J)Pn)k-NwNSkeX4}
zU%AkF$v2Iu7_)OpJV5kYHZ9+TB>JsSE!msXu9p3wFc*M|ulhYuEeO1)d3Bq6$Q`G$
zINIkkbAz$2e!s=Ww0Cscnzewn4TR&=U?hFk+CT(H!;j+_{W!`MJAuG=RtzM3v~IjR
zN_PN1sU6|oE==Hxvxk@e2)Wy7P}}lgE~2nTVryF|2(8?%)C0h8XF3MAjEw>pUe7Xi60x|6vO!FtymCc!BI34+
zoERCuzmr^kIbLhu>hPr2t(o$A4+q`usre0K<~zu3Mzuxxz4_pKS!eq&
z|1dhJSNgRycs%KDCIW-{Lyb*CF2iXZesUmNEgZ`joAbfkHCeqT)HUyEL}%CAXSOwp
z-QGxkMvd%@N-YKHDYER0^@{#(%CwA_vY8vi*n$|*9xBz^SLPH|Wf&a;!!AP(4h%
z1gZ91p7#eh9GUt6Ir-8j$gN~O0P-54@753b8+b2c9h2AV9%X`sRoe|vMjbv)I-lnK9-P)B-_!_9R$9ENyoPK+y
znflo8qQW1tewuQ7>?woc*LDWpNNXUsIEJfnx=>9hVyq+yK4LZp$@>8|mQW{Ym>r1A
z?yjJy`(W9m+$#$7h#5c|%Sl1ed|!}OhZFu(gF8TIpn3$nQ}~RO7gS0VqFO%XgU@w+
zWFX8_cM)>Ct32{4Jc2OigExB&=Z_G%(?R44_?z4)jI!p5re-UaF_^gXgE^#t&0P2X
z7{VN%zwxGMlR?7|e(XvKmBOC{)Y~1X{vBN$0%%4i2;q;vv11u70B27?d=|tQXVfT&
z)e@z#5@)jQl;v21p0=#ZxWuU)iEdvsMo2xUZO
z=WPYHCFS&WxS-Ch<$`8rHlo)%iZ-4<=%ToEx78NVHdvcIEjDKp4V-R|x7F0zok7w)
z4?fB)ZW}DDW(@GJ4W@R3X54J=>fgE;WtjO>Iuiw`$m?5dZC9A7W{SEZ&bqx#TML^O
zpxh7jv`tuh>p@!Kb3dxk-tegKBci>P>R@55@J*x@J}i3{>wm(lrDrj|$fyd9ei7U8
z&Rl*4yaJ^UBb0J-IPRpRH|w;Fqn2+HjRZ;R9=@l7w_SPDn1gq(ZEI?xs1JV9sUB+Y
zGM|^_1~UuH`lRpat8BxbpncBQcoVp6bd9UwpnpEl8klXiEGB&)T)q8c8^(Jh#RJ#A
zGs*V5TSn2|4vP|HKZZySLP3-$OBK~3WqS`AFCBCogXXY*;c`MTx3xCWnyF+Tk~E>%
zxi#<7`^mqwJG7d>ULtoM@&N#JU^gMgprPplqj4yEP9afrOM5qoe|0&pgYxG_D29GU
zqc-D8v>}vth;thkMWTp9Ea868$O6x6XhqIB9T}MTQe=KTkM=$r_byp
zOvDyxOBZ5H;QfdteDj;V-pCtvMtGsk=0;qFa0|#zJV1EJ>cd@j4pM8Wj2IDEPQya6
zSV)O3$rr(r8H8GU(W}$GEv~KW?2S+8I~o~p%kE(Cj7Iu{QR|JHFS(L3+%~*51KT#uTqm{uE%1f^*^q_${T%6rSu#GR`vx++91oOz(yJ&FXhe?gWoUx2DE(ZYOJJ?X4TFG##a!X0FxZ@vgSmJ~SMW
zd1r9d1S!F^hR;ZJ(PY3jmbp%Bgo<1<W})$3xw45gjKZ{<#;e=Sv~#WjB0OO`r>_nbJFGEoK0A<=qqO+`qE9UxHd^d6};tmcEPXz8F#qq$Mgn)dUj`)5KH
zVnu@!XNSD-;MSD>5=fZZ>rO%5z<8HXyp!3M&!JNC}a74-Viy}PHPQF<`ly{R_?nvqr3
zxns0@MyJC`5v%9+EUuj}8m7kNc@tWOMfH72UsbqE1z9cNY^nY)`Tj+0m)lYrU5hPn
z=&1y@k)g6?6OhVsxLOQbW$U+;S0_s|k~ewL$?VK)qkH<=#&e@*yWO@U1&giK!`hja
z25nRWoIL+`o_BUn$K8GL0%drLSd$ULh2gwK%d?z==WQ+{?Nh74<46Sk?VI_Q2(~d(
zxNh_W_Dl`efHQw$^}6MtPNxZ|7rEW8$6P$Wh37f9+r63R;aB|W9I1l!w^jbZGK}z?
zsAy^go|7(;Rjeo#5Fs(b@W|*`U5zs%x;P^FAHlP5g}=c?j!5Bj|434HUTgp#7^(@L
zg*B}EPJBXcS!)0uP<31&)*$boa`2pFkx#4YoYZpYX=Ls^$ii(^N9f~IJby1aLih6g
z6rcjczbE|cJ)`}BPPcnQ;o8>j@7F$94ExM8=;sdtV*`5`_Q4Ue1w5cUXvo`zZN~`e
zQPkP6-qu<`Jx?!9f}qMlQQ*Pjxqd%)mQKSq7|ue`Q95wG@aNGo%)*VJX-nA|Og*)`
zL8GkP_aUBdyZ73p
z+kK|nZ5AG?6_$!|`#6YT_?7`cpZ``XQZ>8$S?s$?p!#=~AR#`K@m#_kxzr^eUkTDX
zA+8|xUFoJU_8v$*0Kd7C@CQO%4EzVAItDO;k7efPF$LOCvSGQBYnIe-g?NHIi1K28
zT${{7P&4L05rYA`?&)aiP4=MZ3w*gfhAPKAKOAl)e@uLmQ0z5dBmsLZ~bja$6eJQ$9U>O|u(9zCkKE51@0htab9eyRZ9;Y05%rX;4AmFy9+o3IZMR(gfa
zplD`E*(Dk2(bf!Hd03rVUngb=~w>qS@R4S3s!0$8o8FOm)?1aObM9
zUZZnEv8%dTI;Vk@?N@XKM@6Sqq9-^^Vo^?pLxG2cKUOd#Q$;Mwiabc|B%T6(FJg!?;wcE7
z=&e`(cB^%dK^?wX^yL4yMnepfXo!W?BpPB+iiQ{@(GaVpXo!Wk9Swo{OhAZJ7)Lz>
zNAR8qlN`2KjbrFnmg~YTguz?FUMPzuc^+;Z5>?#ptKruv#?HXo6_*I}NuNhaY}}-{
z6M2+fuEn}=?MjNp+Q&W%9*WIrwdY4I;_;s0LZb*`^VV%fEra?~6-?+QPB>p$Og%Q2-D4_X`*m$(XciY@t?Q
z0^&doF+E3cPz%%9mA+xTQ{iL(fQyBbZ-O89xKIbN^5+!8R-<3O4HWL%l)&;$6l;mN
zH&P{463857f*fSn7vc5#{yn{I{G}QrIrGH
zGY=VTxVE4KAMyt*Qw}Nv&u$oDqcl?_TSM}bgw4;BIqv-wnO%5=NPItloE-$jcgK`d
zs+8I}j$zIEOL78|=5msh;ILQpE08)Cye9k!a)IXY&Z%_;KNXEm?cO`uW2ENh_U@Ps
zGlqs$>l+%j4tE1H%V>8E!S@B7P*mVNV^jSbnwu8)%&lG(G+TjTtp-dDt%a+nAw=sS
zL~#^fZ7Y-`#6{Cy{rF0Srwj^m_ksDs?7KRHv(EJ3xm`hO3KHaco@e0)q*EvG?Mb@F
z+xm8Nc&43x&~@cx=ABdfZ(Oj4-Z8ODuCV^%VE@`{#@qG{EZsa}K_OBo8;|P1+!guv
z^Cf?cBd8P?%YE!CLux-V-0m4p51e)JaJIGB1*vCs8|yndlpXxLEC#go#gw5f3dwFB+}#0uhV*s7RdfD8>8P_*K^*Oio0rQHadG}tq#$~^a6F){
zG79oPuemJl&SzaAR2;u|v2A;%1>P#$+KC$}+Ri+-E+3Vu>QfE6zEEFJqjt7$@wDMQ
zP+Qg(M(*mJ<{e?T`+Fmqp;AeGWK})@;duqzuJS^To{{3oOFmmDgENvvSFBG_Rh{CV
zkkj?V>3oB~(X^;tvam0^fK{!Y*?P`mgW-&ur}flc*0~kej~=nwvu-`@9@lEOkg|Bs
zPWEbm@IY4IIMRgTGtPq0yeQTuB}T#;f&qAuWqvH{LplrKf!-{0cv7n3@)fvp@d;@&
zMMekN=Y4uDei_FF;HC;Y81{bSGmplMO;!*hF7AurERb_v9CMk$T&eFB-sK5=H=_D_
zvvAgR$d6vuQ)DZsrKJ`fO~do_dhi)aG2lPXR*$OAC^pU3jD9Xh+|{d4G5^O9%sB6i>z_
z`hy6h$n4amaQ5kwo1ddkiRY=1l
z%p5Ot`=p~P;^0xr*yoDCeIIgAE>JA56wC?V;-a)M;lUBqIiz#I`B0bZY>ioT!ALd7
z=>ZOK>*-`NRQj~x-M;teq8tYWevg~ucAhJbyZFaH%8ck$kqUhh71mAW$k#~#5vlNf
z9M{%{KdPzl#v9A4z2=(own{!n%%2u8e?qW0>&KZ?D`8u}?J_$1>u~~2Q0@VVYJ)Q_
zmhAHm{C%86!Y?m_KZ*5bq^hIJS+V507hGv)E=3i*p_F_XV+Xe*-Ya0b0rQXtm-__W
zE_Mi_m;VmGZ>RboEn%y=rc$Bm0b&G!Oq(Lg0$nOkgM5C$(%lA}w#<-JqY(hQOlm>49X=QYI)x72_3b#@NZjTg!>-v!1wa^|Ejl+#<2643Ii@cjALR
zN6IftpBEF|YCHV#CY&XMDAMl35>Z{cB+{MC>F`zUn5U;zO^XwWAEBX5ycDL?#$T@x>FaC*xH2kpllIyw3B$Y*-yHE_FC4+Qu;UzHO+JRNvZtbM0mdb&@);JI_DH
zGTRf*q@6U2YC^4~&KO7*y*AuRYE@W8Ek6q(`7nf}4Ov-=E4cqE%J4{d<8Q4F}>2ABfN
zY=a-4m@rTf*;o&vwn9B9zLF*ssjeJSsT&fScDox9{x1j>W#EZGCozv7w%2nSD981{o$F+Z1!D%9jO5xk(&t%1Zi5
zEvXVk1IPu?AT5dk0eItV--4*OwE~zFT92Tq+st7q24LTZAAK22%Zj^
zP#S4sX0;G9)HJRaS1uf`0oe&g0LVeyx|@J_2hX=W>&HqVRQ`}I=zq2aiZ2k%tpv;k
z8JIWUTxJ4CkIF$5V|F6&{EXs!qqlKLq*wt*nJ=J|2D(=~CXMi9p?^h^3_Mfdl=?>m
zohR&;#YYM4G|4dA3h&eIx1q6A2L!C3!+cJ0lxk=+;9TW-k|KMy65s#HXo1B_-~T6Z
z1e9F;dtIRrbRf^a&M12RS5W(Yu5kNH@-#JV4pZxJzw9l{y=a-xZ!W-x+x6l{5)j=P)fp^h@>OY>;3=~mf)<&+Sp4CqKHvj
ziRnl@Cs-=-F7pG3p-ZLk*1G5Clbzk$&-6x_CLMS7?sn&MZufJ;xzR$0#fd|ivK@?b
z?`ZdEg;BDr@w8P^*wR_sa${PCg^%TvX5L^k#0rg?rRg1BxpflJB=K+OR5%0O)&Wp>
zxWfb#N#>Ci9oyMr@UMqxz<@9d)Q9FmK~}55e(b@PqPNP8y*9e_KSA$Lnk<&4pG30h
zbxw|9?;31z$$i(i54qYOSE*IB=zA|hiDL-G(*P!W9I$G*=o}_067*nDg9uo#8_b7e
z_9_qqE?Wto;C2?!;P)F7!5N+I-H#!d`>04){}Cmy`5h8A&5hs-4?OVjQc|sMd0Zvt
z!;V4Nd!aN^AT9|pD^`&bTa^!6nGOqvK0Xa4_zfKcII9`(`>%|fNdoNItRs%{UoS@a
zuc?O`KldfOg}VRTZl8J^%6r{rJU7vGBg%UH!Nn~a3M`efUePTi#$cPZ)KmBt68(_G
z!fLCIN(+>^sH6!fqPy;t`BKDU;J@SfE3V?Wt3)3L_|U476XCQdRyF3LXO?{zl3d+@
zZM>4?9I2eNmJ*UjMe4pMiSk&uc7_sWb3!R~!;u)4t1piu`j1CD%X0TyQ3(rwg;-#a
zj0;Hy8;{WP^)N}{mA_O3bH-InC!xo{q*qO!db
zOsPm!RT_;lXAeXB@W5!Qe|0Greby?8Mb<@txB*#W=B*VRL5n
zQYJW<>{-l&tRn>QQwPZB7{C3W*r=dqnT5F~HL*05K1FoAc_`&
z%X3^_ifaYeMTMvFdk3TM6eE_(z5-;;D!oPuEM}DSgNgVFED%Hac(u*8S_Hh!W&{59
zEQ9Pz>!Z)3NuH0Ad+!s-?@hW**9)p*OI>R!i+3T?d90h~KPn5)y?;+%Td$&~S6{pU
zf^RC~bcfozPoGK1Dt+xij(E7*iGtQ;NV!$%bmePEQ);yCI<_y$4Q!s7JDxy?@4_hENX^NhW%_ARFf)xnlUY&3y*
zXp1-+ZC6D!n)pkprkB((B^O6m<$pa;Ei=}w1qn{q8n7}NgU24yf+Vvce=@Oa>ryS0
z4`ei&cC*H+Z!*&wvxBBx!}|Ucj%eElv4H$nyHzSpcxA5?T;2)#w^l$Qu+HYIombpS
z4zKBsff^VyX*+6qv{rJ1jfS1I@P+Wu3aL9UM$%;K9Mcs8)W8dijC~SCo~;xrjmZ>+
zpuJWrJPrAiARIR0=_$cMbTD=WWet3DlCi%7DPL7;nRqa6_@Y7)Lo3En;#uVFuvJL3
zh-s&E_1B)oN`@Q);awxF1%=)f51Gu-Jgvk*XY>vmMuHEdqZh|e;AmfiZW8JY0LT%s
zgX4NWCgn#*EJR+q;CFfl}q-6(SPZ+V{2i@W|*RF#<(haQ=}N=-U8TOZzbo&mOT+H;OPyI)L#598J=}e-E6dZd!tPSgR9G1e6800O!{dkBoBu6S9J#`L&FFzakaB
zlo^jKCF1OI@2KQ873=VwPFAlpvYx>5i9cv)ml%gybN#Q_8A-;jT)*g%L;3$pWc?Ko
z93KG$g7#fi#Q;iQe{E-Q-(I#F17!Z?KSNn}H-)omDzvV8VYw^Hnc*PVA|m8DS-kE7
zq=PM6GG3*?S@1&Alw@EE^lBdlqrmB1MMYs&Zqan9ZQ9q>j4qtc5FpD?&C-&5C}4$^y9cz@OAL
zorS#zrwriUg6jUZ?7nQvWNPT(YC}V_8pPWQRlu9Te2>zZ00pdV*}#MWrOSIfrW%k>
zK+a>vSuaY?Q(aQe0=~l7Us0CSBWy)pR8K$!4OQna9|XU^Ud-BW6$f<|a0O$B*F^FN
zJOjJ!%#o=0M#Pve21xq?kVXBkRO$mN?{XKe0uzC|SicC2qAxpeJz7-|=AjJFU(IpZ
zAh=mx8AjOiF46xkttEwhi8)m6vd$XlDm@;!wsPFoswI7P56A5h*Zae$Vr9Z#qMw$c
zYQ4fA@Cws#g_YI;B^VWJM)o)`EG`TRb8~lAE&GmnjthPT&GeNhI9svut56q+D5SJh
zjXO4?C<;-h!5+HwsT7uk`|teZAimfwPd;eEHHG3gevgkc!E`4+h94{)6Ru}|pm)X7UOPhntmpLk4!;ri9A4W9&Z%@0!;j3@EZcj_Wb9ij;(8Lw$R81ga$rwI)DOZ1Jn0A*eaM=+LW~hotdZ^$
zu7w_Cv;@6+ms|=b(v>{|e!C3LacCnO~%(ZN0`-oP_5Zfh^}#Z+6#L-
zTv44)XQC-L&&Dldp`k=u~(I_J}*MMX>|6a?zl-yAO3_ywcA6S`YDk!n@O!byUiI
z<-HOffV<#4u?>q@n<~XYynlPd{oAD2KU@7x!lv!Ids}Dq@{RpfgSqDZS?g{%oTU;8
z(q;>9f$E*DMF4tjW99lQt8SD$*gsdz;hOh#Z1pGP$*z&29jO!Hj#9UkM*aFOZ-p~p
zs%E3Bs&wv^oCEh($HG%2uY;Oaty3NRpUUj07w!LF$oP1^7B=2a8VEIAjSOs2z7gw8
zBVxs;dj7B49^5LM+IOeVDf%jO?AFx#>KL2B;6$uY;UJs!o2#tO*y212{zC5fqHZN4
z^UAh?FM&$a^P|C{)CKfLGTM@d!Txz
zH_CAAtIF2)-Bm_7Y=eSOAsbw6s8$N7kq4xKZz!RvZIFW^^ace?FH~9Puq1sDOGK!*
zFO-o_RDLF4>WCCSt)DoKVDxTaXQH5vBn_pMbFmg7m#0ruhL!@9kn{~cyn-YRKepPL
zSY1h)VNolRQvH#io5RS8Z`M-lREMQpLuw-&9VMf>S4+=+QF<0tO)5RxBR#7+P5UD_
zietku*S`!~s2br@!`MP~x2%p9nm0;jcHo@n@0Fi9g;bjqBVc6OE?fOICh-sQBA5gs`meP
z=C2-)T23av)l`Q}PA=~ijMgQX{}<{M{okIIELDShKm6=D$!c(s
zZ<%ORic<%FBv74HoVp0r@xs&pmB6$@T>2Ua5b95c@$^L%(lZuM5>v-xW5>nd8}&HW
z$~e7YgtQP$jFs(6fK%>^>5
z`jM>foJr-ZRaYNKCYQ2MChz|RQVlbOu}%FM4Y*aPI#?Dp^I3iqS81Lxb&=ph`^#AULly@ZF8C^*F
zhGS)XVEIplD%$GO+~V+#onxRSe%JxI>g&fdgK
zVX_NN-L*4m9d0XpUW}8c#;H-#sWqfo9_
z^nB0!nM1KD{+jWQzD>E{SV!OHT#x`^1K-#*(>;G$e{xgz&}YHFY|Qva61^KTfsuri
zXR$`YLxnjfr_93<@lZw%wT9aWSN;gco!%cStWCSz7!AS6+{B?C??&!kM#REGs%1Kq
zAz0Yk)3!a`{drQy{&nmxP2v2*5ingfiLh`FQoQgEviDG%*#q}}B0o{43UHJM
z*D+rrTTdq5(;MHB?gpz7NV_4=2rR!r6{um{`y)-HB{|+{e}F{mAqSB?>(4NBp~o
z@y>EkyJN!rYxE+ur{ONgNOgV%MY9&13hA$+eJU*{
z>i2M*P#^@qrz;ZVpdi4oX+qOdkPM{u*}_Cxs?)TV8c=oOh$AF&GVqjQ3CI!DxC&zz%)Tvvt(m=n;M~
z$TnKzZQQ&Xt|5mr)UuF1I^-QPAiM~+s(c<@UO^qb{5DLI97Q+JXS#0O&hz&{GTp|1
z@+Np52_I>8UPGzP
zv+1r7j$%S}PN)pZJ*io{0_UFigdS27_Eq=+%x&;ZzrviiB~Sdas^!1noPsVTPHSa9
zmvCFf8mM`Wn}~MqOxX^Jyw{B)f;i_5e5`A2z|e{YAqV*Kk-TS1aO^9>{pB_7{{3tq
zyWr@023bXERdV@H@V4t!>2aT22$Knr*5FjBg{x7>y5;n3>a;UjeT|T{