Replacing the PDF Engine with a slightly modified TCPDF
authorJoe Hunt <joe.hunt.consulting@gmail.com>
Tue, 19 Aug 2008 10:26:45 +0000 (10:26 +0000)
committerJoe Hunt <joe.hunt.consulting@gmail.com>
Tue, 19 Aug 2008 10:26:45 +0000 (10:26 +0000)
18 files changed:
CHANGELOG.txt
reporting/fonts/Helvetica-Bold.afm [deleted file]
reporting/fonts/Helvetica-BoldOblique.afm [deleted file]
reporting/fonts/Helvetica-Oblique.afm [deleted file]
reporting/fonts/Helvetica.afm [deleted file]
reporting/fonts/helvetica.php [new file with mode: 0644]
reporting/fonts/helveticab.php [new file with mode: 0644]
reporting/fonts/helveticabi.php [new file with mode: 0644]
reporting/fonts/helveticai.php [new file with mode: 0644]
reporting/fonts/iqraa.afm [deleted file]
reporting/fonts/iqraa.ttf [deleted file]
reporting/includes/barcodes.php [new file with mode: 0644]
reporting/includes/class.pdf.inc
reporting/includes/html_entity_decode_php4.php [new file with mode: 0644]
reporting/includes/htmlcolors.php [new file with mode: 0644]
reporting/includes/pdf_report.inc
reporting/includes/tcpdf.php [new file with mode: 0644]
reporting/includes/unicode_data2.php [new file with mode: 0644]

index 6f47bdbc70cba12cc3bc3977a15134174149e08f..d205269de5fd8eb616c254213968576ddda03f43 100644 (file)
@@ -19,6 +19,18 @@ Legend:
 ! -> Note
 $ -> Affected files
 
+19-Aug-2008 Joe Hunt
+! Replacing the PDF Engine with a slightly modified TCPDF
+$ /reporting/fonts/helvetica*.php (new php files)
+  /reporting/fonts/*.atm files removed
+  /reporting/includes/pdf_report.inc (changed)
+  /reporting/includes/class.pdf.inc (changed)
+  /reporting/includes/barcodes.php (new file)
+  /reporting/includes/htmlcolors.php (new file)
+  /reporting/includes/html_entity_decode_php4.php (new file)
+  /reporting/includes/tcpdf.php (new file, the PDF engine)
+  /reporting/includes/unicode_data2.php (new file, reduced unicode_data.php)
+  
 18-Aug-2008 Joe Hunt
 # Bug [0000038] Voiding a cost update doesn't void even if it says so. There will now be an error msg saying
   that this can not be done. 
diff --git a/reporting/fonts/Helvetica-Bold.afm b/reporting/fonts/Helvetica-Bold.afm
deleted file mode 100644 (file)
index 837c594..0000000
+++ /dev/null
@@ -1,2827 +0,0 @@
-StartFontMetrics 4.1
-Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
-Comment Creation Date: Thu May  1 12:43:52 1997
-Comment UniqueID 43052
-Comment VMusage 37169 48194
-FontName Helvetica-Bold
-FullName Helvetica Bold
-FamilyName Helvetica
-Weight Bold
-ItalicAngle 0
-IsFixedPitch false
-CharacterSet ExtendedRoman
-FontBBox -170 -228 1003 962 
-UnderlinePosition -100
-UnderlineThickness 50
-Version 002.000
-Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
-EncodingScheme AdobeStandardEncoding
-CapHeight 718
-XHeight 532
-Ascender 718
-Descender -207
-StdHW 118
-StdVW 140
-StartCharMetrics 315
-C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 333 ; N exclam ; B 90 0 244 718 ;
-C 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ;
-C 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ;
-C 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ;
-C 37 ; WX 889 ; N percent ; B 28 -19 861 710 ;
-C 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ;
-C 39 ; WX 278 ; N quoteright ; B 69 445 209 718 ;
-C 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ;
-C 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ;
-C 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ;
-C 43 ; WX 584 ; N plus ; B 40 0 544 506 ;
-C 44 ; WX 278 ; N comma ; B 64 -168 214 146 ;
-C 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ;
-C 46 ; WX 278 ; N period ; B 64 0 214 146 ;
-C 47 ; WX 278 ; N slash ; B -33 -19 311 737 ;
-C 48 ; WX 556 ; N zero ; B 32 -19 524 710 ;
-C 49 ; WX 556 ; N one ; B 69 0 378 710 ;
-C 50 ; WX 556 ; N two ; B 26 0 511 710 ;
-C 51 ; WX 556 ; N three ; B 27 -19 516 710 ;
-C 52 ; WX 556 ; N four ; B 27 0 526 710 ;
-C 53 ; WX 556 ; N five ; B 27 -19 516 698 ;
-C 54 ; WX 556 ; N six ; B 31 -19 520 710 ;
-C 55 ; WX 556 ; N seven ; B 25 0 528 698 ;
-C 56 ; WX 556 ; N eight ; B 32 -19 524 710 ;
-C 57 ; WX 556 ; N nine ; B 30 -19 522 710 ;
-C 58 ; WX 333 ; N colon ; B 92 0 242 512 ;
-C 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ;
-C 60 ; WX 584 ; N less ; B 38 -8 546 514 ;
-C 61 ; WX 584 ; N equal ; B 40 87 544 419 ;
-C 62 ; WX 584 ; N greater ; B 38 -8 546 514 ;
-C 63 ; WX 611 ; N question ; B 60 0 556 727 ;
-C 64 ; WX 975 ; N at ; B 118 -19 856 737 ;
-C 65 ; WX 722 ; N A ; B 20 0 702 718 ;
-C 66 ; WX 722 ; N B ; B 76 0 669 718 ;
-C 67 ; WX 722 ; N C ; B 44 -19 684 737 ;
-C 68 ; WX 722 ; N D ; B 76 0 685 718 ;
-C 69 ; WX 667 ; N E ; B 76 0 621 718 ;
-C 70 ; WX 611 ; N F ; B 76 0 587 718 ;
-C 71 ; WX 778 ; N G ; B 44 -19 713 737 ;
-C 72 ; WX 722 ; N H ; B 71 0 651 718 ;
-C 73 ; WX 278 ; N I ; B 64 0 214 718 ;
-C 74 ; WX 556 ; N J ; B 22 -18 484 718 ;
-C 75 ; WX 722 ; N K ; B 87 0 722 718 ;
-C 76 ; WX 611 ; N L ; B 76 0 583 718 ;
-C 77 ; WX 833 ; N M ; B 69 0 765 718 ;
-C 78 ; WX 722 ; N N ; B 69 0 654 718 ;
-C 79 ; WX 778 ; N O ; B 44 -19 734 737 ;
-C 80 ; WX 667 ; N P ; B 76 0 627 718 ;
-C 81 ; WX 778 ; N Q ; B 44 -52 737 737 ;
-C 82 ; WX 722 ; N R ; B 76 0 677 718 ;
-C 83 ; WX 667 ; N S ; B 39 -19 629 737 ;
-C 84 ; WX 611 ; N T ; B 14 0 598 718 ;
-C 85 ; WX 722 ; N U ; B 72 -19 651 718 ;
-C 86 ; WX 667 ; N V ; B 19 0 648 718 ;
-C 87 ; WX 944 ; N W ; B 16 0 929 718 ;
-C 88 ; WX 667 ; N X ; B 14 0 653 718 ;
-C 89 ; WX 667 ; N Y ; B 15 0 653 718 ;
-C 90 ; WX 611 ; N Z ; B 25 0 586 718 ;
-C 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ;
-C 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ;
-C 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ;
-C 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ;
-C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;
-C 96 ; WX 278 ; N quoteleft ; B 69 454 209 727 ;
-C 97 ; WX 556 ; N a ; B 29 -14 527 546 ;
-C 98 ; WX 611 ; N b ; B 61 -14 578 718 ;
-C 99 ; WX 556 ; N c ; B 34 -14 524 546 ;
-C 100 ; WX 611 ; N d ; B 34 -14 551 718 ;
-C 101 ; WX 556 ; N e ; B 23 -14 528 546 ;
-C 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ;
-C 103 ; WX 611 ; N g ; B 40 -217 553 546 ;
-C 104 ; WX 611 ; N h ; B 65 0 546 718 ;
-C 105 ; WX 278 ; N i ; B 69 0 209 725 ;
-C 106 ; WX 278 ; N j ; B 3 -214 209 725 ;
-C 107 ; WX 556 ; N k ; B 69 0 562 718 ;
-C 108 ; WX 278 ; N l ; B 69 0 209 718 ;
-C 109 ; WX 889 ; N m ; B 64 0 826 546 ;
-C 110 ; WX 611 ; N n ; B 65 0 546 546 ;
-C 111 ; WX 611 ; N o ; B 34 -14 578 546 ;
-C 112 ; WX 611 ; N p ; B 62 -207 578 546 ;
-C 113 ; WX 611 ; N q ; B 34 -207 552 546 ;
-C 114 ; WX 389 ; N r ; B 64 0 373 546 ;
-C 115 ; WX 556 ; N s ; B 30 -14 519 546 ;
-C 116 ; WX 333 ; N t ; B 10 -6 309 676 ;
-C 117 ; WX 611 ; N u ; B 66 -14 545 532 ;
-C 118 ; WX 556 ; N v ; B 13 0 543 532 ;
-C 119 ; WX 778 ; N w ; B 10 0 769 532 ;
-C 120 ; WX 556 ; N x ; B 15 0 541 532 ;
-C 121 ; WX 556 ; N y ; B 10 -214 539 532 ;
-C 122 ; WX 500 ; N z ; B 20 0 480 532 ;
-C 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ;
-C 124 ; WX 280 ; N bar ; B 84 -225 196 775 ;
-C 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ;
-C 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ;
-C 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ;
-C 162 ; WX 556 ; N cent ; B 34 -118 524 628 ;
-C 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ;
-C 164 ; WX 167 ; N fraction ; B -170 -19 336 710 ;
-C 165 ; WX 556 ; N yen ; B -9 0 565 698 ;
-C 166 ; WX 556 ; N florin ; B -10 -210 516 737 ;
-C 167 ; WX 556 ; N section ; B 34 -184 522 727 ;
-C 168 ; WX 556 ; N currency ; B -3 76 559 636 ;
-C 169 ; WX 238 ; N quotesingle ; B 70 447 168 718 ;
-C 170 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ;
-C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ;
-C 172 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ;
-C 173 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ;
-C 174 ; WX 611 ; N fi ; B 10 0 542 727 ;
-C 175 ; WX 611 ; N fl ; B 10 0 542 727 ;
-C 177 ; WX 556 ; N endash ; B 0 227 556 333 ;
-C 178 ; WX 556 ; N dagger ; B 36 -171 520 718 ;
-C 179 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ;
-C 180 ; WX 278 ; N periodcentered ; B 58 172 220 334 ;
-C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ;
-C 183 ; WX 350 ; N bullet ; B 10 194 340 524 ;
-C 184 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ;
-C 185 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ;
-C 186 ; WX 500 ; N quotedblright ; B 64 445 436 718 ;
-C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ;
-C 188 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;
-C 189 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ;
-C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ;
-C 193 ; WX 333 ; N grave ; B -23 604 225 750 ;
-C 194 ; WX 333 ; N acute ; B 108 604 356 750 ;
-C 195 ; WX 333 ; N circumflex ; B -10 604 343 750 ;
-C 196 ; WX 333 ; N tilde ; B -17 610 350 737 ;
-C 197 ; WX 333 ; N macron ; B -6 604 339 678 ;
-C 198 ; WX 333 ; N breve ; B -2 604 335 750 ;
-C 199 ; WX 333 ; N dotaccent ; B 104 614 230 729 ;
-C 200 ; WX 333 ; N dieresis ; B 6 614 327 729 ;
-C 202 ; WX 333 ; N ring ; B 59 568 275 776 ;
-C 203 ; WX 333 ; N cedilla ; B 6 -228 245 0 ;
-C 205 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ;
-C 206 ; WX 333 ; N ogonek ; B 71 -228 304 0 ;
-C 207 ; WX 333 ; N caron ; B -10 604 343 750 ;
-C 208 ; WX 1000 ; N emdash ; B 0 227 1000 333 ;
-C 225 ; WX 1000 ; N AE ; B 5 0 954 718 ;
-C 227 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ;
-C 232 ; WX 611 ; N Lslash ; B -20 0 583 718 ;
-C 233 ; WX 778 ; N Oslash ; B 33 -27 744 745 ;
-C 234 ; WX 1000 ; N OE ; B 37 -19 961 737 ;
-C 235 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ;
-C 241 ; WX 889 ; N ae ; B 29 -14 858 546 ;
-C 245 ; WX 278 ; N dotlessi ; B 69 0 209 532 ;
-C 248 ; WX 278 ; N lslash ; B -18 0 296 718 ;
-C 249 ; WX 611 ; N oslash ; B 22 -29 589 560 ;
-C 250 ; WX 944 ; N oe ; B 34 -14 912 546 ;
-C 251 ; WX 611 ; N germandbls ; B 69 -14 579 731 ;
-C -1 ; WX 278 ; N Idieresis ; B -21 0 300 915 ;
-C -1 ; WX 556 ; N eacute ; B 23 -14 528 750 ;
-C -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ;
-C -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ;
-C -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ;
-C -1 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ;
-C -1 ; WX 584 ; N divide ; B 40 -42 544 548 ;
-C -1 ; WX 667 ; N Yacute ; B 15 0 653 936 ;
-C -1 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ;
-C -1 ; WX 556 ; N aacute ; B 29 -14 527 750 ;
-C -1 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ;
-C -1 ; WX 556 ; N yacute ; B 10 -214 539 750 ;
-C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ;
-C -1 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ;
-C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ;
-C -1 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ;
-C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ;
-C -1 ; WX 722 ; N Uacute ; B 72 -19 651 936 ;
-C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ;
-C -1 ; WX 667 ; N Edieresis ; B 76 0 621 915 ;
-C -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ;
-C -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ;
-C -1 ; WX 737 ; N copyright ; B -11 -19 749 737 ;
-C -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ;
-C -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ;
-C -1 ; WX 556 ; N aring ; B 29 -14 527 776 ;
-C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ;
-C -1 ; WX 278 ; N lacute ; B 69 0 329 936 ;
-C -1 ; WX 556 ; N agrave ; B 29 -14 527 750 ;
-C -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ;
-C -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ;
-C -1 ; WX 556 ; N atilde ; B 29 -14 527 737 ;
-C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ;
-C -1 ; WX 556 ; N scaron ; B 30 -14 519 750 ;
-C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ;
-C -1 ; WX 278 ; N iacute ; B 69 0 329 750 ;
-C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;
-C -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ;
-C -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ;
-C -1 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ;
-C -1 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ;
-C -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ;
-C -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ;
-C -1 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ;
-C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ;
-C -1 ; WX 667 ; N Thorn ; B 76 0 627 718 ;
-C -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ;
-C -1 ; WX 722 ; N Racute ; B 76 0 677 936 ;
-C -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ;
-C -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ;
-C -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ;
-C -1 ; WX 611 ; N uring ; B 66 -14 545 776 ;
-C -1 ; WX 333 ; N threesuperior ; B 8 271 326 710 ;
-C -1 ; WX 778 ; N Ograve ; B 44 -19 734 936 ;
-C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ;
-C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ;
-C -1 ; WX 584 ; N multiply ; B 40 1 545 505 ;
-C -1 ; WX 611 ; N uacute ; B 66 -14 545 750 ;
-C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ;
-C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;
-C -1 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ;
-C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ;
-C -1 ; WX 278 ; N icircumflex ; B -37 0 316 750 ;
-C -1 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ;
-C -1 ; WX 556 ; N adieresis ; B 29 -14 527 729 ;
-C -1 ; WX 556 ; N edieresis ; B 23 -14 528 729 ;
-C -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ;
-C -1 ; WX 611 ; N nacute ; B 65 0 546 750 ;
-C -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ;
-C -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ;
-C -1 ; WX 278 ; N Iacute ; B 64 0 329 936 ;
-C -1 ; WX 584 ; N plusminus ; B 40 0 544 506 ;
-C -1 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ;
-C -1 ; WX 737 ; N registered ; B -11 -19 748 737 ;
-C -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ;
-C -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ;
-C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;
-C -1 ; WX 667 ; N Egrave ; B 76 0 621 936 ;
-C -1 ; WX 389 ; N racute ; B 64 0 384 750 ;
-C -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ;
-C -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ;
-C -1 ; WX 611 ; N Zcaron ; B 25 0 586 936 ;
-C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;
-C -1 ; WX 722 ; N Eth ; B -5 0 685 718 ;
-C -1 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ;
-C -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ;
-C -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ;
-C -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ;
-C -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ;
-C -1 ; WX 722 ; N Aacute ; B 20 0 702 936 ;
-C -1 ; WX 722 ; N Adieresis ; B 20 0 702 915 ;
-C -1 ; WX 556 ; N egrave ; B 23 -14 528 750 ;
-C -1 ; WX 500 ; N zacute ; B 20 0 480 750 ;
-C -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ;
-C -1 ; WX 778 ; N Oacute ; B 44 -19 734 936 ;
-C -1 ; WX 611 ; N oacute ; B 34 -14 578 750 ;
-C -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ;
-C -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ;
-C -1 ; WX 278 ; N idieresis ; B -21 0 300 729 ;
-C -1 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ;
-C -1 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ;
-C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
-C -1 ; WX 611 ; N thorn ; B 62 -208 578 718 ;
-C -1 ; WX 333 ; N twosuperior ; B 9 283 324 710 ;
-C -1 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ;
-C -1 ; WX 611 ; N mu ; B 66 -207 545 532 ;
-C -1 ; WX 278 ; N igrave ; B -50 0 209 750 ;
-C -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ;
-C -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ;
-C -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ;
-C -1 ; WX 834 ; N threequarters ; B 16 -19 799 710 ;
-C -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ;
-C -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ;
-C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ;
-C -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ;
-C -1 ; WX 1000 ; N trademark ; B 44 306 956 718 ;
-C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ;
-C -1 ; WX 278 ; N Igrave ; B -50 0 214 936 ;
-C -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ;
-C -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ;
-C -1 ; WX 834 ; N onehalf ; B 26 -19 794 710 ;
-C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;
-C -1 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ;
-C -1 ; WX 611 ; N ntilde ; B 65 0 546 737 ;
-C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ;
-C -1 ; WX 667 ; N Eacute ; B 76 0 621 936 ;
-C -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ;
-C -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ;
-C -1 ; WX 834 ; N onequarter ; B 26 -19 766 710 ;
-C -1 ; WX 667 ; N Scaron ; B 39 -19 629 936 ;
-C -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ;
-C -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ;
-C -1 ; WX 400 ; N degree ; B 57 426 343 712 ;
-C -1 ; WX 611 ; N ograve ; B 34 -14 578 750 ;
-C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ;
-C -1 ; WX 611 ; N ugrave ; B 66 -14 545 750 ;
-C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;
-C -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ;
-C -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ;
-C -1 ; WX 722 ; N Ntilde ; B 69 0 654 923 ;
-C -1 ; WX 611 ; N otilde ; B 34 -14 578 737 ;
-C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ;
-C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ;
-C -1 ; WX 722 ; N Atilde ; B 20 0 702 923 ;
-C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ;
-C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ;
-C -1 ; WX 778 ; N Otilde ; B 44 -19 734 923 ;
-C -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ;
-C -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ;
-C -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ;
-C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ;
-C -1 ; WX 584 ; N minus ; B 40 197 544 309 ;
-C -1 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ;
-C -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ;
-C -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ;
-C -1 ; WX 584 ; N logicalnot ; B 40 108 544 419 ;
-C -1 ; WX 611 ; N odieresis ; B 34 -14 578 729 ;
-C -1 ; WX 611 ; N udieresis ; B 66 -14 545 729 ;
-C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;
-C -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ;
-C -1 ; WX 611 ; N eth ; B 34 -14 578 737 ;
-C -1 ; WX 500 ; N zcaron ; B 20 0 480 750 ;
-C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ;
-C -1 ; WX 333 ; N onesuperior ; B 26 283 237 710 ;
-C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ;
-C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;
-EndCharMetrics
-StartKernData
-StartKernPairs 2481
-KPX A C -40
-KPX A Cacute -40
-KPX A Ccaron -40
-KPX A Ccedilla -40
-KPX A G -50
-KPX A Gbreve -50
-KPX A Gcommaaccent -50
-KPX A O -40
-KPX A Oacute -40
-KPX A Ocircumflex -40
-KPX A Odieresis -40
-KPX A Ograve -40
-KPX A Ohungarumlaut -40
-KPX A Omacron -40
-KPX A Oslash -40
-KPX A Otilde -40
-KPX A Q -40
-KPX A T -90
-KPX A Tcaron -90
-KPX A Tcommaaccent -90
-KPX A U -50
-KPX A Uacute -50
-KPX A Ucircumflex -50
-KPX A Udieresis -50
-KPX A Ugrave -50
-KPX A Uhungarumlaut -50
-KPX A Umacron -50
-KPX A Uogonek -50
-KPX A Uring -50
-KPX A V -80
-KPX A W -60
-KPX A Y -110
-KPX A Yacute -110
-KPX A Ydieresis -110
-KPX A u -30
-KPX A uacute -30
-KPX A ucircumflex -30
-KPX A udieresis -30
-KPX A ugrave -30
-KPX A uhungarumlaut -30
-KPX A umacron -30
-KPX A uogonek -30
-KPX A uring -30
-KPX A v -40
-KPX A w -30
-KPX A y -30
-KPX A yacute -30
-KPX A ydieresis -30
-KPX Aacute C -40
-KPX Aacute Cacute -40
-KPX Aacute Ccaron -40
-KPX Aacute Ccedilla -40
-KPX Aacute G -50
-KPX Aacute Gbreve -50
-KPX Aacute Gcommaaccent -50
-KPX Aacute O -40
-KPX Aacute Oacute -40
-KPX Aacute Ocircumflex -40
-KPX Aacute Odieresis -40
-KPX Aacute Ograve -40
-KPX Aacute Ohungarumlaut -40
-KPX Aacute Omacron -40
-KPX Aacute Oslash -40
-KPX Aacute Otilde -40
-KPX Aacute Q -40
-KPX Aacute T -90
-KPX Aacute Tcaron -90
-KPX Aacute Tcommaaccent -90
-KPX Aacute U -50
-KPX Aacute Uacute -50
-KPX Aacute Ucircumflex -50
-KPX Aacute Udieresis -50
-KPX Aacute Ugrave -50
-KPX Aacute Uhungarumlaut -50
-KPX Aacute Umacron -50
-KPX Aacute Uogonek -50
-KPX Aacute Uring -50
-KPX Aacute V -80
-KPX Aacute W -60
-KPX Aacute Y -110
-KPX Aacute Yacute -110
-KPX Aacute Ydieresis -110
-KPX Aacute u -30
-KPX Aacute uacute -30
-KPX Aacute ucircumflex -30
-KPX Aacute udieresis -30
-KPX Aacute ugrave -30
-KPX Aacute uhungarumlaut -30
-KPX Aacute umacron -30
-KPX Aacute uogonek -30
-KPX Aacute uring -30
-KPX Aacute v -40
-KPX Aacute w -30
-KPX Aacute y -30
-KPX Aacute yacute -30
-KPX Aacute ydieresis -30
-KPX Abreve C -40
-KPX Abreve Cacute -40
-KPX Abreve Ccaron -40
-KPX Abreve Ccedilla -40
-KPX Abreve G -50
-KPX Abreve Gbreve -50
-KPX Abreve Gcommaaccent -50
-KPX Abreve O -40
-KPX Abreve Oacute -40
-KPX Abreve Ocircumflex -40
-KPX Abreve Odieresis -40
-KPX Abreve Ograve -40
-KPX Abreve Ohungarumlaut -40
-KPX Abreve Omacron -40
-KPX Abreve Oslash -40
-KPX Abreve Otilde -40
-KPX Abreve Q -40
-KPX Abreve T -90
-KPX Abreve Tcaron -90
-KPX Abreve Tcommaaccent -90
-KPX Abreve U -50
-KPX Abreve Uacute -50
-KPX Abreve Ucircumflex -50
-KPX Abreve Udieresis -50
-KPX Abreve Ugrave -50
-KPX Abreve Uhungarumlaut -50
-KPX Abreve Umacron -50
-KPX Abreve Uogonek -50
-KPX Abreve Uring -50
-KPX Abreve V -80
-KPX Abreve W -60
-KPX Abreve Y -110
-KPX Abreve Yacute -110
-KPX Abreve Ydieresis -110
-KPX Abreve u -30
-KPX Abreve uacute -30
-KPX Abreve ucircumflex -30
-KPX Abreve udieresis -30
-KPX Abreve ugrave -30
-KPX Abreve uhungarumlaut -30
-KPX Abreve umacron -30
-KPX Abreve uogonek -30
-KPX Abreve uring -30
-KPX Abreve v -40
-KPX Abreve w -30
-KPX Abreve y -30
-KPX Abreve yacute -30
-KPX Abreve ydieresis -30
-KPX Acircumflex C -40
-KPX Acircumflex Cacute -40
-KPX Acircumflex Ccaron -40
-KPX Acircumflex Ccedilla -40
-KPX Acircumflex G -50
-KPX Acircumflex Gbreve -50
-KPX Acircumflex Gcommaaccent -50
-KPX Acircumflex O -40
-KPX Acircumflex Oacute -40
-KPX Acircumflex Ocircumflex -40
-KPX Acircumflex Odieresis -40
-KPX Acircumflex Ograve -40
-KPX Acircumflex Ohungarumlaut -40
-KPX Acircumflex Omacron -40
-KPX Acircumflex Oslash -40
-KPX Acircumflex Otilde -40
-KPX Acircumflex Q -40
-KPX Acircumflex T -90
-KPX Acircumflex Tcaron -90
-KPX Acircumflex Tcommaaccent -90
-KPX Acircumflex U -50
-KPX Acircumflex Uacute -50
-KPX Acircumflex Ucircumflex -50
-KPX Acircumflex Udieresis -50
-KPX Acircumflex Ugrave -50
-KPX Acircumflex Uhungarumlaut -50
-KPX Acircumflex Umacron -50
-KPX Acircumflex Uogonek -50
-KPX Acircumflex Uring -50
-KPX Acircumflex V -80
-KPX Acircumflex W -60
-KPX Acircumflex Y -110
-KPX Acircumflex Yacute -110
-KPX Acircumflex Ydieresis -110
-KPX Acircumflex u -30
-KPX Acircumflex uacute -30
-KPX Acircumflex ucircumflex -30
-KPX Acircumflex udieresis -30
-KPX Acircumflex ugrave -30
-KPX Acircumflex uhungarumlaut -30
-KPX Acircumflex umacron -30
-KPX Acircumflex uogonek -30
-KPX Acircumflex uring -30
-KPX Acircumflex v -40
-KPX Acircumflex w -30
-KPX Acircumflex y -30
-KPX Acircumflex yacute -30
-KPX Acircumflex ydieresis -30
-KPX Adieresis C -40
-KPX Adieresis Cacute -40
-KPX Adieresis Ccaron -40
-KPX Adieresis Ccedilla -40
-KPX Adieresis G -50
-KPX Adieresis Gbreve -50
-KPX Adieresis Gcommaaccent -50
-KPX Adieresis O -40
-KPX Adieresis Oacute -40
-KPX Adieresis Ocircumflex -40
-KPX Adieresis Odieresis -40
-KPX Adieresis Ograve -40
-KPX Adieresis Ohungarumlaut -40
-KPX Adieresis Omacron -40
-KPX Adieresis Oslash -40
-KPX Adieresis Otilde -40
-KPX Adieresis Q -40
-KPX Adieresis T -90
-KPX Adieresis Tcaron -90
-KPX Adieresis Tcommaaccent -90
-KPX Adieresis U -50
-KPX Adieresis Uacute -50
-KPX Adieresis Ucircumflex -50
-KPX Adieresis Udieresis -50
-KPX Adieresis Ugrave -50
-KPX Adieresis Uhungarumlaut -50
-KPX Adieresis Umacron -50
-KPX Adieresis Uogonek -50
-KPX Adieresis Uring -50
-KPX Adieresis V -80
-KPX Adieresis W -60
-KPX Adieresis Y -110
-KPX Adieresis Yacute -110
-KPX Adieresis Ydieresis -110
-KPX Adieresis u -30
-KPX Adieresis uacute -30
-KPX Adieresis ucircumflex -30
-KPX Adieresis udieresis -30
-KPX Adieresis ugrave -30
-KPX Adieresis uhungarumlaut -30
-KPX Adieresis umacron -30
-KPX Adieresis uogonek -30
-KPX Adieresis uring -30
-KPX Adieresis v -40
-KPX Adieresis w -30
-KPX Adieresis y -30
-KPX Adieresis yacute -30
-KPX Adieresis ydieresis -30
-KPX Agrave C -40
-KPX Agrave Cacute -40
-KPX Agrave Ccaron -40
-KPX Agrave Ccedilla -40
-KPX Agrave G -50
-KPX Agrave Gbreve -50
-KPX Agrave Gcommaaccent -50
-KPX Agrave O -40
-KPX Agrave Oacute -40
-KPX Agrave Ocircumflex -40
-KPX Agrave Odieresis -40
-KPX Agrave Ograve -40
-KPX Agrave Ohungarumlaut -40
-KPX Agrave Omacron -40
-KPX Agrave Oslash -40
-KPX Agrave Otilde -40
-KPX Agrave Q -40
-KPX Agrave T -90
-KPX Agrave Tcaron -90
-KPX Agrave Tcommaaccent -90
-KPX Agrave U -50
-KPX Agrave Uacute -50
-KPX Agrave Ucircumflex -50
-KPX Agrave Udieresis -50
-KPX Agrave Ugrave -50
-KPX Agrave Uhungarumlaut -50
-KPX Agrave Umacron -50
-KPX Agrave Uogonek -50
-KPX Agrave Uring -50
-KPX Agrave V -80
-KPX Agrave W -60
-KPX Agrave Y -110
-KPX Agrave Yacute -110
-KPX Agrave Ydieresis -110
-KPX Agrave u -30
-KPX Agrave uacute -30
-KPX Agrave ucircumflex -30
-KPX Agrave udieresis -30
-KPX Agrave ugrave -30
-KPX Agrave uhungarumlaut -30
-KPX Agrave umacron -30
-KPX Agrave uogonek -30
-KPX Agrave uring -30
-KPX Agrave v -40
-KPX Agrave w -30
-KPX Agrave y -30
-KPX Agrave yacute -30
-KPX Agrave ydieresis -30
-KPX Amacron C -40
-KPX Amacron Cacute -40
-KPX Amacron Ccaron -40
-KPX Amacron Ccedilla -40
-KPX Amacron G -50
-KPX Amacron Gbreve -50
-KPX Amacron Gcommaaccent -50
-KPX Amacron O -40
-KPX Amacron Oacute -40
-KPX Amacron Ocircumflex -40
-KPX Amacron Odieresis -40
-KPX Amacron Ograve -40
-KPX Amacron Ohungarumlaut -40
-KPX Amacron Omacron -40
-KPX Amacron Oslash -40
-KPX Amacron Otilde -40
-KPX Amacron Q -40
-KPX Amacron T -90
-KPX Amacron Tcaron -90
-KPX Amacron Tcommaaccent -90
-KPX Amacron U -50
-KPX Amacron Uacute -50
-KPX Amacron Ucircumflex -50
-KPX Amacron Udieresis -50
-KPX Amacron Ugrave -50
-KPX Amacron Uhungarumlaut -50
-KPX Amacron Umacron -50
-KPX Amacron Uogonek -50
-KPX Amacron Uring -50
-KPX Amacron V -80
-KPX Amacron W -60
-KPX Amacron Y -110
-KPX Amacron Yacute -110
-KPX Amacron Ydieresis -110
-KPX Amacron u -30
-KPX Amacron uacute -30
-KPX Amacron ucircumflex -30
-KPX Amacron udieresis -30
-KPX Amacron ugrave -30
-KPX Amacron uhungarumlaut -30
-KPX Amacron umacron -30
-KPX Amacron uogonek -30
-KPX Amacron uring -30
-KPX Amacron v -40
-KPX Amacron w -30
-KPX Amacron y -30
-KPX Amacron yacute -30
-KPX Amacron ydieresis -30
-KPX Aogonek C -40
-KPX Aogonek Cacute -40
-KPX Aogonek Ccaron -40
-KPX Aogonek Ccedilla -40
-KPX Aogonek G -50
-KPX Aogonek Gbreve -50
-KPX Aogonek Gcommaaccent -50
-KPX Aogonek O -40
-KPX Aogonek Oacute -40
-KPX Aogonek Ocircumflex -40
-KPX Aogonek Odieresis -40
-KPX Aogonek Ograve -40
-KPX Aogonek Ohungarumlaut -40
-KPX Aogonek Omacron -40
-KPX Aogonek Oslash -40
-KPX Aogonek Otilde -40
-KPX Aogonek Q -40
-KPX Aogonek T -90
-KPX Aogonek Tcaron -90
-KPX Aogonek Tcommaaccent -90
-KPX Aogonek U -50
-KPX Aogonek Uacute -50
-KPX Aogonek Ucircumflex -50
-KPX Aogonek Udieresis -50
-KPX Aogonek Ugrave -50
-KPX Aogonek Uhungarumlaut -50
-KPX Aogonek Umacron -50
-KPX Aogonek Uogonek -50
-KPX Aogonek Uring -50
-KPX Aogonek V -80
-KPX Aogonek W -60
-KPX Aogonek Y -110
-KPX Aogonek Yacute -110
-KPX Aogonek Ydieresis -110
-KPX Aogonek u -30
-KPX Aogonek uacute -30
-KPX Aogonek ucircumflex -30
-KPX Aogonek udieresis -30
-KPX Aogonek ugrave -30
-KPX Aogonek uhungarumlaut -30
-KPX Aogonek umacron -30
-KPX Aogonek uogonek -30
-KPX Aogonek uring -30
-KPX Aogonek v -40
-KPX Aogonek w -30
-KPX Aogonek y -30
-KPX Aogonek yacute -30
-KPX Aogonek ydieresis -30
-KPX Aring C -40
-KPX Aring Cacute -40
-KPX Aring Ccaron -40
-KPX Aring Ccedilla -40
-KPX Aring G -50
-KPX Aring Gbreve -50
-KPX Aring Gcommaaccent -50
-KPX Aring O -40
-KPX Aring Oacute -40
-KPX Aring Ocircumflex -40
-KPX Aring Odieresis -40
-KPX Aring Ograve -40
-KPX Aring Ohungarumlaut -40
-KPX Aring Omacron -40
-KPX Aring Oslash -40
-KPX Aring Otilde -40
-KPX Aring Q -40
-KPX Aring T -90
-KPX Aring Tcaron -90
-KPX Aring Tcommaaccent -90
-KPX Aring U -50
-KPX Aring Uacute -50
-KPX Aring Ucircumflex -50
-KPX Aring Udieresis -50
-KPX Aring Ugrave -50
-KPX Aring Uhungarumlaut -50
-KPX Aring Umacron -50
-KPX Aring Uogonek -50
-KPX Aring Uring -50
-KPX Aring V -80
-KPX Aring W -60
-KPX Aring Y -110
-KPX Aring Yacute -110
-KPX Aring Ydieresis -110
-KPX Aring u -30
-KPX Aring uacute -30
-KPX Aring ucircumflex -30
-KPX Aring udieresis -30
-KPX Aring ugrave -30
-KPX Aring uhungarumlaut -30
-KPX Aring umacron -30
-KPX Aring uogonek -30
-KPX Aring uring -30
-KPX Aring v -40
-KPX Aring w -30
-KPX Aring y -30
-KPX Aring yacute -30
-KPX Aring ydieresis -30
-KPX Atilde C -40
-KPX Atilde Cacute -40
-KPX Atilde Ccaron -40
-KPX Atilde Ccedilla -40
-KPX Atilde G -50
-KPX Atilde Gbreve -50
-KPX Atilde Gcommaaccent -50
-KPX Atilde O -40
-KPX Atilde Oacute -40
-KPX Atilde Ocircumflex -40
-KPX Atilde Odieresis -40
-KPX Atilde Ograve -40
-KPX Atilde Ohungarumlaut -40
-KPX Atilde Omacron -40
-KPX Atilde Oslash -40
-KPX Atilde Otilde -40
-KPX Atilde Q -40
-KPX Atilde T -90
-KPX Atilde Tcaron -90
-KPX Atilde Tcommaaccent -90
-KPX Atilde U -50
-KPX Atilde Uacute -50
-KPX Atilde Ucircumflex -50
-KPX Atilde Udieresis -50
-KPX Atilde Ugrave -50
-KPX Atilde Uhungarumlaut -50
-KPX Atilde Umacron -50
-KPX Atilde Uogonek -50
-KPX Atilde Uring -50
-KPX Atilde V -80
-KPX Atilde W -60
-KPX Atilde Y -110
-KPX Atilde Yacute -110
-KPX Atilde Ydieresis -110
-KPX Atilde u -30
-KPX Atilde uacute -30
-KPX Atilde ucircumflex -30
-KPX Atilde udieresis -30
-KPX Atilde ugrave -30
-KPX Atilde uhungarumlaut -30
-KPX Atilde umacron -30
-KPX Atilde uogonek -30
-KPX Atilde uring -30
-KPX Atilde v -40
-KPX Atilde w -30
-KPX Atilde y -30
-KPX Atilde yacute -30
-KPX Atilde ydieresis -30
-KPX B A -30
-KPX B Aacute -30
-KPX B Abreve -30
-KPX B Acircumflex -30
-KPX B Adieresis -30
-KPX B Agrave -30
-KPX B Amacron -30
-KPX B Aogonek -30
-KPX B Aring -30
-KPX B Atilde -30
-KPX B U -10
-KPX B Uacute -10
-KPX B Ucircumflex -10
-KPX B Udieresis -10
-KPX B Ugrave -10
-KPX B Uhungarumlaut -10
-KPX B Umacron -10
-KPX B Uogonek -10
-KPX B Uring -10
-KPX D A -40
-KPX D Aacute -40
-KPX D Abreve -40
-KPX D Acircumflex -40
-KPX D Adieresis -40
-KPX D Agrave -40
-KPX D Amacron -40
-KPX D Aogonek -40
-KPX D Aring -40
-KPX D Atilde -40
-KPX D V -40
-KPX D W -40
-KPX D Y -70
-KPX D Yacute -70
-KPX D Ydieresis -70
-KPX D comma -30
-KPX D period -30
-KPX Dcaron A -40
-KPX Dcaron Aacute -40
-KPX Dcaron Abreve -40
-KPX Dcaron Acircumflex -40
-KPX Dcaron Adieresis -40
-KPX Dcaron Agrave -40
-KPX Dcaron Amacron -40
-KPX Dcaron Aogonek -40
-KPX Dcaron Aring -40
-KPX Dcaron Atilde -40
-KPX Dcaron V -40
-KPX Dcaron W -40
-KPX Dcaron Y -70
-KPX Dcaron Yacute -70
-KPX Dcaron Ydieresis -70
-KPX Dcaron comma -30
-KPX Dcaron period -30
-KPX Dcroat A -40
-KPX Dcroat Aacute -40
-KPX Dcroat Abreve -40
-KPX Dcroat Acircumflex -40
-KPX Dcroat Adieresis -40
-KPX Dcroat Agrave -40
-KPX Dcroat Amacron -40
-KPX Dcroat Aogonek -40
-KPX Dcroat Aring -40
-KPX Dcroat Atilde -40
-KPX Dcroat V -40
-KPX Dcroat W -40
-KPX Dcroat Y -70
-KPX Dcroat Yacute -70
-KPX Dcroat Ydieresis -70
-KPX Dcroat comma -30
-KPX Dcroat period -30
-KPX F A -80
-KPX F Aacute -80
-KPX F Abreve -80
-KPX F Acircumflex -80
-KPX F Adieresis -80
-KPX F Agrave -80
-KPX F Amacron -80
-KPX F Aogonek -80
-KPX F Aring -80
-KPX F Atilde -80
-KPX F a -20
-KPX F aacute -20
-KPX F abreve -20
-KPX F acircumflex -20
-KPX F adieresis -20
-KPX F agrave -20
-KPX F amacron -20
-KPX F aogonek -20
-KPX F aring -20
-KPX F atilde -20
-KPX F comma -100
-KPX F period -100
-KPX J A -20
-KPX J Aacute -20
-KPX J Abreve -20
-KPX J Acircumflex -20
-KPX J Adieresis -20
-KPX J Agrave -20
-KPX J Amacron -20
-KPX J Aogonek -20
-KPX J Aring -20
-KPX J Atilde -20
-KPX J comma -20
-KPX J period -20
-KPX J u -20
-KPX J uacute -20
-KPX J ucircumflex -20
-KPX J udieresis -20
-KPX J ugrave -20
-KPX J uhungarumlaut -20
-KPX J umacron -20
-KPX J uogonek -20
-KPX J uring -20
-KPX K O -30
-KPX K Oacute -30
-KPX K Ocircumflex -30
-KPX K Odieresis -30
-KPX K Ograve -30
-KPX K Ohungarumlaut -30
-KPX K Omacron -30
-KPX K Oslash -30
-KPX K Otilde -30
-KPX K e -15
-KPX K eacute -15
-KPX K ecaron -15
-KPX K ecircumflex -15
-KPX K edieresis -15
-KPX K edotaccent -15
-KPX K egrave -15
-KPX K emacron -15
-KPX K eogonek -15
-KPX K o -35
-KPX K oacute -35
-KPX K ocircumflex -35
-KPX K odieresis -35
-KPX K ograve -35
-KPX K ohungarumlaut -35
-KPX K omacron -35
-KPX K oslash -35
-KPX K otilde -35
-KPX K u -30
-KPX K uacute -30
-KPX K ucircumflex -30
-KPX K udieresis -30
-KPX K ugrave -30
-KPX K uhungarumlaut -30
-KPX K umacron -30
-KPX K uogonek -30
-KPX K uring -30
-KPX K y -40
-KPX K yacute -40
-KPX K ydieresis -40
-KPX Kcommaaccent O -30
-KPX Kcommaaccent Oacute -30
-KPX Kcommaaccent Ocircumflex -30
-KPX Kcommaaccent Odieresis -30
-KPX Kcommaaccent Ograve -30
-KPX Kcommaaccent Ohungarumlaut -30
-KPX Kcommaaccent Omacron -30
-KPX Kcommaaccent Oslash -30
-KPX Kcommaaccent Otilde -30
-KPX Kcommaaccent e -15
-KPX Kcommaaccent eacute -15
-KPX Kcommaaccent ecaron -15
-KPX Kcommaaccent ecircumflex -15
-KPX Kcommaaccent edieresis -15
-KPX Kcommaaccent edotaccent -15
-KPX Kcommaaccent egrave -15
-KPX Kcommaaccent emacron -15
-KPX Kcommaaccent eogonek -15
-KPX Kcommaaccent o -35
-KPX Kcommaaccent oacute -35
-KPX Kcommaaccent ocircumflex -35
-KPX Kcommaaccent odieresis -35
-KPX Kcommaaccent ograve -35
-KPX Kcommaaccent ohungarumlaut -35
-KPX Kcommaaccent omacron -35
-KPX Kcommaaccent oslash -35
-KPX Kcommaaccent otilde -35
-KPX Kcommaaccent u -30
-KPX Kcommaaccent uacute -30
-KPX Kcommaaccent ucircumflex -30
-KPX Kcommaaccent udieresis -30
-KPX Kcommaaccent ugrave -30
-KPX Kcommaaccent uhungarumlaut -30
-KPX Kcommaaccent umacron -30
-KPX Kcommaaccent uogonek -30
-KPX Kcommaaccent uring -30
-KPX Kcommaaccent y -40
-KPX Kcommaaccent yacute -40
-KPX Kcommaaccent ydieresis -40
-KPX L T -90
-KPX L Tcaron -90
-KPX L Tcommaaccent -90
-KPX L V -110
-KPX L W -80
-KPX L Y -120
-KPX L Yacute -120
-KPX L Ydieresis -120
-KPX L quotedblright -140
-KPX L quoteright -140
-KPX L y -30
-KPX L yacute -30
-KPX L ydieresis -30
-KPX Lacute T -90
-KPX Lacute Tcaron -90
-KPX Lacute Tcommaaccent -90
-KPX Lacute V -110
-KPX Lacute W -80
-KPX Lacute Y -120
-KPX Lacute Yacute -120
-KPX Lacute Ydieresis -120
-KPX Lacute quotedblright -140
-KPX Lacute quoteright -140
-KPX Lacute y -30
-KPX Lacute yacute -30
-KPX Lacute ydieresis -30
-KPX Lcommaaccent T -90
-KPX Lcommaaccent Tcaron -90
-KPX Lcommaaccent Tcommaaccent -90
-KPX Lcommaaccent V -110
-KPX Lcommaaccent W -80
-KPX Lcommaaccent Y -120
-KPX Lcommaaccent Yacute -120
-KPX Lcommaaccent Ydieresis -120
-KPX Lcommaaccent quotedblright -140
-KPX Lcommaaccent quoteright -140
-KPX Lcommaaccent y -30
-KPX Lcommaaccent yacute -30
-KPX Lcommaaccent ydieresis -30
-KPX Lslash T -90
-KPX Lslash Tcaron -90
-KPX Lslash Tcommaaccent -90
-KPX Lslash V -110
-KPX Lslash W -80
-KPX Lslash Y -120
-KPX Lslash Yacute -120
-KPX Lslash Ydieresis -120
-KPX Lslash quotedblright -140
-KPX Lslash quoteright -140
-KPX Lslash y -30
-KPX Lslash yacute -30
-KPX Lslash ydieresis -30
-KPX O A -50
-KPX O Aacute -50
-KPX O Abreve -50
-KPX O Acircumflex -50
-KPX O Adieresis -50
-KPX O Agrave -50
-KPX O Amacron -50
-KPX O Aogonek -50
-KPX O Aring -50
-KPX O Atilde -50
-KPX O T -40
-KPX O Tcaron -40
-KPX O Tcommaaccent -40
-KPX O V -50
-KPX O W -50
-KPX O X -50
-KPX O Y -70
-KPX O Yacute -70
-KPX O Ydieresis -70
-KPX O comma -40
-KPX O period -40
-KPX Oacute A -50
-KPX Oacute Aacute -50
-KPX Oacute Abreve -50
-KPX Oacute Acircumflex -50
-KPX Oacute Adieresis -50
-KPX Oacute Agrave -50
-KPX Oacute Amacron -50
-KPX Oacute Aogonek -50
-KPX Oacute Aring -50
-KPX Oacute Atilde -50
-KPX Oacute T -40
-KPX Oacute Tcaron -40
-KPX Oacute Tcommaaccent -40
-KPX Oacute V -50
-KPX Oacute W -50
-KPX Oacute X -50
-KPX Oacute Y -70
-KPX Oacute Yacute -70
-KPX Oacute Ydieresis -70
-KPX Oacute comma -40
-KPX Oacute period -40
-KPX Ocircumflex A -50
-KPX Ocircumflex Aacute -50
-KPX Ocircumflex Abreve -50
-KPX Ocircumflex Acircumflex -50
-KPX Ocircumflex Adieresis -50
-KPX Ocircumflex Agrave -50
-KPX Ocircumflex Amacron -50
-KPX Ocircumflex Aogonek -50
-KPX Ocircumflex Aring -50
-KPX Ocircumflex Atilde -50
-KPX Ocircumflex T -40
-KPX Ocircumflex Tcaron -40
-KPX Ocircumflex Tcommaaccent -40
-KPX Ocircumflex V -50
-KPX Ocircumflex W -50
-KPX Ocircumflex X -50
-KPX Ocircumflex Y -70
-KPX Ocircumflex Yacute -70
-KPX Ocircumflex Ydieresis -70
-KPX Ocircumflex comma -40
-KPX Ocircumflex period -40
-KPX Odieresis A -50
-KPX Odieresis Aacute -50
-KPX Odieresis Abreve -50
-KPX Odieresis Acircumflex -50
-KPX Odieresis Adieresis -50
-KPX Odieresis Agrave -50
-KPX Odieresis Amacron -50
-KPX Odieresis Aogonek -50
-KPX Odieresis Aring -50
-KPX Odieresis Atilde -50
-KPX Odieresis T -40
-KPX Odieresis Tcaron -40
-KPX Odieresis Tcommaaccent -40
-KPX Odieresis V -50
-KPX Odieresis W -50
-KPX Odieresis X -50
-KPX Odieresis Y -70
-KPX Odieresis Yacute -70
-KPX Odieresis Ydieresis -70
-KPX Odieresis comma -40
-KPX Odieresis period -40
-KPX Ograve A -50
-KPX Ograve Aacute -50
-KPX Ograve Abreve -50
-KPX Ograve Acircumflex -50
-KPX Ograve Adieresis -50
-KPX Ograve Agrave -50
-KPX Ograve Amacron -50
-KPX Ograve Aogonek -50
-KPX Ograve Aring -50
-KPX Ograve Atilde -50
-KPX Ograve T -40
-KPX Ograve Tcaron -40
-KPX Ograve Tcommaaccent -40
-KPX Ograve V -50
-KPX Ograve W -50
-KPX Ograve X -50
-KPX Ograve Y -70
-KPX Ograve Yacute -70
-KPX Ograve Ydieresis -70
-KPX Ograve comma -40
-KPX Ograve period -40
-KPX Ohungarumlaut A -50
-KPX Ohungarumlaut Aacute -50
-KPX Ohungarumlaut Abreve -50
-KPX Ohungarumlaut Acircumflex -50
-KPX Ohungarumlaut Adieresis -50
-KPX Ohungarumlaut Agrave -50
-KPX Ohungarumlaut Amacron -50
-KPX Ohungarumlaut Aogonek -50
-KPX Ohungarumlaut Aring -50
-KPX Ohungarumlaut Atilde -50
-KPX Ohungarumlaut T -40
-KPX Ohungarumlaut Tcaron -40
-KPX Ohungarumlaut Tcommaaccent -40
-KPX Ohungarumlaut V -50
-KPX Ohungarumlaut W -50
-KPX Ohungarumlaut X -50
-KPX Ohungarumlaut Y -70
-KPX Ohungarumlaut Yacute -70
-KPX Ohungarumlaut Ydieresis -70
-KPX Ohungarumlaut comma -40
-KPX Ohungarumlaut period -40
-KPX Omacron A -50
-KPX Omacron Aacute -50
-KPX Omacron Abreve -50
-KPX Omacron Acircumflex -50
-KPX Omacron Adieresis -50
-KPX Omacron Agrave -50
-KPX Omacron Amacron -50
-KPX Omacron Aogonek -50
-KPX Omacron Aring -50
-KPX Omacron Atilde -50
-KPX Omacron T -40
-KPX Omacron Tcaron -40
-KPX Omacron Tcommaaccent -40
-KPX Omacron V -50
-KPX Omacron W -50
-KPX Omacron X -50
-KPX Omacron Y -70
-KPX Omacron Yacute -70
-KPX Omacron Ydieresis -70
-KPX Omacron comma -40
-KPX Omacron period -40
-KPX Oslash A -50
-KPX Oslash Aacute -50
-KPX Oslash Abreve -50
-KPX Oslash Acircumflex -50
-KPX Oslash Adieresis -50
-KPX Oslash Agrave -50
-KPX Oslash Amacron -50
-KPX Oslash Aogonek -50
-KPX Oslash Aring -50
-KPX Oslash Atilde -50
-KPX Oslash T -40
-KPX Oslash Tcaron -40
-KPX Oslash Tcommaaccent -40
-KPX Oslash V -50
-KPX Oslash W -50
-KPX Oslash X -50
-KPX Oslash Y -70
-KPX Oslash Yacute -70
-KPX Oslash Ydieresis -70
-KPX Oslash comma -40
-KPX Oslash period -40
-KPX Otilde A -50
-KPX Otilde Aacute -50
-KPX Otilde Abreve -50
-KPX Otilde Acircumflex -50
-KPX Otilde Adieresis -50
-KPX Otilde Agrave -50
-KPX Otilde Amacron -50
-KPX Otilde Aogonek -50
-KPX Otilde Aring -50
-KPX Otilde Atilde -50
-KPX Otilde T -40
-KPX Otilde Tcaron -40
-KPX Otilde Tcommaaccent -40
-KPX Otilde V -50
-KPX Otilde W -50
-KPX Otilde X -50
-KPX Otilde Y -70
-KPX Otilde Yacute -70
-KPX Otilde Ydieresis -70
-KPX Otilde comma -40
-KPX Otilde period -40
-KPX P A -100
-KPX P Aacute -100
-KPX P Abreve -100
-KPX P Acircumflex -100
-KPX P Adieresis -100
-KPX P Agrave -100
-KPX P Amacron -100
-KPX P Aogonek -100
-KPX P Aring -100
-KPX P Atilde -100
-KPX P a -30
-KPX P aacute -30
-KPX P abreve -30
-KPX P acircumflex -30
-KPX P adieresis -30
-KPX P agrave -30
-KPX P amacron -30
-KPX P aogonek -30
-KPX P aring -30
-KPX P atilde -30
-KPX P comma -120
-KPX P e -30
-KPX P eacute -30
-KPX P ecaron -30
-KPX P ecircumflex -30
-KPX P edieresis -30
-KPX P edotaccent -30
-KPX P egrave -30
-KPX P emacron -30
-KPX P eogonek -30
-KPX P o -40
-KPX P oacute -40
-KPX P ocircumflex -40
-KPX P odieresis -40
-KPX P ograve -40
-KPX P ohungarumlaut -40
-KPX P omacron -40
-KPX P oslash -40
-KPX P otilde -40
-KPX P period -120
-KPX Q U -10
-KPX Q Uacute -10
-KPX Q Ucircumflex -10
-KPX Q Udieresis -10
-KPX Q Ugrave -10
-KPX Q Uhungarumlaut -10
-KPX Q Umacron -10
-KPX Q Uogonek -10
-KPX Q Uring -10
-KPX Q comma 20
-KPX Q period 20
-KPX R O -20
-KPX R Oacute -20
-KPX R Ocircumflex -20
-KPX R Odieresis -20
-KPX R Ograve -20
-KPX R Ohungarumlaut -20
-KPX R Omacron -20
-KPX R Oslash -20
-KPX R Otilde -20
-KPX R T -20
-KPX R Tcaron -20
-KPX R Tcommaaccent -20
-KPX R U -20
-KPX R Uacute -20
-KPX R Ucircumflex -20
-KPX R Udieresis -20
-KPX R Ugrave -20
-KPX R Uhungarumlaut -20
-KPX R Umacron -20
-KPX R Uogonek -20
-KPX R Uring -20
-KPX R V -50
-KPX R W -40
-KPX R Y -50
-KPX R Yacute -50
-KPX R Ydieresis -50
-KPX Racute O -20
-KPX Racute Oacute -20
-KPX Racute Ocircumflex -20
-KPX Racute Odieresis -20
-KPX Racute Ograve -20
-KPX Racute Ohungarumlaut -20
-KPX Racute Omacron -20
-KPX Racute Oslash -20
-KPX Racute Otilde -20
-KPX Racute T -20
-KPX Racute Tcaron -20
-KPX Racute Tcommaaccent -20
-KPX Racute U -20
-KPX Racute Uacute -20
-KPX Racute Ucircumflex -20
-KPX Racute Udieresis -20
-KPX Racute Ugrave -20
-KPX Racute Uhungarumlaut -20
-KPX Racute Umacron -20
-KPX Racute Uogonek -20
-KPX Racute Uring -20
-KPX Racute V -50
-KPX Racute W -40
-KPX Racute Y -50
-KPX Racute Yacute -50
-KPX Racute Ydieresis -50
-KPX Rcaron O -20
-KPX Rcaron Oacute -20
-KPX Rcaron Ocircumflex -20
-KPX Rcaron Odieresis -20
-KPX Rcaron Ograve -20
-KPX Rcaron Ohungarumlaut -20
-KPX Rcaron Omacron -20
-KPX Rcaron Oslash -20
-KPX Rcaron Otilde -20
-KPX Rcaron T -20
-KPX Rcaron Tcaron -20
-KPX Rcaron Tcommaaccent -20
-KPX Rcaron U -20
-KPX Rcaron Uacute -20
-KPX Rcaron Ucircumflex -20
-KPX Rcaron Udieresis -20
-KPX Rcaron Ugrave -20
-KPX Rcaron Uhungarumlaut -20
-KPX Rcaron Umacron -20
-KPX Rcaron Uogonek -20
-KPX Rcaron Uring -20
-KPX Rcaron V -50
-KPX Rcaron W -40
-KPX Rcaron Y -50
-KPX Rcaron Yacute -50
-KPX Rcaron Ydieresis -50
-KPX Rcommaaccent O -20
-KPX Rcommaaccent Oacute -20
-KPX Rcommaaccent Ocircumflex -20
-KPX Rcommaaccent Odieresis -20
-KPX Rcommaaccent Ograve -20
-KPX Rcommaaccent Ohungarumlaut -20
-KPX Rcommaaccent Omacron -20
-KPX Rcommaaccent Oslash -20
-KPX Rcommaaccent Otilde -20
-KPX Rcommaaccent T -20
-KPX Rcommaaccent Tcaron -20
-KPX Rcommaaccent Tcommaaccent -20
-KPX Rcommaaccent U -20
-KPX Rcommaaccent Uacute -20
-KPX Rcommaaccent Ucircumflex -20
-KPX Rcommaaccent Udieresis -20
-KPX Rcommaaccent Ugrave -20
-KPX Rcommaaccent Uhungarumlaut -20
-KPX Rcommaaccent Umacron -20
-KPX Rcommaaccent Uogonek -20
-KPX Rcommaaccent Uring -20
-KPX Rcommaaccent V -50
-KPX Rcommaaccent W -40
-KPX Rcommaaccent Y -50
-KPX Rcommaaccent Yacute -50
-KPX Rcommaaccent Ydieresis -50
-KPX T A -90
-KPX T Aacute -90
-KPX T Abreve -90
-KPX T Acircumflex -90
-KPX T Adieresis -90
-KPX T Agrave -90
-KPX T Amacron -90
-KPX T Aogonek -90
-KPX T Aring -90
-KPX T Atilde -90
-KPX T O -40
-KPX T Oacute -40
-KPX T Ocircumflex -40
-KPX T Odieresis -40
-KPX T Ograve -40
-KPX T Ohungarumlaut -40
-KPX T Omacron -40
-KPX T Oslash -40
-KPX T Otilde -40
-KPX T a -80
-KPX T aacute -80
-KPX T abreve -80
-KPX T acircumflex -80
-KPX T adieresis -80
-KPX T agrave -80
-KPX T amacron -80
-KPX T aogonek -80
-KPX T aring -80
-KPX T atilde -80
-KPX T colon -40
-KPX T comma -80
-KPX T e -60
-KPX T eacute -60
-KPX T ecaron -60
-KPX T ecircumflex -60
-KPX T edieresis -60
-KPX T edotaccent -60
-KPX T egrave -60
-KPX T emacron -60
-KPX T eogonek -60
-KPX T hyphen -120
-KPX T o -80
-KPX T oacute -80
-KPX T ocircumflex -80
-KPX T odieresis -80
-KPX T ograve -80
-KPX T ohungarumlaut -80
-KPX T omacron -80
-KPX T oslash -80
-KPX T otilde -80
-KPX T period -80
-KPX T r -80
-KPX T racute -80
-KPX T rcommaaccent -80
-KPX T semicolon -40
-KPX T u -90
-KPX T uacute -90
-KPX T ucircumflex -90
-KPX T udieresis -90
-KPX T ugrave -90
-KPX T uhungarumlaut -90
-KPX T umacron -90
-KPX T uogonek -90
-KPX T uring -90
-KPX T w -60
-KPX T y -60
-KPX T yacute -60
-KPX T ydieresis -60
-KPX Tcaron A -90
-KPX Tcaron Aacute -90
-KPX Tcaron Abreve -90
-KPX Tcaron Acircumflex -90
-KPX Tcaron Adieresis -90
-KPX Tcaron Agrave -90
-KPX Tcaron Amacron -90
-KPX Tcaron Aogonek -90
-KPX Tcaron Aring -90
-KPX Tcaron Atilde -90
-KPX Tcaron O -40
-KPX Tcaron Oacute -40
-KPX Tcaron Ocircumflex -40
-KPX Tcaron Odieresis -40
-KPX Tcaron Ograve -40
-KPX Tcaron Ohungarumlaut -40
-KPX Tcaron Omacron -40
-KPX Tcaron Oslash -40
-KPX Tcaron Otilde -40
-KPX Tcaron a -80
-KPX Tcaron aacute -80
-KPX Tcaron abreve -80
-KPX Tcaron acircumflex -80
-KPX Tcaron adieresis -80
-KPX Tcaron agrave -80
-KPX Tcaron amacron -80
-KPX Tcaron aogonek -80
-KPX Tcaron aring -80
-KPX Tcaron atilde -80
-KPX Tcaron colon -40
-KPX Tcaron comma -80
-KPX Tcaron e -60
-KPX Tcaron eacute -60
-KPX Tcaron ecaron -60
-KPX Tcaron ecircumflex -60
-KPX Tcaron edieresis -60
-KPX Tcaron edotaccent -60
-KPX Tcaron egrave -60
-KPX Tcaron emacron -60
-KPX Tcaron eogonek -60
-KPX Tcaron hyphen -120
-KPX Tcaron o -80
-KPX Tcaron oacute -80
-KPX Tcaron ocircumflex -80
-KPX Tcaron odieresis -80
-KPX Tcaron ograve -80
-KPX Tcaron ohungarumlaut -80
-KPX Tcaron omacron -80
-KPX Tcaron oslash -80
-KPX Tcaron otilde -80
-KPX Tcaron period -80
-KPX Tcaron r -80
-KPX Tcaron racute -80
-KPX Tcaron rcommaaccent -80
-KPX Tcaron semicolon -40
-KPX Tcaron u -90
-KPX Tcaron uacute -90
-KPX Tcaron ucircumflex -90
-KPX Tcaron udieresis -90
-KPX Tcaron ugrave -90
-KPX Tcaron uhungarumlaut -90
-KPX Tcaron umacron -90
-KPX Tcaron uogonek -90
-KPX Tcaron uring -90
-KPX Tcaron w -60
-KPX Tcaron y -60
-KPX Tcaron yacute -60
-KPX Tcaron ydieresis -60
-KPX Tcommaaccent A -90
-KPX Tcommaaccent Aacute -90
-KPX Tcommaaccent Abreve -90
-KPX Tcommaaccent Acircumflex -90
-KPX Tcommaaccent Adieresis -90
-KPX Tcommaaccent Agrave -90
-KPX Tcommaaccent Amacron -90
-KPX Tcommaaccent Aogonek -90
-KPX Tcommaaccent Aring -90
-KPX Tcommaaccent Atilde -90
-KPX Tcommaaccent O -40
-KPX Tcommaaccent Oacute -40
-KPX Tcommaaccent Ocircumflex -40
-KPX Tcommaaccent Odieresis -40
-KPX Tcommaaccent Ograve -40
-KPX Tcommaaccent Ohungarumlaut -40
-KPX Tcommaaccent Omacron -40
-KPX Tcommaaccent Oslash -40
-KPX Tcommaaccent Otilde -40
-KPX Tcommaaccent a -80
-KPX Tcommaaccent aacute -80
-KPX Tcommaaccent abreve -80
-KPX Tcommaaccent acircumflex -80
-KPX Tcommaaccent adieresis -80
-KPX Tcommaaccent agrave -80
-KPX Tcommaaccent amacron -80
-KPX Tcommaaccent aogonek -80
-KPX Tcommaaccent aring -80
-KPX Tcommaaccent atilde -80
-KPX Tcommaaccent colon -40
-KPX Tcommaaccent comma -80
-KPX Tcommaaccent e -60
-KPX Tcommaaccent eacute -60
-KPX Tcommaaccent ecaron -60
-KPX Tcommaaccent ecircumflex -60
-KPX Tcommaaccent edieresis -60
-KPX Tcommaaccent edotaccent -60
-KPX Tcommaaccent egrave -60
-KPX Tcommaaccent emacron -60
-KPX Tcommaaccent eogonek -60
-KPX Tcommaaccent hyphen -120
-KPX Tcommaaccent o -80
-KPX Tcommaaccent oacute -80
-KPX Tcommaaccent ocircumflex -80
-KPX Tcommaaccent odieresis -80
-KPX Tcommaaccent ograve -80
-KPX Tcommaaccent ohungarumlaut -80
-KPX Tcommaaccent omacron -80
-KPX Tcommaaccent oslash -80
-KPX Tcommaaccent otilde -80
-KPX Tcommaaccent period -80
-KPX Tcommaaccent r -80
-KPX Tcommaaccent racute -80
-KPX Tcommaaccent rcommaaccent -80
-KPX Tcommaaccent semicolon -40
-KPX Tcommaaccent u -90
-KPX Tcommaaccent uacute -90
-KPX Tcommaaccent ucircumflex -90
-KPX Tcommaaccent udieresis -90
-KPX Tcommaaccent ugrave -90
-KPX Tcommaaccent uhungarumlaut -90
-KPX Tcommaaccent umacron -90
-KPX Tcommaaccent uogonek -90
-KPX Tcommaaccent uring -90
-KPX Tcommaaccent w -60
-KPX Tcommaaccent y -60
-KPX Tcommaaccent yacute -60
-KPX Tcommaaccent ydieresis -60
-KPX U A -50
-KPX U Aacute -50
-KPX U Abreve -50
-KPX U Acircumflex -50
-KPX U Adieresis -50
-KPX U Agrave -50
-KPX U Amacron -50
-KPX U Aogonek -50
-KPX U Aring -50
-KPX U Atilde -50
-KPX U comma -30
-KPX U period -30
-KPX Uacute A -50
-KPX Uacute Aacute -50
-KPX Uacute Abreve -50
-KPX Uacute Acircumflex -50
-KPX Uacute Adieresis -50
-KPX Uacute Agrave -50
-KPX Uacute Amacron -50
-KPX Uacute Aogonek -50
-KPX Uacute Aring -50
-KPX Uacute Atilde -50
-KPX Uacute comma -30
-KPX Uacute period -30
-KPX Ucircumflex A -50
-KPX Ucircumflex Aacute -50
-KPX Ucircumflex Abreve -50
-KPX Ucircumflex Acircumflex -50
-KPX Ucircumflex Adieresis -50
-KPX Ucircumflex Agrave -50
-KPX Ucircumflex Amacron -50
-KPX Ucircumflex Aogonek -50
-KPX Ucircumflex Aring -50
-KPX Ucircumflex Atilde -50
-KPX Ucircumflex comma -30
-KPX Ucircumflex period -30
-KPX Udieresis A -50
-KPX Udieresis Aacute -50
-KPX Udieresis Abreve -50
-KPX Udieresis Acircumflex -50
-KPX Udieresis Adieresis -50
-KPX Udieresis Agrave -50
-KPX Udieresis Amacron -50
-KPX Udieresis Aogonek -50
-KPX Udieresis Aring -50
-KPX Udieresis Atilde -50
-KPX Udieresis comma -30
-KPX Udieresis period -30
-KPX Ugrave A -50
-KPX Ugrave Aacute -50
-KPX Ugrave Abreve -50
-KPX Ugrave Acircumflex -50
-KPX Ugrave Adieresis -50
-KPX Ugrave Agrave -50
-KPX Ugrave Amacron -50
-KPX Ugrave Aogonek -50
-KPX Ugrave Aring -50
-KPX Ugrave Atilde -50
-KPX Ugrave comma -30
-KPX Ugrave period -30
-KPX Uhungarumlaut A -50
-KPX Uhungarumlaut Aacute -50
-KPX Uhungarumlaut Abreve -50
-KPX Uhungarumlaut Acircumflex -50
-KPX Uhungarumlaut Adieresis -50
-KPX Uhungarumlaut Agrave -50
-KPX Uhungarumlaut Amacron -50
-KPX Uhungarumlaut Aogonek -50
-KPX Uhungarumlaut Aring -50
-KPX Uhungarumlaut Atilde -50
-KPX Uhungarumlaut comma -30
-KPX Uhungarumlaut period -30
-KPX Umacron A -50
-KPX Umacron Aacute -50
-KPX Umacron Abreve -50
-KPX Umacron Acircumflex -50
-KPX Umacron Adieresis -50
-KPX Umacron Agrave -50
-KPX Umacron Amacron -50
-KPX Umacron Aogonek -50
-KPX Umacron Aring -50
-KPX Umacron Atilde -50
-KPX Umacron comma -30
-KPX Umacron period -30
-KPX Uogonek A -50
-KPX Uogonek Aacute -50
-KPX Uogonek Abreve -50
-KPX Uogonek Acircumflex -50
-KPX Uogonek Adieresis -50
-KPX Uogonek Agrave -50
-KPX Uogonek Amacron -50
-KPX Uogonek Aogonek -50
-KPX Uogonek Aring -50
-KPX Uogonek Atilde -50
-KPX Uogonek comma -30
-KPX Uogonek period -30
-KPX Uring A -50
-KPX Uring Aacute -50
-KPX Uring Abreve -50
-KPX Uring Acircumflex -50
-KPX Uring Adieresis -50
-KPX Uring Agrave -50
-KPX Uring Amacron -50
-KPX Uring Aogonek -50
-KPX Uring Aring -50
-KPX Uring Atilde -50
-KPX Uring comma -30
-KPX Uring period -30
-KPX V A -80
-KPX V Aacute -80
-KPX V Abreve -80
-KPX V Acircumflex -80
-KPX V Adieresis -80
-KPX V Agrave -80
-KPX V Amacron -80
-KPX V Aogonek -80
-KPX V Aring -80
-KPX V Atilde -80
-KPX V G -50
-KPX V Gbreve -50
-KPX V Gcommaaccent -50
-KPX V O -50
-KPX V Oacute -50
-KPX V Ocircumflex -50
-KPX V Odieresis -50
-KPX V Ograve -50
-KPX V Ohungarumlaut -50
-KPX V Omacron -50
-KPX V Oslash -50
-KPX V Otilde -50
-KPX V a -60
-KPX V aacute -60
-KPX V abreve -60
-KPX V acircumflex -60
-KPX V adieresis -60
-KPX V agrave -60
-KPX V amacron -60
-KPX V aogonek -60
-KPX V aring -60
-KPX V atilde -60
-KPX V colon -40
-KPX V comma -120
-KPX V e -50
-KPX V eacute -50
-KPX V ecaron -50
-KPX V ecircumflex -50
-KPX V edieresis -50
-KPX V edotaccent -50
-KPX V egrave -50
-KPX V emacron -50
-KPX V eogonek -50
-KPX V hyphen -80
-KPX V o -90
-KPX V oacute -90
-KPX V ocircumflex -90
-KPX V odieresis -90
-KPX V ograve -90
-KPX V ohungarumlaut -90
-KPX V omacron -90
-KPX V oslash -90
-KPX V otilde -90
-KPX V period -120
-KPX V semicolon -40
-KPX V u -60
-KPX V uacute -60
-KPX V ucircumflex -60
-KPX V udieresis -60
-KPX V ugrave -60
-KPX V uhungarumlaut -60
-KPX V umacron -60
-KPX V uogonek -60
-KPX V uring -60
-KPX W A -60
-KPX W Aacute -60
-KPX W Abreve -60
-KPX W Acircumflex -60
-KPX W Adieresis -60
-KPX W Agrave -60
-KPX W Amacron -60
-KPX W Aogonek -60
-KPX W Aring -60
-KPX W Atilde -60
-KPX W O -20
-KPX W Oacute -20
-KPX W Ocircumflex -20
-KPX W Odieresis -20
-KPX W Ograve -20
-KPX W Ohungarumlaut -20
-KPX W Omacron -20
-KPX W Oslash -20
-KPX W Otilde -20
-KPX W a -40
-KPX W aacute -40
-KPX W abreve -40
-KPX W acircumflex -40
-KPX W adieresis -40
-KPX W agrave -40
-KPX W amacron -40
-KPX W aogonek -40
-KPX W aring -40
-KPX W atilde -40
-KPX W colon -10
-KPX W comma -80
-KPX W e -35
-KPX W eacute -35
-KPX W ecaron -35
-KPX W ecircumflex -35
-KPX W edieresis -35
-KPX W edotaccent -35
-KPX W egrave -35
-KPX W emacron -35
-KPX W eogonek -35
-KPX W hyphen -40
-KPX W o -60
-KPX W oacute -60
-KPX W ocircumflex -60
-KPX W odieresis -60
-KPX W ograve -60
-KPX W ohungarumlaut -60
-KPX W omacron -60
-KPX W oslash -60
-KPX W otilde -60
-KPX W period -80
-KPX W semicolon -10
-KPX W u -45
-KPX W uacute -45
-KPX W ucircumflex -45
-KPX W udieresis -45
-KPX W ugrave -45
-KPX W uhungarumlaut -45
-KPX W umacron -45
-KPX W uogonek -45
-KPX W uring -45
-KPX W y -20
-KPX W yacute -20
-KPX W ydieresis -20
-KPX Y A -110
-KPX Y Aacute -110
-KPX Y Abreve -110
-KPX Y Acircumflex -110
-KPX Y Adieresis -110
-KPX Y Agrave -110
-KPX Y Amacron -110
-KPX Y Aogonek -110
-KPX Y Aring -110
-KPX Y Atilde -110
-KPX Y O -70
-KPX Y Oacute -70
-KPX Y Ocircumflex -70
-KPX Y Odieresis -70
-KPX Y Ograve -70
-KPX Y Ohungarumlaut -70
-KPX Y Omacron -70
-KPX Y Oslash -70
-KPX Y Otilde -70
-KPX Y a -90
-KPX Y aacute -90
-KPX Y abreve -90
-KPX Y acircumflex -90
-KPX Y adieresis -90
-KPX Y agrave -90
-KPX Y amacron -90
-KPX Y aogonek -90
-KPX Y aring -90
-KPX Y atilde -90
-KPX Y colon -50
-KPX Y comma -100
-KPX Y e -80
-KPX Y eacute -80
-KPX Y ecaron -80
-KPX Y ecircumflex -80
-KPX Y edieresis -80
-KPX Y edotaccent -80
-KPX Y egrave -80
-KPX Y emacron -80
-KPX Y eogonek -80
-KPX Y o -100
-KPX Y oacute -100
-KPX Y ocircumflex -100
-KPX Y odieresis -100
-KPX Y ograve -100
-KPX Y ohungarumlaut -100
-KPX Y omacron -100
-KPX Y oslash -100
-KPX Y otilde -100
-KPX Y period -100
-KPX Y semicolon -50
-KPX Y u -100
-KPX Y uacute -100
-KPX Y ucircumflex -100
-KPX Y udieresis -100
-KPX Y ugrave -100
-KPX Y uhungarumlaut -100
-KPX Y umacron -100
-KPX Y uogonek -100
-KPX Y uring -100
-KPX Yacute A -110
-KPX Yacute Aacute -110
-KPX Yacute Abreve -110
-KPX Yacute Acircumflex -110
-KPX Yacute Adieresis -110
-KPX Yacute Agrave -110
-KPX Yacute Amacron -110
-KPX Yacute Aogonek -110
-KPX Yacute Aring -110
-KPX Yacute Atilde -110
-KPX Yacute O -70
-KPX Yacute Oacute -70
-KPX Yacute Ocircumflex -70
-KPX Yacute Odieresis -70
-KPX Yacute Ograve -70
-KPX Yacute Ohungarumlaut -70
-KPX Yacute Omacron -70
-KPX Yacute Oslash -70
-KPX Yacute Otilde -70
-KPX Yacute a -90
-KPX Yacute aacute -90
-KPX Yacute abreve -90
-KPX Yacute acircumflex -90
-KPX Yacute adieresis -90
-KPX Yacute agrave -90
-KPX Yacute amacron -90
-KPX Yacute aogonek -90
-KPX Yacute aring -90
-KPX Yacute atilde -90
-KPX Yacute colon -50
-KPX Yacute comma -100
-KPX Yacute e -80
-KPX Yacute eacute -80
-KPX Yacute ecaron -80
-KPX Yacute ecircumflex -80
-KPX Yacute edieresis -80
-KPX Yacute edotaccent -80
-KPX Yacute egrave -80
-KPX Yacute emacron -80
-KPX Yacute eogonek -80
-KPX Yacute o -100
-KPX Yacute oacute -100
-KPX Yacute ocircumflex -100
-KPX Yacute odieresis -100
-KPX Yacute ograve -100
-KPX Yacute ohungarumlaut -100
-KPX Yacute omacron -100
-KPX Yacute oslash -100
-KPX Yacute otilde -100
-KPX Yacute period -100
-KPX Yacute semicolon -50
-KPX Yacute u -100
-KPX Yacute uacute -100
-KPX Yacute ucircumflex -100
-KPX Yacute udieresis -100
-KPX Yacute ugrave -100
-KPX Yacute uhungarumlaut -100
-KPX Yacute umacron -100
-KPX Yacute uogonek -100
-KPX Yacute uring -100
-KPX Ydieresis A -110
-KPX Ydieresis Aacute -110
-KPX Ydieresis Abreve -110
-KPX Ydieresis Acircumflex -110
-KPX Ydieresis Adieresis -110
-KPX Ydieresis Agrave -110
-KPX Ydieresis Amacron -110
-KPX Ydieresis Aogonek -110
-KPX Ydieresis Aring -110
-KPX Ydieresis Atilde -110
-KPX Ydieresis O -70
-KPX Ydieresis Oacute -70
-KPX Ydieresis Ocircumflex -70
-KPX Ydieresis Odieresis -70
-KPX Ydieresis Ograve -70
-KPX Ydieresis Ohungarumlaut -70
-KPX Ydieresis Omacron -70
-KPX Ydieresis Oslash -70
-KPX Ydieresis Otilde -70
-KPX Ydieresis a -90
-KPX Ydieresis aacute -90
-KPX Ydieresis abreve -90
-KPX Ydieresis acircumflex -90
-KPX Ydieresis adieresis -90
-KPX Ydieresis agrave -90
-KPX Ydieresis amacron -90
-KPX Ydieresis aogonek -90
-KPX Ydieresis aring -90
-KPX Ydieresis atilde -90
-KPX Ydieresis colon -50
-KPX Ydieresis comma -100
-KPX Ydieresis e -80
-KPX Ydieresis eacute -80
-KPX Ydieresis ecaron -80
-KPX Ydieresis ecircumflex -80
-KPX Ydieresis edieresis -80
-KPX Ydieresis edotaccent -80
-KPX Ydieresis egrave -80
-KPX Ydieresis emacron -80
-KPX Ydieresis eogonek -80
-KPX Ydieresis o -100
-KPX Ydieresis oacute -100
-KPX Ydieresis ocircumflex -100
-KPX Ydieresis odieresis -100
-KPX Ydieresis ograve -100
-KPX Ydieresis ohungarumlaut -100
-KPX Ydieresis omacron -100
-KPX Ydieresis oslash -100
-KPX Ydieresis otilde -100
-KPX Ydieresis period -100
-KPX Ydieresis semicolon -50
-KPX Ydieresis u -100
-KPX Ydieresis uacute -100
-KPX Ydieresis ucircumflex -100
-KPX Ydieresis udieresis -100
-KPX Ydieresis ugrave -100
-KPX Ydieresis uhungarumlaut -100
-KPX Ydieresis umacron -100
-KPX Ydieresis uogonek -100
-KPX Ydieresis uring -100
-KPX a g -10
-KPX a gbreve -10
-KPX a gcommaaccent -10
-KPX a v -15
-KPX a w -15
-KPX a y -20
-KPX a yacute -20
-KPX a ydieresis -20
-KPX aacute g -10
-KPX aacute gbreve -10
-KPX aacute gcommaaccent -10
-KPX aacute v -15
-KPX aacute w -15
-KPX aacute y -20
-KPX aacute yacute -20
-KPX aacute ydieresis -20
-KPX abreve g -10
-KPX abreve gbreve -10
-KPX abreve gcommaaccent -10
-KPX abreve v -15
-KPX abreve w -15
-KPX abreve y -20
-KPX abreve yacute -20
-KPX abreve ydieresis -20
-KPX acircumflex g -10
-KPX acircumflex gbreve -10
-KPX acircumflex gcommaaccent -10
-KPX acircumflex v -15
-KPX acircumflex w -15
-KPX acircumflex y -20
-KPX acircumflex yacute -20
-KPX acircumflex ydieresis -20
-KPX adieresis g -10
-KPX adieresis gbreve -10
-KPX adieresis gcommaaccent -10
-KPX adieresis v -15
-KPX adieresis w -15
-KPX adieresis y -20
-KPX adieresis yacute -20
-KPX adieresis ydieresis -20
-KPX agrave g -10
-KPX agrave gbreve -10
-KPX agrave gcommaaccent -10
-KPX agrave v -15
-KPX agrave w -15
-KPX agrave y -20
-KPX agrave yacute -20
-KPX agrave ydieresis -20
-KPX amacron g -10
-KPX amacron gbreve -10
-KPX amacron gcommaaccent -10
-KPX amacron v -15
-KPX amacron w -15
-KPX amacron y -20
-KPX amacron yacute -20
-KPX amacron ydieresis -20
-KPX aogonek g -10
-KPX aogonek gbreve -10
-KPX aogonek gcommaaccent -10
-KPX aogonek v -15
-KPX aogonek w -15
-KPX aogonek y -20
-KPX aogonek yacute -20
-KPX aogonek ydieresis -20
-KPX aring g -10
-KPX aring gbreve -10
-KPX aring gcommaaccent -10
-KPX aring v -15
-KPX aring w -15
-KPX aring y -20
-KPX aring yacute -20
-KPX aring ydieresis -20
-KPX atilde g -10
-KPX atilde gbreve -10
-KPX atilde gcommaaccent -10
-KPX atilde v -15
-KPX atilde w -15
-KPX atilde y -20
-KPX atilde yacute -20
-KPX atilde ydieresis -20
-KPX b l -10
-KPX b lacute -10
-KPX b lcommaaccent -10
-KPX b lslash -10
-KPX b u -20
-KPX b uacute -20
-KPX b ucircumflex -20
-KPX b udieresis -20
-KPX b ugrave -20
-KPX b uhungarumlaut -20
-KPX b umacron -20
-KPX b uogonek -20
-KPX b uring -20
-KPX b v -20
-KPX b y -20
-KPX b yacute -20
-KPX b ydieresis -20
-KPX c h -10
-KPX c k -20
-KPX c kcommaaccent -20
-KPX c l -20
-KPX c lacute -20
-KPX c lcommaaccent -20
-KPX c lslash -20
-KPX c y -10
-KPX c yacute -10
-KPX c ydieresis -10
-KPX cacute h -10
-KPX cacute k -20
-KPX cacute kcommaaccent -20
-KPX cacute l -20
-KPX cacute lacute -20
-KPX cacute lcommaaccent -20
-KPX cacute lslash -20
-KPX cacute y -10
-KPX cacute yacute -10
-KPX cacute ydieresis -10
-KPX ccaron h -10
-KPX ccaron k -20
-KPX ccaron kcommaaccent -20
-KPX ccaron l -20
-KPX ccaron lacute -20
-KPX ccaron lcommaaccent -20
-KPX ccaron lslash -20
-KPX ccaron y -10
-KPX ccaron yacute -10
-KPX ccaron ydieresis -10
-KPX ccedilla h -10
-KPX ccedilla k -20
-KPX ccedilla kcommaaccent -20
-KPX ccedilla l -20
-KPX ccedilla lacute -20
-KPX ccedilla lcommaaccent -20
-KPX ccedilla lslash -20
-KPX ccedilla y -10
-KPX ccedilla yacute -10
-KPX ccedilla ydieresis -10
-KPX colon space -40
-KPX comma quotedblright -120
-KPX comma quoteright -120
-KPX comma space -40
-KPX d d -10
-KPX d dcroat -10
-KPX d v -15
-KPX d w -15
-KPX d y -15
-KPX d yacute -15
-KPX d ydieresis -15
-KPX dcroat d -10
-KPX dcroat dcroat -10
-KPX dcroat v -15
-KPX dcroat w -15
-KPX dcroat y -15
-KPX dcroat yacute -15
-KPX dcroat ydieresis -15
-KPX e comma 10
-KPX e period 20
-KPX e v -15
-KPX e w -15
-KPX e x -15
-KPX e y -15
-KPX e yacute -15
-KPX e ydieresis -15
-KPX eacute comma 10
-KPX eacute period 20
-KPX eacute v -15
-KPX eacute w -15
-KPX eacute x -15
-KPX eacute y -15
-KPX eacute yacute -15
-KPX eacute ydieresis -15
-KPX ecaron comma 10
-KPX ecaron period 20
-KPX ecaron v -15
-KPX ecaron w -15
-KPX ecaron x -15
-KPX ecaron y -15
-KPX ecaron yacute -15
-KPX ecaron ydieresis -15
-KPX ecircumflex comma 10
-KPX ecircumflex period 20
-KPX ecircumflex v -15
-KPX ecircumflex w -15
-KPX ecircumflex x -15
-KPX ecircumflex y -15
-KPX ecircumflex yacute -15
-KPX ecircumflex ydieresis -15
-KPX edieresis comma 10
-KPX edieresis period 20
-KPX edieresis v -15
-KPX edieresis w -15
-KPX edieresis x -15
-KPX edieresis y -15
-KPX edieresis yacute -15
-KPX edieresis ydieresis -15
-KPX edotaccent comma 10
-KPX edotaccent period 20
-KPX edotaccent v -15
-KPX edotaccent w -15
-KPX edotaccent x -15
-KPX edotaccent y -15
-KPX edotaccent yacute -15
-KPX edotaccent ydieresis -15
-KPX egrave comma 10
-KPX egrave period 20
-KPX egrave v -15
-KPX egrave w -15
-KPX egrave x -15
-KPX egrave y -15
-KPX egrave yacute -15
-KPX egrave ydieresis -15
-KPX emacron comma 10
-KPX emacron period 20
-KPX emacron v -15
-KPX emacron w -15
-KPX emacron x -15
-KPX emacron y -15
-KPX emacron yacute -15
-KPX emacron ydieresis -15
-KPX eogonek comma 10
-KPX eogonek period 20
-KPX eogonek v -15
-KPX eogonek w -15
-KPX eogonek x -15
-KPX eogonek y -15
-KPX eogonek yacute -15
-KPX eogonek ydieresis -15
-KPX f comma -10
-KPX f e -10
-KPX f eacute -10
-KPX f ecaron -10
-KPX f ecircumflex -10
-KPX f edieresis -10
-KPX f edotaccent -10
-KPX f egrave -10
-KPX f emacron -10
-KPX f eogonek -10
-KPX f o -20
-KPX f oacute -20
-KPX f ocircumflex -20
-KPX f odieresis -20
-KPX f ograve -20
-KPX f ohungarumlaut -20
-KPX f omacron -20
-KPX f oslash -20
-KPX f otilde -20
-KPX f period -10
-KPX f quotedblright 30
-KPX f quoteright 30
-KPX g e 10
-KPX g eacute 10
-KPX g ecaron 10
-KPX g ecircumflex 10
-KPX g edieresis 10
-KPX g edotaccent 10
-KPX g egrave 10
-KPX g emacron 10
-KPX g eogonek 10
-KPX g g -10
-KPX g gbreve -10
-KPX g gcommaaccent -10
-KPX gbreve e 10
-KPX gbreve eacute 10
-KPX gbreve ecaron 10
-KPX gbreve ecircumflex 10
-KPX gbreve edieresis 10
-KPX gbreve edotaccent 10
-KPX gbreve egrave 10
-KPX gbreve emacron 10
-KPX gbreve eogonek 10
-KPX gbreve g -10
-KPX gbreve gbreve -10
-KPX gbreve gcommaaccent -10
-KPX gcommaaccent e 10
-KPX gcommaaccent eacute 10
-KPX gcommaaccent ecaron 10
-KPX gcommaaccent ecircumflex 10
-KPX gcommaaccent edieresis 10
-KPX gcommaaccent edotaccent 10
-KPX gcommaaccent egrave 10
-KPX gcommaaccent emacron 10
-KPX gcommaaccent eogonek 10
-KPX gcommaaccent g -10
-KPX gcommaaccent gbreve -10
-KPX gcommaaccent gcommaaccent -10
-KPX h y -20
-KPX h yacute -20
-KPX h ydieresis -20
-KPX k o -15
-KPX k oacute -15
-KPX k ocircumflex -15
-KPX k odieresis -15
-KPX k ograve -15
-KPX k ohungarumlaut -15
-KPX k omacron -15
-KPX k oslash -15
-KPX k otilde -15
-KPX kcommaaccent o -15
-KPX kcommaaccent oacute -15
-KPX kcommaaccent ocircumflex -15
-KPX kcommaaccent odieresis -15
-KPX kcommaaccent ograve -15
-KPX kcommaaccent ohungarumlaut -15
-KPX kcommaaccent omacron -15
-KPX kcommaaccent oslash -15
-KPX kcommaaccent otilde -15
-KPX l w -15
-KPX l y -15
-KPX l yacute -15
-KPX l ydieresis -15
-KPX lacute w -15
-KPX lacute y -15
-KPX lacute yacute -15
-KPX lacute ydieresis -15
-KPX lcommaaccent w -15
-KPX lcommaaccent y -15
-KPX lcommaaccent yacute -15
-KPX lcommaaccent ydieresis -15
-KPX lslash w -15
-KPX lslash y -15
-KPX lslash yacute -15
-KPX lslash ydieresis -15
-KPX m u -20
-KPX m uacute -20
-KPX m ucircumflex -20
-KPX m udieresis -20
-KPX m ugrave -20
-KPX m uhungarumlaut -20
-KPX m umacron -20
-KPX m uogonek -20
-KPX m uring -20
-KPX m y -30
-KPX m yacute -30
-KPX m ydieresis -30
-KPX n u -10
-KPX n uacute -10
-KPX n ucircumflex -10
-KPX n udieresis -10
-KPX n ugrave -10
-KPX n uhungarumlaut -10
-KPX n umacron -10
-KPX n uogonek -10
-KPX n uring -10
-KPX n v -40
-KPX n y -20
-KPX n yacute -20
-KPX n ydieresis -20
-KPX nacute u -10
-KPX nacute uacute -10
-KPX nacute ucircumflex -10
-KPX nacute udieresis -10
-KPX nacute ugrave -10
-KPX nacute uhungarumlaut -10
-KPX nacute umacron -10
-KPX nacute uogonek -10
-KPX nacute uring -10
-KPX nacute v -40
-KPX nacute y -20
-KPX nacute yacute -20
-KPX nacute ydieresis -20
-KPX ncaron u -10
-KPX ncaron uacute -10
-KPX ncaron ucircumflex -10
-KPX ncaron udieresis -10
-KPX ncaron ugrave -10
-KPX ncaron uhungarumlaut -10
-KPX ncaron umacron -10
-KPX ncaron uogonek -10
-KPX ncaron uring -10
-KPX ncaron v -40
-KPX ncaron y -20
-KPX ncaron yacute -20
-KPX ncaron ydieresis -20
-KPX ncommaaccent u -10
-KPX ncommaaccent uacute -10
-KPX ncommaaccent ucircumflex -10
-KPX ncommaaccent udieresis -10
-KPX ncommaaccent ugrave -10
-KPX ncommaaccent uhungarumlaut -10
-KPX ncommaaccent umacron -10
-KPX ncommaaccent uogonek -10
-KPX ncommaaccent uring -10
-KPX ncommaaccent v -40
-KPX ncommaaccent y -20
-KPX ncommaaccent yacute -20
-KPX ncommaaccent ydieresis -20
-KPX ntilde u -10
-KPX ntilde uacute -10
-KPX ntilde ucircumflex -10
-KPX ntilde udieresis -10
-KPX ntilde ugrave -10
-KPX ntilde uhungarumlaut -10
-KPX ntilde umacron -10
-KPX ntilde uogonek -10
-KPX ntilde uring -10
-KPX ntilde v -40
-KPX ntilde y -20
-KPX ntilde yacute -20
-KPX ntilde ydieresis -20
-KPX o v -20
-KPX o w -15
-KPX o x -30
-KPX o y -20
-KPX o yacute -20
-KPX o ydieresis -20
-KPX oacute v -20
-KPX oacute w -15
-KPX oacute x -30
-KPX oacute y -20
-KPX oacute yacute -20
-KPX oacute ydieresis -20
-KPX ocircumflex v -20
-KPX ocircumflex w -15
-KPX ocircumflex x -30
-KPX ocircumflex y -20
-KPX ocircumflex yacute -20
-KPX ocircumflex ydieresis -20
-KPX odieresis v -20
-KPX odieresis w -15
-KPX odieresis x -30
-KPX odieresis y -20
-KPX odieresis yacute -20
-KPX odieresis ydieresis -20
-KPX ograve v -20
-KPX ograve w -15
-KPX ograve x -30
-KPX ograve y -20
-KPX ograve yacute -20
-KPX ograve ydieresis -20
-KPX ohungarumlaut v -20
-KPX ohungarumlaut w -15
-KPX ohungarumlaut x -30
-KPX ohungarumlaut y -20
-KPX ohungarumlaut yacute -20
-KPX ohungarumlaut ydieresis -20
-KPX omacron v -20
-KPX omacron w -15
-KPX omacron x -30
-KPX omacron y -20
-KPX omacron yacute -20
-KPX omacron ydieresis -20
-KPX oslash v -20
-KPX oslash w -15
-KPX oslash x -30
-KPX oslash y -20
-KPX oslash yacute -20
-KPX oslash ydieresis -20
-KPX otilde v -20
-KPX otilde w -15
-KPX otilde x -30
-KPX otilde y -20
-KPX otilde yacute -20
-KPX otilde ydieresis -20
-KPX p y -15
-KPX p yacute -15
-KPX p ydieresis -15
-KPX period quotedblright -120
-KPX period quoteright -120
-KPX period space -40
-KPX quotedblright space -80
-KPX quoteleft quoteleft -46
-KPX quoteright d -80
-KPX quoteright dcroat -80
-KPX quoteright l -20
-KPX quoteright lacute -20
-KPX quoteright lcommaaccent -20
-KPX quoteright lslash -20
-KPX quoteright quoteright -46
-KPX quoteright r -40
-KPX quoteright racute -40
-KPX quoteright rcaron -40
-KPX quoteright rcommaaccent -40
-KPX quoteright s -60
-KPX quoteright sacute -60
-KPX quoteright scaron -60
-KPX quoteright scedilla -60
-KPX quoteright scommaaccent -60
-KPX quoteright space -80
-KPX quoteright v -20
-KPX r c -20
-KPX r cacute -20
-KPX r ccaron -20
-KPX r ccedilla -20
-KPX r comma -60
-KPX r d -20
-KPX r dcroat -20
-KPX r g -15
-KPX r gbreve -15
-KPX r gcommaaccent -15
-KPX r hyphen -20
-KPX r o -20
-KPX r oacute -20
-KPX r ocircumflex -20
-KPX r odieresis -20
-KPX r ograve -20
-KPX r ohungarumlaut -20
-KPX r omacron -20
-KPX r oslash -20
-KPX r otilde -20
-KPX r period -60
-KPX r q -20
-KPX r s -15
-KPX r sacute -15
-KPX r scaron -15
-KPX r scedilla -15
-KPX r scommaaccent -15
-KPX r t 20
-KPX r tcommaaccent 20
-KPX r v 10
-KPX r y 10
-KPX r yacute 10
-KPX r ydieresis 10
-KPX racute c -20
-KPX racute cacute -20
-KPX racute ccaron -20
-KPX racute ccedilla -20
-KPX racute comma -60
-KPX racute d -20
-KPX racute dcroat -20
-KPX racute g -15
-KPX racute gbreve -15
-KPX racute gcommaaccent -15
-KPX racute hyphen -20
-KPX racute o -20
-KPX racute oacute -20
-KPX racute ocircumflex -20
-KPX racute odieresis -20
-KPX racute ograve -20
-KPX racute ohungarumlaut -20
-KPX racute omacron -20
-KPX racute oslash -20
-KPX racute otilde -20
-KPX racute period -60
-KPX racute q -20
-KPX racute s -15
-KPX racute sacute -15
-KPX racute scaron -15
-KPX racute scedilla -15
-KPX racute scommaaccent -15
-KPX racute t 20
-KPX racute tcommaaccent 20
-KPX racute v 10
-KPX racute y 10
-KPX racute yacute 10
-KPX racute ydieresis 10
-KPX rcaron c -20
-KPX rcaron cacute -20
-KPX rcaron ccaron -20
-KPX rcaron ccedilla -20
-KPX rcaron comma -60
-KPX rcaron d -20
-KPX rcaron dcroat -20
-KPX rcaron g -15
-KPX rcaron gbreve -15
-KPX rcaron gcommaaccent -15
-KPX rcaron hyphen -20
-KPX rcaron o -20
-KPX rcaron oacute -20
-KPX rcaron ocircumflex -20
-KPX rcaron odieresis -20
-KPX rcaron ograve -20
-KPX rcaron ohungarumlaut -20
-KPX rcaron omacron -20
-KPX rcaron oslash -20
-KPX rcaron otilde -20
-KPX rcaron period -60
-KPX rcaron q -20
-KPX rcaron s -15
-KPX rcaron sacute -15
-KPX rcaron scaron -15
-KPX rcaron scedilla -15
-KPX rcaron scommaaccent -15
-KPX rcaron t 20
-KPX rcaron tcommaaccent 20
-KPX rcaron v 10
-KPX rcaron y 10
-KPX rcaron yacute 10
-KPX rcaron ydieresis 10
-KPX rcommaaccent c -20
-KPX rcommaaccent cacute -20
-KPX rcommaaccent ccaron -20
-KPX rcommaaccent ccedilla -20
-KPX rcommaaccent comma -60
-KPX rcommaaccent d -20
-KPX rcommaaccent dcroat -20
-KPX rcommaaccent g -15
-KPX rcommaaccent gbreve -15
-KPX rcommaaccent gcommaaccent -15
-KPX rcommaaccent hyphen -20
-KPX rcommaaccent o -20
-KPX rcommaaccent oacute -20
-KPX rcommaaccent ocircumflex -20
-KPX rcommaaccent odieresis -20
-KPX rcommaaccent ograve -20
-KPX rcommaaccent ohungarumlaut -20
-KPX rcommaaccent omacron -20
-KPX rcommaaccent oslash -20
-KPX rcommaaccent otilde -20
-KPX rcommaaccent period -60
-KPX rcommaaccent q -20
-KPX rcommaaccent s -15
-KPX rcommaaccent sacute -15
-KPX rcommaaccent scaron -15
-KPX rcommaaccent scedilla -15
-KPX rcommaaccent scommaaccent -15
-KPX rcommaaccent t 20
-KPX rcommaaccent tcommaaccent 20
-KPX rcommaaccent v 10
-KPX rcommaaccent y 10
-KPX rcommaaccent yacute 10
-KPX rcommaaccent ydieresis 10
-KPX s w -15
-KPX sacute w -15
-KPX scaron w -15
-KPX scedilla w -15
-KPX scommaaccent w -15
-KPX semicolon space -40
-KPX space T -100
-KPX space Tcaron -100
-KPX space Tcommaaccent -100
-KPX space V -80
-KPX space W -80
-KPX space Y -120
-KPX space Yacute -120
-KPX space Ydieresis -120
-KPX space quotedblleft -80
-KPX space quoteleft -60
-KPX v a -20
-KPX v aacute -20
-KPX v abreve -20
-KPX v acircumflex -20
-KPX v adieresis -20
-KPX v agrave -20
-KPX v amacron -20
-KPX v aogonek -20
-KPX v aring -20
-KPX v atilde -20
-KPX v comma -80
-KPX v o -30
-KPX v oacute -30
-KPX v ocircumflex -30
-KPX v odieresis -30
-KPX v ograve -30
-KPX v ohungarumlaut -30
-KPX v omacron -30
-KPX v oslash -30
-KPX v otilde -30
-KPX v period -80
-KPX w comma -40
-KPX w o -20
-KPX w oacute -20
-KPX w ocircumflex -20
-KPX w odieresis -20
-KPX w ograve -20
-KPX w ohungarumlaut -20
-KPX w omacron -20
-KPX w oslash -20
-KPX w otilde -20
-KPX w period -40
-KPX x e -10
-KPX x eacute -10
-KPX x ecaron -10
-KPX x ecircumflex -10
-KPX x edieresis -10
-KPX x edotaccent -10
-KPX x egrave -10
-KPX x emacron -10
-KPX x eogonek -10
-KPX y a -30
-KPX y aacute -30
-KPX y abreve -30
-KPX y acircumflex -30
-KPX y adieresis -30
-KPX y agrave -30
-KPX y amacron -30
-KPX y aogonek -30
-KPX y aring -30
-KPX y atilde -30
-KPX y comma -80
-KPX y e -10
-KPX y eacute -10
-KPX y ecaron -10
-KPX y ecircumflex -10
-KPX y edieresis -10
-KPX y edotaccent -10
-KPX y egrave -10
-KPX y emacron -10
-KPX y eogonek -10
-KPX y o -25
-KPX y oacute -25
-KPX y ocircumflex -25
-KPX y odieresis -25
-KPX y ograve -25
-KPX y ohungarumlaut -25
-KPX y omacron -25
-KPX y oslash -25
-KPX y otilde -25
-KPX y period -80
-KPX yacute a -30
-KPX yacute aacute -30
-KPX yacute abreve -30
-KPX yacute acircumflex -30
-KPX yacute adieresis -30
-KPX yacute agrave -30
-KPX yacute amacron -30
-KPX yacute aogonek -30
-KPX yacute aring -30
-KPX yacute atilde -30
-KPX yacute comma -80
-KPX yacute e -10
-KPX yacute eacute -10
-KPX yacute ecaron -10
-KPX yacute ecircumflex -10
-KPX yacute edieresis -10
-KPX yacute edotaccent -10
-KPX yacute egrave -10
-KPX yacute emacron -10
-KPX yacute eogonek -10
-KPX yacute o -25
-KPX yacute oacute -25
-KPX yacute ocircumflex -25
-KPX yacute odieresis -25
-KPX yacute ograve -25
-KPX yacute ohungarumlaut -25
-KPX yacute omacron -25
-KPX yacute oslash -25
-KPX yacute otilde -25
-KPX yacute period -80
-KPX ydieresis a -30
-KPX ydieresis aacute -30
-KPX ydieresis abreve -30
-KPX ydieresis acircumflex -30
-KPX ydieresis adieresis -30
-KPX ydieresis agrave -30
-KPX ydieresis amacron -30
-KPX ydieresis aogonek -30
-KPX ydieresis aring -30
-KPX ydieresis atilde -30
-KPX ydieresis comma -80
-KPX ydieresis e -10
-KPX ydieresis eacute -10
-KPX ydieresis ecaron -10
-KPX ydieresis ecircumflex -10
-KPX ydieresis edieresis -10
-KPX ydieresis edotaccent -10
-KPX ydieresis egrave -10
-KPX ydieresis emacron -10
-KPX ydieresis eogonek -10
-KPX ydieresis o -25
-KPX ydieresis oacute -25
-KPX ydieresis ocircumflex -25
-KPX ydieresis odieresis -25
-KPX ydieresis ograve -25
-KPX ydieresis ohungarumlaut -25
-KPX ydieresis omacron -25
-KPX ydieresis oslash -25
-KPX ydieresis otilde -25
-KPX ydieresis period -80
-KPX z e 10
-KPX z eacute 10
-KPX z ecaron 10
-KPX z ecircumflex 10
-KPX z edieresis 10
-KPX z edotaccent 10
-KPX z egrave 10
-KPX z emacron 10
-KPX z eogonek 10
-KPX zacute e 10
-KPX zacute eacute 10
-KPX zacute ecaron 10
-KPX zacute ecircumflex 10
-KPX zacute edieresis 10
-KPX zacute edotaccent 10
-KPX zacute egrave 10
-KPX zacute emacron 10
-KPX zacute eogonek 10
-KPX zcaron e 10
-KPX zcaron eacute 10
-KPX zcaron ecaron 10
-KPX zcaron ecircumflex 10
-KPX zcaron edieresis 10
-KPX zcaron edotaccent 10
-KPX zcaron egrave 10
-KPX zcaron emacron 10
-KPX zcaron eogonek 10
-KPX zdotaccent e 10
-KPX zdotaccent eacute 10
-KPX zdotaccent ecaron 10
-KPX zdotaccent ecircumflex 10
-KPX zdotaccent edieresis 10
-KPX zdotaccent edotaccent 10
-KPX zdotaccent egrave 10
-KPX zdotaccent emacron 10
-KPX zdotaccent eogonek 10
-EndKernPairs
-EndKernData
-EndFontMetrics
diff --git a/reporting/fonts/Helvetica-BoldOblique.afm b/reporting/fonts/Helvetica-BoldOblique.afm
deleted file mode 100644 (file)
index 1715b21..0000000
+++ /dev/null
@@ -1,2827 +0,0 @@
-StartFontMetrics 4.1
-Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
-Comment Creation Date: Thu May  1 12:45:12 1997
-Comment UniqueID 43053
-Comment VMusage 14482 68586
-FontName Helvetica-BoldOblique
-FullName Helvetica Bold Oblique
-FamilyName Helvetica
-Weight Bold
-ItalicAngle -12
-IsFixedPitch false
-CharacterSet ExtendedRoman
-FontBBox -174 -228 1114 962 
-UnderlinePosition -100
-UnderlineThickness 50
-Version 002.000
-Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
-EncodingScheme AdobeStandardEncoding
-CapHeight 718
-XHeight 532
-Ascender 718
-Descender -207
-StdHW 118
-StdVW 140
-StartCharMetrics 315
-C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 333 ; N exclam ; B 94 0 397 718 ;
-C 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ;
-C 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ;
-C 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ;
-C 37 ; WX 889 ; N percent ; B 136 -19 901 710 ;
-C 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ;
-C 39 ; WX 278 ; N quoteright ; B 167 445 362 718 ;
-C 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ;
-C 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ;
-C 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ;
-C 43 ; WX 584 ; N plus ; B 82 0 610 506 ;
-C 44 ; WX 278 ; N comma ; B 28 -168 245 146 ;
-C 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ;
-C 46 ; WX 278 ; N period ; B 64 0 245 146 ;
-C 47 ; WX 278 ; N slash ; B -37 -19 468 737 ;
-C 48 ; WX 556 ; N zero ; B 86 -19 617 710 ;
-C 49 ; WX 556 ; N one ; B 173 0 529 710 ;
-C 50 ; WX 556 ; N two ; B 26 0 619 710 ;
-C 51 ; WX 556 ; N three ; B 65 -19 608 710 ;
-C 52 ; WX 556 ; N four ; B 60 0 598 710 ;
-C 53 ; WX 556 ; N five ; B 64 -19 636 698 ;
-C 54 ; WX 556 ; N six ; B 85 -19 619 710 ;
-C 55 ; WX 556 ; N seven ; B 125 0 676 698 ;
-C 56 ; WX 556 ; N eight ; B 69 -19 616 710 ;
-C 57 ; WX 556 ; N nine ; B 78 -19 615 710 ;
-C 58 ; WX 333 ; N colon ; B 92 0 351 512 ;
-C 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ;
-C 60 ; WX 584 ; N less ; B 82 -8 655 514 ;
-C 61 ; WX 584 ; N equal ; B 58 87 633 419 ;
-C 62 ; WX 584 ; N greater ; B 36 -8 609 514 ;
-C 63 ; WX 611 ; N question ; B 165 0 671 727 ;
-C 64 ; WX 975 ; N at ; B 186 -19 954 737 ;
-C 65 ; WX 722 ; N A ; B 20 0 702 718 ;
-C 66 ; WX 722 ; N B ; B 76 0 764 718 ;
-C 67 ; WX 722 ; N C ; B 107 -19 789 737 ;
-C 68 ; WX 722 ; N D ; B 76 0 777 718 ;
-C 69 ; WX 667 ; N E ; B 76 0 757 718 ;
-C 70 ; WX 611 ; N F ; B 76 0 740 718 ;
-C 71 ; WX 778 ; N G ; B 108 -19 817 737 ;
-C 72 ; WX 722 ; N H ; B 71 0 804 718 ;
-C 73 ; WX 278 ; N I ; B 64 0 367 718 ;
-C 74 ; WX 556 ; N J ; B 60 -18 637 718 ;
-C 75 ; WX 722 ; N K ; B 87 0 858 718 ;
-C 76 ; WX 611 ; N L ; B 76 0 611 718 ;
-C 77 ; WX 833 ; N M ; B 69 0 918 718 ;
-C 78 ; WX 722 ; N N ; B 69 0 807 718 ;
-C 79 ; WX 778 ; N O ; B 107 -19 823 737 ;
-C 80 ; WX 667 ; N P ; B 76 0 738 718 ;
-C 81 ; WX 778 ; N Q ; B 107 -52 823 737 ;
-C 82 ; WX 722 ; N R ; B 76 0 778 718 ;
-C 83 ; WX 667 ; N S ; B 81 -19 718 737 ;
-C 84 ; WX 611 ; N T ; B 140 0 751 718 ;
-C 85 ; WX 722 ; N U ; B 116 -19 804 718 ;
-C 86 ; WX 667 ; N V ; B 172 0 801 718 ;
-C 87 ; WX 944 ; N W ; B 169 0 1082 718 ;
-C 88 ; WX 667 ; N X ; B 14 0 791 718 ;
-C 89 ; WX 667 ; N Y ; B 168 0 806 718 ;
-C 90 ; WX 611 ; N Z ; B 25 0 737 718 ;
-C 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ;
-C 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ;
-C 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ;
-C 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ;
-C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;
-C 96 ; WX 278 ; N quoteleft ; B 165 454 361 727 ;
-C 97 ; WX 556 ; N a ; B 55 -14 583 546 ;
-C 98 ; WX 611 ; N b ; B 61 -14 645 718 ;
-C 99 ; WX 556 ; N c ; B 79 -14 599 546 ;
-C 100 ; WX 611 ; N d ; B 82 -14 704 718 ;
-C 101 ; WX 556 ; N e ; B 70 -14 593 546 ;
-C 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ;
-C 103 ; WX 611 ; N g ; B 38 -217 666 546 ;
-C 104 ; WX 611 ; N h ; B 65 0 629 718 ;
-C 105 ; WX 278 ; N i ; B 69 0 363 725 ;
-C 106 ; WX 278 ; N j ; B -42 -214 363 725 ;
-C 107 ; WX 556 ; N k ; B 69 0 670 718 ;
-C 108 ; WX 278 ; N l ; B 69 0 362 718 ;
-C 109 ; WX 889 ; N m ; B 64 0 909 546 ;
-C 110 ; WX 611 ; N n ; B 65 0 629 546 ;
-C 111 ; WX 611 ; N o ; B 82 -14 643 546 ;
-C 112 ; WX 611 ; N p ; B 18 -207 645 546 ;
-C 113 ; WX 611 ; N q ; B 80 -207 665 546 ;
-C 114 ; WX 389 ; N r ; B 64 0 489 546 ;
-C 115 ; WX 556 ; N s ; B 63 -14 584 546 ;
-C 116 ; WX 333 ; N t ; B 100 -6 422 676 ;
-C 117 ; WX 611 ; N u ; B 98 -14 658 532 ;
-C 118 ; WX 556 ; N v ; B 126 0 656 532 ;
-C 119 ; WX 778 ; N w ; B 123 0 882 532 ;
-C 120 ; WX 556 ; N x ; B 15 0 648 532 ;
-C 121 ; WX 556 ; N y ; B 42 -214 652 532 ;
-C 122 ; WX 500 ; N z ; B 20 0 583 532 ;
-C 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ;
-C 124 ; WX 280 ; N bar ; B 36 -225 361 775 ;
-C 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ;
-C 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ;
-C 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ;
-C 162 ; WX 556 ; N cent ; B 79 -118 599 628 ;
-C 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ;
-C 164 ; WX 167 ; N fraction ; B -174 -19 487 710 ;
-C 165 ; WX 556 ; N yen ; B 60 0 713 698 ;
-C 166 ; WX 556 ; N florin ; B -50 -210 669 737 ;
-C 167 ; WX 556 ; N section ; B 61 -184 598 727 ;
-C 168 ; WX 556 ; N currency ; B 27 76 680 636 ;
-C 169 ; WX 238 ; N quotesingle ; B 165 447 321 718 ;
-C 170 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ;
-C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ;
-C 172 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ;
-C 173 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ;
-C 174 ; WX 611 ; N fi ; B 87 0 696 727 ;
-C 175 ; WX 611 ; N fl ; B 87 0 695 727 ;
-C 177 ; WX 556 ; N endash ; B 48 227 627 333 ;
-C 178 ; WX 556 ; N dagger ; B 118 -171 626 718 ;
-C 179 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ;
-C 180 ; WX 278 ; N periodcentered ; B 110 172 276 334 ;
-C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ;
-C 183 ; WX 350 ; N bullet ; B 83 194 420 524 ;
-C 184 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ;
-C 185 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ;
-C 186 ; WX 500 ; N quotedblright ; B 162 445 589 718 ;
-C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ;
-C 188 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ;
-C 189 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ;
-C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ;
-C 193 ; WX 333 ; N grave ; B 136 604 353 750 ;
-C 194 ; WX 333 ; N acute ; B 236 604 515 750 ;
-C 195 ; WX 333 ; N circumflex ; B 118 604 471 750 ;
-C 196 ; WX 333 ; N tilde ; B 113 610 507 737 ;
-C 197 ; WX 333 ; N macron ; B 122 604 483 678 ;
-C 198 ; WX 333 ; N breve ; B 156 604 494 750 ;
-C 199 ; WX 333 ; N dotaccent ; B 235 614 385 729 ;
-C 200 ; WX 333 ; N dieresis ; B 137 614 482 729 ;
-C 202 ; WX 333 ; N ring ; B 200 568 420 776 ;
-C 203 ; WX 333 ; N cedilla ; B -37 -228 220 0 ;
-C 205 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ;
-C 206 ; WX 333 ; N ogonek ; B 41 -228 264 0 ;
-C 207 ; WX 333 ; N caron ; B 149 604 502 750 ;
-C 208 ; WX 1000 ; N emdash ; B 48 227 1071 333 ;
-C 225 ; WX 1000 ; N AE ; B 5 0 1100 718 ;
-C 227 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ;
-C 232 ; WX 611 ; N Lslash ; B 34 0 611 718 ;
-C 233 ; WX 778 ; N Oslash ; B 35 -27 894 745 ;
-C 234 ; WX 1000 ; N OE ; B 99 -19 1114 737 ;
-C 235 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ;
-C 241 ; WX 889 ; N ae ; B 56 -14 923 546 ;
-C 245 ; WX 278 ; N dotlessi ; B 69 0 322 532 ;
-C 248 ; WX 278 ; N lslash ; B 40 0 407 718 ;
-C 249 ; WX 611 ; N oslash ; B 22 -29 701 560 ;
-C 250 ; WX 944 ; N oe ; B 82 -14 977 546 ;
-C 251 ; WX 611 ; N germandbls ; B 69 -14 657 731 ;
-C -1 ; WX 278 ; N Idieresis ; B 64 0 494 915 ;
-C -1 ; WX 556 ; N eacute ; B 70 -14 627 750 ;
-C -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ;
-C -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ;
-C -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ;
-C -1 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ;
-C -1 ; WX 584 ; N divide ; B 82 -42 610 548 ;
-C -1 ; WX 667 ; N Yacute ; B 168 0 806 936 ;
-C -1 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ;
-C -1 ; WX 556 ; N aacute ; B 55 -14 627 750 ;
-C -1 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ;
-C -1 ; WX 556 ; N yacute ; B 42 -214 652 750 ;
-C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ;
-C -1 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ;
-C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ;
-C -1 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ;
-C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ;
-C -1 ; WX 722 ; N Uacute ; B 116 -19 804 936 ;
-C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ;
-C -1 ; WX 667 ; N Edieresis ; B 76 0 757 915 ;
-C -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ;
-C -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ;
-C -1 ; WX 737 ; N copyright ; B 56 -19 835 737 ;
-C -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ;
-C -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ;
-C -1 ; WX 556 ; N aring ; B 55 -14 583 776 ;
-C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ;
-C -1 ; WX 278 ; N lacute ; B 69 0 528 936 ;
-C -1 ; WX 556 ; N agrave ; B 55 -14 583 750 ;
-C -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ;
-C -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ;
-C -1 ; WX 556 ; N atilde ; B 55 -14 619 737 ;
-C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ;
-C -1 ; WX 556 ; N scaron ; B 63 -14 614 750 ;
-C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ;
-C -1 ; WX 278 ; N iacute ; B 69 0 488 750 ;
-C -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ;
-C -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ;
-C -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ;
-C -1 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ;
-C -1 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ;
-C -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ;
-C -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ;
-C -1 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ;
-C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ;
-C -1 ; WX 667 ; N Thorn ; B 76 0 716 718 ;
-C -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ;
-C -1 ; WX 722 ; N Racute ; B 76 0 778 936 ;
-C -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ;
-C -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ;
-C -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ;
-C -1 ; WX 611 ; N uring ; B 98 -14 658 776 ;
-C -1 ; WX 333 ; N threesuperior ; B 91 271 441 710 ;
-C -1 ; WX 778 ; N Ograve ; B 107 -19 823 936 ;
-C -1 ; WX 722 ; N Agrave ; B 20 0 702 936 ;
-C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ;
-C -1 ; WX 584 ; N multiply ; B 57 1 635 505 ;
-C -1 ; WX 611 ; N uacute ; B 98 -14 658 750 ;
-C -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ;
-C -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ;
-C -1 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ;
-C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ;
-C -1 ; WX 278 ; N icircumflex ; B 69 0 444 750 ;
-C -1 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ;
-C -1 ; WX 556 ; N adieresis ; B 55 -14 594 729 ;
-C -1 ; WX 556 ; N edieresis ; B 70 -14 594 729 ;
-C -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ;
-C -1 ; WX 611 ; N nacute ; B 65 0 654 750 ;
-C -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ;
-C -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ;
-C -1 ; WX 278 ; N Iacute ; B 64 0 528 936 ;
-C -1 ; WX 584 ; N plusminus ; B 40 0 625 506 ;
-C -1 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ;
-C -1 ; WX 737 ; N registered ; B 55 -19 834 737 ;
-C -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ;
-C -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ;
-C -1 ; WX 600 ; N summation ; B 14 -10 670 706 ;
-C -1 ; WX 667 ; N Egrave ; B 76 0 757 936 ;
-C -1 ; WX 389 ; N racute ; B 64 0 543 750 ;
-C -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ;
-C -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ;
-C -1 ; WX 611 ; N Zcaron ; B 25 0 737 936 ;
-C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ;
-C -1 ; WX 722 ; N Eth ; B 62 0 777 718 ;
-C -1 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ;
-C -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ;
-C -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ;
-C -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ;
-C -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ;
-C -1 ; WX 722 ; N Aacute ; B 20 0 750 936 ;
-C -1 ; WX 722 ; N Adieresis ; B 20 0 716 915 ;
-C -1 ; WX 556 ; N egrave ; B 70 -14 593 750 ;
-C -1 ; WX 500 ; N zacute ; B 20 0 599 750 ;
-C -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ;
-C -1 ; WX 778 ; N Oacute ; B 107 -19 823 936 ;
-C -1 ; WX 611 ; N oacute ; B 82 -14 654 750 ;
-C -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ;
-C -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ;
-C -1 ; WX 278 ; N idieresis ; B 69 0 455 729 ;
-C -1 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ;
-C -1 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ;
-C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
-C -1 ; WX 611 ; N thorn ; B 18 -208 645 718 ;
-C -1 ; WX 333 ; N twosuperior ; B 69 283 449 710 ;
-C -1 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ;
-C -1 ; WX 611 ; N mu ; B 22 -207 658 532 ;
-C -1 ; WX 278 ; N igrave ; B 69 0 326 750 ;
-C -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ;
-C -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ;
-C -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ;
-C -1 ; WX 834 ; N threequarters ; B 99 -19 839 710 ;
-C -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ;
-C -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ;
-C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ;
-C -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ;
-C -1 ; WX 1000 ; N trademark ; B 179 306 1109 718 ;
-C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ;
-C -1 ; WX 278 ; N Igrave ; B 64 0 367 936 ;
-C -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ;
-C -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ;
-C -1 ; WX 834 ; N onehalf ; B 132 -19 858 710 ;
-C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ;
-C -1 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ;
-C -1 ; WX 611 ; N ntilde ; B 65 0 646 737 ;
-C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ;
-C -1 ; WX 667 ; N Eacute ; B 76 0 757 936 ;
-C -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ;
-C -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ;
-C -1 ; WX 834 ; N onequarter ; B 132 -19 806 710 ;
-C -1 ; WX 667 ; N Scaron ; B 81 -19 718 936 ;
-C -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ;
-C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ;
-C -1 ; WX 400 ; N degree ; B 175 426 467 712 ;
-C -1 ; WX 611 ; N ograve ; B 82 -14 643 750 ;
-C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ;
-C -1 ; WX 611 ; N ugrave ; B 98 -14 658 750 ;
-C -1 ; WX 549 ; N radical ; B 112 -46 689 850 ;
-C -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ;
-C -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ;
-C -1 ; WX 722 ; N Ntilde ; B 69 0 807 923 ;
-C -1 ; WX 611 ; N otilde ; B 82 -14 646 737 ;
-C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ;
-C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ;
-C -1 ; WX 722 ; N Atilde ; B 20 0 741 923 ;
-C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ;
-C -1 ; WX 722 ; N Aring ; B 20 0 702 962 ;
-C -1 ; WX 778 ; N Otilde ; B 107 -19 823 923 ;
-C -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ;
-C -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ;
-C -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ;
-C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ;
-C -1 ; WX 584 ; N minus ; B 82 197 610 309 ;
-C -1 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ;
-C -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ;
-C -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ;
-C -1 ; WX 584 ; N logicalnot ; B 105 108 633 419 ;
-C -1 ; WX 611 ; N odieresis ; B 82 -14 643 729 ;
-C -1 ; WX 611 ; N udieresis ; B 98 -14 658 729 ;
-C -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ;
-C -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ;
-C -1 ; WX 611 ; N eth ; B 82 -14 670 737 ;
-C -1 ; WX 500 ; N zcaron ; B 20 0 586 750 ;
-C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ;
-C -1 ; WX 333 ; N onesuperior ; B 148 283 388 710 ;
-C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ;
-C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;
-EndCharMetrics
-StartKernData
-StartKernPairs 2481
-KPX A C -40
-KPX A Cacute -40
-KPX A Ccaron -40
-KPX A Ccedilla -40
-KPX A G -50
-KPX A Gbreve -50
-KPX A Gcommaaccent -50
-KPX A O -40
-KPX A Oacute -40
-KPX A Ocircumflex -40
-KPX A Odieresis -40
-KPX A Ograve -40
-KPX A Ohungarumlaut -40
-KPX A Omacron -40
-KPX A Oslash -40
-KPX A Otilde -40
-KPX A Q -40
-KPX A T -90
-KPX A Tcaron -90
-KPX A Tcommaaccent -90
-KPX A U -50
-KPX A Uacute -50
-KPX A Ucircumflex -50
-KPX A Udieresis -50
-KPX A Ugrave -50
-KPX A Uhungarumlaut -50
-KPX A Umacron -50
-KPX A Uogonek -50
-KPX A Uring -50
-KPX A V -80
-KPX A W -60
-KPX A Y -110
-KPX A Yacute -110
-KPX A Ydieresis -110
-KPX A u -30
-KPX A uacute -30
-KPX A ucircumflex -30
-KPX A udieresis -30
-KPX A ugrave -30
-KPX A uhungarumlaut -30
-KPX A umacron -30
-KPX A uogonek -30
-KPX A uring -30
-KPX A v -40
-KPX A w -30
-KPX A y -30
-KPX A yacute -30
-KPX A ydieresis -30
-KPX Aacute C -40
-KPX Aacute Cacute -40
-KPX Aacute Ccaron -40
-KPX Aacute Ccedilla -40
-KPX Aacute G -50
-KPX Aacute Gbreve -50
-KPX Aacute Gcommaaccent -50
-KPX Aacute O -40
-KPX Aacute Oacute -40
-KPX Aacute Ocircumflex -40
-KPX Aacute Odieresis -40
-KPX Aacute Ograve -40
-KPX Aacute Ohungarumlaut -40
-KPX Aacute Omacron -40
-KPX Aacute Oslash -40
-KPX Aacute Otilde -40
-KPX Aacute Q -40
-KPX Aacute T -90
-KPX Aacute Tcaron -90
-KPX Aacute Tcommaaccent -90
-KPX Aacute U -50
-KPX Aacute Uacute -50
-KPX Aacute Ucircumflex -50
-KPX Aacute Udieresis -50
-KPX Aacute Ugrave -50
-KPX Aacute Uhungarumlaut -50
-KPX Aacute Umacron -50
-KPX Aacute Uogonek -50
-KPX Aacute Uring -50
-KPX Aacute V -80
-KPX Aacute W -60
-KPX Aacute Y -110
-KPX Aacute Yacute -110
-KPX Aacute Ydieresis -110
-KPX Aacute u -30
-KPX Aacute uacute -30
-KPX Aacute ucircumflex -30
-KPX Aacute udieresis -30
-KPX Aacute ugrave -30
-KPX Aacute uhungarumlaut -30
-KPX Aacute umacron -30
-KPX Aacute uogonek -30
-KPX Aacute uring -30
-KPX Aacute v -40
-KPX Aacute w -30
-KPX Aacute y -30
-KPX Aacute yacute -30
-KPX Aacute ydieresis -30
-KPX Abreve C -40
-KPX Abreve Cacute -40
-KPX Abreve Ccaron -40
-KPX Abreve Ccedilla -40
-KPX Abreve G -50
-KPX Abreve Gbreve -50
-KPX Abreve Gcommaaccent -50
-KPX Abreve O -40
-KPX Abreve Oacute -40
-KPX Abreve Ocircumflex -40
-KPX Abreve Odieresis -40
-KPX Abreve Ograve -40
-KPX Abreve Ohungarumlaut -40
-KPX Abreve Omacron -40
-KPX Abreve Oslash -40
-KPX Abreve Otilde -40
-KPX Abreve Q -40
-KPX Abreve T -90
-KPX Abreve Tcaron -90
-KPX Abreve Tcommaaccent -90
-KPX Abreve U -50
-KPX Abreve Uacute -50
-KPX Abreve Ucircumflex -50
-KPX Abreve Udieresis -50
-KPX Abreve Ugrave -50
-KPX Abreve Uhungarumlaut -50
-KPX Abreve Umacron -50
-KPX Abreve Uogonek -50
-KPX Abreve Uring -50
-KPX Abreve V -80
-KPX Abreve W -60
-KPX Abreve Y -110
-KPX Abreve Yacute -110
-KPX Abreve Ydieresis -110
-KPX Abreve u -30
-KPX Abreve uacute -30
-KPX Abreve ucircumflex -30
-KPX Abreve udieresis -30
-KPX Abreve ugrave -30
-KPX Abreve uhungarumlaut -30
-KPX Abreve umacron -30
-KPX Abreve uogonek -30
-KPX Abreve uring -30
-KPX Abreve v -40
-KPX Abreve w -30
-KPX Abreve y -30
-KPX Abreve yacute -30
-KPX Abreve ydieresis -30
-KPX Acircumflex C -40
-KPX Acircumflex Cacute -40
-KPX Acircumflex Ccaron -40
-KPX Acircumflex Ccedilla -40
-KPX Acircumflex G -50
-KPX Acircumflex Gbreve -50
-KPX Acircumflex Gcommaaccent -50
-KPX Acircumflex O -40
-KPX Acircumflex Oacute -40
-KPX Acircumflex Ocircumflex -40
-KPX Acircumflex Odieresis -40
-KPX Acircumflex Ograve -40
-KPX Acircumflex Ohungarumlaut -40
-KPX Acircumflex Omacron -40
-KPX Acircumflex Oslash -40
-KPX Acircumflex Otilde -40
-KPX Acircumflex Q -40
-KPX Acircumflex T -90
-KPX Acircumflex Tcaron -90
-KPX Acircumflex Tcommaaccent -90
-KPX Acircumflex U -50
-KPX Acircumflex Uacute -50
-KPX Acircumflex Ucircumflex -50
-KPX Acircumflex Udieresis -50
-KPX Acircumflex Ugrave -50
-KPX Acircumflex Uhungarumlaut -50
-KPX Acircumflex Umacron -50
-KPX Acircumflex Uogonek -50
-KPX Acircumflex Uring -50
-KPX Acircumflex V -80
-KPX Acircumflex W -60
-KPX Acircumflex Y -110
-KPX Acircumflex Yacute -110
-KPX Acircumflex Ydieresis -110
-KPX Acircumflex u -30
-KPX Acircumflex uacute -30
-KPX Acircumflex ucircumflex -30
-KPX Acircumflex udieresis -30
-KPX Acircumflex ugrave -30
-KPX Acircumflex uhungarumlaut -30
-KPX Acircumflex umacron -30
-KPX Acircumflex uogonek -30
-KPX Acircumflex uring -30
-KPX Acircumflex v -40
-KPX Acircumflex w -30
-KPX Acircumflex y -30
-KPX Acircumflex yacute -30
-KPX Acircumflex ydieresis -30
-KPX Adieresis C -40
-KPX Adieresis Cacute -40
-KPX Adieresis Ccaron -40
-KPX Adieresis Ccedilla -40
-KPX Adieresis G -50
-KPX Adieresis Gbreve -50
-KPX Adieresis Gcommaaccent -50
-KPX Adieresis O -40
-KPX Adieresis Oacute -40
-KPX Adieresis Ocircumflex -40
-KPX Adieresis Odieresis -40
-KPX Adieresis Ograve -40
-KPX Adieresis Ohungarumlaut -40
-KPX Adieresis Omacron -40
-KPX Adieresis Oslash -40
-KPX Adieresis Otilde -40
-KPX Adieresis Q -40
-KPX Adieresis T -90
-KPX Adieresis Tcaron -90
-KPX Adieresis Tcommaaccent -90
-KPX Adieresis U -50
-KPX Adieresis Uacute -50
-KPX Adieresis Ucircumflex -50
-KPX Adieresis Udieresis -50
-KPX Adieresis Ugrave -50
-KPX Adieresis Uhungarumlaut -50
-KPX Adieresis Umacron -50
-KPX Adieresis Uogonek -50
-KPX Adieresis Uring -50
-KPX Adieresis V -80
-KPX Adieresis W -60
-KPX Adieresis Y -110
-KPX Adieresis Yacute -110
-KPX Adieresis Ydieresis -110
-KPX Adieresis u -30
-KPX Adieresis uacute -30
-KPX Adieresis ucircumflex -30
-KPX Adieresis udieresis -30
-KPX Adieresis ugrave -30
-KPX Adieresis uhungarumlaut -30
-KPX Adieresis umacron -30
-KPX Adieresis uogonek -30
-KPX Adieresis uring -30
-KPX Adieresis v -40
-KPX Adieresis w -30
-KPX Adieresis y -30
-KPX Adieresis yacute -30
-KPX Adieresis ydieresis -30
-KPX Agrave C -40
-KPX Agrave Cacute -40
-KPX Agrave Ccaron -40
-KPX Agrave Ccedilla -40
-KPX Agrave G -50
-KPX Agrave Gbreve -50
-KPX Agrave Gcommaaccent -50
-KPX Agrave O -40
-KPX Agrave Oacute -40
-KPX Agrave Ocircumflex -40
-KPX Agrave Odieresis -40
-KPX Agrave Ograve -40
-KPX Agrave Ohungarumlaut -40
-KPX Agrave Omacron -40
-KPX Agrave Oslash -40
-KPX Agrave Otilde -40
-KPX Agrave Q -40
-KPX Agrave T -90
-KPX Agrave Tcaron -90
-KPX Agrave Tcommaaccent -90
-KPX Agrave U -50
-KPX Agrave Uacute -50
-KPX Agrave Ucircumflex -50
-KPX Agrave Udieresis -50
-KPX Agrave Ugrave -50
-KPX Agrave Uhungarumlaut -50
-KPX Agrave Umacron -50
-KPX Agrave Uogonek -50
-KPX Agrave Uring -50
-KPX Agrave V -80
-KPX Agrave W -60
-KPX Agrave Y -110
-KPX Agrave Yacute -110
-KPX Agrave Ydieresis -110
-KPX Agrave u -30
-KPX Agrave uacute -30
-KPX Agrave ucircumflex -30
-KPX Agrave udieresis -30
-KPX Agrave ugrave -30
-KPX Agrave uhungarumlaut -30
-KPX Agrave umacron -30
-KPX Agrave uogonek -30
-KPX Agrave uring -30
-KPX Agrave v -40
-KPX Agrave w -30
-KPX Agrave y -30
-KPX Agrave yacute -30
-KPX Agrave ydieresis -30
-KPX Amacron C -40
-KPX Amacron Cacute -40
-KPX Amacron Ccaron -40
-KPX Amacron Ccedilla -40
-KPX Amacron G -50
-KPX Amacron Gbreve -50
-KPX Amacron Gcommaaccent -50
-KPX Amacron O -40
-KPX Amacron Oacute -40
-KPX Amacron Ocircumflex -40
-KPX Amacron Odieresis -40
-KPX Amacron Ograve -40
-KPX Amacron Ohungarumlaut -40
-KPX Amacron Omacron -40
-KPX Amacron Oslash -40
-KPX Amacron Otilde -40
-KPX Amacron Q -40
-KPX Amacron T -90
-KPX Amacron Tcaron -90
-KPX Amacron Tcommaaccent -90
-KPX Amacron U -50
-KPX Amacron Uacute -50
-KPX Amacron Ucircumflex -50
-KPX Amacron Udieresis -50
-KPX Amacron Ugrave -50
-KPX Amacron Uhungarumlaut -50
-KPX Amacron Umacron -50
-KPX Amacron Uogonek -50
-KPX Amacron Uring -50
-KPX Amacron V -80
-KPX Amacron W -60
-KPX Amacron Y -110
-KPX Amacron Yacute -110
-KPX Amacron Ydieresis -110
-KPX Amacron u -30
-KPX Amacron uacute -30
-KPX Amacron ucircumflex -30
-KPX Amacron udieresis -30
-KPX Amacron ugrave -30
-KPX Amacron uhungarumlaut -30
-KPX Amacron umacron -30
-KPX Amacron uogonek -30
-KPX Amacron uring -30
-KPX Amacron v -40
-KPX Amacron w -30
-KPX Amacron y -30
-KPX Amacron yacute -30
-KPX Amacron ydieresis -30
-KPX Aogonek C -40
-KPX Aogonek Cacute -40
-KPX Aogonek Ccaron -40
-KPX Aogonek Ccedilla -40
-KPX Aogonek G -50
-KPX Aogonek Gbreve -50
-KPX Aogonek Gcommaaccent -50
-KPX Aogonek O -40
-KPX Aogonek Oacute -40
-KPX Aogonek Ocircumflex -40
-KPX Aogonek Odieresis -40
-KPX Aogonek Ograve -40
-KPX Aogonek Ohungarumlaut -40
-KPX Aogonek Omacron -40
-KPX Aogonek Oslash -40
-KPX Aogonek Otilde -40
-KPX Aogonek Q -40
-KPX Aogonek T -90
-KPX Aogonek Tcaron -90
-KPX Aogonek Tcommaaccent -90
-KPX Aogonek U -50
-KPX Aogonek Uacute -50
-KPX Aogonek Ucircumflex -50
-KPX Aogonek Udieresis -50
-KPX Aogonek Ugrave -50
-KPX Aogonek Uhungarumlaut -50
-KPX Aogonek Umacron -50
-KPX Aogonek Uogonek -50
-KPX Aogonek Uring -50
-KPX Aogonek V -80
-KPX Aogonek W -60
-KPX Aogonek Y -110
-KPX Aogonek Yacute -110
-KPX Aogonek Ydieresis -110
-KPX Aogonek u -30
-KPX Aogonek uacute -30
-KPX Aogonek ucircumflex -30
-KPX Aogonek udieresis -30
-KPX Aogonek ugrave -30
-KPX Aogonek uhungarumlaut -30
-KPX Aogonek umacron -30
-KPX Aogonek uogonek -30
-KPX Aogonek uring -30
-KPX Aogonek v -40
-KPX Aogonek w -30
-KPX Aogonek y -30
-KPX Aogonek yacute -30
-KPX Aogonek ydieresis -30
-KPX Aring C -40
-KPX Aring Cacute -40
-KPX Aring Ccaron -40
-KPX Aring Ccedilla -40
-KPX Aring G -50
-KPX Aring Gbreve -50
-KPX Aring Gcommaaccent -50
-KPX Aring O -40
-KPX Aring Oacute -40
-KPX Aring Ocircumflex -40
-KPX Aring Odieresis -40
-KPX Aring Ograve -40
-KPX Aring Ohungarumlaut -40
-KPX Aring Omacron -40
-KPX Aring Oslash -40
-KPX Aring Otilde -40
-KPX Aring Q -40
-KPX Aring T -90
-KPX Aring Tcaron -90
-KPX Aring Tcommaaccent -90
-KPX Aring U -50
-KPX Aring Uacute -50
-KPX Aring Ucircumflex -50
-KPX Aring Udieresis -50
-KPX Aring Ugrave -50
-KPX Aring Uhungarumlaut -50
-KPX Aring Umacron -50
-KPX Aring Uogonek -50
-KPX Aring Uring -50
-KPX Aring V -80
-KPX Aring W -60
-KPX Aring Y -110
-KPX Aring Yacute -110
-KPX Aring Ydieresis -110
-KPX Aring u -30
-KPX Aring uacute -30
-KPX Aring ucircumflex -30
-KPX Aring udieresis -30
-KPX Aring ugrave -30
-KPX Aring uhungarumlaut -30
-KPX Aring umacron -30
-KPX Aring uogonek -30
-KPX Aring uring -30
-KPX Aring v -40
-KPX Aring w -30
-KPX Aring y -30
-KPX Aring yacute -30
-KPX Aring ydieresis -30
-KPX Atilde C -40
-KPX Atilde Cacute -40
-KPX Atilde Ccaron -40
-KPX Atilde Ccedilla -40
-KPX Atilde G -50
-KPX Atilde Gbreve -50
-KPX Atilde Gcommaaccent -50
-KPX Atilde O -40
-KPX Atilde Oacute -40
-KPX Atilde Ocircumflex -40
-KPX Atilde Odieresis -40
-KPX Atilde Ograve -40
-KPX Atilde Ohungarumlaut -40
-KPX Atilde Omacron -40
-KPX Atilde Oslash -40
-KPX Atilde Otilde -40
-KPX Atilde Q -40
-KPX Atilde T -90
-KPX Atilde Tcaron -90
-KPX Atilde Tcommaaccent -90
-KPX Atilde U -50
-KPX Atilde Uacute -50
-KPX Atilde Ucircumflex -50
-KPX Atilde Udieresis -50
-KPX Atilde Ugrave -50
-KPX Atilde Uhungarumlaut -50
-KPX Atilde Umacron -50
-KPX Atilde Uogonek -50
-KPX Atilde Uring -50
-KPX Atilde V -80
-KPX Atilde W -60
-KPX Atilde Y -110
-KPX Atilde Yacute -110
-KPX Atilde Ydieresis -110
-KPX Atilde u -30
-KPX Atilde uacute -30
-KPX Atilde ucircumflex -30
-KPX Atilde udieresis -30
-KPX Atilde ugrave -30
-KPX Atilde uhungarumlaut -30
-KPX Atilde umacron -30
-KPX Atilde uogonek -30
-KPX Atilde uring -30
-KPX Atilde v -40
-KPX Atilde w -30
-KPX Atilde y -30
-KPX Atilde yacute -30
-KPX Atilde ydieresis -30
-KPX B A -30
-KPX B Aacute -30
-KPX B Abreve -30
-KPX B Acircumflex -30
-KPX B Adieresis -30
-KPX B Agrave -30
-KPX B Amacron -30
-KPX B Aogonek -30
-KPX B Aring -30
-KPX B Atilde -30
-KPX B U -10
-KPX B Uacute -10
-KPX B Ucircumflex -10
-KPX B Udieresis -10
-KPX B Ugrave -10
-KPX B Uhungarumlaut -10
-KPX B Umacron -10
-KPX B Uogonek -10
-KPX B Uring -10
-KPX D A -40
-KPX D Aacute -40
-KPX D Abreve -40
-KPX D Acircumflex -40
-KPX D Adieresis -40
-KPX D Agrave -40
-KPX D Amacron -40
-KPX D Aogonek -40
-KPX D Aring -40
-KPX D Atilde -40
-KPX D V -40
-KPX D W -40
-KPX D Y -70
-KPX D Yacute -70
-KPX D Ydieresis -70
-KPX D comma -30
-KPX D period -30
-KPX Dcaron A -40
-KPX Dcaron Aacute -40
-KPX Dcaron Abreve -40
-KPX Dcaron Acircumflex -40
-KPX Dcaron Adieresis -40
-KPX Dcaron Agrave -40
-KPX Dcaron Amacron -40
-KPX Dcaron Aogonek -40
-KPX Dcaron Aring -40
-KPX Dcaron Atilde -40
-KPX Dcaron V -40
-KPX Dcaron W -40
-KPX Dcaron Y -70
-KPX Dcaron Yacute -70
-KPX Dcaron Ydieresis -70
-KPX Dcaron comma -30
-KPX Dcaron period -30
-KPX Dcroat A -40
-KPX Dcroat Aacute -40
-KPX Dcroat Abreve -40
-KPX Dcroat Acircumflex -40
-KPX Dcroat Adieresis -40
-KPX Dcroat Agrave -40
-KPX Dcroat Amacron -40
-KPX Dcroat Aogonek -40
-KPX Dcroat Aring -40
-KPX Dcroat Atilde -40
-KPX Dcroat V -40
-KPX Dcroat W -40
-KPX Dcroat Y -70
-KPX Dcroat Yacute -70
-KPX Dcroat Ydieresis -70
-KPX Dcroat comma -30
-KPX Dcroat period -30
-KPX F A -80
-KPX F Aacute -80
-KPX F Abreve -80
-KPX F Acircumflex -80
-KPX F Adieresis -80
-KPX F Agrave -80
-KPX F Amacron -80
-KPX F Aogonek -80
-KPX F Aring -80
-KPX F Atilde -80
-KPX F a -20
-KPX F aacute -20
-KPX F abreve -20
-KPX F acircumflex -20
-KPX F adieresis -20
-KPX F agrave -20
-KPX F amacron -20
-KPX F aogonek -20
-KPX F aring -20
-KPX F atilde -20
-KPX F comma -100
-KPX F period -100
-KPX J A -20
-KPX J Aacute -20
-KPX J Abreve -20
-KPX J Acircumflex -20
-KPX J Adieresis -20
-KPX J Agrave -20
-KPX J Amacron -20
-KPX J Aogonek -20
-KPX J Aring -20
-KPX J Atilde -20
-KPX J comma -20
-KPX J period -20
-KPX J u -20
-KPX J uacute -20
-KPX J ucircumflex -20
-KPX J udieresis -20
-KPX J ugrave -20
-KPX J uhungarumlaut -20
-KPX J umacron -20
-KPX J uogonek -20
-KPX J uring -20
-KPX K O -30
-KPX K Oacute -30
-KPX K Ocircumflex -30
-KPX K Odieresis -30
-KPX K Ograve -30
-KPX K Ohungarumlaut -30
-KPX K Omacron -30
-KPX K Oslash -30
-KPX K Otilde -30
-KPX K e -15
-KPX K eacute -15
-KPX K ecaron -15
-KPX K ecircumflex -15
-KPX K edieresis -15
-KPX K edotaccent -15
-KPX K egrave -15
-KPX K emacron -15
-KPX K eogonek -15
-KPX K o -35
-KPX K oacute -35
-KPX K ocircumflex -35
-KPX K odieresis -35
-KPX K ograve -35
-KPX K ohungarumlaut -35
-KPX K omacron -35
-KPX K oslash -35
-KPX K otilde -35
-KPX K u -30
-KPX K uacute -30
-KPX K ucircumflex -30
-KPX K udieresis -30
-KPX K ugrave -30
-KPX K uhungarumlaut -30
-KPX K umacron -30
-KPX K uogonek -30
-KPX K uring -30
-KPX K y -40
-KPX K yacute -40
-KPX K ydieresis -40
-KPX Kcommaaccent O -30
-KPX Kcommaaccent Oacute -30
-KPX Kcommaaccent Ocircumflex -30
-KPX Kcommaaccent Odieresis -30
-KPX Kcommaaccent Ograve -30
-KPX Kcommaaccent Ohungarumlaut -30
-KPX Kcommaaccent Omacron -30
-KPX Kcommaaccent Oslash -30
-KPX Kcommaaccent Otilde -30
-KPX Kcommaaccent e -15
-KPX Kcommaaccent eacute -15
-KPX Kcommaaccent ecaron -15
-KPX Kcommaaccent ecircumflex -15
-KPX Kcommaaccent edieresis -15
-KPX Kcommaaccent edotaccent -15
-KPX Kcommaaccent egrave -15
-KPX Kcommaaccent emacron -15
-KPX Kcommaaccent eogonek -15
-KPX Kcommaaccent o -35
-KPX Kcommaaccent oacute -35
-KPX Kcommaaccent ocircumflex -35
-KPX Kcommaaccent odieresis -35
-KPX Kcommaaccent ograve -35
-KPX Kcommaaccent ohungarumlaut -35
-KPX Kcommaaccent omacron -35
-KPX Kcommaaccent oslash -35
-KPX Kcommaaccent otilde -35
-KPX Kcommaaccent u -30
-KPX Kcommaaccent uacute -30
-KPX Kcommaaccent ucircumflex -30
-KPX Kcommaaccent udieresis -30
-KPX Kcommaaccent ugrave -30
-KPX Kcommaaccent uhungarumlaut -30
-KPX Kcommaaccent umacron -30
-KPX Kcommaaccent uogonek -30
-KPX Kcommaaccent uring -30
-KPX Kcommaaccent y -40
-KPX Kcommaaccent yacute -40
-KPX Kcommaaccent ydieresis -40
-KPX L T -90
-KPX L Tcaron -90
-KPX L Tcommaaccent -90
-KPX L V -110
-KPX L W -80
-KPX L Y -120
-KPX L Yacute -120
-KPX L Ydieresis -120
-KPX L quotedblright -140
-KPX L quoteright -140
-KPX L y -30
-KPX L yacute -30
-KPX L ydieresis -30
-KPX Lacute T -90
-KPX Lacute Tcaron -90
-KPX Lacute Tcommaaccent -90
-KPX Lacute V -110
-KPX Lacute W -80
-KPX Lacute Y -120
-KPX Lacute Yacute -120
-KPX Lacute Ydieresis -120
-KPX Lacute quotedblright -140
-KPX Lacute quoteright -140
-KPX Lacute y -30
-KPX Lacute yacute -30
-KPX Lacute ydieresis -30
-KPX Lcommaaccent T -90
-KPX Lcommaaccent Tcaron -90
-KPX Lcommaaccent Tcommaaccent -90
-KPX Lcommaaccent V -110
-KPX Lcommaaccent W -80
-KPX Lcommaaccent Y -120
-KPX Lcommaaccent Yacute -120
-KPX Lcommaaccent Ydieresis -120
-KPX Lcommaaccent quotedblright -140
-KPX Lcommaaccent quoteright -140
-KPX Lcommaaccent y -30
-KPX Lcommaaccent yacute -30
-KPX Lcommaaccent ydieresis -30
-KPX Lslash T -90
-KPX Lslash Tcaron -90
-KPX Lslash Tcommaaccent -90
-KPX Lslash V -110
-KPX Lslash W -80
-KPX Lslash Y -120
-KPX Lslash Yacute -120
-KPX Lslash Ydieresis -120
-KPX Lslash quotedblright -140
-KPX Lslash quoteright -140
-KPX Lslash y -30
-KPX Lslash yacute -30
-KPX Lslash ydieresis -30
-KPX O A -50
-KPX O Aacute -50
-KPX O Abreve -50
-KPX O Acircumflex -50
-KPX O Adieresis -50
-KPX O Agrave -50
-KPX O Amacron -50
-KPX O Aogonek -50
-KPX O Aring -50
-KPX O Atilde -50
-KPX O T -40
-KPX O Tcaron -40
-KPX O Tcommaaccent -40
-KPX O V -50
-KPX O W -50
-KPX O X -50
-KPX O Y -70
-KPX O Yacute -70
-KPX O Ydieresis -70
-KPX O comma -40
-KPX O period -40
-KPX Oacute A -50
-KPX Oacute Aacute -50
-KPX Oacute Abreve -50
-KPX Oacute Acircumflex -50
-KPX Oacute Adieresis -50
-KPX Oacute Agrave -50
-KPX Oacute Amacron -50
-KPX Oacute Aogonek -50
-KPX Oacute Aring -50
-KPX Oacute Atilde -50
-KPX Oacute T -40
-KPX Oacute Tcaron -40
-KPX Oacute Tcommaaccent -40
-KPX Oacute V -50
-KPX Oacute W -50
-KPX Oacute X -50
-KPX Oacute Y -70
-KPX Oacute Yacute -70
-KPX Oacute Ydieresis -70
-KPX Oacute comma -40
-KPX Oacute period -40
-KPX Ocircumflex A -50
-KPX Ocircumflex Aacute -50
-KPX Ocircumflex Abreve -50
-KPX Ocircumflex Acircumflex -50
-KPX Ocircumflex Adieresis -50
-KPX Ocircumflex Agrave -50
-KPX Ocircumflex Amacron -50
-KPX Ocircumflex Aogonek -50
-KPX Ocircumflex Aring -50
-KPX Ocircumflex Atilde -50
-KPX Ocircumflex T -40
-KPX Ocircumflex Tcaron -40
-KPX Ocircumflex Tcommaaccent -40
-KPX Ocircumflex V -50
-KPX Ocircumflex W -50
-KPX Ocircumflex X -50
-KPX Ocircumflex Y -70
-KPX Ocircumflex Yacute -70
-KPX Ocircumflex Ydieresis -70
-KPX Ocircumflex comma -40
-KPX Ocircumflex period -40
-KPX Odieresis A -50
-KPX Odieresis Aacute -50
-KPX Odieresis Abreve -50
-KPX Odieresis Acircumflex -50
-KPX Odieresis Adieresis -50
-KPX Odieresis Agrave -50
-KPX Odieresis Amacron -50
-KPX Odieresis Aogonek -50
-KPX Odieresis Aring -50
-KPX Odieresis Atilde -50
-KPX Odieresis T -40
-KPX Odieresis Tcaron -40
-KPX Odieresis Tcommaaccent -40
-KPX Odieresis V -50
-KPX Odieresis W -50
-KPX Odieresis X -50
-KPX Odieresis Y -70
-KPX Odieresis Yacute -70
-KPX Odieresis Ydieresis -70
-KPX Odieresis comma -40
-KPX Odieresis period -40
-KPX Ograve A -50
-KPX Ograve Aacute -50
-KPX Ograve Abreve -50
-KPX Ograve Acircumflex -50
-KPX Ograve Adieresis -50
-KPX Ograve Agrave -50
-KPX Ograve Amacron -50
-KPX Ograve Aogonek -50
-KPX Ograve Aring -50
-KPX Ograve Atilde -50
-KPX Ograve T -40
-KPX Ograve Tcaron -40
-KPX Ograve Tcommaaccent -40
-KPX Ograve V -50
-KPX Ograve W -50
-KPX Ograve X -50
-KPX Ograve Y -70
-KPX Ograve Yacute -70
-KPX Ograve Ydieresis -70
-KPX Ograve comma -40
-KPX Ograve period -40
-KPX Ohungarumlaut A -50
-KPX Ohungarumlaut Aacute -50
-KPX Ohungarumlaut Abreve -50
-KPX Ohungarumlaut Acircumflex -50
-KPX Ohungarumlaut Adieresis -50
-KPX Ohungarumlaut Agrave -50
-KPX Ohungarumlaut Amacron -50
-KPX Ohungarumlaut Aogonek -50
-KPX Ohungarumlaut Aring -50
-KPX Ohungarumlaut Atilde -50
-KPX Ohungarumlaut T -40
-KPX Ohungarumlaut Tcaron -40
-KPX Ohungarumlaut Tcommaaccent -40
-KPX Ohungarumlaut V -50
-KPX Ohungarumlaut W -50
-KPX Ohungarumlaut X -50
-KPX Ohungarumlaut Y -70
-KPX Ohungarumlaut Yacute -70
-KPX Ohungarumlaut Ydieresis -70
-KPX Ohungarumlaut comma -40
-KPX Ohungarumlaut period -40
-KPX Omacron A -50
-KPX Omacron Aacute -50
-KPX Omacron Abreve -50
-KPX Omacron Acircumflex -50
-KPX Omacron Adieresis -50
-KPX Omacron Agrave -50
-KPX Omacron Amacron -50
-KPX Omacron Aogonek -50
-KPX Omacron Aring -50
-KPX Omacron Atilde -50
-KPX Omacron T -40
-KPX Omacron Tcaron -40
-KPX Omacron Tcommaaccent -40
-KPX Omacron V -50
-KPX Omacron W -50
-KPX Omacron X -50
-KPX Omacron Y -70
-KPX Omacron Yacute -70
-KPX Omacron Ydieresis -70
-KPX Omacron comma -40
-KPX Omacron period -40
-KPX Oslash A -50
-KPX Oslash Aacute -50
-KPX Oslash Abreve -50
-KPX Oslash Acircumflex -50
-KPX Oslash Adieresis -50
-KPX Oslash Agrave -50
-KPX Oslash Amacron -50
-KPX Oslash Aogonek -50
-KPX Oslash Aring -50
-KPX Oslash Atilde -50
-KPX Oslash T -40
-KPX Oslash Tcaron -40
-KPX Oslash Tcommaaccent -40
-KPX Oslash V -50
-KPX Oslash W -50
-KPX Oslash X -50
-KPX Oslash Y -70
-KPX Oslash Yacute -70
-KPX Oslash Ydieresis -70
-KPX Oslash comma -40
-KPX Oslash period -40
-KPX Otilde A -50
-KPX Otilde Aacute -50
-KPX Otilde Abreve -50
-KPX Otilde Acircumflex -50
-KPX Otilde Adieresis -50
-KPX Otilde Agrave -50
-KPX Otilde Amacron -50
-KPX Otilde Aogonek -50
-KPX Otilde Aring -50
-KPX Otilde Atilde -50
-KPX Otilde T -40
-KPX Otilde Tcaron -40
-KPX Otilde Tcommaaccent -40
-KPX Otilde V -50
-KPX Otilde W -50
-KPX Otilde X -50
-KPX Otilde Y -70
-KPX Otilde Yacute -70
-KPX Otilde Ydieresis -70
-KPX Otilde comma -40
-KPX Otilde period -40
-KPX P A -100
-KPX P Aacute -100
-KPX P Abreve -100
-KPX P Acircumflex -100
-KPX P Adieresis -100
-KPX P Agrave -100
-KPX P Amacron -100
-KPX P Aogonek -100
-KPX P Aring -100
-KPX P Atilde -100
-KPX P a -30
-KPX P aacute -30
-KPX P abreve -30
-KPX P acircumflex -30
-KPX P adieresis -30
-KPX P agrave -30
-KPX P amacron -30
-KPX P aogonek -30
-KPX P aring -30
-KPX P atilde -30
-KPX P comma -120
-KPX P e -30
-KPX P eacute -30
-KPX P ecaron -30
-KPX P ecircumflex -30
-KPX P edieresis -30
-KPX P edotaccent -30
-KPX P egrave -30
-KPX P emacron -30
-KPX P eogonek -30
-KPX P o -40
-KPX P oacute -40
-KPX P ocircumflex -40
-KPX P odieresis -40
-KPX P ograve -40
-KPX P ohungarumlaut -40
-KPX P omacron -40
-KPX P oslash -40
-KPX P otilde -40
-KPX P period -120
-KPX Q U -10
-KPX Q Uacute -10
-KPX Q Ucircumflex -10
-KPX Q Udieresis -10
-KPX Q Ugrave -10
-KPX Q Uhungarumlaut -10
-KPX Q Umacron -10
-KPX Q Uogonek -10
-KPX Q Uring -10
-KPX Q comma 20
-KPX Q period 20
-KPX R O -20
-KPX R Oacute -20
-KPX R Ocircumflex -20
-KPX R Odieresis -20
-KPX R Ograve -20
-KPX R Ohungarumlaut -20
-KPX R Omacron -20
-KPX R Oslash -20
-KPX R Otilde -20
-KPX R T -20
-KPX R Tcaron -20
-KPX R Tcommaaccent -20
-KPX R U -20
-KPX R Uacute -20
-KPX R Ucircumflex -20
-KPX R Udieresis -20
-KPX R Ugrave -20
-KPX R Uhungarumlaut -20
-KPX R Umacron -20
-KPX R Uogonek -20
-KPX R Uring -20
-KPX R V -50
-KPX R W -40
-KPX R Y -50
-KPX R Yacute -50
-KPX R Ydieresis -50
-KPX Racute O -20
-KPX Racute Oacute -20
-KPX Racute Ocircumflex -20
-KPX Racute Odieresis -20
-KPX Racute Ograve -20
-KPX Racute Ohungarumlaut -20
-KPX Racute Omacron -20
-KPX Racute Oslash -20
-KPX Racute Otilde -20
-KPX Racute T -20
-KPX Racute Tcaron -20
-KPX Racute Tcommaaccent -20
-KPX Racute U -20
-KPX Racute Uacute -20
-KPX Racute Ucircumflex -20
-KPX Racute Udieresis -20
-KPX Racute Ugrave -20
-KPX Racute Uhungarumlaut -20
-KPX Racute Umacron -20
-KPX Racute Uogonek -20
-KPX Racute Uring -20
-KPX Racute V -50
-KPX Racute W -40
-KPX Racute Y -50
-KPX Racute Yacute -50
-KPX Racute Ydieresis -50
-KPX Rcaron O -20
-KPX Rcaron Oacute -20
-KPX Rcaron Ocircumflex -20
-KPX Rcaron Odieresis -20
-KPX Rcaron Ograve -20
-KPX Rcaron Ohungarumlaut -20
-KPX Rcaron Omacron -20
-KPX Rcaron Oslash -20
-KPX Rcaron Otilde -20
-KPX Rcaron T -20
-KPX Rcaron Tcaron -20
-KPX Rcaron Tcommaaccent -20
-KPX Rcaron U -20
-KPX Rcaron Uacute -20
-KPX Rcaron Ucircumflex -20
-KPX Rcaron Udieresis -20
-KPX Rcaron Ugrave -20
-KPX Rcaron Uhungarumlaut -20
-KPX Rcaron Umacron -20
-KPX Rcaron Uogonek -20
-KPX Rcaron Uring -20
-KPX Rcaron V -50
-KPX Rcaron W -40
-KPX Rcaron Y -50
-KPX Rcaron Yacute -50
-KPX Rcaron Ydieresis -50
-KPX Rcommaaccent O -20
-KPX Rcommaaccent Oacute -20
-KPX Rcommaaccent Ocircumflex -20
-KPX Rcommaaccent Odieresis -20
-KPX Rcommaaccent Ograve -20
-KPX Rcommaaccent Ohungarumlaut -20
-KPX Rcommaaccent Omacron -20
-KPX Rcommaaccent Oslash -20
-KPX Rcommaaccent Otilde -20
-KPX Rcommaaccent T -20
-KPX Rcommaaccent Tcaron -20
-KPX Rcommaaccent Tcommaaccent -20
-KPX Rcommaaccent U -20
-KPX Rcommaaccent Uacute -20
-KPX Rcommaaccent Ucircumflex -20
-KPX Rcommaaccent Udieresis -20
-KPX Rcommaaccent Ugrave -20
-KPX Rcommaaccent Uhungarumlaut -20
-KPX Rcommaaccent Umacron -20
-KPX Rcommaaccent Uogonek -20
-KPX Rcommaaccent Uring -20
-KPX Rcommaaccent V -50
-KPX Rcommaaccent W -40
-KPX Rcommaaccent Y -50
-KPX Rcommaaccent Yacute -50
-KPX Rcommaaccent Ydieresis -50
-KPX T A -90
-KPX T Aacute -90
-KPX T Abreve -90
-KPX T Acircumflex -90
-KPX T Adieresis -90
-KPX T Agrave -90
-KPX T Amacron -90
-KPX T Aogonek -90
-KPX T Aring -90
-KPX T Atilde -90
-KPX T O -40
-KPX T Oacute -40
-KPX T Ocircumflex -40
-KPX T Odieresis -40
-KPX T Ograve -40
-KPX T Ohungarumlaut -40
-KPX T Omacron -40
-KPX T Oslash -40
-KPX T Otilde -40
-KPX T a -80
-KPX T aacute -80
-KPX T abreve -80
-KPX T acircumflex -80
-KPX T adieresis -80
-KPX T agrave -80
-KPX T amacron -80
-KPX T aogonek -80
-KPX T aring -80
-KPX T atilde -80
-KPX T colon -40
-KPX T comma -80
-KPX T e -60
-KPX T eacute -60
-KPX T ecaron -60
-KPX T ecircumflex -60
-KPX T edieresis -60
-KPX T edotaccent -60
-KPX T egrave -60
-KPX T emacron -60
-KPX T eogonek -60
-KPX T hyphen -120
-KPX T o -80
-KPX T oacute -80
-KPX T ocircumflex -80
-KPX T odieresis -80
-KPX T ograve -80
-KPX T ohungarumlaut -80
-KPX T omacron -80
-KPX T oslash -80
-KPX T otilde -80
-KPX T period -80
-KPX T r -80
-KPX T racute -80
-KPX T rcommaaccent -80
-KPX T semicolon -40
-KPX T u -90
-KPX T uacute -90
-KPX T ucircumflex -90
-KPX T udieresis -90
-KPX T ugrave -90
-KPX T uhungarumlaut -90
-KPX T umacron -90
-KPX T uogonek -90
-KPX T uring -90
-KPX T w -60
-KPX T y -60
-KPX T yacute -60
-KPX T ydieresis -60
-KPX Tcaron A -90
-KPX Tcaron Aacute -90
-KPX Tcaron Abreve -90
-KPX Tcaron Acircumflex -90
-KPX Tcaron Adieresis -90
-KPX Tcaron Agrave -90
-KPX Tcaron Amacron -90
-KPX Tcaron Aogonek -90
-KPX Tcaron Aring -90
-KPX Tcaron Atilde -90
-KPX Tcaron O -40
-KPX Tcaron Oacute -40
-KPX Tcaron Ocircumflex -40
-KPX Tcaron Odieresis -40
-KPX Tcaron Ograve -40
-KPX Tcaron Ohungarumlaut -40
-KPX Tcaron Omacron -40
-KPX Tcaron Oslash -40
-KPX Tcaron Otilde -40
-KPX Tcaron a -80
-KPX Tcaron aacute -80
-KPX Tcaron abreve -80
-KPX Tcaron acircumflex -80
-KPX Tcaron adieresis -80
-KPX Tcaron agrave -80
-KPX Tcaron amacron -80
-KPX Tcaron aogonek -80
-KPX Tcaron aring -80
-KPX Tcaron atilde -80
-KPX Tcaron colon -40
-KPX Tcaron comma -80
-KPX Tcaron e -60
-KPX Tcaron eacute -60
-KPX Tcaron ecaron -60
-KPX Tcaron ecircumflex -60
-KPX Tcaron edieresis -60
-KPX Tcaron edotaccent -60
-KPX Tcaron egrave -60
-KPX Tcaron emacron -60
-KPX Tcaron eogonek -60
-KPX Tcaron hyphen -120
-KPX Tcaron o -80
-KPX Tcaron oacute -80
-KPX Tcaron ocircumflex -80
-KPX Tcaron odieresis -80
-KPX Tcaron ograve -80
-KPX Tcaron ohungarumlaut -80
-KPX Tcaron omacron -80
-KPX Tcaron oslash -80
-KPX Tcaron otilde -80
-KPX Tcaron period -80
-KPX Tcaron r -80
-KPX Tcaron racute -80
-KPX Tcaron rcommaaccent -80
-KPX Tcaron semicolon -40
-KPX Tcaron u -90
-KPX Tcaron uacute -90
-KPX Tcaron ucircumflex -90
-KPX Tcaron udieresis -90
-KPX Tcaron ugrave -90
-KPX Tcaron uhungarumlaut -90
-KPX Tcaron umacron -90
-KPX Tcaron uogonek -90
-KPX Tcaron uring -90
-KPX Tcaron w -60
-KPX Tcaron y -60
-KPX Tcaron yacute -60
-KPX Tcaron ydieresis -60
-KPX Tcommaaccent A -90
-KPX Tcommaaccent Aacute -90
-KPX Tcommaaccent Abreve -90
-KPX Tcommaaccent Acircumflex -90
-KPX Tcommaaccent Adieresis -90
-KPX Tcommaaccent Agrave -90
-KPX Tcommaaccent Amacron -90
-KPX Tcommaaccent Aogonek -90
-KPX Tcommaaccent Aring -90
-KPX Tcommaaccent Atilde -90
-KPX Tcommaaccent O -40
-KPX Tcommaaccent Oacute -40
-KPX Tcommaaccent Ocircumflex -40
-KPX Tcommaaccent Odieresis -40
-KPX Tcommaaccent Ograve -40
-KPX Tcommaaccent Ohungarumlaut -40
-KPX Tcommaaccent Omacron -40
-KPX Tcommaaccent Oslash -40
-KPX Tcommaaccent Otilde -40
-KPX Tcommaaccent a -80
-KPX Tcommaaccent aacute -80
-KPX Tcommaaccent abreve -80
-KPX Tcommaaccent acircumflex -80
-KPX Tcommaaccent adieresis -80
-KPX Tcommaaccent agrave -80
-KPX Tcommaaccent amacron -80
-KPX Tcommaaccent aogonek -80
-KPX Tcommaaccent aring -80
-KPX Tcommaaccent atilde -80
-KPX Tcommaaccent colon -40
-KPX Tcommaaccent comma -80
-KPX Tcommaaccent e -60
-KPX Tcommaaccent eacute -60
-KPX Tcommaaccent ecaron -60
-KPX Tcommaaccent ecircumflex -60
-KPX Tcommaaccent edieresis -60
-KPX Tcommaaccent edotaccent -60
-KPX Tcommaaccent egrave -60
-KPX Tcommaaccent emacron -60
-KPX Tcommaaccent eogonek -60
-KPX Tcommaaccent hyphen -120
-KPX Tcommaaccent o -80
-KPX Tcommaaccent oacute -80
-KPX Tcommaaccent ocircumflex -80
-KPX Tcommaaccent odieresis -80
-KPX Tcommaaccent ograve -80
-KPX Tcommaaccent ohungarumlaut -80
-KPX Tcommaaccent omacron -80
-KPX Tcommaaccent oslash -80
-KPX Tcommaaccent otilde -80
-KPX Tcommaaccent period -80
-KPX Tcommaaccent r -80
-KPX Tcommaaccent racute -80
-KPX Tcommaaccent rcommaaccent -80
-KPX Tcommaaccent semicolon -40
-KPX Tcommaaccent u -90
-KPX Tcommaaccent uacute -90
-KPX Tcommaaccent ucircumflex -90
-KPX Tcommaaccent udieresis -90
-KPX Tcommaaccent ugrave -90
-KPX Tcommaaccent uhungarumlaut -90
-KPX Tcommaaccent umacron -90
-KPX Tcommaaccent uogonek -90
-KPX Tcommaaccent uring -90
-KPX Tcommaaccent w -60
-KPX Tcommaaccent y -60
-KPX Tcommaaccent yacute -60
-KPX Tcommaaccent ydieresis -60
-KPX U A -50
-KPX U Aacute -50
-KPX U Abreve -50
-KPX U Acircumflex -50
-KPX U Adieresis -50
-KPX U Agrave -50
-KPX U Amacron -50
-KPX U Aogonek -50
-KPX U Aring -50
-KPX U Atilde -50
-KPX U comma -30
-KPX U period -30
-KPX Uacute A -50
-KPX Uacute Aacute -50
-KPX Uacute Abreve -50
-KPX Uacute Acircumflex -50
-KPX Uacute Adieresis -50
-KPX Uacute Agrave -50
-KPX Uacute Amacron -50
-KPX Uacute Aogonek -50
-KPX Uacute Aring -50
-KPX Uacute Atilde -50
-KPX Uacute comma -30
-KPX Uacute period -30
-KPX Ucircumflex A -50
-KPX Ucircumflex Aacute -50
-KPX Ucircumflex Abreve -50
-KPX Ucircumflex Acircumflex -50
-KPX Ucircumflex Adieresis -50
-KPX Ucircumflex Agrave -50
-KPX Ucircumflex Amacron -50
-KPX Ucircumflex Aogonek -50
-KPX Ucircumflex Aring -50
-KPX Ucircumflex Atilde -50
-KPX Ucircumflex comma -30
-KPX Ucircumflex period -30
-KPX Udieresis A -50
-KPX Udieresis Aacute -50
-KPX Udieresis Abreve -50
-KPX Udieresis Acircumflex -50
-KPX Udieresis Adieresis -50
-KPX Udieresis Agrave -50
-KPX Udieresis Amacron -50
-KPX Udieresis Aogonek -50
-KPX Udieresis Aring -50
-KPX Udieresis Atilde -50
-KPX Udieresis comma -30
-KPX Udieresis period -30
-KPX Ugrave A -50
-KPX Ugrave Aacute -50
-KPX Ugrave Abreve -50
-KPX Ugrave Acircumflex -50
-KPX Ugrave Adieresis -50
-KPX Ugrave Agrave -50
-KPX Ugrave Amacron -50
-KPX Ugrave Aogonek -50
-KPX Ugrave Aring -50
-KPX Ugrave Atilde -50
-KPX Ugrave comma -30
-KPX Ugrave period -30
-KPX Uhungarumlaut A -50
-KPX Uhungarumlaut Aacute -50
-KPX Uhungarumlaut Abreve -50
-KPX Uhungarumlaut Acircumflex -50
-KPX Uhungarumlaut Adieresis -50
-KPX Uhungarumlaut Agrave -50
-KPX Uhungarumlaut Amacron -50
-KPX Uhungarumlaut Aogonek -50
-KPX Uhungarumlaut Aring -50
-KPX Uhungarumlaut Atilde -50
-KPX Uhungarumlaut comma -30
-KPX Uhungarumlaut period -30
-KPX Umacron A -50
-KPX Umacron Aacute -50
-KPX Umacron Abreve -50
-KPX Umacron Acircumflex -50
-KPX Umacron Adieresis -50
-KPX Umacron Agrave -50
-KPX Umacron Amacron -50
-KPX Umacron Aogonek -50
-KPX Umacron Aring -50
-KPX Umacron Atilde -50
-KPX Umacron comma -30
-KPX Umacron period -30
-KPX Uogonek A -50
-KPX Uogonek Aacute -50
-KPX Uogonek Abreve -50
-KPX Uogonek Acircumflex -50
-KPX Uogonek Adieresis -50
-KPX Uogonek Agrave -50
-KPX Uogonek Amacron -50
-KPX Uogonek Aogonek -50
-KPX Uogonek Aring -50
-KPX Uogonek Atilde -50
-KPX Uogonek comma -30
-KPX Uogonek period -30
-KPX Uring A -50
-KPX Uring Aacute -50
-KPX Uring Abreve -50
-KPX Uring Acircumflex -50
-KPX Uring Adieresis -50
-KPX Uring Agrave -50
-KPX Uring Amacron -50
-KPX Uring Aogonek -50
-KPX Uring Aring -50
-KPX Uring Atilde -50
-KPX Uring comma -30
-KPX Uring period -30
-KPX V A -80
-KPX V Aacute -80
-KPX V Abreve -80
-KPX V Acircumflex -80
-KPX V Adieresis -80
-KPX V Agrave -80
-KPX V Amacron -80
-KPX V Aogonek -80
-KPX V Aring -80
-KPX V Atilde -80
-KPX V G -50
-KPX V Gbreve -50
-KPX V Gcommaaccent -50
-KPX V O -50
-KPX V Oacute -50
-KPX V Ocircumflex -50
-KPX V Odieresis -50
-KPX V Ograve -50
-KPX V Ohungarumlaut -50
-KPX V Omacron -50
-KPX V Oslash -50
-KPX V Otilde -50
-KPX V a -60
-KPX V aacute -60
-KPX V abreve -60
-KPX V acircumflex -60
-KPX V adieresis -60
-KPX V agrave -60
-KPX V amacron -60
-KPX V aogonek -60
-KPX V aring -60
-KPX V atilde -60
-KPX V colon -40
-KPX V comma -120
-KPX V e -50
-KPX V eacute -50
-KPX V ecaron -50
-KPX V ecircumflex -50
-KPX V edieresis -50
-KPX V edotaccent -50
-KPX V egrave -50
-KPX V emacron -50
-KPX V eogonek -50
-KPX V hyphen -80
-KPX V o -90
-KPX V oacute -90
-KPX V ocircumflex -90
-KPX V odieresis -90
-KPX V ograve -90
-KPX V ohungarumlaut -90
-KPX V omacron -90
-KPX V oslash -90
-KPX V otilde -90
-KPX V period -120
-KPX V semicolon -40
-KPX V u -60
-KPX V uacute -60
-KPX V ucircumflex -60
-KPX V udieresis -60
-KPX V ugrave -60
-KPX V uhungarumlaut -60
-KPX V umacron -60
-KPX V uogonek -60
-KPX V uring -60
-KPX W A -60
-KPX W Aacute -60
-KPX W Abreve -60
-KPX W Acircumflex -60
-KPX W Adieresis -60
-KPX W Agrave -60
-KPX W Amacron -60
-KPX W Aogonek -60
-KPX W Aring -60
-KPX W Atilde -60
-KPX W O -20
-KPX W Oacute -20
-KPX W Ocircumflex -20
-KPX W Odieresis -20
-KPX W Ograve -20
-KPX W Ohungarumlaut -20
-KPX W Omacron -20
-KPX W Oslash -20
-KPX W Otilde -20
-KPX W a -40
-KPX W aacute -40
-KPX W abreve -40
-KPX W acircumflex -40
-KPX W adieresis -40
-KPX W agrave -40
-KPX W amacron -40
-KPX W aogonek -40
-KPX W aring -40
-KPX W atilde -40
-KPX W colon -10
-KPX W comma -80
-KPX W e -35
-KPX W eacute -35
-KPX W ecaron -35
-KPX W ecircumflex -35
-KPX W edieresis -35
-KPX W edotaccent -35
-KPX W egrave -35
-KPX W emacron -35
-KPX W eogonek -35
-KPX W hyphen -40
-KPX W o -60
-KPX W oacute -60
-KPX W ocircumflex -60
-KPX W odieresis -60
-KPX W ograve -60
-KPX W ohungarumlaut -60
-KPX W omacron -60
-KPX W oslash -60
-KPX W otilde -60
-KPX W period -80
-KPX W semicolon -10
-KPX W u -45
-KPX W uacute -45
-KPX W ucircumflex -45
-KPX W udieresis -45
-KPX W ugrave -45
-KPX W uhungarumlaut -45
-KPX W umacron -45
-KPX W uogonek -45
-KPX W uring -45
-KPX W y -20
-KPX W yacute -20
-KPX W ydieresis -20
-KPX Y A -110
-KPX Y Aacute -110
-KPX Y Abreve -110
-KPX Y Acircumflex -110
-KPX Y Adieresis -110
-KPX Y Agrave -110
-KPX Y Amacron -110
-KPX Y Aogonek -110
-KPX Y Aring -110
-KPX Y Atilde -110
-KPX Y O -70
-KPX Y Oacute -70
-KPX Y Ocircumflex -70
-KPX Y Odieresis -70
-KPX Y Ograve -70
-KPX Y Ohungarumlaut -70
-KPX Y Omacron -70
-KPX Y Oslash -70
-KPX Y Otilde -70
-KPX Y a -90
-KPX Y aacute -90
-KPX Y abreve -90
-KPX Y acircumflex -90
-KPX Y adieresis -90
-KPX Y agrave -90
-KPX Y amacron -90
-KPX Y aogonek -90
-KPX Y aring -90
-KPX Y atilde -90
-KPX Y colon -50
-KPX Y comma -100
-KPX Y e -80
-KPX Y eacute -80
-KPX Y ecaron -80
-KPX Y ecircumflex -80
-KPX Y edieresis -80
-KPX Y edotaccent -80
-KPX Y egrave -80
-KPX Y emacron -80
-KPX Y eogonek -80
-KPX Y o -100
-KPX Y oacute -100
-KPX Y ocircumflex -100
-KPX Y odieresis -100
-KPX Y ograve -100
-KPX Y ohungarumlaut -100
-KPX Y omacron -100
-KPX Y oslash -100
-KPX Y otilde -100
-KPX Y period -100
-KPX Y semicolon -50
-KPX Y u -100
-KPX Y uacute -100
-KPX Y ucircumflex -100
-KPX Y udieresis -100
-KPX Y ugrave -100
-KPX Y uhungarumlaut -100
-KPX Y umacron -100
-KPX Y uogonek -100
-KPX Y uring -100
-KPX Yacute A -110
-KPX Yacute Aacute -110
-KPX Yacute Abreve -110
-KPX Yacute Acircumflex -110
-KPX Yacute Adieresis -110
-KPX Yacute Agrave -110
-KPX Yacute Amacron -110
-KPX Yacute Aogonek -110
-KPX Yacute Aring -110
-KPX Yacute Atilde -110
-KPX Yacute O -70
-KPX Yacute Oacute -70
-KPX Yacute Ocircumflex -70
-KPX Yacute Odieresis -70
-KPX Yacute Ograve -70
-KPX Yacute Ohungarumlaut -70
-KPX Yacute Omacron -70
-KPX Yacute Oslash -70
-KPX Yacute Otilde -70
-KPX Yacute a -90
-KPX Yacute aacute -90
-KPX Yacute abreve -90
-KPX Yacute acircumflex -90
-KPX Yacute adieresis -90
-KPX Yacute agrave -90
-KPX Yacute amacron -90
-KPX Yacute aogonek -90
-KPX Yacute aring -90
-KPX Yacute atilde -90
-KPX Yacute colon -50
-KPX Yacute comma -100
-KPX Yacute e -80
-KPX Yacute eacute -80
-KPX Yacute ecaron -80
-KPX Yacute ecircumflex -80
-KPX Yacute edieresis -80
-KPX Yacute edotaccent -80
-KPX Yacute egrave -80
-KPX Yacute emacron -80
-KPX Yacute eogonek -80
-KPX Yacute o -100
-KPX Yacute oacute -100
-KPX Yacute ocircumflex -100
-KPX Yacute odieresis -100
-KPX Yacute ograve -100
-KPX Yacute ohungarumlaut -100
-KPX Yacute omacron -100
-KPX Yacute oslash -100
-KPX Yacute otilde -100
-KPX Yacute period -100
-KPX Yacute semicolon -50
-KPX Yacute u -100
-KPX Yacute uacute -100
-KPX Yacute ucircumflex -100
-KPX Yacute udieresis -100
-KPX Yacute ugrave -100
-KPX Yacute uhungarumlaut -100
-KPX Yacute umacron -100
-KPX Yacute uogonek -100
-KPX Yacute uring -100
-KPX Ydieresis A -110
-KPX Ydieresis Aacute -110
-KPX Ydieresis Abreve -110
-KPX Ydieresis Acircumflex -110
-KPX Ydieresis Adieresis -110
-KPX Ydieresis Agrave -110
-KPX Ydieresis Amacron -110
-KPX Ydieresis Aogonek -110
-KPX Ydieresis Aring -110
-KPX Ydieresis Atilde -110
-KPX Ydieresis O -70
-KPX Ydieresis Oacute -70
-KPX Ydieresis Ocircumflex -70
-KPX Ydieresis Odieresis -70
-KPX Ydieresis Ograve -70
-KPX Ydieresis Ohungarumlaut -70
-KPX Ydieresis Omacron -70
-KPX Ydieresis Oslash -70
-KPX Ydieresis Otilde -70
-KPX Ydieresis a -90
-KPX Ydieresis aacute -90
-KPX Ydieresis abreve -90
-KPX Ydieresis acircumflex -90
-KPX Ydieresis adieresis -90
-KPX Ydieresis agrave -90
-KPX Ydieresis amacron -90
-KPX Ydieresis aogonek -90
-KPX Ydieresis aring -90
-KPX Ydieresis atilde -90
-KPX Ydieresis colon -50
-KPX Ydieresis comma -100
-KPX Ydieresis e -80
-KPX Ydieresis eacute -80
-KPX Ydieresis ecaron -80
-KPX Ydieresis ecircumflex -80
-KPX Ydieresis edieresis -80
-KPX Ydieresis edotaccent -80
-KPX Ydieresis egrave -80
-KPX Ydieresis emacron -80
-KPX Ydieresis eogonek -80
-KPX Ydieresis o -100
-KPX Ydieresis oacute -100
-KPX Ydieresis ocircumflex -100
-KPX Ydieresis odieresis -100
-KPX Ydieresis ograve -100
-KPX Ydieresis ohungarumlaut -100
-KPX Ydieresis omacron -100
-KPX Ydieresis oslash -100
-KPX Ydieresis otilde -100
-KPX Ydieresis period -100
-KPX Ydieresis semicolon -50
-KPX Ydieresis u -100
-KPX Ydieresis uacute -100
-KPX Ydieresis ucircumflex -100
-KPX Ydieresis udieresis -100
-KPX Ydieresis ugrave -100
-KPX Ydieresis uhungarumlaut -100
-KPX Ydieresis umacron -100
-KPX Ydieresis uogonek -100
-KPX Ydieresis uring -100
-KPX a g -10
-KPX a gbreve -10
-KPX a gcommaaccent -10
-KPX a v -15
-KPX a w -15
-KPX a y -20
-KPX a yacute -20
-KPX a ydieresis -20
-KPX aacute g -10
-KPX aacute gbreve -10
-KPX aacute gcommaaccent -10
-KPX aacute v -15
-KPX aacute w -15
-KPX aacute y -20
-KPX aacute yacute -20
-KPX aacute ydieresis -20
-KPX abreve g -10
-KPX abreve gbreve -10
-KPX abreve gcommaaccent -10
-KPX abreve v -15
-KPX abreve w -15
-KPX abreve y -20
-KPX abreve yacute -20
-KPX abreve ydieresis -20
-KPX acircumflex g -10
-KPX acircumflex gbreve -10
-KPX acircumflex gcommaaccent -10
-KPX acircumflex v -15
-KPX acircumflex w -15
-KPX acircumflex y -20
-KPX acircumflex yacute -20
-KPX acircumflex ydieresis -20
-KPX adieresis g -10
-KPX adieresis gbreve -10
-KPX adieresis gcommaaccent -10
-KPX adieresis v -15
-KPX adieresis w -15
-KPX adieresis y -20
-KPX adieresis yacute -20
-KPX adieresis ydieresis -20
-KPX agrave g -10
-KPX agrave gbreve -10
-KPX agrave gcommaaccent -10
-KPX agrave v -15
-KPX agrave w -15
-KPX agrave y -20
-KPX agrave yacute -20
-KPX agrave ydieresis -20
-KPX amacron g -10
-KPX amacron gbreve -10
-KPX amacron gcommaaccent -10
-KPX amacron v -15
-KPX amacron w -15
-KPX amacron y -20
-KPX amacron yacute -20
-KPX amacron ydieresis -20
-KPX aogonek g -10
-KPX aogonek gbreve -10
-KPX aogonek gcommaaccent -10
-KPX aogonek v -15
-KPX aogonek w -15
-KPX aogonek y -20
-KPX aogonek yacute -20
-KPX aogonek ydieresis -20
-KPX aring g -10
-KPX aring gbreve -10
-KPX aring gcommaaccent -10
-KPX aring v -15
-KPX aring w -15
-KPX aring y -20
-KPX aring yacute -20
-KPX aring ydieresis -20
-KPX atilde g -10
-KPX atilde gbreve -10
-KPX atilde gcommaaccent -10
-KPX atilde v -15
-KPX atilde w -15
-KPX atilde y -20
-KPX atilde yacute -20
-KPX atilde ydieresis -20
-KPX b l -10
-KPX b lacute -10
-KPX b lcommaaccent -10
-KPX b lslash -10
-KPX b u -20
-KPX b uacute -20
-KPX b ucircumflex -20
-KPX b udieresis -20
-KPX b ugrave -20
-KPX b uhungarumlaut -20
-KPX b umacron -20
-KPX b uogonek -20
-KPX b uring -20
-KPX b v -20
-KPX b y -20
-KPX b yacute -20
-KPX b ydieresis -20
-KPX c h -10
-KPX c k -20
-KPX c kcommaaccent -20
-KPX c l -20
-KPX c lacute -20
-KPX c lcommaaccent -20
-KPX c lslash -20
-KPX c y -10
-KPX c yacute -10
-KPX c ydieresis -10
-KPX cacute h -10
-KPX cacute k -20
-KPX cacute kcommaaccent -20
-KPX cacute l -20
-KPX cacute lacute -20
-KPX cacute lcommaaccent -20
-KPX cacute lslash -20
-KPX cacute y -10
-KPX cacute yacute -10
-KPX cacute ydieresis -10
-KPX ccaron h -10
-KPX ccaron k -20
-KPX ccaron kcommaaccent -20
-KPX ccaron l -20
-KPX ccaron lacute -20
-KPX ccaron lcommaaccent -20
-KPX ccaron lslash -20
-KPX ccaron y -10
-KPX ccaron yacute -10
-KPX ccaron ydieresis -10
-KPX ccedilla h -10
-KPX ccedilla k -20
-KPX ccedilla kcommaaccent -20
-KPX ccedilla l -20
-KPX ccedilla lacute -20
-KPX ccedilla lcommaaccent -20
-KPX ccedilla lslash -20
-KPX ccedilla y -10
-KPX ccedilla yacute -10
-KPX ccedilla ydieresis -10
-KPX colon space -40
-KPX comma quotedblright -120
-KPX comma quoteright -120
-KPX comma space -40
-KPX d d -10
-KPX d dcroat -10
-KPX d v -15
-KPX d w -15
-KPX d y -15
-KPX d yacute -15
-KPX d ydieresis -15
-KPX dcroat d -10
-KPX dcroat dcroat -10
-KPX dcroat v -15
-KPX dcroat w -15
-KPX dcroat y -15
-KPX dcroat yacute -15
-KPX dcroat ydieresis -15
-KPX e comma 10
-KPX e period 20
-KPX e v -15
-KPX e w -15
-KPX e x -15
-KPX e y -15
-KPX e yacute -15
-KPX e ydieresis -15
-KPX eacute comma 10
-KPX eacute period 20
-KPX eacute v -15
-KPX eacute w -15
-KPX eacute x -15
-KPX eacute y -15
-KPX eacute yacute -15
-KPX eacute ydieresis -15
-KPX ecaron comma 10
-KPX ecaron period 20
-KPX ecaron v -15
-KPX ecaron w -15
-KPX ecaron x -15
-KPX ecaron y -15
-KPX ecaron yacute -15
-KPX ecaron ydieresis -15
-KPX ecircumflex comma 10
-KPX ecircumflex period 20
-KPX ecircumflex v -15
-KPX ecircumflex w -15
-KPX ecircumflex x -15
-KPX ecircumflex y -15
-KPX ecircumflex yacute -15
-KPX ecircumflex ydieresis -15
-KPX edieresis comma 10
-KPX edieresis period 20
-KPX edieresis v -15
-KPX edieresis w -15
-KPX edieresis x -15
-KPX edieresis y -15
-KPX edieresis yacute -15
-KPX edieresis ydieresis -15
-KPX edotaccent comma 10
-KPX edotaccent period 20
-KPX edotaccent v -15
-KPX edotaccent w -15
-KPX edotaccent x -15
-KPX edotaccent y -15
-KPX edotaccent yacute -15
-KPX edotaccent ydieresis -15
-KPX egrave comma 10
-KPX egrave period 20
-KPX egrave v -15
-KPX egrave w -15
-KPX egrave x -15
-KPX egrave y -15
-KPX egrave yacute -15
-KPX egrave ydieresis -15
-KPX emacron comma 10
-KPX emacron period 20
-KPX emacron v -15
-KPX emacron w -15
-KPX emacron x -15
-KPX emacron y -15
-KPX emacron yacute -15
-KPX emacron ydieresis -15
-KPX eogonek comma 10
-KPX eogonek period 20
-KPX eogonek v -15
-KPX eogonek w -15
-KPX eogonek x -15
-KPX eogonek y -15
-KPX eogonek yacute -15
-KPX eogonek ydieresis -15
-KPX f comma -10
-KPX f e -10
-KPX f eacute -10
-KPX f ecaron -10
-KPX f ecircumflex -10
-KPX f edieresis -10
-KPX f edotaccent -10
-KPX f egrave -10
-KPX f emacron -10
-KPX f eogonek -10
-KPX f o -20
-KPX f oacute -20
-KPX f ocircumflex -20
-KPX f odieresis -20
-KPX f ograve -20
-KPX f ohungarumlaut -20
-KPX f omacron -20
-KPX f oslash -20
-KPX f otilde -20
-KPX f period -10
-KPX f quotedblright 30
-KPX f quoteright 30
-KPX g e 10
-KPX g eacute 10
-KPX g ecaron 10
-KPX g ecircumflex 10
-KPX g edieresis 10
-KPX g edotaccent 10
-KPX g egrave 10
-KPX g emacron 10
-KPX g eogonek 10
-KPX g g -10
-KPX g gbreve -10
-KPX g gcommaaccent -10
-KPX gbreve e 10
-KPX gbreve eacute 10
-KPX gbreve ecaron 10
-KPX gbreve ecircumflex 10
-KPX gbreve edieresis 10
-KPX gbreve edotaccent 10
-KPX gbreve egrave 10
-KPX gbreve emacron 10
-KPX gbreve eogonek 10
-KPX gbreve g -10
-KPX gbreve gbreve -10
-KPX gbreve gcommaaccent -10
-KPX gcommaaccent e 10
-KPX gcommaaccent eacute 10
-KPX gcommaaccent ecaron 10
-KPX gcommaaccent ecircumflex 10
-KPX gcommaaccent edieresis 10
-KPX gcommaaccent edotaccent 10
-KPX gcommaaccent egrave 10
-KPX gcommaaccent emacron 10
-KPX gcommaaccent eogonek 10
-KPX gcommaaccent g -10
-KPX gcommaaccent gbreve -10
-KPX gcommaaccent gcommaaccent -10
-KPX h y -20
-KPX h yacute -20
-KPX h ydieresis -20
-KPX k o -15
-KPX k oacute -15
-KPX k ocircumflex -15
-KPX k odieresis -15
-KPX k ograve -15
-KPX k ohungarumlaut -15
-KPX k omacron -15
-KPX k oslash -15
-KPX k otilde -15
-KPX kcommaaccent o -15
-KPX kcommaaccent oacute -15
-KPX kcommaaccent ocircumflex -15
-KPX kcommaaccent odieresis -15
-KPX kcommaaccent ograve -15
-KPX kcommaaccent ohungarumlaut -15
-KPX kcommaaccent omacron -15
-KPX kcommaaccent oslash -15
-KPX kcommaaccent otilde -15
-KPX l w -15
-KPX l y -15
-KPX l yacute -15
-KPX l ydieresis -15
-KPX lacute w -15
-KPX lacute y -15
-KPX lacute yacute -15
-KPX lacute ydieresis -15
-KPX lcommaaccent w -15
-KPX lcommaaccent y -15
-KPX lcommaaccent yacute -15
-KPX lcommaaccent ydieresis -15
-KPX lslash w -15
-KPX lslash y -15
-KPX lslash yacute -15
-KPX lslash ydieresis -15
-KPX m u -20
-KPX m uacute -20
-KPX m ucircumflex -20
-KPX m udieresis -20
-KPX m ugrave -20
-KPX m uhungarumlaut -20
-KPX m umacron -20
-KPX m uogonek -20
-KPX m uring -20
-KPX m y -30
-KPX m yacute -30
-KPX m ydieresis -30
-KPX n u -10
-KPX n uacute -10
-KPX n ucircumflex -10
-KPX n udieresis -10
-KPX n ugrave -10
-KPX n uhungarumlaut -10
-KPX n umacron -10
-KPX n uogonek -10
-KPX n uring -10
-KPX n v -40
-KPX n y -20
-KPX n yacute -20
-KPX n ydieresis -20
-KPX nacute u -10
-KPX nacute uacute -10
-KPX nacute ucircumflex -10
-KPX nacute udieresis -10
-KPX nacute ugrave -10
-KPX nacute uhungarumlaut -10
-KPX nacute umacron -10
-KPX nacute uogonek -10
-KPX nacute uring -10
-KPX nacute v -40
-KPX nacute y -20
-KPX nacute yacute -20
-KPX nacute ydieresis -20
-KPX ncaron u -10
-KPX ncaron uacute -10
-KPX ncaron ucircumflex -10
-KPX ncaron udieresis -10
-KPX ncaron ugrave -10
-KPX ncaron uhungarumlaut -10
-KPX ncaron umacron -10
-KPX ncaron uogonek -10
-KPX ncaron uring -10
-KPX ncaron v -40
-KPX ncaron y -20
-KPX ncaron yacute -20
-KPX ncaron ydieresis -20
-KPX ncommaaccent u -10
-KPX ncommaaccent uacute -10
-KPX ncommaaccent ucircumflex -10
-KPX ncommaaccent udieresis -10
-KPX ncommaaccent ugrave -10
-KPX ncommaaccent uhungarumlaut -10
-KPX ncommaaccent umacron -10
-KPX ncommaaccent uogonek -10
-KPX ncommaaccent uring -10
-KPX ncommaaccent v -40
-KPX ncommaaccent y -20
-KPX ncommaaccent yacute -20
-KPX ncommaaccent ydieresis -20
-KPX ntilde u -10
-KPX ntilde uacute -10
-KPX ntilde ucircumflex -10
-KPX ntilde udieresis -10
-KPX ntilde ugrave -10
-KPX ntilde uhungarumlaut -10
-KPX ntilde umacron -10
-KPX ntilde uogonek -10
-KPX ntilde uring -10
-KPX ntilde v -40
-KPX ntilde y -20
-KPX ntilde yacute -20
-KPX ntilde ydieresis -20
-KPX o v -20
-KPX o w -15
-KPX o x -30
-KPX o y -20
-KPX o yacute -20
-KPX o ydieresis -20
-KPX oacute v -20
-KPX oacute w -15
-KPX oacute x -30
-KPX oacute y -20
-KPX oacute yacute -20
-KPX oacute ydieresis -20
-KPX ocircumflex v -20
-KPX ocircumflex w -15
-KPX ocircumflex x -30
-KPX ocircumflex y -20
-KPX ocircumflex yacute -20
-KPX ocircumflex ydieresis -20
-KPX odieresis v -20
-KPX odieresis w -15
-KPX odieresis x -30
-KPX odieresis y -20
-KPX odieresis yacute -20
-KPX odieresis ydieresis -20
-KPX ograve v -20
-KPX ograve w -15
-KPX ograve x -30
-KPX ograve y -20
-KPX ograve yacute -20
-KPX ograve ydieresis -20
-KPX ohungarumlaut v -20
-KPX ohungarumlaut w -15
-KPX ohungarumlaut x -30
-KPX ohungarumlaut y -20
-KPX ohungarumlaut yacute -20
-KPX ohungarumlaut ydieresis -20
-KPX omacron v -20
-KPX omacron w -15
-KPX omacron x -30
-KPX omacron y -20
-KPX omacron yacute -20
-KPX omacron ydieresis -20
-KPX oslash v -20
-KPX oslash w -15
-KPX oslash x -30
-KPX oslash y -20
-KPX oslash yacute -20
-KPX oslash ydieresis -20
-KPX otilde v -20
-KPX otilde w -15
-KPX otilde x -30
-KPX otilde y -20
-KPX otilde yacute -20
-KPX otilde ydieresis -20
-KPX p y -15
-KPX p yacute -15
-KPX p ydieresis -15
-KPX period quotedblright -120
-KPX period quoteright -120
-KPX period space -40
-KPX quotedblright space -80
-KPX quoteleft quoteleft -46
-KPX quoteright d -80
-KPX quoteright dcroat -80
-KPX quoteright l -20
-KPX quoteright lacute -20
-KPX quoteright lcommaaccent -20
-KPX quoteright lslash -20
-KPX quoteright quoteright -46
-KPX quoteright r -40
-KPX quoteright racute -40
-KPX quoteright rcaron -40
-KPX quoteright rcommaaccent -40
-KPX quoteright s -60
-KPX quoteright sacute -60
-KPX quoteright scaron -60
-KPX quoteright scedilla -60
-KPX quoteright scommaaccent -60
-KPX quoteright space -80
-KPX quoteright v -20
-KPX r c -20
-KPX r cacute -20
-KPX r ccaron -20
-KPX r ccedilla -20
-KPX r comma -60
-KPX r d -20
-KPX r dcroat -20
-KPX r g -15
-KPX r gbreve -15
-KPX r gcommaaccent -15
-KPX r hyphen -20
-KPX r o -20
-KPX r oacute -20
-KPX r ocircumflex -20
-KPX r odieresis -20
-KPX r ograve -20
-KPX r ohungarumlaut -20
-KPX r omacron -20
-KPX r oslash -20
-KPX r otilde -20
-KPX r period -60
-KPX r q -20
-KPX r s -15
-KPX r sacute -15
-KPX r scaron -15
-KPX r scedilla -15
-KPX r scommaaccent -15
-KPX r t 20
-KPX r tcommaaccent 20
-KPX r v 10
-KPX r y 10
-KPX r yacute 10
-KPX r ydieresis 10
-KPX racute c -20
-KPX racute cacute -20
-KPX racute ccaron -20
-KPX racute ccedilla -20
-KPX racute comma -60
-KPX racute d -20
-KPX racute dcroat -20
-KPX racute g -15
-KPX racute gbreve -15
-KPX racute gcommaaccent -15
-KPX racute hyphen -20
-KPX racute o -20
-KPX racute oacute -20
-KPX racute ocircumflex -20
-KPX racute odieresis -20
-KPX racute ograve -20
-KPX racute ohungarumlaut -20
-KPX racute omacron -20
-KPX racute oslash -20
-KPX racute otilde -20
-KPX racute period -60
-KPX racute q -20
-KPX racute s -15
-KPX racute sacute -15
-KPX racute scaron -15
-KPX racute scedilla -15
-KPX racute scommaaccent -15
-KPX racute t 20
-KPX racute tcommaaccent 20
-KPX racute v 10
-KPX racute y 10
-KPX racute yacute 10
-KPX racute ydieresis 10
-KPX rcaron c -20
-KPX rcaron cacute -20
-KPX rcaron ccaron -20
-KPX rcaron ccedilla -20
-KPX rcaron comma -60
-KPX rcaron d -20
-KPX rcaron dcroat -20
-KPX rcaron g -15
-KPX rcaron gbreve -15
-KPX rcaron gcommaaccent -15
-KPX rcaron hyphen -20
-KPX rcaron o -20
-KPX rcaron oacute -20
-KPX rcaron ocircumflex -20
-KPX rcaron odieresis -20
-KPX rcaron ograve -20
-KPX rcaron ohungarumlaut -20
-KPX rcaron omacron -20
-KPX rcaron oslash -20
-KPX rcaron otilde -20
-KPX rcaron period -60
-KPX rcaron q -20
-KPX rcaron s -15
-KPX rcaron sacute -15
-KPX rcaron scaron -15
-KPX rcaron scedilla -15
-KPX rcaron scommaaccent -15
-KPX rcaron t 20
-KPX rcaron tcommaaccent 20
-KPX rcaron v 10
-KPX rcaron y 10
-KPX rcaron yacute 10
-KPX rcaron ydieresis 10
-KPX rcommaaccent c -20
-KPX rcommaaccent cacute -20
-KPX rcommaaccent ccaron -20
-KPX rcommaaccent ccedilla -20
-KPX rcommaaccent comma -60
-KPX rcommaaccent d -20
-KPX rcommaaccent dcroat -20
-KPX rcommaaccent g -15
-KPX rcommaaccent gbreve -15
-KPX rcommaaccent gcommaaccent -15
-KPX rcommaaccent hyphen -20
-KPX rcommaaccent o -20
-KPX rcommaaccent oacute -20
-KPX rcommaaccent ocircumflex -20
-KPX rcommaaccent odieresis -20
-KPX rcommaaccent ograve -20
-KPX rcommaaccent ohungarumlaut -20
-KPX rcommaaccent omacron -20
-KPX rcommaaccent oslash -20
-KPX rcommaaccent otilde -20
-KPX rcommaaccent period -60
-KPX rcommaaccent q -20
-KPX rcommaaccent s -15
-KPX rcommaaccent sacute -15
-KPX rcommaaccent scaron -15
-KPX rcommaaccent scedilla -15
-KPX rcommaaccent scommaaccent -15
-KPX rcommaaccent t 20
-KPX rcommaaccent tcommaaccent 20
-KPX rcommaaccent v 10
-KPX rcommaaccent y 10
-KPX rcommaaccent yacute 10
-KPX rcommaaccent ydieresis 10
-KPX s w -15
-KPX sacute w -15
-KPX scaron w -15
-KPX scedilla w -15
-KPX scommaaccent w -15
-KPX semicolon space -40
-KPX space T -100
-KPX space Tcaron -100
-KPX space Tcommaaccent -100
-KPX space V -80
-KPX space W -80
-KPX space Y -120
-KPX space Yacute -120
-KPX space Ydieresis -120
-KPX space quotedblleft -80
-KPX space quoteleft -60
-KPX v a -20
-KPX v aacute -20
-KPX v abreve -20
-KPX v acircumflex -20
-KPX v adieresis -20
-KPX v agrave -20
-KPX v amacron -20
-KPX v aogonek -20
-KPX v aring -20
-KPX v atilde -20
-KPX v comma -80
-KPX v o -30
-KPX v oacute -30
-KPX v ocircumflex -30
-KPX v odieresis -30
-KPX v ograve -30
-KPX v ohungarumlaut -30
-KPX v omacron -30
-KPX v oslash -30
-KPX v otilde -30
-KPX v period -80
-KPX w comma -40
-KPX w o -20
-KPX w oacute -20
-KPX w ocircumflex -20
-KPX w odieresis -20
-KPX w ograve -20
-KPX w ohungarumlaut -20
-KPX w omacron -20
-KPX w oslash -20
-KPX w otilde -20
-KPX w period -40
-KPX x e -10
-KPX x eacute -10
-KPX x ecaron -10
-KPX x ecircumflex -10
-KPX x edieresis -10
-KPX x edotaccent -10
-KPX x egrave -10
-KPX x emacron -10
-KPX x eogonek -10
-KPX y a -30
-KPX y aacute -30
-KPX y abreve -30
-KPX y acircumflex -30
-KPX y adieresis -30
-KPX y agrave -30
-KPX y amacron -30
-KPX y aogonek -30
-KPX y aring -30
-KPX y atilde -30
-KPX y comma -80
-KPX y e -10
-KPX y eacute -10
-KPX y ecaron -10
-KPX y ecircumflex -10
-KPX y edieresis -10
-KPX y edotaccent -10
-KPX y egrave -10
-KPX y emacron -10
-KPX y eogonek -10
-KPX y o -25
-KPX y oacute -25
-KPX y ocircumflex -25
-KPX y odieresis -25
-KPX y ograve -25
-KPX y ohungarumlaut -25
-KPX y omacron -25
-KPX y oslash -25
-KPX y otilde -25
-KPX y period -80
-KPX yacute a -30
-KPX yacute aacute -30
-KPX yacute abreve -30
-KPX yacute acircumflex -30
-KPX yacute adieresis -30
-KPX yacute agrave -30
-KPX yacute amacron -30
-KPX yacute aogonek -30
-KPX yacute aring -30
-KPX yacute atilde -30
-KPX yacute comma -80
-KPX yacute e -10
-KPX yacute eacute -10
-KPX yacute ecaron -10
-KPX yacute ecircumflex -10
-KPX yacute edieresis -10
-KPX yacute edotaccent -10
-KPX yacute egrave -10
-KPX yacute emacron -10
-KPX yacute eogonek -10
-KPX yacute o -25
-KPX yacute oacute -25
-KPX yacute ocircumflex -25
-KPX yacute odieresis -25
-KPX yacute ograve -25
-KPX yacute ohungarumlaut -25
-KPX yacute omacron -25
-KPX yacute oslash -25
-KPX yacute otilde -25
-KPX yacute period -80
-KPX ydieresis a -30
-KPX ydieresis aacute -30
-KPX ydieresis abreve -30
-KPX ydieresis acircumflex -30
-KPX ydieresis adieresis -30
-KPX ydieresis agrave -30
-KPX ydieresis amacron -30
-KPX ydieresis aogonek -30
-KPX ydieresis aring -30
-KPX ydieresis atilde -30
-KPX ydieresis comma -80
-KPX ydieresis e -10
-KPX ydieresis eacute -10
-KPX ydieresis ecaron -10
-KPX ydieresis ecircumflex -10
-KPX ydieresis edieresis -10
-KPX ydieresis edotaccent -10
-KPX ydieresis egrave -10
-KPX ydieresis emacron -10
-KPX ydieresis eogonek -10
-KPX ydieresis o -25
-KPX ydieresis oacute -25
-KPX ydieresis ocircumflex -25
-KPX ydieresis odieresis -25
-KPX ydieresis ograve -25
-KPX ydieresis ohungarumlaut -25
-KPX ydieresis omacron -25
-KPX ydieresis oslash -25
-KPX ydieresis otilde -25
-KPX ydieresis period -80
-KPX z e 10
-KPX z eacute 10
-KPX z ecaron 10
-KPX z ecircumflex 10
-KPX z edieresis 10
-KPX z edotaccent 10
-KPX z egrave 10
-KPX z emacron 10
-KPX z eogonek 10
-KPX zacute e 10
-KPX zacute eacute 10
-KPX zacute ecaron 10
-KPX zacute ecircumflex 10
-KPX zacute edieresis 10
-KPX zacute edotaccent 10
-KPX zacute egrave 10
-KPX zacute emacron 10
-KPX zacute eogonek 10
-KPX zcaron e 10
-KPX zcaron eacute 10
-KPX zcaron ecaron 10
-KPX zcaron ecircumflex 10
-KPX zcaron edieresis 10
-KPX zcaron edotaccent 10
-KPX zcaron egrave 10
-KPX zcaron emacron 10
-KPX zcaron eogonek 10
-KPX zdotaccent e 10
-KPX zdotaccent eacute 10
-KPX zdotaccent ecaron 10
-KPX zdotaccent ecircumflex 10
-KPX zdotaccent edieresis 10
-KPX zdotaccent edotaccent 10
-KPX zdotaccent egrave 10
-KPX zdotaccent emacron 10
-KPX zdotaccent eogonek 10
-EndKernPairs
-EndKernData
-EndFontMetrics
diff --git a/reporting/fonts/Helvetica-Oblique.afm b/reporting/fonts/Helvetica-Oblique.afm
deleted file mode 100644 (file)
index 7a7af00..0000000
+++ /dev/null
@@ -1,3051 +0,0 @@
-StartFontMetrics 4.1
-Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
-Comment Creation Date: Thu May  1 12:44:31 1997
-Comment UniqueID 43055
-Comment VMusage 14960 69346
-FontName Helvetica-Oblique
-FullName Helvetica Oblique
-FamilyName Helvetica
-Weight Medium
-ItalicAngle -12
-IsFixedPitch false
-CharacterSet ExtendedRoman
-FontBBox -170 -225 1116 931 
-UnderlinePosition -100
-UnderlineThickness 50
-Version 002.000
-Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
-EncodingScheme AdobeStandardEncoding
-CapHeight 718
-XHeight 523
-Ascender 718
-Descender -207
-StdHW 76
-StdVW 88
-StartCharMetrics 315
-C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 278 ; N exclam ; B 90 0 340 718 ;
-C 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ;
-C 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ;
-C 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ;
-C 37 ; WX 889 ; N percent ; B 147 -19 889 703 ;
-C 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ;
-C 39 ; WX 222 ; N quoteright ; B 151 463 310 718 ;
-C 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ;
-C 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ;
-C 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ;
-C 43 ; WX 584 ; N plus ; B 85 0 606 505 ;
-C 44 ; WX 278 ; N comma ; B 56 -147 214 106 ;
-C 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ;
-C 46 ; WX 278 ; N period ; B 87 0 214 106 ;
-C 47 ; WX 278 ; N slash ; B -21 -19 452 737 ;
-C 48 ; WX 556 ; N zero ; B 93 -19 608 703 ;
-C 49 ; WX 556 ; N one ; B 207 0 508 703 ;
-C 50 ; WX 556 ; N two ; B 26 0 617 703 ;
-C 51 ; WX 556 ; N three ; B 75 -19 610 703 ;
-C 52 ; WX 556 ; N four ; B 61 0 576 703 ;
-C 53 ; WX 556 ; N five ; B 68 -19 621 688 ;
-C 54 ; WX 556 ; N six ; B 91 -19 615 703 ;
-C 55 ; WX 556 ; N seven ; B 137 0 669 688 ;
-C 56 ; WX 556 ; N eight ; B 74 -19 607 703 ;
-C 57 ; WX 556 ; N nine ; B 82 -19 609 703 ;
-C 58 ; WX 278 ; N colon ; B 87 0 301 516 ;
-C 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ;
-C 60 ; WX 584 ; N less ; B 94 11 641 495 ;
-C 61 ; WX 584 ; N equal ; B 63 115 628 390 ;
-C 62 ; WX 584 ; N greater ; B 50 11 597 495 ;
-C 63 ; WX 556 ; N question ; B 161 0 610 727 ;
-C 64 ; WX 1015 ; N at ; B 215 -19 965 737 ;
-C 65 ; WX 667 ; N A ; B 14 0 654 718 ;
-C 66 ; WX 667 ; N B ; B 74 0 712 718 ;
-C 67 ; WX 722 ; N C ; B 108 -19 782 737 ;
-C 68 ; WX 722 ; N D ; B 81 0 764 718 ;
-C 69 ; WX 667 ; N E ; B 86 0 762 718 ;
-C 70 ; WX 611 ; N F ; B 86 0 736 718 ;
-C 71 ; WX 778 ; N G ; B 111 -19 799 737 ;
-C 72 ; WX 722 ; N H ; B 77 0 799 718 ;
-C 73 ; WX 278 ; N I ; B 91 0 341 718 ;
-C 74 ; WX 500 ; N J ; B 47 -19 581 718 ;
-C 75 ; WX 667 ; N K ; B 76 0 808 718 ;
-C 76 ; WX 556 ; N L ; B 76 0 555 718 ;
-C 77 ; WX 833 ; N M ; B 73 0 914 718 ;
-C 78 ; WX 722 ; N N ; B 76 0 799 718 ;
-C 79 ; WX 778 ; N O ; B 105 -19 826 737 ;
-C 80 ; WX 667 ; N P ; B 86 0 737 718 ;
-C 81 ; WX 778 ; N Q ; B 105 -56 826 737 ;
-C 82 ; WX 722 ; N R ; B 88 0 773 718 ;
-C 83 ; WX 667 ; N S ; B 90 -19 713 737 ;
-C 84 ; WX 611 ; N T ; B 148 0 750 718 ;
-C 85 ; WX 722 ; N U ; B 123 -19 797 718 ;
-C 86 ; WX 667 ; N V ; B 173 0 800 718 ;
-C 87 ; WX 944 ; N W ; B 169 0 1081 718 ;
-C 88 ; WX 667 ; N X ; B 19 0 790 718 ;
-C 89 ; WX 667 ; N Y ; B 167 0 806 718 ;
-C 90 ; WX 611 ; N Z ; B 23 0 741 718 ;
-C 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ;
-C 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ;
-C 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ;
-C 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ;
-C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;
-C 96 ; WX 222 ; N quoteleft ; B 165 470 323 725 ;
-C 97 ; WX 556 ; N a ; B 61 -15 559 538 ;
-C 98 ; WX 556 ; N b ; B 58 -15 584 718 ;
-C 99 ; WX 500 ; N c ; B 74 -15 553 538 ;
-C 100 ; WX 556 ; N d ; B 84 -15 652 718 ;
-C 101 ; WX 556 ; N e ; B 84 -15 578 538 ;
-C 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ;
-C 103 ; WX 556 ; N g ; B 42 -220 610 538 ;
-C 104 ; WX 556 ; N h ; B 65 0 573 718 ;
-C 105 ; WX 222 ; N i ; B 67 0 308 718 ;
-C 106 ; WX 222 ; N j ; B -60 -210 308 718 ;
-C 107 ; WX 500 ; N k ; B 67 0 600 718 ;
-C 108 ; WX 222 ; N l ; B 67 0 308 718 ;
-C 109 ; WX 833 ; N m ; B 65 0 852 538 ;
-C 110 ; WX 556 ; N n ; B 65 0 573 538 ;
-C 111 ; WX 556 ; N o ; B 83 -14 585 538 ;
-C 112 ; WX 556 ; N p ; B 14 -207 584 538 ;
-C 113 ; WX 556 ; N q ; B 84 -207 605 538 ;
-C 114 ; WX 333 ; N r ; B 77 0 446 538 ;
-C 115 ; WX 500 ; N s ; B 63 -15 529 538 ;
-C 116 ; WX 278 ; N t ; B 102 -7 368 669 ;
-C 117 ; WX 556 ; N u ; B 94 -15 600 523 ;
-C 118 ; WX 500 ; N v ; B 119 0 603 523 ;
-C 119 ; WX 722 ; N w ; B 125 0 820 523 ;
-C 120 ; WX 500 ; N x ; B 11 0 594 523 ;
-C 121 ; WX 500 ; N y ; B 15 -214 600 523 ;
-C 122 ; WX 500 ; N z ; B 31 0 571 523 ;
-C 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ;
-C 124 ; WX 260 ; N bar ; B 46 -225 332 775 ;
-C 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ;
-C 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ;
-C 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ;
-C 162 ; WX 556 ; N cent ; B 95 -115 584 623 ;
-C 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ;
-C 164 ; WX 167 ; N fraction ; B -170 -19 482 703 ;
-C 165 ; WX 556 ; N yen ; B 81 0 699 688 ;
-C 166 ; WX 556 ; N florin ; B -52 -207 654 737 ;
-C 167 ; WX 556 ; N section ; B 76 -191 584 737 ;
-C 168 ; WX 556 ; N currency ; B 60 99 646 603 ;
-C 169 ; WX 191 ; N quotesingle ; B 157 463 285 718 ;
-C 170 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ;
-C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ;
-C 172 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ;
-C 173 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ;
-C 174 ; WX 500 ; N fi ; B 86 0 587 728 ;
-C 175 ; WX 500 ; N fl ; B 86 0 585 728 ;
-C 177 ; WX 556 ; N endash ; B 51 240 623 313 ;
-C 178 ; WX 556 ; N dagger ; B 135 -159 622 718 ;
-C 179 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ;
-C 180 ; WX 278 ; N periodcentered ; B 129 190 257 315 ;
-C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ;
-C 183 ; WX 350 ; N bullet ; B 91 202 413 517 ;
-C 184 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ;
-C 185 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ;
-C 186 ; WX 333 ; N quotedblright ; B 124 463 448 718 ;
-C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ;
-C 188 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ;
-C 189 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ;
-C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ;
-C 193 ; WX 333 ; N grave ; B 170 593 337 734 ;
-C 194 ; WX 333 ; N acute ; B 248 593 475 734 ;
-C 195 ; WX 333 ; N circumflex ; B 147 593 438 734 ;
-C 196 ; WX 333 ; N tilde ; B 125 606 490 722 ;
-C 197 ; WX 333 ; N macron ; B 143 627 468 684 ;
-C 198 ; WX 333 ; N breve ; B 167 595 476 731 ;
-C 199 ; WX 333 ; N dotaccent ; B 249 604 362 706 ;
-C 200 ; WX 333 ; N dieresis ; B 168 604 443 706 ;
-C 202 ; WX 333 ; N ring ; B 214 572 402 756 ;
-C 203 ; WX 333 ; N cedilla ; B 2 -225 232 0 ;
-C 205 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ;
-C 206 ; WX 333 ; N ogonek ; B 43 -225 249 0 ;
-C 207 ; WX 333 ; N caron ; B 177 593 468 734 ;
-C 208 ; WX 1000 ; N emdash ; B 51 240 1067 313 ;
-C 225 ; WX 1000 ; N AE ; B 8 0 1097 718 ;
-C 227 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ;
-C 232 ; WX 556 ; N Lslash ; B 41 0 555 718 ;
-C 233 ; WX 778 ; N Oslash ; B 43 -19 890 737 ;
-C 234 ; WX 1000 ; N OE ; B 98 -19 1116 737 ;
-C 235 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ;
-C 241 ; WX 889 ; N ae ; B 61 -15 909 538 ;
-C 245 ; WX 278 ; N dotlessi ; B 95 0 294 523 ;
-C 248 ; WX 222 ; N lslash ; B 41 0 347 718 ;
-C 249 ; WX 611 ; N oslash ; B 29 -22 647 545 ;
-C 250 ; WX 944 ; N oe ; B 83 -15 964 538 ;
-C 251 ; WX 611 ; N germandbls ; B 67 -15 658 728 ;
-C -1 ; WX 278 ; N Idieresis ; B 91 0 458 901 ;
-C -1 ; WX 556 ; N eacute ; B 84 -15 587 734 ;
-C -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ;
-C -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ;
-C -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ;
-C -1 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ;
-C -1 ; WX 584 ; N divide ; B 85 -19 606 524 ;
-C -1 ; WX 667 ; N Yacute ; B 167 0 806 929 ;
-C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;
-C -1 ; WX 556 ; N aacute ; B 61 -15 587 734 ;
-C -1 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ;
-C -1 ; WX 500 ; N yacute ; B 15 -214 600 734 ;
-C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ;
-C -1 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ;
-C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ;
-C -1 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ;
-C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ;
-C -1 ; WX 722 ; N Uacute ; B 123 -19 797 929 ;
-C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ;
-C -1 ; WX 667 ; N Edieresis ; B 86 0 762 901 ;
-C -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ;
-C -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ;
-C -1 ; WX 737 ; N copyright ; B 54 -19 837 737 ;
-C -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ;
-C -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ;
-C -1 ; WX 556 ; N aring ; B 61 -15 559 756 ;
-C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ;
-C -1 ; WX 222 ; N lacute ; B 67 0 461 929 ;
-C -1 ; WX 556 ; N agrave ; B 61 -15 559 734 ;
-C -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ;
-C -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ;
-C -1 ; WX 556 ; N atilde ; B 61 -15 592 722 ;
-C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ;
-C -1 ; WX 500 ; N scaron ; B 63 -15 552 734 ;
-C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ;
-C -1 ; WX 278 ; N iacute ; B 95 0 448 734 ;
-C -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ;
-C -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ;
-C -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ;
-C -1 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ;
-C -1 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ;
-C -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ;
-C -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ;
-C -1 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ;
-C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ;
-C -1 ; WX 667 ; N Thorn ; B 86 0 712 718 ;
-C -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ;
-C -1 ; WX 722 ; N Racute ; B 88 0 773 929 ;
-C -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ;
-C -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ;
-C -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ;
-C -1 ; WX 556 ; N uring ; B 94 -15 600 756 ;
-C -1 ; WX 333 ; N threesuperior ; B 90 270 436 703 ;
-C -1 ; WX 778 ; N Ograve ; B 105 -19 826 929 ;
-C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ;
-C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ;
-C -1 ; WX 584 ; N multiply ; B 50 0 642 506 ;
-C -1 ; WX 556 ; N uacute ; B 94 -15 600 734 ;
-C -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ;
-C -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ;
-C -1 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ;
-C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ;
-C -1 ; WX 278 ; N icircumflex ; B 95 0 411 734 ;
-C -1 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ;
-C -1 ; WX 556 ; N adieresis ; B 61 -15 559 706 ;
-C -1 ; WX 556 ; N edieresis ; B 84 -15 578 706 ;
-C -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ;
-C -1 ; WX 556 ; N nacute ; B 65 0 587 734 ;
-C -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ;
-C -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ;
-C -1 ; WX 278 ; N Iacute ; B 91 0 489 929 ;
-C -1 ; WX 584 ; N plusminus ; B 39 0 618 506 ;
-C -1 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ;
-C -1 ; WX 737 ; N registered ; B 54 -19 837 737 ;
-C -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ;
-C -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ;
-C -1 ; WX 600 ; N summation ; B 15 -10 671 706 ;
-C -1 ; WX 667 ; N Egrave ; B 86 0 762 929 ;
-C -1 ; WX 333 ; N racute ; B 77 0 475 734 ;
-C -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ;
-C -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ;
-C -1 ; WX 611 ; N Zcaron ; B 23 0 741 929 ;
-C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ;
-C -1 ; WX 722 ; N Eth ; B 69 0 764 718 ;
-C -1 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ;
-C -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ;
-C -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ;
-C -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ;
-C -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ;
-C -1 ; WX 667 ; N Aacute ; B 14 0 683 929 ;
-C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;
-C -1 ; WX 556 ; N egrave ; B 84 -15 578 734 ;
-C -1 ; WX 500 ; N zacute ; B 31 0 571 734 ;
-C -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ;
-C -1 ; WX 778 ; N Oacute ; B 105 -19 826 929 ;
-C -1 ; WX 556 ; N oacute ; B 83 -14 587 734 ;
-C -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ;
-C -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ;
-C -1 ; WX 278 ; N idieresis ; B 95 0 416 706 ;
-C -1 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ;
-C -1 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ;
-C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
-C -1 ; WX 556 ; N thorn ; B 14 -207 584 718 ;
-C -1 ; WX 333 ; N twosuperior ; B 64 281 449 703 ;
-C -1 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ;
-C -1 ; WX 556 ; N mu ; B 24 -207 600 523 ;
-C -1 ; WX 278 ; N igrave ; B 95 0 310 734 ;
-C -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ;
-C -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ;
-C -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ;
-C -1 ; WX 834 ; N threequarters ; B 130 -19 861 703 ;
-C -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ;
-C -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ;
-C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ;
-C -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ;
-C -1 ; WX 1000 ; N trademark ; B 186 306 1056 718 ;
-C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ;
-C -1 ; WX 278 ; N Igrave ; B 91 0 351 929 ;
-C -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ;
-C -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ;
-C -1 ; WX 834 ; N onehalf ; B 114 -19 839 703 ;
-C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ;
-C -1 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ;
-C -1 ; WX 556 ; N ntilde ; B 65 0 592 722 ;
-C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ;
-C -1 ; WX 667 ; N Eacute ; B 86 0 762 929 ;
-C -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ;
-C -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ;
-C -1 ; WX 834 ; N onequarter ; B 150 -19 802 703 ;
-C -1 ; WX 667 ; N Scaron ; B 90 -19 713 929 ;
-C -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ;
-C -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ;
-C -1 ; WX 400 ; N degree ; B 169 411 468 703 ;
-C -1 ; WX 556 ; N ograve ; B 83 -14 585 734 ;
-C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ;
-C -1 ; WX 556 ; N ugrave ; B 94 -15 600 734 ;
-C -1 ; WX 453 ; N radical ; B 79 -80 617 762 ;
-C -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ;
-C -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ;
-C -1 ; WX 722 ; N Ntilde ; B 76 0 799 917 ;
-C -1 ; WX 556 ; N otilde ; B 83 -14 602 722 ;
-C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ;
-C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ;
-C -1 ; WX 667 ; N Atilde ; B 14 0 699 917 ;
-C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;
-C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ;
-C -1 ; WX 778 ; N Otilde ; B 105 -19 826 917 ;
-C -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ;
-C -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ;
-C -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ;
-C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ;
-C -1 ; WX 584 ; N minus ; B 85 216 606 289 ;
-C -1 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ;
-C -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ;
-C -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ;
-C -1 ; WX 584 ; N logicalnot ; B 106 108 628 390 ;
-C -1 ; WX 556 ; N odieresis ; B 83 -14 585 706 ;
-C -1 ; WX 556 ; N udieresis ; B 94 -15 600 706 ;
-C -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ;
-C -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ;
-C -1 ; WX 556 ; N eth ; B 81 -15 617 737 ;
-C -1 ; WX 500 ; N zcaron ; B 31 0 571 734 ;
-C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ;
-C -1 ; WX 333 ; N onesuperior ; B 166 281 371 703 ;
-C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ;
-C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;
-EndCharMetrics
-StartKernData
-StartKernPairs 2705
-KPX A C -30
-KPX A Cacute -30
-KPX A Ccaron -30
-KPX A Ccedilla -30
-KPX A G -30
-KPX A Gbreve -30
-KPX A Gcommaaccent -30
-KPX A O -30
-KPX A Oacute -30
-KPX A Ocircumflex -30
-KPX A Odieresis -30
-KPX A Ograve -30
-KPX A Ohungarumlaut -30
-KPX A Omacron -30
-KPX A Oslash -30
-KPX A Otilde -30
-KPX A Q -30
-KPX A T -120
-KPX A Tcaron -120
-KPX A Tcommaaccent -120
-KPX A U -50
-KPX A Uacute -50
-KPX A Ucircumflex -50
-KPX A Udieresis -50
-KPX A Ugrave -50
-KPX A Uhungarumlaut -50
-KPX A Umacron -50
-KPX A Uogonek -50
-KPX A Uring -50
-KPX A V -70
-KPX A W -50
-KPX A Y -100
-KPX A Yacute -100
-KPX A Ydieresis -100
-KPX A u -30
-KPX A uacute -30
-KPX A ucircumflex -30
-KPX A udieresis -30
-KPX A ugrave -30
-KPX A uhungarumlaut -30
-KPX A umacron -30
-KPX A uogonek -30
-KPX A uring -30
-KPX A v -40
-KPX A w -40
-KPX A y -40
-KPX A yacute -40
-KPX A ydieresis -40
-KPX Aacute C -30
-KPX Aacute Cacute -30
-KPX Aacute Ccaron -30
-KPX Aacute Ccedilla -30
-KPX Aacute G -30
-KPX Aacute Gbreve -30
-KPX Aacute Gcommaaccent -30
-KPX Aacute O -30
-KPX Aacute Oacute -30
-KPX Aacute Ocircumflex -30
-KPX Aacute Odieresis -30
-KPX Aacute Ograve -30
-KPX Aacute Ohungarumlaut -30
-KPX Aacute Omacron -30
-KPX Aacute Oslash -30
-KPX Aacute Otilde -30
-KPX Aacute Q -30
-KPX Aacute T -120
-KPX Aacute Tcaron -120
-KPX Aacute Tcommaaccent -120
-KPX Aacute U -50
-KPX Aacute Uacute -50
-KPX Aacute Ucircumflex -50
-KPX Aacute Udieresis -50
-KPX Aacute Ugrave -50
-KPX Aacute Uhungarumlaut -50
-KPX Aacute Umacron -50
-KPX Aacute Uogonek -50
-KPX Aacute Uring -50
-KPX Aacute V -70
-KPX Aacute W -50
-KPX Aacute Y -100
-KPX Aacute Yacute -100
-KPX Aacute Ydieresis -100
-KPX Aacute u -30
-KPX Aacute uacute -30
-KPX Aacute ucircumflex -30
-KPX Aacute udieresis -30
-KPX Aacute ugrave -30
-KPX Aacute uhungarumlaut -30
-KPX Aacute umacron -30
-KPX Aacute uogonek -30
-KPX Aacute uring -30
-KPX Aacute v -40
-KPX Aacute w -40
-KPX Aacute y -40
-KPX Aacute yacute -40
-KPX Aacute ydieresis -40
-KPX Abreve C -30
-KPX Abreve Cacute -30
-KPX Abreve Ccaron -30
-KPX Abreve Ccedilla -30
-KPX Abreve G -30
-KPX Abreve Gbreve -30
-KPX Abreve Gcommaaccent -30
-KPX Abreve O -30
-KPX Abreve Oacute -30
-KPX Abreve Ocircumflex -30
-KPX Abreve Odieresis -30
-KPX Abreve Ograve -30
-KPX Abreve Ohungarumlaut -30
-KPX Abreve Omacron -30
-KPX Abreve Oslash -30
-KPX Abreve Otilde -30
-KPX Abreve Q -30
-KPX Abreve T -120
-KPX Abreve Tcaron -120
-KPX Abreve Tcommaaccent -120
-KPX Abreve U -50
-KPX Abreve Uacute -50
-KPX Abreve Ucircumflex -50
-KPX Abreve Udieresis -50
-KPX Abreve Ugrave -50
-KPX Abreve Uhungarumlaut -50
-KPX Abreve Umacron -50
-KPX Abreve Uogonek -50
-KPX Abreve Uring -50
-KPX Abreve V -70
-KPX Abreve W -50
-KPX Abreve Y -100
-KPX Abreve Yacute -100
-KPX Abreve Ydieresis -100
-KPX Abreve u -30
-KPX Abreve uacute -30
-KPX Abreve ucircumflex -30
-KPX Abreve udieresis -30
-KPX Abreve ugrave -30
-KPX Abreve uhungarumlaut -30
-KPX Abreve umacron -30
-KPX Abreve uogonek -30
-KPX Abreve uring -30
-KPX Abreve v -40
-KPX Abreve w -40
-KPX Abreve y -40
-KPX Abreve yacute -40
-KPX Abreve ydieresis -40
-KPX Acircumflex C -30
-KPX Acircumflex Cacute -30
-KPX Acircumflex Ccaron -30
-KPX Acircumflex Ccedilla -30
-KPX Acircumflex G -30
-KPX Acircumflex Gbreve -30
-KPX Acircumflex Gcommaaccent -30
-KPX Acircumflex O -30
-KPX Acircumflex Oacute -30
-KPX Acircumflex Ocircumflex -30
-KPX Acircumflex Odieresis -30
-KPX Acircumflex Ograve -30
-KPX Acircumflex Ohungarumlaut -30
-KPX Acircumflex Omacron -30
-KPX Acircumflex Oslash -30
-KPX Acircumflex Otilde -30
-KPX Acircumflex Q -30
-KPX Acircumflex T -120
-KPX Acircumflex Tcaron -120
-KPX Acircumflex Tcommaaccent -120
-KPX Acircumflex U -50
-KPX Acircumflex Uacute -50
-KPX Acircumflex Ucircumflex -50
-KPX Acircumflex Udieresis -50
-KPX Acircumflex Ugrave -50
-KPX Acircumflex Uhungarumlaut -50
-KPX Acircumflex Umacron -50
-KPX Acircumflex Uogonek -50
-KPX Acircumflex Uring -50
-KPX Acircumflex V -70
-KPX Acircumflex W -50
-KPX Acircumflex Y -100
-KPX Acircumflex Yacute -100
-KPX Acircumflex Ydieresis -100
-KPX Acircumflex u -30
-KPX Acircumflex uacute -30
-KPX Acircumflex ucircumflex -30
-KPX Acircumflex udieresis -30
-KPX Acircumflex ugrave -30
-KPX Acircumflex uhungarumlaut -30
-KPX Acircumflex umacron -30
-KPX Acircumflex uogonek -30
-KPX Acircumflex uring -30
-KPX Acircumflex v -40
-KPX Acircumflex w -40
-KPX Acircumflex y -40
-KPX Acircumflex yacute -40
-KPX Acircumflex ydieresis -40
-KPX Adieresis C -30
-KPX Adieresis Cacute -30
-KPX Adieresis Ccaron -30
-KPX Adieresis Ccedilla -30
-KPX Adieresis G -30
-KPX Adieresis Gbreve -30
-KPX Adieresis Gcommaaccent -30
-KPX Adieresis O -30
-KPX Adieresis Oacute -30
-KPX Adieresis Ocircumflex -30
-KPX Adieresis Odieresis -30
-KPX Adieresis Ograve -30
-KPX Adieresis Ohungarumlaut -30
-KPX Adieresis Omacron -30
-KPX Adieresis Oslash -30
-KPX Adieresis Otilde -30
-KPX Adieresis Q -30
-KPX Adieresis T -120
-KPX Adieresis Tcaron -120
-KPX Adieresis Tcommaaccent -120
-KPX Adieresis U -50
-KPX Adieresis Uacute -50
-KPX Adieresis Ucircumflex -50
-KPX Adieresis Udieresis -50
-KPX Adieresis Ugrave -50
-KPX Adieresis Uhungarumlaut -50
-KPX Adieresis Umacron -50
-KPX Adieresis Uogonek -50
-KPX Adieresis Uring -50
-KPX Adieresis V -70
-KPX Adieresis W -50
-KPX Adieresis Y -100
-KPX Adieresis Yacute -100
-KPX Adieresis Ydieresis -100
-KPX Adieresis u -30
-KPX Adieresis uacute -30
-KPX Adieresis ucircumflex -30
-KPX Adieresis udieresis -30
-KPX Adieresis ugrave -30
-KPX Adieresis uhungarumlaut -30
-KPX Adieresis umacron -30
-KPX Adieresis uogonek -30
-KPX Adieresis uring -30
-KPX Adieresis v -40
-KPX Adieresis w -40
-KPX Adieresis y -40
-KPX Adieresis yacute -40
-KPX Adieresis ydieresis -40
-KPX Agrave C -30
-KPX Agrave Cacute -30
-KPX Agrave Ccaron -30
-KPX Agrave Ccedilla -30
-KPX Agrave G -30
-KPX Agrave Gbreve -30
-KPX Agrave Gcommaaccent -30
-KPX Agrave O -30
-KPX Agrave Oacute -30
-KPX Agrave Ocircumflex -30
-KPX Agrave Odieresis -30
-KPX Agrave Ograve -30
-KPX Agrave Ohungarumlaut -30
-KPX Agrave Omacron -30
-KPX Agrave Oslash -30
-KPX Agrave Otilde -30
-KPX Agrave Q -30
-KPX Agrave T -120
-KPX Agrave Tcaron -120
-KPX Agrave Tcommaaccent -120
-KPX Agrave U -50
-KPX Agrave Uacute -50
-KPX Agrave Ucircumflex -50
-KPX Agrave Udieresis -50
-KPX Agrave Ugrave -50
-KPX Agrave Uhungarumlaut -50
-KPX Agrave Umacron -50
-KPX Agrave Uogonek -50
-KPX Agrave Uring -50
-KPX Agrave V -70
-KPX Agrave W -50
-KPX Agrave Y -100
-KPX Agrave Yacute -100
-KPX Agrave Ydieresis -100
-KPX Agrave u -30
-KPX Agrave uacute -30
-KPX Agrave ucircumflex -30
-KPX Agrave udieresis -30
-KPX Agrave ugrave -30
-KPX Agrave uhungarumlaut -30
-KPX Agrave umacron -30
-KPX Agrave uogonek -30
-KPX Agrave uring -30
-KPX Agrave v -40
-KPX Agrave w -40
-KPX Agrave y -40
-KPX Agrave yacute -40
-KPX Agrave ydieresis -40
-KPX Amacron C -30
-KPX Amacron Cacute -30
-KPX Amacron Ccaron -30
-KPX Amacron Ccedilla -30
-KPX Amacron G -30
-KPX Amacron Gbreve -30
-KPX Amacron Gcommaaccent -30
-KPX Amacron O -30
-KPX Amacron Oacute -30
-KPX Amacron Ocircumflex -30
-KPX Amacron Odieresis -30
-KPX Amacron Ograve -30
-KPX Amacron Ohungarumlaut -30
-KPX Amacron Omacron -30
-KPX Amacron Oslash -30
-KPX Amacron Otilde -30
-KPX Amacron Q -30
-KPX Amacron T -120
-KPX Amacron Tcaron -120
-KPX Amacron Tcommaaccent -120
-KPX Amacron U -50
-KPX Amacron Uacute -50
-KPX Amacron Ucircumflex -50
-KPX Amacron Udieresis -50
-KPX Amacron Ugrave -50
-KPX Amacron Uhungarumlaut -50
-KPX Amacron Umacron -50
-KPX Amacron Uogonek -50
-KPX Amacron Uring -50
-KPX Amacron V -70
-KPX Amacron W -50
-KPX Amacron Y -100
-KPX Amacron Yacute -100
-KPX Amacron Ydieresis -100
-KPX Amacron u -30
-KPX Amacron uacute -30
-KPX Amacron ucircumflex -30
-KPX Amacron udieresis -30
-KPX Amacron ugrave -30
-KPX Amacron uhungarumlaut -30
-KPX Amacron umacron -30
-KPX Amacron uogonek -30
-KPX Amacron uring -30
-KPX Amacron v -40
-KPX Amacron w -40
-KPX Amacron y -40
-KPX Amacron yacute -40
-KPX Amacron ydieresis -40
-KPX Aogonek C -30
-KPX Aogonek Cacute -30
-KPX Aogonek Ccaron -30
-KPX Aogonek Ccedilla -30
-KPX Aogonek G -30
-KPX Aogonek Gbreve -30
-KPX Aogonek Gcommaaccent -30
-KPX Aogonek O -30
-KPX Aogonek Oacute -30
-KPX Aogonek Ocircumflex -30
-KPX Aogonek Odieresis -30
-KPX Aogonek Ograve -30
-KPX Aogonek Ohungarumlaut -30
-KPX Aogonek Omacron -30
-KPX Aogonek Oslash -30
-KPX Aogonek Otilde -30
-KPX Aogonek Q -30
-KPX Aogonek T -120
-KPX Aogonek Tcaron -120
-KPX Aogonek Tcommaaccent -120
-KPX Aogonek U -50
-KPX Aogonek Uacute -50
-KPX Aogonek Ucircumflex -50
-KPX Aogonek Udieresis -50
-KPX Aogonek Ugrave -50
-KPX Aogonek Uhungarumlaut -50
-KPX Aogonek Umacron -50
-KPX Aogonek Uogonek -50
-KPX Aogonek Uring -50
-KPX Aogonek V -70
-KPX Aogonek W -50
-KPX Aogonek Y -100
-KPX Aogonek Yacute -100
-KPX Aogonek Ydieresis -100
-KPX Aogonek u -30
-KPX Aogonek uacute -30
-KPX Aogonek ucircumflex -30
-KPX Aogonek udieresis -30
-KPX Aogonek ugrave -30
-KPX Aogonek uhungarumlaut -30
-KPX Aogonek umacron -30
-KPX Aogonek uogonek -30
-KPX Aogonek uring -30
-KPX Aogonek v -40
-KPX Aogonek w -40
-KPX Aogonek y -40
-KPX Aogonek yacute -40
-KPX Aogonek ydieresis -40
-KPX Aring C -30
-KPX Aring Cacute -30
-KPX Aring Ccaron -30
-KPX Aring Ccedilla -30
-KPX Aring G -30
-KPX Aring Gbreve -30
-KPX Aring Gcommaaccent -30
-KPX Aring O -30
-KPX Aring Oacute -30
-KPX Aring Ocircumflex -30
-KPX Aring Odieresis -30
-KPX Aring Ograve -30
-KPX Aring Ohungarumlaut -30
-KPX Aring Omacron -30
-KPX Aring Oslash -30
-KPX Aring Otilde -30
-KPX Aring Q -30
-KPX Aring T -120
-KPX Aring Tcaron -120
-KPX Aring Tcommaaccent -120
-KPX Aring U -50
-KPX Aring Uacute -50
-KPX Aring Ucircumflex -50
-KPX Aring Udieresis -50
-KPX Aring Ugrave -50
-KPX Aring Uhungarumlaut -50
-KPX Aring Umacron -50
-KPX Aring Uogonek -50
-KPX Aring Uring -50
-KPX Aring V -70
-KPX Aring W -50
-KPX Aring Y -100
-KPX Aring Yacute -100
-KPX Aring Ydieresis -100
-KPX Aring u -30
-KPX Aring uacute -30
-KPX Aring ucircumflex -30
-KPX Aring udieresis -30
-KPX Aring ugrave -30
-KPX Aring uhungarumlaut -30
-KPX Aring umacron -30
-KPX Aring uogonek -30
-KPX Aring uring -30
-KPX Aring v -40
-KPX Aring w -40
-KPX Aring y -40
-KPX Aring yacute -40
-KPX Aring ydieresis -40
-KPX Atilde C -30
-KPX Atilde Cacute -30
-KPX Atilde Ccaron -30
-KPX Atilde Ccedilla -30
-KPX Atilde G -30
-KPX Atilde Gbreve -30
-KPX Atilde Gcommaaccent -30
-KPX Atilde O -30
-KPX Atilde Oacute -30
-KPX Atilde Ocircumflex -30
-KPX Atilde Odieresis -30
-KPX Atilde Ograve -30
-KPX Atilde Ohungarumlaut -30
-KPX Atilde Omacron -30
-KPX Atilde Oslash -30
-KPX Atilde Otilde -30
-KPX Atilde Q -30
-KPX Atilde T -120
-KPX Atilde Tcaron -120
-KPX Atilde Tcommaaccent -120
-KPX Atilde U -50
-KPX Atilde Uacute -50
-KPX Atilde Ucircumflex -50
-KPX Atilde Udieresis -50
-KPX Atilde Ugrave -50
-KPX Atilde Uhungarumlaut -50
-KPX Atilde Umacron -50
-KPX Atilde Uogonek -50
-KPX Atilde Uring -50
-KPX Atilde V -70
-KPX Atilde W -50
-KPX Atilde Y -100
-KPX Atilde Yacute -100
-KPX Atilde Ydieresis -100
-KPX Atilde u -30
-KPX Atilde uacute -30
-KPX Atilde ucircumflex -30
-KPX Atilde udieresis -30
-KPX Atilde ugrave -30
-KPX Atilde uhungarumlaut -30
-KPX Atilde umacron -30
-KPX Atilde uogonek -30
-KPX Atilde uring -30
-KPX Atilde v -40
-KPX Atilde w -40
-KPX Atilde y -40
-KPX Atilde yacute -40
-KPX Atilde ydieresis -40
-KPX B U -10
-KPX B Uacute -10
-KPX B Ucircumflex -10
-KPX B Udieresis -10
-KPX B Ugrave -10
-KPX B Uhungarumlaut -10
-KPX B Umacron -10
-KPX B Uogonek -10
-KPX B Uring -10
-KPX B comma -20
-KPX B period -20
-KPX C comma -30
-KPX C period -30
-KPX Cacute comma -30
-KPX Cacute period -30
-KPX Ccaron comma -30
-KPX Ccaron period -30
-KPX Ccedilla comma -30
-KPX Ccedilla period -30
-KPX D A -40
-KPX D Aacute -40
-KPX D Abreve -40
-KPX D Acircumflex -40
-KPX D Adieresis -40
-KPX D Agrave -40
-KPX D Amacron -40
-KPX D Aogonek -40
-KPX D Aring -40
-KPX D Atilde -40
-KPX D V -70
-KPX D W -40
-KPX D Y -90
-KPX D Yacute -90
-KPX D Ydieresis -90
-KPX D comma -70
-KPX D period -70
-KPX Dcaron A -40
-KPX Dcaron Aacute -40
-KPX Dcaron Abreve -40
-KPX Dcaron Acircumflex -40
-KPX Dcaron Adieresis -40
-KPX Dcaron Agrave -40
-KPX Dcaron Amacron -40
-KPX Dcaron Aogonek -40
-KPX Dcaron Aring -40
-KPX Dcaron Atilde -40
-KPX Dcaron V -70
-KPX Dcaron W -40
-KPX Dcaron Y -90
-KPX Dcaron Yacute -90
-KPX Dcaron Ydieresis -90
-KPX Dcaron comma -70
-KPX Dcaron period -70
-KPX Dcroat A -40
-KPX Dcroat Aacute -40
-KPX Dcroat Abreve -40
-KPX Dcroat Acircumflex -40
-KPX Dcroat Adieresis -40
-KPX Dcroat Agrave -40
-KPX Dcroat Amacron -40
-KPX Dcroat Aogonek -40
-KPX Dcroat Aring -40
-KPX Dcroat Atilde -40
-KPX Dcroat V -70
-KPX Dcroat W -40
-KPX Dcroat Y -90
-KPX Dcroat Yacute -90
-KPX Dcroat Ydieresis -90
-KPX Dcroat comma -70
-KPX Dcroat period -70
-KPX F A -80
-KPX F Aacute -80
-KPX F Abreve -80
-KPX F Acircumflex -80
-KPX F Adieresis -80
-KPX F Agrave -80
-KPX F Amacron -80
-KPX F Aogonek -80
-KPX F Aring -80
-KPX F Atilde -80
-KPX F a -50
-KPX F aacute -50
-KPX F abreve -50
-KPX F acircumflex -50
-KPX F adieresis -50
-KPX F agrave -50
-KPX F amacron -50
-KPX F aogonek -50
-KPX F aring -50
-KPX F atilde -50
-KPX F comma -150
-KPX F e -30
-KPX F eacute -30
-KPX F ecaron -30
-KPX F ecircumflex -30
-KPX F edieresis -30
-KPX F edotaccent -30
-KPX F egrave -30
-KPX F emacron -30
-KPX F eogonek -30
-KPX F o -30
-KPX F oacute -30
-KPX F ocircumflex -30
-KPX F odieresis -30
-KPX F ograve -30
-KPX F ohungarumlaut -30
-KPX F omacron -30
-KPX F oslash -30
-KPX F otilde -30
-KPX F period -150
-KPX F r -45
-KPX F racute -45
-KPX F rcaron -45
-KPX F rcommaaccent -45
-KPX J A -20
-KPX J Aacute -20
-KPX J Abreve -20
-KPX J Acircumflex -20
-KPX J Adieresis -20
-KPX J Agrave -20
-KPX J Amacron -20
-KPX J Aogonek -20
-KPX J Aring -20
-KPX J Atilde -20
-KPX J a -20
-KPX J aacute -20
-KPX J abreve -20
-KPX J acircumflex -20
-KPX J adieresis -20
-KPX J agrave -20
-KPX J amacron -20
-KPX J aogonek -20
-KPX J aring -20
-KPX J atilde -20
-KPX J comma -30
-KPX J period -30
-KPX J u -20
-KPX J uacute -20
-KPX J ucircumflex -20
-KPX J udieresis -20
-KPX J ugrave -20
-KPX J uhungarumlaut -20
-KPX J umacron -20
-KPX J uogonek -20
-KPX J uring -20
-KPX K O -50
-KPX K Oacute -50
-KPX K Ocircumflex -50
-KPX K Odieresis -50
-KPX K Ograve -50
-KPX K Ohungarumlaut -50
-KPX K Omacron -50
-KPX K Oslash -50
-KPX K Otilde -50
-KPX K e -40
-KPX K eacute -40
-KPX K ecaron -40
-KPX K ecircumflex -40
-KPX K edieresis -40
-KPX K edotaccent -40
-KPX K egrave -40
-KPX K emacron -40
-KPX K eogonek -40
-KPX K o -40
-KPX K oacute -40
-KPX K ocircumflex -40
-KPX K odieresis -40
-KPX K ograve -40
-KPX K ohungarumlaut -40
-KPX K omacron -40
-KPX K oslash -40
-KPX K otilde -40
-KPX K u -30
-KPX K uacute -30
-KPX K ucircumflex -30
-KPX K udieresis -30
-KPX K ugrave -30
-KPX K uhungarumlaut -30
-KPX K umacron -30
-KPX K uogonek -30
-KPX K uring -30
-KPX K y -50
-KPX K yacute -50
-KPX K ydieresis -50
-KPX Kcommaaccent O -50
-KPX Kcommaaccent Oacute -50
-KPX Kcommaaccent Ocircumflex -50
-KPX Kcommaaccent Odieresis -50
-KPX Kcommaaccent Ograve -50
-KPX Kcommaaccent Ohungarumlaut -50
-KPX Kcommaaccent Omacron -50
-KPX Kcommaaccent Oslash -50
-KPX Kcommaaccent Otilde -50
-KPX Kcommaaccent e -40
-KPX Kcommaaccent eacute -40
-KPX Kcommaaccent ecaron -40
-KPX Kcommaaccent ecircumflex -40
-KPX Kcommaaccent edieresis -40
-KPX Kcommaaccent edotaccent -40
-KPX Kcommaaccent egrave -40
-KPX Kcommaaccent emacron -40
-KPX Kcommaaccent eogonek -40
-KPX Kcommaaccent o -40
-KPX Kcommaaccent oacute -40
-KPX Kcommaaccent ocircumflex -40
-KPX Kcommaaccent odieresis -40
-KPX Kcommaaccent ograve -40
-KPX Kcommaaccent ohungarumlaut -40
-KPX Kcommaaccent omacron -40
-KPX Kcommaaccent oslash -40
-KPX Kcommaaccent otilde -40
-KPX Kcommaaccent u -30
-KPX Kcommaaccent uacute -30
-KPX Kcommaaccent ucircumflex -30
-KPX Kcommaaccent udieresis -30
-KPX Kcommaaccent ugrave -30
-KPX Kcommaaccent uhungarumlaut -30
-KPX Kcommaaccent umacron -30
-KPX Kcommaaccent uogonek -30
-KPX Kcommaaccent uring -30
-KPX Kcommaaccent y -50
-KPX Kcommaaccent yacute -50
-KPX Kcommaaccent ydieresis -50
-KPX L T -110
-KPX L Tcaron -110
-KPX L Tcommaaccent -110
-KPX L V -110
-KPX L W -70
-KPX L Y -140
-KPX L Yacute -140
-KPX L Ydieresis -140
-KPX L quotedblright -140
-KPX L quoteright -160
-KPX L y -30
-KPX L yacute -30
-KPX L ydieresis -30
-KPX Lacute T -110
-KPX Lacute Tcaron -110
-KPX Lacute Tcommaaccent -110
-KPX Lacute V -110
-KPX Lacute W -70
-KPX Lacute Y -140
-KPX Lacute Yacute -140
-KPX Lacute Ydieresis -140
-KPX Lacute quotedblright -140
-KPX Lacute quoteright -160
-KPX Lacute y -30
-KPX Lacute yacute -30
-KPX Lacute ydieresis -30
-KPX Lcaron T -110
-KPX Lcaron Tcaron -110
-KPX Lcaron Tcommaaccent -110
-KPX Lcaron V -110
-KPX Lcaron W -70
-KPX Lcaron Y -140
-KPX Lcaron Yacute -140
-KPX Lcaron Ydieresis -140
-KPX Lcaron quotedblright -140
-KPX Lcaron quoteright -160
-KPX Lcaron y -30
-KPX Lcaron yacute -30
-KPX Lcaron ydieresis -30
-KPX Lcommaaccent T -110
-KPX Lcommaaccent Tcaron -110
-KPX Lcommaaccent Tcommaaccent -110
-KPX Lcommaaccent V -110
-KPX Lcommaaccent W -70
-KPX Lcommaaccent Y -140
-KPX Lcommaaccent Yacute -140
-KPX Lcommaaccent Ydieresis -140
-KPX Lcommaaccent quotedblright -140
-KPX Lcommaaccent quoteright -160
-KPX Lcommaaccent y -30
-KPX Lcommaaccent yacute -30
-KPX Lcommaaccent ydieresis -30
-KPX Lslash T -110
-KPX Lslash Tcaron -110
-KPX Lslash Tcommaaccent -110
-KPX Lslash V -110
-KPX Lslash W -70
-KPX Lslash Y -140
-KPX Lslash Yacute -140
-KPX Lslash Ydieresis -140
-KPX Lslash quotedblright -140
-KPX Lslash quoteright -160
-KPX Lslash y -30
-KPX Lslash yacute -30
-KPX Lslash ydieresis -30
-KPX O A -20
-KPX O Aacute -20
-KPX O Abreve -20
-KPX O Acircumflex -20
-KPX O Adieresis -20
-KPX O Agrave -20
-KPX O Amacron -20
-KPX O Aogonek -20
-KPX O Aring -20
-KPX O Atilde -20
-KPX O T -40
-KPX O Tcaron -40
-KPX O Tcommaaccent -40
-KPX O V -50
-KPX O W -30
-KPX O X -60
-KPX O Y -70
-KPX O Yacute -70
-KPX O Ydieresis -70
-KPX O comma -40
-KPX O period -40
-KPX Oacute A -20
-KPX Oacute Aacute -20
-KPX Oacute Abreve -20
-KPX Oacute Acircumflex -20
-KPX Oacute Adieresis -20
-KPX Oacute Agrave -20
-KPX Oacute Amacron -20
-KPX Oacute Aogonek -20
-KPX Oacute Aring -20
-KPX Oacute Atilde -20
-KPX Oacute T -40
-KPX Oacute Tcaron -40
-KPX Oacute Tcommaaccent -40
-KPX Oacute V -50
-KPX Oacute W -30
-KPX Oacute X -60
-KPX Oacute Y -70
-KPX Oacute Yacute -70
-KPX Oacute Ydieresis -70
-KPX Oacute comma -40
-KPX Oacute period -40
-KPX Ocircumflex A -20
-KPX Ocircumflex Aacute -20
-KPX Ocircumflex Abreve -20
-KPX Ocircumflex Acircumflex -20
-KPX Ocircumflex Adieresis -20
-KPX Ocircumflex Agrave -20
-KPX Ocircumflex Amacron -20
-KPX Ocircumflex Aogonek -20
-KPX Ocircumflex Aring -20
-KPX Ocircumflex Atilde -20
-KPX Ocircumflex T -40
-KPX Ocircumflex Tcaron -40
-KPX Ocircumflex Tcommaaccent -40
-KPX Ocircumflex V -50
-KPX Ocircumflex W -30
-KPX Ocircumflex X -60
-KPX Ocircumflex Y -70
-KPX Ocircumflex Yacute -70
-KPX Ocircumflex Ydieresis -70
-KPX Ocircumflex comma -40
-KPX Ocircumflex period -40
-KPX Odieresis A -20
-KPX Odieresis Aacute -20
-KPX Odieresis Abreve -20
-KPX Odieresis Acircumflex -20
-KPX Odieresis Adieresis -20
-KPX Odieresis Agrave -20
-KPX Odieresis Amacron -20
-KPX Odieresis Aogonek -20
-KPX Odieresis Aring -20
-KPX Odieresis Atilde -20
-KPX Odieresis T -40
-KPX Odieresis Tcaron -40
-KPX Odieresis Tcommaaccent -40
-KPX Odieresis V -50
-KPX Odieresis W -30
-KPX Odieresis X -60
-KPX Odieresis Y -70
-KPX Odieresis Yacute -70
-KPX Odieresis Ydieresis -70
-KPX Odieresis comma -40
-KPX Odieresis period -40
-KPX Ograve A -20
-KPX Ograve Aacute -20
-KPX Ograve Abreve -20
-KPX Ograve Acircumflex -20
-KPX Ograve Adieresis -20
-KPX Ograve Agrave -20
-KPX Ograve Amacron -20
-KPX Ograve Aogonek -20
-KPX Ograve Aring -20
-KPX Ograve Atilde -20
-KPX Ograve T -40
-KPX Ograve Tcaron -40
-KPX Ograve Tcommaaccent -40
-KPX Ograve V -50
-KPX Ograve W -30
-KPX Ograve X -60
-KPX Ograve Y -70
-KPX Ograve Yacute -70
-KPX Ograve Ydieresis -70
-KPX Ograve comma -40
-KPX Ograve period -40
-KPX Ohungarumlaut A -20
-KPX Ohungarumlaut Aacute -20
-KPX Ohungarumlaut Abreve -20
-KPX Ohungarumlaut Acircumflex -20
-KPX Ohungarumlaut Adieresis -20
-KPX Ohungarumlaut Agrave -20
-KPX Ohungarumlaut Amacron -20
-KPX Ohungarumlaut Aogonek -20
-KPX Ohungarumlaut Aring -20
-KPX Ohungarumlaut Atilde -20
-KPX Ohungarumlaut T -40
-KPX Ohungarumlaut Tcaron -40
-KPX Ohungarumlaut Tcommaaccent -40
-KPX Ohungarumlaut V -50
-KPX Ohungarumlaut W -30
-KPX Ohungarumlaut X -60
-KPX Ohungarumlaut Y -70
-KPX Ohungarumlaut Yacute -70
-KPX Ohungarumlaut Ydieresis -70
-KPX Ohungarumlaut comma -40
-KPX Ohungarumlaut period -40
-KPX Omacron A -20
-KPX Omacron Aacute -20
-KPX Omacron Abreve -20
-KPX Omacron Acircumflex -20
-KPX Omacron Adieresis -20
-KPX Omacron Agrave -20
-KPX Omacron Amacron -20
-KPX Omacron Aogonek -20
-KPX Omacron Aring -20
-KPX Omacron Atilde -20
-KPX Omacron T -40
-KPX Omacron Tcaron -40
-KPX Omacron Tcommaaccent -40
-KPX Omacron V -50
-KPX Omacron W -30
-KPX Omacron X -60
-KPX Omacron Y -70
-KPX Omacron Yacute -70
-KPX Omacron Ydieresis -70
-KPX Omacron comma -40
-KPX Omacron period -40
-KPX Oslash A -20
-KPX Oslash Aacute -20
-KPX Oslash Abreve -20
-KPX Oslash Acircumflex -20
-KPX Oslash Adieresis -20
-KPX Oslash Agrave -20
-KPX Oslash Amacron -20
-KPX Oslash Aogonek -20
-KPX Oslash Aring -20
-KPX Oslash Atilde -20
-KPX Oslash T -40
-KPX Oslash Tcaron -40
-KPX Oslash Tcommaaccent -40
-KPX Oslash V -50
-KPX Oslash W -30
-KPX Oslash X -60
-KPX Oslash Y -70
-KPX Oslash Yacute -70
-KPX Oslash Ydieresis -70
-KPX Oslash comma -40
-KPX Oslash period -40
-KPX Otilde A -20
-KPX Otilde Aacute -20
-KPX Otilde Abreve -20
-KPX Otilde Acircumflex -20
-KPX Otilde Adieresis -20
-KPX Otilde Agrave -20
-KPX Otilde Amacron -20
-KPX Otilde Aogonek -20
-KPX Otilde Aring -20
-KPX Otilde Atilde -20
-KPX Otilde T -40
-KPX Otilde Tcaron -40
-KPX Otilde Tcommaaccent -40
-KPX Otilde V -50
-KPX Otilde W -30
-KPX Otilde X -60
-KPX Otilde Y -70
-KPX Otilde Yacute -70
-KPX Otilde Ydieresis -70
-KPX Otilde comma -40
-KPX Otilde period -40
-KPX P A -120
-KPX P Aacute -120
-KPX P Abreve -120
-KPX P Acircumflex -120
-KPX P Adieresis -120
-KPX P Agrave -120
-KPX P Amacron -120
-KPX P Aogonek -120
-KPX P Aring -120
-KPX P Atilde -120
-KPX P a -40
-KPX P aacute -40
-KPX P abreve -40
-KPX P acircumflex -40
-KPX P adieresis -40
-KPX P agrave -40
-KPX P amacron -40
-KPX P aogonek -40
-KPX P aring -40
-KPX P atilde -40
-KPX P comma -180
-KPX P e -50
-KPX P eacute -50
-KPX P ecaron -50
-KPX P ecircumflex -50
-KPX P edieresis -50
-KPX P edotaccent -50
-KPX P egrave -50
-KPX P emacron -50
-KPX P eogonek -50
-KPX P o -50
-KPX P oacute -50
-KPX P ocircumflex -50
-KPX P odieresis -50
-KPX P ograve -50
-KPX P ohungarumlaut -50
-KPX P omacron -50
-KPX P oslash -50
-KPX P otilde -50
-KPX P period -180
-KPX Q U -10
-KPX Q Uacute -10
-KPX Q Ucircumflex -10
-KPX Q Udieresis -10
-KPX Q Ugrave -10
-KPX Q Uhungarumlaut -10
-KPX Q Umacron -10
-KPX Q Uogonek -10
-KPX Q Uring -10
-KPX R O -20
-KPX R Oacute -20
-KPX R Ocircumflex -20
-KPX R Odieresis -20
-KPX R Ograve -20
-KPX R Ohungarumlaut -20
-KPX R Omacron -20
-KPX R Oslash -20
-KPX R Otilde -20
-KPX R T -30
-KPX R Tcaron -30
-KPX R Tcommaaccent -30
-KPX R U -40
-KPX R Uacute -40
-KPX R Ucircumflex -40
-KPX R Udieresis -40
-KPX R Ugrave -40
-KPX R Uhungarumlaut -40
-KPX R Umacron -40
-KPX R Uogonek -40
-KPX R Uring -40
-KPX R V -50
-KPX R W -30
-KPX R Y -50
-KPX R Yacute -50
-KPX R Ydieresis -50
-KPX Racute O -20
-KPX Racute Oacute -20
-KPX Racute Ocircumflex -20
-KPX Racute Odieresis -20
-KPX Racute Ograve -20
-KPX Racute Ohungarumlaut -20
-KPX Racute Omacron -20
-KPX Racute Oslash -20
-KPX Racute Otilde -20
-KPX Racute T -30
-KPX Racute Tcaron -30
-KPX Racute Tcommaaccent -30
-KPX Racute U -40
-KPX Racute Uacute -40
-KPX Racute Ucircumflex -40
-KPX Racute Udieresis -40
-KPX Racute Ugrave -40
-KPX Racute Uhungarumlaut -40
-KPX Racute Umacron -40
-KPX Racute Uogonek -40
-KPX Racute Uring -40
-KPX Racute V -50
-KPX Racute W -30
-KPX Racute Y -50
-KPX Racute Yacute -50
-KPX Racute Ydieresis -50
-KPX Rcaron O -20
-KPX Rcaron Oacute -20
-KPX Rcaron Ocircumflex -20
-KPX Rcaron Odieresis -20
-KPX Rcaron Ograve -20
-KPX Rcaron Ohungarumlaut -20
-KPX Rcaron Omacron -20
-KPX Rcaron Oslash -20
-KPX Rcaron Otilde -20
-KPX Rcaron T -30
-KPX Rcaron Tcaron -30
-KPX Rcaron Tcommaaccent -30
-KPX Rcaron U -40
-KPX Rcaron Uacute -40
-KPX Rcaron Ucircumflex -40
-KPX Rcaron Udieresis -40
-KPX Rcaron Ugrave -40
-KPX Rcaron Uhungarumlaut -40
-KPX Rcaron Umacron -40
-KPX Rcaron Uogonek -40
-KPX Rcaron Uring -40
-KPX Rcaron V -50
-KPX Rcaron W -30
-KPX Rcaron Y -50
-KPX Rcaron Yacute -50
-KPX Rcaron Ydieresis -50
-KPX Rcommaaccent O -20
-KPX Rcommaaccent Oacute -20
-KPX Rcommaaccent Ocircumflex -20
-KPX Rcommaaccent Odieresis -20
-KPX Rcommaaccent Ograve -20
-KPX Rcommaaccent Ohungarumlaut -20
-KPX Rcommaaccent Omacron -20
-KPX Rcommaaccent Oslash -20
-KPX Rcommaaccent Otilde -20
-KPX Rcommaaccent T -30
-KPX Rcommaaccent Tcaron -30
-KPX Rcommaaccent Tcommaaccent -30
-KPX Rcommaaccent U -40
-KPX Rcommaaccent Uacute -40
-KPX Rcommaaccent Ucircumflex -40
-KPX Rcommaaccent Udieresis -40
-KPX Rcommaaccent Ugrave -40
-KPX Rcommaaccent Uhungarumlaut -40
-KPX Rcommaaccent Umacron -40
-KPX Rcommaaccent Uogonek -40
-KPX Rcommaaccent Uring -40
-KPX Rcommaaccent V -50
-KPX Rcommaaccent W -30
-KPX Rcommaaccent Y -50
-KPX Rcommaaccent Yacute -50
-KPX Rcommaaccent Ydieresis -50
-KPX S comma -20
-KPX S period -20
-KPX Sacute comma -20
-KPX Sacute period -20
-KPX Scaron comma -20
-KPX Scaron period -20
-KPX Scedilla comma -20
-KPX Scedilla period -20
-KPX Scommaaccent comma -20
-KPX Scommaaccent period -20
-KPX T A -120
-KPX T Aacute -120
-KPX T Abreve -120
-KPX T Acircumflex -120
-KPX T Adieresis -120
-KPX T Agrave -120
-KPX T Amacron -120
-KPX T Aogonek -120
-KPX T Aring -120
-KPX T Atilde -120
-KPX T O -40
-KPX T Oacute -40
-KPX T Ocircumflex -40
-KPX T Odieresis -40
-KPX T Ograve -40
-KPX T Ohungarumlaut -40
-KPX T Omacron -40
-KPX T Oslash -40
-KPX T Otilde -40
-KPX T a -120
-KPX T aacute -120
-KPX T abreve -60
-KPX T acircumflex -120
-KPX T adieresis -120
-KPX T agrave -120
-KPX T amacron -60
-KPX T aogonek -120
-KPX T aring -120
-KPX T atilde -60
-KPX T colon -20
-KPX T comma -120
-KPX T e -120
-KPX T eacute -120
-KPX T ecaron -120
-KPX T ecircumflex -120
-KPX T edieresis -120
-KPX T edotaccent -120
-KPX T egrave -60
-KPX T emacron -60
-KPX T eogonek -120
-KPX T hyphen -140
-KPX T o -120
-KPX T oacute -120
-KPX T ocircumflex -120
-KPX T odieresis -120
-KPX T ograve -120
-KPX T ohungarumlaut -120
-KPX T omacron -60
-KPX T oslash -120
-KPX T otilde -60
-KPX T period -120
-KPX T r -120
-KPX T racute -120
-KPX T rcaron -120
-KPX T rcommaaccent -120
-KPX T semicolon -20
-KPX T u -120
-KPX T uacute -120
-KPX T ucircumflex -120
-KPX T udieresis -120
-KPX T ugrave -120
-KPX T uhungarumlaut -120
-KPX T umacron -60
-KPX T uogonek -120
-KPX T uring -120
-KPX T w -120
-KPX T y -120
-KPX T yacute -120
-KPX T ydieresis -60
-KPX Tcaron A -120
-KPX Tcaron Aacute -120
-KPX Tcaron Abreve -120
-KPX Tcaron Acircumflex -120
-KPX Tcaron Adieresis -120
-KPX Tcaron Agrave -120
-KPX Tcaron Amacron -120
-KPX Tcaron Aogonek -120
-KPX Tcaron Aring -120
-KPX Tcaron Atilde -120
-KPX Tcaron O -40
-KPX Tcaron Oacute -40
-KPX Tcaron Ocircumflex -40
-KPX Tcaron Odieresis -40
-KPX Tcaron Ograve -40
-KPX Tcaron Ohungarumlaut -40
-KPX Tcaron Omacron -40
-KPX Tcaron Oslash -40
-KPX Tcaron Otilde -40
-KPX Tcaron a -120
-KPX Tcaron aacute -120
-KPX Tcaron abreve -60
-KPX Tcaron acircumflex -120
-KPX Tcaron adieresis -120
-KPX Tcaron agrave -120
-KPX Tcaron amacron -60
-KPX Tcaron aogonek -120
-KPX Tcaron aring -120
-KPX Tcaron atilde -60
-KPX Tcaron colon -20
-KPX Tcaron comma -120
-KPX Tcaron e -120
-KPX Tcaron eacute -120
-KPX Tcaron ecaron -120
-KPX Tcaron ecircumflex -120
-KPX Tcaron edieresis -120
-KPX Tcaron edotaccent -120
-KPX Tcaron egrave -60
-KPX Tcaron emacron -60
-KPX Tcaron eogonek -120
-KPX Tcaron hyphen -140
-KPX Tcaron o -120
-KPX Tcaron oacute -120
-KPX Tcaron ocircumflex -120
-KPX Tcaron odieresis -120
-KPX Tcaron ograve -120
-KPX Tcaron ohungarumlaut -120
-KPX Tcaron omacron -60
-KPX Tcaron oslash -120
-KPX Tcaron otilde -60
-KPX Tcaron period -120
-KPX Tcaron r -120
-KPX Tcaron racute -120
-KPX Tcaron rcaron -120
-KPX Tcaron rcommaaccent -120
-KPX Tcaron semicolon -20
-KPX Tcaron u -120
-KPX Tcaron uacute -120
-KPX Tcaron ucircumflex -120
-KPX Tcaron udieresis -120
-KPX Tcaron ugrave -120
-KPX Tcaron uhungarumlaut -120
-KPX Tcaron umacron -60
-KPX Tcaron uogonek -120
-KPX Tcaron uring -120
-KPX Tcaron w -120
-KPX Tcaron y -120
-KPX Tcaron yacute -120
-KPX Tcaron ydieresis -60
-KPX Tcommaaccent A -120
-KPX Tcommaaccent Aacute -120
-KPX Tcommaaccent Abreve -120
-KPX Tcommaaccent Acircumflex -120
-KPX Tcommaaccent Adieresis -120
-KPX Tcommaaccent Agrave -120
-KPX Tcommaaccent Amacron -120
-KPX Tcommaaccent Aogonek -120
-KPX Tcommaaccent Aring -120
-KPX Tcommaaccent Atilde -120
-KPX Tcommaaccent O -40
-KPX Tcommaaccent Oacute -40
-KPX Tcommaaccent Ocircumflex -40
-KPX Tcommaaccent Odieresis -40
-KPX Tcommaaccent Ograve -40
-KPX Tcommaaccent Ohungarumlaut -40
-KPX Tcommaaccent Omacron -40
-KPX Tcommaaccent Oslash -40
-KPX Tcommaaccent Otilde -40
-KPX Tcommaaccent a -120
-KPX Tcommaaccent aacute -120
-KPX Tcommaaccent abreve -60
-KPX Tcommaaccent acircumflex -120
-KPX Tcommaaccent adieresis -120
-KPX Tcommaaccent agrave -120
-KPX Tcommaaccent amacron -60
-KPX Tcommaaccent aogonek -120
-KPX Tcommaaccent aring -120
-KPX Tcommaaccent atilde -60
-KPX Tcommaaccent colon -20
-KPX Tcommaaccent comma -120
-KPX Tcommaaccent e -120
-KPX Tcommaaccent eacute -120
-KPX Tcommaaccent ecaron -120
-KPX Tcommaaccent ecircumflex -120
-KPX Tcommaaccent edieresis -120
-KPX Tcommaaccent edotaccent -120
-KPX Tcommaaccent egrave -60
-KPX Tcommaaccent emacron -60
-KPX Tcommaaccent eogonek -120
-KPX Tcommaaccent hyphen -140
-KPX Tcommaaccent o -120
-KPX Tcommaaccent oacute -120
-KPX Tcommaaccent ocircumflex -120
-KPX Tcommaaccent odieresis -120
-KPX Tcommaaccent ograve -120
-KPX Tcommaaccent ohungarumlaut -120
-KPX Tcommaaccent omacron -60
-KPX Tcommaaccent oslash -120
-KPX Tcommaaccent otilde -60
-KPX Tcommaaccent period -120
-KPX Tcommaaccent r -120
-KPX Tcommaaccent racute -120
-KPX Tcommaaccent rcaron -120
-KPX Tcommaaccent rcommaaccent -120
-KPX Tcommaaccent semicolon -20
-KPX Tcommaaccent u -120
-KPX Tcommaaccent uacute -120
-KPX Tcommaaccent ucircumflex -120
-KPX Tcommaaccent udieresis -120
-KPX Tcommaaccent ugrave -120
-KPX Tcommaaccent uhungarumlaut -120
-KPX Tcommaaccent umacron -60
-KPX Tcommaaccent uogonek -120
-KPX Tcommaaccent uring -120
-KPX Tcommaaccent w -120
-KPX Tcommaaccent y -120
-KPX Tcommaaccent yacute -120
-KPX Tcommaaccent ydieresis -60
-KPX U A -40
-KPX U Aacute -40
-KPX U Abreve -40
-KPX U Acircumflex -40
-KPX U Adieresis -40
-KPX U Agrave -40
-KPX U Amacron -40
-KPX U Aogonek -40
-KPX U Aring -40
-KPX U Atilde -40
-KPX U comma -40
-KPX U period -40
-KPX Uacute A -40
-KPX Uacute Aacute -40
-KPX Uacute Abreve -40
-KPX Uacute Acircumflex -40
-KPX Uacute Adieresis -40
-KPX Uacute Agrave -40
-KPX Uacute Amacron -40
-KPX Uacute Aogonek -40
-KPX Uacute Aring -40
-KPX Uacute Atilde -40
-KPX Uacute comma -40
-KPX Uacute period -40
-KPX Ucircumflex A -40
-KPX Ucircumflex Aacute -40
-KPX Ucircumflex Abreve -40
-KPX Ucircumflex Acircumflex -40
-KPX Ucircumflex Adieresis -40
-KPX Ucircumflex Agrave -40
-KPX Ucircumflex Amacron -40
-KPX Ucircumflex Aogonek -40
-KPX Ucircumflex Aring -40
-KPX Ucircumflex Atilde -40
-KPX Ucircumflex comma -40
-KPX Ucircumflex period -40
-KPX Udieresis A -40
-KPX Udieresis Aacute -40
-KPX Udieresis Abreve -40
-KPX Udieresis Acircumflex -40
-KPX Udieresis Adieresis -40
-KPX Udieresis Agrave -40
-KPX Udieresis Amacron -40
-KPX Udieresis Aogonek -40
-KPX Udieresis Aring -40
-KPX Udieresis Atilde -40
-KPX Udieresis comma -40
-KPX Udieresis period -40
-KPX Ugrave A -40
-KPX Ugrave Aacute -40
-KPX Ugrave Abreve -40
-KPX Ugrave Acircumflex -40
-KPX Ugrave Adieresis -40
-KPX Ugrave Agrave -40
-KPX Ugrave Amacron -40
-KPX Ugrave Aogonek -40
-KPX Ugrave Aring -40
-KPX Ugrave Atilde -40
-KPX Ugrave comma -40
-KPX Ugrave period -40
-KPX Uhungarumlaut A -40
-KPX Uhungarumlaut Aacute -40
-KPX Uhungarumlaut Abreve -40
-KPX Uhungarumlaut Acircumflex -40
-KPX Uhungarumlaut Adieresis -40
-KPX Uhungarumlaut Agrave -40
-KPX Uhungarumlaut Amacron -40
-KPX Uhungarumlaut Aogonek -40
-KPX Uhungarumlaut Aring -40
-KPX Uhungarumlaut Atilde -40
-KPX Uhungarumlaut comma -40
-KPX Uhungarumlaut period -40
-KPX Umacron A -40
-KPX Umacron Aacute -40
-KPX Umacron Abreve -40
-KPX Umacron Acircumflex -40
-KPX Umacron Adieresis -40
-KPX Umacron Agrave -40
-KPX Umacron Amacron -40
-KPX Umacron Aogonek -40
-KPX Umacron Aring -40
-KPX Umacron Atilde -40
-KPX Umacron comma -40
-KPX Umacron period -40
-KPX Uogonek A -40
-KPX Uogonek Aacute -40
-KPX Uogonek Abreve -40
-KPX Uogonek Acircumflex -40
-KPX Uogonek Adieresis -40
-KPX Uogonek Agrave -40
-KPX Uogonek Amacron -40
-KPX Uogonek Aogonek -40
-KPX Uogonek Aring -40
-KPX Uogonek Atilde -40
-KPX Uogonek comma -40
-KPX Uogonek period -40
-KPX Uring A -40
-KPX Uring Aacute -40
-KPX Uring Abreve -40
-KPX Uring Acircumflex -40
-KPX Uring Adieresis -40
-KPX Uring Agrave -40
-KPX Uring Amacron -40
-KPX Uring Aogonek -40
-KPX Uring Aring -40
-KPX Uring Atilde -40
-KPX Uring comma -40
-KPX Uring period -40
-KPX V A -80
-KPX V Aacute -80
-KPX V Abreve -80
-KPX V Acircumflex -80
-KPX V Adieresis -80
-KPX V Agrave -80
-KPX V Amacron -80
-KPX V Aogonek -80
-KPX V Aring -80
-KPX V Atilde -80
-KPX V G -40
-KPX V Gbreve -40
-KPX V Gcommaaccent -40
-KPX V O -40
-KPX V Oacute -40
-KPX V Ocircumflex -40
-KPX V Odieresis -40
-KPX V Ograve -40
-KPX V Ohungarumlaut -40
-KPX V Omacron -40
-KPX V Oslash -40
-KPX V Otilde -40
-KPX V a -70
-KPX V aacute -70
-KPX V abreve -70
-KPX V acircumflex -70
-KPX V adieresis -70
-KPX V agrave -70
-KPX V amacron -70
-KPX V aogonek -70
-KPX V aring -70
-KPX V atilde -70
-KPX V colon -40
-KPX V comma -125
-KPX V e -80
-KPX V eacute -80
-KPX V ecaron -80
-KPX V ecircumflex -80
-KPX V edieresis -80
-KPX V edotaccent -80
-KPX V egrave -80
-KPX V emacron -80
-KPX V eogonek -80
-KPX V hyphen -80
-KPX V o -80
-KPX V oacute -80
-KPX V ocircumflex -80
-KPX V odieresis -80
-KPX V ograve -80
-KPX V ohungarumlaut -80
-KPX V omacron -80
-KPX V oslash -80
-KPX V otilde -80
-KPX V period -125
-KPX V semicolon -40
-KPX V u -70
-KPX V uacute -70
-KPX V ucircumflex -70
-KPX V udieresis -70
-KPX V ugrave -70
-KPX V uhungarumlaut -70
-KPX V umacron -70
-KPX V uogonek -70
-KPX V uring -70
-KPX W A -50
-KPX W Aacute -50
-KPX W Abreve -50
-KPX W Acircumflex -50
-KPX W Adieresis -50
-KPX W Agrave -50
-KPX W Amacron -50
-KPX W Aogonek -50
-KPX W Aring -50
-KPX W Atilde -50
-KPX W O -20
-KPX W Oacute -20
-KPX W Ocircumflex -20
-KPX W Odieresis -20
-KPX W Ograve -20
-KPX W Ohungarumlaut -20
-KPX W Omacron -20
-KPX W Oslash -20
-KPX W Otilde -20
-KPX W a -40
-KPX W aacute -40
-KPX W abreve -40
-KPX W acircumflex -40
-KPX W adieresis -40
-KPX W agrave -40
-KPX W amacron -40
-KPX W aogonek -40
-KPX W aring -40
-KPX W atilde -40
-KPX W comma -80
-KPX W e -30
-KPX W eacute -30
-KPX W ecaron -30
-KPX W ecircumflex -30
-KPX W edieresis -30
-KPX W edotaccent -30
-KPX W egrave -30
-KPX W emacron -30
-KPX W eogonek -30
-KPX W hyphen -40
-KPX W o -30
-KPX W oacute -30
-KPX W ocircumflex -30
-KPX W odieresis -30
-KPX W ograve -30
-KPX W ohungarumlaut -30
-KPX W omacron -30
-KPX W oslash -30
-KPX W otilde -30
-KPX W period -80
-KPX W u -30
-KPX W uacute -30
-KPX W ucircumflex -30
-KPX W udieresis -30
-KPX W ugrave -30
-KPX W uhungarumlaut -30
-KPX W umacron -30
-KPX W uogonek -30
-KPX W uring -30
-KPX W y -20
-KPX W yacute -20
-KPX W ydieresis -20
-KPX Y A -110
-KPX Y Aacute -110
-KPX Y Abreve -110
-KPX Y Acircumflex -110
-KPX Y Adieresis -110
-KPX Y Agrave -110
-KPX Y Amacron -110
-KPX Y Aogonek -110
-KPX Y Aring -110
-KPX Y Atilde -110
-KPX Y O -85
-KPX Y Oacute -85
-KPX Y Ocircumflex -85
-KPX Y Odieresis -85
-KPX Y Ograve -85
-KPX Y Ohungarumlaut -85
-KPX Y Omacron -85
-KPX Y Oslash -85
-KPX Y Otilde -85
-KPX Y a -140
-KPX Y aacute -140
-KPX Y abreve -70
-KPX Y acircumflex -140
-KPX Y adieresis -140
-KPX Y agrave -140
-KPX Y amacron -70
-KPX Y aogonek -140
-KPX Y aring -140
-KPX Y atilde -140
-KPX Y colon -60
-KPX Y comma -140
-KPX Y e -140
-KPX Y eacute -140
-KPX Y ecaron -140
-KPX Y ecircumflex -140
-KPX Y edieresis -140
-KPX Y edotaccent -140
-KPX Y egrave -140
-KPX Y emacron -70
-KPX Y eogonek -140
-KPX Y hyphen -140
-KPX Y i -20
-KPX Y iacute -20
-KPX Y iogonek -20
-KPX Y o -140
-KPX Y oacute -140
-KPX Y ocircumflex -140
-KPX Y odieresis -140
-KPX Y ograve -140
-KPX Y ohungarumlaut -140
-KPX Y omacron -140
-KPX Y oslash -140
-KPX Y otilde -140
-KPX Y period -140
-KPX Y semicolon -60
-KPX Y u -110
-KPX Y uacute -110
-KPX Y ucircumflex -110
-KPX Y udieresis -110
-KPX Y ugrave -110
-KPX Y uhungarumlaut -110
-KPX Y umacron -110
-KPX Y uogonek -110
-KPX Y uring -110
-KPX Yacute A -110
-KPX Yacute Aacute -110
-KPX Yacute Abreve -110
-KPX Yacute Acircumflex -110
-KPX Yacute Adieresis -110
-KPX Yacute Agrave -110
-KPX Yacute Amacron -110
-KPX Yacute Aogonek -110
-KPX Yacute Aring -110
-KPX Yacute Atilde -110
-KPX Yacute O -85
-KPX Yacute Oacute -85
-KPX Yacute Ocircumflex -85
-KPX Yacute Odieresis -85
-KPX Yacute Ograve -85
-KPX Yacute Ohungarumlaut -85
-KPX Yacute Omacron -85
-KPX Yacute Oslash -85
-KPX Yacute Otilde -85
-KPX Yacute a -140
-KPX Yacute aacute -140
-KPX Yacute abreve -70
-KPX Yacute acircumflex -140
-KPX Yacute adieresis -140
-KPX Yacute agrave -140
-KPX Yacute amacron -70
-KPX Yacute aogonek -140
-KPX Yacute aring -140
-KPX Yacute atilde -70
-KPX Yacute colon -60
-KPX Yacute comma -140
-KPX Yacute e -140
-KPX Yacute eacute -140
-KPX Yacute ecaron -140
-KPX Yacute ecircumflex -140
-KPX Yacute edieresis -140
-KPX Yacute edotaccent -140
-KPX Yacute egrave -140
-KPX Yacute emacron -70
-KPX Yacute eogonek -140
-KPX Yacute hyphen -140
-KPX Yacute i -20
-KPX Yacute iacute -20
-KPX Yacute iogonek -20
-KPX Yacute o -140
-KPX Yacute oacute -140
-KPX Yacute ocircumflex -140
-KPX Yacute odieresis -140
-KPX Yacute ograve -140
-KPX Yacute ohungarumlaut -140
-KPX Yacute omacron -70
-KPX Yacute oslash -140
-KPX Yacute otilde -140
-KPX Yacute period -140
-KPX Yacute semicolon -60
-KPX Yacute u -110
-KPX Yacute uacute -110
-KPX Yacute ucircumflex -110
-KPX Yacute udieresis -110
-KPX Yacute ugrave -110
-KPX Yacute uhungarumlaut -110
-KPX Yacute umacron -110
-KPX Yacute uogonek -110
-KPX Yacute uring -110
-KPX Ydieresis A -110
-KPX Ydieresis Aacute -110
-KPX Ydieresis Abreve -110
-KPX Ydieresis Acircumflex -110
-KPX Ydieresis Adieresis -110
-KPX Ydieresis Agrave -110
-KPX Ydieresis Amacron -110
-KPX Ydieresis Aogonek -110
-KPX Ydieresis Aring -110
-KPX Ydieresis Atilde -110
-KPX Ydieresis O -85
-KPX Ydieresis Oacute -85
-KPX Ydieresis Ocircumflex -85
-KPX Ydieresis Odieresis -85
-KPX Ydieresis Ograve -85
-KPX Ydieresis Ohungarumlaut -85
-KPX Ydieresis Omacron -85
-KPX Ydieresis Oslash -85
-KPX Ydieresis Otilde -85
-KPX Ydieresis a -140
-KPX Ydieresis aacute -140
-KPX Ydieresis abreve -70
-KPX Ydieresis acircumflex -140
-KPX Ydieresis adieresis -140
-KPX Ydieresis agrave -140
-KPX Ydieresis amacron -70
-KPX Ydieresis aogonek -140
-KPX Ydieresis aring -140
-KPX Ydieresis atilde -70
-KPX Ydieresis colon -60
-KPX Ydieresis comma -140
-KPX Ydieresis e -140
-KPX Ydieresis eacute -140
-KPX Ydieresis ecaron -140
-KPX Ydieresis ecircumflex -140
-KPX Ydieresis edieresis -140
-KPX Ydieresis edotaccent -140
-KPX Ydieresis egrave -140
-KPX Ydieresis emacron -70
-KPX Ydieresis eogonek -140
-KPX Ydieresis hyphen -140
-KPX Ydieresis i -20
-KPX Ydieresis iacute -20
-KPX Ydieresis iogonek -20
-KPX Ydieresis o -140
-KPX Ydieresis oacute -140
-KPX Ydieresis ocircumflex -140
-KPX Ydieresis odieresis -140
-KPX Ydieresis ograve -140
-KPX Ydieresis ohungarumlaut -140
-KPX Ydieresis omacron -140
-KPX Ydieresis oslash -140
-KPX Ydieresis otilde -140
-KPX Ydieresis period -140
-KPX Ydieresis semicolon -60
-KPX Ydieresis u -110
-KPX Ydieresis uacute -110
-KPX Ydieresis ucircumflex -110
-KPX Ydieresis udieresis -110
-KPX Ydieresis ugrave -110
-KPX Ydieresis uhungarumlaut -110
-KPX Ydieresis umacron -110
-KPX Ydieresis uogonek -110
-KPX Ydieresis uring -110
-KPX a v -20
-KPX a w -20
-KPX a y -30
-KPX a yacute -30
-KPX a ydieresis -30
-KPX aacute v -20
-KPX aacute w -20
-KPX aacute y -30
-KPX aacute yacute -30
-KPX aacute ydieresis -30
-KPX abreve v -20
-KPX abreve w -20
-KPX abreve y -30
-KPX abreve yacute -30
-KPX abreve ydieresis -30
-KPX acircumflex v -20
-KPX acircumflex w -20
-KPX acircumflex y -30
-KPX acircumflex yacute -30
-KPX acircumflex ydieresis -30
-KPX adieresis v -20
-KPX adieresis w -20
-KPX adieresis y -30
-KPX adieresis yacute -30
-KPX adieresis ydieresis -30
-KPX agrave v -20
-KPX agrave w -20
-KPX agrave y -30
-KPX agrave yacute -30
-KPX agrave ydieresis -30
-KPX amacron v -20
-KPX amacron w -20
-KPX amacron y -30
-KPX amacron yacute -30
-KPX amacron ydieresis -30
-KPX aogonek v -20
-KPX aogonek w -20
-KPX aogonek y -30
-KPX aogonek yacute -30
-KPX aogonek ydieresis -30
-KPX aring v -20
-KPX aring w -20
-KPX aring y -30
-KPX aring yacute -30
-KPX aring ydieresis -30
-KPX atilde v -20
-KPX atilde w -20
-KPX atilde y -30
-KPX atilde yacute -30
-KPX atilde ydieresis -30
-KPX b b -10
-KPX b comma -40
-KPX b l -20
-KPX b lacute -20
-KPX b lcommaaccent -20
-KPX b lslash -20
-KPX b period -40
-KPX b u -20
-KPX b uacute -20
-KPX b ucircumflex -20
-KPX b udieresis -20
-KPX b ugrave -20
-KPX b uhungarumlaut -20
-KPX b umacron -20
-KPX b uogonek -20
-KPX b uring -20
-KPX b v -20
-KPX b y -20
-KPX b yacute -20
-KPX b ydieresis -20
-KPX c comma -15
-KPX c k -20
-KPX c kcommaaccent -20
-KPX cacute comma -15
-KPX cacute k -20
-KPX cacute kcommaaccent -20
-KPX ccaron comma -15
-KPX ccaron k -20
-KPX ccaron kcommaaccent -20
-KPX ccedilla comma -15
-KPX ccedilla k -20
-KPX ccedilla kcommaaccent -20
-KPX colon space -50
-KPX comma quotedblright -100
-KPX comma quoteright -100
-KPX e comma -15
-KPX e period -15
-KPX e v -30
-KPX e w -20
-KPX e x -30
-KPX e y -20
-KPX e yacute -20
-KPX e ydieresis -20
-KPX eacute comma -15
-KPX eacute period -15
-KPX eacute v -30
-KPX eacute w -20
-KPX eacute x -30
-KPX eacute y -20
-KPX eacute yacute -20
-KPX eacute ydieresis -20
-KPX ecaron comma -15
-KPX ecaron period -15
-KPX ecaron v -30
-KPX ecaron w -20
-KPX ecaron x -30
-KPX ecaron y -20
-KPX ecaron yacute -20
-KPX ecaron ydieresis -20
-KPX ecircumflex comma -15
-KPX ecircumflex period -15
-KPX ecircumflex v -30
-KPX ecircumflex w -20
-KPX ecircumflex x -30
-KPX ecircumflex y -20
-KPX ecircumflex yacute -20
-KPX ecircumflex ydieresis -20
-KPX edieresis comma -15
-KPX edieresis period -15
-KPX edieresis v -30
-KPX edieresis w -20
-KPX edieresis x -30
-KPX edieresis y -20
-KPX edieresis yacute -20
-KPX edieresis ydieresis -20
-KPX edotaccent comma -15
-KPX edotaccent period -15
-KPX edotaccent v -30
-KPX edotaccent w -20
-KPX edotaccent x -30
-KPX edotaccent y -20
-KPX edotaccent yacute -20
-KPX edotaccent ydieresis -20
-KPX egrave comma -15
-KPX egrave period -15
-KPX egrave v -30
-KPX egrave w -20
-KPX egrave x -30
-KPX egrave y -20
-KPX egrave yacute -20
-KPX egrave ydieresis -20
-KPX emacron comma -15
-KPX emacron period -15
-KPX emacron v -30
-KPX emacron w -20
-KPX emacron x -30
-KPX emacron y -20
-KPX emacron yacute -20
-KPX emacron ydieresis -20
-KPX eogonek comma -15
-KPX eogonek period -15
-KPX eogonek v -30
-KPX eogonek w -20
-KPX eogonek x -30
-KPX eogonek y -20
-KPX eogonek yacute -20
-KPX eogonek ydieresis -20
-KPX f a -30
-KPX f aacute -30
-KPX f abreve -30
-KPX f acircumflex -30
-KPX f adieresis -30
-KPX f agrave -30
-KPX f amacron -30
-KPX f aogonek -30
-KPX f aring -30
-KPX f atilde -30
-KPX f comma -30
-KPX f dotlessi -28
-KPX f e -30
-KPX f eacute -30
-KPX f ecaron -30
-KPX f ecircumflex -30
-KPX f edieresis -30
-KPX f edotaccent -30
-KPX f egrave -30
-KPX f emacron -30
-KPX f eogonek -30
-KPX f o -30
-KPX f oacute -30
-KPX f ocircumflex -30
-KPX f odieresis -30
-KPX f ograve -30
-KPX f ohungarumlaut -30
-KPX f omacron -30
-KPX f oslash -30
-KPX f otilde -30
-KPX f period -30
-KPX f quotedblright 60
-KPX f quoteright 50
-KPX g r -10
-KPX g racute -10
-KPX g rcaron -10
-KPX g rcommaaccent -10
-KPX gbreve r -10
-KPX gbreve racute -10
-KPX gbreve rcaron -10
-KPX gbreve rcommaaccent -10
-KPX gcommaaccent r -10
-KPX gcommaaccent racute -10
-KPX gcommaaccent rcaron -10
-KPX gcommaaccent rcommaaccent -10
-KPX h y -30
-KPX h yacute -30
-KPX h ydieresis -30
-KPX k e -20
-KPX k eacute -20
-KPX k ecaron -20
-KPX k ecircumflex -20
-KPX k edieresis -20
-KPX k edotaccent -20
-KPX k egrave -20
-KPX k emacron -20
-KPX k eogonek -20
-KPX k o -20
-KPX k oacute -20
-KPX k ocircumflex -20
-KPX k odieresis -20
-KPX k ograve -20
-KPX k ohungarumlaut -20
-KPX k omacron -20
-KPX k oslash -20
-KPX k otilde -20
-KPX kcommaaccent e -20
-KPX kcommaaccent eacute -20
-KPX kcommaaccent ecaron -20
-KPX kcommaaccent ecircumflex -20
-KPX kcommaaccent edieresis -20
-KPX kcommaaccent edotaccent -20
-KPX kcommaaccent egrave -20
-KPX kcommaaccent emacron -20
-KPX kcommaaccent eogonek -20
-KPX kcommaaccent o -20
-KPX kcommaaccent oacute -20
-KPX kcommaaccent ocircumflex -20
-KPX kcommaaccent odieresis -20
-KPX kcommaaccent ograve -20
-KPX kcommaaccent ohungarumlaut -20
-KPX kcommaaccent omacron -20
-KPX kcommaaccent oslash -20
-KPX kcommaaccent otilde -20
-KPX m u -10
-KPX m uacute -10
-KPX m ucircumflex -10
-KPX m udieresis -10
-KPX m ugrave -10
-KPX m uhungarumlaut -10
-KPX m umacron -10
-KPX m uogonek -10
-KPX m uring -10
-KPX m y -15
-KPX m yacute -15
-KPX m ydieresis -15
-KPX n u -10
-KPX n uacute -10
-KPX n ucircumflex -10
-KPX n udieresis -10
-KPX n ugrave -10
-KPX n uhungarumlaut -10
-KPX n umacron -10
-KPX n uogonek -10
-KPX n uring -10
-KPX n v -20
-KPX n y -15
-KPX n yacute -15
-KPX n ydieresis -15
-KPX nacute u -10
-KPX nacute uacute -10
-KPX nacute ucircumflex -10
-KPX nacute udieresis -10
-KPX nacute ugrave -10
-KPX nacute uhungarumlaut -10
-KPX nacute umacron -10
-KPX nacute uogonek -10
-KPX nacute uring -10
-KPX nacute v -20
-KPX nacute y -15
-KPX nacute yacute -15
-KPX nacute ydieresis -15
-KPX ncaron u -10
-KPX ncaron uacute -10
-KPX ncaron ucircumflex -10
-KPX ncaron udieresis -10
-KPX ncaron ugrave -10
-KPX ncaron uhungarumlaut -10
-KPX ncaron umacron -10
-KPX ncaron uogonek -10
-KPX ncaron uring -10
-KPX ncaron v -20
-KPX ncaron y -15
-KPX ncaron yacute -15
-KPX ncaron ydieresis -15
-KPX ncommaaccent u -10
-KPX ncommaaccent uacute -10
-KPX ncommaaccent ucircumflex -10
-KPX ncommaaccent udieresis -10
-KPX ncommaaccent ugrave -10
-KPX ncommaaccent uhungarumlaut -10
-KPX ncommaaccent umacron -10
-KPX ncommaaccent uogonek -10
-KPX ncommaaccent uring -10
-KPX ncommaaccent v -20
-KPX ncommaaccent y -15
-KPX ncommaaccent yacute -15
-KPX ncommaaccent ydieresis -15
-KPX ntilde u -10
-KPX ntilde uacute -10
-KPX ntilde ucircumflex -10
-KPX ntilde udieresis -10
-KPX ntilde ugrave -10
-KPX ntilde uhungarumlaut -10
-KPX ntilde umacron -10
-KPX ntilde uogonek -10
-KPX ntilde uring -10
-KPX ntilde v -20
-KPX ntilde y -15
-KPX ntilde yacute -15
-KPX ntilde ydieresis -15
-KPX o comma -40
-KPX o period -40
-KPX o v -15
-KPX o w -15
-KPX o x -30
-KPX o y -30
-KPX o yacute -30
-KPX o ydieresis -30
-KPX oacute comma -40
-KPX oacute period -40
-KPX oacute v -15
-KPX oacute w -15
-KPX oacute x -30
-KPX oacute y -30
-KPX oacute yacute -30
-KPX oacute ydieresis -30
-KPX ocircumflex comma -40
-KPX ocircumflex period -40
-KPX ocircumflex v -15
-KPX ocircumflex w -15
-KPX ocircumflex x -30
-KPX ocircumflex y -30
-KPX ocircumflex yacute -30
-KPX ocircumflex ydieresis -30
-KPX odieresis comma -40
-KPX odieresis period -40
-KPX odieresis v -15
-KPX odieresis w -15
-KPX odieresis x -30
-KPX odieresis y -30
-KPX odieresis yacute -30
-KPX odieresis ydieresis -30
-KPX ograve comma -40
-KPX ograve period -40
-KPX ograve v -15
-KPX ograve w -15
-KPX ograve x -30
-KPX ograve y -30
-KPX ograve yacute -30
-KPX ograve ydieresis -30
-KPX ohungarumlaut comma -40
-KPX ohungarumlaut period -40
-KPX ohungarumlaut v -15
-KPX ohungarumlaut w -15
-KPX ohungarumlaut x -30
-KPX ohungarumlaut y -30
-KPX ohungarumlaut yacute -30
-KPX ohungarumlaut ydieresis -30
-KPX omacron comma -40
-KPX omacron period -40
-KPX omacron v -15
-KPX omacron w -15
-KPX omacron x -30
-KPX omacron y -30
-KPX omacron yacute -30
-KPX omacron ydieresis -30
-KPX oslash a -55
-KPX oslash aacute -55
-KPX oslash abreve -55
-KPX oslash acircumflex -55
-KPX oslash adieresis -55
-KPX oslash agrave -55
-KPX oslash amacron -55
-KPX oslash aogonek -55
-KPX oslash aring -55
-KPX oslash atilde -55
-KPX oslash b -55
-KPX oslash c -55
-KPX oslash cacute -55
-KPX oslash ccaron -55
-KPX oslash ccedilla -55
-KPX oslash comma -95
-KPX oslash d -55
-KPX oslash dcroat -55
-KPX oslash e -55
-KPX oslash eacute -55
-KPX oslash ecaron -55
-KPX oslash ecircumflex -55
-KPX oslash edieresis -55
-KPX oslash edotaccent -55
-KPX oslash egrave -55
-KPX oslash emacron -55
-KPX oslash eogonek -55
-KPX oslash f -55
-KPX oslash g -55
-KPX oslash gbreve -55
-KPX oslash gcommaaccent -55
-KPX oslash h -55
-KPX oslash i -55
-KPX oslash iacute -55
-KPX oslash icircumflex -55
-KPX oslash idieresis -55
-KPX oslash igrave -55
-KPX oslash imacron -55
-KPX oslash iogonek -55
-KPX oslash j -55
-KPX oslash k -55
-KPX oslash kcommaaccent -55
-KPX oslash l -55
-KPX oslash lacute -55
-KPX oslash lcommaaccent -55
-KPX oslash lslash -55
-KPX oslash m -55
-KPX oslash n -55
-KPX oslash nacute -55
-KPX oslash ncaron -55
-KPX oslash ncommaaccent -55
-KPX oslash ntilde -55
-KPX oslash o -55
-KPX oslash oacute -55
-KPX oslash ocircumflex -55
-KPX oslash odieresis -55
-KPX oslash ograve -55
-KPX oslash ohungarumlaut -55
-KPX oslash omacron -55
-KPX oslash oslash -55
-KPX oslash otilde -55
-KPX oslash p -55
-KPX oslash period -95
-KPX oslash q -55
-KPX oslash r -55
-KPX oslash racute -55
-KPX oslash rcaron -55
-KPX oslash rcommaaccent -55
-KPX oslash s -55
-KPX oslash sacute -55
-KPX oslash scaron -55
-KPX oslash scedilla -55
-KPX oslash scommaaccent -55
-KPX oslash t -55
-KPX oslash tcommaaccent -55
-KPX oslash u -55
-KPX oslash uacute -55
-KPX oslash ucircumflex -55
-KPX oslash udieresis -55
-KPX oslash ugrave -55
-KPX oslash uhungarumlaut -55
-KPX oslash umacron -55
-KPX oslash uogonek -55
-KPX oslash uring -55
-KPX oslash v -70
-KPX oslash w -70
-KPX oslash x -85
-KPX oslash y -70
-KPX oslash yacute -70
-KPX oslash ydieresis -70
-KPX oslash z -55
-KPX oslash zacute -55
-KPX oslash zcaron -55
-KPX oslash zdotaccent -55
-KPX otilde comma -40
-KPX otilde period -40
-KPX otilde v -15
-KPX otilde w -15
-KPX otilde x -30
-KPX otilde y -30
-KPX otilde yacute -30
-KPX otilde ydieresis -30
-KPX p comma -35
-KPX p period -35
-KPX p y -30
-KPX p yacute -30
-KPX p ydieresis -30
-KPX period quotedblright -100
-KPX period quoteright -100
-KPX period space -60
-KPX quotedblright space -40
-KPX quoteleft quoteleft -57
-KPX quoteright d -50
-KPX quoteright dcroat -50
-KPX quoteright quoteright -57
-KPX quoteright r -50
-KPX quoteright racute -50
-KPX quoteright rcaron -50
-KPX quoteright rcommaaccent -50
-KPX quoteright s -50
-KPX quoteright sacute -50
-KPX quoteright scaron -50
-KPX quoteright scedilla -50
-KPX quoteright scommaaccent -50
-KPX quoteright space -70
-KPX r a -10
-KPX r aacute -10
-KPX r abreve -10
-KPX r acircumflex -10
-KPX r adieresis -10
-KPX r agrave -10
-KPX r amacron -10
-KPX r aogonek -10
-KPX r aring -10
-KPX r atilde -10
-KPX r colon 30
-KPX r comma -50
-KPX r i 15
-KPX r iacute 15
-KPX r icircumflex 15
-KPX r idieresis 15
-KPX r igrave 15
-KPX r imacron 15
-KPX r iogonek 15
-KPX r k 15
-KPX r kcommaaccent 15
-KPX r l 15
-KPX r lacute 15
-KPX r lcommaaccent 15
-KPX r lslash 15
-KPX r m 25
-KPX r n 25
-KPX r nacute 25
-KPX r ncaron 25
-KPX r ncommaaccent 25
-KPX r ntilde 25
-KPX r p 30
-KPX r period -50
-KPX r semicolon 30
-KPX r t 40
-KPX r tcommaaccent 40
-KPX r u 15
-KPX r uacute 15
-KPX r ucircumflex 15
-KPX r udieresis 15
-KPX r ugrave 15
-KPX r uhungarumlaut 15
-KPX r umacron 15
-KPX r uogonek 15
-KPX r uring 15
-KPX r v 30
-KPX r y 30
-KPX r yacute 30
-KPX r ydieresis 30
-KPX racute a -10
-KPX racute aacute -10
-KPX racute abreve -10
-KPX racute acircumflex -10
-KPX racute adieresis -10
-KPX racute agrave -10
-KPX racute amacron -10
-KPX racute aogonek -10
-KPX racute aring -10
-KPX racute atilde -10
-KPX racute colon 30
-KPX racute comma -50
-KPX racute i 15
-KPX racute iacute 15
-KPX racute icircumflex 15
-KPX racute idieresis 15
-KPX racute igrave 15
-KPX racute imacron 15
-KPX racute iogonek 15
-KPX racute k 15
-KPX racute kcommaaccent 15
-KPX racute l 15
-KPX racute lacute 15
-KPX racute lcommaaccent 15
-KPX racute lslash 15
-KPX racute m 25
-KPX racute n 25
-KPX racute nacute 25
-KPX racute ncaron 25
-KPX racute ncommaaccent 25
-KPX racute ntilde 25
-KPX racute p 30
-KPX racute period -50
-KPX racute semicolon 30
-KPX racute t 40
-KPX racute tcommaaccent 40
-KPX racute u 15
-KPX racute uacute 15
-KPX racute ucircumflex 15
-KPX racute udieresis 15
-KPX racute ugrave 15
-KPX racute uhungarumlaut 15
-KPX racute umacron 15
-KPX racute uogonek 15
-KPX racute uring 15
-KPX racute v 30
-KPX racute y 30
-KPX racute yacute 30
-KPX racute ydieresis 30
-KPX rcaron a -10
-KPX rcaron aacute -10
-KPX rcaron abreve -10
-KPX rcaron acircumflex -10
-KPX rcaron adieresis -10
-KPX rcaron agrave -10
-KPX rcaron amacron -10
-KPX rcaron aogonek -10
-KPX rcaron aring -10
-KPX rcaron atilde -10
-KPX rcaron colon 30
-KPX rcaron comma -50
-KPX rcaron i 15
-KPX rcaron iacute 15
-KPX rcaron icircumflex 15
-KPX rcaron idieresis 15
-KPX rcaron igrave 15
-KPX rcaron imacron 15
-KPX rcaron iogonek 15
-KPX rcaron k 15
-KPX rcaron kcommaaccent 15
-KPX rcaron l 15
-KPX rcaron lacute 15
-KPX rcaron lcommaaccent 15
-KPX rcaron lslash 15
-KPX rcaron m 25
-KPX rcaron n 25
-KPX rcaron nacute 25
-KPX rcaron ncaron 25
-KPX rcaron ncommaaccent 25
-KPX rcaron ntilde 25
-KPX rcaron p 30
-KPX rcaron period -50
-KPX rcaron semicolon 30
-KPX rcaron t 40
-KPX rcaron tcommaaccent 40
-KPX rcaron u 15
-KPX rcaron uacute 15
-KPX rcaron ucircumflex 15
-KPX rcaron udieresis 15
-KPX rcaron ugrave 15
-KPX rcaron uhungarumlaut 15
-KPX rcaron umacron 15
-KPX rcaron uogonek 15
-KPX rcaron uring 15
-KPX rcaron v 30
-KPX rcaron y 30
-KPX rcaron yacute 30
-KPX rcaron ydieresis 30
-KPX rcommaaccent a -10
-KPX rcommaaccent aacute -10
-KPX rcommaaccent abreve -10
-KPX rcommaaccent acircumflex -10
-KPX rcommaaccent adieresis -10
-KPX rcommaaccent agrave -10
-KPX rcommaaccent amacron -10
-KPX rcommaaccent aogonek -10
-KPX rcommaaccent aring -10
-KPX rcommaaccent atilde -10
-KPX rcommaaccent colon 30
-KPX rcommaaccent comma -50
-KPX rcommaaccent i 15
-KPX rcommaaccent iacute 15
-KPX rcommaaccent icircumflex 15
-KPX rcommaaccent idieresis 15
-KPX rcommaaccent igrave 15
-KPX rcommaaccent imacron 15
-KPX rcommaaccent iogonek 15
-KPX rcommaaccent k 15
-KPX rcommaaccent kcommaaccent 15
-KPX rcommaaccent l 15
-KPX rcommaaccent lacute 15
-KPX rcommaaccent lcommaaccent 15
-KPX rcommaaccent lslash 15
-KPX rcommaaccent m 25
-KPX rcommaaccent n 25
-KPX rcommaaccent nacute 25
-KPX rcommaaccent ncaron 25
-KPX rcommaaccent ncommaaccent 25
-KPX rcommaaccent ntilde 25
-KPX rcommaaccent p 30
-KPX rcommaaccent period -50
-KPX rcommaaccent semicolon 30
-KPX rcommaaccent t 40
-KPX rcommaaccent tcommaaccent 40
-KPX rcommaaccent u 15
-KPX rcommaaccent uacute 15
-KPX rcommaaccent ucircumflex 15
-KPX rcommaaccent udieresis 15
-KPX rcommaaccent ugrave 15
-KPX rcommaaccent uhungarumlaut 15
-KPX rcommaaccent umacron 15
-KPX rcommaaccent uogonek 15
-KPX rcommaaccent uring 15
-KPX rcommaaccent v 30
-KPX rcommaaccent y 30
-KPX rcommaaccent yacute 30
-KPX rcommaaccent ydieresis 30
-KPX s comma -15
-KPX s period -15
-KPX s w -30
-KPX sacute comma -15
-KPX sacute period -15
-KPX sacute w -30
-KPX scaron comma -15
-KPX scaron period -15
-KPX scaron w -30
-KPX scedilla comma -15
-KPX scedilla period -15
-KPX scedilla w -30
-KPX scommaaccent comma -15
-KPX scommaaccent period -15
-KPX scommaaccent w -30
-KPX semicolon space -50
-KPX space T -50
-KPX space Tcaron -50
-KPX space Tcommaaccent -50
-KPX space V -50
-KPX space W -40
-KPX space Y -90
-KPX space Yacute -90
-KPX space Ydieresis -90
-KPX space quotedblleft -30
-KPX space quoteleft -60
-KPX v a -25
-KPX v aacute -25
-KPX v abreve -25
-KPX v acircumflex -25
-KPX v adieresis -25
-KPX v agrave -25
-KPX v amacron -25
-KPX v aogonek -25
-KPX v aring -25
-KPX v atilde -25
-KPX v comma -80
-KPX v e -25
-KPX v eacute -25
-KPX v ecaron -25
-KPX v ecircumflex -25
-KPX v edieresis -25
-KPX v edotaccent -25
-KPX v egrave -25
-KPX v emacron -25
-KPX v eogonek -25
-KPX v o -25
-KPX v oacute -25
-KPX v ocircumflex -25
-KPX v odieresis -25
-KPX v ograve -25
-KPX v ohungarumlaut -25
-KPX v omacron -25
-KPX v oslash -25
-KPX v otilde -25
-KPX v period -80
-KPX w a -15
-KPX w aacute -15
-KPX w abreve -15
-KPX w acircumflex -15
-KPX w adieresis -15
-KPX w agrave -15
-KPX w amacron -15
-KPX w aogonek -15
-KPX w aring -15
-KPX w atilde -15
-KPX w comma -60
-KPX w e -10
-KPX w eacute -10
-KPX w ecaron -10
-KPX w ecircumflex -10
-KPX w edieresis -10
-KPX w edotaccent -10
-KPX w egrave -10
-KPX w emacron -10
-KPX w eogonek -10
-KPX w o -10
-KPX w oacute -10
-KPX w ocircumflex -10
-KPX w odieresis -10
-KPX w ograve -10
-KPX w ohungarumlaut -10
-KPX w omacron -10
-KPX w oslash -10
-KPX w otilde -10
-KPX w period -60
-KPX x e -30
-KPX x eacute -30
-KPX x ecaron -30
-KPX x ecircumflex -30
-KPX x edieresis -30
-KPX x edotaccent -30
-KPX x egrave -30
-KPX x emacron -30
-KPX x eogonek -30
-KPX y a -20
-KPX y aacute -20
-KPX y abreve -20
-KPX y acircumflex -20
-KPX y adieresis -20
-KPX y agrave -20
-KPX y amacron -20
-KPX y aogonek -20
-KPX y aring -20
-KPX y atilde -20
-KPX y comma -100
-KPX y e -20
-KPX y eacute -20
-KPX y ecaron -20
-KPX y ecircumflex -20
-KPX y edieresis -20
-KPX y edotaccent -20
-KPX y egrave -20
-KPX y emacron -20
-KPX y eogonek -20
-KPX y o -20
-KPX y oacute -20
-KPX y ocircumflex -20
-KPX y odieresis -20
-KPX y ograve -20
-KPX y ohungarumlaut -20
-KPX y omacron -20
-KPX y oslash -20
-KPX y otilde -20
-KPX y period -100
-KPX yacute a -20
-KPX yacute aacute -20
-KPX yacute abreve -20
-KPX yacute acircumflex -20
-KPX yacute adieresis -20
-KPX yacute agrave -20
-KPX yacute amacron -20
-KPX yacute aogonek -20
-KPX yacute aring -20
-KPX yacute atilde -20
-KPX yacute comma -100
-KPX yacute e -20
-KPX yacute eacute -20
-KPX yacute ecaron -20
-KPX yacute ecircumflex -20
-KPX yacute edieresis -20
-KPX yacute edotaccent -20
-KPX yacute egrave -20
-KPX yacute emacron -20
-KPX yacute eogonek -20
-KPX yacute o -20
-KPX yacute oacute -20
-KPX yacute ocircumflex -20
-KPX yacute odieresis -20
-KPX yacute ograve -20
-KPX yacute ohungarumlaut -20
-KPX yacute omacron -20
-KPX yacute oslash -20
-KPX yacute otilde -20
-KPX yacute period -100
-KPX ydieresis a -20
-KPX ydieresis aacute -20
-KPX ydieresis abreve -20
-KPX ydieresis acircumflex -20
-KPX ydieresis adieresis -20
-KPX ydieresis agrave -20
-KPX ydieresis amacron -20
-KPX ydieresis aogonek -20
-KPX ydieresis aring -20
-KPX ydieresis atilde -20
-KPX ydieresis comma -100
-KPX ydieresis e -20
-KPX ydieresis eacute -20
-KPX ydieresis ecaron -20
-KPX ydieresis ecircumflex -20
-KPX ydieresis edieresis -20
-KPX ydieresis edotaccent -20
-KPX ydieresis egrave -20
-KPX ydieresis emacron -20
-KPX ydieresis eogonek -20
-KPX ydieresis o -20
-KPX ydieresis oacute -20
-KPX ydieresis ocircumflex -20
-KPX ydieresis odieresis -20
-KPX ydieresis ograve -20
-KPX ydieresis ohungarumlaut -20
-KPX ydieresis omacron -20
-KPX ydieresis oslash -20
-KPX ydieresis otilde -20
-KPX ydieresis period -100
-KPX z e -15
-KPX z eacute -15
-KPX z ecaron -15
-KPX z ecircumflex -15
-KPX z edieresis -15
-KPX z edotaccent -15
-KPX z egrave -15
-KPX z emacron -15
-KPX z eogonek -15
-KPX z o -15
-KPX z oacute -15
-KPX z ocircumflex -15
-KPX z odieresis -15
-KPX z ograve -15
-KPX z ohungarumlaut -15
-KPX z omacron -15
-KPX z oslash -15
-KPX z otilde -15
-KPX zacute e -15
-KPX zacute eacute -15
-KPX zacute ecaron -15
-KPX zacute ecircumflex -15
-KPX zacute edieresis -15
-KPX zacute edotaccent -15
-KPX zacute egrave -15
-KPX zacute emacron -15
-KPX zacute eogonek -15
-KPX zacute o -15
-KPX zacute oacute -15
-KPX zacute ocircumflex -15
-KPX zacute odieresis -15
-KPX zacute ograve -15
-KPX zacute ohungarumlaut -15
-KPX zacute omacron -15
-KPX zacute oslash -15
-KPX zacute otilde -15
-KPX zcaron e -15
-KPX zcaron eacute -15
-KPX zcaron ecaron -15
-KPX zcaron ecircumflex -15
-KPX zcaron edieresis -15
-KPX zcaron edotaccent -15
-KPX zcaron egrave -15
-KPX zcaron emacron -15
-KPX zcaron eogonek -15
-KPX zcaron o -15
-KPX zcaron oacute -15
-KPX zcaron ocircumflex -15
-KPX zcaron odieresis -15
-KPX zcaron ograve -15
-KPX zcaron ohungarumlaut -15
-KPX zcaron omacron -15
-KPX zcaron oslash -15
-KPX zcaron otilde -15
-KPX zdotaccent e -15
-KPX zdotaccent eacute -15
-KPX zdotaccent ecaron -15
-KPX zdotaccent ecircumflex -15
-KPX zdotaccent edieresis -15
-KPX zdotaccent edotaccent -15
-KPX zdotaccent egrave -15
-KPX zdotaccent emacron -15
-KPX zdotaccent eogonek -15
-KPX zdotaccent o -15
-KPX zdotaccent oacute -15
-KPX zdotaccent ocircumflex -15
-KPX zdotaccent odieresis -15
-KPX zdotaccent ograve -15
-KPX zdotaccent ohungarumlaut -15
-KPX zdotaccent omacron -15
-KPX zdotaccent oslash -15
-KPX zdotaccent otilde -15
-EndKernPairs
-EndKernData
-EndFontMetrics
diff --git a/reporting/fonts/Helvetica.afm b/reporting/fonts/Helvetica.afm
deleted file mode 100644 (file)
index bd32af5..0000000
+++ /dev/null
@@ -1,3051 +0,0 @@
-StartFontMetrics 4.1
-Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
-Comment Creation Date: Thu May  1 12:38:23 1997
-Comment UniqueID 43054
-Comment VMusage 37069 48094
-FontName Helvetica
-FullName Helvetica
-FamilyName Helvetica
-Weight Medium
-ItalicAngle 0
-IsFixedPitch false
-CharacterSet ExtendedRoman
-FontBBox -166 -225 1000 931 
-UnderlinePosition -100
-UnderlineThickness 50
-Version 002.000
-Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
-EncodingScheme AdobeStandardEncoding
-CapHeight 718
-XHeight 523
-Ascender 718
-Descender -207
-StdHW 76
-StdVW 88
-StartCharMetrics 315
-C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 278 ; N exclam ; B 90 0 187 718 ;
-C 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ;
-C 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ;
-C 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ;
-C 37 ; WX 889 ; N percent ; B 39 -19 850 703 ;
-C 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ;
-C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ;
-C 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ;
-C 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ;
-C 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ;
-C 43 ; WX 584 ; N plus ; B 39 0 545 505 ;
-C 44 ; WX 278 ; N comma ; B 87 -147 191 106 ;
-C 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ;
-C 46 ; WX 278 ; N period ; B 87 0 191 106 ;
-C 47 ; WX 278 ; N slash ; B -17 -19 295 737 ;
-C 48 ; WX 556 ; N zero ; B 37 -19 519 703 ;
-C 49 ; WX 556 ; N one ; B 101 0 359 703 ;
-C 50 ; WX 556 ; N two ; B 26 0 507 703 ;
-C 51 ; WX 556 ; N three ; B 34 -19 522 703 ;
-C 52 ; WX 556 ; N four ; B 25 0 523 703 ;
-C 53 ; WX 556 ; N five ; B 32 -19 514 688 ;
-C 54 ; WX 556 ; N six ; B 38 -19 518 703 ;
-C 55 ; WX 556 ; N seven ; B 37 0 523 688 ;
-C 56 ; WX 556 ; N eight ; B 38 -19 517 703 ;
-C 57 ; WX 556 ; N nine ; B 42 -19 514 703 ;
-C 58 ; WX 278 ; N colon ; B 87 0 191 516 ;
-C 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ;
-C 60 ; WX 584 ; N less ; B 48 11 536 495 ;
-C 61 ; WX 584 ; N equal ; B 39 115 545 390 ;
-C 62 ; WX 584 ; N greater ; B 48 11 536 495 ;
-C 63 ; WX 556 ; N question ; B 56 0 492 727 ;
-C 64 ; WX 1015 ; N at ; B 147 -19 868 737 ;
-C 65 ; WX 667 ; N A ; B 14 0 654 718 ;
-C 66 ; WX 667 ; N B ; B 74 0 627 718 ;
-C 67 ; WX 722 ; N C ; B 44 -19 681 737 ;
-C 68 ; WX 722 ; N D ; B 81 0 674 718 ;
-C 69 ; WX 667 ; N E ; B 86 0 616 718 ;
-C 70 ; WX 611 ; N F ; B 86 0 583 718 ;
-C 71 ; WX 778 ; N G ; B 48 -19 704 737 ;
-C 72 ; WX 722 ; N H ; B 77 0 646 718 ;
-C 73 ; WX 278 ; N I ; B 91 0 188 718 ;
-C 74 ; WX 500 ; N J ; B 17 -19 428 718 ;
-C 75 ; WX 667 ; N K ; B 76 0 663 718 ;
-C 76 ; WX 556 ; N L ; B 76 0 537 718 ;
-C 77 ; WX 833 ; N M ; B 73 0 761 718 ;
-C 78 ; WX 722 ; N N ; B 76 0 646 718 ;
-C 79 ; WX 778 ; N O ; B 39 -19 739 737 ;
-C 80 ; WX 667 ; N P ; B 86 0 622 718 ;
-C 81 ; WX 778 ; N Q ; B 39 -56 739 737 ;
-C 82 ; WX 722 ; N R ; B 88 0 684 718 ;
-C 83 ; WX 667 ; N S ; B 49 -19 620 737 ;
-C 84 ; WX 611 ; N T ; B 14 0 597 718 ;
-C 85 ; WX 722 ; N U ; B 79 -19 644 718 ;
-C 86 ; WX 667 ; N V ; B 20 0 647 718 ;
-C 87 ; WX 944 ; N W ; B 16 0 928 718 ;
-C 88 ; WX 667 ; N X ; B 19 0 648 718 ;
-C 89 ; WX 667 ; N Y ; B 14 0 653 718 ;
-C 90 ; WX 611 ; N Z ; B 23 0 588 718 ;
-C 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ;
-C 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ;
-C 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ;
-C 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ;
-C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;
-C 96 ; WX 222 ; N quoteleft ; B 65 470 169 725 ;
-C 97 ; WX 556 ; N a ; B 36 -15 530 538 ;
-C 98 ; WX 556 ; N b ; B 58 -15 517 718 ;
-C 99 ; WX 500 ; N c ; B 30 -15 477 538 ;
-C 100 ; WX 556 ; N d ; B 35 -15 499 718 ;
-C 101 ; WX 556 ; N e ; B 40 -15 516 538 ;
-C 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ;
-C 103 ; WX 556 ; N g ; B 40 -220 499 538 ;
-C 104 ; WX 556 ; N h ; B 65 0 491 718 ;
-C 105 ; WX 222 ; N i ; B 67 0 155 718 ;
-C 106 ; WX 222 ; N j ; B -16 -210 155 718 ;
-C 107 ; WX 500 ; N k ; B 67 0 501 718 ;
-C 108 ; WX 222 ; N l ; B 67 0 155 718 ;
-C 109 ; WX 833 ; N m ; B 65 0 769 538 ;
-C 110 ; WX 556 ; N n ; B 65 0 491 538 ;
-C 111 ; WX 556 ; N o ; B 35 -14 521 538 ;
-C 112 ; WX 556 ; N p ; B 58 -207 517 538 ;
-C 113 ; WX 556 ; N q ; B 35 -207 494 538 ;
-C 114 ; WX 333 ; N r ; B 77 0 332 538 ;
-C 115 ; WX 500 ; N s ; B 32 -15 464 538 ;
-C 116 ; WX 278 ; N t ; B 14 -7 257 669 ;
-C 117 ; WX 556 ; N u ; B 68 -15 489 523 ;
-C 118 ; WX 500 ; N v ; B 8 0 492 523 ;
-C 119 ; WX 722 ; N w ; B 14 0 709 523 ;
-C 120 ; WX 500 ; N x ; B 11 0 490 523 ;
-C 121 ; WX 500 ; N y ; B 11 -214 489 523 ;
-C 122 ; WX 500 ; N z ; B 31 0 469 523 ;
-C 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ;
-C 124 ; WX 260 ; N bar ; B 94 -225 167 775 ;
-C 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ;
-C 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ;
-C 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ;
-C 162 ; WX 556 ; N cent ; B 51 -115 513 623 ;
-C 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ;
-C 164 ; WX 167 ; N fraction ; B -166 -19 333 703 ;
-C 165 ; WX 556 ; N yen ; B 3 0 553 688 ;
-C 166 ; WX 556 ; N florin ; B -11 -207 501 737 ;
-C 167 ; WX 556 ; N section ; B 43 -191 512 737 ;
-C 168 ; WX 556 ; N currency ; B 28 99 528 603 ;
-C 169 ; WX 191 ; N quotesingle ; B 59 463 132 718 ;
-C 170 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ;
-C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ;
-C 172 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ;
-C 173 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ;
-C 174 ; WX 500 ; N fi ; B 14 0 434 728 ;
-C 175 ; WX 500 ; N fl ; B 14 0 432 728 ;
-C 177 ; WX 556 ; N endash ; B 0 240 556 313 ;
-C 178 ; WX 556 ; N dagger ; B 43 -159 514 718 ;
-C 179 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ;
-C 180 ; WX 278 ; N periodcentered ; B 77 190 202 315 ;
-C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ;
-C 183 ; WX 350 ; N bullet ; B 18 202 333 517 ;
-C 184 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ;
-C 185 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ;
-C 186 ; WX 333 ; N quotedblright ; B 26 463 295 718 ;
-C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ;
-C 188 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ;
-C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ;
-C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ;
-C 193 ; WX 333 ; N grave ; B 14 593 211 734 ;
-C 194 ; WX 333 ; N acute ; B 122 593 319 734 ;
-C 195 ; WX 333 ; N circumflex ; B 21 593 312 734 ;
-C 196 ; WX 333 ; N tilde ; B -4 606 337 722 ;
-C 197 ; WX 333 ; N macron ; B 10 627 323 684 ;
-C 198 ; WX 333 ; N breve ; B 13 595 321 731 ;
-C 199 ; WX 333 ; N dotaccent ; B 121 604 212 706 ;
-C 200 ; WX 333 ; N dieresis ; B 40 604 293 706 ;
-C 202 ; WX 333 ; N ring ; B 75 572 259 756 ;
-C 203 ; WX 333 ; N cedilla ; B 45 -225 259 0 ;
-C 205 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ;
-C 206 ; WX 333 ; N ogonek ; B 73 -225 287 0 ;
-C 207 ; WX 333 ; N caron ; B 21 593 312 734 ;
-C 208 ; WX 1000 ; N emdash ; B 0 240 1000 313 ;
-C 225 ; WX 1000 ; N AE ; B 8 0 951 718 ;
-C 227 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ;
-C 232 ; WX 556 ; N Lslash ; B -20 0 537 718 ;
-C 233 ; WX 778 ; N Oslash ; B 39 -19 740 737 ;
-C 234 ; WX 1000 ; N OE ; B 36 -19 965 737 ;
-C 235 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ;
-C 241 ; WX 889 ; N ae ; B 36 -15 847 538 ;
-C 245 ; WX 278 ; N dotlessi ; B 95 0 183 523 ;
-C 248 ; WX 222 ; N lslash ; B -20 0 242 718 ;
-C 249 ; WX 611 ; N oslash ; B 28 -22 537 545 ;
-C 250 ; WX 944 ; N oe ; B 35 -15 902 538 ;
-C 251 ; WX 611 ; N germandbls ; B 67 -15 571 728 ;
-C -1 ; WX 278 ; N Idieresis ; B 13 0 266 901 ;
-C -1 ; WX 556 ; N eacute ; B 40 -15 516 734 ;
-C -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ;
-C -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ;
-C -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ;
-C -1 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ;
-C -1 ; WX 584 ; N divide ; B 39 -19 545 524 ;
-C -1 ; WX 667 ; N Yacute ; B 14 0 653 929 ;
-C -1 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;
-C -1 ; WX 556 ; N aacute ; B 36 -15 530 734 ;
-C -1 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ;
-C -1 ; WX 500 ; N yacute ; B 11 -214 489 734 ;
-C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ;
-C -1 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ;
-C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ;
-C -1 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ;
-C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ;
-C -1 ; WX 722 ; N Uacute ; B 79 -19 644 929 ;
-C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ;
-C -1 ; WX 667 ; N Edieresis ; B 86 0 616 901 ;
-C -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ;
-C -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ;
-C -1 ; WX 737 ; N copyright ; B -14 -19 752 737 ;
-C -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ;
-C -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ;
-C -1 ; WX 556 ; N aring ; B 36 -15 530 756 ;
-C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ;
-C -1 ; WX 222 ; N lacute ; B 67 0 264 929 ;
-C -1 ; WX 556 ; N agrave ; B 36 -15 530 734 ;
-C -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ;
-C -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ;
-C -1 ; WX 556 ; N atilde ; B 36 -15 530 722 ;
-C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ;
-C -1 ; WX 500 ; N scaron ; B 32 -15 464 734 ;
-C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ;
-C -1 ; WX 278 ; N iacute ; B 95 0 292 734 ;
-C -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ;
-C -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ;
-C -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ;
-C -1 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ;
-C -1 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ;
-C -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ;
-C -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ;
-C -1 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ;
-C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ;
-C -1 ; WX 667 ; N Thorn ; B 86 0 622 718 ;
-C -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ;
-C -1 ; WX 722 ; N Racute ; B 88 0 684 929 ;
-C -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ;
-C -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ;
-C -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ;
-C -1 ; WX 556 ; N uring ; B 68 -15 489 756 ;
-C -1 ; WX 333 ; N threesuperior ; B 5 270 325 703 ;
-C -1 ; WX 778 ; N Ograve ; B 39 -19 739 929 ;
-C -1 ; WX 667 ; N Agrave ; B 14 0 654 929 ;
-C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ;
-C -1 ; WX 584 ; N multiply ; B 39 0 545 506 ;
-C -1 ; WX 556 ; N uacute ; B 68 -15 489 734 ;
-C -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ;
-C -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ;
-C -1 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ;
-C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ;
-C -1 ; WX 278 ; N icircumflex ; B -6 0 285 734 ;
-C -1 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ;
-C -1 ; WX 556 ; N adieresis ; B 36 -15 530 706 ;
-C -1 ; WX 556 ; N edieresis ; B 40 -15 516 706 ;
-C -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ;
-C -1 ; WX 556 ; N nacute ; B 65 0 491 734 ;
-C -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ;
-C -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ;
-C -1 ; WX 278 ; N Iacute ; B 91 0 292 929 ;
-C -1 ; WX 584 ; N plusminus ; B 39 0 545 506 ;
-C -1 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ;
-C -1 ; WX 737 ; N registered ; B -14 -19 752 737 ;
-C -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ;
-C -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ;
-C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;
-C -1 ; WX 667 ; N Egrave ; B 86 0 616 929 ;
-C -1 ; WX 333 ; N racute ; B 77 0 332 734 ;
-C -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ;
-C -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ;
-C -1 ; WX 611 ; N Zcaron ; B 23 0 588 929 ;
-C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ;
-C -1 ; WX 722 ; N Eth ; B 0 0 674 718 ;
-C -1 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ;
-C -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ;
-C -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ;
-C -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ;
-C -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ;
-C -1 ; WX 667 ; N Aacute ; B 14 0 654 929 ;
-C -1 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;
-C -1 ; WX 556 ; N egrave ; B 40 -15 516 734 ;
-C -1 ; WX 500 ; N zacute ; B 31 0 469 734 ;
-C -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ;
-C -1 ; WX 778 ; N Oacute ; B 39 -19 739 929 ;
-C -1 ; WX 556 ; N oacute ; B 35 -14 521 734 ;
-C -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ;
-C -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ;
-C -1 ; WX 278 ; N idieresis ; B 13 0 266 706 ;
-C -1 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ;
-C -1 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ;
-C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
-C -1 ; WX 556 ; N thorn ; B 58 -207 517 718 ;
-C -1 ; WX 333 ; N twosuperior ; B 4 281 323 703 ;
-C -1 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ;
-C -1 ; WX 556 ; N mu ; B 68 -207 489 523 ;
-C -1 ; WX 278 ; N igrave ; B -13 0 184 734 ;
-C -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ;
-C -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ;
-C -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ;
-C -1 ; WX 834 ; N threequarters ; B 45 -19 810 703 ;
-C -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ;
-C -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ;
-C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ;
-C -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ;
-C -1 ; WX 1000 ; N trademark ; B 46 306 903 718 ;
-C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ;
-C -1 ; WX 278 ; N Igrave ; B -13 0 188 929 ;
-C -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ;
-C -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ;
-C -1 ; WX 834 ; N onehalf ; B 43 -19 773 703 ;
-C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ;
-C -1 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ;
-C -1 ; WX 556 ; N ntilde ; B 65 0 491 722 ;
-C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ;
-C -1 ; WX 667 ; N Eacute ; B 86 0 616 929 ;
-C -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ;
-C -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ;
-C -1 ; WX 834 ; N onequarter ; B 73 -19 756 703 ;
-C -1 ; WX 667 ; N Scaron ; B 49 -19 620 929 ;
-C -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ;
-C -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ;
-C -1 ; WX 400 ; N degree ; B 54 411 346 703 ;
-C -1 ; WX 556 ; N ograve ; B 35 -14 521 734 ;
-C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ;
-C -1 ; WX 556 ; N ugrave ; B 68 -15 489 734 ;
-C -1 ; WX 453 ; N radical ; B -4 -80 458 762 ;
-C -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ;
-C -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ;
-C -1 ; WX 722 ; N Ntilde ; B 76 0 646 917 ;
-C -1 ; WX 556 ; N otilde ; B 35 -14 521 722 ;
-C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ;
-C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ;
-C -1 ; WX 667 ; N Atilde ; B 14 0 654 917 ;
-C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;
-C -1 ; WX 667 ; N Aring ; B 14 0 654 931 ;
-C -1 ; WX 778 ; N Otilde ; B 39 -19 739 917 ;
-C -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ;
-C -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ;
-C -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ;
-C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ;
-C -1 ; WX 584 ; N minus ; B 39 216 545 289 ;
-C -1 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ;
-C -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ;
-C -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ;
-C -1 ; WX 584 ; N logicalnot ; B 39 108 545 390 ;
-C -1 ; WX 556 ; N odieresis ; B 35 -14 521 706 ;
-C -1 ; WX 556 ; N udieresis ; B 68 -15 489 706 ;
-C -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ;
-C -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ;
-C -1 ; WX 556 ; N eth ; B 35 -15 522 737 ;
-C -1 ; WX 500 ; N zcaron ; B 31 0 469 734 ;
-C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ;
-C -1 ; WX 333 ; N onesuperior ; B 43 281 222 703 ;
-C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ;
-C -1 ; WX 556 ; N Euro ; B 0 0 0 0 ;
-EndCharMetrics
-StartKernData
-StartKernPairs 2705
-KPX A C -30
-KPX A Cacute -30
-KPX A Ccaron -30
-KPX A Ccedilla -30
-KPX A G -30
-KPX A Gbreve -30
-KPX A Gcommaaccent -30
-KPX A O -30
-KPX A Oacute -30
-KPX A Ocircumflex -30
-KPX A Odieresis -30
-KPX A Ograve -30
-KPX A Ohungarumlaut -30
-KPX A Omacron -30
-KPX A Oslash -30
-KPX A Otilde -30
-KPX A Q -30
-KPX A T -120
-KPX A Tcaron -120
-KPX A Tcommaaccent -120
-KPX A U -50
-KPX A Uacute -50
-KPX A Ucircumflex -50
-KPX A Udieresis -50
-KPX A Ugrave -50
-KPX A Uhungarumlaut -50
-KPX A Umacron -50
-KPX A Uogonek -50
-KPX A Uring -50
-KPX A V -70
-KPX A W -50
-KPX A Y -100
-KPX A Yacute -100
-KPX A Ydieresis -100
-KPX A u -30
-KPX A uacute -30
-KPX A ucircumflex -30
-KPX A udieresis -30
-KPX A ugrave -30
-KPX A uhungarumlaut -30
-KPX A umacron -30
-KPX A uogonek -30
-KPX A uring -30
-KPX A v -40
-KPX A w -40
-KPX A y -40
-KPX A yacute -40
-KPX A ydieresis -40
-KPX Aacute C -30
-KPX Aacute Cacute -30
-KPX Aacute Ccaron -30
-KPX Aacute Ccedilla -30
-KPX Aacute G -30
-KPX Aacute Gbreve -30
-KPX Aacute Gcommaaccent -30
-KPX Aacute O -30
-KPX Aacute Oacute -30
-KPX Aacute Ocircumflex -30
-KPX Aacute Odieresis -30
-KPX Aacute Ograve -30
-KPX Aacute Ohungarumlaut -30
-KPX Aacute Omacron -30
-KPX Aacute Oslash -30
-KPX Aacute Otilde -30
-KPX Aacute Q -30
-KPX Aacute T -120
-KPX Aacute Tcaron -120
-KPX Aacute Tcommaaccent -120
-KPX Aacute U -50
-KPX Aacute Uacute -50
-KPX Aacute Ucircumflex -50
-KPX Aacute Udieresis -50
-KPX Aacute Ugrave -50
-KPX Aacute Uhungarumlaut -50
-KPX Aacute Umacron -50
-KPX Aacute Uogonek -50
-KPX Aacute Uring -50
-KPX Aacute V -70
-KPX Aacute W -50
-KPX Aacute Y -100
-KPX Aacute Yacute -100
-KPX Aacute Ydieresis -100
-KPX Aacute u -30
-KPX Aacute uacute -30
-KPX Aacute ucircumflex -30
-KPX Aacute udieresis -30
-KPX Aacute ugrave -30
-KPX Aacute uhungarumlaut -30
-KPX Aacute umacron -30
-KPX Aacute uogonek -30
-KPX Aacute uring -30
-KPX Aacute v -40
-KPX Aacute w -40
-KPX Aacute y -40
-KPX Aacute yacute -40
-KPX Aacute ydieresis -40
-KPX Abreve C -30
-KPX Abreve Cacute -30
-KPX Abreve Ccaron -30
-KPX Abreve Ccedilla -30
-KPX Abreve G -30
-KPX Abreve Gbreve -30
-KPX Abreve Gcommaaccent -30
-KPX Abreve O -30
-KPX Abreve Oacute -30
-KPX Abreve Ocircumflex -30
-KPX Abreve Odieresis -30
-KPX Abreve Ograve -30
-KPX Abreve Ohungarumlaut -30
-KPX Abreve Omacron -30
-KPX Abreve Oslash -30
-KPX Abreve Otilde -30
-KPX Abreve Q -30
-KPX Abreve T -120
-KPX Abreve Tcaron -120
-KPX Abreve Tcommaaccent -120
-KPX Abreve U -50
-KPX Abreve Uacute -50
-KPX Abreve Ucircumflex -50
-KPX Abreve Udieresis -50
-KPX Abreve Ugrave -50
-KPX Abreve Uhungarumlaut -50
-KPX Abreve Umacron -50
-KPX Abreve Uogonek -50
-KPX Abreve Uring -50
-KPX Abreve V -70
-KPX Abreve W -50
-KPX Abreve Y -100
-KPX Abreve Yacute -100
-KPX Abreve Ydieresis -100
-KPX Abreve u -30
-KPX Abreve uacute -30
-KPX Abreve ucircumflex -30
-KPX Abreve udieresis -30
-KPX Abreve ugrave -30
-KPX Abreve uhungarumlaut -30
-KPX Abreve umacron -30
-KPX Abreve uogonek -30
-KPX Abreve uring -30
-KPX Abreve v -40
-KPX Abreve w -40
-KPX Abreve y -40
-KPX Abreve yacute -40
-KPX Abreve ydieresis -40
-KPX Acircumflex C -30
-KPX Acircumflex Cacute -30
-KPX Acircumflex Ccaron -30
-KPX Acircumflex Ccedilla -30
-KPX Acircumflex G -30
-KPX Acircumflex Gbreve -30
-KPX Acircumflex Gcommaaccent -30
-KPX Acircumflex O -30
-KPX Acircumflex Oacute -30
-KPX Acircumflex Ocircumflex -30
-KPX Acircumflex Odieresis -30
-KPX Acircumflex Ograve -30
-KPX Acircumflex Ohungarumlaut -30
-KPX Acircumflex Omacron -30
-KPX Acircumflex Oslash -30
-KPX Acircumflex Otilde -30
-KPX Acircumflex Q -30
-KPX Acircumflex T -120
-KPX Acircumflex Tcaron -120
-KPX Acircumflex Tcommaaccent -120
-KPX Acircumflex U -50
-KPX Acircumflex Uacute -50
-KPX Acircumflex Ucircumflex -50
-KPX Acircumflex Udieresis -50
-KPX Acircumflex Ugrave -50
-KPX Acircumflex Uhungarumlaut -50
-KPX Acircumflex Umacron -50
-KPX Acircumflex Uogonek -50
-KPX Acircumflex Uring -50
-KPX Acircumflex V -70
-KPX Acircumflex W -50
-KPX Acircumflex Y -100
-KPX Acircumflex Yacute -100
-KPX Acircumflex Ydieresis -100
-KPX Acircumflex u -30
-KPX Acircumflex uacute -30
-KPX Acircumflex ucircumflex -30
-KPX Acircumflex udieresis -30
-KPX Acircumflex ugrave -30
-KPX Acircumflex uhungarumlaut -30
-KPX Acircumflex umacron -30
-KPX Acircumflex uogonek -30
-KPX Acircumflex uring -30
-KPX Acircumflex v -40
-KPX Acircumflex w -40
-KPX Acircumflex y -40
-KPX Acircumflex yacute -40
-KPX Acircumflex ydieresis -40
-KPX Adieresis C -30
-KPX Adieresis Cacute -30
-KPX Adieresis Ccaron -30
-KPX Adieresis Ccedilla -30
-KPX Adieresis G -30
-KPX Adieresis Gbreve -30
-KPX Adieresis Gcommaaccent -30
-KPX Adieresis O -30
-KPX Adieresis Oacute -30
-KPX Adieresis Ocircumflex -30
-KPX Adieresis Odieresis -30
-KPX Adieresis Ograve -30
-KPX Adieresis Ohungarumlaut -30
-KPX Adieresis Omacron -30
-KPX Adieresis Oslash -30
-KPX Adieresis Otilde -30
-KPX Adieresis Q -30
-KPX Adieresis T -120
-KPX Adieresis Tcaron -120
-KPX Adieresis Tcommaaccent -120
-KPX Adieresis U -50
-KPX Adieresis Uacute -50
-KPX Adieresis Ucircumflex -50
-KPX Adieresis Udieresis -50
-KPX Adieresis Ugrave -50
-KPX Adieresis Uhungarumlaut -50
-KPX Adieresis Umacron -50
-KPX Adieresis Uogonek -50
-KPX Adieresis Uring -50
-KPX Adieresis V -70
-KPX Adieresis W -50
-KPX Adieresis Y -100
-KPX Adieresis Yacute -100
-KPX Adieresis Ydieresis -100
-KPX Adieresis u -30
-KPX Adieresis uacute -30
-KPX Adieresis ucircumflex -30
-KPX Adieresis udieresis -30
-KPX Adieresis ugrave -30
-KPX Adieresis uhungarumlaut -30
-KPX Adieresis umacron -30
-KPX Adieresis uogonek -30
-KPX Adieresis uring -30
-KPX Adieresis v -40
-KPX Adieresis w -40
-KPX Adieresis y -40
-KPX Adieresis yacute -40
-KPX Adieresis ydieresis -40
-KPX Agrave C -30
-KPX Agrave Cacute -30
-KPX Agrave Ccaron -30
-KPX Agrave Ccedilla -30
-KPX Agrave G -30
-KPX Agrave Gbreve -30
-KPX Agrave Gcommaaccent -30
-KPX Agrave O -30
-KPX Agrave Oacute -30
-KPX Agrave Ocircumflex -30
-KPX Agrave Odieresis -30
-KPX Agrave Ograve -30
-KPX Agrave Ohungarumlaut -30
-KPX Agrave Omacron -30
-KPX Agrave Oslash -30
-KPX Agrave Otilde -30
-KPX Agrave Q -30
-KPX Agrave T -120
-KPX Agrave Tcaron -120
-KPX Agrave Tcommaaccent -120
-KPX Agrave U -50
-KPX Agrave Uacute -50
-KPX Agrave Ucircumflex -50
-KPX Agrave Udieresis -50
-KPX Agrave Ugrave -50
-KPX Agrave Uhungarumlaut -50
-KPX Agrave Umacron -50
-KPX Agrave Uogonek -50
-KPX Agrave Uring -50
-KPX Agrave V -70
-KPX Agrave W -50
-KPX Agrave Y -100
-KPX Agrave Yacute -100
-KPX Agrave Ydieresis -100
-KPX Agrave u -30
-KPX Agrave uacute -30
-KPX Agrave ucircumflex -30
-KPX Agrave udieresis -30
-KPX Agrave ugrave -30
-KPX Agrave uhungarumlaut -30
-KPX Agrave umacron -30
-KPX Agrave uogonek -30
-KPX Agrave uring -30
-KPX Agrave v -40
-KPX Agrave w -40
-KPX Agrave y -40
-KPX Agrave yacute -40
-KPX Agrave ydieresis -40
-KPX Amacron C -30
-KPX Amacron Cacute -30
-KPX Amacron Ccaron -30
-KPX Amacron Ccedilla -30
-KPX Amacron G -30
-KPX Amacron Gbreve -30
-KPX Amacron Gcommaaccent -30
-KPX Amacron O -30
-KPX Amacron Oacute -30
-KPX Amacron Ocircumflex -30
-KPX Amacron Odieresis -30
-KPX Amacron Ograve -30
-KPX Amacron Ohungarumlaut -30
-KPX Amacron Omacron -30
-KPX Amacron Oslash -30
-KPX Amacron Otilde -30
-KPX Amacron Q -30
-KPX Amacron T -120
-KPX Amacron Tcaron -120
-KPX Amacron Tcommaaccent -120
-KPX Amacron U -50
-KPX Amacron Uacute -50
-KPX Amacron Ucircumflex -50
-KPX Amacron Udieresis -50
-KPX Amacron Ugrave -50
-KPX Amacron Uhungarumlaut -50
-KPX Amacron Umacron -50
-KPX Amacron Uogonek -50
-KPX Amacron Uring -50
-KPX Amacron V -70
-KPX Amacron W -50
-KPX Amacron Y -100
-KPX Amacron Yacute -100
-KPX Amacron Ydieresis -100
-KPX Amacron u -30
-KPX Amacron uacute -30
-KPX Amacron ucircumflex -30
-KPX Amacron udieresis -30
-KPX Amacron ugrave -30
-KPX Amacron uhungarumlaut -30
-KPX Amacron umacron -30
-KPX Amacron uogonek -30
-KPX Amacron uring -30
-KPX Amacron v -40
-KPX Amacron w -40
-KPX Amacron y -40
-KPX Amacron yacute -40
-KPX Amacron ydieresis -40
-KPX Aogonek C -30
-KPX Aogonek Cacute -30
-KPX Aogonek Ccaron -30
-KPX Aogonek Ccedilla -30
-KPX Aogonek G -30
-KPX Aogonek Gbreve -30
-KPX Aogonek Gcommaaccent -30
-KPX Aogonek O -30
-KPX Aogonek Oacute -30
-KPX Aogonek Ocircumflex -30
-KPX Aogonek Odieresis -30
-KPX Aogonek Ograve -30
-KPX Aogonek Ohungarumlaut -30
-KPX Aogonek Omacron -30
-KPX Aogonek Oslash -30
-KPX Aogonek Otilde -30
-KPX Aogonek Q -30
-KPX Aogonek T -120
-KPX Aogonek Tcaron -120
-KPX Aogonek Tcommaaccent -120
-KPX Aogonek U -50
-KPX Aogonek Uacute -50
-KPX Aogonek Ucircumflex -50
-KPX Aogonek Udieresis -50
-KPX Aogonek Ugrave -50
-KPX Aogonek Uhungarumlaut -50
-KPX Aogonek Umacron -50
-KPX Aogonek Uogonek -50
-KPX Aogonek Uring -50
-KPX Aogonek V -70
-KPX Aogonek W -50
-KPX Aogonek Y -100
-KPX Aogonek Yacute -100
-KPX Aogonek Ydieresis -100
-KPX Aogonek u -30
-KPX Aogonek uacute -30
-KPX Aogonek ucircumflex -30
-KPX Aogonek udieresis -30
-KPX Aogonek ugrave -30
-KPX Aogonek uhungarumlaut -30
-KPX Aogonek umacron -30
-KPX Aogonek uogonek -30
-KPX Aogonek uring -30
-KPX Aogonek v -40
-KPX Aogonek w -40
-KPX Aogonek y -40
-KPX Aogonek yacute -40
-KPX Aogonek ydieresis -40
-KPX Aring C -30
-KPX Aring Cacute -30
-KPX Aring Ccaron -30
-KPX Aring Ccedilla -30
-KPX Aring G -30
-KPX Aring Gbreve -30
-KPX Aring Gcommaaccent -30
-KPX Aring O -30
-KPX Aring Oacute -30
-KPX Aring Ocircumflex -30
-KPX Aring Odieresis -30
-KPX Aring Ograve -30
-KPX Aring Ohungarumlaut -30
-KPX Aring Omacron -30
-KPX Aring Oslash -30
-KPX Aring Otilde -30
-KPX Aring Q -30
-KPX Aring T -120
-KPX Aring Tcaron -120
-KPX Aring Tcommaaccent -120
-KPX Aring U -50
-KPX Aring Uacute -50
-KPX Aring Ucircumflex -50
-KPX Aring Udieresis -50
-KPX Aring Ugrave -50
-KPX Aring Uhungarumlaut -50
-KPX Aring Umacron -50
-KPX Aring Uogonek -50
-KPX Aring Uring -50
-KPX Aring V -70
-KPX Aring W -50
-KPX Aring Y -100
-KPX Aring Yacute -100
-KPX Aring Ydieresis -100
-KPX Aring u -30
-KPX Aring uacute -30
-KPX Aring ucircumflex -30
-KPX Aring udieresis -30
-KPX Aring ugrave -30
-KPX Aring uhungarumlaut -30
-KPX Aring umacron -30
-KPX Aring uogonek -30
-KPX Aring uring -30
-KPX Aring v -40
-KPX Aring w -40
-KPX Aring y -40
-KPX Aring yacute -40
-KPX Aring ydieresis -40
-KPX Atilde C -30
-KPX Atilde Cacute -30
-KPX Atilde Ccaron -30
-KPX Atilde Ccedilla -30
-KPX Atilde G -30
-KPX Atilde Gbreve -30
-KPX Atilde Gcommaaccent -30
-KPX Atilde O -30
-KPX Atilde Oacute -30
-KPX Atilde Ocircumflex -30
-KPX Atilde Odieresis -30
-KPX Atilde Ograve -30
-KPX Atilde Ohungarumlaut -30
-KPX Atilde Omacron -30
-KPX Atilde Oslash -30
-KPX Atilde Otilde -30
-KPX Atilde Q -30
-KPX Atilde T -120
-KPX Atilde Tcaron -120
-KPX Atilde Tcommaaccent -120
-KPX Atilde U -50
-KPX Atilde Uacute -50
-KPX Atilde Ucircumflex -50
-KPX Atilde Udieresis -50
-KPX Atilde Ugrave -50
-KPX Atilde Uhungarumlaut -50
-KPX Atilde Umacron -50
-KPX Atilde Uogonek -50
-KPX Atilde Uring -50
-KPX Atilde V -70
-KPX Atilde W -50
-KPX Atilde Y -100
-KPX Atilde Yacute -100
-KPX Atilde Ydieresis -100
-KPX Atilde u -30
-KPX Atilde uacute -30
-KPX Atilde ucircumflex -30
-KPX Atilde udieresis -30
-KPX Atilde ugrave -30
-KPX Atilde uhungarumlaut -30
-KPX Atilde umacron -30
-KPX Atilde uogonek -30
-KPX Atilde uring -30
-KPX Atilde v -40
-KPX Atilde w -40
-KPX Atilde y -40
-KPX Atilde yacute -40
-KPX Atilde ydieresis -40
-KPX B U -10
-KPX B Uacute -10
-KPX B Ucircumflex -10
-KPX B Udieresis -10
-KPX B Ugrave -10
-KPX B Uhungarumlaut -10
-KPX B Umacron -10
-KPX B Uogonek -10
-KPX B Uring -10
-KPX B comma -20
-KPX B period -20
-KPX C comma -30
-KPX C period -30
-KPX Cacute comma -30
-KPX Cacute period -30
-KPX Ccaron comma -30
-KPX Ccaron period -30
-KPX Ccedilla comma -30
-KPX Ccedilla period -30
-KPX D A -40
-KPX D Aacute -40
-KPX D Abreve -40
-KPX D Acircumflex -40
-KPX D Adieresis -40
-KPX D Agrave -40
-KPX D Amacron -40
-KPX D Aogonek -40
-KPX D Aring -40
-KPX D Atilde -40
-KPX D V -70
-KPX D W -40
-KPX D Y -90
-KPX D Yacute -90
-KPX D Ydieresis -90
-KPX D comma -70
-KPX D period -70
-KPX Dcaron A -40
-KPX Dcaron Aacute -40
-KPX Dcaron Abreve -40
-KPX Dcaron Acircumflex -40
-KPX Dcaron Adieresis -40
-KPX Dcaron Agrave -40
-KPX Dcaron Amacron -40
-KPX Dcaron Aogonek -40
-KPX Dcaron Aring -40
-KPX Dcaron Atilde -40
-KPX Dcaron V -70
-KPX Dcaron W -40
-KPX Dcaron Y -90
-KPX Dcaron Yacute -90
-KPX Dcaron Ydieresis -90
-KPX Dcaron comma -70
-KPX Dcaron period -70
-KPX Dcroat A -40
-KPX Dcroat Aacute -40
-KPX Dcroat Abreve -40
-KPX Dcroat Acircumflex -40
-KPX Dcroat Adieresis -40
-KPX Dcroat Agrave -40
-KPX Dcroat Amacron -40
-KPX Dcroat Aogonek -40
-KPX Dcroat Aring -40
-KPX Dcroat Atilde -40
-KPX Dcroat V -70
-KPX Dcroat W -40
-KPX Dcroat Y -90
-KPX Dcroat Yacute -90
-KPX Dcroat Ydieresis -90
-KPX Dcroat comma -70
-KPX Dcroat period -70
-KPX F A -80
-KPX F Aacute -80
-KPX F Abreve -80
-KPX F Acircumflex -80
-KPX F Adieresis -80
-KPX F Agrave -80
-KPX F Amacron -80
-KPX F Aogonek -80
-KPX F Aring -80
-KPX F Atilde -80
-KPX F a -50
-KPX F aacute -50
-KPX F abreve -50
-KPX F acircumflex -50
-KPX F adieresis -50
-KPX F agrave -50
-KPX F amacron -50
-KPX F aogonek -50
-KPX F aring -50
-KPX F atilde -50
-KPX F comma -150
-KPX F e -30
-KPX F eacute -30
-KPX F ecaron -30
-KPX F ecircumflex -30
-KPX F edieresis -30
-KPX F edotaccent -30
-KPX F egrave -30
-KPX F emacron -30
-KPX F eogonek -30
-KPX F o -30
-KPX F oacute -30
-KPX F ocircumflex -30
-KPX F odieresis -30
-KPX F ograve -30
-KPX F ohungarumlaut -30
-KPX F omacron -30
-KPX F oslash -30
-KPX F otilde -30
-KPX F period -150
-KPX F r -45
-KPX F racute -45
-KPX F rcaron -45
-KPX F rcommaaccent -45
-KPX J A -20
-KPX J Aacute -20
-KPX J Abreve -20
-KPX J Acircumflex -20
-KPX J Adieresis -20
-KPX J Agrave -20
-KPX J Amacron -20
-KPX J Aogonek -20
-KPX J Aring -20
-KPX J Atilde -20
-KPX J a -20
-KPX J aacute -20
-KPX J abreve -20
-KPX J acircumflex -20
-KPX J adieresis -20
-KPX J agrave -20
-KPX J amacron -20
-KPX J aogonek -20
-KPX J aring -20
-KPX J atilde -20
-KPX J comma -30
-KPX J period -30
-KPX J u -20
-KPX J uacute -20
-KPX J ucircumflex -20
-KPX J udieresis -20
-KPX J ugrave -20
-KPX J uhungarumlaut -20
-KPX J umacron -20
-KPX J uogonek -20
-KPX J uring -20
-KPX K O -50
-KPX K Oacute -50
-KPX K Ocircumflex -50
-KPX K Odieresis -50
-KPX K Ograve -50
-KPX K Ohungarumlaut -50
-KPX K Omacron -50
-KPX K Oslash -50
-KPX K Otilde -50
-KPX K e -40
-KPX K eacute -40
-KPX K ecaron -40
-KPX K ecircumflex -40
-KPX K edieresis -40
-KPX K edotaccent -40
-KPX K egrave -40
-KPX K emacron -40
-KPX K eogonek -40
-KPX K o -40
-KPX K oacute -40
-KPX K ocircumflex -40
-KPX K odieresis -40
-KPX K ograve -40
-KPX K ohungarumlaut -40
-KPX K omacron -40
-KPX K oslash -40
-KPX K otilde -40
-KPX K u -30
-KPX K uacute -30
-KPX K ucircumflex -30
-KPX K udieresis -30
-KPX K ugrave -30
-KPX K uhungarumlaut -30
-KPX K umacron -30
-KPX K uogonek -30
-KPX K uring -30
-KPX K y -50
-KPX K yacute -50
-KPX K ydieresis -50
-KPX Kcommaaccent O -50
-KPX Kcommaaccent Oacute -50
-KPX Kcommaaccent Ocircumflex -50
-KPX Kcommaaccent Odieresis -50
-KPX Kcommaaccent Ograve -50
-KPX Kcommaaccent Ohungarumlaut -50
-KPX Kcommaaccent Omacron -50
-KPX Kcommaaccent Oslash -50
-KPX Kcommaaccent Otilde -50
-KPX Kcommaaccent e -40
-KPX Kcommaaccent eacute -40
-KPX Kcommaaccent ecaron -40
-KPX Kcommaaccent ecircumflex -40
-KPX Kcommaaccent edieresis -40
-KPX Kcommaaccent edotaccent -40
-KPX Kcommaaccent egrave -40
-KPX Kcommaaccent emacron -40
-KPX Kcommaaccent eogonek -40
-KPX Kcommaaccent o -40
-KPX Kcommaaccent oacute -40
-KPX Kcommaaccent ocircumflex -40
-KPX Kcommaaccent odieresis -40
-KPX Kcommaaccent ograve -40
-KPX Kcommaaccent ohungarumlaut -40
-KPX Kcommaaccent omacron -40
-KPX Kcommaaccent oslash -40
-KPX Kcommaaccent otilde -40
-KPX Kcommaaccent u -30
-KPX Kcommaaccent uacute -30
-KPX Kcommaaccent ucircumflex -30
-KPX Kcommaaccent udieresis -30
-KPX Kcommaaccent ugrave -30
-KPX Kcommaaccent uhungarumlaut -30
-KPX Kcommaaccent umacron -30
-KPX Kcommaaccent uogonek -30
-KPX Kcommaaccent uring -30
-KPX Kcommaaccent y -50
-KPX Kcommaaccent yacute -50
-KPX Kcommaaccent ydieresis -50
-KPX L T -110
-KPX L Tcaron -110
-KPX L Tcommaaccent -110
-KPX L V -110
-KPX L W -70
-KPX L Y -140
-KPX L Yacute -140
-KPX L Ydieresis -140
-KPX L quotedblright -140
-KPX L quoteright -160
-KPX L y -30
-KPX L yacute -30
-KPX L ydieresis -30
-KPX Lacute T -110
-KPX Lacute Tcaron -110
-KPX Lacute Tcommaaccent -110
-KPX Lacute V -110
-KPX Lacute W -70
-KPX Lacute Y -140
-KPX Lacute Yacute -140
-KPX Lacute Ydieresis -140
-KPX Lacute quotedblright -140
-KPX Lacute quoteright -160
-KPX Lacute y -30
-KPX Lacute yacute -30
-KPX Lacute ydieresis -30
-KPX Lcaron T -110
-KPX Lcaron Tcaron -110
-KPX Lcaron Tcommaaccent -110
-KPX Lcaron V -110
-KPX Lcaron W -70
-KPX Lcaron Y -140
-KPX Lcaron Yacute -140
-KPX Lcaron Ydieresis -140
-KPX Lcaron quotedblright -140
-KPX Lcaron quoteright -160
-KPX Lcaron y -30
-KPX Lcaron yacute -30
-KPX Lcaron ydieresis -30
-KPX Lcommaaccent T -110
-KPX Lcommaaccent Tcaron -110
-KPX Lcommaaccent Tcommaaccent -110
-KPX Lcommaaccent V -110
-KPX Lcommaaccent W -70
-KPX Lcommaaccent Y -140
-KPX Lcommaaccent Yacute -140
-KPX Lcommaaccent Ydieresis -140
-KPX Lcommaaccent quotedblright -140
-KPX Lcommaaccent quoteright -160
-KPX Lcommaaccent y -30
-KPX Lcommaaccent yacute -30
-KPX Lcommaaccent ydieresis -30
-KPX Lslash T -110
-KPX Lslash Tcaron -110
-KPX Lslash Tcommaaccent -110
-KPX Lslash V -110
-KPX Lslash W -70
-KPX Lslash Y -140
-KPX Lslash Yacute -140
-KPX Lslash Ydieresis -140
-KPX Lslash quotedblright -140
-KPX Lslash quoteright -160
-KPX Lslash y -30
-KPX Lslash yacute -30
-KPX Lslash ydieresis -30
-KPX O A -20
-KPX O Aacute -20
-KPX O Abreve -20
-KPX O Acircumflex -20
-KPX O Adieresis -20
-KPX O Agrave -20
-KPX O Amacron -20
-KPX O Aogonek -20
-KPX O Aring -20
-KPX O Atilde -20
-KPX O T -40
-KPX O Tcaron -40
-KPX O Tcommaaccent -40
-KPX O V -50
-KPX O W -30
-KPX O X -60
-KPX O Y -70
-KPX O Yacute -70
-KPX O Ydieresis -70
-KPX O comma -40
-KPX O period -40
-KPX Oacute A -20
-KPX Oacute Aacute -20
-KPX Oacute Abreve -20
-KPX Oacute Acircumflex -20
-KPX Oacute Adieresis -20
-KPX Oacute Agrave -20
-KPX Oacute Amacron -20
-KPX Oacute Aogonek -20
-KPX Oacute Aring -20
-KPX Oacute Atilde -20
-KPX Oacute T -40
-KPX Oacute Tcaron -40
-KPX Oacute Tcommaaccent -40
-KPX Oacute V -50
-KPX Oacute W -30
-KPX Oacute X -60
-KPX Oacute Y -70
-KPX Oacute Yacute -70
-KPX Oacute Ydieresis -70
-KPX Oacute comma -40
-KPX Oacute period -40
-KPX Ocircumflex A -20
-KPX Ocircumflex Aacute -20
-KPX Ocircumflex Abreve -20
-KPX Ocircumflex Acircumflex -20
-KPX Ocircumflex Adieresis -20
-KPX Ocircumflex Agrave -20
-KPX Ocircumflex Amacron -20
-KPX Ocircumflex Aogonek -20
-KPX Ocircumflex Aring -20
-KPX Ocircumflex Atilde -20
-KPX Ocircumflex T -40
-KPX Ocircumflex Tcaron -40
-KPX Ocircumflex Tcommaaccent -40
-KPX Ocircumflex V -50
-KPX Ocircumflex W -30
-KPX Ocircumflex X -60
-KPX Ocircumflex Y -70
-KPX Ocircumflex Yacute -70
-KPX Ocircumflex Ydieresis -70
-KPX Ocircumflex comma -40
-KPX Ocircumflex period -40
-KPX Odieresis A -20
-KPX Odieresis Aacute -20
-KPX Odieresis Abreve -20
-KPX Odieresis Acircumflex -20
-KPX Odieresis Adieresis -20
-KPX Odieresis Agrave -20
-KPX Odieresis Amacron -20
-KPX Odieresis Aogonek -20
-KPX Odieresis Aring -20
-KPX Odieresis Atilde -20
-KPX Odieresis T -40
-KPX Odieresis Tcaron -40
-KPX Odieresis Tcommaaccent -40
-KPX Odieresis V -50
-KPX Odieresis W -30
-KPX Odieresis X -60
-KPX Odieresis Y -70
-KPX Odieresis Yacute -70
-KPX Odieresis Ydieresis -70
-KPX Odieresis comma -40
-KPX Odieresis period -40
-KPX Ograve A -20
-KPX Ograve Aacute -20
-KPX Ograve Abreve -20
-KPX Ograve Acircumflex -20
-KPX Ograve Adieresis -20
-KPX Ograve Agrave -20
-KPX Ograve Amacron -20
-KPX Ograve Aogonek -20
-KPX Ograve Aring -20
-KPX Ograve Atilde -20
-KPX Ograve T -40
-KPX Ograve Tcaron -40
-KPX Ograve Tcommaaccent -40
-KPX Ograve V -50
-KPX Ograve W -30
-KPX Ograve X -60
-KPX Ograve Y -70
-KPX Ograve Yacute -70
-KPX Ograve Ydieresis -70
-KPX Ograve comma -40
-KPX Ograve period -40
-KPX Ohungarumlaut A -20
-KPX Ohungarumlaut Aacute -20
-KPX Ohungarumlaut Abreve -20
-KPX Ohungarumlaut Acircumflex -20
-KPX Ohungarumlaut Adieresis -20
-KPX Ohungarumlaut Agrave -20
-KPX Ohungarumlaut Amacron -20
-KPX Ohungarumlaut Aogonek -20
-KPX Ohungarumlaut Aring -20
-KPX Ohungarumlaut Atilde -20
-KPX Ohungarumlaut T -40
-KPX Ohungarumlaut Tcaron -40
-KPX Ohungarumlaut Tcommaaccent -40
-KPX Ohungarumlaut V -50
-KPX Ohungarumlaut W -30
-KPX Ohungarumlaut X -60
-KPX Ohungarumlaut Y -70
-KPX Ohungarumlaut Yacute -70
-KPX Ohungarumlaut Ydieresis -70
-KPX Ohungarumlaut comma -40
-KPX Ohungarumlaut period -40
-KPX Omacron A -20
-KPX Omacron Aacute -20
-KPX Omacron Abreve -20
-KPX Omacron Acircumflex -20
-KPX Omacron Adieresis -20
-KPX Omacron Agrave -20
-KPX Omacron Amacron -20
-KPX Omacron Aogonek -20
-KPX Omacron Aring -20
-KPX Omacron Atilde -20
-KPX Omacron T -40
-KPX Omacron Tcaron -40
-KPX Omacron Tcommaaccent -40
-KPX Omacron V -50
-KPX Omacron W -30
-KPX Omacron X -60
-KPX Omacron Y -70
-KPX Omacron Yacute -70
-KPX Omacron Ydieresis -70
-KPX Omacron comma -40
-KPX Omacron period -40
-KPX Oslash A -20
-KPX Oslash Aacute -20
-KPX Oslash Abreve -20
-KPX Oslash Acircumflex -20
-KPX Oslash Adieresis -20
-KPX Oslash Agrave -20
-KPX Oslash Amacron -20
-KPX Oslash Aogonek -20
-KPX Oslash Aring -20
-KPX Oslash Atilde -20
-KPX Oslash T -40
-KPX Oslash Tcaron -40
-KPX Oslash Tcommaaccent -40
-KPX Oslash V -50
-KPX Oslash W -30
-KPX Oslash X -60
-KPX Oslash Y -70
-KPX Oslash Yacute -70
-KPX Oslash Ydieresis -70
-KPX Oslash comma -40
-KPX Oslash period -40
-KPX Otilde A -20
-KPX Otilde Aacute -20
-KPX Otilde Abreve -20
-KPX Otilde Acircumflex -20
-KPX Otilde Adieresis -20
-KPX Otilde Agrave -20
-KPX Otilde Amacron -20
-KPX Otilde Aogonek -20
-KPX Otilde Aring -20
-KPX Otilde Atilde -20
-KPX Otilde T -40
-KPX Otilde Tcaron -40
-KPX Otilde Tcommaaccent -40
-KPX Otilde V -50
-KPX Otilde W -30
-KPX Otilde X -60
-KPX Otilde Y -70
-KPX Otilde Yacute -70
-KPX Otilde Ydieresis -70
-KPX Otilde comma -40
-KPX Otilde period -40
-KPX P A -120
-KPX P Aacute -120
-KPX P Abreve -120
-KPX P Acircumflex -120
-KPX P Adieresis -120
-KPX P Agrave -120
-KPX P Amacron -120
-KPX P Aogonek -120
-KPX P Aring -120
-KPX P Atilde -120
-KPX P a -40
-KPX P aacute -40
-KPX P abreve -40
-KPX P acircumflex -40
-KPX P adieresis -40
-KPX P agrave -40
-KPX P amacron -40
-KPX P aogonek -40
-KPX P aring -40
-KPX P atilde -40
-KPX P comma -180
-KPX P e -50
-KPX P eacute -50
-KPX P ecaron -50
-KPX P ecircumflex -50
-KPX P edieresis -50
-KPX P edotaccent -50
-KPX P egrave -50
-KPX P emacron -50
-KPX P eogonek -50
-KPX P o -50
-KPX P oacute -50
-KPX P ocircumflex -50
-KPX P odieresis -50
-KPX P ograve -50
-KPX P ohungarumlaut -50
-KPX P omacron -50
-KPX P oslash -50
-KPX P otilde -50
-KPX P period -180
-KPX Q U -10
-KPX Q Uacute -10
-KPX Q Ucircumflex -10
-KPX Q Udieresis -10
-KPX Q Ugrave -10
-KPX Q Uhungarumlaut -10
-KPX Q Umacron -10
-KPX Q Uogonek -10
-KPX Q Uring -10
-KPX R O -20
-KPX R Oacute -20
-KPX R Ocircumflex -20
-KPX R Odieresis -20
-KPX R Ograve -20
-KPX R Ohungarumlaut -20
-KPX R Omacron -20
-KPX R Oslash -20
-KPX R Otilde -20
-KPX R T -30
-KPX R Tcaron -30
-KPX R Tcommaaccent -30
-KPX R U -40
-KPX R Uacute -40
-KPX R Ucircumflex -40
-KPX R Udieresis -40
-KPX R Ugrave -40
-KPX R Uhungarumlaut -40
-KPX R Umacron -40
-KPX R Uogonek -40
-KPX R Uring -40
-KPX R V -50
-KPX R W -30
-KPX R Y -50
-KPX R Yacute -50
-KPX R Ydieresis -50
-KPX Racute O -20
-KPX Racute Oacute -20
-KPX Racute Ocircumflex -20
-KPX Racute Odieresis -20
-KPX Racute Ograve -20
-KPX Racute Ohungarumlaut -20
-KPX Racute Omacron -20
-KPX Racute Oslash -20
-KPX Racute Otilde -20
-KPX Racute T -30
-KPX Racute Tcaron -30
-KPX Racute Tcommaaccent -30
-KPX Racute U -40
-KPX Racute Uacute -40
-KPX Racute Ucircumflex -40
-KPX Racute Udieresis -40
-KPX Racute Ugrave -40
-KPX Racute Uhungarumlaut -40
-KPX Racute Umacron -40
-KPX Racute Uogonek -40
-KPX Racute Uring -40
-KPX Racute V -50
-KPX Racute W -30
-KPX Racute Y -50
-KPX Racute Yacute -50
-KPX Racute Ydieresis -50
-KPX Rcaron O -20
-KPX Rcaron Oacute -20
-KPX Rcaron Ocircumflex -20
-KPX Rcaron Odieresis -20
-KPX Rcaron Ograve -20
-KPX Rcaron Ohungarumlaut -20
-KPX Rcaron Omacron -20
-KPX Rcaron Oslash -20
-KPX Rcaron Otilde -20
-KPX Rcaron T -30
-KPX Rcaron Tcaron -30
-KPX Rcaron Tcommaaccent -30
-KPX Rcaron U -40
-KPX Rcaron Uacute -40
-KPX Rcaron Ucircumflex -40
-KPX Rcaron Udieresis -40
-KPX Rcaron Ugrave -40
-KPX Rcaron Uhungarumlaut -40
-KPX Rcaron Umacron -40
-KPX Rcaron Uogonek -40
-KPX Rcaron Uring -40
-KPX Rcaron V -50
-KPX Rcaron W -30
-KPX Rcaron Y -50
-KPX Rcaron Yacute -50
-KPX Rcaron Ydieresis -50
-KPX Rcommaaccent O -20
-KPX Rcommaaccent Oacute -20
-KPX Rcommaaccent Ocircumflex -20
-KPX Rcommaaccent Odieresis -20
-KPX Rcommaaccent Ograve -20
-KPX Rcommaaccent Ohungarumlaut -20
-KPX Rcommaaccent Omacron -20
-KPX Rcommaaccent Oslash -20
-KPX Rcommaaccent Otilde -20
-KPX Rcommaaccent T -30
-KPX Rcommaaccent Tcaron -30
-KPX Rcommaaccent Tcommaaccent -30
-KPX Rcommaaccent U -40
-KPX Rcommaaccent Uacute -40
-KPX Rcommaaccent Ucircumflex -40
-KPX Rcommaaccent Udieresis -40
-KPX Rcommaaccent Ugrave -40
-KPX Rcommaaccent Uhungarumlaut -40
-KPX Rcommaaccent Umacron -40
-KPX Rcommaaccent Uogonek -40
-KPX Rcommaaccent Uring -40
-KPX Rcommaaccent V -50
-KPX Rcommaaccent W -30
-KPX Rcommaaccent Y -50
-KPX Rcommaaccent Yacute -50
-KPX Rcommaaccent Ydieresis -50
-KPX S comma -20
-KPX S period -20
-KPX Sacute comma -20
-KPX Sacute period -20
-KPX Scaron comma -20
-KPX Scaron period -20
-KPX Scedilla comma -20
-KPX Scedilla period -20
-KPX Scommaaccent comma -20
-KPX Scommaaccent period -20
-KPX T A -120
-KPX T Aacute -120
-KPX T Abreve -120
-KPX T Acircumflex -120
-KPX T Adieresis -120
-KPX T Agrave -120
-KPX T Amacron -120
-KPX T Aogonek -120
-KPX T Aring -120
-KPX T Atilde -120
-KPX T O -40
-KPX T Oacute -40
-KPX T Ocircumflex -40
-KPX T Odieresis -40
-KPX T Ograve -40
-KPX T Ohungarumlaut -40
-KPX T Omacron -40
-KPX T Oslash -40
-KPX T Otilde -40
-KPX T a -120
-KPX T aacute -120
-KPX T abreve -60
-KPX T acircumflex -120
-KPX T adieresis -120
-KPX T agrave -120
-KPX T amacron -60
-KPX T aogonek -120
-KPX T aring -120
-KPX T atilde -60
-KPX T colon -20
-KPX T comma -120
-KPX T e -120
-KPX T eacute -120
-KPX T ecaron -120
-KPX T ecircumflex -120
-KPX T edieresis -120
-KPX T edotaccent -120
-KPX T egrave -60
-KPX T emacron -60
-KPX T eogonek -120
-KPX T hyphen -140
-KPX T o -120
-KPX T oacute -120
-KPX T ocircumflex -120
-KPX T odieresis -120
-KPX T ograve -120
-KPX T ohungarumlaut -120
-KPX T omacron -60
-KPX T oslash -120
-KPX T otilde -60
-KPX T period -120
-KPX T r -120
-KPX T racute -120
-KPX T rcaron -120
-KPX T rcommaaccent -120
-KPX T semicolon -20
-KPX T u -120
-KPX T uacute -120
-KPX T ucircumflex -120
-KPX T udieresis -120
-KPX T ugrave -120
-KPX T uhungarumlaut -120
-KPX T umacron -60
-KPX T uogonek -120
-KPX T uring -120
-KPX T w -120
-KPX T y -120
-KPX T yacute -120
-KPX T ydieresis -60
-KPX Tcaron A -120
-KPX Tcaron Aacute -120
-KPX Tcaron Abreve -120
-KPX Tcaron Acircumflex -120
-KPX Tcaron Adieresis -120
-KPX Tcaron Agrave -120
-KPX Tcaron Amacron -120
-KPX Tcaron Aogonek -120
-KPX Tcaron Aring -120
-KPX Tcaron Atilde -120
-KPX Tcaron O -40
-KPX Tcaron Oacute -40
-KPX Tcaron Ocircumflex -40
-KPX Tcaron Odieresis -40
-KPX Tcaron Ograve -40
-KPX Tcaron Ohungarumlaut -40
-KPX Tcaron Omacron -40
-KPX Tcaron Oslash -40
-KPX Tcaron Otilde -40
-KPX Tcaron a -120
-KPX Tcaron aacute -120
-KPX Tcaron abreve -60
-KPX Tcaron acircumflex -120
-KPX Tcaron adieresis -120
-KPX Tcaron agrave -120
-KPX Tcaron amacron -60
-KPX Tcaron aogonek -120
-KPX Tcaron aring -120
-KPX Tcaron atilde -60
-KPX Tcaron colon -20
-KPX Tcaron comma -120
-KPX Tcaron e -120
-KPX Tcaron eacute -120
-KPX Tcaron ecaron -120
-KPX Tcaron ecircumflex -120
-KPX Tcaron edieresis -120
-KPX Tcaron edotaccent -120
-KPX Tcaron egrave -60
-KPX Tcaron emacron -60
-KPX Tcaron eogonek -120
-KPX Tcaron hyphen -140
-KPX Tcaron o -120
-KPX Tcaron oacute -120
-KPX Tcaron ocircumflex -120
-KPX Tcaron odieresis -120
-KPX Tcaron ograve -120
-KPX Tcaron ohungarumlaut -120
-KPX Tcaron omacron -60
-KPX Tcaron oslash -120
-KPX Tcaron otilde -60
-KPX Tcaron period -120
-KPX Tcaron r -120
-KPX Tcaron racute -120
-KPX Tcaron rcaron -120
-KPX Tcaron rcommaaccent -120
-KPX Tcaron semicolon -20
-KPX Tcaron u -120
-KPX Tcaron uacute -120
-KPX Tcaron ucircumflex -120
-KPX Tcaron udieresis -120
-KPX Tcaron ugrave -120
-KPX Tcaron uhungarumlaut -120
-KPX Tcaron umacron -60
-KPX Tcaron uogonek -120
-KPX Tcaron uring -120
-KPX Tcaron w -120
-KPX Tcaron y -120
-KPX Tcaron yacute -120
-KPX Tcaron ydieresis -60
-KPX Tcommaaccent A -120
-KPX Tcommaaccent Aacute -120
-KPX Tcommaaccent Abreve -120
-KPX Tcommaaccent Acircumflex -120
-KPX Tcommaaccent Adieresis -120
-KPX Tcommaaccent Agrave -120
-KPX Tcommaaccent Amacron -120
-KPX Tcommaaccent Aogonek -120
-KPX Tcommaaccent Aring -120
-KPX Tcommaaccent Atilde -120
-KPX Tcommaaccent O -40
-KPX Tcommaaccent Oacute -40
-KPX Tcommaaccent Ocircumflex -40
-KPX Tcommaaccent Odieresis -40
-KPX Tcommaaccent Ograve -40
-KPX Tcommaaccent Ohungarumlaut -40
-KPX Tcommaaccent Omacron -40
-KPX Tcommaaccent Oslash -40
-KPX Tcommaaccent Otilde -40
-KPX Tcommaaccent a -120
-KPX Tcommaaccent aacute -120
-KPX Tcommaaccent abreve -60
-KPX Tcommaaccent acircumflex -120
-KPX Tcommaaccent adieresis -120
-KPX Tcommaaccent agrave -120
-KPX Tcommaaccent amacron -60
-KPX Tcommaaccent aogonek -120
-KPX Tcommaaccent aring -120
-KPX Tcommaaccent atilde -60
-KPX Tcommaaccent colon -20
-KPX Tcommaaccent comma -120
-KPX Tcommaaccent e -120
-KPX Tcommaaccent eacute -120
-KPX Tcommaaccent ecaron -120
-KPX Tcommaaccent ecircumflex -120
-KPX Tcommaaccent edieresis -120
-KPX Tcommaaccent edotaccent -120
-KPX Tcommaaccent egrave -60
-KPX Tcommaaccent emacron -60
-KPX Tcommaaccent eogonek -120
-KPX Tcommaaccent hyphen -140
-KPX Tcommaaccent o -120
-KPX Tcommaaccent oacute -120
-KPX Tcommaaccent ocircumflex -120
-KPX Tcommaaccent odieresis -120
-KPX Tcommaaccent ograve -120
-KPX Tcommaaccent ohungarumlaut -120
-KPX Tcommaaccent omacron -60
-KPX Tcommaaccent oslash -120
-KPX Tcommaaccent otilde -60
-KPX Tcommaaccent period -120
-KPX Tcommaaccent r -120
-KPX Tcommaaccent racute -120
-KPX Tcommaaccent rcaron -120
-KPX Tcommaaccent rcommaaccent -120
-KPX Tcommaaccent semicolon -20
-KPX Tcommaaccent u -120
-KPX Tcommaaccent uacute -120
-KPX Tcommaaccent ucircumflex -120
-KPX Tcommaaccent udieresis -120
-KPX Tcommaaccent ugrave -120
-KPX Tcommaaccent uhungarumlaut -120
-KPX Tcommaaccent umacron -60
-KPX Tcommaaccent uogonek -120
-KPX Tcommaaccent uring -120
-KPX Tcommaaccent w -120
-KPX Tcommaaccent y -120
-KPX Tcommaaccent yacute -120
-KPX Tcommaaccent ydieresis -60
-KPX U A -40
-KPX U Aacute -40
-KPX U Abreve -40
-KPX U Acircumflex -40
-KPX U Adieresis -40
-KPX U Agrave -40
-KPX U Amacron -40
-KPX U Aogonek -40
-KPX U Aring -40
-KPX U Atilde -40
-KPX U comma -40
-KPX U period -40
-KPX Uacute A -40
-KPX Uacute Aacute -40
-KPX Uacute Abreve -40
-KPX Uacute Acircumflex -40
-KPX Uacute Adieresis -40
-KPX Uacute Agrave -40
-KPX Uacute Amacron -40
-KPX Uacute Aogonek -40
-KPX Uacute Aring -40
-KPX Uacute Atilde -40
-KPX Uacute comma -40
-KPX Uacute period -40
-KPX Ucircumflex A -40
-KPX Ucircumflex Aacute -40
-KPX Ucircumflex Abreve -40
-KPX Ucircumflex Acircumflex -40
-KPX Ucircumflex Adieresis -40
-KPX Ucircumflex Agrave -40
-KPX Ucircumflex Amacron -40
-KPX Ucircumflex Aogonek -40
-KPX Ucircumflex Aring -40
-KPX Ucircumflex Atilde -40
-KPX Ucircumflex comma -40
-KPX Ucircumflex period -40
-KPX Udieresis A -40
-KPX Udieresis Aacute -40
-KPX Udieresis Abreve -40
-KPX Udieresis Acircumflex -40
-KPX Udieresis Adieresis -40
-KPX Udieresis Agrave -40
-KPX Udieresis Amacron -40
-KPX Udieresis Aogonek -40
-KPX Udieresis Aring -40
-KPX Udieresis Atilde -40
-KPX Udieresis comma -40
-KPX Udieresis period -40
-KPX Ugrave A -40
-KPX Ugrave Aacute -40
-KPX Ugrave Abreve -40
-KPX Ugrave Acircumflex -40
-KPX Ugrave Adieresis -40
-KPX Ugrave Agrave -40
-KPX Ugrave Amacron -40
-KPX Ugrave Aogonek -40
-KPX Ugrave Aring -40
-KPX Ugrave Atilde -40
-KPX Ugrave comma -40
-KPX Ugrave period -40
-KPX Uhungarumlaut A -40
-KPX Uhungarumlaut Aacute -40
-KPX Uhungarumlaut Abreve -40
-KPX Uhungarumlaut Acircumflex -40
-KPX Uhungarumlaut Adieresis -40
-KPX Uhungarumlaut Agrave -40
-KPX Uhungarumlaut Amacron -40
-KPX Uhungarumlaut Aogonek -40
-KPX Uhungarumlaut Aring -40
-KPX Uhungarumlaut Atilde -40
-KPX Uhungarumlaut comma -40
-KPX Uhungarumlaut period -40
-KPX Umacron A -40
-KPX Umacron Aacute -40
-KPX Umacron Abreve -40
-KPX Umacron Acircumflex -40
-KPX Umacron Adieresis -40
-KPX Umacron Agrave -40
-KPX Umacron Amacron -40
-KPX Umacron Aogonek -40
-KPX Umacron Aring -40
-KPX Umacron Atilde -40
-KPX Umacron comma -40
-KPX Umacron period -40
-KPX Uogonek A -40
-KPX Uogonek Aacute -40
-KPX Uogonek Abreve -40
-KPX Uogonek Acircumflex -40
-KPX Uogonek Adieresis -40
-KPX Uogonek Agrave -40
-KPX Uogonek Amacron -40
-KPX Uogonek Aogonek -40
-KPX Uogonek Aring -40
-KPX Uogonek Atilde -40
-KPX Uogonek comma -40
-KPX Uogonek period -40
-KPX Uring A -40
-KPX Uring Aacute -40
-KPX Uring Abreve -40
-KPX Uring Acircumflex -40
-KPX Uring Adieresis -40
-KPX Uring Agrave -40
-KPX Uring Amacron -40
-KPX Uring Aogonek -40
-KPX Uring Aring -40
-KPX Uring Atilde -40
-KPX Uring comma -40
-KPX Uring period -40
-KPX V A -80
-KPX V Aacute -80
-KPX V Abreve -80
-KPX V Acircumflex -80
-KPX V Adieresis -80
-KPX V Agrave -80
-KPX V Amacron -80
-KPX V Aogonek -80
-KPX V Aring -80
-KPX V Atilde -80
-KPX V G -40
-KPX V Gbreve -40
-KPX V Gcommaaccent -40
-KPX V O -40
-KPX V Oacute -40
-KPX V Ocircumflex -40
-KPX V Odieresis -40
-KPX V Ograve -40
-KPX V Ohungarumlaut -40
-KPX V Omacron -40
-KPX V Oslash -40
-KPX V Otilde -40
-KPX V a -70
-KPX V aacute -70
-KPX V abreve -70
-KPX V acircumflex -70
-KPX V adieresis -70
-KPX V agrave -70
-KPX V amacron -70
-KPX V aogonek -70
-KPX V aring -70
-KPX V atilde -70
-KPX V colon -40
-KPX V comma -125
-KPX V e -80
-KPX V eacute -80
-KPX V ecaron -80
-KPX V ecircumflex -80
-KPX V edieresis -80
-KPX V edotaccent -80
-KPX V egrave -80
-KPX V emacron -80
-KPX V eogonek -80
-KPX V hyphen -80
-KPX V o -80
-KPX V oacute -80
-KPX V ocircumflex -80
-KPX V odieresis -80
-KPX V ograve -80
-KPX V ohungarumlaut -80
-KPX V omacron -80
-KPX V oslash -80
-KPX V otilde -80
-KPX V period -125
-KPX V semicolon -40
-KPX V u -70
-KPX V uacute -70
-KPX V ucircumflex -70
-KPX V udieresis -70
-KPX V ugrave -70
-KPX V uhungarumlaut -70
-KPX V umacron -70
-KPX V uogonek -70
-KPX V uring -70
-KPX W A -50
-KPX W Aacute -50
-KPX W Abreve -50
-KPX W Acircumflex -50
-KPX W Adieresis -50
-KPX W Agrave -50
-KPX W Amacron -50
-KPX W Aogonek -50
-KPX W Aring -50
-KPX W Atilde -50
-KPX W O -20
-KPX W Oacute -20
-KPX W Ocircumflex -20
-KPX W Odieresis -20
-KPX W Ograve -20
-KPX W Ohungarumlaut -20
-KPX W Omacron -20
-KPX W Oslash -20
-KPX W Otilde -20
-KPX W a -40
-KPX W aacute -40
-KPX W abreve -40
-KPX W acircumflex -40
-KPX W adieresis -40
-KPX W agrave -40
-KPX W amacron -40
-KPX W aogonek -40
-KPX W aring -40
-KPX W atilde -40
-KPX W comma -80
-KPX W e -30
-KPX W eacute -30
-KPX W ecaron -30
-KPX W ecircumflex -30
-KPX W edieresis -30
-KPX W edotaccent -30
-KPX W egrave -30
-KPX W emacron -30
-KPX W eogonek -30
-KPX W hyphen -40
-KPX W o -30
-KPX W oacute -30
-KPX W ocircumflex -30
-KPX W odieresis -30
-KPX W ograve -30
-KPX W ohungarumlaut -30
-KPX W omacron -30
-KPX W oslash -30
-KPX W otilde -30
-KPX W period -80
-KPX W u -30
-KPX W uacute -30
-KPX W ucircumflex -30
-KPX W udieresis -30
-KPX W ugrave -30
-KPX W uhungarumlaut -30
-KPX W umacron -30
-KPX W uogonek -30
-KPX W uring -30
-KPX W y -20
-KPX W yacute -20
-KPX W ydieresis -20
-KPX Y A -110
-KPX Y Aacute -110
-KPX Y Abreve -110
-KPX Y Acircumflex -110
-KPX Y Adieresis -110
-KPX Y Agrave -110
-KPX Y Amacron -110
-KPX Y Aogonek -110
-KPX Y Aring -110
-KPX Y Atilde -110
-KPX Y O -85
-KPX Y Oacute -85
-KPX Y Ocircumflex -85
-KPX Y Odieresis -85
-KPX Y Ograve -85
-KPX Y Ohungarumlaut -85
-KPX Y Omacron -85
-KPX Y Oslash -85
-KPX Y Otilde -85
-KPX Y a -140
-KPX Y aacute -140
-KPX Y abreve -70
-KPX Y acircumflex -140
-KPX Y adieresis -140
-KPX Y agrave -140
-KPX Y amacron -70
-KPX Y aogonek -140
-KPX Y aring -140
-KPX Y atilde -140
-KPX Y colon -60
-KPX Y comma -140
-KPX Y e -140
-KPX Y eacute -140
-KPX Y ecaron -140
-KPX Y ecircumflex -140
-KPX Y edieresis -140
-KPX Y edotaccent -140
-KPX Y egrave -140
-KPX Y emacron -70
-KPX Y eogonek -140
-KPX Y hyphen -140
-KPX Y i -20
-KPX Y iacute -20
-KPX Y iogonek -20
-KPX Y o -140
-KPX Y oacute -140
-KPX Y ocircumflex -140
-KPX Y odieresis -140
-KPX Y ograve -140
-KPX Y ohungarumlaut -140
-KPX Y omacron -140
-KPX Y oslash -140
-KPX Y otilde -140
-KPX Y period -140
-KPX Y semicolon -60
-KPX Y u -110
-KPX Y uacute -110
-KPX Y ucircumflex -110
-KPX Y udieresis -110
-KPX Y ugrave -110
-KPX Y uhungarumlaut -110
-KPX Y umacron -110
-KPX Y uogonek -110
-KPX Y uring -110
-KPX Yacute A -110
-KPX Yacute Aacute -110
-KPX Yacute Abreve -110
-KPX Yacute Acircumflex -110
-KPX Yacute Adieresis -110
-KPX Yacute Agrave -110
-KPX Yacute Amacron -110
-KPX Yacute Aogonek -110
-KPX Yacute Aring -110
-KPX Yacute Atilde -110
-KPX Yacute O -85
-KPX Yacute Oacute -85
-KPX Yacute Ocircumflex -85
-KPX Yacute Odieresis -85
-KPX Yacute Ograve -85
-KPX Yacute Ohungarumlaut -85
-KPX Yacute Omacron -85
-KPX Yacute Oslash -85
-KPX Yacute Otilde -85
-KPX Yacute a -140
-KPX Yacute aacute -140
-KPX Yacute abreve -70
-KPX Yacute acircumflex -140
-KPX Yacute adieresis -140
-KPX Yacute agrave -140
-KPX Yacute amacron -70
-KPX Yacute aogonek -140
-KPX Yacute aring -140
-KPX Yacute atilde -70
-KPX Yacute colon -60
-KPX Yacute comma -140
-KPX Yacute e -140
-KPX Yacute eacute -140
-KPX Yacute ecaron -140
-KPX Yacute ecircumflex -140
-KPX Yacute edieresis -140
-KPX Yacute edotaccent -140
-KPX Yacute egrave -140
-KPX Yacute emacron -70
-KPX Yacute eogonek -140
-KPX Yacute hyphen -140
-KPX Yacute i -20
-KPX Yacute iacute -20
-KPX Yacute iogonek -20
-KPX Yacute o -140
-KPX Yacute oacute -140
-KPX Yacute ocircumflex -140
-KPX Yacute odieresis -140
-KPX Yacute ograve -140
-KPX Yacute ohungarumlaut -140
-KPX Yacute omacron -70
-KPX Yacute oslash -140
-KPX Yacute otilde -140
-KPX Yacute period -140
-KPX Yacute semicolon -60
-KPX Yacute u -110
-KPX Yacute uacute -110
-KPX Yacute ucircumflex -110
-KPX Yacute udieresis -110
-KPX Yacute ugrave -110
-KPX Yacute uhungarumlaut -110
-KPX Yacute umacron -110
-KPX Yacute uogonek -110
-KPX Yacute uring -110
-KPX Ydieresis A -110
-KPX Ydieresis Aacute -110
-KPX Ydieresis Abreve -110
-KPX Ydieresis Acircumflex -110
-KPX Ydieresis Adieresis -110
-KPX Ydieresis Agrave -110
-KPX Ydieresis Amacron -110
-KPX Ydieresis Aogonek -110
-KPX Ydieresis Aring -110
-KPX Ydieresis Atilde -110
-KPX Ydieresis O -85
-KPX Ydieresis Oacute -85
-KPX Ydieresis Ocircumflex -85
-KPX Ydieresis Odieresis -85
-KPX Ydieresis Ograve -85
-KPX Ydieresis Ohungarumlaut -85
-KPX Ydieresis Omacron -85
-KPX Ydieresis Oslash -85
-KPX Ydieresis Otilde -85
-KPX Ydieresis a -140
-KPX Ydieresis aacute -140
-KPX Ydieresis abreve -70
-KPX Ydieresis acircumflex -140
-KPX Ydieresis adieresis -140
-KPX Ydieresis agrave -140
-KPX Ydieresis amacron -70
-KPX Ydieresis aogonek -140
-KPX Ydieresis aring -140
-KPX Ydieresis atilde -70
-KPX Ydieresis colon -60
-KPX Ydieresis comma -140
-KPX Ydieresis e -140
-KPX Ydieresis eacute -140
-KPX Ydieresis ecaron -140
-KPX Ydieresis ecircumflex -140
-KPX Ydieresis edieresis -140
-KPX Ydieresis edotaccent -140
-KPX Ydieresis egrave -140
-KPX Ydieresis emacron -70
-KPX Ydieresis eogonek -140
-KPX Ydieresis hyphen -140
-KPX Ydieresis i -20
-KPX Ydieresis iacute -20
-KPX Ydieresis iogonek -20
-KPX Ydieresis o -140
-KPX Ydieresis oacute -140
-KPX Ydieresis ocircumflex -140
-KPX Ydieresis odieresis -140
-KPX Ydieresis ograve -140
-KPX Ydieresis ohungarumlaut -140
-KPX Ydieresis omacron -140
-KPX Ydieresis oslash -140
-KPX Ydieresis otilde -140
-KPX Ydieresis period -140
-KPX Ydieresis semicolon -60
-KPX Ydieresis u -110
-KPX Ydieresis uacute -110
-KPX Ydieresis ucircumflex -110
-KPX Ydieresis udieresis -110
-KPX Ydieresis ugrave -110
-KPX Ydieresis uhungarumlaut -110
-KPX Ydieresis umacron -110
-KPX Ydieresis uogonek -110
-KPX Ydieresis uring -110
-KPX a v -20
-KPX a w -20
-KPX a y -30
-KPX a yacute -30
-KPX a ydieresis -30
-KPX aacute v -20
-KPX aacute w -20
-KPX aacute y -30
-KPX aacute yacute -30
-KPX aacute ydieresis -30
-KPX abreve v -20
-KPX abreve w -20
-KPX abreve y -30
-KPX abreve yacute -30
-KPX abreve ydieresis -30
-KPX acircumflex v -20
-KPX acircumflex w -20
-KPX acircumflex y -30
-KPX acircumflex yacute -30
-KPX acircumflex ydieresis -30
-KPX adieresis v -20
-KPX adieresis w -20
-KPX adieresis y -30
-KPX adieresis yacute -30
-KPX adieresis ydieresis -30
-KPX agrave v -20
-KPX agrave w -20
-KPX agrave y -30
-KPX agrave yacute -30
-KPX agrave ydieresis -30
-KPX amacron v -20
-KPX amacron w -20
-KPX amacron y -30
-KPX amacron yacute -30
-KPX amacron ydieresis -30
-KPX aogonek v -20
-KPX aogonek w -20
-KPX aogonek y -30
-KPX aogonek yacute -30
-KPX aogonek ydieresis -30
-KPX aring v -20
-KPX aring w -20
-KPX aring y -30
-KPX aring yacute -30
-KPX aring ydieresis -30
-KPX atilde v -20
-KPX atilde w -20
-KPX atilde y -30
-KPX atilde yacute -30
-KPX atilde ydieresis -30
-KPX b b -10
-KPX b comma -40
-KPX b l -20
-KPX b lacute -20
-KPX b lcommaaccent -20
-KPX b lslash -20
-KPX b period -40
-KPX b u -20
-KPX b uacute -20
-KPX b ucircumflex -20
-KPX b udieresis -20
-KPX b ugrave -20
-KPX b uhungarumlaut -20
-KPX b umacron -20
-KPX b uogonek -20
-KPX b uring -20
-KPX b v -20
-KPX b y -20
-KPX b yacute -20
-KPX b ydieresis -20
-KPX c comma -15
-KPX c k -20
-KPX c kcommaaccent -20
-KPX cacute comma -15
-KPX cacute k -20
-KPX cacute kcommaaccent -20
-KPX ccaron comma -15
-KPX ccaron k -20
-KPX ccaron kcommaaccent -20
-KPX ccedilla comma -15
-KPX ccedilla k -20
-KPX ccedilla kcommaaccent -20
-KPX colon space -50
-KPX comma quotedblright -100
-KPX comma quoteright -100
-KPX e comma -15
-KPX e period -15
-KPX e v -30
-KPX e w -20
-KPX e x -30
-KPX e y -20
-KPX e yacute -20
-KPX e ydieresis -20
-KPX eacute comma -15
-KPX eacute period -15
-KPX eacute v -30
-KPX eacute w -20
-KPX eacute x -30
-KPX eacute y -20
-KPX eacute yacute -20
-KPX eacute ydieresis -20
-KPX ecaron comma -15
-KPX ecaron period -15
-KPX ecaron v -30
-KPX ecaron w -20
-KPX ecaron x -30
-KPX ecaron y -20
-KPX ecaron yacute -20
-KPX ecaron ydieresis -20
-KPX ecircumflex comma -15
-KPX ecircumflex period -15
-KPX ecircumflex v -30
-KPX ecircumflex w -20
-KPX ecircumflex x -30
-KPX ecircumflex y -20
-KPX ecircumflex yacute -20
-KPX ecircumflex ydieresis -20
-KPX edieresis comma -15
-KPX edieresis period -15
-KPX edieresis v -30
-KPX edieresis w -20
-KPX edieresis x -30
-KPX edieresis y -20
-KPX edieresis yacute -20
-KPX edieresis ydieresis -20
-KPX edotaccent comma -15
-KPX edotaccent period -15
-KPX edotaccent v -30
-KPX edotaccent w -20
-KPX edotaccent x -30
-KPX edotaccent y -20
-KPX edotaccent yacute -20
-KPX edotaccent ydieresis -20
-KPX egrave comma -15
-KPX egrave period -15
-KPX egrave v -30
-KPX egrave w -20
-KPX egrave x -30
-KPX egrave y -20
-KPX egrave yacute -20
-KPX egrave ydieresis -20
-KPX emacron comma -15
-KPX emacron period -15
-KPX emacron v -30
-KPX emacron w -20
-KPX emacron x -30
-KPX emacron y -20
-KPX emacron yacute -20
-KPX emacron ydieresis -20
-KPX eogonek comma -15
-KPX eogonek period -15
-KPX eogonek v -30
-KPX eogonek w -20
-KPX eogonek x -30
-KPX eogonek y -20
-KPX eogonek yacute -20
-KPX eogonek ydieresis -20
-KPX f a -30
-KPX f aacute -30
-KPX f abreve -30
-KPX f acircumflex -30
-KPX f adieresis -30
-KPX f agrave -30
-KPX f amacron -30
-KPX f aogonek -30
-KPX f aring -30
-KPX f atilde -30
-KPX f comma -30
-KPX f dotlessi -28
-KPX f e -30
-KPX f eacute -30
-KPX f ecaron -30
-KPX f ecircumflex -30
-KPX f edieresis -30
-KPX f edotaccent -30
-KPX f egrave -30
-KPX f emacron -30
-KPX f eogonek -30
-KPX f o -30
-KPX f oacute -30
-KPX f ocircumflex -30
-KPX f odieresis -30
-KPX f ograve -30
-KPX f ohungarumlaut -30
-KPX f omacron -30
-KPX f oslash -30
-KPX f otilde -30
-KPX f period -30
-KPX f quotedblright 60
-KPX f quoteright 50
-KPX g r -10
-KPX g racute -10
-KPX g rcaron -10
-KPX g rcommaaccent -10
-KPX gbreve r -10
-KPX gbreve racute -10
-KPX gbreve rcaron -10
-KPX gbreve rcommaaccent -10
-KPX gcommaaccent r -10
-KPX gcommaaccent racute -10
-KPX gcommaaccent rcaron -10
-KPX gcommaaccent rcommaaccent -10
-KPX h y -30
-KPX h yacute -30
-KPX h ydieresis -30
-KPX k e -20
-KPX k eacute -20
-KPX k ecaron -20
-KPX k ecircumflex -20
-KPX k edieresis -20
-KPX k edotaccent -20
-KPX k egrave -20
-KPX k emacron -20
-KPX k eogonek -20
-KPX k o -20
-KPX k oacute -20
-KPX k ocircumflex -20
-KPX k odieresis -20
-KPX k ograve -20
-KPX k ohungarumlaut -20
-KPX k omacron -20
-KPX k oslash -20
-KPX k otilde -20
-KPX kcommaaccent e -20
-KPX kcommaaccent eacute -20
-KPX kcommaaccent ecaron -20
-KPX kcommaaccent ecircumflex -20
-KPX kcommaaccent edieresis -20
-KPX kcommaaccent edotaccent -20
-KPX kcommaaccent egrave -20
-KPX kcommaaccent emacron -20
-KPX kcommaaccent eogonek -20
-KPX kcommaaccent o -20
-KPX kcommaaccent oacute -20
-KPX kcommaaccent ocircumflex -20
-KPX kcommaaccent odieresis -20
-KPX kcommaaccent ograve -20
-KPX kcommaaccent ohungarumlaut -20
-KPX kcommaaccent omacron -20
-KPX kcommaaccent oslash -20
-KPX kcommaaccent otilde -20
-KPX m u -10
-KPX m uacute -10
-KPX m ucircumflex -10
-KPX m udieresis -10
-KPX m ugrave -10
-KPX m uhungarumlaut -10
-KPX m umacron -10
-KPX m uogonek -10
-KPX m uring -10
-KPX m y -15
-KPX m yacute -15
-KPX m ydieresis -15
-KPX n u -10
-KPX n uacute -10
-KPX n ucircumflex -10
-KPX n udieresis -10
-KPX n ugrave -10
-KPX n uhungarumlaut -10
-KPX n umacron -10
-KPX n uogonek -10
-KPX n uring -10
-KPX n v -20
-KPX n y -15
-KPX n yacute -15
-KPX n ydieresis -15
-KPX nacute u -10
-KPX nacute uacute -10
-KPX nacute ucircumflex -10
-KPX nacute udieresis -10
-KPX nacute ugrave -10
-KPX nacute uhungarumlaut -10
-KPX nacute umacron -10
-KPX nacute uogonek -10
-KPX nacute uring -10
-KPX nacute v -20
-KPX nacute y -15
-KPX nacute yacute -15
-KPX nacute ydieresis -15
-KPX ncaron u -10
-KPX ncaron uacute -10
-KPX ncaron ucircumflex -10
-KPX ncaron udieresis -10
-KPX ncaron ugrave -10
-KPX ncaron uhungarumlaut -10
-KPX ncaron umacron -10
-KPX ncaron uogonek -10
-KPX ncaron uring -10
-KPX ncaron v -20
-KPX ncaron y -15
-KPX ncaron yacute -15
-KPX ncaron ydieresis -15
-KPX ncommaaccent u -10
-KPX ncommaaccent uacute -10
-KPX ncommaaccent ucircumflex -10
-KPX ncommaaccent udieresis -10
-KPX ncommaaccent ugrave -10
-KPX ncommaaccent uhungarumlaut -10
-KPX ncommaaccent umacron -10
-KPX ncommaaccent uogonek -10
-KPX ncommaaccent uring -10
-KPX ncommaaccent v -20
-KPX ncommaaccent y -15
-KPX ncommaaccent yacute -15
-KPX ncommaaccent ydieresis -15
-KPX ntilde u -10
-KPX ntilde uacute -10
-KPX ntilde ucircumflex -10
-KPX ntilde udieresis -10
-KPX ntilde ugrave -10
-KPX ntilde uhungarumlaut -10
-KPX ntilde umacron -10
-KPX ntilde uogonek -10
-KPX ntilde uring -10
-KPX ntilde v -20
-KPX ntilde y -15
-KPX ntilde yacute -15
-KPX ntilde ydieresis -15
-KPX o comma -40
-KPX o period -40
-KPX o v -15
-KPX o w -15
-KPX o x -30
-KPX o y -30
-KPX o yacute -30
-KPX o ydieresis -30
-KPX oacute comma -40
-KPX oacute period -40
-KPX oacute v -15
-KPX oacute w -15
-KPX oacute x -30
-KPX oacute y -30
-KPX oacute yacute -30
-KPX oacute ydieresis -30
-KPX ocircumflex comma -40
-KPX ocircumflex period -40
-KPX ocircumflex v -15
-KPX ocircumflex w -15
-KPX ocircumflex x -30
-KPX ocircumflex y -30
-KPX ocircumflex yacute -30
-KPX ocircumflex ydieresis -30
-KPX odieresis comma -40
-KPX odieresis period -40
-KPX odieresis v -15
-KPX odieresis w -15
-KPX odieresis x -30
-KPX odieresis y -30
-KPX odieresis yacute -30
-KPX odieresis ydieresis -30
-KPX ograve comma -40
-KPX ograve period -40
-KPX ograve v -15
-KPX ograve w -15
-KPX ograve x -30
-KPX ograve y -30
-KPX ograve yacute -30
-KPX ograve ydieresis -30
-KPX ohungarumlaut comma -40
-KPX ohungarumlaut period -40
-KPX ohungarumlaut v -15
-KPX ohungarumlaut w -15
-KPX ohungarumlaut x -30
-KPX ohungarumlaut y -30
-KPX ohungarumlaut yacute -30
-KPX ohungarumlaut ydieresis -30
-KPX omacron comma -40
-KPX omacron period -40
-KPX omacron v -15
-KPX omacron w -15
-KPX omacron x -30
-KPX omacron y -30
-KPX omacron yacute -30
-KPX omacron ydieresis -30
-KPX oslash a -55
-KPX oslash aacute -55
-KPX oslash abreve -55
-KPX oslash acircumflex -55
-KPX oslash adieresis -55
-KPX oslash agrave -55
-KPX oslash amacron -55
-KPX oslash aogonek -55
-KPX oslash aring -55
-KPX oslash atilde -55
-KPX oslash b -55
-KPX oslash c -55
-KPX oslash cacute -55
-KPX oslash ccaron -55
-KPX oslash ccedilla -55
-KPX oslash comma -95
-KPX oslash d -55
-KPX oslash dcroat -55
-KPX oslash e -55
-KPX oslash eacute -55
-KPX oslash ecaron -55
-KPX oslash ecircumflex -55
-KPX oslash edieresis -55
-KPX oslash edotaccent -55
-KPX oslash egrave -55
-KPX oslash emacron -55
-KPX oslash eogonek -55
-KPX oslash f -55
-KPX oslash g -55
-KPX oslash gbreve -55
-KPX oslash gcommaaccent -55
-KPX oslash h -55
-KPX oslash i -55
-KPX oslash iacute -55
-KPX oslash icircumflex -55
-KPX oslash idieresis -55
-KPX oslash igrave -55
-KPX oslash imacron -55
-KPX oslash iogonek -55
-KPX oslash j -55
-KPX oslash k -55
-KPX oslash kcommaaccent -55
-KPX oslash l -55
-KPX oslash lacute -55
-KPX oslash lcommaaccent -55
-KPX oslash lslash -55
-KPX oslash m -55
-KPX oslash n -55
-KPX oslash nacute -55
-KPX oslash ncaron -55
-KPX oslash ncommaaccent -55
-KPX oslash ntilde -55
-KPX oslash o -55
-KPX oslash oacute -55
-KPX oslash ocircumflex -55
-KPX oslash odieresis -55
-KPX oslash ograve -55
-KPX oslash ohungarumlaut -55
-KPX oslash omacron -55
-KPX oslash oslash -55
-KPX oslash otilde -55
-KPX oslash p -55
-KPX oslash period -95
-KPX oslash q -55
-KPX oslash r -55
-KPX oslash racute -55
-KPX oslash rcaron -55
-KPX oslash rcommaaccent -55
-KPX oslash s -55
-KPX oslash sacute -55
-KPX oslash scaron -55
-KPX oslash scedilla -55
-KPX oslash scommaaccent -55
-KPX oslash t -55
-KPX oslash tcommaaccent -55
-KPX oslash u -55
-KPX oslash uacute -55
-KPX oslash ucircumflex -55
-KPX oslash udieresis -55
-KPX oslash ugrave -55
-KPX oslash uhungarumlaut -55
-KPX oslash umacron -55
-KPX oslash uogonek -55
-KPX oslash uring -55
-KPX oslash v -70
-KPX oslash w -70
-KPX oslash x -85
-KPX oslash y -70
-KPX oslash yacute -70
-KPX oslash ydieresis -70
-KPX oslash z -55
-KPX oslash zacute -55
-KPX oslash zcaron -55
-KPX oslash zdotaccent -55
-KPX otilde comma -40
-KPX otilde period -40
-KPX otilde v -15
-KPX otilde w -15
-KPX otilde x -30
-KPX otilde y -30
-KPX otilde yacute -30
-KPX otilde ydieresis -30
-KPX p comma -35
-KPX p period -35
-KPX p y -30
-KPX p yacute -30
-KPX p ydieresis -30
-KPX period quotedblright -100
-KPX period quoteright -100
-KPX period space -60
-KPX quotedblright space -40
-KPX quoteleft quoteleft -57
-KPX quoteright d -50
-KPX quoteright dcroat -50
-KPX quoteright quoteright -57
-KPX quoteright r -50
-KPX quoteright racute -50
-KPX quoteright rcaron -50
-KPX quoteright rcommaaccent -50
-KPX quoteright s -50
-KPX quoteright sacute -50
-KPX quoteright scaron -50
-KPX quoteright scedilla -50
-KPX quoteright scommaaccent -50
-KPX quoteright space -70
-KPX r a -10
-KPX r aacute -10
-KPX r abreve -10
-KPX r acircumflex -10
-KPX r adieresis -10
-KPX r agrave -10
-KPX r amacron -10
-KPX r aogonek -10
-KPX r aring -10
-KPX r atilde -10
-KPX r colon 30
-KPX r comma -50
-KPX r i 15
-KPX r iacute 15
-KPX r icircumflex 15
-KPX r idieresis 15
-KPX r igrave 15
-KPX r imacron 15
-KPX r iogonek 15
-KPX r k 15
-KPX r kcommaaccent 15
-KPX r l 15
-KPX r lacute 15
-KPX r lcommaaccent 15
-KPX r lslash 15
-KPX r m 25
-KPX r n 25
-KPX r nacute 25
-KPX r ncaron 25
-KPX r ncommaaccent 25
-KPX r ntilde 25
-KPX r p 30
-KPX r period -50
-KPX r semicolon 30
-KPX r t 40
-KPX r tcommaaccent 40
-KPX r u 15
-KPX r uacute 15
-KPX r ucircumflex 15
-KPX r udieresis 15
-KPX r ugrave 15
-KPX r uhungarumlaut 15
-KPX r umacron 15
-KPX r uogonek 15
-KPX r uring 15
-KPX r v 30
-KPX r y 30
-KPX r yacute 30
-KPX r ydieresis 30
-KPX racute a -10
-KPX racute aacute -10
-KPX racute abreve -10
-KPX racute acircumflex -10
-KPX racute adieresis -10
-KPX racute agrave -10
-KPX racute amacron -10
-KPX racute aogonek -10
-KPX racute aring -10
-KPX racute atilde -10
-KPX racute colon 30
-KPX racute comma -50
-KPX racute i 15
-KPX racute iacute 15
-KPX racute icircumflex 15
-KPX racute idieresis 15
-KPX racute igrave 15
-KPX racute imacron 15
-KPX racute iogonek 15
-KPX racute k 15
-KPX racute kcommaaccent 15
-KPX racute l 15
-KPX racute lacute 15
-KPX racute lcommaaccent 15
-KPX racute lslash 15
-KPX racute m 25
-KPX racute n 25
-KPX racute nacute 25
-KPX racute ncaron 25
-KPX racute ncommaaccent 25
-KPX racute ntilde 25
-KPX racute p 30
-KPX racute period -50
-KPX racute semicolon 30
-KPX racute t 40
-KPX racute tcommaaccent 40
-KPX racute u 15
-KPX racute uacute 15
-KPX racute ucircumflex 15
-KPX racute udieresis 15
-KPX racute ugrave 15
-KPX racute uhungarumlaut 15
-KPX racute umacron 15
-KPX racute uogonek 15
-KPX racute uring 15
-KPX racute v 30
-KPX racute y 30
-KPX racute yacute 30
-KPX racute ydieresis 30
-KPX rcaron a -10
-KPX rcaron aacute -10
-KPX rcaron abreve -10
-KPX rcaron acircumflex -10
-KPX rcaron adieresis -10
-KPX rcaron agrave -10
-KPX rcaron amacron -10
-KPX rcaron aogonek -10
-KPX rcaron aring -10
-KPX rcaron atilde -10
-KPX rcaron colon 30
-KPX rcaron comma -50
-KPX rcaron i 15
-KPX rcaron iacute 15
-KPX rcaron icircumflex 15
-KPX rcaron idieresis 15
-KPX rcaron igrave 15
-KPX rcaron imacron 15
-KPX rcaron iogonek 15
-KPX rcaron k 15
-KPX rcaron kcommaaccent 15
-KPX rcaron l 15
-KPX rcaron lacute 15
-KPX rcaron lcommaaccent 15
-KPX rcaron lslash 15
-KPX rcaron m 25
-KPX rcaron n 25
-KPX rcaron nacute 25
-KPX rcaron ncaron 25
-KPX rcaron ncommaaccent 25
-KPX rcaron ntilde 25
-KPX rcaron p 30
-KPX rcaron period -50
-KPX rcaron semicolon 30
-KPX rcaron t 40
-KPX rcaron tcommaaccent 40
-KPX rcaron u 15
-KPX rcaron uacute 15
-KPX rcaron ucircumflex 15
-KPX rcaron udieresis 15
-KPX rcaron ugrave 15
-KPX rcaron uhungarumlaut 15
-KPX rcaron umacron 15
-KPX rcaron uogonek 15
-KPX rcaron uring 15
-KPX rcaron v 30
-KPX rcaron y 30
-KPX rcaron yacute 30
-KPX rcaron ydieresis 30
-KPX rcommaaccent a -10
-KPX rcommaaccent aacute -10
-KPX rcommaaccent abreve -10
-KPX rcommaaccent acircumflex -10
-KPX rcommaaccent adieresis -10
-KPX rcommaaccent agrave -10
-KPX rcommaaccent amacron -10
-KPX rcommaaccent aogonek -10
-KPX rcommaaccent aring -10
-KPX rcommaaccent atilde -10
-KPX rcommaaccent colon 30
-KPX rcommaaccent comma -50
-KPX rcommaaccent i 15
-KPX rcommaaccent iacute 15
-KPX rcommaaccent icircumflex 15
-KPX rcommaaccent idieresis 15
-KPX rcommaaccent igrave 15
-KPX rcommaaccent imacron 15
-KPX rcommaaccent iogonek 15
-KPX rcommaaccent k 15
-KPX rcommaaccent kcommaaccent 15
-KPX rcommaaccent l 15
-KPX rcommaaccent lacute 15
-KPX rcommaaccent lcommaaccent 15
-KPX rcommaaccent lslash 15
-KPX rcommaaccent m 25
-KPX rcommaaccent n 25
-KPX rcommaaccent nacute 25
-KPX rcommaaccent ncaron 25
-KPX rcommaaccent ncommaaccent 25
-KPX rcommaaccent ntilde 25
-KPX rcommaaccent p 30
-KPX rcommaaccent period -50
-KPX rcommaaccent semicolon 30
-KPX rcommaaccent t 40
-KPX rcommaaccent tcommaaccent 40
-KPX rcommaaccent u 15
-KPX rcommaaccent uacute 15
-KPX rcommaaccent ucircumflex 15
-KPX rcommaaccent udieresis 15
-KPX rcommaaccent ugrave 15
-KPX rcommaaccent uhungarumlaut 15
-KPX rcommaaccent umacron 15
-KPX rcommaaccent uogonek 15
-KPX rcommaaccent uring 15
-KPX rcommaaccent v 30
-KPX rcommaaccent y 30
-KPX rcommaaccent yacute 30
-KPX rcommaaccent ydieresis 30
-KPX s comma -15
-KPX s period -15
-KPX s w -30
-KPX sacute comma -15
-KPX sacute period -15
-KPX sacute w -30
-KPX scaron comma -15
-KPX scaron period -15
-KPX scaron w -30
-KPX scedilla comma -15
-KPX scedilla period -15
-KPX scedilla w -30
-KPX scommaaccent comma -15
-KPX scommaaccent period -15
-KPX scommaaccent w -30
-KPX semicolon space -50
-KPX space T -50
-KPX space Tcaron -50
-KPX space Tcommaaccent -50
-KPX space V -50
-KPX space W -40
-KPX space Y -90
-KPX space Yacute -90
-KPX space Ydieresis -90
-KPX space quotedblleft -30
-KPX space quoteleft -60
-KPX v a -25
-KPX v aacute -25
-KPX v abreve -25
-KPX v acircumflex -25
-KPX v adieresis -25
-KPX v agrave -25
-KPX v amacron -25
-KPX v aogonek -25
-KPX v aring -25
-KPX v atilde -25
-KPX v comma -80
-KPX v e -25
-KPX v eacute -25
-KPX v ecaron -25
-KPX v ecircumflex -25
-KPX v edieresis -25
-KPX v edotaccent -25
-KPX v egrave -25
-KPX v emacron -25
-KPX v eogonek -25
-KPX v o -25
-KPX v oacute -25
-KPX v ocircumflex -25
-KPX v odieresis -25
-KPX v ograve -25
-KPX v ohungarumlaut -25
-KPX v omacron -25
-KPX v oslash -25
-KPX v otilde -25
-KPX v period -80
-KPX w a -15
-KPX w aacute -15
-KPX w abreve -15
-KPX w acircumflex -15
-KPX w adieresis -15
-KPX w agrave -15
-KPX w amacron -15
-KPX w aogonek -15
-KPX w aring -15
-KPX w atilde -15
-KPX w comma -60
-KPX w e -10
-KPX w eacute -10
-KPX w ecaron -10
-KPX w ecircumflex -10
-KPX w edieresis -10
-KPX w edotaccent -10
-KPX w egrave -10
-KPX w emacron -10
-KPX w eogonek -10
-KPX w o -10
-KPX w oacute -10
-KPX w ocircumflex -10
-KPX w odieresis -10
-KPX w ograve -10
-KPX w ohungarumlaut -10
-KPX w omacron -10
-KPX w oslash -10
-KPX w otilde -10
-KPX w period -60
-KPX x e -30
-KPX x eacute -30
-KPX x ecaron -30
-KPX x ecircumflex -30
-KPX x edieresis -30
-KPX x edotaccent -30
-KPX x egrave -30
-KPX x emacron -30
-KPX x eogonek -30
-KPX y a -20
-KPX y aacute -20
-KPX y abreve -20
-KPX y acircumflex -20
-KPX y adieresis -20
-KPX y agrave -20
-KPX y amacron -20
-KPX y aogonek -20
-KPX y aring -20
-KPX y atilde -20
-KPX y comma -100
-KPX y e -20
-KPX y eacute -20
-KPX y ecaron -20
-KPX y ecircumflex -20
-KPX y edieresis -20
-KPX y edotaccent -20
-KPX y egrave -20
-KPX y emacron -20
-KPX y eogonek -20
-KPX y o -20
-KPX y oacute -20
-KPX y ocircumflex -20
-KPX y odieresis -20
-KPX y ograve -20
-KPX y ohungarumlaut -20
-KPX y omacron -20
-KPX y oslash -20
-KPX y otilde -20
-KPX y period -100
-KPX yacute a -20
-KPX yacute aacute -20
-KPX yacute abreve -20
-KPX yacute acircumflex -20
-KPX yacute adieresis -20
-KPX yacute agrave -20
-KPX yacute amacron -20
-KPX yacute aogonek -20
-KPX yacute aring -20
-KPX yacute atilde -20
-KPX yacute comma -100
-KPX yacute e -20
-KPX yacute eacute -20
-KPX yacute ecaron -20
-KPX yacute ecircumflex -20
-KPX yacute edieresis -20
-KPX yacute edotaccent -20
-KPX yacute egrave -20
-KPX yacute emacron -20
-KPX yacute eogonek -20
-KPX yacute o -20
-KPX yacute oacute -20
-KPX yacute ocircumflex -20
-KPX yacute odieresis -20
-KPX yacute ograve -20
-KPX yacute ohungarumlaut -20
-KPX yacute omacron -20
-KPX yacute oslash -20
-KPX yacute otilde -20
-KPX yacute period -100
-KPX ydieresis a -20
-KPX ydieresis aacute -20
-KPX ydieresis abreve -20
-KPX ydieresis acircumflex -20
-KPX ydieresis adieresis -20
-KPX ydieresis agrave -20
-KPX ydieresis amacron -20
-KPX ydieresis aogonek -20
-KPX ydieresis aring -20
-KPX ydieresis atilde -20
-KPX ydieresis comma -100
-KPX ydieresis e -20
-KPX ydieresis eacute -20
-KPX ydieresis ecaron -20
-KPX ydieresis ecircumflex -20
-KPX ydieresis edieresis -20
-KPX ydieresis edotaccent -20
-KPX ydieresis egrave -20
-KPX ydieresis emacron -20
-KPX ydieresis eogonek -20
-KPX ydieresis o -20
-KPX ydieresis oacute -20
-KPX ydieresis ocircumflex -20
-KPX ydieresis odieresis -20
-KPX ydieresis ograve -20
-KPX ydieresis ohungarumlaut -20
-KPX ydieresis omacron -20
-KPX ydieresis oslash -20
-KPX ydieresis otilde -20
-KPX ydieresis period -100
-KPX z e -15
-KPX z eacute -15
-KPX z ecaron -15
-KPX z ecircumflex -15
-KPX z edieresis -15
-KPX z edotaccent -15
-KPX z egrave -15
-KPX z emacron -15
-KPX z eogonek -15
-KPX z o -15
-KPX z oacute -15
-KPX z ocircumflex -15
-KPX z odieresis -15
-KPX z ograve -15
-KPX z ohungarumlaut -15
-KPX z omacron -15
-KPX z oslash -15
-KPX z otilde -15
-KPX zacute e -15
-KPX zacute eacute -15
-KPX zacute ecaron -15
-KPX zacute ecircumflex -15
-KPX zacute edieresis -15
-KPX zacute edotaccent -15
-KPX zacute egrave -15
-KPX zacute emacron -15
-KPX zacute eogonek -15
-KPX zacute o -15
-KPX zacute oacute -15
-KPX zacute ocircumflex -15
-KPX zacute odieresis -15
-KPX zacute ograve -15
-KPX zacute ohungarumlaut -15
-KPX zacute omacron -15
-KPX zacute oslash -15
-KPX zacute otilde -15
-KPX zcaron e -15
-KPX zcaron eacute -15
-KPX zcaron ecaron -15
-KPX zcaron ecircumflex -15
-KPX zcaron edieresis -15
-KPX zcaron edotaccent -15
-KPX zcaron egrave -15
-KPX zcaron emacron -15
-KPX zcaron eogonek -15
-KPX zcaron o -15
-KPX zcaron oacute -15
-KPX zcaron ocircumflex -15
-KPX zcaron odieresis -15
-KPX zcaron ograve -15
-KPX zcaron ohungarumlaut -15
-KPX zcaron omacron -15
-KPX zcaron oslash -15
-KPX zcaron otilde -15
-KPX zdotaccent e -15
-KPX zdotaccent eacute -15
-KPX zdotaccent ecaron -15
-KPX zdotaccent ecircumflex -15
-KPX zdotaccent edieresis -15
-KPX zdotaccent edotaccent -15
-KPX zdotaccent egrave -15
-KPX zdotaccent emacron -15
-KPX zdotaccent eogonek -15
-KPX zdotaccent o -15
-KPX zdotaccent oacute -15
-KPX zdotaccent ocircumflex -15
-KPX zdotaccent odieresis -15
-KPX zdotaccent ograve -15
-KPX zdotaccent ohungarumlaut -15
-KPX zdotaccent omacron -15
-KPX zdotaccent oslash -15
-KPX zdotaccent otilde -15
-EndKernPairs
-EndKernData
-EndFontMetrics
diff --git a/reporting/fonts/helvetica.php b/reporting/fonts/helvetica.php
new file mode 100644 (file)
index 0000000..23bc9b0
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500);
+?>
\ No newline at end of file
diff --git a/reporting/fonts/helveticab.php b/reporting/fonts/helveticab.php
new file mode 100644 (file)
index 0000000..6a08a76
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556);
+?>
\ No newline at end of file
diff --git a/reporting/fonts/helveticabi.php b/reporting/fonts/helveticabi.php
new file mode 100644 (file)
index 0000000..6a08a76
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>333,34=>474,35=>556,36=>556,37=>889,38=>722,39=>238,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>333,59=>333,60=>584,61=>584,62=>584,63=>611,64=>975,65=>722,66=>722,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>556,75=>722,76=>611,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>333,92=>278,93=>333,94=>584,95=>556,96=>333,97=>556,98=>611,99=>556,100=>611,101=>556,102=>333,103=>611,104=>611,105=>278,106=>278,107=>556,108=>278,109=>889,110=>611,111=>611,112=>611,113=>611,114=>389,115=>556,116=>333,117=>611,118=>556,119=>778,120=>556,121=>556,122=>500,123=>389,124=>280,125=>389,126=>584,127=>350,128=>556,129=>350,130=>278,131=>556,132=>500,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>278,146=>278,147=>500,148=>500,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>556,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>280,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>611,182=>556,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>722,193=>722,194=>722,195=>722,196=>722,197=>722,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>556,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>611,241=>611,242=>611,243=>611,244=>611,245=>611,246=>611,247=>584,248=>611,249=>611,250=>611,251=>611,252=>611,253=>556,254=>611,255=>556);
+?>
\ No newline at end of file
diff --git a/reporting/fonts/helveticai.php b/reporting/fonts/helveticai.php
new file mode 100644 (file)
index 0000000..23bc9b0
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+ // core font definition file for TCPDF (www.tcpdf.org)
+$type='core';
+$cw=array(0=>278,1=>278,2=>278,3=>278,4=>278,5=>278,6=>278,7=>278,8=>278,9=>278,10=>278,11=>278,12=>278,13=>278,14=>278,15=>278,16=>278,17=>278,18=>278,19=>278,20=>278,21=>278,22=>278,23=>278,24=>278,25=>278,26=>278,27=>278,28=>278,29=>278,30=>278,31=>278,32=>278,33=>278,34=>355,35=>556,36=>556,37=>889,38=>667,39=>191,40=>333,41=>333,42=>389,43=>584,44=>278,45=>333,46=>278,47=>278,48=>556,49=>556,50=>556,51=>556,52=>556,53=>556,54=>556,55=>556,56=>556,57=>556,58=>278,59=>278,60=>584,61=>584,62=>584,63=>556,64=>1015,65=>667,66=>667,67=>722,68=>722,69=>667,70=>611,71=>778,72=>722,73=>278,74=>500,75=>667,76=>556,77=>833,78=>722,79=>778,80=>667,81=>778,82=>722,83=>667,84=>611,85=>722,86=>667,87=>944,88=>667,89=>667,90=>611,91=>278,92=>278,93=>278,94=>469,95=>556,96=>333,97=>556,98=>556,99=>500,100=>556,101=>556,102=>278,103=>556,104=>556,105=>222,106=>222,107=>500,108=>222,109=>833,110=>556,111=>556,112=>556,113=>556,114=>333,115=>500,116=>278,117=>556,118=>500,119=>722,120=>500,121=>500,122=>500,123=>334,124=>260,125=>334,126=>584,127=>350,128=>556,129=>350,130=>222,131=>556,132=>333,133=>1000,134=>556,135=>556,136=>333,137=>1000,138=>667,139=>333,140=>1000,141=>350,142=>611,143=>350,144=>350,145=>222,146=>222,147=>333,148=>333,149=>350,150=>556,151=>1000,152=>333,153=>1000,154=>500,155=>333,156=>944,157=>350,158=>500,159=>667,160=>278,161=>333,162=>556,163=>556,164=>556,165=>556,166=>260,167=>556,168=>333,169=>737,170=>370,171=>556,172=>584,173=>333,174=>737,175=>333,176=>400,177=>584,178=>333,179=>333,180=>333,181=>556,182=>537,183=>278,184=>333,185=>333,186=>365,187=>556,188=>834,189=>834,190=>834,191=>611,192=>667,193=>667,194=>667,195=>667,196=>667,197=>667,198=>1000,199=>722,200=>667,201=>667,202=>667,203=>667,204=>278,205=>278,206=>278,207=>278,208=>722,209=>722,210=>778,211=>778,212=>778,213=>778,214=>778,215=>584,216=>778,217=>722,218=>722,219=>722,220=>722,221=>667,222=>667,223=>611,224=>556,225=>556,226=>556,227=>556,228=>556,229=>556,230=>889,231=>500,232=>556,233=>556,234=>556,235=>556,236=>278,237=>278,238=>278,239=>278,240=>556,241=>556,242=>556,243=>556,244=>556,245=>556,246=>556,247=>584,248=>611,249=>556,250=>556,251=>556,252=>556,253=>500,254=>556,255=>500);
+?>
\ No newline at end of file
diff --git a/reporting/fonts/iqraa.afm b/reporting/fonts/iqraa.afm
deleted file mode 100644 (file)
index e4d5973..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-StartFontMetrics 2.0
-Comment Panose 0 0 0 0 0 0 0 0 0 0
-FullName Iqraa
-FontName Iqraa
-FamilyName Iqraa
-Weight Thin
-Notice Copyright(c) 1999 ICB Fonts.
-IsFixedPitch false
-ItalicAngle 0.00
-FontBBox -17 -512 1132 1131
-Ascender 713
-Descender 389
-XHeight 559
-CapHeight 858
-UnderlinePosition -176
-UnderlineThickness 20
-EncodingScheme FontSpecific
-StartCharMetrics 218
-C 32 ; WX 500 ; N space ; B 0 0 0 0 ;
-C 33 ; WX 333 ; N exclam ; B 111 -13 222 678 ;
-C 34 ; WX 408 ; N quotedbl ; B 64 392 342 678 ;
-C 35 ; WX 500 ; N numbersign ; B 18 -13 482 678 ;
-C 36 ; WX 500 ; N dollar ; B 52 -77 450 718 ;
-C 37 ; WX 526 ; N percent ; B 64 4 463 698 ;
-C 38 ; WX 778 ; N ampersand ; B 37 -16 748 678 ;
-C 39 ; WX 626 ; N quotesingle ; B -11 63 660 713 ;
-C 40 ; WX 718 ; N parenleft ; B 116 -296 613 739 ;
-C 41 ; WX 723 ; N parenright ; B 118 -307 616 728 ;
-C 42 ; WX 500 ; N asterisk ; B 71 122 430 527 ;
-C 43 ; WX 526 ; N plus ; B 44 129 486 571 ;
-C 44 ; WX 432 ; N comma ; B 59 -157 467 304 ;
-C 45 ; WX 526 ; N hyphen ; B 44 322 486 373 ;
-C 46 ; WX 489 ; N period ; B 70 -171 523 559 ;
-C 47 ; WX 626 ; N slash ; B -11 63 660 713 ;
-C 48 ; WX 427 ; N zero ; B 124 93 307 360 ;
-C 49 ; WX 449 ; N one ; B 126 -71 331 588 ;
-C 50 ; WX 604 ; N two ; B 124 -82 472 583 ;
-C 51 ; WX 694 ; N three ; B 118 -82 587 583 ;
-C 52 ; WX 536 ; N four ; B 113 -82 402 572 ;
-C 53 ; WX 651 ; N five ; B 128 24 526 456 ;
-C 54 ; WX 611 ; N six ; B 120 -79 493 558 ;
-C 55 ; WX 690 ; N seven ; B 118 -71 572 580 ;
-C 56 ; WX 698 ; N eight ; B 120 -77 577 577 ;
-C 57 ; WX 604 ; N nine ; B 122 -82 474 586 ;
-C 58 ; WX 601 ; N colon ; B 57 63 636 694 ;
-C 59 ; WX 461 ; N semicolon ; B -11 63 503 687 ;
-C 60 ; WX 564 ; N less ; B 19 91 544 572 ;
-C 61 ; WX 526 ; N equal ; B 44 269 487 428 ;
-C 62 ; WX 564 ; N greater ; B 18 91 543 572 ;
-C 63 ; WX 357 ; N question ; B 32 57 327 631 ;
-C 64 ; WX 921 ; N at ; B 48 -216 897 694 ;
-C 65 ; WX 821 ; N A ; B 64 -152 856 636 ;
-C 66 ; WX 637 ; N B ; B 104 -1 581 858 ;
-C 67 ; WX 637 ; N C ; B 114 -191 581 644 ;
-C 68 ; WX 638 ; N D ; B 44 -288 626 382 ;
-C 69 ; WX 713 ; N E ; B 62 63 748 636 ;
-C 70 ; WX 713 ; N F ; B 62 -127 748 389 ;
-C 71 ; WX 507 ; N G ; B 69 -73 540 694 ;
-C 72 ; WX 349 ; N H ; B 169 50 306 822 ;
-C 73 ; WX 376 ; N I ; B 30 63 429 502 ;
-C 74 ; WX 713 ; N J ; B 62 63 748 548 ;
-C 75 ; WX 526 ; N K ; B 68 -152 560 478 ;
-C 76 ; WX 338 ; N L ; B 51 -292 372 277 ;
-C 77 ; WX 376 ; N M ; B 30 63 429 688 ;
-C 78 ; WX 349 ; N N ; B 153 50 352 858 ;
-C 79 ; WX 563 ; N O ; B 27 -292 516 559 ;
-C 80 ; WX 563 ; N P ; B 27 -292 516 352 ;
-C 81 ; WX 1098 ; N Q ; B 64 -152 1132 510 ;
-C 82 ; WX 581 ; N R ; B 69 -154 616 603 ;
-C 83 ; WX 821 ; N S ; B 64 -152 856 338 ;
-C 84 ; WX 789 ; N T ; B 53 63 822 601 ;
-C 85 ; WX 544 ; N U ; B 20 -292 516 454 ;
-C 86 ; WX 637 ; N V ; B 87 -1 590 811 ;
-C 87 ; WX 1098 ; N W ; B 64 -152 1132 338 ;
-C 88 ; WX 541 ; N X ; B 21 194 542 331 ;
-C 89 ; WX 544 ; N Y ; B 20 -292 516 657 ;
-C 90 ; WX 638 ; N Z ; B 34 -123 616 556 ;
-C 91 ; WX 574 ; N bracketleft ; B -11 -113 609 347 ;
-C 92 ; WX 319 ; N backslash ; B 3 -263 320 704 ;
-C 93 ; WX 436 ; N bracketright ; B 158 63 471 472 ;
-C 94 ; WX 469 ; N asciicircum ; B 18 326 451 676 ;
-C 95 ; WX 480 ; N underscore ; B -16 -216 501 -176 ;
-C 96 ; WX 436 ; N grave ; B 158 63 471 679 ;
-C 97 ; WX 598 ; N a ; B -11 63 631 636 ;
-C 98 ; WX 637 ; N b ; B 124 -1 590 644 ;
-C 99 ; WX 432 ; N c ; B 59 -157 467 511 ;
-C 100 ; WX 311 ; N d ; B -11 -149 344 376 ;
-C 101 ; WX 311 ; N e ; B -11 63 344 674 ;
-C 102 ; WX 311 ; N f ; B -11 -127 344 376 ;
-C 103 ; WX 322 ; N g ; B -11 63 358 694 ;
-C 104 ; WX 349 ; N h ; B 219 50 312 660 ;
-C 105 ; WX 566 ; N i ; B -11 44 524 474 ;
-C 106 ; WX 311 ; N j ; B -11 63 344 587 ;
-C 107 ; WX 311 ; N k ; B -11 63 344 556 ;
-C 108 ; WX 461 ; N l ; B -11 63 494 331 ;
-C 109 ; WX 282 ; N m ; B 0 50 271 560 ;
-C 110 ; WX 638 ; N n ; B 24 -123 606 382 ;
-C 111 ; WX 597 ; N o ; B -11 63 629 559 ;
-C 112 ; WX 597 ; N p ; B -17 63 631 347 ;
-C 113 ; WX 891 ; N q ; B -11 63 924 510 ;
-C 114 ; WX 383 ; N r ; B -12 63 418 660 ;
-C 115 ; WX 598 ; N s ; B -11 63 631 321 ;
-C 116 ; WX 383 ; N t ; B -10 63 418 646 ;
-C 117 ; WX 641 ; N u ; B -11 63 610 392 ;
-C 118 ; WX 489 ; N v ; B 70 -171 523 350 ;
-C 119 ; WX 891 ; N w ; B -11 63 924 326 ;
-C 120 ; WX 412 ; N x ; B 108 -8 412 320 ;
-C 121 ; WX 641 ; N y ; B -11 63 610 559 ;
-C 122 ; WX 311 ; N z ; B -11 63 344 600 ;
-C 123 ; WX 563 ; N braceleft ; B 27 -292 516 352 ;
-C 124 ; WX 200 ; N bar ; B 79 -216 119 694 ;
-C 125 ; WX 480 ; N braceright ; B 87 -216 359 694 ;
-C 126 ; WX 480 ; N asciitilde ; B 138 -216 411 694 ;
-C 130 ; WX 319 ; N quotesinglbase ; B 3 -263 314 699 ;
-C 131 ; WX 367 ; N florin ; B 180 63 400 660 ;
-C 132 ; WX 367 ; N quotedblbase ; B 157 63 400 822 ;
-C 133 ; WX 367 ; N ellipsis ; B 153 63 400 858 ;
-C 134 ; WX 349 ; N dagger ; B 160 -173 302 660 ;
-C 135 ; WX 367 ; N daggerdbl ; B 180 -173 400 660 ;
-C 136 ; WX 526 ; N circumflex ; B 27 -287 560 351 ;
-C 137 ; WX 526 ; N perthousand ; B 27 -287 560 351 ;
-C 138 ; WX 526 ; N Scaron ; B 27 -287 560 564 ;
-C 139 ; WX 510 ; N guilsinglleft ; B -10 63 542 338 ;
-C 140 ; WX 450 ; N OE ; B 27 -292 486 351 ;
-C 145 ; WX 510 ; N quoteleft ; B -11 63 543 559 ;
-C 146 ; WX 450 ; N quoteright ; B 27 -292 486 559 ;
-C 147 ; WX 378 ; N quotedblleft ; B 0 0 0 0 ;
-C 148 ; WX 378 ; N quotedblright ; B 0 0 0 0 ;
-C 149 ; WX 378 ; N bullet ; B -11 63 411 627 ;
-C 150 ; WX 378 ; N endash ; B -11 63 409 647 ;
-C 151 ; WX 510 ; N emdash ; B -13 -137 543 354 ;
-C 152 ; WX 282 ; N tilde ; B 27 50 262 350 ;
-C 153 ; WX 589 ; N trademark ; B 52 -190 622 172 ;
-C 154 ; WX 589 ; N scaron ; B 52 -309 622 178 ;
-C 155 ; WX 589 ; N guilsinglright ; B 52 -190 622 444 ;
-C 156 ; WX 693 ; N oe ; B 129 38 727 653 ;
-C 159 ; WX 693 ; N Ydieresis ; B 121 38 728 800 ;
-C 160 ; WX 556 ; N nbspace ; B 0 0 0 0 ;
-C 161 ; WX 693 ; N exclamdown ; B 130 38 729 858 ;
-C 162 ; WX 693 ; N cent ; B 129 -191 727 653 ;
-C 163 ; WX 500 ; N sterling ; B 36 -12 464 676 ;
-C 164 ; WX 500 ; N currency ; B 117 0 378 676 ;
-C 165 ; WX 500 ; N yen ; B 21 0 458 676 ;
-C 166 ; WX 500 ; N brokenbar ; B 41 -12 417 676 ;
-C 167 ; WX 500 ; N section ; B 16 0 466 676 ;
-C 168 ; WX 500 ; N dieresis ; B 48 -12 434 662 ;
-C 169 ; WX 500 ; N copyright ; B 43 -12 461 676 ;
-C 170 ; WX 500 ; N ordfeminine ; B 37 -14 456 662 ;
-C 171 ; WX 500 ; N guillemotleft ; B 61 -12 442 676 ;
-C 172 ; WX 500 ; N logicalnot ; B 40 -14 457 676 ;
-C 173 ; WX 722 ; N minus ; B 8 0 711 677 ;
-C 174 ; WX 667 ; N registered ; B 17 0 612 662 ;
-C 175 ; WX 667 ; N overscore ; B 36 -16 632 677 ;
-C 176 ; WX 722 ; N degree ; B 17 0 684 662 ;
-C 177 ; WX 611 ; N plusminus ; B 21 0 588 662 ;
-C 178 ; WX 556 ; N twosuperior ; B 16 0 516 662 ;
-C 179 ; WX 722 ; N threesuperior ; B 36 -16 708 677 ;
-C 180 ; WX 722 ; N acute ; B 17 0 702 662 ;
-C 181 ; WX 333 ; N mu ; B 26 0 309 662 ;
-C 182 ; WX 389 ; N paragraph ; B 21 -16 383 662 ;
-C 183 ; WX 722 ; N middot ; B 17 0 730 662 ;
-C 184 ; WX 611 ; N cedilla ; B 20 0 589 662 ;
-C 185 ; WX 889 ; N onesuperior ; B 17 0 868 662 ;
-C 186 ; WX 722 ; N ordmasculine ; B -13 -11 708 662 ;
-C 187 ; WX 722 ; N guillemotright ; B 36 -16 684 677 ;
-C 188 ; WX 556 ; N onequarter ; B 17 0 521 662 ;
-C 189 ; WX 722 ; N onehalf ; B 36 -196 684 677 ;
-C 190 ; WX 667 ; N threequarters ; B 17 0 676 662 ;
-C 191 ; WX 556 ; N questiondown ; B 63 -16 502 677 ;
-C 192 ; WX 611 ; N Agrave ; B 30 0 586 662 ;
-C 193 ; WX 722 ; N Aacute ; B 6 -16 711 662 ;
-C 194 ; WX 722 ; N Acircumflex ; B 9 -16 710 662 ;
-C 195 ; WX 944 ; N Atilde ; B 13 -16 936 662 ;
-C 196 ; WX 722 ; N Adieresis ; B 7 0 710 662 ;
-C 197 ; WX 722 ; N Aring ; B 9 0 708 662 ;
-C 198 ; WX 611 ; N AE ; B 13 0 583 662 ;
-C 199 ; WX 833 ; N Ccedilla ; B 36 -28 798 677 ;
-C 200 ; WX 500 ; N Egrave ; B 71 8 430 413 ;
-C 201 ; WX 526 ; N Eacute ; B 61 148 466 552 ;
-C 202 ; WX 526 ; N Ecircumflex ; B 44 129 486 566 ;
-C 203 ; WX 319 ; N Edieresis ; B 97 1 226 407 ;
-C 204 ; WX 207 ; N Igrave ; B 0 63 241 148 ;
-C 205 ; WX 278 ; N Iacute ; B 69 -167 214 461 ;
-C 206 ; WX 319 ; N Icircumflex ; B 78 56 236 529 ;
-C 207 ; WX 319 ; N Idieresis ; B 83 57 241 363 ;
-C 208 ; WX 319 ; N Eth ; B 97 57 226 187 ;
-C 209 ; WX 319 ; N Ntilde ; B 94 -57 230 187 ;
-C 210 ; WX 443 ; N Ograve ; B 44 -13 403 678 ;
-C 211 ; WX 333 ; N Oacute ; B 41 -213 310 694 ;
-C 212 ; WX 333 ; N Ocircumflex ; B 22 -213 292 694 ;
-C 213 ; WX 319 ; N Otilde ; B 59 -288 299 698 ;
-C 214 ; WX 319 ; N Odieresis ; B 22 -288 262 698 ;
-C 215 ; WX 469 ; N multiply ; B 44 6 428 397 ;
-C 216 ; WX 469 ; N Oslash ; B 44 6 428 397 ;
-C 217 ; WX 338 ; N Ugrave ; B 117 439 257 686 ;
-C 218 ; WX 338 ; N Uacute ; B 80 439 221 686 ;
-C 219 ; WX 180 ; N Ucircumflex ; B 40 392 138 678 ;
-C 220 ; WX 0 ; N Udieresis ; B 70 812 238 913 ;
-C 221 ; WX 0 ; N Yacute ; B 49 826 223 1038 ;
-C 222 ; WX 0 ; N Thorn ; B 70 814 201 966 ;
-C 223 ; WX 0 ; N germandbls ; B 64 826 232 1000 ;
-C 224 ; WX 0 ; N agrave ; B 44 826 247 1014 ;
-C 225 ; WX 0 ; N aacute ; B 56 811 233 969 ;
-C 226 ; WX 0 ; N acircumflex ; B 26 -379 192 -278 ;
-C 227 ; WX 0 ; N atilde ; B 26 -452 192 -278 ;
-C 228 ; WX 0 ; N adieresis ; B 67 809 244 1044 ;
-C 229 ; WX 0 ; N aring ; B 59 809 240 1101 ;
-C 230 ; WX 0 ; N ae ; B 62 809 240 1121 ;
-C 231 ; WX 0 ; N ccedilla ; B 47 809 248 1131 ;
-C 232 ; WX 0 ; N egrave ; B 58 809 234 1057 ;
-C 233 ; WX 0 ; N eacute ; B 58 809 234 1108 ;
-C 234 ; WX 0 ; N ecircumflex ; B 56 814 254 869 ;
-C 235 ; WX 0 ; N edieresis ; B 367 812 533 913 ;
-C 236 ; WX 0 ; N igrave ; B 376 814 543 989 ;
-C 237 ; WX 0 ; N iacute ; B 371 819 501 971 ;
-C 238 ; WX 0 ; N icircumflex ; B 361 812 539 1047 ;
-C 239 ; WX 0 ; N idieresis ; B 367 810 543 1122 ;
-C 240 ; WX 0 ; N eth ; B 503 -246 670 -144 ;
-C 241 ; WX 0 ; N ntilde ; B 500 814 699 869 ;
-C 242 ; WX 0 ; N ograve ; B 40 327 109 604 ;
-C 243 ; WX 0 ; N oacute ; B 71 613 231 899 ;
-C 244 ; WX 1120 ; N ocircumflex ; B 0 -400 1120 856 ;
-C 245 ; WX 971 ; N otilde ; B 4 -400 967 866 ;
-C 246 ; WX 513 ; N odieresis ; B 0 453 513 782 ;
-C 247 ; WX 363 ; N divide ; B 0 472 361 791 ;
-C 248 ; WX 341 ; N oslash ; B 0 459 344 779 ;
-C 249 ; WX 417 ; N ugrave ; B 0 504 417 781 ;
-C 250 ; WX 227 ; N uacute ; B 0 477 230 790 ;
-C 251 ; WX 234 ; N ucircumflex ; B 3 554 239 781 ;
-C 252 ; WX 1027 ; N udieresis ; B 24 -512 1009 849 ;
-C 253 ; WX 617 ; N yacute ; B 10 63 603 686 ;
-C 254 ; WX 617 ; N thorn ; B 10 63 603 686 ;
-C 255 ; WX 617 ; N ydieresis ; B 10 63 603 686 ;
-C -1 ; WX 500 ; N CR ; B 0 0 0 0 ;
-C -1 ; WX 0 ; N NULL ; B 0 0 0 0 ;
-C -1 ; WX 638 ; N c158 ; B 0 0 0 0 ;
-EndCharMetrics
-EndFontMetrics
diff --git a/reporting/fonts/iqraa.ttf b/reporting/fonts/iqraa.ttf
deleted file mode 100644 (file)
index e15a895..0000000
Binary files a/reporting/fonts/iqraa.ttf and /dev/null differ
diff --git a/reporting/includes/barcodes.php b/reporting/includes/barcodes.php
new file mode 100644 (file)
index 0000000..fdc78eb
--- /dev/null
@@ -0,0 +1,808 @@
+<?php
+//============================================================+
+// File name   : barcodes.php
+// Begin       : 2008-06-09
+// Last Update : 2008-07-16
+// Version     : 1.0.002
+// License     : GNU LGPL (http://www.gnu.org/copyleft/lesser.html)
+//     ----------------------------------------------------------------------------
+//  Copyright (C) 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 <http://www.gnu.org/licenses/>.
+//     
+//     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).<br>
+       * @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
+        */
+       var $barcode_array;
+               
+       /**
+        * This is the class constructor. 
+        * Return an array representations for common 1D barcodes:<ul>
+        * <li>$arrcode["code"] code to be printed on text label</li>
+        * <li>$arrcode["maxh"] max bar height</li>
+        * <li>$arrcode["maxw"] max bar width</li>
+        * <li>$arrcode["bcode"][$k] single bar or space in $k position</li>
+        * <li>$arrcode["bcode"][$k]["t"] bar type: true = bar, false = space.</li>
+        * <li>$arrcode["bcode"][$k]["w"] bar width in units.</li>
+        * <li>$arrcode["bcode"][$k]["h"] bar height in units.</li>
+        * <li>$arrcode["bcode"][$k]["p"] bar top position (0 = top, 1 = middle)</li></ul>
+        * @param string $code code to print
+        * @param string $type type of barcode: <ul><li>C39 : CODE 39</li><li>C39+ : CODE 39 with checksum</li><li>C39E : CODE 39 EXTENDED</li><li>C39E+ : CODE 39 EXTENDED with checksum</li><li>I25 : Interleaved 2 of 5</li><li>C128A : CODE 128 A</li><li>C128B : CODE 128 B</li><li>C128C : CODE 128 C</li><li>EAN13 : EAN 13</li><li>UPCA : UPC-A</li><li>POSTNET : POSTNET</li><li>CODABAR : CODABAR</li></ul>
+        */
+       function TCPDFBarcode($code, $type) {
+               $this->setBarcode($code, $type);
+       }
+       
+       /** 
+        * Return an array representations of barcode.
+        * @return array
+        */
+       function getBarcodeArray() {
+               return $this->barcode_array;
+       }
+       
+       /** 
+        * Set the barcode.
+        * @param string $code code to print
+        * @param string $type type of barcode: <ul><li>C39 : CODE 39</li><li>C39+ : CODE 39 with checksum</li><li>C39E : CODE 39 EXTENDED</li><li>C39E+ : CODE 39 EXTENDED with checksum</li><li>I25 : Interleaved 2 of 5</li><li>C128A : CODE 128 A</li><li>C128B : CODE 128 B</li><li>C128C : CODE 128 C</li><li>EAN13 : EAN 13</li><li>UPCA : UPC-A</li><li>POSTNET : POSTNET</li><li>CODABAR : CODABAR</li></ul>
+        * @return array
+        */
+       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
+        */
+       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
+        */
+       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
+        */
+       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
+        */
+       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
+        */
+       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
+        */
+       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
+        */
+       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
+        */
+       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                                                 
+//============================================================+
+?>
index a20148b0a6fbc8fd5b9a6c4ad5fa88c785aaa264..726919f896de3142baa16634e6e14e0f95b51d43 100644 (file)
 <?php
-/* $Revision$ */
-/**
-* Cpdf
-*
-* http://www.ros.co.nz/pdf
-*
-* A PHP class to provide the basic functionality to create a pdf document without
-* any requirement for additional modules.
-*
-* Note that they companion class CezPdf can be used to extend this class and dramatically
-* simplify the creation of documents.
-*
-* IMPORTANT NOTE
-* there is no warranty, implied or otherwise with this software.
-* 
-* LICENCE
-* This code has been placed in the Public Domain for all to enjoy.
-*
-* @author              Wayne Munro <pdf@ros.co.nz>
-* @version     009
-* @package     Cpdf
-*/
-class Cpdf {
-
-/**
-* the current number of pdf objects in the document
-*/
-var $numObj=0;
-/**
-* this array contains all of the pdf objects, ready for final assembly
-*/
-var $objects = array();
-/**
-* the objectId (number within the objects array) of the document catalog
-*/
-var $catalogId;
-/**
-* array carrying information about the fonts that the system currently knows about
-* used to ensure that a font is not loaded twice, among other things
-*/
-var $fonts=array(); 
-/**
-* a record of the current font
-*/
-var $currentFont='';
-/**
-* the current base font
-*/
-var $currentBaseFont='';
-/**
-* the number of the current font within the font array
-*/
-var $currentFontNum=0;
-/**
-* 
-*/
-var $currentNode;
-/**
-* object number of the current page
-*/
-var $currentPage;
-/**
-* object number of the currently active contents block
-*/
-var $currentContents;
-/**
-* number of fonts within the system
-*/
-var $numFonts=0;
-/**
-* current colour for fill operations, defaults to inactive value, all three components should be between 0 and 1 inclusive when active
-*/
-var $currentColour=array('r'=>-1,'g'=>-1,'b'=>-1);
-/**
-* current colour for stroke operations (lines etc.)
-*/
-var $currentStrokeColour=array('r'=>-1,'g'=>-1,'b'=>-1);
-/**
-* current style that lines are drawn in
-*/
-var $currentLineStyle='';
-/**
-* an array which is used to save the state of the document, mainly the colours and styles
-* it is used to temporarily change to another state, the change back to what it was before
-*/
-var $stateStack = array();
-/**
-* number of elements within the state stack
-*/
-var $nStateStack = 0;
-/**
-* number of page objects within the document
-*/
-var $numPages=0;
-/**
-* object Id storage stack
-*/
-var $stack=array();
-/**
-* number of elements within the object Id storage stack
-*/
-var $nStack=0;
-/**
-* an array which contains information about the objects which are not firmly attached to pages
-* these have been added with the addObject function
-*/
-var $looseObjects=array();
-/**
-* array contains infomation about how the loose objects are to be added to the document
-*/
-var $addLooseObjects=array();
-/**
-* the objectId of the information object for the document
-* this contains authorship, title etc.
-*/
-var $infoObject=0;
-/**
-* number of images being tracked within the document
-*/
-var $numImages=0;
-/**
-* an array containing options about the document
-* it defaults to turning on the compression of the objects
-*/
-var $options=array('compression'=>1);
-/**
-* the objectId of the first page of the document
-*/
-var $firstPageId;
-/**
-* used to track the last used value of the inter-word spacing, this is so that it is known
-* when the spacing is changed.
-*/
-var $wordSpaceAdjust=0;
-/**
-* the object Id of the procset object
-*/
-var $procsetObjectId;
-/**
-* store the information about the relationship between font families
-* this used so that the code knows which font is the bold version of another font, etc.
-* the value of this array is initialised in the constuctor function.
-*/
-var $fontFamilies = array();
-/**
-* track if the current font is bolded or italicised
-*/
-var $currentTextState = ''; 
-/**
-* messages are stored here during processing, these can be selected afterwards to give some useful debug information
-*/
-var $messages='';
-/**
-* the ancryption array for the document encryption is stored here
-*/
-var $arc4='';
-/**
-* the object Id of the encryption information
-*/
-var $arc4_objnum=0;
-/**
-* the file identifier, used to uniquely identify a pdf document
-*/
-var $fileIdentifier='';
-/**
-* a flag to say if a document is to be encrypted or not
-*/
-var $encrypted=0;
-/**
-* the ancryption key for the encryption of all the document content (structure is not encrypted)
-*/
-var $encryptionKey='';
-/**
-* array which forms a stack to keep track of nested callback functions
-*/
-var $callback = array();
-/**
-* the number of callback functions in the callback array
-*/
-var $nCallback = 0;
-/**
-* store label->id pairs for named destinations, these will be used to replace internal links
-* done this way so that destinations can be defined after the location that links to them
-*/
-var $destinations = array();
-/**
-* store the stack for the transaction commands, each item in here is a record of the values of all the 
-* variables within the class, so that the user can rollback at will (from each 'start' command)
-* note that this includes the objects array, so these can be large.
-*/
-var $checkpoint = '';
-/**
-* class constructor
-* this will start a new document
-* @var array array of 4 numbers, defining the bottom left and upper right corner of the page. first two are normally zero.
-*/
-function Cpdf ($pageSize=array(0,0,612,792)){
-  $this->newDocument($pageSize);
-  
-  // also initialize the font families that are known about already
-  $this->setFontFamily('init');
-//  $this->fileIdentifier = md5('xxxxxxxx'.time());
-
-}
-
-/**
-* Document object methods (internal use only)
-*
-* There is about one object method for each type of object in the pdf document
-* Each function has the same call list ($id,$action,$options).
-* $id = the object id of the object, or what it is to be if it is being created
-* $action = a string specifying the action to be performed, though ALL must support:
-*           'new' - create the object with the id $id
-*           'out' - produce the output for the pdf object
-* $options = optional, a string or array containing the various parameters for the object
-*
-* These, in conjunction with the output function are the ONLY way for output to be produced 
-* within the pdf 'file'.
-*/
-
-/**
-*destination object, used to specify the location for the user to jump to, presently on opening
-*/
-function o_destination($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'destination','info'=>array());
-      $tmp = '';
-      switch ($options['type']){
-        case 'XYZ':
-        case 'FitR':
-          $tmp =  ' '.$options['p3'].$tmp;
-        case 'FitH':
-        case 'FitV':
-        case 'FitBH':
-        case 'FitBV':
-          $tmp =  ' '.$options['p1'].' '.$options['p2'].$tmp;
-        case 'Fit':
-        case 'FitB':
-          $tmp =  $options['type'].$tmp;
-          $this->objects[$id]['info']['string']=$tmp;
-          $this->objects[$id]['info']['page']=$options['page'];
-      }
-      break;
-    case 'out':
-      $tmp = $o['info'];
-      $res="\n".$id." 0 obj\n".'['.$tmp['page'].' 0 R /'.$tmp['string']."]\nendobj\n";
-      return $res;
-      break;
-  }
-}
-
-/**
-* set the viewer preferences
-*/
-function o_viewerPreferences($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'viewerPreferences','info'=>array());
-      break;
-    case 'add':
-      foreach($options as $k=>$v){
-        switch ($k){
-          case 'HideToolbar':
-          case 'HideMenubar':
-          case 'HideWindowUI':
-          case 'FitWindow':
-          case 'CenterWindow':
-          case 'NonFullScreenPageMode':
-          case 'Direction':
-            $o['info'][$k]=$v;
-          break;
-        }
-      }
-      break;
-    case 'out':
-
-      $res="\n".$id." 0 obj\n".'<< ';
-      foreach($o['info'] as $k=>$v){
-        $res.="\n/".$k.' '.$v;
-      }
-      $res.="\n>>\n";
-      return $res;
-      break;
-  }
-}
-
-/**
-* define the document catalog, the overall controller for the document
-*/
-function o_catalog($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'catalog','info'=>array());
-      $this->catalogId=$id;
-      break;
-    case 'outlines':
-    case 'pages':
-    case 'openHere':
-      $o['info'][$action]=$options;
-      break;
-    case 'viewerPreferences':
-      if (!isset($o['info']['viewerPreferences'])){
-        $this->numObj++;
-        $this->o_viewerPreferences($this->numObj,'new');
-        $o['info']['viewerPreferences']=$this->numObj;
-      }
-      $vp = $o['info']['viewerPreferences'];
-      $this->o_viewerPreferences($vp,'add',$options);
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n".'<< /Type /Catalog';
-      foreach($o['info'] as $k=>$v){
-        switch($k){
-          case 'outlines':
-            $res.="\n".'/Outlines '.$v.' 0 R';
-            break;
-          case 'pages':
-            $res.="\n".'/Pages '.$v.' 0 R';
-            break;
-          case 'viewerPreferences':
-            $res.="\n".'/ViewerPreferences '.$o['info']['viewerPreferences'].' 0 R';
-            break;
-          case 'openHere':
-            $res.="\n".'/OpenAction '.$o['info']['openHere'].' 0 R';
-            break;
-        }
-      }
-      $res.=" >>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* object which is a parent to the pages in the document
-*/
-function o_pages($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'pages','info'=>array());
-      $this->o_catalog($this->catalogId,'pages',$id);
-      break;
-    case 'page':
-      if (!is_array($options)){
-        // then it will just be the id of the new page
-        $o['info']['pages'][]=$options;
-      } else {
-        // then it should be an array having 'id','rid','pos', where rid=the page to which this one will be placed relative
-        // and pos is either 'before' or 'after', saying where this page will fit.
-        if (isset($options['id']) && isset($options['rid']) && isset($options['pos'])){
-          $i = array_search($options['rid'],$o['info']['pages']);
-          if (isset($o['info']['pages'][$i]) && $o['info']['pages'][$i]==$options['rid']){
-            // then there is a match
-            // make a space
-            switch ($options['pos']){
-              case 'before':
-                $k = $i;
-                break;
-              case 'after':
-                $k=$i+1;
-                break;
-              default:
-                $k=-1;
-                break;
-            }
-            if ($k>=0){
-              for ($j=count($o['info']['pages'])-1;$j>=$k;$j--){
-                $o['info']['pages'][$j+1]=$o['info']['pages'][$j];
-              }
-              $o['info']['pages'][$k]=$options['id'];
-            }
-          }
-        } 
-      }
-      break;
-    case 'procset':
-      $o['info']['procset']=$options;
-      break;
-    case 'mediaBox':
-      $o['info']['mediaBox']=$options; // which should be an array of 4 numbers
-      break;
-    case 'font':
-      $o['info']['fonts'][]=array('objNum'=>$options['objNum'],'fontNum'=>$options['fontNum']);
-      break;
-    case 'xObject':
-      $o['info']['xObjects'][]=array('objNum'=>$options['objNum'],'label'=>$options['label']);
-      break;
-    case 'out':
-      if (count($o['info']['pages'])){
-        $res="\n".$id." 0 obj\n<< /Type /Pages\n/Kids [";
-        foreach($o['info']['pages'] as $k=>$v){
-          $res.=$v." 0 R\n";
-        }
-        $res.="]\n/Count ".count($this->objects[$id]['info']['pages']);
-        if ((isset($o['info']['fonts']) && count($o['info']['fonts'])) || isset($o['info']['procset'])){
-          $res.="\n/Resources <<";
-          if (isset($o['info']['procset'])){
-            $res.="\n/ProcSet ".$o['info']['procset']." 0 R";
-          }
-          if (isset($o['info']['fonts']) && count($o['info']['fonts'])){
-            $res.="\n/Font << ";
-            foreach($o['info']['fonts'] as $finfo){
-              $res.="\n/F".$finfo['fontNum']." ".$finfo['objNum']." 0 R";
-            }
-            $res.=" >>";
-          }
-          if (isset($o['info']['xObjects']) && count($o['info']['xObjects'])){
-            $res.="\n/XObject << ";
-            foreach($o['info']['xObjects'] as $finfo){
-              $res.="\n/".$finfo['label']." ".$finfo['objNum']." 0 R";
-            }
-            $res.=" >>";
-          }
-          $res.="\n>>";
-          if (isset($o['info']['mediaBox'])){
-            $tmp=$o['info']['mediaBox'];
-            $res.="\n/MediaBox [".sprintf('%.3f',$tmp[0]).' '.sprintf('%.3f',$tmp[1]).' '.sprintf('%.3f',$tmp[2]).' '.sprintf('%.3f',$tmp[3]).']';
-          }
-        }
-        $res.="\n >>\nendobj";
-      } else {
-        $res="\n".$id." 0 obj\n<< /Type /Pages\n/Count 0\n>>\nendobj";
-      }
-      return $res;
-    break;
-  }
-}
-
-/**
-* define the outlines in the doc, empty for now
-*/
-function o_outlines($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'outlines','info'=>array('outlines'=>array()));
-      $this->o_catalog($this->catalogId,'outlines',$id);
-      break;
-    case 'outline':
-      $o['info']['outlines'][]=$options;
-      break;
-    case 'out':
-      if (count($o['info']['outlines'])){
-        $res="\n".$id." 0 obj\n<< /Type /Outlines /Kids [";
-        foreach($o['info']['outlines'] as $k=>$v){
-          $res.=$v." 0 R ";
-        }
-        $res.="] /Count ".count($o['info']['outlines'])." >>\nendobj";
-      } else {
-        $res="\n".$id." 0 obj\n<< /Type /Outlines /Count 0 >>\nendobj";
-      }
-      return $res;
-      break;
-  }
-}
-
-/**
-* an object to hold the font description
-*/
-function o_font($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'font','info'=>array('name'=>$options['name'],'SubType'=>'Type1'));
-      $fontNum=$this->numFonts;
-      $this->objects[$id]['info']['fontNum']=$fontNum;
-      // deal with the encoding and the differences
-      if (isset($options['differences'])){
-        // then we'll need an encoding dictionary
-        $this->numObj++;
-        $this->o_fontEncoding($this->numObj,'new',$options);
-        $this->objects[$id]['info']['encodingDictionary']=$this->numObj;
-      } else if (isset($options['encoding'])){
-        // we can specify encoding here
-        switch($options['encoding']){
-          case 'WinAnsiEncoding':
-          case 'MacRomanEncoding':
-          case 'MacExpertEncoding':
-            $this->objects[$id]['info']['encoding']=$options['encoding'];
-            break;
-          case 'none':
-            break;
-          default:
-            $this->objects[$id]['info']['encoding']='WinAnsiEncoding';
-            break;
-        }
-      } else {
-        $this->objects[$id]['info']['encoding']='WinAnsiEncoding';
-      }
-      // also tell the pages node about the new font
-      $this->o_pages($this->currentNode,'font',array('fontNum'=>$fontNum,'objNum'=>$id));
-      break;
-    case 'add':
-      foreach ($options as $k=>$v){
-        switch ($k){
-          case 'BaseFont':
-            $o['info']['name'] = $v;
-            break;
-          case 'FirstChar':
-          case 'LastChar':
-          case 'Widths':
-          case 'FontDescriptor':
-          case 'SubType':
-          $this->addMessage('o_font '.$k." : ".$v);
-            $o['info'][$k] = $v;
-            break;
-        }
-     }
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n<< /Type /Font\n/Subtype /".$o['info']['SubType']."\n";
-      $res.="/Name /F".$o['info']['fontNum']."\n";
-      $res.="/BaseFont /".$o['info']['name']."\n";
-      if (isset($o['info']['encodingDictionary'])){
-        // then place a reference to the dictionary
-        $res.="/Encoding ".$o['info']['encodingDictionary']." 0 R\n";
-      } else if (isset($o['info']['encoding'])){
-        // use the specified encoding
-        $res.="/Encoding /".$o['info']['encoding']."\n";
-      }
-      if (isset($o['info']['FirstChar'])){
-        $res.="/FirstChar ".$o['info']['FirstChar']."\n";
-      }
-      if (isset($o['info']['LastChar'])){
-        $res.="/LastChar ".$o['info']['LastChar']."\n";
-      }
-      if (isset($o['info']['Widths'])){
-        $res.="/Widths ".$o['info']['Widths']." 0 R\n";
-      }
-      if (isset($o['info']['FontDescriptor'])){
-        $res.="/FontDescriptor ".$o['info']['FontDescriptor']." 0 R\n";
-      }
-      $res.=">>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* a font descriptor, needed for including additional fonts
-*/
-function o_fontDescriptor($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'fontDescriptor','info'=>$options);
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n<< /Type /FontDescriptor\n";
-      foreach ($o['info'] as $label => $value){
-        switch ($label){
-          case 'Ascent':
-          case 'CapHeight':
-          case 'Descent':
-          case 'Flags':
-          case 'ItalicAngle':
-          case 'StemV':
-          case 'AvgWidth':
-          case 'Leading':
-          case 'MaxWidth':
-          case 'MissingWidth':
-          case 'StemH':
-          case 'XHeight':
-          case 'CharSet':
-            if (strlen($value)){
-              $res.='/'.$label.' '.$value."\n";
-            }
-            break;
-          case 'FontFile':
-          case 'FontFile2':
-          case 'FontFile3':
-            $res.='/'.$label.' '.$value." 0 R\n";
-            break;
-          case 'FontBBox':
-            $res.='/'.$label.' ['.$value[0].' '.$value[1].' '.$value[2].' '.$value[3]."]\n";
-            break;
-          case 'FontName':
-            $res.='/'.$label.' /'.$value."\n";
-            break;
-        }
-      }
-      $res.=">>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* the font encoding
-*/
-function o_fontEncoding($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      // the options array should contain 'differences' and maybe 'encoding'
-      $this->objects[$id]=array('t'=>'fontEncoding','info'=>$options);
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n<< /Type /Encoding\n";
-      if (!isset($o['info']['encoding'])){
-        $o['info']['encoding']='WinAnsiEncoding';
-      }
-      if ($o['info']['encoding']!='none'){
-        $res.="/BaseEncoding /".$o['info']['encoding']."\n";
-      }
-      $res.="/Differences \n[";
-      $onum=-100;
-      foreach($o['info']['differences'] as $num=>$label){
-        if ($num!=$onum+1){
-          // we cannot make use of consecutive numbering
-          $res.= "\n".$num." /".$label;
-        } else {
-          $res.= " /".$label;
-        }
-        $onum=$num;
-      }
-      $res.="\n]\n>>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* the document procset, solves some problems with printing to old PS printers
-*/
-function o_procset($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'procset','info'=>array('PDF'=>1,'Text'=>1));
-      $this->o_pages($this->currentNode,'procset',$id);
-      $this->procsetObjectId=$id;
-      break;
-    case 'add':
-      // this is to add new items to the procset list, despite the fact that this is considered
-      // obselete, the items are required for printing to some postscript printers
-      switch ($options) {
-        case 'ImageB':
-        case 'ImageC':
-        case 'ImageI':
-          $o['info'][$options]=1;
-          break;
-      }
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n[";
-      foreach ($o['info'] as $label=>$val){
-        $res.='/'.$label.' ';
-      }
-      $res.="]\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* define the document information
-*/
-function o_info($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->infoObject=$id;
-      $date='D:'.date('Ymd');
-      $this->objects[$id]=array('t'=>'info','info'=>array('Creator'=>'R and OS php pdf writer, http://www.ros.co.nz','CreationDate'=>$date));
-      break;
-    case 'Title':
-    case 'Author':
-    case 'Subject':
-    case 'Keywords':
-    case 'Creator':
-    case 'Producer':
-    case 'CreationDate':
-    case 'ModDate':
-    case 'Trapped':
-      $o['info'][$action]=$options;
-      break;
-    case 'out':
-      if ($this->encrypted){
-        $this->encryptInit($id);
-      }
-      $res="\n".$id." 0 obj\n<<\n";
-      foreach ($o['info']  as $k=>$v){
-        $res.='/'.$k.' (';
-        if ($this->encrypted){
-          $res.=$this->filterText($this->ARC4($v));
-        } else {
-          $res.=$this->filterText($v);
-        }
-        $res.=")\n";
-      }
-      $res.=">>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* an action object, used to link to URLS initially
-*/
-function o_action($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      if (is_array($options)){
-        $this->objects[$id]=array('t'=>'action','info'=>$options,'type'=>$options['type']);
-      } else {
-        // then assume a URI action
-        $this->objects[$id]=array('t'=>'action','info'=>$options,'type'=>'URI');
-      }
-      break;
-    case 'out':
-      if ($this->encrypted){
-        $this->encryptInit($id);
-      }
-      $res="\n".$id." 0 obj\n<< /Type /Action";
-      switch($o['type']){
-        case 'ilink':
-          // there will be an 'label' setting, this is the name of the destination
-          $res.="\n/S /GoTo\n/D ".$this->destinations[(string)$o['info']['label']]." 0 R";
-          break;
-        case 'URI':
-          $res.="\n/S /URI\n/URI (";
-          if ($this->encrypted){
-            $res.=$this->filterText($this->ARC4($o['info']));
-          } else {
-            $res.=$this->filterText($o['info']);
-          }
-          $res.=")";
-          break;
-      }
-      $res.="\n>>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* an annotation object, this will add an annotation to the current page.
-* initially will support just link annotations 
-*/
-function o_annotation($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      // add the annotation to the current page
-      $pageId = $this->currentPage;
-      $this->o_page($pageId,'annot',$id);
-      // and add the action object which is going to be required
-      switch($options['type']){
-        case 'link':
-          $this->objects[$id]=array('t'=>'annotation','info'=>$options);
-          $this->numObj++;
-          $this->o_action($this->numObj,'new',$options['url']);
-          $this->objects[$id]['info']['actionId']=$this->numObj;
-          break;
-        case 'ilink':
-          // this is to a named internal link
-          $label = $options['label'];
-          $this->objects[$id]=array('t'=>'annotation','info'=>$options);
-          $this->numObj++;
-          $this->o_action($this->numObj,'new',array('type'=>'ilink','label'=>$label));
-          $this->objects[$id]['info']['actionId']=$this->numObj;
-          break;
-      }
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n<< /Type /Annot";
-      switch($o['info']['type']){
-        case 'link':
-        case 'ilink':
-          $res.= "\n/Subtype /Link";
-          break;
-      }
-      $res.="\n/A ".$o['info']['actionId']." 0 R";
-      $res.="\n/Border [0 0 0]";
-      $res.="\n/H /I";
-      $res.="\n/Rect [ ";
-      foreach($o['info']['rect'] as $v){
-        $res.= sprintf("%.4f ",$v);
-      }
-      $res.="]";
-      $res.="\n>>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* a page object, it also creates a contents object to hold its contents
-*/
-function o_page($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->numPages++;
-      $this->objects[$id]=array('t'=>'page','info'=>array('parent'=>$this->currentNode,'pageNum'=>$this->numPages));
-      if (is_array($options)){
-        // then this must be a page insertion, array shoudl contain 'rid','pos'=[before|after]
-        $options['id']=$id;
-        $this->o_pages($this->currentNode,'page',$options);
-      } else {
-        $this->o_pages($this->currentNode,'page',$id);
-      }
-      $this->currentPage=$id;
-      //make a contents object to go with this page
-      $this->numObj++;
-      $this->o_contents($this->numObj,'new',$id);
-      $this->currentContents=$this->numObj;
-      $this->objects[$id]['info']['contents']=array();
-      $this->objects[$id]['info']['contents'][]=$this->numObj;
-      $match = ($this->numPages%2 ? 'odd' : 'even');
-      foreach($this->addLooseObjects as $oId=>$target){
-        if ($target=='all' || $match==$target){
-          $this->objects[$id]['info']['contents'][]=$oId;
-        }
-      }
-      break;
-    case 'content':
-      $o['info']['contents'][]=$options;
-      break;
-    case 'annot':
-      // add an annotation to this page
-      if (!isset($o['info']['annot'])){
-        $o['info']['annot']=array();
-      }
-      // $options should contain the id of the annotation dictionary
-      $o['info']['annot'][]=$options;
-      break;
-    case 'out':
-      $res="\n".$id." 0 obj\n<< /Type /Page";
-      $res.="\n/Parent ".$o['info']['parent']." 0 R";
-      if (isset($o['info']['annot'])){
-        $res.="\n/Annots [";
-        foreach($o['info']['annot'] as $aId){
-          $res.=" ".$aId." 0 R";
-        }
-        $res.=" ]";
-      }
-      $count = count($o['info']['contents']);
-      if ($count==1){
-        $res.="\n/Contents ".$o['info']['contents'][0]." 0 R";
-      } else if ($count>1){
-        $res.="\n/Contents [\n";
-        foreach ($o['info']['contents'] as $cId){
-          $res.=$cId." 0 R\n";
-        }
-        $res.="]";
-      }
-      $res.="\n>>\nendobj";
-      return $res;
-      break;
-  }
-}
-
-/**
-* the contents objects hold all of the content which appears on pages
-*/
-function o_contents($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch ($action){
-    case 'new':
-      $this->objects[$id]=array('t'=>'contents','c'=>'','info'=>array());
-      if (strlen($options) && intval($options)){
-        // then this contents is the primary for a page
-        $this->objects[$id]['onPage']=$options;
-      } else if ($options=='raw'){
-        // then this page contains some other type of system object
-        $this->objects[$id]['raw']=1;
-      }
-      break;
-    case 'add':
-      // add more options to the decleration
-      foreach ($options as $k=>$v){
-        $o['info'][$k]=$v;
-      }
-    case 'out':
-      $tmp=$o['c'];
-      $res= "\n".$id." 0 obj\n";
-      if (isset($this->objects[$id]['raw'])){
-        $res.=$tmp;
-      } else {
-        $res.= "<<";
-        if (function_exists('gzcompress') && $this->options['compression']){
-          // then implement ZLIB based compression on this content stream
-          $res.=" /Filter /FlateDecode";
-          $tmp = gzcompress($tmp);
-        }
-        if ($this->encrypted){
-          $this->encryptInit($id);
-          $tmp = $this->ARC4($tmp);
-        }
-        foreach($o['info'] as $k=>$v){
-          $res .= "\n/".$k.' '.$v;
-        }
-        $res.="\n/Length ".strlen($tmp)." >>\nstream\n".$tmp."\nendstream";
-      }
-      $res.="\nendobj\n";
-      return $res;
-      break;
-  }
-}
-
-/**
-* an image object, will be an XObject in the document, includes description and data
-*/
-function o_image($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch($action){
-    case 'new':
-      // make the new object
-      $this->objects[$id]=array('t'=>'image','data'=>$options['data'],'info'=>array());
-      $this->objects[$id]['info']['Type']='/XObject';
-      $this->objects[$id]['info']['Subtype']='/Image';
-      $this->objects[$id]['info']['Width']=$options['iw'];
-      $this->objects[$id]['info']['Height']=$options['ih'];
-      if (!isset($options['type']) || $options['type']=='jpg'){
-        if (!isset($options['channels'])){
-          $options['channels']=3;
-        }
-        switch($options['channels']){
-          case 1:
-            $this->objects[$id]['info']['ColorSpace']='/DeviceGray';
-            break;
-          default:
-            $this->objects[$id]['info']['ColorSpace']='/DeviceRGB';
-            break;
-        }
-        $this->objects[$id]['info']['Filter']='/DCTDecode';
-        $this->objects[$id]['info']['BitsPerComponent']=8;
-      } else if ($options['type']=='png'){
-        $this->objects[$id]['info']['Filter']='/FlateDecode';
-        $this->objects[$id]['info']['DecodeParms']='<< /Predictor 15 /Colors '.$options['ncolor'].' /Columns '.$options['iw'].' /BitsPerComponent '.$options['bitsPerComponent'].'>>';
-        if (strlen($options['pdata'])){
-          $tmp = ' [ /Indexed /DeviceRGB '.(strlen($options['pdata'])/3-1).' ';
-          $this->numObj++;
-          $this->o_contents($this->numObj,'new');
-          $this->objects[$this->numObj]['c']=$options['pdata'];
-          $tmp.=$this->numObj.' 0 R';
-          $tmp .=' ]';
-          $this->objects[$id]['info']['ColorSpace'] = $tmp;
-          if (isset($options['transparency'])){
-            switch($options['transparency']['type']){
-              case 'indexed':
-                $tmp=' [ '.$options['transparency']['data'].' '.$options['transparency']['data'].'] ';
-                $this->objects[$id]['info']['Mask'] = $tmp;
-                break;
-            }
-          }
-        } else {
-          $this->objects[$id]['info']['ColorSpace']='/'.$options['color'];
-        }
-        $this->objects[$id]['info']['BitsPerComponent']=$options['bitsPerComponent'];
-      }
-      // assign it a place in the named resource dictionary as an external object, according to
-      // the label passed in with it.
-      $this->o_pages($this->currentNode,'xObject',array('label'=>$options['label'],'objNum'=>$id));
-      // also make sure that we have the right procset object for it.
-      $this->o_procset($this->procsetObjectId,'add','ImageC');
-      break;
-    case 'out':
-      $tmp=$o['data'];
-      $res= "\n".$id." 0 obj\n<<";
-      foreach($o['info'] as $k=>$v){
-        $res.="\n/".$k.' '.$v;
-      }
-      if ($this->encrypted){
-        $this->encryptInit($id);
-        $tmp = $this->ARC4($tmp);
-      }
-      $res.="\n/Length ".strlen($tmp)." >>\nstream\n".$tmp."\nendstream\nendobj\n";
-      return $res;
-      break;
-  }
-}
-
-/**
-* encryption object.
-*/
-function o_encryption($id,$action,$options=''){
-  if ($action!='new'){
-    $o =& $this->objects[$id];
-  }
-  switch($action){
-    case 'new':
-      // make the new object
-      $this->objects[$id]=array('t'=>'encryption','info'=>$options);
-      $this->arc4_objnum=$id;
-      // figure out the additional paramaters required
-      $pad = chr(0x28).chr(0xBF).chr(0x4E).chr(0x5E).chr(0x4E).chr(0x75).chr(0x8A).chr(0x41).chr(0x64).chr(0x00).chr(0x4E).chr(0x56).chr(0xFF).chr(0xFA).chr(0x01).chr(0x08).chr(0x2E).chr(0x2E).chr(0x00).chr(0xB6).chr(0xD0).chr(0x68).chr(0x3E).chr(0x80).chr(0x2F).chr(0x0C).chr(0xA9).chr(0xFE).chr(0x64).chr(0x53).chr(0x69).chr(0x7A);
-      $len = strlen($options['owner']);
-      if ($len>32){
-        $owner = substr($options['owner'],0,32);
-      } else if ($len<32){
-        $owner = $options['owner'].substr($pad,0,32-$len);
-      } else {
-        $owner = $options['owner'];
-      }
-      $len = strlen($options['user']);
-      if ($len>32){
-        $user = substr($options['user'],0,32);
-      } else if ($len<32){
-        $user = $options['user'].substr($pad,0,32-$len);
-      } else {
-        $user = $options['user'];
-      }
-      $tmp = $this->md5_16($owner);
-      $okey = substr($tmp,0,5);
-      $this->ARC4_init($okey);
-      $ovalue=$this->ARC4($user);
-      $this->objects[$id]['info']['O']=$ovalue;
-      // now make the u value, phew.
-      $tmp = $this->md5_16($user.$ovalue.chr($options['p']).chr(255).chr(255).chr(255).$this->fileIdentifier);
-      $ukey = substr($tmp,0,5);
-
-      $this->ARC4_init($ukey);
-      $this->encryptionKey = $ukey;
-      $this->encrypted=1;
-      $uvalue=$this->ARC4($pad);
-
-      $this->objects[$id]['info']['U']=$uvalue;
-      $this->encryptionKey=$ukey;
-     
-      // initialize the arc4 array
-      break;
-    case 'out':
-      $res= "\n".$id." 0 obj\n<<";
-      $res.="\n/Filter /Standard";
-      $res.="\n/V 1";
-      $res.="\n/R 2";
-      $res.="\n/O (".$this->filterText($o['info']['O']).')';
-      $res.="\n/U (".$this->filterText($o['info']['U']).')';
-      // and the p-value needs to be converted to account for the twos-complement approach
-      $o['info']['p'] = (($o['info']['p']^255)+1)*-1;
-      $res.="\n/P ".($o['info']['p']);
-      $res.="\n>>\nendobj\n";
-      
-      return $res;
-      break;
-  }
-}
-      
-/**
-* ARC4 functions
-* A series of function to implement ARC4 encoding in PHP
-*/
-
-/**
-* calculate the 16 byte version of the 128 bit md5 digest of the string
-*/
-function md5_16($string){
-  $tmp = md5($string);
-  $out='';
-  for ($i=0;$i<=30;$i=$i+2){
-    $out.=chr(hexdec(substr($tmp,$i,2)));
-  }
-  return $out;
-}
-
-/**
-* initialize the encryption for processing a particular object 
-*/
-function encryptInit($id){
-  $tmp = $this->encryptionKey;
-  $hex = dechex($id);
-  if (strlen($hex)<6){
-    $hex = substr('000000',0,6-strlen($hex)).$hex;
-  }
-  $tmp.= chr(hexdec(substr($hex,4,2))).chr(hexdec(substr($hex,2,2))).chr(hexdec(substr($hex,0,2))).chr(0).chr(0);
-  $key = $this->md5_16($tmp);
-  $this->ARC4_init(substr($key,0,10));
-}
-
-/**
-* initialize the ARC4 encryption
-*/
-function ARC4_init($key=''){
-  $this->arc4 = '';
-  // setup the control array
-  if (strlen($key)==0){
-    return;
-  }
-  $k = '';
-  while(strlen($k)<256){
-    $k.=$key;
-  }
-  $k=substr($k,0,256);
-  for ($i=0;$i<256;$i++){
-    $this->arc4 .= chr($i);
-  }
-  $j=0;
-  for ($i=0;$i<256;$i++){
-    $t = $this->arc4[$i];
-    $j = ($j + ord($t) + ord($k[$i]))%256;
-    $this->arc4[$i]=$this->arc4[$j];
-    $this->arc4[$j]=$t;
-  }    
-}
-
-/**
-* ARC4 encrypt a text string
-*/
-function ARC4($text){
-  $len=strlen($text);
-  $a=0;
-  $b=0;
-  $c = $this->arc4;
-  $out='';
-  for ($i=0;$i<$len;$i++){
-    $a = ($a+1)%256;
-    $t= $c[$a];
-    $b = ($b+ord($t))%256;
-    $c[$a]=$c[$b];
-    $c[$b]=$t;
-    $k = ord($c[(ord($c[$a])+ord($c[$b]))%256]);
-    $out.=chr(ord($text[$i]) ^ $k);
-  }
-  
-  return $out;
-}
-
-/**
-* functions which can be called to adjust or add to the document
-*/
-
-/**
-* add a link in the document to an external URL
-*/
-function addLink($url,$x0,$y0,$x1,$y1){
-  $this->numObj++;
-  $info = array('type'=>'link','url'=>$url,'rect'=>array($x0,$y0,$x1,$y1));
-  $this->o_annotation($this->numObj,'new',$info);
-}
-
-/**
-* add a link in the document to an internal destination (ie. within the document)
-*/
-function addInternalLink($label,$x0,$y0,$x1,$y1){
-  $this->numObj++;
-  $info = array('type'=>'ilink','label'=>$label,'rect'=>array($x0,$y0,$x1,$y1));
-  $this->o_annotation($this->numObj,'new',$info);
-}
-
-/**
-* set the encryption of the document
-* can be used to turn it on and/or set the passwords which it will have.
-* also the functions that the user will have are set here, such as print, modify, add
-*/
-function setEncryption($userPass='',$ownerPass='',$pc=array()){
-  $p=bindec(11000000);
-
-  $options = array(
-     'print'=>4
-    ,'modify'=>8
-    ,'copy'=>16
-    ,'add'=>32
-  );
-  foreach($pc as $k=>$v){
-    if ($v && isset($options[$k])){
-      $p+=$options[$k];
-    } else if (isset($options[$v])){
-      $p+=$options[$v];
-    }
-  }
-  // implement encryption on the document
-  if ($this->arc4_objnum == 0){
-    // then the block does not exist already, add it.
-    $this->numObj++;
-    if (strlen($ownerPass)==0){
-      $ownerPass=$userPass;
-    }
-    $this->o_encryption($this->numObj,'new',array('user'=>$userPass,'owner'=>$ownerPass,'p'=>$p));
-  }
-}
-
-/**
-* should be used for internal checks, not implemented as yet
-*/
-function checkAllHere(){
-}
-
-/**
-* return the pdf stream as a string returned from the function
-*/
-function output($debug=0){
-
-  if ($debug){
-    // turn compression off
-    $this->options['compression']=0;
-  }
-
-  if ($this->arc4_objnum){
-    $this->ARC4_init($this->encryptionKey);
-  }
-
-  $this->checkAllHere();
-
-  $xref=array();
-  $content="%PDF-1.3\n%âãÏÓ\n";
-//  $content="%PDF-1.3\n";
-  $pos=strlen($content);
-  foreach($this->objects as $k=>$v){
-    $tmp='o_'.$v['t'];
-    $cont=$this->$tmp($k,'out');
-    $content.=$cont;
-    $xref[]=$pos;
-    $pos+=strlen($cont);
-  }
-  $content.="\nxref\n0 ".(count($xref)+1)."\n0000000000 65535 f \n";
-  foreach($xref as $p){
-    $content.=substr('0000000000',0,10-strlen($p)).$p." 00000 n \n";
-  }
-  $content.="\ntrailer\n  << /Size ".(count($xref)+1)."\n     /Root 1 0 R\n     /Info ".$this->infoObject." 0 R\n";
-  // if encryption has been applied to this document then add the marker for this dictionary
-  if ($this->arc4_objnum > 0){
-    $content .= "/Encrypt ".$this->arc4_objnum." 0 R\n";
-  }
-  if (strlen($this->fileIdentifier)){
-    $content .= "/ID[<".$this->fileIdentifier."><".$this->fileIdentifier.">]\n";
-  }
-  $content .= "  >>\nstartxref\n".$pos."\n%%EOF\n";
-  return $content;
-}
-
-/**
-* intialize a new document
-* if this is called on an existing document results may be unpredictable, but the existing document would be lost at minimum
-* this function is called automatically by the constructor function
-*
-* @access private
-*/
-function newDocument($pageSize=array(0,0,612,792)){
-  $this->numObj=0;
-  $this->objects = array();
-
-  $this->numObj++;
-  $this->o_catalog($this->numObj,'new');
-
-  $this->numObj++;
-  $this->o_outlines($this->numObj,'new');
-
-  $this->numObj++;
-  $this->o_pages($this->numObj,'new');
-
-  $this->o_pages($this->numObj,'mediaBox',$pageSize);
-  $this->currentNode = 3;
-
-  $this->numObj++;
-  $this->o_procset($this->numObj,'new');
-
-  $this->numObj++;
-  $this->o_info($this->numObj,'new');
-
-  $this->numObj++;
-  $this->o_page($this->numObj,'new');
-
-  // need to store the first page id as there is no way to get it to the user during 
-  // startup
-  $this->firstPageId = $this->currentContents;
-}
-
-/**
-* open the font file and return a php structure containing it.
-* first check if this one has been done before and saved in a form more suited to php
-* note that if a php serialized version does not exist it will try and make one, but will
-* require write access to the directory to do it... it is MUCH faster to have these serialized
-* files.
-*
-* @access private
-*/
-function openFont($font){
-  // assume that $font contains both the path and perhaps the extension to the file, split them
-  $pos=strrpos($font,'/');
-  if ($pos===false){
-    $dir = './';
-    $name = $font;
-  } else {
-    $dir=substr($font,0,$pos+1);
-    $name=substr($font,$pos+1);
-  }
-
-  if (substr($name,-4)=='.afm'){
-    $name=substr($name,0,strlen($name)-4);
-  }
-  $this->addMessage('openFont: '.$font.' - '.$name);
-  if (file_exists($dir.'php_'.$name.'.afm')){
-    $this->addMessage('openFont: php file exists '.$dir.'php_'.$name.'.afm');
-    $tmp = file($dir.'php_'.$name.'.afm');
-    $this->fonts[$font]=unserialize($tmp[0]);
-    if (!isset($this->fonts[$font]['_version_']) || $this->fonts[$font]['_version_']<1){
-      // if the font file is old, then clear it out and prepare for re-creation
-      $this->addMessage('openFont: clear out, make way for new version.');
-      unset($this->fonts[$font]);
-    }
-  }
-  if (!isset($this->fonts[$font]) && file_exists($dir.$name.'.afm')){
-    // then rebuild the php_<font>.afm file from the <font>.afm file
-    $this->addMessage('openFont: build php file from '.$dir.$name.'.afm');
-    $data = array();
-    $file = file($dir.$name.'.afm');
-    foreach ($file as $rowA){
-      $row=trim($rowA);
-      $pos=strpos($row,' ');
-      if ($pos){
-        // then there must be some keyword
-        $key = substr($row,0,$pos);
-        switch ($key){
-          case 'FontName':
-          case 'FullName':
-          case 'FamilyName':
-          case 'Weight':
-          case 'ItalicAngle':
-          case 'IsFixedPitch':
-          case 'CharacterSet':
-          case 'UnderlinePosition':
-          case 'UnderlineThickness':
-          case 'Version':
-          case 'EncodingScheme':
-          case 'CapHeight':
-          case 'XHeight':
-          case 'Ascender':
-          case 'Descender':
-          case 'StdHW':
-          case 'StdVW':
-          case 'StartCharMetrics':
-            $data[$key]=trim(substr($row,$pos));
-            break;
-          case 'FontBBox':
-            $data[$key]=explode(' ',trim(substr($row,$pos)));
-            break;
-          case 'C':
-            //C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ;
-            $bits=explode(';',trim($row));
-            $dtmp=array();
-            foreach($bits as $bit){
-              $bits2 = explode(' ',trim($bit));
-              if (strlen($bits2[0])){
-                if (count($bits2)>2){
-                  $dtmp[$bits2[0]]=array();
-                  for ($i=1;$i<count($bits2);$i++){
-                    $dtmp[$bits2[0]][]=$bits2[$i];
-                  }
-                } else if (count($bits2)==2){
-                  $dtmp[$bits2[0]]=$bits2[1];
-                }
-              }
-            }
-            if ($dtmp['C']>=0){
-              $data['C'][$dtmp['C']]=$dtmp;
-              $data['C'][$dtmp['N']]=$dtmp;
-            } else {
-              $data['C'][$dtmp['N']]=$dtmp;
-            }
-            break;
-          case 'KPX':
-            //KPX Adieresis yacute -40
-            $bits=explode(' ',trim($row));
-            $data['KPX'][$bits[1]][$bits[2]]=$bits[3];
-            break;
-        }
-      }
-    }
-    $data['_version_']=1;
-    $this->fonts[$font]=$data;
-    $fp = fopen($dir.'php_'.$name.'.afm','w');
-    fwrite($fp,serialize($data));
-    fclose($fp);
-  } else if (!isset($this->fonts[$font])){
-    $this->addMessage('openFont: no font file found');
-//    echo 'Font not Found '.$font;
-  }
-}
-
-/**
-* if the font is not loaded then load it and make the required object
-* else just make it the current font
-* the encoding array can contain 'encoding'=> 'none','WinAnsiEncoding','MacRomanEncoding' or 'MacExpertEncoding'
-* note that encoding='none' will need to be used for symbolic fonts
-* and 'differences' => an array of mappings between numbers 0->255 and character names.
-*
-*/
-function selectFont($fontName,$encoding='',$set=1){
-  if (!isset($this->fonts[$fontName])){
-    // load the file
-    $this->openFont($fontName);
-    if (isset($this->fonts[$fontName])){
-      $this->numObj++;
-      $this->numFonts++;
-      $pos=strrpos($fontName,'/');
-//      $dir=substr($fontName,0,$pos+1);
-      $name=substr($fontName,$pos+1);
-      if (substr($name,-4)=='.afm'){
-        $name=substr($name,0,strlen($name)-4);
-      }
-      $options=array('name'=>$name);
-      if (is_array($encoding)){
-        // then encoding and differences might be set
-        if (isset($encoding['encoding'])){
-          $options['encoding']=$encoding['encoding'];
-        }
-        if (isset($encoding['differences'])){
-          $options['differences']=$encoding['differences'];
-        }
-      } else if (strlen($encoding)){
-        // then perhaps only the encoding has been set
-        $options['encoding']=$encoding;
-      }
-      $fontObj = $this->numObj;
-      $this->o_font($this->numObj,'new',$options);
-      $this->fonts[$fontName]['fontNum']=$this->numFonts;
-      // if this is a '.afm' font, and there is a '.pfa' file to go with it ( as there
-      // should be for all non-basic fonts), then load it into an object and put the
-      // references into the font object
-      $basefile = substr($fontName,0,strlen($fontName)-4);
-      if (file_exists($basefile.'.pfb')){
-        $fbtype = 'pfb';
-      } else if (file_exists($basefile.'.ttf')){
-        $fbtype = 'ttf';
-      } else {
-        $fbtype='';
-      }
-      $fbfile = $basefile.'.'.$fbtype;
-      
-//      $pfbfile = substr($fontName,0,strlen($fontName)-4).'.pfb';
-//      $ttffile = substr($fontName,0,strlen($fontName)-4).'.ttf';
-      $this->addMessage('selectFont: checking for - '.$fbfile);
-      if (substr($fontName,-4)=='.afm' && strlen($fbtype) ){
-        $adobeFontName = $this->fonts[$fontName]['FontName'];
-//        $fontObj = $this->numObj;
-        $this->addMessage('selectFont: adding font file - '.$fbfile.' - '.$adobeFontName);
-        // find the array of fond widths, and put that into an object.
-        $firstChar = -1;
-        $lastChar = 0;
-        $widths = array();
-        foreach ($this->fonts[$fontName]['C'] as $num=>$d){
-          if (intval($num)>0 || $num=='0'){
-            if ($lastChar>0 && $num>$lastChar+1){
-              for($i=$lastChar+1;$i<$num;$i++){
-                $widths[] = 0;
-              }
-            }
-            $widths[] = $d['WX'];
-            if ($firstChar==-1){
-              $firstChar = $num;
-            }
-            $lastChar = $num;
-          }
-        }
-        // also need to adjust the widths for the differences array
-        if (isset($options['differences'])){
-          foreach($options['differences'] as $charNum=>$charName){
-            if ($charNum>$lastChar){
-              for($i=$lastChar+1;$i<=$charNum;$i++){
-                $widths[]=0;
-              }
-              $lastChar=$charNum;
-            }
-            if (isset($this->fonts[$fontName]['C'][$charName])){
-              $widths[$charNum-$firstChar]=$this->fonts[$fontName]['C'][$charName]['WX'];
-            }
-          }
-        }
-        $this->addMessage('selectFont: FirstChar='.$firstChar);
-        $this->addMessage('selectFont: LastChar='.$lastChar);
-        $this->numObj++;
-        $this->o_contents($this->numObj,'new','raw');
-        $this->objects[$this->numObj]['c'].='[';
-        foreach($widths as $width){
-          $this->objects[$this->numObj]['c'].=' '.$width;
-        }
-        $this->objects[$this->numObj]['c'].=' ]';
-        $widthid = $this->numObj;
-
-        // load the pfb file, and put that into an object too.
-        // note that pdf supports only binary format type 1 font files, though there is a 
-        // simple utility to convert them from pfa to pfb.
-        $fp = fopen($fbfile,'rb');
-        $tmp = get_magic_quotes_runtime();
-        set_magic_quotes_runtime(0);
-        $data = fread($fp,filesize($fbfile));
-        set_magic_quotes_runtime($tmp);
-        fclose($fp);
-
-        // create the font descriptor
-        $this->numObj++;
-        $fontDescriptorId = $this->numObj;
-        $this->numObj++;
-        $pfbid = $this->numObj;
-        // determine flags (more than a little flakey, hopefully will not matter much)
-        $flags=0;
-        if ($this->fonts[$fontName]['ItalicAngle']!=0){ $flags+=pow(2,6); }
-        if ($this->fonts[$fontName]['IsFixedPitch']=='true'){ $flags+=1; }
-        $flags+=pow(2,5); // assume non-sybolic
-
-        $list = array('Ascent'=>'Ascender','CapHeight'=>'CapHeight','Descent'=>'Descender','FontBBox'=>'FontBBox','ItalicAngle'=>'ItalicAngle');
-        $fdopt = array(
-         'Flags'=>$flags
-         ,'FontName'=>$adobeFontName
-         ,'StemV'=>100  // don't know what the value for this should be!
-        );
-        foreach($list as $k=>$v){
-          if (isset($this->fonts[$fontName][$v])){
-            $fdopt[$k]=$this->fonts[$fontName][$v];
-          }
-        }
-
-        if ($fbtype=='pfb'){
-          $fdopt['FontFile']=$pfbid;
-        } else if ($fbtype=='ttf'){
-          $fdopt['FontFile2']=$pfbid;
-        }
-        $this->o_fontDescriptor($fontDescriptorId,'new',$fdopt);        
-
-        // embed the font program
-        $this->o_contents($this->numObj,'new');
-        $this->objects[$pfbid]['c'].=$data;
-        // determine the cruicial lengths within this file
-        if ($fbtype=='pfb'){
-          $l1 = strpos($data,'eexec')+6;
-          $l2 = strpos($data,'00000000')-$l1;
-          $l3 = strlen($data)-$l2-$l1;
-          $this->o_contents($this->numObj,'add',array('Length1'=>$l1,'Length2'=>$l2,'Length3'=>$l3));
-        } else if ($fbtype=='ttf'){
-          $l1 = strlen($data);
-          $this->o_contents($this->numObj,'add',array('Length1'=>$l1));
-        }
-
-
-        // tell the font object about all this new stuff
-        $tmp = array('BaseFont'=>$adobeFontName,'Widths'=>$widthid
-                                      ,'FirstChar'=>$firstChar,'LastChar'=>$lastChar
-                                      ,'FontDescriptor'=>$fontDescriptorId);
-        if ($fbtype=='ttf'){
-          $tmp['SubType']='TrueType';
-        }
-        $this->addMessage('adding extra info to font.('.$fontObj.')');
-        foreach($tmp as $fk=>$fv){
-          $this->addMessage($fk." : ".$fv);
-        }
-        $this->o_font($fontObj,'add',$tmp);
-
-      } else {
-        $this->addMessage('selectFont: pfb or ttf file not found, ok if this is one of the 14 standard fonts');
-      }
-
-
-      // also set the differences here, note that this means that these will take effect only the 
-      //first time that a font is selected, else they are ignored
-      if (isset($options['differences'])){
-        $this->fonts[$fontName]['differences']=$options['differences'];
-      }
-    }
-  }
-  if ($set && isset($this->fonts[$fontName])){
-    // so if for some reason the font was not set in the last one then it will not be selected
-    $this->currentBaseFont=$fontName;
-    // the next line means that if a new font is selected, then the current text state will be
-    // applied to it as well.
-    $this->setCurrentFont();
-  }
-  return $this->currentFontNum;
-}
-
-/**
-* sets up the current font, based on the font families, and the current text state
-* note that this system is quite flexible, a <b><i> font can be completely different to a
-* <i><b> font, and even <b><b> will have to be defined within the family to have meaning
-* This function is to be called whenever the currentTextState is changed, it will update
-* the currentFont setting to whatever the appropriatte family one is.
-* If the user calls selectFont themselves then that will reset the currentBaseFont, and the currentFont
-* This function will change the currentFont to whatever it should be, but will not change the 
-* currentBaseFont.
-*
-* @access private
-*/
-function setCurrentFont(){
-  if (strlen($this->currentBaseFont)==0){
-    // then assume an initial font
-    $this->selectFont('./fonts/Helvetica.afm');
-  }
-  $cf = substr($this->currentBaseFont,strrpos($this->currentBaseFont,'/')+1);
-  if (strlen($this->currentTextState)
-    && isset($this->fontFamilies[$cf]) 
-      && isset($this->fontFamilies[$cf][$this->currentTextState])){
-    // then we are in some state or another
-    // and this font has a family, and the current setting exists within it
-    // select the font, then return it
-    $nf = substr($this->currentBaseFont,0,strrpos($this->currentBaseFont,'/')+1).$this->fontFamilies[$cf][$this->currentTextState];
-    $this->selectFont($nf,'',0);
-    $this->currentFont = $nf;
-    $this->currentFontNum = $this->fonts[$nf]['fontNum'];
-  } else {
-    // the this font must not have the right family member for the current state
-    // simply assume the base font
-    $this->currentFont = $this->currentBaseFont;
-    $this->currentFontNum = $this->fonts[$this->currentFont]['fontNum'];    
-  }
-}
-
-/**
-* function for the user to find out what the id is of the first page that was created during
-* startup - useful if they wish to add something to it later.
-*/
-function getFirstPageId(){
-  return $this->firstPageId;
-}
-
-/**
-* add content to the currently active object
-*
-* @access private
-*/
-function addContent($content){
-  $this->objects[$this->currentContents]['c'].=$content;
-}
-
-/**
-* sets the colour for fill operations
-*/
-function setColor($r,$g,$b,$force=0){
-  if ($r>=0 && ($force || $r!=$this->currentColour['r'] || $g!=$this->currentColour['g'] || $b!=$this->currentColour['b'])){
-    $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$r).' '.sprintf('%.3f',$g).' '.sprintf('%.3f',$b).' rg';
-    $this->currentColour=array('r'=>$r,'g'=>$g,'b'=>$b);
-  }
-}
-
+/*
+       This class is an extension to the tcpdf class using a syntax that the original reports were written in
+       (the R &OS pdf.php class) - due to easily portation this wrapper class
+       was written to allow the same code base to use the more functional tcpdf.class by Nicola Asuni
+
+*      Wrapper for use R&OSpdf API with tcpdf.org class
+*      Joe Hunt <joe.hunt.consulting@gmail.com> and Janusz Dobrowolski <janusz@iron.from.pl>
+*/
+
+define("K_RE_PATTERN_RTL", "/(
+         \xD6\xBE                                                                                                                                                                                      # R
+       | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4]                                                                  # R
+       | \xDF[\x80-\xAA\xB4\xB5\xBA]                                                                                                           # R
+       | \xE2\x80\x8F                                                                                                                                                                  # R
+       | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE]                     # R
+       | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F]                                                                           # R
+       | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF]  # R
+       | \xF0\x90\xA4[\x80-\x99]                                                                                                                               # R
+       | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3]                                 # R
+       | \xF0\x90\xA9[\x80-\x87\x90-\x98]                                                                                      # R
+       | \xE2\x80[\xAB\xAE]                                                                                                                                            # RLE & RLO
+       )/x");
+
+/*
+ * Pattern to test Arabic strings using regular expressions.
+ * source: http://www.w3.org/International/questions/qa-forms-utf-8
+ */
+define("K_RE_PATTERN_ARABIC", "/(
+                         \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA]  # AL
+                       | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF]                                                     # AL
+                       | \xDA[\x80-\xBF]                                                                                                                               # AL
+                       | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF]  # AL
+                       | \xDC[\x80-\x8D\x90\x92-\xAF]                                                                  # AL
+                       | \xDD[\x8D-\xAD]                                                                                                                               # AL
+                       | \xDE[\x80-\xA5\xB1]                                                                                                           # AL
+                       | \xEF\xAD[\x90-\xBF]                                                                                                           # AL
+                       | \xEF\xAE[\x80-\xB1]                                                                                                           # AL
+                       | \xEF\xAF[\x93-\xBF]                                                                                                           # AL
+                       | \xEF[\xB0-\xB3][\x80-\xBF]                                                                            # AL
+                       | \xEF\xB4[\x80-\xBD]                                                                                                           # AL
+                       | \xEF\xB5[\x90-\xBF]                                                                                                           # AL
+                       | \xEF\xB6[\x80-\x8F\x92-\xBF]                                                                  # AL
+                       | \xEF\xB7[\x80-\x87\xB0-\xBC]                                                                  # AL
+                       | \xEF\xB9[\xB0-\xB4\xB6-\xBF]                                                                  # AL
+                       | \xEF\xBA[\x80-\xBF]                                                                                                           # AL
+                       | \xEF\xBB[\x80-\xBC]                                                                                                           # AL
+                       | \xD9[\xA0-\xA9\xAB\xAC]                                                                                               # AN
+                       )/x");
+
+include_once (dirname(__FILE__).'/tcpdf.php');
+
+class Cpdf extends TCPDF {
+
+       function Cpdf($pageSize='A4', $l=array())
+       {
+               if (!isset($l['a_meta_charset']))
+                       $l = array('a_meta_charset' => 'ISO-8859-1', 'a_meta_dir' => 'ltr', 'a_meta_language' => 'en_GB', 'w_page' => 'page');
+               $enc = $l['a_meta_charset'];
+               $uni = ($enc == 'UTF-8' || $enc == 'GB2312' ? true : false);
+               if ($enc == "GB2312")
+                       ini_set("memory_limit", "25M");
+               $this->TCPDF('P', 'pt', $pageSize, $uni, $enc);
+               $this->setLanguageArray($l);
+               $this->setPrintHeader(false);
+               $this->setPrintFooter(false);
+               $this->setPDFVersion("1.3");
+               $this->setAutoPageBreak(0);
+               $this->AddPage();
+
+               $this->SetLineWidth(1);
+               $this->cMargin = 0;
+       }
+
+       function selectFont($fontname, $style='')
+       {
+               if ($fontname != '')
+                       $fontname = basename($fontname);
+               if ($style == 'italic')
+                       $type = 'i';
+               elseif ($style == 'bold')
+                       $type = 'b';
+               else
+                       $type = '';
+               if ($fontname == '')
+               {
+                       if ($this->isunicode)
+                       {
+                               switch ($this->l['a_meta_language'])
+                               {
+                                       case "ar_EG" :  $fontname = "ae_tholoth";       break;
+                                       case "zh_CN" :  $fontname = "gbsn00lp";         break;
+                                       default :       $fontname = "dejavu";           break;
+                               }
+                       }
+                       elseif ($this->encoding === "ISO-8859-2")
+                       {
+                               switch ($this->l['a_meta_language'])
+                               {
+                                       default :               $fontname = "freesans";         break;
+                               }
+                       }
+                       elseif ($this->encoding === "ISO-8859-5")
+                       {
+                               switch ($this->l['a_meta_language'])
+                               {
+                                       default :               $fontname = "freesans5";        break;
+                               }
+                       }
+                       // else use built-in adobe fonts helvetica.
+               }
+               $this->SetFont($fontname, $type);
+       }
+
+       function Header1()
+       {
+       }
+
+       function Footer()
+       {
+       }
+
+       function newPage()
+       {
+               TCPDF::AddPage();
+       }
+
+       function line($x1,$y1,$x2,$y2)
+       {
+               TCPDF::line($x1, $this->h-$y1, $x2, $this->h-$y2);
+       }
+
+       function rectangle($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array())
+       {
+               TCPDF::Rect($x, $this->h-$y, $w, $h, $style, $border_style, $fill_color);
+       }
+
+
+       function addText($xb,$yb,$size,$txt)//,$angle=0,$wordSpaceAdjust=0)
+       {
+               if ($this->isunicode && $this->encoding != "UTF-8")
+                       $txt = iconv($this->encoding, "UTF-8", $txt);
+               $this->SetFontSize($size);
+               $this->Text($xb, $this->h-$yb, $txt);
+       }
+
+       function addInfo($label,$value)
+       {
+               if($label=='Title')
+               {
+                       $this->SetTitle($value);
+               }
+               if ($label=='Subject')
+               {
+                       $this->SetSubject($value);
+               }
+               if($label=='Creator')
+               {
+                       // The Creator info in source is not exactly it should be ;)
+                       $value = str_replace( "ros.co.nz", "tcpdf.org", $value );
+                       $value = str_replace( "R&OS", "", $value );
+                       $this->SetCreator( $value );
+               }
+               if($label=='Author')
+               {
+                       $this->SetAuthor($value);
+               }
+       }
+
+       function addJpegFromFile($img,$x,$y,$w=0,$h=0)
+       {
+               $this->Image($img, $x, $this->h-$y-$h, $w, $h);
+       }
+
+       function addPngFromFile($img,$x,$y,$w=0,$h=0)
+       {
+               $this->Image($img, $x, $this->h-$y-$h, $w, $h);
+       }
+       /*
+       * Next Two functions are adopted from R&OS pdf class
+       */
+
+       /**
+       * draw a part of an ellipse
+       */
+       function partEllipse($x0,$y0,$astart,$afinish,$r1,$r2=0,$angle=0,$nSeg=8)
+       {
+               $this->ellipse($x0,$y0,$r1,$r2,$angle,$nSeg,$astart,$afinish,0);
+       }
+
+       /**
+       * draw an ellipse
+       * note that the part and filled ellipse are just special cases of this function
+       *
+       * draws an ellipse in the current line style
+       * centered at $x0,$y0, radii $r1,$r2
+       * if $r2 is not set, then a circle is drawn
+       * nSeg is not allowed to be less than 2, as this will simply draw a line (and will even draw a
+       * pretty crappy shape at 2, as we are approximating with bezier curves.
+       */
+       function ellipse($x0,$y0,$r1,$r2=0,$angle=0,$nSeg=8,$astart=0,$afinish=360,$close=1,$fill=0)
+       {
+               TCPDF::Ellipse($x0, $y0, $r1, $r2, $angle, $astart. $afinish, ($close?'C':''), "", "", $nSeg);
+       }
+       function Stream()
+       {
+               TCPDF::Output('', 'I');
+       }
+
+       function Output()
+       {
+               return TCPDF::Output('','S');
+       }
+
+       function calcTextWrap($txt, $width, $spacebreak=false)
+       {
+               $ret = "";
+               $txt2 = $txt;
+               $w = $this->GetStringWidth($txt);
+               if ($w > $width && $w > 0 && $width != 0)
+               {
+                       $n = strlen($txt);
+                       $k = intval($n * $width / $w);
+                       if ($k > 0 && $k < $n)
+                       {
+                               $txt2 = substr($txt, 0, $k);
+                               if ($spacebreak && (($pos = strrpos($txt2, " ")) !== false))
+                               {
+                                       $txt2 = substr($txt2, 0, $pos);
+                                       $ret = substr($txt, $pos+1);
+                               }
+                               else
+                                       $ret = substr($txt, $k);
+                       }
+               }
+               return array($txt2, $ret);
+       }
+
+       function addTextWrap($xb, $yb, $w, $h, $txt, $align='left', $border=0, $fill=0, $spacebreak=false)
+       {
+               $ret = "";
+               if (!$this->rtl)
+               {
+                       if ($align == 'right')
+                               $align = 'R';
+                       elseif ($align == 'left')
+                               $align = 'L';
+               }
+               else
+                       $align = 'R';
+               $txt = $this->calcTextWrap($txt, $w, $spacebreak);
+               $ret = $txt[1];
+               $txt = $txt[0];
+               $this->SetXY($xb, $this->h - $yb - $h);
+               $txt = TCPDF::unhtmlentities($txt);
+               if ($this->isunicode && $this->encoding != "UTF-8")
+                       $txt = iconv($this->encoding, "UTF-8", $txt);
+               $this->Cell($w, $h, $txt, $border, 0, $align, $fill);
+               return $ret;
+       }
 /**
 * sets the colour for stroke operations
 */
-function setStrokeColor($r,$g,$b,$force=0){
-  if ($r>=0 && ($force || $r!=$this->currentStrokeColour['r'] || $g!=$this->currentStrokeColour['g'] || $b!=$this->currentStrokeColour['b'])){
-    $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$r).' '.sprintf('%.3f',$g).' '.sprintf('%.3f',$b).' RG';
-    $this->currentStrokeColour=array('r'=>$r,'g'=>$g,'b'=>$b);
-  }
-}
-
-/**
-* draw a line from one set of coordinates to another
-*/
-function line($x1,$y1,$x2,$y2){
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1).' m '.sprintf('%.3f',$x2).' '.sprintf('%.3f',$y2).' l S';
-}
-
-/**
-* draw a bezier curve based on 4 control points
-*/
-function curve($x0,$y0,$x1,$y1,$x2,$y2,$x3,$y3){
-  // in the current line style, draw a bezier curve from (x0,y0) to (x3,y3) using the other two points
-  // as the control points for the curve.
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x0).' '.sprintf('%.3f',$y0).' m '.sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1);
-  $this->objects[$this->currentContents]['c'].= ' '.sprintf('%.3f',$x2).' '.sprintf('%.3f',$y2).' '.sprintf('%.3f',$x3).' '.sprintf('%.3f',$y3).' c S';
-}
-
-/**
-* draw a part of an ellipse
-*/
-function partEllipse($x0,$y0,$astart,$afinish,$r1,$r2=0,$angle=0,$nSeg=8){
-  $this->ellipse($x0,$y0,$r1,$r2,$angle,$nSeg,$astart,$afinish,0);
-}
-
-/**
-* draw a filled ellipse
-*/
-function filledEllipse($x0,$y0,$r1,$r2=0,$angle=0,$nSeg=8,$astart=0,$afinish=360){
-  return $this->ellipse($x0,$y0,$r1,$r2=0,$angle,$nSeg,$astart,$afinish,1,1);
-}
-
-/**
-* draw an ellipse
-* note that the part and filled ellipse are just special cases of this function
-*
-* draws an ellipse in the current line style
-* centered at $x0,$y0, radii $r1,$r2
-* if $r2 is not set, then a circle is drawn
-* nSeg is not allowed to be less than 2, as this will simply draw a line (and will even draw a 
-* pretty crappy shape at 2, as we are approximating with bezier curves.
-*/
-function ellipse($x0,$y0,$r1,$r2=0,$angle=0,$nSeg=8,$astart=0,$afinish=360,$close=1,$fill=0){
-  if ($r1==0){
-    return;
-  }
-  if ($r2==0){
-    $r2=$r1;
-  }
-  if ($nSeg<2){
-    $nSeg=2;
-  }
-
-  $astart = deg2rad((float)$astart);
-  $afinish = deg2rad((float)$afinish);
-  $totalAngle =$afinish-$astart;
-
-  $dt = $totalAngle/$nSeg;
-  $dtm = $dt/3;
-
-  if ($angle != 0){
-    $a = -1*deg2rad((float)$angle);
-    $tmp = "\n q ";
-    $tmp .= sprintf('%.3f',cos($a)).' '.sprintf('%.3f',(-1.0*sin($a))).' '.sprintf('%.3f',sin($a)).' '.sprintf('%.3f',cos($a)).' ';
-    $tmp .= sprintf('%.3f',$x0).' '.sprintf('%.3f',$y0).' cm';
-    $this->objects[$this->currentContents]['c'].= $tmp;
-    $x0=0;
-    $y0=0;
-  }
-
-  $t1 = $astart;
-  $a0 = $x0+$r1*cos($t1);
-  $b0 = $y0+$r2*sin($t1);
-  $c0 = -$r1*sin($t1);
-  $d0 = $r2*cos($t1);
-
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$a0).' '.sprintf('%.3f',$b0).' m ';
-  for ($i=1;$i<=$nSeg;$i++){
-    // draw this bit of the total curve
-    $t1 = $i*$dt+$astart;
-    $a1 = $x0+$r1*cos($t1);
-    $b1 = $y0+$r2*sin($t1);
-    $c1 = -$r1*sin($t1);
-    $d1 = $r2*cos($t1);
-    $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',($a0+$c0*$dtm)).' '.sprintf('%.3f',($b0+$d0*$dtm));
-    $this->objects[$this->currentContents]['c'].= ' '.sprintf('%.3f',($a1-$c1*$dtm)).' '.sprintf('%.3f',($b1-$d1*$dtm)).' '.sprintf('%.3f',$a1).' '.sprintf('%.3f',$b1).' c';
-    $a0=$a1;
-    $b0=$b1;
-    $c0=$c1;
-    $d0=$d1;    
-  }
-  if ($fill){
-    $this->objects[$this->currentContents]['c'].=' f';
-  } else {
-    if ($close){
-      $this->objects[$this->currentContents]['c'].=' s'; // small 's' signifies closing the path as well
-    } else {
-      $this->objects[$this->currentContents]['c'].=' S';
+    function setStrokeColor($r,$g,$b,$force=0)
+    {
+        TCPDF::SetDrawColor(255*$r,255*$g,255*$b);
     }
-  }
-  if ($angle !=0){
-    $this->objects[$this->currentContents]['c'].=' Q';
-  }
-}
-
 /**
 * this sets the line drawing style.
 * width, is the thickness of the line in user units
@@ -1785,1291 +276,17 @@ function ellipse($x0,$y0,$r1,$r2=0,$angle=0,$nSeg=8,$astart=0,$afinish=360,$clos
 *   on and off dashes.
 *   (2) represents 2 on, 2 off, 2 on , 2 off ...
 *   (2,1) is 2 on, 1 off, 2 on, 1 off.. etc
-* phase is a modifier on the dash pattern which is used to shift the point at which the pattern starts. 
-*/
-function setLineStyle($width=1,$cap='',$join='',$dash='',$phase=0){
-
-  // this is quite inefficient in that it sets all the parameters whenever 1 is changed, but will fix another day
-  $string = '';
-  if ($width>0){
-    $string.= $width.' w';
-  }
-  $ca = array('butt'=>0,'round'=>1,'square'=>2);
-  if (isset($ca[$cap])){
-    $string.= ' '.$ca[$cap].' J';
-  }
-  $ja = array('miter'=>0,'round'=>1,'bevel'=>2);
-  if (isset($ja[$join])){
-    $string.= ' '.$ja[$join].' j';
-  }
-  if (is_array($dash)){
-    $string.= ' [';
-    foreach ($dash as $len){
-      $string.=' '.$len;
-    }
-    $string.= ' ] '.$phase.' d';
-  }
-  $this->currentLineStyle = $string;
-  $this->objects[$this->currentContents]['c'].="\n".$string;
-}
-
-/**
-* draw a polygon, the syntax for this is similar to the GD polygon command
-*/
-function polygon($p,$np,$f=0){
-  $this->objects[$this->currentContents]['c'].="\n";
-  $this->objects[$this->currentContents]['c'].=sprintf('%.3f',$p[0]).' '.sprintf('%.3f',$p[1]).' m ';
-  for ($i=2;$i<$np*2;$i=$i+2){
-    $this->objects[$this->currentContents]['c'].= sprintf('%.3f',$p[$i]).' '.sprintf('%.3f',$p[$i+1]).' l ';
-  }
-  if ($f==1){
-    $this->objects[$this->currentContents]['c'].=' f';
-  } else {
-    $this->objects[$this->currentContents]['c'].=' S';
-  }
-}
-
-/**
-* a filled rectangle, note that it is the width and height of the rectangle which are the secondary paramaters, not
-* the coordinates of the upper-right corner
-*/
-function filledRectangle($x1,$y1,$width,$height){
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1).' '.sprintf('%.3f',$width).' '.sprintf('%.3f',$height).' re f';
-}
-
-/**
-* draw a rectangle, note that it is the width and height of the rectangle which are the secondary paramaters, not
-* the coordinates of the upper-right corner
-*/
-function rectangle($x1,$y1,$width,$height){
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$x1).' '.sprintf('%.3f',$y1).' '.sprintf('%.3f',$width).' '.sprintf('%.3f',$height).' re S';
-}
-
-/**
-* add a new page to the document
-* this also makes the new page the current active object
-*/
-function newPage($insert=0,$id=0,$pos='after'){
-
-  // if there is a state saved, then go up the stack closing them
-  // then on the new page, re-open them with the right setings
-  
-  if ($this->nStateStack){
-    for ($i=$this->nStateStack;$i>=1;$i--){
-      $this->restoreState($i);
-    }
-  }
-
-  $this->numObj++;
-  if ($insert){
-    // the id from the ezPdf class is the od of the contents of the page, not the page object itself
-    // query that object to find the parent
-    $rid = $this->objects[$id]['onPage'];
-    $opt= array('rid'=>$rid,'pos'=>$pos);
-    $this->o_page($this->numObj,'new',$opt);
-  } else {
-    $this->o_page($this->numObj,'new');
-  }
-  // if there is a stack saved, then put that onto the page
-  if ($this->nStateStack){
-    for ($i=1;$i<=$this->nStateStack;$i++){
-      $this->saveState($i);
-    }
-  }  
-  // and if there has been a stroke or fill colour set, then transfer them
-  if ($this->currentColour['r']>=0){
-    $this->setColor($this->currentColour['r'],$this->currentColour['g'],$this->currentColour['b'],1);
-  }
-  if ($this->currentStrokeColour['r']>=0){
-    $this->setStrokeColor($this->currentStrokeColour['r'],$this->currentStrokeColour['g'],$this->currentStrokeColour['b'],1);
-  }
-
-  // if there is a line style set, then put this in too
-  if (strlen($this->currentLineStyle)){
-    $this->objects[$this->currentContents]['c'].="\n".$this->currentLineStyle;
-  }
-
-  // the call to the o_page object set currentContents to the present page, so this can be returned as the page id
-  return $this->currentContents;
-}
-
-/**
-* output the pdf code, streaming it to the browser
-* the relevant headers are set so that hopefully the browser will recognise it
-*/
-function stream($options=''){
-  // setting the options allows the adjustment of the headers
-  // values at the moment are:
-  // 'Content-Disposition'=>'filename'  - sets the filename, though not too sure how well this will 
-  //        work as in my trial the browser seems to use the filename of the php file with .pdf on the end
-  // 'Accept-Ranges'=>1 or 0 - if this is not set to 1, then this header is not included, off by default
-  //    this header seems to have caused some problems despite tha fact that it is supposed to solve
-  //    them, so I am leaving it off by default.
-  // 'compress'=> 1 or 0 - apply content stream compression, this is on (1) by default
-  if (!is_array($options)){
-    $options=array();
-  }
-  if ( isset($options['compress']) && $options['compress']==0){
-    $tmp = $this->output(1);
-  } else {
-    $tmp = $this->output();
-  }
-  header("Content-type: application/pdf");
-  header("Content-Length: ".strlen(ltrim($tmp)));
-  $fileName = (isset($options['Content-Disposition'])?$options['Content-Disposition']:'file.pdf');
-  header("Content-Disposition: inline; filename=".$fileName);
-  if (isset($options['Accept-Ranges']) && $options['Accept-Ranges']==1){
-    header("Accept-Ranges: ".strlen(ltrim($tmp))); 
-  }
-  echo ltrim($tmp);
-}
-
-/**
-* return the height in units of the current font in the given size
-*/
-function getFontHeight($size){
-  if (!$this->numFonts){
-    $this->selectFont('./fonts/Helvetica');
-  }
-  // for the current font, and the given size, what is the height of the font in user units
-  $h = $this->fonts[$this->currentFont]['FontBBox'][3]-$this->fonts[$this->currentFont]['FontBBox'][1];
-  return $size*$h/1000;
-}
-
-/**
-* return the font decender, this will normally return a negative number
-* if you add this number to the baseline, you get the level of the bottom of the font
-* it is in the pdf user units
-*/
-function getFontDecender($size){
-  // note that this will most likely return a negative value
-  if (!$this->numFonts){
-    $this->selectFont('./fonts/Helvetica');
-  }
-  $h = $this->fonts[$this->currentFont]['FontBBox'][1];
-  return $size*$h/1000;
-}
-
-/**
-* filter the text, this is applied to all text just before being inserted into the pdf document
-* it escapes the various things that need to be escaped, and so on
-*
-* @access private
-*/
-function filterText($text){
-  $text = str_replace('\\','\\\\',$text);
-  $text = str_replace('(','\(',$text);
-  $text = str_replace(')','\)',$text);
-  $text = str_replace('&lt;','<',$text);
-  $text = str_replace('&gt;','>',$text);
-  $text = str_replace('&#039;','\'',$text);
-  $text = str_replace('&quot;','"',$text);
-  $text = str_replace('&amp;','&',$text);
-
-  return $text;
-}
-
-/**
-* given a start position and information about how text is to be laid out, calculate where 
-* on the page the text will end
-*
-* @access private
-*/
-function PRVTgetTextPosition($x,$y,$angle,$size,$wa,$text){
-  // given this information return an array containing x and y for the end position as elements 0 and 1
-  $w = $this->getTextWidth($size,$text);
-  // need to adjust for the number of spaces in this text
-  $words = explode(' ',$text);
-  $nspaces=count($words)-1;
-  $w += $wa*$nspaces;
-  $a = deg2rad((float)$angle);
-  return array(cos($a)*$w+$x,-sin($a)*$w+$y);
-}
-
-/**
-* wrapper function for PRVTcheckTextDirective1
-*
-* @access private
-*/
-function PRVTcheckTextDirective(&$text,$i,&$f){
-  $x=0;
-  $y=0;
-  return $this->PRVTcheckTextDirective1($text,$i,$f,0,$x,$y);
-}
-
-/**
-* checks if the text stream contains a control directive
-* if so then makes some changes and returns the number of characters involved in the directive
-* this has been re-worked to include everything neccesary to fins the current writing point, so that
-* the location can be sent to the callback function if required
-* if the directive does not require a font change, then $f should be set to 0
-*
-* @access private
-*/
-function PRVTcheckTextDirective1(&$text,$i,&$f,$final,&$x,&$y,$size=0,$angle=0,$wordSpaceAdjust=0){
-  $directive = 0;
-  $j=$i;
-  if ($text[$j]=='<'){
-    $j++;
-    switch($text[$j]){
-      case '/':
-        $j++;
-        if (strlen($text) <= $j){
-          return $directive;
-        }
-        switch($text[$j]){
-          case 'b':
-          case 'i':
-            $j++;
-            if ($text[$j]=='>'){
-              $p = strrpos($this->currentTextState,$text[$j-1]);
-              if ($p !== false){
-                // then there is one to remove
-                $this->currentTextState = substr($this->currentTextState,0,$p).substr($this->currentTextState,$p+1);
-              }
-              $directive=$j-$i+1;
-            }
-            break;
-          case 'c':
-            // this this might be a callback function
-            $j++;
-            $k = strpos($text,'>',$j);
-            if ($k!==false && $text[$j]==':'){
-              // then this will be treated as a callback directive
-              $directive = $k-$i+1;
-              $f=0;
-              // split the remainder on colons to get the function name and the paramater
-              $tmp = substr($text,$j+1,$k-$j-1);
-              $b1 = strpos($tmp,':');
-              if ($b1!==false){
-                $func = substr($tmp,0,$b1);
-                $parm = substr($tmp,$b1+1);
-              } else {
-                $func=$tmp;
-                $parm='';
-              }
-              if (!isset($func) || !strlen(trim($func))){
-                $directive=0;
-              } else {
-                // only call the function if this is the final call
-                if ($final){
-                  // need to assess the text position, calculate the text width to this point
-                  // can use getTextWidth to find the text width I think
-                  $tmp = $this->PRVTgetTextPosition($x,$y,$angle,$size,$wordSpaceAdjust,substr($text,0,$i));
-                  $info = array('x'=>$tmp[0],'y'=>$tmp[1],'angle'=>$angle,'status'=>'end','p'=>$parm,'nCallback'=>$this->nCallback);
-                  $x=$tmp[0];
-                  $y=$tmp[1];
-                  $ret = $this->$func($info);
-                  if (is_array($ret)){
-                    // then the return from the callback function could set the position, to start with, later will do font colour, and font
-                    foreach($ret as $rk=>$rv){
-                      switch($rk){
-                        case 'x':
-                        case 'y':
-                          $$rk=$rv;
-                          break;
-                      }
-                    }
-                  }
-                  // also remove from to the stack
-                  // for simplicity, just take from the end, fix this another day
-                  $this->nCallback--;
-                  if ($this->nCallback<0){
-                    $this->nCallBack=0;
-                  }
-                }
-              }
-            }
-            break;
-        }
-        break;
-      case 'b':
-      case 'i':
-        $j++;
-        if ($text[$j]=='>'){
-          $this->currentTextState.=$text[$j-1];
-          $directive=$j-$i+1;
-        }
-        break;
-      case 'C':
-        $noClose=1;
-      case 'c':
-        // this this might be a callback function
-        $j++;
-        $k = strpos($text,'>',$j);
-        if ($k!==false && $text[$j]==':'){
-          // then this will be treated as a callback directive
-          $directive = $k-$i+1;
-          $f=0;
-          // split the remainder on colons to get the function name and the paramater
-//          $bits = explode(':',substr($text,$j+1,$k-$j-1));
-          $tmp = substr($text,$j+1,$k-$j-1);
-          $b1 = strpos($tmp,':');
-          if ($b1!==false){
-            $func = substr($tmp,0,$b1);
-            $parm = substr($tmp,$b1+1);
-          } else {
-            $func=$tmp;
-            $parm='';
-          }
-          if (!isset($func) || !strlen(trim($func))){
-            $directive=0;
-          } else {
-            // only call the function if this is the final call, ie, the one actually doing printing, not measurement
-            if ($final){
-              // need to assess the text position, calculate the text width to this point
-              // can use getTextWidth to find the text width I think
-              // also add the text height and decender
-              $tmp = $this->PRVTgetTextPosition($x,$y,$angle,$size,$wordSpaceAdjust,substr($text,0,$i));
-              $info = array('x'=>$tmp[0],'y'=>$tmp[1],'angle'=>$angle,'status'=>'start','p'=>$parm,'f'=>$func,'height'=>$this->getFontHeight($size),'decender'=>$this->getFontDecender($size));
-              $x=$tmp[0];
-              $y=$tmp[1];
-              if (!isset($noClose) || !$noClose){
-                // only add to the stack if this is a small 'c', therefore is a start-stop pair
-                $this->nCallback++;
-                $info['nCallback']=$this->nCallback;
-                $this->callback[$this->nCallback]=$info;
-              }
-              $ret = $this->$func($info);
-              if (is_array($ret)){
-                // then the return from the callback function could set the position, to start with, later will do font colour, and font
-                foreach($ret as $rk=>$rv){
-                  switch($rk){
-                    case 'x':
-                    case 'y':
-                      $$rk=$rv;
-                      break;
-                  }
-                }
-              }
-            }
-          }
-        }
-        break;
-    }
-  } 
-  return $directive;
-}
-
-/**
-* add text to the document, at a specified location, size and angle on the page
-*/
-function addText($x,$y,$size,$text,$angle=0,$wordSpaceAdjust=0){
-  if (!$this->numFonts){$this->selectFont('./fonts/Helvetica');}
-
-  // if there are any open callbacks, then they should be called, to show the start of the line
-  if ($this->nCallback>0){
-    for ($i=$this->nCallback;$i>0;$i--){
-      // call each function
-      $info = array('x'=>$x,'y'=>$y,'angle'=>$angle,'status'=>'sol','p'=>$this->callback[$i]['p'],'nCallback'=>$this->callback[$i]['nCallback'],'height'=>$this->callback[$i]['height'],'decender'=>$this->callback[$i]['decender']);
-      $func = $this->callback[$i]['f'];
-      $this->$func($info);
-    }
-  }
-  if ($angle==0){
-    $this->objects[$this->currentContents]['c'].="\n".'BT '.sprintf('%.3f',$x).' '.sprintf('%.3f',$y).' Td';
-  } else {
-    $a = deg2rad((float)$angle);
-    $tmp = "\n".'BT ';
-    $tmp .= sprintf('%.3f',cos($a)).' '.sprintf('%.3f',(-1.0*sin($a))).' '.sprintf('%.3f',sin($a)).' '.sprintf('%.3f',cos($a)).' ';
-    $tmp .= sprintf('%.3f',$x).' '.sprintf('%.3f',$y).' Tm';
-    $this->objects[$this->currentContents]['c'] .= $tmp;
-  }
-  if ($wordSpaceAdjust!=0 || $wordSpaceAdjust != $this->wordSpaceAdjust){
-    $this->wordSpaceAdjust=$wordSpaceAdjust;
-    $this->objects[$this->currentContents]['c'].=' '.sprintf('%.3f',$wordSpaceAdjust).' Tw';
-  }
-  $len=strlen($text);
-  $start=0;
-  for ($i=0;$i<$len;$i++){
-    $f=1;
-    $directive = $this->PRVTcheckTextDirective($text,$i,$f);
-    if ($directive){
-      // then we should write what we need to
-      if ($i>$start){
-        $part = substr($text,$start,$i-$start);
-        $this->objects[$this->currentContents]['c'].=' /F'.$this->currentFontNum.' '.sprintf('%.1f',$size).' Tf ';
-        $this->objects[$this->currentContents]['c'].=' ('.$this->filterText($part).') Tj';
-      }
-      if ($f){
-        // then there was nothing drastic done here, restore the contents
-        $this->setCurrentFont();
-      } else {
-        $this->objects[$this->currentContents]['c'] .= ' ET';
-        $f=1;
-        $xp=$x;
-        $yp=$y;
-        $directive = $this->PRVTcheckTextDirective1($text,$i,$f,1,$xp,$yp,$size,$angle,$wordSpaceAdjust);
-        
-        // restart the text object
-          if ($angle==0){
-            $this->objects[$this->currentContents]['c'].="\n".'BT '.sprintf('%.3f',$xp).' '.sprintf('%.3f',$yp).' Td';
-          } else {
-            $a = deg2rad((float)$angle);
-            $tmp = "\n".'BT ';
-            $tmp .= sprintf('%.3f',cos($a)).' '.sprintf('%.3f',(-1.0*sin($a))).' '.sprintf('%.3f',sin($a)).' '.sprintf('%.3f',cos($a)).' ';
-            $tmp .= sprintf('%.3f',$xp).' '.sprintf('%.3f',$yp).' Tm';
-            $this->objects[$this->currentContents]['c'] .= $tmp;
-          }
-          if ($wordSpaceAdjust!=0 || $wordSpaceAdjust != $this->wordSpaceAdjust){
-            $this->wordSpaceAdjust=$wordSpaceAdjust;
-            $this->objects[$this->currentContents]['c'].=' '.sprintf('%.3f',$wordSpaceAdjust).' Tw';
-          }
-      }
-      // and move the writing point to the next piece of text
-      $i=$i+$directive-1;
-      $start=$i+1;
-    }
-    
-  }
-  if ($start<$len){
-    $part = substr($text,$start);
-    $this->objects[$this->currentContents]['c'].=' /F'.$this->currentFontNum.' '.sprintf('%.1f',$size).' Tf ';
-    $this->objects[$this->currentContents]['c'].=' ('.$this->filterText($part).') Tj';
-  }
-  $this->objects[$this->currentContents]['c'].=' ET';
-
-  // if there are any open callbacks, then they should be called, to show the end of the line
-  if ($this->nCallback>0){
-    for ($i=$this->nCallback;$i>0;$i--){
-      // call each function
-      $tmp = $this->PRVTgetTextPosition($x,$y,$angle,$size,$wordSpaceAdjust,$text);
-      $info = array('x'=>$tmp[0],'y'=>$tmp[1],'angle'=>$angle,'status'=>'eol','p'=>$this->callback[$i]['p'],'nCallback'=>$this->callback[$i]['nCallback'],'height'=>$this->callback[$i]['height'],'decender'=>$this->callback[$i]['decender']);
-      $func = $this->callback[$i]['f'];
-      $this->$func($info);
-    }
-  }
-
-}
-
-/**
-* calculate how wide a given text string will be on a page, at a given size.
-* this can be called externally, but is alse used by the other class functions
-*/
-function getTextWidth($size,$text){
-  // this function should not change any of the settings, though it will need to
-  // track any directives which change during calculation, so copy them at the start
-  // and put them back at the end.
-  $store_currentTextState = $this->currentTextState;
-
-  if (!$this->numFonts){
-    $this->selectFont('./fonts/Helvetica');
-  }
-
-  // converts a number or a float to a string so it can get the width
-  $text = "$text";
-
-  // hmm, this is where it all starts to get tricky - use the font information to
-  // calculate the width of each character, add them up and convert to user units
-  $w=0;
-  $len=strlen($text);
-  $cf = $this->currentFont;
-  for ($i=0;$i<$len;$i++){
-    $f=1;
-    $directive = $this->PRVTcheckTextDirective($text,$i,$f);
-    if ($directive){
-      if ($f){
-        $this->setCurrentFont();
-        $cf = $this->currentFont;
-      }
-      $i=$i+$directive-1;
-    } else {
-      $char=ord($text[$i]);
-      if (isset($this->fonts[$cf]['differences'][$char])){
-        // then this character is being replaced by another
-        $name = $this->fonts[$cf]['differences'][$char];
-        if (isset($this->fonts[$cf]['C'][$name]['WX'])){
-          $w+=$this->fonts[$cf]['C'][$name]['WX'];
-        }
-      } else if (isset($this->fonts[$cf]['C'][$char]['WX'])){
-        $w+=$this->fonts[$cf]['C'][$char]['WX'];
-      }
-    }
-  }
-  
-  $this->currentTextState = $store_currentTextState;
-  $this->setCurrentFont();
-
-  return $w*$size/1000;
-}
-
-/**
-* do a part of the calculation for sorting out the justification of the text
-*
-* @access private
-*/
-function PRVTadjustWrapText($text,$actual,$width,&$x,&$adjust,$justification){
-  switch ($justification){
-    case 'left':
-      return;
-      break;
-    case 'right':
-      $x+=$width-$actual;
-      break;
-    case 'center':
-    case 'centre':
-      $x+=($width-$actual)/2;
-      break;
-    case 'full':
-      // count the number of words
-      $words = explode(' ',$text);
-      $nspaces=count($words)-1;
-      if ($nspaces>0){
-        $adjust = ($width-$actual)/$nspaces;
-      } else {
-        $adjust=0;
-      }
-      break;
-  }
-}
-
-/**
-* add text to the page, but ensure that it fits within a certain width
-* if it does not fit then put in as much as possible, splitting at word boundaries
-* and return the remainder.
-* justification and angle can also be specified for the text
-*/
-function addTextWrap($x,$y,$width,$size,$text,$justification='left',$angle=0,$test=0){
-  // this will display the text, and if it goes beyond the width $width, will backtrack to the 
-  // previous space or hyphen, and return the remainder of the text.
-
-  // $justification can be set to 'left','right','center','centre','full'
-
-  // need to store the initial text state, as this will change during the width calculation
-  // but will need to be re-set before printing, so that the chars work out right
-  $store_currentTextState = $this->currentTextState;
-
-  if (!$this->numFonts){$this->selectFont('./fonts/Helvetica');}
-  if ($width<=0){
-    // error, pretend it printed ok, otherwise risking a loop
-    return '';
-  }
-  $w=0;
-  $break=0;
-  $breakWidth=0;
-  $len=strlen($text);
-  $cf = $this->currentFont;
-  $tw = $width/$size*1000;
-  for ($i=0;$i<$len;$i++){
-    $f=1;
-    $directive = $this->PRVTcheckTextDirective($text,$i,$f);
-    if ($directive){
-      if ($f){
-        $this->setCurrentFont();
-        $cf = $this->currentFont;
-      }
-      $i=$i+$directive-1;
-    } else {
-      $cOrd = ord($text[$i]);
-      if (isset($this->fonts[$cf]['differences'][$cOrd])){
-        // then this character is being replaced by another
-        $cOrd2 = $this->fonts[$cf]['differences'][$cOrd];
-      } else {
-        $cOrd2 = $cOrd;
-      }
-  
-      if (isset($this->fonts[$cf]['C'][$cOrd2]['WX'])){
-        $w+=$this->fonts[$cf]['C'][$cOrd2]['WX'];
-      }
-      if ($w>$tw){
-        // then we need to truncate this line
-        if ($break>0){
-          // then we have somewhere that we can split :)
-          if ($text[$break]==' '){
-            $tmp = substr($text,0,$break);
-          } else {
-            $tmp = substr($text,0,$break+1);
-          }
-          $adjust=0;
-          $this->PRVTadjustWrapText($tmp,$breakWidth,$width,$x,$adjust,$justification);
-
-          // reset the text state
-          $this->currentTextState = $store_currentTextState;
-          $this->setCurrentFont();
-          if (!$test){
-            $this->addText($x,$y,$size,$tmp,$angle,$adjust);
-          }
-          return substr($text,$break+1);
-        } else {
-          // just split before the current character
-          $tmp = substr($text,0,$i);
-          $adjust=0;
-          $ctmp=ord($text[$i]);
-          if (isset($this->fonts[$cf]['differences'][$ctmp])){
-            $ctmp=$this->fonts[$cf]['differences'][$ctmp];
-          }
-          $tmpw=($w-$this->fonts[$cf]['C'][$ctmp]['WX'])*$size/1000;
-          $this->PRVTadjustWrapText($tmp,$tmpw,$width,$x,$adjust,$justification);
-          // reset the text state
-          $this->currentTextState = $store_currentTextState;
-          $this->setCurrentFont();
-          if (!$test){
-            $this->addText($x,$y,$size,$tmp,$angle,$adjust);
-          }
-          return substr($text,$i);
-        }
-      }
-      if ($text[$i]=='-'){
-        $break=$i;
-        $breakWidth = $w*$size/1000;
-      }
-      if ($text[$i]==' '){
-        $break=$i;
-        $ctmp=ord($text[$i]);
-        if (isset($this->fonts[$cf]['differences'][$ctmp])){
-          $ctmp=$this->fonts[$cf]['differences'][$ctmp];
-        }
-        $breakWidth = ($w-$this->fonts[$cf]['C'][$ctmp]['WX'])*$size/1000;
-      }
-    }
-  }
-  // then there was no need to break this line
-  if ($justification=='full'){
-    $justification='left';
-  }
-  $adjust=0;
-  $tmpw=$w*$size/1000;
-  $this->PRVTadjustWrapText($text,$tmpw,$width,$x,$adjust,$justification);
-  // reset the text state
-  $this->currentTextState = $store_currentTextState;
-  $this->setCurrentFont();
-  if (!$test){
-    $this->addText($x,$y,$size,$text,$angle,$adjust,$angle);
-  }
-  return '';
-}
-
-/**
-* this will be called at a new page to return the state to what it was on the 
-* end of the previous page, before the stack was closed down
-* This is to get around not being able to have open 'q' across pages
-*
-*/
-function saveState($pageEnd=0){
-  if ($pageEnd){
-    // this will be called at a new page to return the state to what it was on the 
-    // end of the previous page, before the stack was closed down
-    // This is to get around not being able to have open 'q' across pages
-    $opt = $this->stateStack[$pageEnd]; // ok to use this as stack starts numbering at 1
-    $this->setColor($opt['col']['r'],$opt['col']['g'],$opt['col']['b'],1);
-    $this->setStrokeColor($opt['str']['r'],$opt['str']['g'],$opt['str']['b'],1);
-    $this->objects[$this->currentContents]['c'].="\n".$opt['lin'];
-//    $this->currentLineStyle = $opt['lin'];
-  } else {
-    $this->nStateStack++;
-    $this->stateStack[$this->nStateStack]=array(
-      'col'=>$this->currentColour
-     ,'str'=>$this->currentStrokeColour
-     ,'lin'=>$this->currentLineStyle
-    );
-  }
-  $this->objects[$this->currentContents]['c'].="\nq";
-}
-
-/**
-* restore a previously saved state
-*/
-function restoreState($pageEnd=0){
-  if (!$pageEnd){
-    $n = $this->nStateStack;
-    $this->currentColour = $this->stateStack[$n]['col'];
-    $this->currentStrokeColour = $this->stateStack[$n]['str'];
-    $this->objects[$this->currentContents]['c'].="\n".$this->stateStack[$n]['lin'];
-    $this->currentLineStyle = $this->stateStack[$n]['lin'];
-    unset($this->stateStack[$n]);
-    $this->nStateStack--;
-  }
-  $this->objects[$this->currentContents]['c'].="\nQ";
-}
-
-/**
-* make a loose object, the output will go into this object, until it is closed, then will revert to
-* the current one.
-* this object will not appear until it is included within a page.
-* the function will return the object number
-*/
-function openObject(){
-  $this->nStack++;
-  $this->stack[$this->nStack]=array('c'=>$this->currentContents,'p'=>$this->currentPage);
-  // add a new object of the content type, to hold the data flow
-  $this->numObj++;
-  $this->o_contents($this->numObj,'new');
-  $this->currentContents=$this->numObj;
-  $this->looseObjects[$this->numObj]=1;
-  
-  return $this->numObj;
-}
-
-/**
-* open an existing object for editing
-*/
-function reopenObject($id){
-   $this->nStack++;
-   $this->stack[$this->nStack]=array('c'=>$this->currentContents,'p'=>$this->currentPage);
-   $this->currentContents=$id;
-   // also if this object is the primary contents for a page, then set the current page to its parent
-   if (isset($this->objects[$id]['onPage'])){
-     $this->currentPage = $this->objects[$id]['onPage'];
-   }
-}
-
-/**
-* close an object
-*/
-function closeObject(){
-  // close the object, as long as there was one open in the first place, which will be indicated by
-  // an objectId on the stack.
-  if ($this->nStack>0){
-    $this->currentContents=$this->stack[$this->nStack]['c'];
-    $this->currentPage=$this->stack[$this->nStack]['p'];
-    $this->nStack--;
-    // easier to probably not worry about removing the old entries, they will be overwritten
-    // if there are new ones.
-  }
-}
-
-/**
-* stop an object from appearing on pages from this point on
-*/
-function stopObject($id){
-  // if an object has been appearing on pages up to now, then stop it, this page will
-  // be the last one that could contian it.
-  if (isset($this->addLooseObjects[$id])){
-    $this->addLooseObjects[$id]='';
-  }
-}
-
-/**
-* after an object has been created, it wil only show if it has been added, using this function.
-*/
-function addObject($id,$options='add'){
-  // add the specified object to the page
-  if (isset($this->looseObjects[$id]) && $this->currentContents!=$id){
-    // then it is a valid object, and it is not being added to itself
-    switch($options){
-      case 'all':
-        // then this object is to be added to this page (done in the next block) and 
-        // all future new pages. 
-        $this->addLooseObjects[$id]='all';
-      case 'add':
-        if (isset($this->objects[$this->currentContents]['onPage'])){
-          // then the destination contents is the primary for the page
-          // (though this object is actually added to that page)
-          $this->o_page($this->objects[$this->currentContents]['onPage'],'content',$id);
-        }
-        break;
-      case 'even':
-        $this->addLooseObjects[$id]='even';
-        $pageObjectId=$this->objects[$this->currentContents]['onPage'];
-        if ($this->objects[$pageObjectId]['info']['pageNum']%2==0){
-          $this->addObject($id); // hacky huh :)
-        }
-        break;
-      case 'odd':
-        $this->addLooseObjects[$id]='odd';
-        $pageObjectId=$this->objects[$this->currentContents]['onPage'];
-        if ($this->objects[$pageObjectId]['info']['pageNum']%2==1){
-          $this->addObject($id); // hacky huh :)
-        }
-        break;
-      case 'next':
-        $this->addLooseObjects[$id]='all';
-        break;
-      case 'nexteven':
-        $this->addLooseObjects[$id]='even';
-        break;
-      case 'nextodd':
-        $this->addLooseObjects[$id]='odd';
-        break;
-    }
-  }
-}
-
-/**
-* add content to the documents info object
-*/
-function addInfo($label,$value=0){
-  // this will only work if the label is one of the valid ones.
-  // modify this so that arrays can be passed as well.
-  // if $label is an array then assume that it is key=>value pairs
-  // else assume that they are both scalar, anything else will probably error
-  if (is_array($label)){
-    foreach ($label as $l=>$v){
-      $this->o_info($this->infoObject,$l,$v);
-    }
-  } else {
-    $this->o_info($this->infoObject,$label,$value);
-  }
-}
-
-/**
-* set the viewer preferences of the document, it is up to the browser to obey these.
-*/
-function setPreferences($label,$value=0){
-  // this will only work if the label is one of the valid ones.
-  if (is_array($label)){
-    foreach ($label as $l=>$v){
-      $this->o_catalog($this->catalogId,'viewerPreferences',array($l=>$v));
-    }
-  } else {
-    $this->o_catalog($this->catalogId,'viewerPreferences',array($label=>$value));
-  }
-}
-
-/**
-* extract an integer from a position in a byte stream
-*
-* @access private
-*/
-function PRVT_getBytes(&$data,$pos,$num){
-  // return the integer represented by $num bytes from $pos within $data
-  $ret=0;
-  for ($i=0;$i<$num;$i++){
-    $ret=$ret*256;
-    $ret+=ord($data[$pos+$i]);
-  }
-  return $ret;
-}
-
-/**
-* add a PNG image into the document, from a file
-* this should work with remote files
-*/
-function addPngFromFile($file,$x,$y,$w=0,$h=0){
-  // read in a png file, interpret it, then add to the system
-  $error=0;
-  $tmp = get_magic_quotes_runtime();
-  set_magic_quotes_runtime(0);
-  $fp = @fopen($file,'rb');
-  if ($fp){
-    $data='';
-    while(!feof($fp)){
-      $data .= fread($fp,1024);
-    }
-    fclose($fp);
-  } else {
-    $error = 1;
-    $errormsg = 'trouble opening file: '.$file;
-  }
-  set_magic_quotes_runtime($tmp);
-  
-  if (!$error){
-    $header = chr(137).chr(80).chr(78).chr(71).chr(13).chr(10).chr(26).chr(10);
-    if (substr($data,0,8)!=$header){
-      $error=1;
-      $errormsg = 'this file does not have a valid header';
-    }
-  }
-
-  if (!$error){
-    // set pointer
-    $p = 8;
-    $len = strlen($data);
-    // cycle through the file, identifying chunks
-    $haveHeader=0;
-    $info=array();
-    $idata='';
-    $pdata='';
-    while ($p<$len){
-      $chunkLen = $this->PRVT_getBytes($data,$p,4);
-      $chunkType = substr($data,$p+4,4);
-//      echo $chunkType.' - '.$chunkLen.'<br>';
-    
-      switch($chunkType){
-        case 'IHDR':
-          // this is where all the file information comes from
-          $info['width']=$this->PRVT_getBytes($data,$p+8,4);
-          $info['height']=$this->PRVT_getBytes($data,$p+12,4);
-          $info['bitDepth']=ord($data[$p+16]);
-          $info['colorType']=ord($data[$p+17]);
-          $info['compressionMethod']=ord($data[$p+18]);
-          $info['filterMethod']=ord($data[$p+19]);
-          $info['interlaceMethod']=ord($data[$p+20]);
-//print_r($info);
-          $haveHeader=1;
-          if ($info['compressionMethod']!=0){
-            $error=1;
-            $errormsg = 'unsupported compression method';
-          }
-          if ($info['filterMethod']!=0){
-            $error=1;
-            $errormsg = 'unsupported filter method';
-          }
-          break;
-        case 'PLTE':
-          $pdata.=substr($data,$p+8,$chunkLen);
-          break;
-        case 'IDAT':
-          $idata.=substr($data,$p+8,$chunkLen);
-          break;
-        case 'tRNS': 
-          //this chunk can only occur once and it must occur after the PLTE chunk and before IDAT chunk 
-          //print "tRNS found, color type = ".$info['colorType']."<BR>"; 
-          $transparency = array();
-          if ($info['colorType'] == 3) { // indexed color, rbg 
-          /* corresponding to entries in the plte chunk 
-          Alpha for palette index 0: 1 byte 
-          Alpha for palette index 1: 1 byte 
-          ...etc... 
-          */ 
-            // there will be one entry for each palette entry. up until the last non-opaque entry.
-            // set up an array, stretching over all palette entries which will be o (opaque) or 1 (transparent)
-            $transparency['type']='indexed';
-            $numPalette = strlen($pdata)/3;
-            $trans=0;
-            for ($i=$chunkLen;$i>=0;$i--){
-              if (ord($data[$p+8+$i])==0){
-                $trans=$i;
-              }
-            }
-            $transparency['data'] = $trans;
-            
-          } elseif($info['colorType'] == 0) { // grayscale 
-          /* corresponding to entries in the plte chunk 
-          Gray: 2 bytes, range 0 .. (2^bitdepth)-1 
-          */ 
-//            $transparency['grayscale']=$this->PRVT_getBytes($data,$p+8,2); // g = grayscale 
-            $transparency['type']='indexed';
-            $transparency['data'] = ord($data[$p+8+1]);
-          
-          } elseif($info['colorType'] == 2) { // truecolor 
-          /* corresponding to entries in the plte chunk 
-          Red: 2 bytes, range 0 .. (2^bitdepth)-1 
-          Green: 2 bytes, range 0 .. (2^bitdepth)-1 
-          Blue: 2 bytes, range 0 .. (2^bitdepth)-1 
-          */ 
-            $transparency['r']=$this->PRVT_getBytes($data,$p+8,2); // r from truecolor 
-            $transparency['g']=$this->PRVT_getBytes($data,$p+10,2); // g from truecolor 
-            $transparency['b']=$this->PRVT_getBytes($data,$p+12,2); // b from truecolor 
-          
-          } else { 
-          //unsupported transparency type 
-          } 
-          // KS End new code 
-          break; 
-        default:
-          break;
-      }
-    
-      $p += $chunkLen+12;
-    }
-    
-    if(!$haveHeader){
-      $error = 1;
-      $errormsg = 'information header is missing';
-    }
-    if (isset($info['interlaceMethod']) && $info['interlaceMethod']){
-      $error = 1;
-      $errormsg = 'There appears to be no support for interlaced images in pdf.';
-    }
-  }
-
-  if (!$error && $info['bitDepth'] > 8){
-    $error = 1;
-    $errormsg = 'only bit depth of 8 or less is supported';
-  }
-
-  if (!$error){
-    if ($info['colorType']!=2 && $info['colorType']!=0 && $info['colorType']!=3){
-      $error = 1;
-      $errormsg = 'transparancey alpha channel not supported, transparency only supported for palette images.';
-    } else {
-      switch ($info['colorType']){
-        case 3:
-          $color = 'DeviceRGB';
-          $ncolor=1;
-          break;
-        case 2:
-          $color = 'DeviceRGB';
-          $ncolor=3;
-          break;
-        case 0:
-          $color = 'DeviceGray';
-          $ncolor=1;
-          break;
-      }
-    }
-  }
-  if ($error){
-    $this->addMessage('PNG error - ('.$file.') '.$errormsg);
-    return;
-  }
-  if ($w==0){
-    $w=$h/$info['height']*$info['width'];
-  }
-  if ($h==0){
-    $h=$w*$info['height']/$info['width'];
-  }
-//print_r($info);
-  // so this image is ok... add it in.
-  $this->numImages++;
-  $im=$this->numImages;
-  $label='I'.$im;
-  $this->numObj++;
-//  $this->o_image($this->numObj,'new',array('label'=>$label,'data'=>$idata,'iw'=>$w,'ih'=>$h,'type'=>'png','ic'=>$info['width']));
-  $options = array('label'=>$label,'data'=>$idata,'bitsPerComponent'=>$info['bitDepth'],'pdata'=>$pdata
-                                      ,'iw'=>$info['width'],'ih'=>$info['height'],'type'=>'png','color'=>$color,'ncolor'=>$ncolor);
-  if (isset($transparency)){
-    $options['transparency']=$transparency;
-  }
-  $this->o_image($this->numObj,'new',$options);
-
-  $this->objects[$this->currentContents]['c'].="\nq";
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$w)." 0 0 ".sprintf('%.3f',$h)." ".sprintf('%.3f',$x)." ".sprintf('%.3f',$y)." cm";
-  $this->objects[$this->currentContents]['c'].="\n/".$label.' Do';
-  $this->objects[$this->currentContents]['c'].="\nQ";
-}
-
-/**
-* add a JPEG image into the document, from a file
-*/
-function addJpegFromFile($img,$x,$y,$w=0,$h=0){
-  // attempt to add a jpeg image straight from a file, using no GD commands
-  // note that this function is unable to operate on a remote file.
-
-  if (!file_exists($img)){
-    return;
-  }
-
-  $tmp=getimagesize($img);
-  $imageWidth=$tmp[0];
-  $imageHeight=$tmp[1];
-
-  if (isset($tmp['channels'])){
-    $channels = $tmp['channels'];
-  } else {
-    $channels = 3;
-  }
-
-  if ($w<=0 && $h<=0){
-    $w=$imageWidth;
-  }
-  if ($w==0){
-    $w=$h/$imageHeight*$imageWidth;
-  }
-  if ($h==0){
-    $h=$w*$imageHeight/$imageWidth;
-  }
-
-  $fp=fopen($img,'rb');
-
-  $tmp = get_magic_quotes_runtime();
-  set_magic_quotes_runtime(0);
-  $data = fread($fp,filesize($img));
-  set_magic_quotes_runtime($tmp);
-  
-  fclose($fp);
-
-  $this->addJpegImage_common($data,$x,$y,$w,$h,$imageWidth,$imageHeight,$channels);
-}
-
-/**
-* add an image into the document, from a GD object
-* this function is not all that reliable, and I would probably encourage people to use 
-* the file based functions
-*/
-function addImage(&$img,$x,$y,$w=0,$h=0,$quality=75){
-  // add a new image into the current location, as an external object
-  // add the image at $x,$y, and with width and height as defined by $w & $h
-  
-  // note that this will only work with full colour images and makes them jpg images for display
-  // later versions could present lossless image formats if there is interest.
-  
-  // there seems to be some problem here in that images that have quality set above 75 do not appear
-  // not too sure why this is, but in the meantime I have restricted this to 75.  
-  if ($quality>75){
-    $quality=75;
-  }
-
-  // if the width or height are set to zero, then set the other one based on keeping the image
-  // height/width ratio the same, if they are both zero, then give up :)
-  $imageWidth=imagesx($img);
-  $imageHeight=imagesy($img);
-  
-  if ($w<=0 && $h<=0){
-    return;
-  }
-  if ($w==0){
-    $w=$h/$imageHeight*$imageWidth;
-  }
-  if ($h==0){
-    $h=$w*$imageHeight/$imageWidth;
-  }
-  
-  // gotta get the data out of the img..
-
-  // so I write to a temp file, and then read it back.. soo ugly, my apologies.
-  $tmpDir='/tmp';
-  $tmpName=tempnam($tmpDir,'img');
-  imagejpeg($img,$tmpName,$quality);
-  $fp=fopen($tmpName,'rb');
-
-  $tmp = get_magic_quotes_runtime();
-  set_magic_quotes_runtime(0);
-  $fp = @fopen($tmpName,'rb');
-  if ($fp){
-    $data='';
-    while(!feof($fp)){
-      $data .= fread($fp,1024);
-    }
-    fclose($fp);
-  } else {
-    $error = 1;
-    $errormsg = 'trouble opening file';
-  }
-//  $data = fread($fp,filesize($tmpName));
-  set_magic_quotes_runtime($tmp);
-//  fclose($fp);
-  unlink($tmpName);
-  $this->addJpegImage_common($data,$x,$y,$w,$h,$imageWidth,$imageHeight);
-}
-
-/**
-* common code used by the two JPEG adding functions
-*
-* @access private
-*/
-function addJpegImage_common(&$data,$x,$y,$w=0,$h=0,$imageWidth,$imageHeight,$channels=3){
-  // note that this function is not to be called externally
-  // it is just the common code between the GD and the file options
-  $this->numImages++;
-  $im=$this->numImages;
-  $label='I'.$im;
-  $this->numObj++;
-  $this->o_image($this->numObj,'new',array('label'=>$label,'data'=>$data,'iw'=>$imageWidth,'ih'=>$imageHeight,'channels'=>$channels));
-
-  $this->objects[$this->currentContents]['c'].="\nq";
-  $this->objects[$this->currentContents]['c'].="\n".sprintf('%.3f',$w)." 0 0 ".sprintf('%.3f',$h)." ".sprintf('%.3f',$x)." ".sprintf('%.3f',$y)." cm";
-  $this->objects[$this->currentContents]['c'].="\n/".$label.' Do';
-  $this->objects[$this->currentContents]['c'].="\nQ";
-}
-
-/**
-* specify where the document should open when it first starts
-*/
-function openHere($style,$a=0,$b=0,$c=0){
-  // this function will open the document at a specified page, in a specified style
-  // the values for style, and the required paramters are:
-  // 'XYZ'  left, top, zoom
-  // 'Fit'
-  // 'FitH' top
-  // 'FitV' left
-  // 'FitR' left,bottom,right
-  // 'FitB'
-  // 'FitBH' top
-  // 'FitBV' left
-  $this->numObj++;
-  $this->o_destination($this->numObj,'new',array('page'=>$this->currentPage,'type'=>$style,'p1'=>$a,'p2'=>$b,'p3'=>$c));
-  $id = $this->catalogId;
-  $this->o_catalog($id,'openHere',$this->numObj);
-}
-
-/**
-* create a labelled destination within the document
-*/
-function addDestination($label,$style,$a=0,$b=0,$c=0){
-  // associates the given label with the destination, it is done this way so that a destination can be specified after
-  // it has been linked to
-  // styles are the same as the 'openHere' function
-  $this->numObj++;
-  $this->o_destination($this->numObj,'new',array('page'=>$this->currentPage,'type'=>$style,'p1'=>$a,'p2'=>$b,'p3'=>$c));
-  $id = $this->numObj;
-  // store the label->idf relationship, note that this means that labels can be used only once
-  $this->destinations["$label"]=$id;
-}
-
-/**
-* define font families, this is used to initialize the font families for the default fonts
-* and for the user to add new ones for their fonts. The default bahavious can be overridden should
-* that be desired.
-*/
-function setFontFamily($family,$options=''){
-  if (!is_array($options)){
-    if ($family=='init'){
-      // set the known family groups
-      // these font families will be used to enable bold and italic markers to be included
-      // within text streams. html forms will be used... <b></b> <i></i>
-      $this->fontFamilies['Helvetica.afm']=array(
-         'b'=>'Helvetica-Bold.afm'
-        ,'i'=>'Helvetica-Oblique.afm'
-        ,'bi'=>'Helvetica-BoldOblique.afm'
-        ,'ib'=>'Helvetica-BoldOblique.afm'
-      );
-      $this->fontFamilies['Courier.afm']=array(
-         'b'=>'Courier-Bold.afm'
-        ,'i'=>'Courier-Oblique.afm'
-        ,'bi'=>'Courier-BoldOblique.afm'
-        ,'ib'=>'Courier-BoldOblique.afm'
-      );
-      $this->fontFamilies['Times-Roman.afm']=array(
-         'b'=>'Times-Bold.afm'
-        ,'i'=>'Times-Italic.afm'
-        ,'bi'=>'Times-BoldItalic.afm'
-        ,'ib'=>'Times-BoldItalic.afm'
-      );
-    }
-  } else {
-    // the user is trying to set a font family
-    // note that this can also be used to set the base ones to something else
-    if (strlen($family)){
-      $this->fontFamilies[$family] = $options;
-    }
-  }
-}
-
-/**
-* used to add messages for use in debugging
-*/
-function addMessage($message){
-  $this->messages.=$message."\n";
-}
-
-/**
-* a few functions which should allow the document to be treated transactionally.
+* phase is a modifier on the dash pattern which is used to shift the point at which the pattern starts.
 */
-function transaction($action){
-  switch ($action){
-    case 'start':
-      // store all the data away into the checkpoint variable
-      $data = get_object_vars($this);
-      $this->checkpoint = $data;
-      unset($data);
-      break;
-    case 'commit':
-      if (is_array($this->checkpoint) && isset($this->checkpoint['checkpoint'])){
-        $tmp = $this->checkpoint['checkpoint'];
-        $this->checkpoint = $tmp;
-        unset($tmp);
-      } else {
-        $this->checkpoint='';
-      }
-      break;
-    case 'rewind':
-      // do not destroy the current checkpoint, but move us back to the state then, so that we can try again
-      if (is_array($this->checkpoint)){
-        // can only abort if were inside a checkpoint
-        $tmp = $this->checkpoint;
-        foreach ($tmp as $k=>$v){
-          if ($k != 'checkpoint'){
-            $this->$k=$v;
-          }
-        }
-        unset($tmp);
-      }
-      break;
-    case 'abort':
-      if (is_array($this->checkpoint)){
-        // can only abort if were inside a checkpoint
-        $tmp = $this->checkpoint;
-        foreach ($tmp as $k=>$v){
-          $this->$k=$v;
-        }
-        unset($tmp);
-      }
-      break;
-  }
+       function setLineStyle($width=1,$cap='',$join='',$dash='',$phase=0)
+       {
+               $this->SetLineWidth($width);
+       }
 
-}
+       function Text($x, $y, $txt, $stroke=0, $clip=false) 
+       {
+               TCPDF::Text($x,$y, TCPDF::unhtmlentities($txt), $stroke, $clip);
+       }
 
 } // end of class
 
diff --git a/reporting/includes/html_entity_decode_php4.php b/reporting/includes/html_entity_decode_php4.php
new file mode 100644 (file)
index 0000000..1ecad71
--- /dev/null
@@ -0,0 +1,343 @@
+<?php
+//============================================================+
+// File name   : html_entity_decode_php4.php
+// Begin       : 2006-06-22
+// Last Update : 2008-04-01
+// Author      : Nicola Asuni
+// Version     : 1.0.000
+// License     : GNU LGPL (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 <http://www.gnu.org/licenses/>.
+//     
+//     See LICENSE.TXT file for more information.
+//  ----------------------------------------------------------------------------
+//
+//
+// Description : This is a PHP4 function that redefine the 
+//               standard html_entity_decode function to support
+//               UTF-8 encoding.
+//
+//
+// 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
+//============================================================+
+
+/**
+ * This is a PHP4 function that redefine the standard 
+ * html_entity_decode function to support UTF-8 encoding.
+ * @package com.tecnick.tcpdf
+ * @author Nicola Asuni
+ * @copyright 2004-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
+ */
+
+/**
+ * Returns the UTF-8 string corresponding to unicode value.
+ * @param $num unicode value to convert.
+ * @return string converted
+ */
+function code_to_utf8($num) {
+       if ($num <= 0x7F) {
+               return chr($num);
+       } elseif ($num <= 0x7FF) {
+               return chr(($num >> 0x06) + 0xC0).chr(($num & 0x3F) + 128);
+       } elseif ($num <= 0xFFFF) {
+               return chr(($num >> 0x0C) + 0xE0).chr((($num >> 0x06) & 0x3F) + 0x80).chr(($num & 0x3F) + 0x80);
+       } elseif ($num <= 0x1FFFFF) {
+               return chr(($num >> 0x12) + 0xF0).chr((($num >> 0x0C) & 0x3F) + 0x80).chr((($num >> 0x06) & 0x3F) + 0x80).chr(($num & 0x3F) + 0x80);
+       }
+       return ' '; // default value
+}
+
+/**
+ * Reverse function for htmlentities.
+ * Convert entities in UTF-8.
+ * @param $text_to_convert Text to convert.
+ * @return string converted
+ */
+function html_entity_decode_php4($text_to_convert) {
+       $htmlentities_table = array (
+               "&Aacute;" => "".chr(195).chr(129)."",
+               "&aacute;" => "".chr(195).chr(161)."",
+               "&Acirc;" => "".chr(195).chr(130)."",
+               "&acirc;" => "".chr(195).chr(162)."",
+               "&acute;" => "".chr(194).chr(180)."",
+               "&AElig;" => "".chr(195).chr(134)."",
+               "&aelig;" => "".chr(195).chr(166)."",
+               "&Agrave;" => "".chr(195).chr(128)."",
+               "&agrave;" => "".chr(195).chr(160)."",
+               "&alefsym;" => "".chr(226).chr(132).chr(181)."",
+               "&Alpha;" => "".chr(206).chr(145)."",
+               "&alpha;" => "".chr(206).chr(177)."",
+               "&amp;" => "".chr(38)."",
+               "&and;" => "".chr(226).chr(136).chr(167)."",
+               "&ang;" => "".chr(226).chr(136).chr(160)."",
+               "&Aring;" => "".chr(195).chr(133)."",
+               "&aring;" => "".chr(195).chr(165)."",
+               "&asymp;" => "".chr(226).chr(137).chr(136)."",
+               "&Atilde;" => "".chr(195).chr(131)."",
+               "&atilde;" => "".chr(195).chr(163)."",
+               "&Auml;" => "".chr(195).chr(132)."",
+               "&auml;" => "".chr(195).chr(164)."",
+               "&bdquo;" => "".chr(226).chr(128).chr(158)."",
+               "&Beta;" => "".chr(206).chr(146)."",
+               "&beta;" => "".chr(206).chr(178)."",
+               "&brvbar;" => "".chr(194).chr(166)."",
+               "&bull;" => "".chr(226).chr(128).chr(162)."",
+               "&cap;" => "".chr(226).chr(136).chr(169)."",
+               "&Ccedil;" => "".chr(195).chr(135)."",
+               "&ccedil;" => "".chr(195).chr(167)."",
+               "&cedil;" => "".chr(194).chr(184)."",
+               "&cent;" => "".chr(194).chr(162)."",
+               "&Chi;" => "".chr(206).chr(167)."",
+               "&chi;" => "".chr(207).chr(135)."",
+               "&circ;" => "".chr(203).chr(134)."",
+               "&clubs;" => "".chr(226).chr(153).chr(163)."",
+               "&cong;" => "".chr(226).chr(137).chr(133)."",
+               "&copy;" => "".chr(194).chr(169)."",
+               "&crarr;" => "".chr(226).chr(134).chr(181)."",
+               "&cup;" => "".chr(226).chr(136).chr(170)."",
+               "&curren;" => "".chr(194).chr(164)."",
+               "&dagger;" => "".chr(226).chr(128).chr(160)."",
+               "&Dagger;" => "".chr(226).chr(128).chr(161)."",
+               "&darr;" => "".chr(226).chr(134).chr(147)."",
+               "&dArr;" => "".chr(226).chr(135).chr(147)."",
+               "&deg;" => "".chr(194).chr(176)."",
+               "&Delta;" => "".chr(206).chr(148)."",
+               "&delta;" => "".chr(206).chr(180)."",
+               "&diams;" => "".chr(226).chr(153).chr(166)."",
+               "&divide;" => "".chr(195).chr(183)."",
+               "&Eacute;" => "".chr(195).chr(137)."",
+               "&eacute;" => "".chr(195).chr(169)."",
+               "&Ecirc;" => "".chr(195).chr(138)."",
+               "&ecirc;" => "".chr(195).chr(170)."",
+               "&Egrave;" => "".chr(195).chr(136)."",
+               "&egrave;" => "".chr(195).chr(168)."",
+               "&empty;" => "".chr(226).chr(136).chr(133)."",
+               "&emsp;" => "".chr(226).chr(128).chr(131)."",
+               "&ensp;" => "".chr(226).chr(128).chr(130)."",
+               "&Epsilon;" => "".chr(206).chr(149)."",
+               "&epsilon;" => "".chr(206).chr(181)."",
+               "&equiv;" => "".chr(226).chr(137).chr(161)."",
+               "&Eta;" => "".chr(206).chr(151)."",
+               "&eta;" => "".chr(206).chr(183)."",
+               "&ETH;" => "".chr(195).chr(144)."",
+               "&eth;" => "".chr(195).chr(176)."",
+               "&Euml;" => "".chr(195).chr(139)."",
+               "&euml;" => "".chr(195).chr(171)."",
+               "&euro;" => "".chr(226).chr(130).chr(172)."",
+               "&exist;" => "".chr(226).chr(136).chr(131)."",
+               "&fnof;" => "".chr(198).chr(146)."",
+               "&forall;" => "".chr(226).chr(136).chr(128)."",
+               "&frac12;" => "".chr(194).chr(189)."",
+               "&frac14;" => "".chr(194).chr(188)."",
+               "&frac34;" => "".chr(194).chr(190)."",
+               "&frasl;" => "".chr(226).chr(129).chr(132)."",
+               "&Gamma;" => "".chr(206).chr(147)."",
+               "&gamma;" => "".chr(206).chr(179)."",
+               "&ge;" => "".chr(226).chr(137).chr(165)."",
+               "&harr;" => "".chr(226).chr(134).chr(148)."",
+               "&hArr;" => "".chr(226).chr(135).chr(148)."",
+               "&hearts;" => "".chr(226).chr(153).chr(165)."",
+               "&hellip;" => "".chr(226).chr(128).chr(166)."",
+               "&Iacute;" => "".chr(195).chr(141)."",
+               "&iacute;" => "".chr(195).chr(173)."",
+               "&Icirc;" => "".chr(195).chr(142)."",
+               "&icirc;" => "".chr(195).chr(174)."",
+               "&iexcl;" => "".chr(194).chr(161)."",
+               "&Igrave;" => "".chr(195).chr(140)."",
+               "&igrave;" => "".chr(195).chr(172)."",
+               "&image;" => "".chr(226).chr(132).chr(145)."",
+               "&infin;" => "".chr(226).chr(136).chr(158)."",
+               "&int;" => "".chr(226).chr(136).chr(171)."",
+               "&Iota;" => "".chr(206).chr(153)."",
+               "&iota;" => "".chr(206).chr(185)."",
+               "&iquest;" => "".chr(194).chr(191)."",
+               "&isin;" => "".chr(226).chr(136).chr(136)."",
+               "&Iuml;" => "".chr(195).chr(143)."",
+               "&iuml;" => "".chr(195).chr(175)."",
+               "&Kappa;" => "".chr(206).chr(154)."",
+               "&kappa;" => "".chr(206).chr(186)."",
+               "&Lambda;" => "".chr(206).chr(155)."",
+               "&lambda;" => "".chr(206).chr(187)."",
+               "&lang;" => "".chr(226).chr(140).chr(169)."",
+               "&laquo;" => "".chr(194).chr(171)."",
+               "&larr;" => "".chr(226).chr(134).chr(144)."",
+               "&lArr;" => "".chr(226).chr(135).chr(144)."",
+               "&lceil;" => "".chr(226).chr(140).chr(136)."",
+               "&ldquo;" => "".chr(226).chr(128).chr(156)."",
+               "&le;" => "".chr(226).chr(137).chr(164)."",
+               "&lfloor;" => "".chr(226).chr(140).chr(138)."",
+               "&lowast;" => "".chr(226).chr(136).chr(151)."",
+               "&loz;" => "".chr(226).chr(151).chr(138)."",
+               "&lrm;" => "".chr(226).chr(128).chr(142)."",
+               "&lsaquo;" => "".chr(226).chr(128).chr(185)."",
+               "&lsquo;" => "".chr(226).chr(128).chr(152)."",
+               "&macr;" => "".chr(194).chr(175)."",
+               "&mdash;" => "".chr(226).chr(128).chr(148)."",
+               "&micro;" => "".chr(194).chr(181)."",
+               "&middot;" => "".chr(194).chr(183)."",
+               "&minus;" => "".chr(226).chr(136).chr(146)."",
+               "&Mu;" => "".chr(206).chr(156)."",
+               "&mu;" => "".chr(206).chr(188)."",
+               "&nabla;" => "".chr(226).chr(136).chr(135)."",
+               "&nbsp;" => "".chr(194).chr(160)."",
+               "&ndash;" => "".chr(226).chr(128).chr(147)."",
+               "&ne;" => "".chr(226).chr(137).chr(160)."",
+               "&ni;" => "".chr(226).chr(136).chr(139)."",
+               "&not;" => "".chr(194).chr(172)."",
+               "&notin;" => "".chr(226).chr(136).chr(137)."",
+               "&nsub;" => "".chr(226).chr(138).chr(132)."",
+               "&Ntilde;" => "".chr(195).chr(145)."",
+               "&ntilde;" => "".chr(195).chr(177)."",
+               "&Nu;" => "".chr(206).chr(157)."",
+               "&nu;" => "".chr(206).chr(189)."",
+               "&Oacute;" => "".chr(195).chr(147)."",
+               "&oacute;" => "".chr(195).chr(179)."",
+               "&Ocirc;" => "".chr(195).chr(148)."",
+               "&ocirc;" => "".chr(195).chr(180)."",
+               "&OElig;" => "".chr(197).chr(146)."",
+               "&oelig;" => "".chr(197).chr(147)."",
+               "&Ograve;" => "".chr(195).chr(146)."",
+               "&ograve;" => "".chr(195).chr(178)."",
+               "&oline;" => "".chr(226).chr(128).chr(190)."",
+               "&Omega;" => "".chr(206).chr(169)."",
+               "&omega;" => "".chr(207).chr(137)."",
+               "&Omicron;" => "".chr(206).chr(159)."",
+               "&omicron;" => "".chr(206).chr(191)."",
+               "&oplus;" => "".chr(226).chr(138).chr(149)."",
+               "&or;" => "".chr(226).chr(136).chr(168)."",
+               "&ordf;" => "".chr(194).chr(170)."",
+               "&ordm;" => "".chr(194).chr(186)."",
+               "&Oslash;" => "".chr(195).chr(152)."",
+               "&oslash;" => "".chr(195).chr(184)."",
+               "&Otilde;" => "".chr(195).chr(149)."",
+               "&otilde;" => "".chr(195).chr(181)."",
+               "&otimes;" => "".chr(226).chr(138).chr(151)."",
+               "&Ouml;" => "".chr(195).chr(150)."",
+               "&ouml;" => "".chr(195).chr(182)."",
+               "&para;" => "".chr(194).chr(182)."",
+               "&part;" => "".chr(226).chr(136).chr(130)."",
+               "&permil;" => "".chr(226).chr(128).chr(176)."",
+               "&perp;" => "".chr(226).chr(138).chr(165)."",
+               "&Phi;" => "".chr(206).chr(166)."",
+               "&phi;" => "".chr(207).chr(134)."",
+               "&Pi;" => "".chr(206).chr(160)."",
+               "&pi;" => "".chr(207).chr(128)."",
+               "&piv;" => "".chr(207).chr(150)."",
+               "&plusmn;" => "".chr(194).chr(177)."",
+               "&pound;" => "".chr(194).chr(163)."",
+               "&prime;" => "".chr(226).chr(128).chr(178)."",
+               "&Prime;" => "".chr(226).chr(128).chr(179)."",
+               "&prod;" => "".chr(226).chr(136).chr(143)."",
+               "&prop;" => "".chr(226).chr(136).chr(157)."",
+               "&Psi;" => "".chr(206).chr(168)."",
+               "&psi;" => "".chr(207).chr(136)."",
+               "&radic;" => "".chr(226).chr(136).chr(154)."",
+               "&rang;" => "".chr(226).chr(140).chr(170)."",
+               "&raquo;" => "".chr(194).chr(187)."",
+               "&rarr;" => "".chr(226).chr(134).chr(146)."",
+               "&rArr;" => "".chr(226).chr(135).chr(146)."",
+               "&rceil;" => "".chr(226).chr(140).chr(137)."",
+               "&rdquo;" => "".chr(226).chr(128).chr(157)."",
+               "&real;" => "".chr(226).chr(132).chr(156)."",
+               "&reg;" => "".chr(194).chr(174)."",
+               "&rfloor;" => "".chr(226).chr(140).chr(139)."",
+               "&Rho;" => "".chr(206).chr(161)."",
+               "&rho;" => "".chr(207).chr(129)."",
+               "&rlm;" => "".chr(226).chr(128).chr(143)."",
+               "&rsaquo;" => "".chr(226).chr(128).chr(186)."",
+               "&rsquo;" => "".chr(226).chr(128).chr(153)."",
+               "&sbquo;" => "".chr(226).chr(128).chr(154)."",
+               "&Scaron;" => "".chr(197).chr(160)."",
+               "&scaron;" => "".chr(197).chr(161)."",
+               "&sdot;" => "".chr(226).chr(139).chr(133)."",
+               "&sect;" => "".chr(194).chr(167)."",
+               "&shy;" => "".chr(194).chr(173)."",
+               "&Sigma;" => "".chr(206).chr(163)."",
+               "&sigma;" => "".chr(207).chr(131)."",
+               "&sigmaf;" => "".chr(207).chr(130)."",
+               "&sim;" => "".chr(226).chr(136).chr(188)."",
+               "&spades;" => "".chr(226).chr(153).chr(160)."",
+               "&sub;" => "".chr(226).chr(138).chr(130)."",
+               "&sube;" => "".chr(226).chr(138).chr(134)."",
+               "&sum;" => "".chr(226).chr(136).chr(145)."",
+               "&sup1;" => "".chr(194).chr(185)."",
+               "&sup2;" => "".chr(194).chr(178)."",
+               "&sup3;" => "".chr(194).chr(179)."",
+               "&sup;" => "".chr(226).chr(138).chr(131)."",
+               "&supe;" => "".chr(226).chr(138).chr(135)."",
+               "&szlig;" => "".chr(195).chr(159)."",
+               "&Tau;" => "".chr(206).chr(164)."",
+               "&tau;" => "".chr(207).chr(132)."",
+               "&there4;" => "".chr(226).chr(136).chr(180)."",
+               "&Theta;" => "".chr(206).chr(152)."",
+               "&theta;" => "".chr(206).chr(184)."",
+               "&thetasym;" => "".chr(207).chr(145)."",
+               "&thinsp;" => "".chr(226).chr(128).chr(137)."",
+               "&THORN;" => "".chr(195).chr(158)."",
+               "&thorn;" => "".chr(195).chr(190)."",
+               "&tilde;" => "".chr(203).chr(156)."",
+               "&times;" => "".chr(195).chr(151)."",
+               "&trade;" => "".chr(226).chr(132).chr(162)."",
+               "&Uacute;" => "".chr(195).chr(154)."",
+               "&uacute;" => "".chr(195).chr(186)."",
+               "&uarr;" => "".chr(226).chr(134).chr(145)."",
+               "&uArr;" => "".chr(226).chr(135).chr(145)."",
+               "&Ucirc;" => "".chr(195).chr(155)."",
+               "&ucirc;" => "".chr(195).chr(187)."",
+               "&Ugrave;" => "".chr(195).chr(153)."",
+               "&ugrave;" => "".chr(195).chr(185)."",
+               "&uml;" => "".chr(194).chr(168)."",
+               "&upsih;" => "".chr(207).chr(146)."",
+               "&Upsilon;" => "".chr(206).chr(165)."",
+               "&upsilon;" => "".chr(207).chr(133)."",
+               "&Uuml;" => "".chr(195).chr(156)."",
+               "&uuml;" => "".chr(195).chr(188)."",
+               "&weierp;" => "".chr(226).chr(132).chr(152)."",
+               "&Xi;" => "".chr(206).chr(158)."",
+               "&xi;" => "".chr(206).chr(190)."",
+               "&Yacute;" => "".chr(195).chr(157)."",
+               "&yacute;" => "".chr(195).chr(189)."",
+               "&yen;" => "".chr(194).chr(165)."",
+               "&yuml;" => "".chr(195).chr(191)."",
+               "&Yuml;" => "".chr(197).chr(184)."",
+               "&Zeta;" => "".chr(206).chr(150)."",
+               "&zeta;" => "".chr(206).chr(182)."",
+               "&zwj;" => "".chr(226).chr(128).chr(141)."",
+               "&zwnj;" => "".chr(226).chr(128).chr(140)."",
+               "&gt;" => ">",
+               "&lt;" => "<"
+       );
+       $return_text = strtr($text_to_convert, $htmlentities_table);
+       $return_text = preg_replace('~&#x([0-9a-f]+);~ei', 'code_to_utf8(hexdec("\\1"))', $return_text);
+       $return_text = preg_replace('~&#([0-9]+);~e', 'code_to_utf8(\\1)', $return_text);
+       return $return_text;
+}
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
\ No newline at end of file
diff --git a/reporting/includes/htmlcolors.php b/reporting/includes/htmlcolors.php
new file mode 100644 (file)
index 0000000..69c5def
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+//============================================================+
+// File name   : htmlcolors.php
+// Begin       : 2002-04-09
+// Last Update : 2008-04-01
+// Version     : 1.0.000
+// License     : GNU LGPL (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 <http://www.gnu.org/licenses/>.
+//     
+//     See LICENSE.TXT file for more information.
+//  ----------------------------------------------------------------------------
+//
+// Description : Array of WEB safe colors
+//
+// 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
+//============================================================+
+
+/**
+ * Array of WEB safe colors.
+ * @author Nicola Asuni
+ * @copyright 2004-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
+ * @package com.tecnick.tcpdf
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @since 2.9.000 (2008-03-26)
+*/
+
+/**
+ * Array of WEB safe colors
+ */
+$webcolor = array (
+"aliceblue" => "f0f8ff",
+"antiquewhite" => "faebd7",
+"aqua" => "00ffff",
+"aquamarine" => "7fffd4",
+"azure" => "f0ffff",
+"beige" => "f5f5dc",
+"bisque" => "ffe4c4",
+"black" => "000000",
+"blanchedalmond" => "ffebcd",
+"blue" => "0000ff",
+"blueviolet" => "8a2be2",
+"brown" => "a52a2a",
+"burlywood" => "deb887",
+"cadetblue" => "5f9ea0",
+"chartreuse" => "7fff00",
+"chocolate" => "d2691e",
+"coral" => "ff7f50",
+"cornflowerblue" => "6495ed",
+"cornsilk" => "fff8dc",
+"crimson" => "dc143c",
+"cyan" => "00ffff",
+"darkblue" => "00008b",
+"darkcyan" => "008b8b",
+"darkgoldenrod" => "b8860b",
+"darkgray" => "a9a9a9",
+"darkgrey" => "a9a9a9",
+"darkgreen" => "006400",
+"darkkhaki" => "bdb76b",
+"darkmagenta" => "8b008b",
+"darkolivegreen" => "556b2f",
+"darkorange" => "ff8c00",
+"darkorchid" => "9932cc",
+"darkred" => "8b0000",
+"darksalmon" => "e9967a",
+"darkseagreen" => "8fbc8f",
+"darkslateblue" => "483d8b",
+"darkslategray" => "2f4f4f",
+"darkslategrey" => "2f4f4f",
+"darkturquoise" => "00ced1",
+"darkviolet" => "9400d3",
+"deeppink" => "ff1493",
+"deepskyblue" => "00bfff",
+"dimgray" => "696969",
+"dimgrey" => "696969",
+"dodgerblue" => "1e90ff",
+"firebrick" => "b22222",
+"floralwhite" => "fffaf0",
+"forestgreen" => "228b22",
+"fuchsia" => "ff00ff",
+"gainsboro" => "dcdcdc",
+"ghostwhite" => "f8f8ff",
+"gold" => "ffd700",
+"goldenrod" => "daa520",
+"gray" => "808080",
+"grey" => "808080",
+"green" => "008000",
+"greenyellow" => "adff2f",
+"honeydew" => "f0fff0",
+"hotpink" => "ff69b4",
+"indianred " => "cd5c5c",
+"indigo " => "4b0082",
+"ivory" => "fffff0",
+"khaki" => "f0e68c",
+"lavender" => "e6e6fa",
+"lavenderblush" => "fff0f5",
+"lawngreen" => "7cfc00",
+"lemonchiffon" => "fffacd",
+"lightblue" => "add8e6",
+"lightcoral" => "f08080",
+"lightcyan" => "e0ffff",
+"lightgoldenrodyellow" => "fafad2",
+"lightgray" => "d3d3d3",
+"lightgrey" => "d3d3d3",
+"lightgreen" => "90ee90",
+"lightpink" => "ffb6c1",
+"lightsalmon" => "ffa07a",
+"lightseagreen" => "20b2aa",
+"lightskyblue" => "87cefa",
+"lightslategray" => "778899",
+"lightslategrey" => "778899",
+"lightsteelblue" => "b0c4de",
+"lightyellow" => "ffffe0",
+"lime" => "00ff00",
+"limegreen" => "32cd32",
+"linen" => "faf0e6",
+"magenta" => "ff00ff",
+"maroon" => "800000",
+"mediumaquamarine" => "66cdaa",
+"mediumblue" => "0000cd",
+"mediumorchid" => "ba55d3",
+"mediumpurple" => "9370d8",
+"mediumseagreen" => "3cb371",
+"mediumslateblue" => "7b68ee",
+"mediumspringgreen" => "00fa9a",
+"mediumturquoise" => "48d1cc",
+"mediumvioletred" => "c71585",
+"midnightblue" => "191970",
+"mintcream" => "f5fffa",
+"mistyrose" => "ffe4e1",
+"moccasin" => "ffe4b5",
+"navajowhite" => "ffdead",
+"navy" => "000080",
+"oldlace" => "fdf5e6",
+"olive" => "808000",
+"olivedrab" => "6b8e23",
+"orange" => "ffa500",
+"orangered" => "ff4500",
+"orchid" => "da70d6",
+"palegoldenrod" => "eee8aa",
+"palegreen" => "98fb98",
+"paleturquoise" => "afeeee",
+"palevioletred" => "d87093",
+"papayawhip" => "ffefd5",
+"peachpuff" => "ffdab9",
+"peru" => "cd853f",
+"pink" => "ffc0cb",
+"plum" => "dda0dd",
+"powderblue" => "b0e0e6",
+"purple" => "800080",
+"red" => "ff0000",
+"rosybrown" => "bc8f8f",
+"royalblue" => "4169e1",
+"saddlebrown" => "8b4513",
+"salmon" => "fa8072",
+"sandybrown" => "f4a460",
+"seagreen" => "2e8b57",
+"seashell" => "fff5ee",
+"sienna" => "a0522d",
+"silver" => "c0c0c0",
+"skyblue" => "87ceeb",
+"slateblue" => "6a5acd",
+"slategray" => "708090",
+"slategrey" => "708090",
+"snow" => "fffafa",
+"springgreen" => "00ff7f",
+"steelblue" => "4682b4",
+"tan" => "d2b48c",
+"teal" => "008080",
+"thistle" => "d8bfd8",
+"tomato" => "ff6347",
+"turquoise" => "40e0d0",
+"violet" => "ee82ee",
+"wheat" => "f5deb3",
+"white" => "ffffff",
+"whitesmoke" => "f5f5f5",
+"yellow" => "ffff00",
+"yellowgreen" => "9acd32"
+);
+
+//============================================================+
+// END OF FILE                                                 
+//============================================================+
+?>
index ffd0fe6bc371baf3a953787314e8abdf2299494e..9b0c9d4584029006a684ecf0535e5d7a4373767a 100644 (file)
@@ -1,7 +1,8 @@
 <?php
 /* $Revision$ */
 $page_security = 8;
-include_once($path_to_root . "reporting/includes/class.pdf.inc");
+//include_once($path_to_root . "reporting/includes/class.pdf.inc");
+include_once(dirname(__FILE__)."/class.pdf.inc");
 include_once($path_to_root . "admin/db/company_db.inc");
 include_once($path_to_root . "config.php");
 class FrontReport extends Cpdf
@@ -21,7 +22,7 @@ class FrontReport extends Cpdf
        var $rightMargin;
        var $endLine;
        var $lineHeight;
-       var $rtl;
+       //var $rtl;
 
        var $cols;
        var $params;
@@ -34,6 +35,7 @@ class FrontReport extends Cpdf
        var $titleCol;
        var $pageNumber;
        var $fontSize;
+       var $oldFontSize;
        var $currency;
 
        function FrontReport($title, $filename, $size = 'A4', $fontsize = 9)
@@ -117,33 +119,20 @@ class FrontReport extends Cpdf
                $this->titleCol = $this->leftMargin + 100;
                $this->lineHeight = 12;
                $this->fontSize = $fontsize;
+               $this->oldFontSize = 0;
+               $this->row = $this->pageHeight - $this->topMargin;
                $this->currency = '';
-               $this->rtl = ($_SESSION['language']->dir == 'rtl');
-               // for quick testing
-               //$this->rtl = true;
-               $this->Cpdf($this->size);
+               $rtl = ($_SESSION['language']->dir === 'rtl' ? 'rtl' : 'ltr');
+               $code = $_SESSION['language']->code;
+               $enc = strtoupper($_SESSION['language']->encoding);
+               // for the language array in class.pdf.inc
+               $l = array('a_meta_charset' => $enc, 'a_meta_dir' => $rtl, 'a_meta_language' => $code, 'w_page' => 'page');
+               $this->Cpdf($size, $l);
        }
 
        function Font($style = 'normal')
        {
-               global $path_to_root;
-               $own = false;
-               $locale = $path_to_root . "lang/" . $_SESSION['language']->code . "/locale.inc";
-               if (file_exists($locale))
-               {
-                       $fontinclude = true;
-                       include($locale);
-               }
-               if (!$own)
-               {
-                       if ($style == 'italic')
-                               $path = $path_to_root . 'reporting/fonts/Helvetica-Oblique.afm';
-                       elseif ($style == 'bold')
-                               $path = $path_to_root . 'reporting/fonts/Helvetica-Bold.afm';
-                       else // even take misspelled styles
-                               $path = $path_to_root . 'reporting/fonts/Helvetica.afm';
-               }
-               $this->selectFont($path, 'WinAnsiEncoding');
+               $this->selectFont("", $style);
        }
 
        function Info($params, $cols, $headers, $aligns,
@@ -236,7 +225,7 @@ class FrontReport extends Cpdf
                        $this->Font();
                }
                $str = _("Page") . ' ' . $this->pageNumber;
-               $this->Text($this->endLine - 35, $str);
+               $this->Text($this->endLine - 38, $str);
                $this->Line($this->row - 5, 1);
 
                $this->row -= ($this->lineHeight + 6);
@@ -281,8 +270,6 @@ class FrontReport extends Cpdf
 
        function AddImage($logo, $x, $y, $w, $h)
        {
-               if ($this->rtl)
-                       $x = $this->pageWidth - $x - $w;
                if (strpos($logo, ".png") || strpos($logo, ".PNG"))
                        $this->addPngFromFile($logo, $x, $y, $w, $h);
                else
@@ -296,7 +283,7 @@ class FrontReport extends Cpdf
 
        function SetTextColor($r, $g, $b)
        {
-               $this->setColor($r / 255, $g / 255, $b / 255);
+               TCPDF::SetTextColor($r / 255, $g / 255, $b / 255);
        }
 
        function Text($c, $txt, $n=0, $corr=0, $r=0)
@@ -309,14 +296,10 @@ class FrontReport extends Cpdf
 
        function TextWrap($xpos, $ypos, $len, $str, $align = 'left')
        {
-               if ($this->rtl)
+               if ($this->fontSize != $this->oldFontSize)
                {
-                       $str = strrev($str);
-                       $xpos = $this->pageWidth - $xpos - $len;
-                       if ($align == 'left')
-                               $align = 'right';
-                       elseif ($align == 'right')
-                               $align = 'left';
+                       $this->SetFontSize($this->fontSize);
+                       $this->oldFontSize = $this->fontSize;
                }
                return $this->addTextWrap($xpos, $ypos, $len, $this->fontSize, $str, $align);
        }
@@ -368,13 +351,9 @@ class FrontReport extends Cpdf
        {
                global $go_debug, $path_to_root, $comp_path;
 
-               // this is no good in IE so has been replaced, see down under
-               // but good for debugging purposes in IE
-               //session_write_close();
-
                if ($go_debug == 1)
                {
-                       $buf = $this->output(1);
+                       $buf = $this->Output();
                        $len = strlen($buf);
                        $pdfcode = $buf;
                        $pdfcode = str_replace("\n", "\n<br>", htmlspecialchars($pdfcode));
@@ -391,7 +370,7 @@ class FrontReport extends Cpdf
                }
                else
                {
-                       $buf = $this->output();
+                       $buf = $this->Output();
                        $len = strlen($buf);
                        $dir =  $comp_path.'/'.user_company(). '/pdf_files';
                        //save the file
@@ -478,7 +457,7 @@ class FrontReport extends Cpdf
                 header('Expires: 0');
                 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                 header('Pragma: public');
-                $this->stream();
+                $this->Stream();
 
                        }
                        // also have a look through the directory, and remove the files that are older than a week
diff --git a/reporting/includes/tcpdf.php b/reporting/includes/tcpdf.php
new file mode 100644 (file)
index 0000000..a7cbd2d
--- /dev/null
@@ -0,0 +1,9634 @@
+<?php
+//============================================================+
+// File name   : tcpdf.php
+// Begin       : 2002-08-03
+// Last Update : 2008-08-05
+// Author      : Nicola Asuni - info@tecnick.com - http://www.tcpdf.org
+// Version     : 4.0.017_PHP4
+// License     : GNU LGPL (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 <http://www.gnu.org/licenses/>.
+//
+//     See LICENSE.TXT file for more information.
+//  ----------------------------------------------------------------------------
+//
+// Description : This is a PHP class for generating PDF documents without
+//               requiring external extensions.
+//
+// NOTE:
+// This class was originally derived in 2002 from the Public
+// Domain FPDF class by Olivier Plathey (http://www.fpdf.org),
+// but now is almost entirely rewritten.
+//
+// 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.
+//
+// -----------------------------------------------------------
+// THANKS TO:
+//
+// Olivier Plathey (http://www.fpdf.org) for original FPDF.
+// Efthimios Mavrogeorgiadis (emavro@yahoo.com) for suggestions on RTL language support.
+// Klemen Vodopivec (http://www.fpdf.de/downloads/addons/37/) for Encryption algorithm.
+// Warren Sherliker (wsherliker@gmail.com) for better image handling.
+// dullus for text Justification.
+// Bob Vincent (pillarsdotnet@users.sourceforge.net) for <li> value attribute.
+// Patrick Benny for text stretch suggestion on Cell().
+// Johannes Güntert for JavaScript support.
+// Denis Van Nuffelen for Dynamic Form.
+// Jacek Czekaj for multibyte justification
+// Anthony Ferrara for the reintroduction of legacy image methods.
+// Sourceforge user 1707880 (hucste) for line-trough mode.
+// Larry Stanbery for page groups.
+// Martin Hall-May for transparency.
+// Aaron C. Spike for Polycurve method.
+// Mohamad Ali Golkar, Saleh AlMatrafe, Charles Abbott for Arabic and Persian support.
+// Moritz Wagner and Andreas Wurmser for graphic functions.
+// Andrew Whitehead for core fonts support.
+// Esteban Joël Marín for OpenType font conversion.
+// Anyone that has reported a bug or sent a suggestion.
+//============================================================+
+
+/**
+ * This is a PHP class for generating PDF documents without requiring external extensions.<br>
+ * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
+ * <h3>TCPDF main features are:</h3>
+ * <ul>
+ * <li>no external libraries are required for the basic functions;</li>
+ * <li>supports all ISO page formats;</li>
+ * <li>supports UTF-8 Unicode and Right-To-Left languages;</li>
+ * <li>supports document encryption;</li>
+ * <li>includes methods to publish some XHTML code;</li>
+ * <li>includes graphic (geometric) and transformation methods;</li>
+ * <li>includes bookmarks;</li>
+ * <li>includes Javascript and forms support;</li>
+ * <li>includes a method to print various barcode formats;</li>
+ * <li>supports TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;</li>
+ * <li>supports custom page formats, margins and units of measure;</li>
+ * <li>includes methods for page header and footer management;</li>
+ * <li>supports automatic page break;</li>
+ * <li>supports automatic page numbering and page groups;</li>
+ * <li>supports automatic line break and text justification;
+ * <li>supports JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;</li>
+ * <li>supports stroke and clipping mode for text;</li>
+ * <li>supports clipping masks;</li>
+ * <li>supports Grayscale, RGB and CMYK colors and transparency;</li>
+ * <li>supports links;</li>
+ * <li>supports page compression (requires zlib extension);</li>
+ * <li>supports PDF user's rights.</li>
+ * </ul>
+ * Tools to encode your unicode fonts are on fonts/utils directory.</p>
+ * @package com.tecnick.tcpdf
+ * @abstract Class for generating PDF files on-the-fly without requiring external extensions.
+ * @author Nicola Asuni
+ * @copyright 2004-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 4.0.017_PHP4
+ */
+
+/**
+ * main configuration file
+ */
+/** -------------------------------FrontAccounting 2.0  ---------------------------
+  * following changes are done for FrontAccounting 2.0 - Joe Hunt 06.08.2008
+  * 1. /config/tcpdf_config.php is not included, commented out
+  * 2. Following 3 defines instead:
+  *    if (!defined("K_PATH_FONTS"))
+  *        define ("K_PATH_FONTS", '../reporting/fonts/');
+  *    define ("K_PATH_CACHE", '../reporting/fonts/');
+  *    define("K_CELL_HEIGHT_RATIO", 1.25);
+  * 3. ./unicode_data2.php only included if unicode is set. (in class constructor)
+  *    We only use a reduced variant of unicode_data.php (unicode_data.php).af wrap the
+  *    following defines
+  *    if (!defined("K_RE_PATTERN_RTL"))
+  *    and
+  *    if (!defined("K_RE_PATTERN_ARABIC"))
+  * 4. Parameter $unicode in constructor renamed to $uni.
+  * 4. Header function renamed to Header1 (due to conflict with FrontReport Header)
+  * -------------------------------------------------------------------------------
+  */
+if (!defined("K_PATH_FONTS"))
+       define ("K_PATH_FONTS", '../reporting/fonts/');
+define ("K_PATH_CACHE", '../reporting/fonts/');
+define("K_CELL_HEIGHT_RATIO", 1.25);
+
+//require_once(dirname(__FILE__).'/config/tcpdf_config.php');
+
+// includes some support files
+
+/**
+ * unicode data
+ */
+// only included if unicode
+//include_once(dirname(__FILE__)."/unicode_data2.php");
+
+/**
+ * html colors table
+ */
+require_once(dirname(__FILE__).'/htmlcolors.php');
+
+/**
+ * barcode class
+ */
+require_once(dirname(__FILE__)."/barcodes.php");
+
+/**
+ * HTML entity decode functions
+ */
+require_once(dirname(__FILE__)."/html_entity_decode_php4.php");
+
+if (!class_exists('TCPDF')) {
+       /**
+        * define default PDF document producer
+        */
+       define('PDF_PRODUCER','TCPDF 4.0.017_PHP4 (http://www.tcpdf.org)');
+
+       /**
+       * This is a PHP class for generating PDF documents without requiring external extensions.<br>
+       * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
+       * @name TCPDF
+       * @package com.tecnick.tcpdf
+       * @version 4.0.017_PHP4
+       * @author Nicola Asuni - info@tecnick.com
+       * @link http://www.tcpdf.org
+       * @license http://www.gnu.org/copyleft/lesser.html LGPL
+       */
+       class TCPDF {
+               // protected or Protected properties
+
+               /**
+               * @var current page number
+               * @access protected
+               */
+               var $page;
+
+               /**
+               * @var current object number
+               * @access protected
+               */
+               var $n;
+
+               /**
+               * @var array of object offsets
+               * @access protected
+               */
+               var $offsets;
+
+               /**
+               * @var buffer holding in-memory PDF
+               * @access protected
+               */
+               var $buffer;
+
+               /**
+               * @var array containing pages
+               * @access protected
+               */
+               var $pages = array();
+
+               /**
+               * @var current document state
+               * @access protected
+               */
+               var $state;
+
+               /**
+               * @var compression flag
+               * @access protected
+               */
+               var $compress;
+
+               /**
+               * @var current page orientation (P = Portrait, L = Landscape)
+               * @access protected
+               */
+               var $CurOrientation;
+
+               /**
+               * @var array that stores page dimensions.<ul><li>$this->pagedim[$this->page]['w'] => page_width_in_points</li><li>$this->pagedim[$this->page]['h'] => height</li><li>$this->pagedim[$this->page]['tm'] => top_margin</li><li>$this->pagedim[$this->page]['bm'] => bottom_margin</li><li>$this->pagedim[$this->page]['lm'] => left_margin</li><li>$this->pagedim[$this->page]['rm'] => right_margin</li><li>$this->pagedim[$this->page]['pb'] => auto_page_break</li><li>$this->pagedim[$this->page]['or'] => page_orientation</li></ul>
+               * @access protected
+               */
+               var $pagedim = array();
+
+               /**
+               * @var scale factor (number of points in user unit)
+               * @access protected
+               */
+               var $k;
+
+               /**
+               * @var width of page format in points
+               * @access protected
+               */
+               var $fwPt;
+
+               /**
+               * @var height of page format in points
+               * @access protected
+               */
+               var $fhPt;
+
+               /**
+               * @var current width of page in points
+               * @access protected
+               */
+               var $wPt;
+
+               /**
+               * @var current height of page in points
+               * @access protected
+               */
+               var $hPt;
+
+               /**
+               * @var current width of page in user unit
+               * @access protected
+               */
+               var $w;
+
+               /**
+               * @var current height of page in user unit
+               * @access protected
+               */
+               var $h;
+
+               /**
+               * @var left margin
+               * @access protected
+               */
+               var $lMargin;
+
+               /**
+               * @var top margin
+               * @access protected
+               */
+               var $tMargin;
+
+               /**
+               * @var right margin
+               * @access protected
+               */
+               var $rMargin;
+
+               /**
+               * @var page break margin
+               * @access protected
+               */
+               var $bMargin;
+
+               /**
+               * @var cell internal padding
+               * @access protected
+               */
+               var $cMargin;
+
+               /**
+               * @var cell internal padding (previous value)
+               * @access protected
+               */
+               var $oldcMargin;
+
+               /**
+               * @var current horizontal position in user unit for cell positioning
+               * @access protected
+               */
+               var $x;
+
+               /**
+               * @var current vertical position in user unit for cell positioning
+               * @access protected
+               */
+               var $y;
+
+               /**
+               * @var height of last cell printed
+               * @access protected
+               */
+               var $lasth;
+
+               /**
+               * @var line width in user unit
+               * @access protected
+               */
+               var $LineWidth;
+
+               /**
+               * @var array of standard font names
+               * @access protected
+               */
+               var $CoreFonts;
+
+               /**
+               * @var array of used fonts
+               * @access protected
+               */
+               var $fonts = array();
+
+               /**
+               * @var array of font files
+               * @access protected
+               */
+               var $FontFiles = array();
+
+               /**
+               * @var array of encoding differences
+               * @access protected
+               */
+               var $diffs = array();
+
+               /**
+               * @var array of used images
+               * @access protected
+               */
+               var $images = array();
+
+               /**
+               * @var array of links in pages
+               * @access protected
+               */
+               var $PageLinks = array();
+
+               /**
+               * @var array of internal links
+               * @access protected
+               */
+               var $links = array();
+
+               /**
+               * @var current font family
+               * @access protected
+               */
+               var $FontFamily;
+
+               /**
+               * @var current font style
+               * @access protected
+               */
+               var $FontStyle;
+
+               /**
+               * @var current font ascent (distance between font top and baseline)
+               * @access protected
+               * @since 2.8.000 (2007-03-29)
+               */
+               var $FontAscent;
+
+               /**
+               * @var current font descent (distance between font bottom and baseline)
+               * @access protected
+               * @since 2.8.000 (2007-03-29)
+               */
+               var $FontDescent;
+
+               /**
+               * @var underlining flag
+               * @access protected
+               */
+               var $underline;
+
+               /**
+               * @var current font info
+               * @access protected
+               */
+               var $CurrentFont;
+
+               /**
+               * @var current font size in points
+               * @access protected
+               */
+               var $FontSizePt;
+
+               /**
+               * @var current font size in user unit
+               * @access protected
+               */
+               var $FontSize;
+
+               /**
+               * @var commands for drawing color
+               * @access protected
+               */
+               var $DrawColor;
+
+               /**
+               * @var commands for filling color
+               * @access protected
+               */
+               var $FillColor;
+
+               /**
+               * @var commands for text color
+               * @access protected
+               */
+               var $TextColor;
+
+               /**
+               * @var indicates whether fill and text colors are different
+               * @access protected
+               */
+               var $ColorFlag;
+
+               /**
+               * @var word spacing
+               * @access protected
+               */
+               var $ws;
+
+               /**
+               * @var automatic page breaking
+               * @access protected
+               */
+               var $AutoPageBreak;
+
+               /**
+               * @var threshold used to trigger page breaks
+               * @access protected
+               */
+               var $PageBreakTrigger;
+
+               /**
+               * @var flag set when processing footer
+               * @access protected
+               */
+               var $InFooter;
+
+               /**
+               * @var zoom display mode
+               * @access protected
+               */
+               var $ZoomMode;
+
+               /**
+               * @var layout display mode
+               * @access protected
+               */
+               var $LayoutMode;
+
+               /**
+               * @var title
+               * @access protected
+               */
+               var $title;
+
+               /**
+               * @var subject
+               * @access protected
+               */
+               var $subject;
+
+               /**
+               * @var author
+               * @access protected
+               */
+               var $author;
+
+               /**
+               * @var keywords
+               * @access protected
+               */
+               var $keywords;
+
+               /**
+               * @var creator
+               * @access protected
+               */
+               var $creator;
+
+               /**
+               * @var alias for total number of pages
+               * @access protected
+               */
+               var $AliasNbPages;
+
+               /**
+               * @var right-bottom corner X coordinate of inserted image
+               * @since 2002-07-31
+               * @author Nicola Asuni
+               * @access protected
+               */
+               var $img_rb_x;
+
+               /**
+               * @var right-bottom corner Y coordinate of inserted image
+               * @since 2002-07-31
+               * @author Nicola Asuni
+               * @access protected
+               */
+               var $img_rb_y;
+
+               /**
+               * @var image scale factor
+               * @since 2004-06-14
+               * @author Nicola Asuni
+               * @access protected
+               */
+               var $imgscale = 1;
+
+               /**
+               * @var boolean set to true when the input text is unicode (require unicode fonts)
+               * @since 2005-01-02
+               * @author Nicola Asuni
+               * @access protected
+               */
+               var $isunicode = false;
+
+               /**
+               * @var PDF version
+               * @since 1.5.3
+               * @access protected
+               */
+               var $PDFVersion = "1.7";
+
+
+               // ----------------------
+
+               /**
+                * @var Minimum distance between header and top page margin.
+                * @access protected
+                */
+               var $header_margin;
+
+               /**
+                * @var Minimum distance between footer and bottom page margin.
+                * @access protected
+                */
+               var $footer_margin;
+
+               /**
+                * @var original left margin value
+                * @access protected
+                * @since 1.53.0.TC013
+                */
+               var $original_lMargin;
+
+               /**
+                * @var original right margin value
+                * @access protected
+                * @since 1.53.0.TC013
+                */
+               var $original_rMargin;
+
+               /**
+                * @var Header font.
+                * @access protected
+                */
+               var $header_font;
+
+               /**
+                * @var Footer font.
+                * @access protected
+                */
+               var $footer_font;
+
+               /**
+                * @var Language templates.
+                * @access protected
+                */
+               var $l;
+
+               /**
+                * @var Barcode to print on page footer (only if set).
+                * @access protected
+                */
+               var $barcode = false;
+
+               /**
+                * @var If true prints header
+                * @access protected
+                */
+               var $print_header = true;
+
+               /**
+                * @var If true prints footer.
+                * @access protected
+                */
+               var $print_footer = true;
+
+               /**
+                * @var Header image logo.
+                * @access protected
+                */
+               var $header_logo = "";
+
+               /**
+                * @var Header image logo width in mm.
+                * @access protected
+                */
+               var $header_logo_width = 30;
+
+               /**
+                * @var String to print as title on document header.
+                * @access protected
+                */
+               var $header_title = "";
+
+               /**
+                * @var String to print on document header.
+                * @access protected
+                */
+               var $header_string = "";
+
+               /**
+                * @var Default number of columns for html table.
+                * @access protected
+                */
+               var $default_table_columns = 4;
+
+
+               // variables for html parser
+
+               /**
+                * @var HTML PARSER: store current link.
+                * @access protected
+                */
+               var $HREF;
+
+               /**
+                * @var store available fonts list.
+                * @access protected
+                */
+               var $fontlist = array();
+
+               /**
+                * @var current foreground color
+                * @access protected
+                */
+               var $fgcolor;
+
+               /**
+                * @var HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise.
+                * @access protected
+                */
+               var $listordered = array();
+
+               /**
+                * @var HTML PARSER: array count list items on nested lists.
+                * @access protected
+                */
+               var $listcount = array();
+
+               /**
+                * @var HTML PARSER: current list nesting level.
+                * @access protected
+                */
+               var $listnum = 0;
+
+               /**
+                * @var HTML PARSER: indent amount for lists.
+                * @access protected
+                */
+               var $listindent;
+
+               /**
+                * @var current background color
+                * @access protected
+                */
+               var $bgcolor;
+
+               /**
+                * @var Store temporary font size in points.
+                * @access protected
+                */
+               var $tempfontsize = 10;
+
+               /**
+                * @var Bold font style status.
+                * @access protected
+                */
+               var $b;
+
+               /**
+                * @var Underlined font style status.
+                * @access protected
+                */
+               var $u;
+
+               /**
+                * @var Italic font style status.
+                * @access protected
+                */
+               var $i;
+
+               /**
+                * @var Line through font style status.
+                * @access protected
+                * @since 2.8.000 (2008-03-19)
+                */
+               var $d;
+
+               /**
+                * @var spacer for LI tags.
+                * @access protected
+                */
+               var $lispacer = "";
+
+               /**
+                * @var default encoding
+                * @access protected
+                * @since 1.53.0.TC010
+                */
+               var $encoding = "UTF-8";
+
+               /**
+                * @var PHP internal encoding
+                * @access protected
+                * @since 1.53.0.TC016
+                */
+               var $internal_encoding;
+
+               /**
+                * @var indicates if the document language is Right-To-Left
+                * @access protected
+                * @since 2.0.000
+                */
+               var $rtl = false;
+
+               /**
+                * @var used to force RTL or LTR string inversion
+                * @access protected
+                * @since 2.0.000
+                */
+               var $tmprtl = false;
+
+               // --- Variables used for document encryption:
+
+               /**
+                * Indicates whether document is protected
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $encrypted;
+
+               /**
+                * U entry in pdf document
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $Uvalue;
+
+               /**
+                * O entry in pdf document
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $Ovalue;
+
+               /**
+                * P entry in pdf document
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $Pvalue;
+
+               /**
+                * encryption object id
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $enc_obj_id;
+
+               /**
+                * last RC4 key encrypted (cached for optimisation)
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $last_rc4_key;
+
+               /**
+                * last RC4 computed key
+                * @access protected
+                * @since 2.0.000 (2008-01-02)
+                */
+               var $last_rc4_key_c;
+
+               // --- bookmark ---
+
+               /**
+                * Outlines for bookmark
+                * @access protected
+                * @since 2.1.002 (2008-02-12)
+                */
+               var $outlines = array();
+
+               /**
+                * Outline root for bookmark
+                * @access protected
+                * @since 2.1.002 (2008-02-12)
+                */
+               var $OutlineRoot;
+
+
+               // --- javascript and form ---
+
+               /**
+                * javascript code
+                * @access protected
+                * @since 2.1.002 (2008-02-12)
+                */
+               var $javascript = "";
+
+               /**
+                * javascript counter
+                * @access protected
+                * @since 2.1.002 (2008-02-12)
+                */
+               var $n_js;
+
+               /**
+                * line trough state
+                * @access protected
+                * @since 2.8.000 (2008-03-19)
+                */
+               var $linethrough;
+
+               // --- Variables used for User's Rights ---
+               // See PDF reference chapter 8.7 Digital Signatures
+
+               /**
+                * If true enables user's rights on PDF reader
+                * @access protected
+                * @since 2.9.000 (2008-03-26)
+                */
+               var $ur;
+
+               /**
+                * Names specifying additional document-wide usage rights for the document.
+                * @access protected
+                * @since 2.9.000 (2008-03-26)
+                */
+               var $ur_document;
+
+               /**
+                * Names specifying additional annotation-related usage rights for the document.
+                * @access protected
+                * @since 2.9.000 (2008-03-26)
+                */
+               var $ur_annots;
+
+               /**
+                * Names specifying additional form-field-related usage rights for the document.
+                * @access protected
+                * @since 2.9.000 (2008-03-26)
+                */
+               var $ur_form;
+
+               /**
+                * Names specifying additional signature-related usage rights for the document.
+                * @access protected
+                * @since 2.9.000 (2008-03-26)
+                */
+               var $ur_signature;
+
+               /**
+                * Dot Per Inch Document Resolution (do not change)
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $dpi = 72;
+
+               /**
+                * Indicates whether a new page group was requested
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $newpagegroup;
+
+               /**
+                * Contains the number of pages of the groups
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $pagegroups;
+
+               /**
+                * Contains the alias of the current page group
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $currpagegroup;
+
+               /**
+                * Restrict the rendering of some elements to screen or printout.
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $visibility="all";
+
+               /**
+                * Print visibility.
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $n_ocg_print;
+
+               /**
+                * View visibility.
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $n_ocg_view;
+
+               /**
+                * Array of transparency objects and parameters.
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $extgstates;
+
+               /**
+                * Set the default JPEG compression quality (1-100)
+                * @access protected
+                * @since 3.0.000 (2008-03-27)
+                */
+               var $jpeg_quality;
+
+               /**
+                * Default cell height ratio.
+                * @access protected
+                * @since 3.0.014 (2008-05-23)
+                */
+               var $cell_height_ratio = K_CELL_HEIGHT_RATIO;
+
+               /**
+                * PDF viewer preferences.
+                * @access protected
+                * @since 3.1.000 (2008-06-09)
+                */
+               var $viewer_preferences;
+
+               /**
+                * A name object specifying how the document should be displayed when opened.
+                * @access protected
+                * @since 3.1.000 (2008-06-09)
+                */
+               var $PageMode;
+
+               /**
+                * Array for storing gradient information.
+                * @access protected
+                * @since 3.1.000 (2008-06-09)
+                */
+               var $gradients = array();
+
+               /**
+                * Array used to store positions inside the pages buffer.
+                * keys are the page numbers
+                * @access protected
+                * @since 3.2.000 (2008-06-26)
+                */
+               var $intmrk = array();
+
+               /**
+                * Array used to store footer positions of each page.
+                * @access protected
+                * @since 3.2.000 (2008-07-01)
+                */
+               var $footerpos = array();
+
+
+               /**
+                * Array used to store footer lenght of each page.
+                * @access protected
+                * @since 4.0.014 (2008-07-29)
+                */
+               var $footerlen = array();
+
+               /**
+                * True if a newline is created.
+                * @access protected
+                * @since 3.2.000 (2008-07-01)
+                */
+               var $newline = true;
+
+               /**
+                * End position of the latest inserted line
+                * @access protected
+                * @since 3.2.000 (2008-07-01)
+                */
+               var $endlinex = 0;
+
+               /**
+                * PDF string for last line width
+                * @access protected
+                * @since 4.0.006 (2008-07-16)
+                */
+               var $linestyleWidth = "";
+
+               /**
+                * PDF string for last line width
+                * @access protected
+                * @since 4.0.006 (2008-07-16)
+                */
+               var $linestyleCap = "0 J";
+
+               /**
+                * PDF string for last line width
+                * @access protected
+                * @since 4.0.006 (2008-07-16)
+                */
+               var $linestyleJoin = "0 j";
+
+               /**
+                * PDF string for last line width
+                * @access protected
+                * @since 4.0.006 (2008-07-16)
+                */
+               var $linestyleDash = "[] 0 d";
+
+               /**
+                * True if marked-content sequence is open
+                * @access protected
+                * @since 4.0.013 (2008-07-28)
+                */
+               var $openMarkedContent = false;
+
+               //------------------------------------------------------------
+               // METHODS
+               //------------------------------------------------------------
+
+               /**
+                * This is the class constructor.
+                * It allows to set up the page format, the orientation and
+                * the measure unit used in all the methods (except for the font sizes).
+                * @since 1.0
+                * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or Portrait (default)</li><li>L or Landscape</li></ul>
+                * @param string $unit User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+                * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+                * @param boolean $unicode TRUE means that the input text is unicode (default = true)
+                * @param String $encoding charset encoding; default is UTF-8
+                */
+               function TCPDF($orientation='P', $unit='mm', $format='A4', $uni=true, $encoding="UTF-8") {
+                       if ($uni) // Fix for FrontAccounting
+                       {
+                               global $unicode, $unicode_mirror, $unicode_arlet, $laa_array, $diacritics;
+                               include_once(dirname(__FILE__)."/unicode_data2.php");
+                       }
+                       /* Set internal character encoding to ASCII */
+                       if (function_exists("mb_internal_encoding") AND mb_internal_encoding()) {
+                               $this->internal_encoding = mb_internal_encoding();
+                               mb_internal_encoding("ASCII");
+                       }
+                       // set language direction
+                       $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false;
+                       $this->tmprtl = false;
+                       //Some checks
+                       $this->_dochecks();
+                       //Initialization of properties
+                       $this->isunicode = $uni;
+                       $this->page = 0;
+                       $this->pagedim = array();
+                       $this->n = 2;
+                       $this->buffer = '';
+                       $this->pages = array();
+                       $this->state = 0;
+                       $this->fonts = array();
+                       $this->FontFiles = array();
+                       $this->diffs = array();
+                       $this->images = array();
+                       $this->links = array();
+                       $this->gradients = array();
+                       $this->InFooter = false;
+                       $this->lasth = 0;
+                       $this->FontFamily = 'helvetica';
+                       $this->FontStyle = '';
+                       $this->FontSizePt = 12;
+                       $this->underline = false;
+                       $this->linethrough = false;
+                       $this->DrawColor = '0 G';
+                       $this->FillColor = '0 g';
+                       $this->TextColor = '0 g';
+                       $this->ColorFlag = false;
+                       $this->ws = 0;
+                       // encryption values
+                       $this->encrypted = false;
+                       $this->last_rc4_key = '';
+                       $this->padding = "\x28\xBF\x4E\x5E\x4E\x75\x8A\x41\x64\x00\x4E\x56\xFF\xFA\x01\x08\x2E\x2E\x00\xB6\xD0\x68\x3E\x80\x2F\x0C\xA9\xFE\x64\x53\x69\x7A";
+                       //Standard Unicode fonts
+                       $this->CoreFonts = array(
+                               'courier'=>'Courier',
+                               'courierB'=>'Courier-Bold',
+                               'courierI'=>'Courier-Oblique',
+                               'courierBI'=>'Courier-BoldOblique',
+                               'helvetica'=>'Helvetica',
+                               'helveticaB'=>'Helvetica-Bold',
+                               'helveticaI'=>'Helvetica-Oblique',
+                               'helveticaBI'=>'Helvetica-BoldOblique',
+                               'times'=>'Times-Roman',
+                               'timesB'=>'Times-Bold',
+                               'timesI'=>'Times-Italic',
+                               'timesBI'=>'Times-BoldItalic',
+                               'symbol'=>'Symbol',
+                               'zapfdingbats'=>'ZapfDingbats'
+                       );
+                       //Set scale factor
+                       $this->setPageUnit($unit);
+                       // set page format and orientation
+                       $this->setPageFormat($format, $orientation);
+                       //Page margins (1 cm)
+                       $margin = 28.35 / $this->k;
+                       $this->SetMargins($margin,$margin);
+                       //Interior cell margin (1 mm)
+                       $this->cMargin = $margin / 10;
+                       //Line width (0.2 mm)
+                       $this->LineWidth = 0.57 / $this->k;
+                       $this->linestyleWidth = sprintf('%.2f w', ($this->LineWidth * $this->k));
+                       $this->linestyleCap = "0 J";
+                       $this->linestyleJoin = "0 j";
+                       $this->linestyleDash = "[] 0 d";
+                       //Automatic page break
+                       $this->SetAutoPageBreak(true, 2*$margin);
+                       //Full width display mode
+                       $this->SetDisplayMode('fullwidth');
+                       //Compression
+                       $this->SetCompression(true);
+                       //Set default PDF version number
+                       $this->PDFVersion = "1.7";
+                       $this->encoding = $encoding;
+                       $this->HREF = '';
+                       $this->getFontsList();
+                       $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0);
+                       $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255);
+                       $this->extgstates = array();
+                       // user's rights
+                       $this->ur = false;
+                       $this->ur_document = "/FullSave";
+                       $this->ur_annots = "/Create/Delete/Modify/Copy/Import/Export";
+                       $this->ur_form = "/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate";
+                       $this->ur_signature = "/Modify";
+                       // set default JPEG quality
+                       $this->jpeg_quality = 75;
+                       // initialize some settings
+                       $this->utf8Bidi(array(""));
+               }
+
+               /**
+                * Default destructor.
+                * @since 1.53.0.TC016
+                */
+               function TCPDFDestruct() {
+                       // restore internal encoding
+                       if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
+                               mb_internal_encoding($this->internal_encoding);
+                       }
+               }
+
+               /**
+               * Set the units of measure for the document.
+               * @param string $unit User measure unit. Possible values are:<ul><li>pt: point</li><li>mm: millimeter (default)</li><li>cm: centimeter</li><li>in: inch</li></ul><br />A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit.
+               * @since 3.0.015 (2008-06-06)
+               */
+               function setPageUnit($unit) {
+               //Set scale factor
+                       switch (strtolower($unit)) {
+                               // points
+                               case 'pt': {
+                                       $this->k = 1;
+                                       break;
+                               }
+                               // millimeters
+                               case 'mm': {
+                                       $this->k = $this->dpi / 25.4;
+                                       break;
+                               }
+                               // centimeters
+                               case 'cm': {
+                                       $this->k = $this->dpi / 2.54;
+                                       break;
+                               }
+                               // inches
+                               case 'in': {
+                                       $this->k = $this->dpi;
+                                       break;
+                               }
+                               // unsupported unit
+                               default : {
+                                       $this->Error('Incorrect unit: '.$unit);
+                                       break;
+                               }
+                       }
+                       if (isset($this->CurOrientation)) {
+                                       $this->setPageOrientation($this->CurOrientation);
+                       }
+               }
+
+               /**
+               * Set the page format
+               * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+               * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+               * @since 3.0.015 (2008-06-06)
+               */
+               function setPageFormat($format, $orientation="P") {
+                       //Page format
+                       if (is_string($format)) {
+                               // Page formats (45 standard ISO paper formats and 4 american common formats).
+                               // Paper cordinates are calculated in this way: (inches * 72) where (1 inch = 2.54 cm)
+                               switch (strtoupper($format)){
+                                       case '4A0': {$format = array(4767.87,6740.79); break;}
+                                       case '2A0': {$format = array(3370.39,4767.87); break;}
+                                       case 'A0': {$format = array(2383.94,3370.39); break;}
+                                       case 'A1': {$format = array(1683.78,2383.94); break;}
+                                       case 'A2': {$format = array(1190.55,1683.78); break;}
+                                       case 'A3': {$format = array(841.89,1190.55); break;}
+                                       case 'A4': default: {$format = array(595.28,841.89); break;}
+                                       case 'A5': {$format = array(419.53,595.28); break;}
+                                       case 'A6': {$format = array(297.64,419.53); break;}
+                                       case 'A7': {$format = array(209.76,297.64); break;}
+                                       case 'A8': {$format = array(147.40,209.76); break;}
+                                       case 'A9': {$format = array(104.88,147.40); break;}
+                                       case 'A10': {$format = array(73.70,104.88); break;}
+                                       case 'B0': {$format = array(2834.65,4008.19); break;}
+                                       case 'B1': {$format = array(2004.09,2834.65); break;}
+                                       case 'B2': {$format = array(1417.32,2004.09); break;}
+                                       case 'B3': {$format = array(1000.63,1417.32); break;}
+                                       case 'B4': {$format = array(708.66,1000.63); break;}
+                                       case 'B5': {$format = array(498.90,708.66); break;}
+                                       case 'B6': {$format = array(354.33,498.90); break;}
+                                       case 'B7': {$format = array(249.45,354.33); break;}
+                                       case 'B8': {$format = array(175.75,249.45); break;}
+                                       case 'B9': {$format = array(124.72,175.75); break;}
+                                       case 'B10': {$format = array(87.87,124.72); break;}
+                                       case 'C0': {$format = array(2599.37,3676.54); break;}
+                                       case 'C1': {$format = array(1836.85,2599.37); break;}
+                                       case 'C2': {$format = array(1298.27,1836.85); break;}
+                                       case 'C3': {$format = array(918.43,1298.27); break;}
+                                       case 'C4': {$format = array(649.13,918.43); break;}
+                                       case 'C5': {$format = array(459.21,649.13); break;}
+                                       case 'C6': {$format = array(323.15,459.21); break;}
+                                       case 'C7': {$format = array(229.61,323.15); break;}
+                                       case 'C8': {$format = array(161.57,229.61); break;}
+                                       case 'C9': {$format = array(113.39,161.57); break;}
+                                       case 'C10': {$format = array(79.37,113.39); break;}
+                                       case 'RA0': {$format = array(2437.80,3458.27); break;}
+                                       case 'RA1': {$format = array(1729.13,2437.80); break;}
+                                       case 'RA2': {$format = array(1218.90,1729.13); break;}
+                                       case 'RA3': {$format = array(864.57,1218.90); break;}
+                                       case 'RA4': {$format = array(609.45,864.57); break;}
+                                       case 'SRA0': {$format = array(2551.18,3628.35); break;}
+                                       case 'SRA1': {$format = array(1814.17,2551.18); break;}
+                                       case 'SRA2': {$format = array(1275.59,1814.17); break;}
+                                       case 'SRA3': {$format = array(907.09,1275.59); break;}
+                                       case 'SRA4': {$format = array(637.80,907.09); break;}
+                                       case 'LETTER': {$format = array(612.00,792.00); break;}
+                                       case 'LEGAL': {$format = array(612.00,1008.00); break;}
+                                       case 'EXECUTIVE': {$format = array(521.86,756.00); break;}
+                                       case 'FOLIO': {$format = array(612.00,936.00); break;}
+                               }
+                               $this->fwPt = $format[0];
+                               $this->fhPt = $format[1];
+                       }
+                       else {
+                               $this->fwPt = $format[0] * $this->k;
+                               $this->fhPt = $format[1] * $this->k;
+                       }
+                       $this->setPageOrientation($orientation);
+               }
+
+
+               /**
+               * Set page orientation.
+               * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+               * @param boolean $autopagebreak Boolean indicating if auto-page-break mode should be on or off.
+               * @param float $bottommargin bottom margin of the page.
+               * @since 3.0.015 (2008-06-06)
+               */
+               function setPageOrientation($orientation, $autopagebreak='', $bottommargin='') {
+                       $orientation = strtoupper($orientation);
+                       if (($orientation == 'P') OR ($orientation == 'PORTRAIT')) {
+                               $this->CurOrientation = 'P';
+                               $this->wPt = $this->fwPt;
+                               $this->hPt = $this->fhPt;
+                       } elseif (($orientation == 'L') OR ($orientation == 'LANDSCAPE')) {
+                               $this->CurOrientation = 'L';
+                               $this->wPt = $this->fhPt;
+                               $this->hPt = $this->fwPt;
+                       }
+                       else {
+                               $this->Error('Incorrect orientation: '.$orientation);
+                       }
+                       $this->w = $this->wPt / $this->k;
+                       $this->h = $this->hPt / $this->k;
+                       if (empty($autopagebreak)) {
+                               if (isset($this->AutoPageBreak)) {
+                                       $autopagebreak = $this->AutoPageBreak;
+                               } else {
+                                       $autopagebreak = true;
+                               }
+                       }
+                       if (empty($bottommargin)) {
+                               if (isset($this->bMargin)) {
+                                       $bottommargin = $this->bMargin;
+                               } else {
+                                       // default value = 2 cm
+                                       $bottommargin = 2 * 28.35 / $this->k;
+                               }
+                       }
+                       $this->SetAutoPageBreak($autopagebreak, $bottommargin);
+                       // store page dimensions
+                       $this->pagedim[$this->page] = array('w' => $this->wPt, 'h' => $this->hPt, 'tm' => $this->tMargin, 'bm' => $bottommargin, 'lm' => $this->lMargin, 'rm' => $this->rMargin, 'pb' => $autopagebreak, 'or' => $this->CurOrientation);
+               }
+
+               /**
+                * Enable or disable Right-To-Left language mode
+                * @param Boolean $enable if true enable Right-To-Left language mode.
+                * @since 2.0.000 (2008-01-03)
+                */
+               function setRTL($enable) {
+                       $this->rtl = $enable ? true : false;
+                       $this->tmprtl = false;
+               }
+
+               /**
+                * Return the RTL status
+                * @return boolean
+                * @since 4.0.012 (2008-07-24)
+                */
+               function getRTL() {
+                       return $this->rtl;
+               }
+
+               /**
+               * Force temporary RTL language direction
+               * @param mixed $mode can be false, 'L' for LTR or 'R' for RTL
+               * @since 2.1.000 (2008-01-09)
+               */
+               function setTempRTL($mode) {
+                       switch ($mode) {
+                               case false:
+                               case 'L':
+                               case 'R': {
+                                       $this->tmprtl = $mode;
+                               }
+                       }
+               }
+
+               /**
+               * Set the last cell height.
+               * @param float $h cell height.
+               * @author Nicola Asuni
+               * @since 1.53.0.TC034
+               */
+               function setLastH($h) {
+                       $this->lasth = $h;
+               }
+
+               /**
+               * Get the last cell height.
+               * @return last cell height
+               * @since 4.0.017 (2008-08-05)
+               */
+               function getLastH() {
+                       return $this->lasth;
+               }
+
+               /**
+               * Set the image scale.
+               * @param float $scale image scale.
+               * @author Nicola Asuni
+               * @since 1.5.2
+               */
+               function setImageScale($scale) {
+                       $this->imgscale = $scale;
+               }
+
+               /**
+               * Returns the image scale.
+               * @return float image scale.
+               * @author Nicola Asuni
+               * @since 1.5.2
+               */
+               function getImageScale() {
+                       return $this->imgscale;
+               }
+
+               /**
+               * Returns the page width in units.
+               * @return int page width.
+               * @author Nicola Asuni
+               * @since 1.5.2
+               */
+               function getPageWidth() {
+                       return $this->w;
+               }
+
+               /**
+               * Returns the page height in units.
+               * @return int page height.
+               * @author Nicola Asuni
+               * @since 1.5.2
+               */
+               function getPageHeight() {
+                       return $this->h;
+               }
+
+               /**
+               * Returns the page break margin.
+               * @return int page break margin.
+               * @author Nicola Asuni
+               * @since 1.5.2
+               */
+               function getBreakMargin() {
+                       return $this->bMargin;
+               }
+
+               /**
+               * Returns the scale factor (number of points in user unit).
+               * @return int scale factor.
+               * @author Nicola Asuni
+               * @since 1.5.2
+               */
+               function getScaleFactor() {
+                       return $this->k;
+               }
+
+               /**
+               * Defines the left, top and right margins. By default, they equal 1 cm. Call this method to change them.
+               * @param float $left Left margin.
+               * @param float $top Top margin.
+               * @param float $right Right margin. Default value is the left one.
+               * @since 1.0
+               * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak()
+               */
+               function SetMargins($left, $top, $right=-1) {
+                       //Set left, top and right margins
+                       $this->lMargin = $left;
+                       $this->tMargin = $top;
+                       if ($right == -1) {
+                               $right = $left;
+                       }
+                       $this->rMargin = $right;
+               }
+
+               /**
+               * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin.
+               * @param float $margin The margin.
+               * @since 1.4
+               * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+               */
+               function SetLeftMargin($margin) {
+                       //Set left margin
+                       $this->lMargin=$margin;
+                       if (($this->page > 0) AND ($this->x < $margin)) {
+                               $this->x = $margin;
+                       }
+               }
+
+               /**
+               * Defines the top margin. The method can be called before creating the first page.
+               * @param float $margin The margin.
+               * @since 1.5
+               * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins()
+               */
+               function SetTopMargin($margin) {
+                       //Set top margin
+                       $this->tMargin=$margin;
+                       if (($this->page > 0) AND ($this->y < $margin)) {
+                               $this->y = $margin;
+                       }
+               }
+
+               /**
+               * Defines the right margin. The method can be called before creating the first page.
+               * @param float $margin The margin.
+               * @since 1.5
+               * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
+               */
+               function SetRightMargin($margin) {
+                       $this->rMargin=$margin;
+                       if (($this->page > 0) AND ($this->x > ($this->w - $margin))) {
+                               $this->x = $this->w - $margin;
+                       }
+               }
+
+               /**
+               * Set the internal Cell padding.
+               * @param float $pad internal padding.
+               * @since 2.1.000 (2008-01-09)
+               * @see Cell(), SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins()
+               */
+               function SetCellPadding($pad) {
+                       $this->cMargin = $pad;
+               }
+
+               /**
+               * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm.
+               * @param boolean $auto Boolean indicating if mode should be on or off.
+               * @param float $margin Distance from the bottom of the page.
+               * @since 1.0
+               * @see Cell(), MultiCell(), AcceptPageBreak()
+               */
+               function SetAutoPageBreak($auto, $margin=0) {
+                       //Set auto page break mode and triggering margin
+                       $this->AutoPageBreak = $auto;
+                       $this->bMargin = $margin;
+                       $this->PageBreakTrigger = $this->h - $margin;
+               }
+
+               /**
+               * Defines the way the document is to be displayed by the viewer.
+               * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use. <ul><li>fullpage: displays the entire page on screen </li><li>fullwidth: uses maximum width of window</li><li>real: uses real size (equivalent to 100% zoom)</li><li>default: uses viewer default mode</li></ul>
+               * @param string $layout The page layout. Possible values are:<ul><li>SinglePage Display one page at a time</li><li>OneColumn Display the pages in one column</li><li>TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left</li><li>TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right</li><li>TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left</li><li>TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right</li></ul>
+               * @param string $mode A name object specifying how the document should be displayed when opened:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible</li><li>UseOC (PDF 1.5) Optional content group panel visible</li><li>UseAttachments (PDF 1.6) Attachments panel visible</li></ul>
+               * @since 1.2
+               */
+               function SetDisplayMode($zoom, $layout='SinglePage', $mode="UseNone") {
+                       //Set display mode in viewer
+                       if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) {
+                               $this->ZoomMode = $zoom;
+                       } else {
+                               $this->Error('Incorrect zoom display mode: '.$zoom);
+                       }
+                       switch ($layout) {
+                               case "default":
+                               case "single":
+                               case "SinglePage": {
+                                       $this->LayoutMode = "SinglePage";
+                                       break;
+                               }
+                               case "continuous":
+                               case "OneColumn": {
+                                       $this->LayoutMode = "OneColumn";
+                                       break;
+                               }
+                               case "two":
+                               case "TwoColumnLeft": {
+                                       $this->LayoutMode = "TwoColumnLeft";
+                                       break;
+                               }
+                               case "TwoColumnRight": {
+                                       $this->LayoutMode = "TwoColumnRight";
+                                       break;
+                               }
+                               case "TwoPageLeft": {
+                                       $this->LayoutMode = "TwoPageLeft";
+                                       break;
+                               }
+                               case "TwoPageRight": {
+                                       $this->LayoutMode = "TwoPageRight";
+                                       break;
+                               }
+                               default: {
+                                       $this->LayoutMode = "SinglePage";
+                               }
+                       }
+                       switch ($mode) {
+                               case "UseNone": {
+                                       $this->PageMode = "UseNone";
+                                       break;
+                               }
+                               case "UseOutlines": {
+                                       $this->PageMode = "UseOutlines";
+                                       break;
+                               }
+                               case "UseThumbs": {
+                                       $this->PageMode = "UseThumbs";
+                                       break;
+                               }
+                               case "FullScreen": {
+                                       $this->PageMode = "FullScreen";
+                                       break;
+                               }
+                               case "UseOC": {
+                                       $this->PageMode = "UseOC";
+                                       break;
+                               }
+                               case "": {
+                                       $this->PageMode = "UseAttachments";
+                                       break;
+                               }
+                               default: {
+                                       $this->PageMode = "UseNone";
+                               }
+                       }
+               }
+
+               /**
+               * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default.
+               * Note: the Zlib extension is required for this feature. If not present, compression will be turned off.
+               * @param boolean $compress Boolean indicating if compression must be enabled.
+               * @since 1.4
+               */
+               function SetCompression($compress) {
+                       //Set page compression
+                       if (function_exists('gzcompress')) {
+                               $this->compress = $compress;
+                       } else {
+                               $this->compress = false;
+                       }
+               }
+
+               /**
+               * Defines the title of the document.
+               * @param string $title The title.
+               * @since 1.2
+               * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject()
+               */
+               function SetTitle($title) {
+                       //Title of document
+                       $this->title = $title;
+               }
+
+               /**
+               * Defines the subject of the document.
+               * @param string $subject The subject.
+               * @since 1.2
+               * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle()
+               */
+               function SetSubject($subject) {
+                       //Subject of document
+                       $this->subject = $subject;
+               }
+
+               /**
+               * Defines the author of the document.
+               * @param string $author The name of the author.
+               * @since 1.2
+               * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle()
+               */
+               function SetAuthor($author) {
+                       //Author of document
+                       $this->author = $author;
+               }
+
+               /**
+               * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'.
+               * @param string $keywords The list of keywords.
+               * @since 1.2
+               * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle()
+               */
+               function SetKeywords($keywords) {
+                       //Keywords of document
+                       $this->keywords = $keywords;
+               }
+
+               /**
+               * Defines the creator of the document. This is typically the name of the application that generates the PDF.
+               * @param string $creator The name of the creator.
+               * @since 1.2
+               * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle()
+               */
+               function SetCreator($creator) {
+                       //Creator of document
+                       $this->creator = $creator;
+               }
+
+               /**
+               * Defines an alias for the total number of pages. It will be substituted as the document is closed.<br />
+               * <b>Example:</b><br />
+               * <pre>
+               *               $this->Cell(0,10,'Page '.$pdf->PageNo().'/{nb}',0,0,'C');
+               * </pre>
+               * @param string $alias The alias. Default value: {nb}.
+               * @since 1.4
+               * @see PageNo(), Footer()
+               */
+               function AliasNbPages($alias='{nb}') {
+                       //Define an alias for total number of pages
+                       $this->AliasNbPages = $this->_escapetext($alias);
+               }
+
+               /**
+               * This method is automatically called in case of fatal error; it simply outputs the message and halts the execution. An inherited class may override it to customize the error handling but should always halt the script, or the resulting document would probably be invalid.
+               * 2004-06-11 :: Nicola Asuni : changed bold tag with strong
+               * @param string $msg The error message
+               * @since 1.0
+               */
+               function Error($msg) {
+                       //Fatal error
+                       die('<strong>TCPDF error: </strong>'.$msg);
+               }
+
+               /**
+               * This method begins the generation of the PDF document. It is not necessary to call it explicitly because AddPage() does it automatically.
+               * Note: no page is created by this method
+               * @since 1.0
+               * @see AddPage(), Close()
+               */
+               function Open() {
+                       //Begin document
+                       $this->state = 1;
+               }
+
+               /**
+               * Terminates the PDF document. It is not necessary to call this method explicitly because Output() does it automatically. If the document contains no page, AddPage() is called to prevent from getting an invalid document.
+               * @since 1.0
+               * @see Open(), Output()
+               */
+               function Close() {
+                       //Terminate document
+                       if ($this->state == 3) {
+                               return;
+                       }
+                       if ($this->page == 0) {
+                               $this->AddPage();
+                       }
+                       //Page footer
+                       $this->setFooter();
+                       //Close page
+                       $this->_endpage();
+                       //Close document
+                       $this->_enddoc();
+               }
+
+               /**
+               * Move pointer at the specified document page and update page dimensions.
+               * @param int $pnum page number
+               * @param boolean $resetmargins if true reset left, right, top margins and Y position.
+               * @since 2.1.000 (2008-01-07)
+               * @see getPage(), lastpage(), getNumPages()
+               */
+               function setPage($pnum, $resetmargins=false) {
+                       if (($pnum > 0) AND ($pnum <= count($this->pages))) {
+                               $this->page = $pnum;
+                               $this->wPt = $this->pagedim[$this->page]['w'];
+                               $this->hPt = $this->pagedim[$this->page]['h'];
+                               $this->w = $this->wPt / $this->k;
+                               $this->h = $this->hPt / $this->k;
+                               $this->tMargin = $this->pagedim[$this->page]['tm'];
+                               $this->bMargin = $this->pagedim[$this->page]['bm'];
+                               $this->AutoPageBreak = $this->pagedim[$this->page]['pb'];
+                               $this->CurOrientation = $this->pagedim[$this->page]['or'];
+                               $this->SetAutoPageBreak($this->AutoPageBreak, $this->bMargin);
+                               if ($resetmargins) {
+                                       $this->lMargin = $this->pagedim[$this->page]['lm'];
+                                       $this->rMargin = $this->pagedim[$this->page]['rm'];
+                                       $this->SetY($this->tMargin);
+                               }
+                       } else {
+                               $this->Error('Wrong page number on setPage() function.');
+                       }
+               }
+
+               /**
+               * Reset pointer to the last document page.
+               * @since 2.0.000 (2008-01-04)
+               * @see setPage(), getPage(), getNumPages()
+               */
+               function lastPage() {
+                       $this->setPage($this->getNumPages());
+               }
+
+               /**
+               * Get current document page number.
+               * @return int page number
+               * @since 2.1.000 (2008-01-07)
+               * @see setPage(), lastpage(), getNumPages()
+               */
+               function getPage() {
+                       return $this->page;
+               }
+
+
+               /**
+               * Get the total number of insered pages.
+               * @return int number of pages
+               * @since 2.1.000 (2008-01-07)
+               * @see setPage(), getPage(), lastpage()
+               */
+               function getNumPages() {
+                       return count($this->pages);
+               }
+
+               /**
+               * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer. Then the page is added, the current position set to the top-left corner according to the left and top margins, and Header() is called to display the header.
+               * The font which was set before calling is automatically restored. There is no need to call SetFont() again if you want to continue with the same font. The same is true for colors and line width.
+               * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards.
+               * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+               * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+               * @since 1.0
+               * @see TCPDF(), Header(), Footer(), SetMargins()
+               */
+               function AddPage($orientation='', $format='') {
+                       if (!isset($this->original_lMargin)) {
+                               $this->original_lMargin = $this->lMargin;
+                       }
+                       if (!isset($this->original_rMargin)) {
+                               $this->original_rMargin = $this->rMargin;
+                       }
+                       if (count($this->pages) > $this->page) {
+                               // this page has been already added
+                               $this->setPage(($this->page + 1));
+                               return;
+                       }
+                       //Start a new page
+                       if ($this->state == 0) {
+                               $this->Open();
+                       }
+                       // save current settings
+                       $font_family = $this->FontFamily;
+                       $font_style = $this->FontStyle.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '');
+                       $font_size = $this->FontSizePt;
+                       $prev_rMargin = $this->rMargin;
+                       $prev_lMargin = $this->lMargin;
+                       $prev_cMargin = $this->cMargin;
+                       $prev_linestyleWidth = $this->linestyleWidth;
+                       $prev_linestyleCap = $this->linestyleCap;
+                       $prev_linestyleJoin = $this->linestyleJoin;
+                       $prev_linestyleDash = $this->linestyleDash;
+                       $prev_DrawColor = $this->DrawColor;
+                       $prev_FillColor = $this->FillColor;
+                       $prev_TextColor = $this->TextColor;
+                       $prev_ColorFlag = $this->ColorFlag;
+                       if ($this->page > 0) {
+                               //Page footer
+                               $this->setFooter();
+                               //Close page
+                               $this->_endpage();
+                       }
+                       //Start new page
+                       $this->_beginpage($orientation, $format);
+                       // restore graphic styles
+                       $this->_out("".$prev_linestyleWidth." ".$prev_linestyleCap." ".$prev_linestyleJoin." ".$prev_linestyleDash." ".$prev_DrawColor." ".$prev_FillColor."");
+                       if (!empty($font_family)) {
+                               $this->SetFont($font_family, $font_style, $font_size);
+                       }
+                       //Page header
+                       $this->setHeader();
+                       // restore graphic styles
+                       $this->_out("".$prev_linestyleWidth." ".$prev_linestyleCap." ".$prev_linestyleJoin." ".$prev_linestyleDash." ".$prev_DrawColor." ".$prev_FillColor."");
+                       if (!empty($font_family)) {
+                               $this->SetFont($font_family, $font_style, $font_size);
+                       }
+                       // restore settings
+                       $this->FontFamily = $font_family;
+                       $this->FontStyle = $font_style;
+                       $this->FontSizePt = $font_size;
+                       $this->rMargin = $prev_rMargin;
+                       $this->lMargin = $prev_lMargin;
+                       $this->cMargin = $prev_cMargin;
+                       $this->linestyleWidth = $prev_linestyleWidth;
+                       $this->linestyleCap = $prev_linestyleCap;
+                       $this->linestyleJoin = $prev_linestyleJoin;
+                       $this->linestyleDash = $prev_linestyleDash;
+                       $this->DrawColor = $prev_DrawColor;
+                       $this->FillColor = $prev_FillColor;
+                       $this->TextColor = $prev_TextColor;
+                       $this->ColorFlag = $prev_ColorFlag;
+                       // mark this point
+                       $this->intmrk[$this->page] = strlen($this->pages[$this->page]);
+               }
+
+               /**
+                * Set start-writing mark on current page for multicell borders and fills.
+                * This function must be called after calling Image() function for a background image.
+                * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions.
+                * @access public
+                * @since 4.0.016 (2008-07-30)
+                */
+               function setPageMark() {
+                       $this->intmrk[$this->page] = strlen($this->pages[$this->page]);
+               }
+
+               /**
+                * Set header data.
+                * @param string $ln header image logo
+                * @param string $lw header image logo width in mm
+                * @param string $ht string to print as title on document header
+                * @param string $hs string to print on document header
+               */
+               function setHeaderData($ln="", $lw=0, $ht="", $hs="") {
+                       $this->header_logo = $ln;
+                       $this->header_logo_width = $lw;
+                       $this->header_title = $ht;
+                       $this->header_string = $hs;
+               }
+
+               /**
+                * Returns header data:
+                * <ul><li>$ret['logo'] = logo image</li><li>$ret['logo_width'] = width of the image logo in user units</li><li>$ret['title'] = header title</li><li>$ret['string'] = header description string</li></ul>
+                * @return array()
+                * @since 4.0.012 (2008-07-24)
+                */
+               function getHeaderData() {
+                       $ret = array();
+                       $ret['logo'] = $this->header_logo;
+                       $ret['logo_width'] = $this->header_logo_width;
+                       $ret['title'] = $this->header_title;
+                       $ret['string'] = $this->header_string;
+                       return $ret;
+               }
+
+               /**
+                * Set header margin.
+                * (minimum distance between header and top page margin)
+                * @param int $hm distance in user units
+               */
+               function setHeaderMargin($hm=10) {
+                       $this->header_margin = $hm;
+               }
+
+               /**
+                * Returns header margin in user units.
+                * @return float
+                * @since 4.0.012 (2008-07-24)
+               */
+               function getHeaderMargin() {
+                       return $this->header_margin;
+               }
+
+               /**
+                * Set footer margin.
+                * (minimum distance between footer and bottom page margin)
+                * @param int $fm distance in user units
+               */
+               function setFooterMargin($fm=10) {
+                       $this->footer_margin = $fm;
+               }
+
+               /**
+                * Returns footer margin in user units.
+                * @return float
+                * @since 4.0.012 (2008-07-24)
+               */
+               function getFooterMargin() {
+                       return $this->footer_margin;
+               }
+               /**
+                * Set a flag to print page header.
+                * @param boolean $val set to true to print the page header (default), false otherwise.
+                */
+               function setPrintHeader($val=true) {
+                       $this->print_header = $val;
+               }
+
+               /**
+                * Set a flag to print page footer.
+                * @param boolean $value set to true to print the page footer (default), false otherwise.
+                */
+               function setPrintFooter($val=true) {
+                       $this->print_footer = $val;
+               }
+
+               /**
+                * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image
+                * @return float
+                */
+               function getImageRBX() {
+                       return $this->img_rb_x;
+               }
+
+               /**
+                * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image
+                * @return float
+                */
+               function getImageRBY() {
+                       return $this->img_rb_y;
+               }
+
+               /**
+                * This method is used to render the page header.
+                * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+                */
+               function Header1() {
+                       $ormargins = $this->getOriginalMargins();
+                       $headerfont = $this->getHeaderFont();
+                       $headerdata = $this->getHeaderData();
+                       if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) {
+                               $this->Image(K_PATH_IMAGES.$headerdata['logo'], $this->GetX(), $this->getHeaderMargin(), $headerdata['logo_width']);
+                               $imgy = $this->getImageRBY();
+                       } else {
+                               $imgy = $this->GetY();
+                       }
+                       $cell_height = round(($this->getCellHeightRatio() * $headerfont[2]) / $this->getScaleFactor(), 2);
+                       // set starting margin for text data cell
+                       if ($this->getRTL()) {
+                               $header_x = $ormargins['right'] + ($headerdata['logo_width'] * 1.1);
+                       } else {
+                               $header_x = $ormargins['left'] + ($headerdata['logo_width'] * 1.1);
+                       }
+                       $this->SetTextColor(0, 0, 0);
+                       // header title
+                       $this->SetFont($headerfont[0], 'B', $headerfont[2] + 1);
+                       $this->SetX($header_x);
+                       $this->Cell(0, $cell_height, $headerdata['title'], 0, 1, '');
+                       // header string
+                       $this->SetFont($headerfont[0], $headerfont[1], $headerfont[2]);
+                       $this->SetX($header_x);
+                       $this->MultiCell(0, $cell_height, $headerdata['string'], 0, '', 0, 1, 0, 0, true, 0);
+                       // print an ending header line
+                       $this->SetLineStyle(array("width" => 0.85 / $this->getScaleFactor(), "cap" => "butt", "join" => "miter", "dash" => 0, "color" => array(0, 0, 0)));
+                       $this->SetY(1 + max($imgy, $this->GetY()));
+                       if ($this->getRTL()) {
+                               $this->SetX($ormargins['right']);
+                       } else {
+                               $this->SetX($ormargins['left']);
+                       }
+                       $this->Cell(0, 0, '', 'T', 0, 'C');
+               }
+
+               /**
+                * This method is used to render the page footer.
+                * It is automatically called by AddPage() and could be overwritten in your own inherited class.
+                */
+               function Footer() {
+                       $cur_y = $this->GetY();
+                       $ormargins = $this->getOriginalMargins();
+                       $this->SetTextColor(0, 0, 0);
+                       //set style for cell border
+                       $line_width = 0.85 / $this->getScaleFactor();
+                       $this->SetLineStyle(array("width" => $line_width, "cap" => "butt", "join" => "miter", "dash" => 0, "color" => array(0, 0, 0)));
+                       //print document barcode
+                       $barcode = $this->getBarcode();
+                       if (!empty($barcode)) {
+                               $this->Ln();
+                               $barcode_width = round(($this->getPageWidth() - $ormargins['left'] - $ormargins['right'])/3);
+                               $this->write1DBarcode($barcode, "C128B", $this->GetX(), $cur_y + $line_width, $barcode_width, (($this->getFooterMargin() / 3) - $line_width), 0.3, '', '');
+                       }
+                       $pagenumtxt = $this->l['w_page']." ".$this->PageNo().' / {nb}';
+                       $this->SetY($cur_y);
+                       //Print page number
+                       if ($this->getRTL()) {
+                               $this->SetX($ormargins['right']);
+                               $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L');
+                       } else {
+                               $this->SetX($ormargins['left']);
+                               $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'R');
+                       }
+               }
+
+               /**
+                * This method is used to render the page header.
+                * @access protected
+                * @since 4.0.012 (2008-07-24)
+                */
+               function setHeader() {
+                       if ($this->print_header) {
+                               $this->_out("q");
+                               $this->rMargin = $this->original_rMargin;
+                               $this->lMargin = $this->original_lMargin;
+                               //set current position
+                               if ($this->rtl) {
+                                       $this->SetXY($this->original_rMargin, $this->header_margin);
+                               } else {
+                                       $this->SetXY($this->original_lMargin, $this->header_margin);
+                               }
+                               $this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]);
+                               $this->Header1();
+                               //restore position
+                               if ($this->rtl) {
+                                       $this->SetXY($this->original_rMargin, $this->tMargin);
+                               } else {
+                                       $this->SetXY($this->original_lMargin, $this->tMargin);
+                               }
+                               $this->_out("Q");
+                       }
+               }
+
+               /**
+                * This method is used to render the page footer.
+                * @access protected
+                * @since 4.0.012 (2008-07-24)
+                */
+               function setFooter() {
+                       //Page footer
+                       $this->InFooter = true;
+                       // mark this point
+                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]);
+                       if ($this->print_footer) {
+                               $this->_out("q");
+                               $this->rMargin = $this->original_rMargin;
+                               $this->lMargin = $this->original_lMargin;
+                               //set current position
+                               $footer_y = $this->h - $this->footer_margin;
+                               if ($this->rtl) {
+                                       $this->SetXY($this->original_rMargin, $footer_y);
+                               } else {
+                                       $this->SetXY($this->original_lMargin, $footer_y);
+                               }
+                               $this->SetFont($this->footer_font[0], $this->footer_font[1] , $this->footer_font[2]);
+                               $this->Footer();
+                               //restore position
+                               if ($this->rtl) {
+                                       $this->SetXY($this->original_rMargin, $this->tMargin);
+                               } else {
+                                       $this->SetXY($this->original_lMargin, $this->tMargin);
+                               }
+                               $this->_out("Q");
+                       }
+                       $this->footerlen[$this->page] = strlen($this->pages[$this->page]) - $this->footerpos[$this->page];
+                       $this->InFooter = false;
+               }
+
+               /**
+               * Returns the current page number.
+               * @return int page number
+               * @since 1.0
+               * @see AliasNbPages()
+               */
+               function PageNo() {
+                       return $this->page;
+               }
+
+               /**
+               * Defines the color used for all drawing operations (lines, rectangles and cell borders).
+               * It can be expressed in RGB components or gray scale.
+               * The method can be called before the first page is created and the value is retained from page to page.
+               * @param array $color array of colors
+               * @since 3.1.000 (2008-6-11)
+               * @see SetDrawColor()
+               */
+               function SetDrawColorArray($color) {
+                       if (isset($color)) {
+                               $color = array_values($color);
+                               $r = isset($color[0]) ? $color[0] : -1;
+                               $g = isset($color[1]) ? $color[1] : -1;
+                               $b = isset($color[2]) ? $color[2] : -1;
+                               $k = isset($color[3]) ? $color[3] : -1;
+                               if ($r >= 0) {
+                                       $this->SetDrawColor($r, $g, $b, $k);
+                               }
+                       }
+               }
+
+               /**
+               * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+               * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
+               * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
+               * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
+               * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
+               * @since 1.3
+               * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell()
+               */
+               function SetDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
+                       // set default values
+                       if (!is_numeric($col1)) {
+                               $col1 = 0;
+                       }
+                       if (!is_numeric($col2)) {
+                               $col2 = -1;
+                       }
+                       if (!is_numeric($col3)) {
+                               $col3 = -1;
+                       }
+                       if (!is_numeric($col4)) {
+                               $col4 = -1;
+                       }
+                       //Set color for all stroking operations
+                       if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+                               // Grey scale
+                               $this->DrawColor=sprintf('%.3f G', $col1/255);
+                       } elseif ($col4 == -1) {
+                               // RGB
+                               $this->DrawColor=sprintf('%.3f %.3f %.3f RG', $col1/255, $col2/255, $col3/255);
+                       } else {
+                               // CMYK
+                               $this->DrawColor = sprintf('%.3f %.3f %.3f %.3f K', $col1/100, $col2/100, $col3/100, $col4/100);
+                       }
+                       if ($this->page>0) {
+                               $this->_out($this->DrawColor);
+                       }
+               }
+
+               /**
+               * Defines the color used for all filling operations (filled rectangles and cell backgrounds).
+               * It can be expressed in RGB components or gray scale.
+               * The method can be called before the first page is created and the value is retained from page to page.
+               * @param array $color array of colors
+               * @since 3.1.000 (2008-6-11)
+               * @see SetFillColor()
+               */
+               function SetFillColorArray($color) {
+                       if (isset($color)) {
+                               $color = array_values($color);
+                               $r = isset($color[0]) ? $color[0] : -1;
+                               $g = isset($color[1]) ? $color[1] : -1;
+                               $b = isset($color[2]) ? $color[2] : -1;
+                               $k = isset($color[3]) ? $color[3] : -1;
+                               if ($r >= 0) {
+                                       $this->SetFillColor($r, $g, $b, $k);
+                               }
+                       }
+               }
+
+               /**
+               * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+               * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
+               * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
+               * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
+               * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
+               * @since 1.3
+               * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell()
+               */
+               function SetFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
+                       // set default values
+                       if (!is_numeric($col1)) {
+                               $col1 = 0;
+                       }
+                       if (!is_numeric($col2)) {
+                               $col2 = -1;
+                       }
+                       if (!is_numeric($col3)) {
+                               $col3 = -1;
+                       }
+                       if (!is_numeric($col4)) {
+                               $col4 = -1;
+                       }
+                       //Set color for all filling operations
+                       if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+                               // Grey scale
+                               $this->FillColor = sprintf('%.3f g', $col1/255);
+                               $this->bgcolor = array('G' => $col1);
+                       } elseif ($col4 == -1) {
+                               // RGB
+                               $this->FillColor = sprintf('%.3f %.3f %.3f rg', $col1/255, $col2/255, $col3/255);
+                               $this->bgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
+                       } else {
+                               // CMYK
+                               $this->FillColor = sprintf('%.3f %.3f %.3f %.3f k', $col1/100, $col2/100, $col3/100, $col4/100);
+                               $this->bgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
+                       }
+                       $this->ColorFlag = ($this->FillColor != $this->TextColor);
+                       if ($this->page>0) {
+                               $this->_out($this->FillColor);
+                       }
+               }
+
+               /**
+               * Defines the color used for text. It can be expressed in RGB components or gray scale.
+               * The method can be called before the first page is created and the value is retained from page to page.
+               * @param array $color array of colors
+               * @since 3.1.000 (2008-6-11)
+               * @see SetFillColor()
+               */
+               function SetTextColorArray($color) {
+                       if (isset($color)) {
+                               $color = array_values($color);
+                               $r = isset($color[0]) ? $color[0] : -1;
+                               $g = isset($color[1]) ? $color[1] : -1;
+                               $b = isset($color[2]) ? $color[2] : -1;
+                               $k = isset($color[3]) ? $color[3] : -1;
+                               if ($r >= 0) {
+                                       $this->SetTextColor($r, $g, $b, $k);
+                               }
+                       }
+               }
+
+               /**
+               * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page.
+               * @param int $col1 Gray level for single color, or Red color for RGB, or Cyan color for CMYK. Value between 0 and 255
+               * @param int $col2 Green color for RGB, or Magenta color for CMYK. Value between 0 and 255
+               * @param int $col3 Blue color for RGB, or Yellow color for CMYK. Value between 0 and 255
+               * @param int $col4 Key (Black) color for CMYK. Value between 0 and 255
+               * @since 1.3
+               * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell()
+               */
+               function SetTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1) {
+                       // set default values
+                       if (!is_numeric($col1)) {
+                               $col1 = 0;
+                       }
+                       if (!is_numeric($col2)) {
+                               $col2 = -1;
+                       }
+                       if (!is_numeric($col3)) {
+                               $col3 = -1;
+                       }
+                       if (!is_numeric($col4)) {
+                               $col4 = -1;
+                       }
+                       //Set color for text
+                       if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) {
+                               // Grey scale
+                               $this->TextColor = sprintf('%.3f g', $col1/255);
+                               $this->fgcolor = array('G' => $col1);
+                       } elseif ($col4 == -1) {
+                               // RGB
+                               $this->TextColor = sprintf('%.3f %.3f %.3f rg', $col1/255, $col2/255, $col3/255);
+                               $this->fgcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3);
+                       } else {
+                               // CMYK
+                               $this->TextColor = sprintf('%.3f %.3f %.3f %.3f k', $col1/100, $col2/100, $col3/100, $col4/100);
+                               $this->fgcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4);
+                       }
+                       $this->ColorFlag = ($this->FillColor != $this->TextColor);
+               }
+
+               /**
+               * Returns the length of a string in user unit. A font must be selected.<br>
+               * @param string $s The string whose length is to be computed
+               * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
+               * @param string $fontstyle Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line trough</li></ul> or any combination. The default value is regular.
+               * @param float $fontsize Font size in points. The default value is the current size.
+               * @return int string length
+               * @author Nicola Asuni
+               * @since 1.2
+               */
+               function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0) {
+                       return $this->GetArrStringWidth($this->utf8Bidi($this->UTF8StringToArray($s), $this->tmprtl), $fontname, $fontstyle, $fontsize);
+               }
+
+               /**
+               * Returns the string length of an array of chars in user unit. A font must be selected.<br>
+               * @param string $arr The array of chars whose total length is to be computed
+               * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained.
+               * @param string $fontstyle Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line trough</li></ul> or any combination. The default value is regular.
+               * @param float $fontsize Font size in points. The default value is the current size.
+               * @return int string length
+               * @author Nicola Asuni
+               * @since 2.4.000 (2008-03-06)
+               */
+               function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0) {
+                       // store current values
+                       if (!empty($fontname)) {
+                               $prev_FontFamily = $this->FontFamily;
+                               $prev_FontStyle = $this->FontStyle;
+                               $prev_FontSizePt = $this->FontSizePt;
+                               $this->SetFont($fontname, $fontstyle, $fontsize);
+                       }
+                       $w = 0;
+                       foreach($sa as $char) {
+                               $w += $this->GetCharWidth($char);
+                       }
+                       // restore previous values
+                       if (!empty($fontname)) {
+                               $this->SetFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt);
+                       }
+                       return $w;
+               }
+
+               /**
+               * Returns the length of the char in user unit for the current font.<br>
+               * @param string $char The char whose length is to be returned
+               * @return int char width
+               * @author Nicola Asuni
+               * @since 2.4.000 (2008-03-06)
+               */
+               function GetCharWidth($char) {
+                       $cw = &$this->CurrentFont['cw'];
+                       if (isset($cw[$char])) {
+                               $w = $cw[$char];
+                               /*
+                       } elseif (isset($cw[ord($char)])) {
+                               $w = $cw[ord($char)];
+                       } elseif (isset($cw[chr($char)])) {
+                               $w = $cw[chr($char)];
+                               */
+                       } elseif (isset($this->CurrentFont['dw'])) {
+                               $w = $this->CurrentFont['dw'];
+                       } elseif (isset($this->CurrentFont['desc']['MissingWidth'])) {
+                               $w = $this->CurrentFont['desc']['MissingWidth']; // set default size
+                       } else {
+                               $w = 500; // default width
+                       }
+                       return ($w * $this->FontSize / 1000);
+               }
+
+               /**
+               * Returns the numbero of characters in a string.
+               * @param string $s The input string.
+               * @return int number of characters
+               * @since 2.0.0001 (2008-01-07)
+               */
+               function GetNumChars($s) {
+                       if ($this->isunicode) {
+                               return count($this->UTF8StringToArray($s));
+                       }
+                       return strlen($s);
+               }
+
+               /**
+               * Fill the list of available fonts ($this->fontlist).
+               * @access protected
+               * @since 4.0.013 (2008-07-28)
+               */
+               function getFontsList() {
+                       $fontsdir = opendir($this->_getfontpath());
+                       while (($file = readdir($fontsdir)) !== false) {
+                               if (substr($file, -4) == ".php") {
+                                               array_push($this->fontlist, strtolower(basename($file, ".php")));
+                               }
+                       }
+                       closedir($fontsdir);
+               }
+
+               /**
+               * Imports a TrueType, Type1, core, or CID0 font and makes it available.
+               * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT).
+               * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated.
+               * Changed to support UTF-8 Unicode [Nicola Asuni, 2005-01-02].
+               * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font.
+               * @param string $style Font style. Possible values are (case insensitive):<ul><li>empty string: regular (default)</li><li>B: bold</li><li>I: italic</li><li>BI or IB: bold italic</li></ul>
+               * @param string $file The font definition file. By default, the name is built from the family and style, in lower case with no space.
+               * @return array containing the font data, or false in case of error.
+               * @since 1.5
+               * @see SetFont()
+               */
+               function AddFont($family, $style='', $file='') {
+                       if (empty($family)) {
+                               if (!empty($this->FontFamily)) {
+                                       $family = $this->FontFamily;
+                               } else {
+                                       $this->Error('Empty font family');
+                               }
+                       }
+                       $family = strtolower($family);
+                       if ((!$this->isunicode) AND ($family == 'arial')) {
+                               $family = 'helvetica';
+                       }
+                       if (($family == "symbol") OR ($family == "zapfdingbats")) {
+                               $style = '';
+                       }
+                       $style = strtoupper($style);
+                       // underline
+                       if (strpos($style,'U') !== false) {
+                               $this->underline = true;
+                               $style = str_replace('U', '', $style);
+                       } else {
+                               $this->underline = false;
+                       }
+                       //line through (deleted)
+                       if (strpos($style,'D') !== false) {
+                               $this->linethrough = true;
+                               $style = str_replace('D', '', $style);
+                       } else {
+                               $this->linethrough = false;
+                       }
+                       if ($style == 'IB') {
+                               $style = 'BI';
+                       }
+                       $fontkey = $family.$style;
+                       $fontdata = array("fontkey" => $fontkey, "family" => $family, "style" => $style);
+                       // check if the font has been already added
+                       if (isset($this->fonts[$fontkey])) {
+                               return $fontdata;
+                       }
+                       if ($file == '') {
+                               $file = str_replace(' ', '', $family).strtolower($style).'.php';
+                       }
+
+                       if (!file_exists($this->_getfontpath().$file)) {
+                               // try to load the basic file without styles
+                               $file = str_replace(' ', '', $family).'.php';
+                       }
+                       if (isset($type)) {
+                               unset($type);
+                       }
+                       if (isset($cw)) {
+                               unset($cw);
+                       }
+                       include($this->_getfontpath().$file);
+                       if ((!isset($type)) OR (!isset($cw))) {
+                               $this->Error('Could not include font definition file');
+                       }
+                       $i = count($this->fonts) + 1;
+                       // register CID font (all styles at once)
+                       if ($type == 'cidfont0') {
+                               $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic');
+                               foreach ($styles as $skey => $qual) {
+                                       $sname = $name.$qual;
+                                       $sfontkey = $family.$skey;
+                                       $this->fonts[$sfontkey] = array('i' => $i, 'type' => $type, 'name' => $sname, 'desc' => $desc, 'cidinfo' => $cidinfo, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'dw' => $dw, 'enc' => $enc);
+                                       $i = count($this->fonts) + 1;
+                               }
+                               $file = '';
+                       } elseif ($type == 'core') {
+                               $def_width = $cw[ord('?')];
+                               $this->fonts[$fontkey] = array('i' => $i, 'type' => 'core', 'name' => $this->CoreFonts[$fontkey], 'up' => -100, 'ut' => 50, 'cw' => $cw, 'dw' => $def_width);
+                       } elseif (($type == 'TrueType') OR ($type == 'Type1')) {
+                               if (!isset($file)) {
+                                       $file = '';
+                               }
+                               if (!isset($enc)) {
+                                       $enc = '';
+                               }
+                               $this->fonts[$fontkey] = array('i' => $i, 'type' => $type, 'name' => $name, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'file' => $file, 'enc' => $enc, 'desc' => $desc);
+                       } elseif ($type == 'TrueTypeUnicode') {
+                               $this->fonts[$fontkey] = array('i' => $i, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'enc' => $enc, 'file' => $file, 'ctg' => $ctg);
+                       } else {
+                               $this->Error('Unknow font type');
+                       }
+                       if (isset($diff) AND (!empty($diff))) {
+                               //Search existing encodings
+                               $d = 0;
+                               $nb = count($this->diffs);
+                               for($i=1; $i <= $nb; $i++) {
+                                       if ($this->diffs[$i] == $diff) {
+                                               $d = $i;
+                                               break;
+                                       }
+                               }
+                               if ($d == 0) {
+                                       $d = $nb + 1;
+                                       $this->diffs[$d] = $diff;
+                               }
+                               $this->fonts[$fontkey]['diff'] = $d;
+                       }
+                       if (!empty($file)) {
+                               if ((strcasecmp($type,"TrueType") == 0) OR (strcasecmp($type,"TrueTypeUnicode") == 0)) {
+                                       $this->FontFiles[$file] = array('length1' => $originalsize);
+                               } elseif ($type != 'core') {
+                                       $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2);
+                               }
+                       }
+                       return $fontdata;
+               }
+
+               /**
+               * Sets the font used to print character strings.
+               * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe).
+               * The method can be called before the first page is created and the font is retained from page to page.
+               * If you just wish to change the current font size, it is simpler to call SetFontSize().
+               * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:<ul><li>They are in the current directory (the one where the running script lies)</li><li>They are in one of the directories defined by the include_path parameter</li><li>They are in the directory defined by the K_PATH_FONTS constant</li></ul><br />
+               * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):<ul><li>times (Times-Roman)</li><li>timesb (Times-Bold)</li><li>timesi (Times-Italic)</li><li>timesbi (Times-BoldItalic)</li><li>helvetica (Helvetica)</li><li>helveticab (Helvetica-Bold)</li><li>helveticai (Helvetica-Oblique)</li><li>helveticabi (Helvetica-BoldOblique)</li><li>courier (Courier)</li><li>courierb (Courier-Bold)</li><li>courieri (Courier-Oblique)</li><li>courierbi (Courier-BoldOblique)</li><li>symbol (Symbol)</li><li>zapfdingbats (ZapfDingbats)</li></ul> It is also possible to pass an empty string. In that case, the current family is retained.
+               * @param string $style Font style. Possible values are (case insensitive):<ul><li>empty string: regular</li><li>B: bold</li><li>I: italic</li><li>U: underline</li><li>D: line trough</li></ul> or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined.
+               * @param float $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12
+               * @since 1.0
+               * @see AddFont(), SetFontSize()
+               */
+               function SetFont($family, $style='', $size=0) {
+                       //Select a font; size given in points
+                       if ($size == 0) {
+                               $size = $this->FontSizePt;
+                       }
+                       // try to add font (if not already added)
+                       $fontdata =  $this->AddFont($family, $style);
+                       $this->FontFamily = $fontdata['family'];
+                       $this->FontStyle = $fontdata['style'];
+                       $this->CurrentFont = &$this->fonts[$fontdata['fontkey']];
+                       $this->SetFontSize($size);
+               }
+
+               /**
+               * Defines the size of the current font.
+               * @param float $size The size (in points)
+               * @since 1.0
+               * @see SetFont()
+               */
+               function SetFontSize($size) {
+                       //Set font size in points
+                       $this->FontSizePt = $size;
+                       $this->FontSize = $size / $this->k;
+                       if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) {
+                               $this->FontAscent = $this->CurrentFont['desc']['Ascent'] * $this->FontSize / 1000;
+                       } else {
+                               $this->FontAscent = 0.8 * $this->FontSize;
+                       }
+                       if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] > 0)) {
+                               $this->FontDescent = - $this->CurrentFont['desc']['Descent'] * $this->FontSize / 1000;
+                       } else {
+                               $this->FontDescent = 0.2 * $this->FontSize;
+                       }
+                       if (($this->page > 0) AND (isset($this->CurrentFont['i']))) {
+                               $this->_out(sprintf('BT /F%d %.2f Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
+                       }
+               }
+
+               /**
+               * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.<br />
+               * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink().
+               * @since 1.5
+               * @see Cell(), Write(), Image(), Link(), SetLink()
+               */
+               function AddLink() {
+                       //Create a new internal link
+                       $n = count($this->links) + 1;
+                       $this->links[$n] = array(0, 0);
+                       return $n;
+               }
+
+               /**
+               * Defines the page and position a link points to.
+               * @param int $link The link identifier returned by AddLink()
+               * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page)
+               * @param int $page Number of target page; -1 indicates the current page. This is the default value
+               * @since 1.5
+               * @see AddLink()
+               */
+               function SetLink($link, $y=0, $page=-1) {
+                       if ($y == -1) {
+                               $y=$this->y;
+                       }
+                       if ($page == -1) {
+                               $page = $this->page;
+                       }
+                       $this->links[$link] = array($page, $y);
+               }
+
+               /**
+               * Puts a link on a rectangular area of the page.
+               * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image.
+               * @param float $x Abscissa of the upper-left corner of the rectangle (or upper-right for RTL languages)
+               * @param float $y Ordinate of the upper-left corner of the rectangle (or upper-right for RTL languages)
+               * @param float $w Width of the rectangle
+               * @param float $h Height of the rectangle
+               * @param mixed $link URL or identifier returned by AddLink()
+               * @since 1.5
+               * @see AddLink(), Cell(), Write(), Image()
+               */
+               function Link($x, $y, $w, $h, $link) {
+                       $this->PageLinks[$this->page][] = array($x * $this->k, $this->hPt - $y * $this->k, $w * $this->k, $h*$this->k, $link);
+               }
+
+               /**
+               * Prints a character string. The origin is on the left of the first charcter, on the baseline. This method allows to place a string precisely on the page, but it is usually easier to use Cell(), MultiCell() or Write() which are the standard methods to print text.
+               * @param float $x Abscissa of the origin
+               * @param float $y Ordinate of the origin
+               * @param string $txt String to print
+               * @param int $stroke outline size in points (0 = disable)
+               * @param boolean $clip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation).
+               * @since 1.0
+               * @see SetFont(), SetTextColor(), Cell(), MultiCell(), Write()
+               */
+               function Text($x, $y, $txt, $stroke=0, $clip=false) {
+                       //Output a string
+                       if ($this->rtl) {
+                               // bidirectional algorithm (some chars may be changed affecting the line length)
+                               $s = $this->utf8Bidi($this->UTF8StringToArray($txt), $this->tmprtl);
+                               $l = $this->GetArrStringWidth($s);
+                               $xr = $this->w - $x - $this->GetArrStringWidth($s);
+                       } else {
+                               $xr = $x;
+                       }
+                       $opt = "";
+                       if (($stroke > 0) AND (!$clip)) {
+                               $opt .= "1 Tr ".intval($stroke)." w ";
+                       } elseif (($stroke > 0) AND $clip) {
+                               $opt .= "5 Tr ".intval($stroke)." w ";
+                       } elseif ($clip) {
+                               $opt .= "7 Tr ";
+                       }
+                       $s = sprintf('BT %.2f %.2f Td %s(%s) Tj ET 0 Tr', $xr * $this->k, ($this->h-$y) * $this->k, $opt, $this->_escapetext($txt));
+                       if ($this->underline AND ($txt!='')) {
+                               $s .= ' '.$this->_dounderline($xr, $y, $txt);
+                       }
+                       if ($this->linethrough AND ($txt!='')) {
+                               $s .= ' '.$this->_dolinethrough($xr, $y, $txt);
+                       }
+                       if ($this->ColorFlag AND (!$clip)) {
+                               $s='q '.$this->TextColor.' '.$s.' Q';
+                       }
+                       $this->_out($s);
+               }
+
+               /**
+               * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value.
+               * The default implementation returns a value according to the mode selected by SetAutoPageBreak().<br />
+               * This method is called automatically and should not be called directly by the application.
+               * @return boolean
+               * @since 1.4
+               * @see SetAutoPageBreak()
+               */
+               function AcceptPageBreak() {
+                       return $this->AutoPageBreak;
+               }
+
+               /**
+               * Add page if needed.
+               * @param float $h Cell height. Default value: 0.
+               * @since 3.2.000 (2008-07-01)
+               * @access protected
+               */
+               function checkPageBreak($h) {
+                       if ((($this->y + $h) > $this->PageBreakTrigger) AND (empty($this->InFooter)) AND ($this->AcceptPageBreak())) {
+                               $rs = "";
+                               //Automatic page break
+                               $x = $this->x;
+                               $ws = $this->ws;
+                               if ($ws > 0) {
+                                       $this->ws = 0;
+                                       $rs .= '0 Tw';
+                               }
+                               $this->AddPage($this->CurOrientation);
+                               if ($ws > 0) {
+                                       $this->ws = $ws;
+                                       $rs .= sprintf('%.3f Tw', $ws * $k);
+                               }
+                               $this->_out($rs);
+                               $this->y = $this->tMargin;
+                               $this->x = $x;
+                       }
+               }
+
+               /**
+               * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br />
+               * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+               * @param float $w Cell width. If 0, the cell extends up to the right margin.
+               * @param float $h Cell height. Default value: 0.
+               * @param string $txt String to print. Default value: empty string.
+               * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+               * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
+               Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+               * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
+               * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+               * @param mixed $link URL or identifier returned by AddLink().
+               * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+               * @since 1.0
+               * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak()
+               */
+               function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0) {
+                       //$min_cell_height = $this->FontAscent + $this->FontDescent;
+                       $min_cell_height = $this->FontSize * $this->cell_height_ratio;
+                       if ($h < $min_cell_height) {
+                               $h = $min_cell_height;
+                       }
+                       $this->checkPageBreak($h);
+                       $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch));
+               }
+
+               /**
+               * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.<br />
+               * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+               * @param float $w Cell width. If 0, the cell extends up to the right margin.
+               * @param float $h Cell height. Default value: 0.
+               * @param string $txt String to print. Default value: empty string.
+               * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+               * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL languages)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+               * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
+               * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+               * @param mixed $link URL or identifier returned by AddLink().
+               * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+               * @since 1.0
+               * @see Cell()
+               */
+               function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=0, $link='', $stretch=0) {
+                       $rs = ""; //string to be returned
+                       $min_cell_height = $this->FontSize * $this->cell_height_ratio;
+                       if ($h < $min_cell_height) {
+                               $h = $min_cell_height;
+                       }
+                       $k = $this->k;
+                       if (empty($w) OR ($w <= 0)) {
+                               if ($this->rtl) {
+                                       $w = $this->x - $this->lMargin;
+                               } else {
+                                       $w = $this->w - $this->rMargin - $this->x;
+                               }
+                       }
+                       $s = '';
+                       if (($fill == 1) OR ($border == 1)) {
+                               if ($fill == 1) {
+                                       $op = ($border == 1) ? 'B' : 'f';
+                               } else {
+                                       $op = 'S';
+                               }
+                               if ($this->rtl) {
+                                       $xk = (($this->x  - $w) * $k);
+                               } else {
+                                       $xk = ($this->x * $k);
+                               }
+                               $s .= sprintf('%.2f %.2f %.2f %.2f re %s ', $xk, (($this->h - $this->y) * $k), ($w * $k), (-$h * $k), $op);
+                       }
+
+                       if (is_string($border)) {
+                               $x = $this->x;
+                               $y = $this->y;
+                               if (strpos($border,'L') !== false) {
+                                       if ($this->rtl) {
+                                               $xk = ($x - $w) * $k;
+                                       } else {
+                                               $xk = $x * $k;
+                                       }
+                                       $s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $xk, (($this->h - $y) * $k), $xk, (($this->h - ($y + $h)) * $k));
+                               }
+                               if (strpos($border,'T') !== false) {
+                                       if ($this->rtl) {
+                                               $xk = ($x - $w) * $k;
+                                               $xwk = $x * $k;
+                                       } else {
+                                               $xk = $x * $k;
+                                               $xwk = ($x + $w) * $k;
+                                       }
+                                       $s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $xk, (($this->h - $y) * $k), $xwk, (($this->h - $y) * $k));
+                               }
+                               if (strpos($border,'R') !== false) {
+                                       if ($this->rtl) {
+                                               $xk = $x * $k;
+                                       } else {
+                                               $xk = ($x + $w) * $k;
+                                       }
+                                       $s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $xk, (($this->h - $y) * $k), $xk, (($this->h - ($y + $h))* $k));
+                               }
+                               if (strpos($border,'B') !== false) {
+                                       if ($this->rtl) {
+                                               $xk = ($x - $w) * $k;
+                                               $xwk = $x * $k;
+                                       } else {
+                                               $xk = $x * $k;
+                                               $xwk = ($x + $w) * $k;
+                                       }
+                                       $s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $xk, (($this->h - ($y + $h)) * $k), $xwk, (($this->h - ($y + $h)) * $k));
+                               }
+                       }
+                       if ($txt != '') {
+                               // text lenght
+                               $width = $this->GetStringWidth($txt);
+                               // ratio between cell lenght and text lenght
+                               $ratio = ($w - (2 * $this->cMargin)) / $width;
+
+                               // stretch text if required
+                               if (($stretch > 0) AND (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0)))) {
+                                       if ($stretch > 2) {
+                                               // spacing
+                                               //Calculate character spacing in points
+                                               $char_space = (($w - $width - (2 * $this->cMargin)) * $this->k) / max($this->GetNumChars($txt)-1,1);
+                                               //Set character spacing
+                                               $rs .= sprintf('BT %.2f Tc ET ', $char_space);
+                                       } else {
+                                               // scaling
+                                               //Calculate horizontal scaling
+                                               $horiz_scale = $ratio * 100.0;
+                                               //Set horizontal scaling
+                                               $rs .= sprintf('BT %.2f Tz ET ', $horiz_scale);
+                                       }
+                                       $align = '';
+                                       $width = $w - (2 * $this->cMargin);
+                               } else {
+                                       $stretch == 0;
+                               }
+                               if ($align == 'L') {
+                                       if ($this->rtl) {
+                                               $dx = $w - $width - $this->cMargin;
+                                       } else {
+                                               $dx = $this->cMargin;
+                                       }
+                               } elseif ($align == 'R') {
+                                       if ($this->rtl) {
+                                               $dx = $this->cMargin;
+                                       } else {
+                                               $dx = $w - $width - $this->cMargin;
+                                       }
+                               } elseif ($align == 'C') {
+                                       $dx = ($w - $width) / 2;
+                               } elseif ($align == 'J') {
+                                       if ($this->rtl) {
+                                               $dx = $w - $width - $this->cMargin;
+                                       } else {
+                                               $dx = $this->cMargin;
+                                       }
+                               } else {
+                                       $dx = $this->cMargin;
+                               }
+                               if ($this->ColorFlag) {
+                                       $s .= 'q '.$this->TextColor.' ';
+                               }
+                               $txt2 = $this->_escapetext($txt);
+                               if ($this->rtl) {
+                                       $xdk = ($this->x - $dx - $width) * $k;
+                               } else {
+                                       $xdk = ($this->x + $dx) * $k;
+                               }
+                               // Justification
+                               if ($align == 'J') {
+                                       // count number of spaces
+                                       $ns = substr_count($txt, ' ');
+                                       //if ($this->isunicode) {
+                                       if (($this->CurrentFont['type'] == "TrueTypeUnicode") OR ($this->CurrentFont['type'] == "cidfont0")) {
+                                               // get string width without spaces
+                                               $width = $this->GetStringWidth(str_replace(' ', '', $txt));
+                                               // calculate average space width
+                                               $spacewidth = ($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1) / $this->FontSize / $this->k;
+                                               // set word position to be used with TJ operator
+                                               $txt2 = str_replace(chr(0).' ', ') '.(-2830 * $spacewidth).' (', $txt2);
+                                       } else {
+                                               // get string width
+                                               $width = $this->GetStringWidth($txt);
+                                               $spacewidth = (($w - $width - (2 * $this->cMargin)) / ($ns?$ns:1)) * $this->k;
+                                               $rs .= sprintf('BT %.3f Tw ET ', $spacewidth);
+                                       }
+                               }
+                               // calculate approximate position of the font base line
+                               //$basefonty = $this->y + (($h + $this->FontAscent - $this->FontDescent)/2);
+                               $basefonty = $this->y + ($h/2) + ($this->FontSize/3);
+                               // print text
+                               $s .= sprintf('BT %.2f %.2f Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2);
+                               if ($this->rtl) {
+                                       $xdx = $this->x - $dx - $width;
+                               } else {
+                                       $xdx = $this->x + $dx;
+                               }
+                               if ($this->underline)  {
+                                       $s .= ' '.$this->_dounderline($xdx, $basefonty, $txt);
+                               }
+                               if ($this->linethrough) {
+                                       $s .= ' '.$this->_dolinethrough($xdx, $basefonty, $txt);
+                               }
+                               if ($this->ColorFlag) {
+                                       $s .= ' Q';
+                               }
+                               if ($link) {
+                                       $this->Link($xdx, $this->y + (($h - $this->FontSize)/2), $width, $this->FontSize, $link);
+                               }
+                       }
+                       // output cell
+                       if ($s) {
+                               // output cell
+                               $rs .= $s;
+                               // reset text stretching
+                               if ($stretch > 2) {
+                                       //Reset character horizontal spacing
+                                       $rs .= ' BT 0 Tc ET';
+                               } elseif ($stretch > 0) {
+                                       //Reset character horizontal scaling
+                                       $rs .= ' BT 100 Tz ET';
+                               }
+                       }
+                       // reset word spacing
+                       if ((!$this->isunicode) AND ($align == 'J')) {
+                               $rs .= ' BT 0 Tw ET';
+                       }
+                       $this->lasth = $h;
+                       if ($ln > 0) {
+                               //Go to the beginning of the next line
+                               $this->y += $h;
+                               if ($ln == 1) {
+                                       if ($this->rtl) {
+                                               $this->x = $this->w - $this->rMargin;
+                                       } else {
+                                               $this->x = $this->lMargin;
+                                       }
+                               }
+                       } else {
+                               // go left or right by case
+                               if ($this->rtl) {
+                                       $this->x -= $w;
+                               } else {
+                                       $this->x += $w;
+                               }
+                       }
+                       $gstyles = $this->linestyleWidth." ".$this->linestyleCap." ".$this->linestyleJoin." ".$this->linestyleDash." ".$this->DrawColor." ".$this->FillColor."\n";
+                       $rs = $gstyles.$rs;
+                       return $rs;
+               }
+
+               /**
+               * This method allows printing text with line breaks.
+               * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.<br />
+               * Text can be aligned, centered or justified. The cell block can be framed and the background painted.
+               * @param float $w Width of cells. If 0, they extend up to the right margin of the page.
+               * @param float $h Cell minimum height. The cell extends automatically if needed.
+               * @param string $txt String to print
+               * @param mixed $border Indicates if borders must be drawn around the cell block. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+               * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align</li><li>C: center</li><li>R: right align</li><li>J: justification (default value when $ishtml=false)</li></ul>
+               * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+               * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right</li><li>1: to the beginning of the next line [DEFAULT]</li><li>2: below</li></ul>
+               * @param int $x x position in user units
+               * @param int $y y position in user units
+               * @param boolean $reseth if true reset the last cell height (default true).
+               * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+               * @param boolean $ishtml se to true if $txt is HTML content (default = false).
+               * @return int Return the number of cells or 1 for html mode.
+               * @since 1.3
+               * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak()
+               */
+               function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false) {
+                       if ((empty($this->lasth))OR ($reseth)) {
+                               //set row height
+                               $this->lasth = $this->FontSize * $this->cell_height_ratio;
+                       }
+                       if (!empty($y)) {
+                               $this->SetY($y);
+                       } else {
+                               $y = $this->GetY();
+                       }
+                       // check for page break
+                       $this->checkPageBreak($h);
+                       $y = $this->GetY();
+                       // get current page number
+                       $startpage = $this->page;
+                       if (!empty($x)) {
+                               $this->SetX($x);
+                       } else {
+                               $x = $this->GetX();
+                       }
+                       if (empty($w) OR ($w <= 0)) {
+                               if ($this->rtl) {
+                                       $w = $this->x - $this->lMargin;
+                               } else {
+                                       $w = $this->w - $this->rMargin - $this->x;
+                               }
+                       }
+                       // store original margin values
+                       $lMargin = $this->lMargin;
+                       $rMargin = $this->rMargin;
+                       if ($this->rtl) {
+                               $this->SetRightMargin($this->w - $this->x);
+                               $this->SetLeftMargin($this->x - $w);
+                       } else {
+                               $this->SetLeftMargin($this->x);
+                               $this->SetRightMargin($this->w - $this->x - $w);
+                       }
+                       // calculate remaining vertical space on first page ($startpage)
+                       $restspace = $this->getPageHeight() - $this->GetY() - $this->getBreakMargin();
+                       // Adjust internal padding
+                       if ($this->cMargin < ($this->LineWidth / 2)) {
+                               $this->cMargin = ($this->LineWidth / 2);
+                       }
+                       // Add top space if needed
+                       if (($this->lasth - $this->FontSize) < $this->LineWidth) {
+                               $this->y += $this->LineWidth / 2;
+                       }
+                       // add top padding
+                       $this->y += $this->cMargin;
+                       if ($ishtml) {
+                               // Write HTML text
+                               $this->writeHTML($txt, true, 0, $reseth, true, $align);
+                               $nl = 1;
+                       } else {
+                               // Write text
+                               $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false);
+                       }
+                       // add bottom padding
+                       $this->y += $this->cMargin;
+                       // Add bottom space if needed
+                       if (($this->lasth - $this->FontSize) < $this->LineWidth) {
+                               $this->y += $this->LineWidth / 2;
+                       }
+                       // Get end-of-text Y position
+                       $currentY = $this->GetY();
+                       // get latest page number
+                       $endpage = $this->page;
+                       // check if a new page has been created
+                       if ($endpage > $startpage) {
+                               // design borders around HTML cells.
+                               for ($page=$startpage; $page <= $endpage; $page++) {
+                                       $this->setPage($page);
+                                       if ($page == $startpage) {
+                                               $this->SetY($this->getPageHeight() - $restspace - $this->getBreakMargin());
+                                               $h = $restspace;
+                                       } elseif ($page == $endpage) {
+                                               $this->SetY($this->tMargin); // put cursor at the beginning of text
+                                               $h = $currentY - $this->tMargin;
+                                       } else {
+                                               $this->SetY($this->tMargin); // put cursor at the beginning of text
+                                               $h = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin();
+                                       }
+                                       $this->SetX($x);
+                                       $ccode = $this->getCellCode($w, $h, "", $border, 1, '', $fill);
+                                       if ($border OR $fill) {
+                                               $pstart = substr($this->pages[$this->page], 0, $this->intmrk[$this->page]);
+                                               $pend = substr($this->pages[$this->page], $this->intmrk[$this->page]);
+                                               $this->pages[$this->page] = $pstart.$ccode."\n".$pend;
+                                               $this->intmrk[$this->page] += strlen($ccode."\n");
+                                       }
+                               }
+                       } else {
+                               $h = max($h, ($currentY - $y));
+                               // put cursor at the beginning of text
+                               $this->SetY($y);
+                               $this->SetX($x);
+                               $ccode = $this->getCellCode($w, $h, "", $border, 1, '', $fill);
+                               if ($border OR $fill) {
+                                       // design a cell around the text
+                                       $pstart = substr($this->pages[$this->page], 0, $this->intmrk[$this->page]);
+                                       $pend = substr($this->pages[$this->page], $this->intmrk[$this->page]);
+                                       $this->pages[$this->page] = $pstart.$ccode."\n".$pend;
+                                       $this->intmrk[$this->page] += strlen($ccode."\n");
+                               }
+                       }
+                       // Get end-of-cell Y position
+                       $currentY = $this->GetY();
+                       // restore original margin values
+                       $this->SetLeftMargin($lMargin);
+                       $this->SetRightMargin($rMargin);
+                       if ($ln > 0) {
+                               //Go to the beginning of the next line
+                               $this->SetY($currentY);
+                               if ($ln == 2) {
+                                       $this->SetX($x + $w);
+                               }
+                       } else {
+                               // go left or right by case
+                               $this->setPage($startpage);
+                               $this->y = $y;
+                               $this->SetX($x + $w);
+                       }
+                       return $nl;
+               }
+
+               /**
+               * This method prints text from the current position.<br />
+               * @param float $h Line height
+               * @param string $txt String to print
+               * @param mixed $link URL or identifier returned by AddLink()
+               * @param int $fill Indicates if the background must be painted (1) or transparent (0). Default value: 0.
+               * @param string $align Allows to center or align the text. Possible values are:<ul><li>L or empty string: left align (default value)</li><li>C: center</li><li>R: right align</li><li>J: justify</li></ul>
+               * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line.
+               * @param int $stretch stretch carachter mode: <ul><li>0 = disabled</li><li>1 = horizontal scaling only if necessary</li><li>2 = forced horizontal scaling</li><li>3 = character spacing only if necessary</li><li>4 = forced character spacing</li></ul>
+               * @param boolean $firstline if true prints only the first line and return the remaining string.
+               * @return mixed Return the number of cells or the remaining string if $firstline = true.
+               * @since 1.5
+               */
+               function Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false) {
+                       // remove carriage returns
+                       $s = str_replace("\r", '', $txt);
+                       // check if string contains arabic text
+                       if (preg_match(K_RE_PATTERN_ARABIC, $s)) {
+                               $arabic = true;
+                       } else {
+                               $arabic = false;
+                       }
+                       // get array of chars
+                       $chars = $this->UTF8StringToArray($s);
+                       // get the number of characters
+                       $nb = count($chars);
+                       // handle single space character
+                       if (($nb == 1) AND preg_match("/[\s]/u", $s)) {
+                               if ($this->rtl) {
+                                       $this->x -= $this->GetStringWidth($s);
+                               } else {
+                                       $this->x += $this->GetStringWidth($s);
+                               }
+                               return;
+                       }
+                       // store current position
+                       $prevx = $this->x;
+                       $prevy = $this->y;
+                       // calculate remaining line width ($w)
+                       if ($this->rtl) {
+                               $w = $this->x - $this->lMargin;
+                       } else {
+                               $w = $this->w - $this->rMargin - $this->x;
+                       }
+                       // max column width
+                       $wmax = $w - (2 * $this->cMargin);
+                       $i = 0; // character position
+                       $j = 0; // current starting position
+                       $sep = -1; // position of the last blank space
+                       $l = 0; // current string lenght
+                       $nl = 0; //number of lines
+                       $linebreak = false;
+                       // for each character
+                       while ($i < $nb) {
+                               //Get the current character
+                               $c = $chars[$i];
+                               if ($c == 10) { // 10 = "\n" = new line
+                                       //Explicit line break
+                                       if ($align == "J") {
+                                               if ($this->rtl) {
+                                                       $talign = "R";
+                                               } else {
+                                                       $talign = "L";
+                                               }
+                                       } else {
+                                               $talign = $align;
+                                       }
+                                       if ($firstline) {
+                                               $startx = $this->x;
+                                               $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i), $this->tmprtl));
+                                               if ($this->rtl) {
+                                                       $this->endlinex = $startx - $linew;
+                                               } else {
+                                                       $this->endlinex = $startx + $linew;
+                                               }
+                                               $w = $linew;
+                                               $tmpcmargin = $this->cMargin;
+                                               $this->cMargin = 0;
+                                       }
+                                       $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $i), 0, 1, $talign, $fill, $link, $stretch);
+                                       if ($firstline) {
+                                               $this->cMargin = $tmpcmargin;
+                                               return ($this->UTF8ArrSubString($chars, $i));
+                                       }
+                                       $nl++;
+                                       $j = $i + 1;
+                                       $l = 0;
+                                       $sep = -1;
+                                       $w = $this->getRemainingWidth();
+                                       $wmax = $w - (2 * $this->cMargin);
+                               } else {
+                                       if (preg_match("/[\s]/u", $this->unichr($c))) {
+                                               // update last blank space position
+                                               $sep = $i;
+                                       }
+                                       // update string length
+                                       if (($this->isunicode) AND ($arabic)) {
+                                               // with bidirectional algorithm some chars may be changed affecting the line length
+                                               // *** very slow ***
+                                               $l = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i-$j+1), $this->tmprtl));
+                                       } else {
+                                               $l += $this->GetCharWidth($c);
+                                       }
+                                       if ($l > $wmax) {
+                                               // we have reached the end of column
+                                               if ($sep == -1) {
+                                                       // check if the line was already started
+                                                       if (($this->rtl AND ($this->x < ($this->w - $this->rMargin)))
+                                                               OR ((!$this->rtl) AND ($this->x > $this->lMargin))) {
+                                                               // print a void cell and go to next line
+                                                               $this->Cell($w, $h, "", 0, 1);
+                                                               $linebreak = true;
+                                                       } else {
+                                                               // truncate the word because do not fit on column
+                                                               if ($firstline) {
+                                                                       $startx = $this->x;
+                                                                       $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $i), $this->tmprtl));
+                                                                       if ($this->rtl) {
+                                                                               $this->endlinex = $startx - $linew;
+                                                                       } else {
+                                                                               $this->endlinex = $startx + $linew;
+                                                                       }
+                                                                       $w = $linew;
+                                                                       $tmpcmargin = $this->cMargin;
+                                                                       $this->cMargin = 0;
+                                                               }
+                                                               $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $i), 0, 1, $align, $fill, $link, $stretch);
+                                                               if ($firstline) {
+                                                                       $this->cMargin = $tmpcmargin;
+                                                                       return ($this->UTF8ArrSubString($chars, $i));
+                                                               }
+                                                               $j = $i;
+                                                               $i--;
+                                                       }
+                                               } else {
+                                                       // word wrapping
+                                                       if ($firstline) {
+                                                               $startx = $this->x;
+                                                               $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $sep), $this->tmprtl));
+                                                               if ($this->rtl) {
+                                                                       $this->endlinex = $startx - $linew;
+                                                               } else {
+                                                                       $this->endlinex = $startx + $linew;
+                                                               }
+                                                               $w = $linew;
+                                                               $tmpcmargin = $this->cMargin;
+                                                               $this->cMargin = 0;
+                                                       }
+                                                       $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $sep), 0, 1, $align, $fill, $link, $stretch);
+                                                       if ($firstline) {
+                                                               $this->cMargin = $tmpcmargin;
+                                                               return ($this->UTF8ArrSubString($chars, $sep));
+                                                       }
+                                                       $i = $sep;
+                                                       $sep = -1;
+                                                       $j = ($i+1);
+                                               }
+                                               $w = $this->getRemainingWidth();
+                                               $wmax = $w - (2 * $this->cMargin);
+                                               if ($linebreak) {
+                                                       $linebreak = false;
+                                               } else {
+                                                       $nl++;
+                                                       $l = 0;
+                                               }
+                                       }
+                               }
+                               $i++;
+                       } // end while i < nb
+                       // print last substring (if any)
+                       if ($l > 0) {
+                               switch ($align) {
+                                       case "J":
+                                       case "C": {
+                                               $w = $w;
+                                               break;
+                                       }
+                                       case "L": {
+                                               if ($this->rtl) {
+                                                       $w = $w;
+                                               } else {
+                                                       $w = $l;
+                                               }
+                                               break;
+                                       }
+                                       case "R": {
+                                               if ($this->rtl) {
+                                                       $w = $l;
+                                               } else {
+                                                       $w = $w;
+                                               }
+                                               break;
+                                       }
+                                       default: {
+                                               $w = $l;
+                                               break;
+                                       }
+                               }
+                               if ($firstline) {
+                                       $startx = $this->x;
+                                       $linew = $this->GetArrStringWidth($this->utf8Bidi(array_slice($chars, $j, $nb), $this->tmprtl));
+                                       if ($this->rtl) {
+                                               $this->endlinex = $startx - $linew;
+                                       } else {
+                                               $this->endlinex = $startx + $linew;
+                                       }
+                                       $w = $linew;
+                                       $tmpcmargin = $this->cMargin;
+                                       $this->cMargin = 0;
+                               }
+                               $this->Cell($w, $h, $this->UTF8ArrSubString($chars, $j, $nb), 0, $ln, $align, $fill, $link, $stretch);
+                               if ($firstline) {
+                                       $this->cMargin = $tmpcmargin;
+                                       return ($this->UTF8ArrSubString($chars, $nb));
+                               }
+                               $nl++;
+                       }
+                       return $nl;
+               }
+
+               /**
+               * Returns the remaining width between the current position and margins.
+               * @return int Return the remaining width
+               * @access protected
+               */
+               function getRemainingWidth() {
+                       if ($this->rtl) {
+                               return ($this->x - $this->lMargin);
+                       } else {
+                               return ($this->w - $this->rMargin - $this->x);
+                       }
+               }
+
+        /**
+               * Extract a slice of the $strarr array and return it as string.
+               * @param string $strarr The input array of characters.
+               * @param int $start the starting element of $strarr.
+               * @param int $end first element that will not be returned.
+               * @return Return part of a string
+               */
+               function UTF8ArrSubString($strarr, $start='', $end='') {
+                       if (strlen($start) == 0) {
+                               $start = 0;
+                       }
+                       if (strlen($end) == 0) {
+                               $end = count($strarr);
+                       }
+                       $string = "";
+                       for ($i=$start; $i < $end; $i++) {
+                               $string .= $this->unichr($strarr[$i]);
+                       }
+                       return $string;
+               }
+
+               /**
+               * Returns the unicode caracter specified by UTF-8 code
+               * @param int $c UTF-8 code
+               * @return Returns the specified character.
+               * @author Miguel Perez, Nicola Asuni
+               * @since 2.3.000 (2008-03-05)
+               */
+               function unichr($c) {
+                       if (!$this->isunicode) {
+                               return chr($c);
+                       } elseif ($c <= 0x7F) {
+                               // one byte
+                               return chr($c);
+                       } elseif ($c <= 0x7FF) {
+                               // two bytes
+                               return chr(0xC0 | $c >> 6).chr(0x80 | $c & 0x3F);
+                       } elseif ($c <= 0xFFFF) {
+                               // three bytes
+                               return chr(0xE0 | $c >> 12).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
+                       } elseif ($c <= 0x10FFFF) {
+                               // four bytes
+                               return chr(0xF0 | $c >> 18).chr(0x80 | $c >> 12 & 0x3F).chr(0x80 | $c >> 6 & 0x3F).chr(0x80 | $c & 0x3F);
+                       } else {
+                               return "";
+                       }
+               }
+
+               /**
+               * Puts an image in the page.
+               * The upper-left corner must be given.
+               * The dimensions can be specified in different ways:<ul>
+               * <li>explicit width and height (expressed in user unit)</li>
+               * <li>one explicit dimension, the other being calculated automatically in order to keep the original proportions</li>
+               * <li>no explicit dimension, in which case the image is put at 72 dpi</li></ul>
+               * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;
+               * The format can be specified explicitly or inferred from the file extension.<br />
+               * It is possible to put a link on the image.<br />
+               * Remark: if an image is used several times, only one copy will be embedded in the file.<br />
+               * @param string $file Name of the file containing the image.
+               * @param float $x Abscissa of the upper-left corner.
+               * @param float $y Ordinate of the upper-left corner.
+               * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+               * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+               * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension.
+               * @param mixed $link URL or identifier returned by AddLink().
+               * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+               * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library).
+               * @param int $dpi dot-per-inch resolution used on resize
+               * @param string $palign Allows to center or align the image on the current line. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+               * @since 1.1
+               * @see AddLink()
+               */
+               function Image($file, $x, $y, $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='') {
+                       // get image size
+                       list($pixw, $pixh) = getimagesize($file);
+                       // calculate image width and height on document
+                       if (($w <= 0) AND ($h <= 0)) {
+                               // convert image size to document unit
+                               $w = $pixw / ($this->imgscale * $this->k);
+                               $h = $pixh / ($this->imgscale * $this->k);
+                       } elseif ($w <= 0) {
+                               $w = $h * $pixw / $pixh;
+                       } elseif ($h <= 0) {
+                               $h = $w * $pixh / $pixw;
+                       }
+                       // calculate new minimum dimensions in pixels
+                       $neww = round($w * $this->k * $dpi / $this->dpi);
+                       $newh = round($h * $this->k * $dpi / $this->dpi);
+                       // check if resize is necessary (resize is used only to reduce the image)
+                       if (($neww * $newh) >= ($pixw * $pixh)) {
+                               $resize = false;
+                       }
+                       // check if image has been already added on document
+                       if (!isset($this->images[$file])) {
+                               //First use of image, get info
+                               if ($type == '') {
+                                       $fileinfo = pathinfo($file);
+                                       if (isset($fileinfo['extension']) AND (!empty($fileinfo['extension']))) {
+                                               $type = $fileinfo['extension'];
+                                       } else {
+                                               $this->Error('Image file has no extension and no type was specified: '.$file);
+                                       }
+                               }
+                               $type = strtolower($type);
+                               if ($type == "jpg") {
+                                       $type = "jpeg";
+                               }
+                               $mqr = get_magic_quotes_runtime();
+                               set_magic_quotes_runtime(0);
+                               // Specific image handlers
+                               $mtd = '_parse'.$type;
+                               // GD image handler function
+                               $gdfunction = "imagecreatefrom".$type;
+                               $info = false;
+                               if ((method_exists($this,$mtd)) AND (!($resize AND function_exists($gdfunction)))) {
+                                       $info = $this->$mtd($file);
+                               }
+                               if (!$info) {
+                                       if (function_exists($gdfunction)) {
+                                               $img = $gdfunction($file);
+                                               if ($resize) {
+                                                       $imgr = imagecreatetruecolor($neww, $newh);
+                                                       imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh);
+                                                       $info = $this->_toJPEG($imgr);
+                                               } else {
+                                                       $info = $this->_toJPEG($img);
+                                               }
+                                       } else {
+                                               return;
+                                       }
+                               }
+                               if ($info === false) {
+                                       //If false, we cannot process image
+                                       return;
+                               }
+                               set_magic_quotes_runtime($mqr);
+                               $info['i'] = count($this->images) + 1;
+                               // add image to document
+                               $this->images[$file] = $info;
+                       } else {
+                               $info = $this->images[$file];
+                       }
+                       // 2007-10-19 Warren Sherliker
+                       // Check whether we need a new page first as this does not fit
+                       // Copied from Cell()
+                       if ((($this->y + $h) > $this->PageBreakTrigger) AND empty($this->InFooter) AND $this->AcceptPageBreak()) {
+                               // Automatic page break
+                               $this->AddPage($this->CurOrientation);
+                               // Reset coordinates to top fo next page
+                               $x = $this->GetX();
+                               $y = $this->GetY();
+                       }
+                       // 2007-10-19 Warren Sherliker: End Edit
+                       // set bottomcoordinates
+                       $this->img_rb_y = $y + $h;
+                       // set alignment
+                       if ($this->rtl) {
+                               if ($palign == 'L') {
+                                       $ximg = $this->lMargin;
+                                       // set right side coordinate
+                                       $this->img_rb_x = $ximg + $w;
+                               } elseif ($palign == 'C') {
+                                       $ximg = ($this->w - $x - $w) / 2;
+                                       // set right side coordinate
+                                       $this->img_rb_x = $ximg + $w;
+                               } else {
+                                       $ximg = $this->w - $x - $w;
+                                       // set left side coordinate
+                                       $this->img_rb_x = $ximg;
+                               }
+                       } else {
+                               if ($palign == 'R') {
+                                       $ximg = $this->w - $this->rMargin - $w;
+                                       // set left side coordinate
+                                       $this->img_rb_x = $ximg;
+                               } elseif ($palign == 'C') {
+                                       $ximg = ($this->w - $x - $w) / 2;
+                                       // set right side coordinate
+                                       $this->img_rb_x = $ximg + $w;
+                               } else {
+                                       $ximg = $x;
+                                       // set right side coordinate
+                                       $this->img_rb_x = $ximg + $w;
+                               }
+                       }
+                       $xkimg = $ximg * $this->k;
+                       $this->_out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i']));
+                       if ($link) {
+                               $this->Link($ximg, $y, $w, $h, $link);
+                       }
+                       // set pointer to align the successive text/objects
+                       switch($align) {
+                               case 'T':{
+                                       $this->y = $y;
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'M':{
+                                       $this->y = $y + round($h/2);
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'B':{
+                                       $this->y = $this->img_rb_y;
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'N':{
+                                       $this->SetY($this->img_rb_y);
+                                       break;
+                               }
+                               default:{
+                                       break;
+                               }
+                       }
+                       $this->endlinex = $this->img_rb_x;
+               }
+
+               /**
+               * Convert the loaded php image to a JPEG and then return a structure for the PDF creator.
+               * This function requires GD library and write access to the directory defined on K_PATH_CACHE constant.
+               * @param string $file Image file name.
+               * @param image $image Image object.
+               * return image JPEG image object.
+               * @access protected
+               */
+               function _toJPEG($image) {
+                       $tempname = tempnam(K_PATH_CACHE,'jpg');
+                       imagejpeg($image, $tempname, $this->jpeg_quality);
+                       imagedestroy($image);
+                       $retvars = $this->_parsejpeg($tempname);
+                       // tidy up by removing temporary image
+                       unlink($tempname);
+                       return $retvars;
+               }
+
+               /**
+               * Extract info from a JPEG file without using the GD library.
+               * @param string $file image file to parse
+               * @return array structure containing the image data
+               * @access protected
+               */
+               function _parsejpeg($file) {
+                       $a = getimagesize($file);
+                       if (empty($a)) {
+                               $this->Error('Missing or incorrect image file: '.$file);
+                       }
+                       if ($a[2] != 2) {
+                               $this->Error('Not a JPEG file: '.$file);
+                       }
+                       if ((!isset($a['channels'])) OR ($a['channels'] == 3)) {
+                               $colspace = 'DeviceRGB';
+                       } elseif ($a['channels'] == 4) {
+                               $colspace = 'DeviceCMYK';
+                       }       else {
+                               $colspace = 'DeviceGray';
+                       }
+                       $bpc = isset($a['bits']) ? $a['bits'] : 8;
+                       $data = file_get_contents($file);
+                       return array('w' => $a[0], 'h' => $a[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
+               }
+
+               /**
+               * Extract info from a PNG file without using the GD library.
+               * @param string $file image file to parse
+               * @return array structure containing the image data
+               * @access protected
+               */
+               function _parsepng($file) {
+                       $f = fopen($file,'rb');
+                       if (empty($f)) {
+                               $this->Error('Can\'t open image file: '.$file);
+                       }
+                       //Check signature
+                       if (fread($f,8) != chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
+                               $this->Error('Not a PNG file: '.$file);
+                       }
+                       //Read header chunk
+                       fread($f,4);
+                       if (fread($f,4) != 'IHDR') {
+                               $this->Error('Incorrect PNG file: '.$file);
+                       }
+                       $w = $this->_freadint($f);
+                       $h = $this->_freadint($f);
+                       $bpc = ord(fread($f,1));
+                       if ($bpc > 8) {
+                               //$this->Error('16-bit depth not supported: '.$file);
+                               return false;
+                       }
+                       $ct = ord(fread($f,1));
+                       if ($ct == 0) {
+                               $colspace = 'DeviceGray';
+                       } elseif ($ct == 2) {
+                               $colspace = 'DeviceRGB';
+                       } elseif ($ct == 3) {
+                               $colspace = 'Indexed';
+                       } else {
+                               //$this->Error('Alpha channel not supported: '.$file);
+                               return false;
+                       }
+                       if (ord(fread($f,1)) != 0) {
+                               //$this->Error('Unknown compression method: '.$file);
+                               return false;
+                       }
+                       if (ord(fread($f,1)) != 0) {
+                               //$this->Error('Unknown filter method: '.$file);
+                               return false;
+                       }
+                       if (ord(fread($f,1)) != 0) {
+                               //$this->Error('Interlacing not supported: '.$file);
+                               return false;
+                       }
+                       fread($f,4);
+                       $parms = '/DecodeParms <</Predictor 15 /Colors '.($ct==2 ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w.'>>';
+                       //Scan chunks looking for palette, transparency and image data
+                       $pal = '';
+                       $trns = '';
+                       $data = '';
+                       do {
+                               $n = $this->_freadint($f);
+                               $type = fread($f,4);
+                               if ($type == 'PLTE') {
+                                       //Read palette
+                                       $pal = fread($f,$n);
+                                       fread($f,4);
+                               } elseif ($type == 'tRNS') {
+                                       //Read transparency info
+                                       $t = fread($f,$n);
+                                       if ($ct == 0) {
+                                               $trns = array(ord(substr($t,1,1)));
+                                       }
+                                       elseif ($ct == 2) {
+                                               $trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
+                                       } else {
+                                               $pos = strpos($t,chr(0));
+                                               if ($pos !== false) {
+                                                       $trns = array($pos);
+                                               }
+                                       }
+                                       fread($f, 4);
+                               } elseif ($type == 'IDAT') {
+                                       //Read image data block
+                                       $data .= fread($f,$n);
+                                       fread($f, 4);
+                               } elseif ($type == 'IEND') {
+                                       break;
+                               } else {
+                                       fread($f, $n+4);
+                               }
+                       }
+                       while ($n);
+                       if (($colspace == 'Indexed') AND (empty($pal))) {
+                               //$this->Error('Missing palette in '.$file);
+                               return false;
+                       }
+                       fclose($f);
+                       return array('w' => $w, 'h' => $h, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
+               }
+
+               /**
+               * Performs a line break.
+               * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter.
+               * @param float $h The height of the break. By default, the value equals the height of the last printed cell.
+               * @param boolean $cell if true add a cMargin to the x coordinate
+               * @since 1.0
+               * @see Cell()
+               */
+               function Ln($h='', $cell=false) {
+                       //Line feed; default value is last cell height
+                       if ($cell) {
+                               $cellmargin = $this->cMargin;
+                       } else {
+                               $cellmargin = 0;
+                       }
+                       if ($this->rtl) {
+                               $this->x = $this->w - $this->rMargin - $cellmargin;
+                       } else {
+                               $this->x = $this->lMargin + $cellmargin;
+                       }
+                       if (is_string($h)) {
+                               $this->y += $this->lasth;
+                       } else {
+                               $this->y += $h;
+                       }
+                       $this->newline = true;
+               }
+
+               /**
+               * Returns the relative X value of current position.
+               * The value is relative to the left border for LTR languages and to the right border for RTL languages.
+               * @return float
+               * @since 1.2
+               * @see SetX(), GetY(), SetY()
+               */
+               function GetX() {
+                       //Get x position
+                       if ($this->rtl) {
+                               return ($this->w - $this->x);
+                       } else {
+                               return $this->x;
+                       }
+               }
+
+               /**
+               * Returns the absolute X value of current position.
+               * @return float
+               * @since 1.2
+               * @see SetX(), GetY(), SetY()
+               */
+               function GetAbsX() {
+                       return $this->x;
+               }
+
+               /**
+               * Returns the ordinate of the current position.
+               * @return float
+               * @since 1.0
+               * @see SetY(), GetX(), SetX()
+               */
+               function GetY() {
+                       //Get y position
+                       return $this->y;
+               }
+
+               /**
+               * Defines the abscissa of the current position.
+               * If the passed value is negative, it is relative to the right of the page (or left if language is RTL).
+               * @param float $x The value of the abscissa.
+               * @since 1.2
+               * @see GetX(), GetY(), SetY(), SetXY()
+               */
+               function SetX($x) {
+                       //Set x position
+                       if ($this->rtl) {
+                               if ($x >= 0) {
+                                       $this->x = $this->w - $x;
+                               } else {
+                                       $this->x = abs($x);
+                               }
+                       } else {
+                               if ($x >= 0) {
+                                       $this->x = $x;
+                               } else {
+                                       $this->x = $this->w + $x;
+                               }
+                       }
+               }
+
+               /**
+               * Moves the current abscissa back to the left margin and sets the ordinate.
+               * If the passed value is negative, it is relative to the bottom of the page.
+               * @param float $y The value of the ordinate.
+               * @since 1.0
+               * @see GetX(), GetY(), SetY(), SetXY()
+               */
+               function SetY($y) {
+                       //Set y position and reset x
+                       if ($this->rtl) {
+                               $this->x = $this->w - $this->rMargin;
+                       } else {
+                               $this->x = $this->lMargin;
+                       }
+                       if ($y >= 0) {
+                               $this->y = $y;
+                       } else {
+                               $this->y = $this->h + $y;
+                       }
+               }
+
+               /**
+               * Defines the abscissa and ordinate of the current position.
+               * If the passed values are negative, they are relative respectively to the right and bottom of the page.
+               * @param float $x The value of the abscissa
+               * @param float $y The value of the ordinate
+               * @since 1.2
+               * @see SetX(), SetY()
+               */
+               function SetXY($x, $y) {
+                       //Set x and y positions
+                       $this->SetY($y);
+                       $this->SetX($x);
+               }
+
+               /**
+               * Send the document to a given destination: string, local file or browser.
+               * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.<br />
+               * The method first calls Close() if necessary to terminate the document.
+               * @param string $name The name of the file when saved.
+               * @param string $dest Destination where to send the document. It can take one of the following values:<ul><li>I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.</li><li>D: send to the browser and force a file download with the name given by name.</li><li>F: save to a local file with the name given by name.</li><li>S: return the document as a string. name is ignored.</li></ul>
+               * @since 1.0
+               * @see Close()
+               */
+               function Output($name='doc.pdf', $dest='I') {
+                       //Output PDF to some destination
+                       //Finish document if necessary
+                       if ($this->state < 3) {
+                               $this->Close();
+                       }
+                       //Normalize parameters
+                       if (is_bool($dest)) {
+                               $dest = $dest ? 'D' : 'F';
+                       }
+                       $dest = strtoupper($dest);
+                       if ($dest != 'F') {
+                               $name = str_replace("+", "%20", urlencode($name));
+                               $name = preg_replace('/[\r\n]+\s*/', '' , $name);
+                       }
+                       switch($dest) {
+                               case 'I': {
+                                       //Send to standard output
+                                       if (ob_get_contents()) {
+                                               $this->Error('Some data has already been output, can\'t send PDF file');
+                                       }
+                                       if (php_sapi_name() != 'cli') {
+                                               //We send to a browser
+                                               header('Content-Type: application/pdf');
+                                               if (headers_sent()) {
+                                                       $this->Error('Some data has already been output to browser, can\'t send PDF file');
+                                               }
+                                               // Disable caching
+                                               header('Cache-Control: private, must-revalidate');
+                                               header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
+                                               header('Content-Length: '.strlen($this->buffer));
+                                               header('Content-Disposition: inline; filename="'.basename($name).'";');
+                                       }
+                                       echo $this->buffer;
+                                       break;
+                               }
+                               case 'D': {
+                                       //Download file
+                                       if (ob_get_contents()) {
+                                               $this->Error('Some data has already been output, can\'t send PDF file');
+                                       }
+                                       header('Content-Description: File Transfer');
+                                       if (headers_sent()) {
+                                               $this->Error('Some data has already been output to browser, can\'t send PDF file');
+                                       }
+                                       header('Cache-Control: private, must-revalidate');
+                                       header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
+                                       // always modified
+                                       header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+                                       // force download dialog
+                                       header("Content-Type: application/force-download");
+                                       header("Content-Type: application/octet-stream", false);
+                                       header("Content-Type: application/download", false);
+                                       // use the Content-Disposition header to supply a recommended filename
+                                       header('Content-Disposition: attachment; filename="'.basename($name).'";');
+                                       header("Content-Transfer-Encoding: binary");
+                                       header("Content-Length: ".strlen($this->buffer));
+                                       echo $this->buffer;
+                                       break;
+                               }
+                               case 'F': {
+                                       //Save to local file
+                                       $f = fopen($name, 'wb');
+                                       if (!$f) {
+                                               $this->Error('Unable to create output file: '.$name);
+                                       }
+                                       fwrite($f, $this->buffer,strlen($this->buffer));
+                                       fclose($f);
+                                       break;
+                               }
+                               case 'S': {
+                                       //Return as a string
+                                       return $this->buffer;
+                               }
+                               default: {
+                                       $this->Error('Incorrect output destination: '.$dest);
+                               }
+                       }
+                       return '';
+               }
+
+               /**
+               * Check for locale-related bug
+               * @access protected
+               */
+               function _dochecks() {
+                       //Check for locale-related bug
+                       if (1.1 == 1) {
+                               $this->Error('Don\'t alter the locale before including class file');
+                       }
+                       //Check for decimal separator
+                       if (sprintf('%.1f', 1.0) != '1.0') {
+                               setlocale(LC_NUMERIC, 'C');
+                       }
+               }
+
+               /**
+               * Return fonts path
+               * @return string
+               * @access protected
+               */
+               function _getfontpath() {
+                       if (!defined('K_PATH_FONTS') AND is_dir(dirname(__FILE__).'/fonts')) {
+                               define('K_PATH_FONTS', dirname(__FILE__).'/fonts/');
+                       }
+                       return defined('K_PATH_FONTS') ? K_PATH_FONTS : '';
+               }
+
+               /**
+               * Output pages.
+               * @access protected
+               */
+               function _putpages() {
+                       $nb = count($this->pages);
+                       if (!empty($this->pagegroups)) {
+                               // do page number replacement
+                               foreach ($this->pagegroups as $k => $v) {
+                                       $alias = $this->_escapetext($k);
+                                       $nbstr = $this->UTF8ToUTF16BE($v, false);
+                                       for ($n = 1; $n <= $nb; $n++) {
+                                               $this->pages[$n] = str_replace($alias, $nbstr, $this->pages[$n]);
+                                       }
+                               }
+                       }
+                       if (!empty($this->AliasNbPages)) {
+                               $nbstr = $this->UTF8ToUTF16BE($nb, false);
+                               //Replace number of pages
+                               for($n = 1; $n <= $nb; $n++) {
+                                       $this->pages[$n] = str_replace($this->AliasNbPages, $nbstr, $this->pages[$n]);
+                               }
+                       }
+                       $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
+                       for($n=1; $n <= $nb; $n++) {
+                               //Page
+                               $this->_newobj();
+                               $this->_out('<</Type /Page');
+                               $this->_out('/Parent 1 0 R');
+                               $this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]', $this->pagedim[$n]['w'], $this->pagedim[$n]['h']));
+                               $this->_out('/Resources 2 0 R');
+                               if (isset($this->PageLinks[$n])) {
+                                       //Links
+                                       $annots = '/Annots [';
+                                       foreach($this->PageLinks[$n] as $pl) {
+                                               $rect = sprintf('%.2f %.2f %.2f %.2f', $pl[0], $pl[1], $pl[0]+$pl[2], $pl[1]-$pl[3]);
+                                               $annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';
+                                               if (is_string($pl[4])) {
+                                                       $annots .= '/A <</S /URI /URI '.$this->_uristring($pl[4]).'>>>>';
+                                               }
+                                               else {
+                                                       $l = $this->links[$pl[4]];
+                                                       $h = $this->pagedim[$l[0]]['h'];
+                                                       $annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]>>', 1+2*$l[0], $h-$l[1]*$this->k);
+                                               }
+                                       }
+                                       $this->_out($annots.']');
+                               }
+                               $this->_out('/Contents '.($this->n + 1).' 0 R>>');
+                               $this->_out('endobj');
+                               //Page content
+                               $p = ($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n];
+                               $this->_newobj();
+                               $this->_out('<<'.$filter.'/Length '.strlen($p).'>>');
+                               $this->_putstream($p);
+                               $this->_out('endobj');
+                       }
+                       //Pages root
+                       $this->offsets[1] = strlen($this->buffer);
+                       $this->_out('1 0 obj');
+                       $this->_out('<</Type /Pages');
+                       $kids='/Kids [';
+                       for($i=0; $i < $nb; $i++) {
+                               $kids .= (3+2*$i).' 0 R ';
+                       }
+                       $this->_out($kids.']');
+                       $this->_out('/Count '.$nb);
+                       //$this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]',$this->pagedim[0]['w'],$this->pagedim[0]['h']));
+                       $this->_out('>>');
+                       $this->_out('endobj');
+               }
+
+               /**
+               * Output fonts.
+               * _putfonts
+               * @access protected
+               */
+               function _putfonts() {
+                       $nf = $this->n;
+                       foreach($this->diffs as $diff) {
+                               //Encodings
+                               $this->_newobj();
+                               $this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.']>>');
+                               $this->_out('endobj');
+                       }
+                       $mqr = get_magic_quotes_runtime();
+                       set_magic_quotes_runtime(0);
+                       foreach($this->FontFiles as $file => $info) {
+                               //Font file embedding
+                               $this->_newobj();
+                               $this->FontFiles[$file]['n'] = $this->n;
+                               $font = file_get_contents($this->_getfontpath().strtolower($file));
+                               $compressed = (substr($file,-2)=='.z');
+                               if ((!$compressed) AND (isset($info['length2']))) {
+                                       $header = (ord($font{0}) == 128);
+                                       if ($header) {
+                                               //Strip first binary header
+                                               $font = substr($font,6);
+                                       }
+                                       if ($header AND (ord($font{$info['length1']}) == 128)) {
+                                               //Strip second binary header
+                                               $font = substr($font, 0, $info['length1']).substr($font, $info['length1']+6);
+                                       }
+                               }
+                               $this->_out('<</Length '.strlen($font));
+                               if ($compressed) {
+                                       $this->_out('/Filter /FlateDecode');
+                               }
+                               $this->_out('/Length1 '.$info['length1']);
+                               if (isset($info['length2'])) {
+                                       $this->_out('/Length2 '.$info['length2'].' /Length3 0');
+                               }
+                               $this->_out('>>');
+                               $this->_putstream($font);
+                               $this->_out('endobj');
+                       }
+                       set_magic_quotes_runtime($mqr);
+                       foreach($this->fonts as $k => $font) {
+                               //Font objects
+                               $this->fonts[$k]['n'] = $this->n + 1;
+                               $type = $font['type'];
+                               $name = $font['name'];
+                               if ($type == 'core') {
+                                       //Standard font
+                                       $this->_newobj();
+                                       $this->_out('<</Type /Font');
+                                       $this->_out('/BaseFont /'.$name);
+                                       $this->_out('/Subtype /Type1');
+                                       if (($name != 'symbol') AND ($name != 'zapfdingbats')) {
+                                               $this->_out('/Encoding /WinAnsiEncoding');
+                                       }
+                                       $this->_out('>>');
+                                       $this->_out('endobj');
+                               } elseif (($type == 'Type1') OR ($type == 'TrueType')) {
+                                       //Additional Type1 or TrueType font
+                                       $this->_newobj();
+                                       $this->_out('<</Type /Font');
+                                       $this->_out('/BaseFont /'.$name);
+                                       $this->_out('/Subtype /'.$type);
+                                       $this->_out('/FirstChar 32 /LastChar 255');
+                                       $this->_out('/Widths '.($this->n + 1).' 0 R');
+                                       $this->_out('/FontDescriptor '.($this->n + 2).' 0 R');
+                                       if ($font['enc']) {
+                                               if (isset($font['diff'])) {
+                                                       $this->_out('/Encoding '.($nf + $font['diff']).' 0 R');
+                                               } else {
+                                                       $this->_out('/Encoding /WinAnsiEncoding');
+                                               }
+                                       }
+                                       $this->_out('>>');
+                                       $this->_out('endobj');
+                                       //Widths
+                                       $this->_newobj();
+                                       $cw = &$font['cw'];
+                                       $s = '[';
+                                       for($i=32; $i <= 255; $i++) {
+                                               //$s .= $cw[chr($i)].' ';
+                                               $s .= $cw[$i].' ';
+                                       }
+                                       $this->_out($s.']');
+                                       $this->_out('endobj');
+                                       //Descriptor
+                                       $this->_newobj();
+                                       $s = '<</Type /FontDescriptor /FontName /'.$name;
+                                       foreach($font['desc'] as $k => $v) {
+                                               $s .= ' /'.$k.' '.$v;
+                                       }
+                                       $file = $font['file'];
+                                       if ($file) {
+                                               $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$file]['n'].' 0 R';
+                                       }
+                                       $this->_out($s.'>>');
+                                       $this->_out('endobj');
+                               } else {
+                                       //Allow for additional types
+                                       $mtd = '_put'.strtolower($type);
+                                       if (!method_exists($this, $mtd)) {
+                                               $this->Error('Unsupported font type: '.$type);
+                                       }
+                                       $this->$mtd($font);
+                               }
+                       }
+               }
+
+               /**
+                * Output CID-0 fonts.
+                * @param array $font font data
+                * @access protected
+                * @author Andrew Whitehead, Nicola Asuni
+                * @since 3.2.000 (2008-06-23)
+                */
+               function _putcidfont0($font) {
+                       $longname = $name = $font['name'];
+                       $enc = $font['enc'];
+                       if ($enc) {
+                               $longname .= "-$enc";
+                       }
+                       $this->_newobj();
+                       $this->_out('<</Type /Font');
+                       $this->_out('/BaseFont /'.$longname);
+                       $this->_out('/Subtype /Type0');
+                       if ($enc) {
+                               $this->_out('/Encoding /'.$enc);
+                       }
+                       $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]');
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       $this->_newobj();
+                       $this->_out('<</Type /Font');
+                       $this->_out('/BaseFont /'.$name);
+                       $this->_out('/Subtype /CIDFontType0');
+                       $cidinfo = '/Registry ('.$font['cidinfo']['Registry'].') ';
+                       $cidinfo .= '/Ordering ('.$font['cidinfo']['Ordering'].') ';
+                       $cidinfo .= '/Supplement '.$font['cidinfo']['Supplement'];
+                       $this->_out('/CIDSystemInfo <<'.$cidinfo.'>>');
+                       $this->_out('/FontDescriptor '.($this->n + 1).' 0 R');
+                       $codes = array_keys($font['cw']);
+                       $first = current($codes);
+                       $last = end($codes);
+                       $this->_out('/DW '.$font['dw']);
+                       $w = '/W [';
+                       $ranges = array();
+                       $currange = 0;
+                       for($i = $first; $i <= $last; $i++) {
+                               if (isset($font['cw'][$i]) AND (!$currange)) {
+                                       $currange = $i - 31;
+                               } elseif (!isset($font['cw'][$i])) {
+                                       $currange = 0;
+                               }
+                               if ($currange) {
+                                       $ranges[$currange][] = $font['cw'][$i];
+                               }
+                       }
+                       foreach($ranges as $k => $ws) {
+                               $w .= ' '.$k.' [ '.implode(' ', $ws).' ]';
+                       }
+                       $w .= ' ]';
+                       $this->_out($w);
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       $this->_newobj();
+                       $s = '<</Type /FontDescriptor /FontName /'.$name;
+                       foreach($font['desc'] as $k => $v) {
+                               $s .= ' /'.$k.' '.$v;
+                       }
+                       $this->_out($s.'>>');
+                       $this->_out('endobj');
+               }
+
+               /**
+                * Output images.
+                * @access protected
+                */
+               function _putimages() {
+                       $filter = ($this->compress) ? '/Filter /FlateDecode ' : '';
+                       reset($this->images);
+                       while (list($file, $info) = each($this->images)) {
+                               $this->_newobj();
+                               $this->images[$file]['n'] = $this->n;
+                               $this->_out('<</Type /XObject');
+                               $this->_out('/Subtype /Image');
+                               $this->_out('/Width '.$info['w']);
+                               $this->_out('/Height '.$info['h']);
+                               if (isset($info["masked"])) {
+                                       $this->_out('/SMask '.($this->n-1).' 0 R');
+                               }
+                               if ($info['cs'] == 'Indexed') {
+                                       $this->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal']) / 3 - 1).' '.($this->n + 1).' 0 R]');
+                               } else {
+                                       $this->_out('/ColorSpace /'.$info['cs']);
+                                       if ($info['cs'] == 'DeviceCMYK') {
+                                               $this->_out('/Decode [1 0 1 0 1 0 1 0]');
+                                       }
+                               }
+                               $this->_out('/BitsPerComponent '.$info['bpc']);
+                               if (isset($info['f'])) {
+                                       $this->_out('/Filter /'.$info['f']);
+                               }
+                               if (isset($info['parms'])) {
+                                       $this->_out($info['parms']);
+                               }
+                               if (isset($info['trns']) and is_array($info['trns'])) {
+                                       $trns='';
+                                       for($i=0; $i < count($info['trns']); $i++) {
+                                               $trns .= $info['trns'][$i].' '.$info['trns'][$i].' ';
+                                       }
+                                       $this->_out('/Mask ['.$trns.']');
+                               }
+                               $this->_out('/Length '.strlen($info['data']).'>>');
+                               $this->_putstream($info['data']);
+                               unset($this->images[$file]['data']);
+                               $this->_out('endobj');
+                               //Palette
+                               if ($info['cs'] == 'Indexed') {
+                                       $this->_newobj();
+                                       $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
+                                       $this->_out('<<'.$filter.'/Length '.strlen($pal).'>>');
+                                       $this->_putstream($pal);
+                                       $this->_out('endobj');
+                               }
+                       }
+               }
+
+               /**
+               * Output object dictionary for images.
+               * @access protected
+               */
+               function _putxobjectdict() {
+                       foreach($this->images as $image) {
+                               $this->_out('/I'.$image['i'].' '.$image['n'].' 0 R');
+                       }
+               }
+
+               /**
+               * Output Resources Dictionary.
+               * @access protected
+               */
+               function _putresourcedict(){
+                       $this->_out('/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
+                       $this->_out('/Font <<');
+                       foreach($this->fonts as $font) {
+                               $this->_out('/F'.$font['i'].' '.$font['n'].' 0 R');
+                       }
+                       $this->_out('>>');
+                       $this->_out('/XObject <<');
+                       $this->_putxobjectdict();
+                       $this->_out('>>');
+                       // visibility
+                       $this->_out('/Properties <</OC1 '.$this->n_ocg_print.' 0 R /OC2 '.$this->n_ocg_view.' 0 R>>');
+                       // transparency
+                       $this->_out('/ExtGState <<');
+                       foreach($this->extgstates as $k => $extgstate) {
+                               $this->_out('/GS'.$k.' '.$extgstate['n'].' 0 R');
+                       }
+                       $this->_out('>>');
+                       // gradients
+                       if (isset($this->gradients) AND (count($this->gradients) > 0)) {
+                               $this->_out('/Shading <<');
+                               foreach($this->gradients as $id => $grad) {
+                                       $this->_out('/Sh'.$id.' '.$grad['id'].' 0 R');
+                               }
+                               $this->_out('>>');
+                       }
+               }
+
+               /**
+               * Output Resources.
+               * @access protected
+               */
+               function _putresources() {
+                       $this->_putextgstates();
+                       $this->_putocg();
+                       $this->_putfonts();
+                       $this->_putimages();
+                       $this->_putshaders();
+                       //Resource dictionary
+                       $this->offsets[2] = strlen($this->buffer);
+                       $this->_out('2 0 obj');
+                       $this->_out('<<');
+                       $this->_putresourcedict();
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       $this->_putjavascript();
+                       $this->_putbookmarks();
+                       // encryption
+                       if ($this->encrypted) {
+                               $this->_newobj();
+                               $this->enc_obj_id = $this->n;
+                               $this->_out('<<');
+                               $this->_putencryption();
+                               $this->_out('>>');
+                               $this->_out('endobj');
+                       }
+               }
+
+               /**
+               * Adds some Metadata information
+               * (see Chapter 10.2 of PDF Reference)
+               * @access protected
+               */
+               function _putinfo() {
+                       if (!empty($this->title)) {
+                               $this->_out('/Title '.$this->_textstring($this->title));
+                       }
+                       if (!empty($this->author)) {
+                               $this->_out('/Author '.$this->_textstring($this->author));
+                       }
+                       if (!empty($this->subject)) {
+                               $this->_out('/Subject '.$this->_textstring($this->subject));
+                       }
+                       if (!empty($this->keywords)) {
+                               $this->_out('/Keywords '.$this->_textstring($this->keywords));
+                       }
+                       if (!empty($this->creator)) {
+                               $this->_out('/Creator '.$this->_textstring($this->creator));
+                       }
+                       if (defined('PDF_PRODUCER')) {
+                               $this->_out('/Producer '.$this->_textstring(PDF_PRODUCER));
+                       }
+                       $this->_out('/CreationDate '.$this->_datestring('D:'.date('YmdHis')));
+                       $this->_out('/ModDate '.$this->_datestring('D:'.date('YmdHis')));
+               }
+
+               /**
+               * Format a date string for meta information
+               * @param string $s date string to escape.
+               * @return string escaped string.
+               * @access protected
+               */
+               function _datestring($s) {
+                       if ($this->encrypted) {
+                               $s = $this->_RC4($this->_objectkey($this->n), $s);
+                       }
+                       return '('. $this->_escape($s).')';
+               }
+
+               /**
+               * Output Catalog.
+               * @access protected
+               */
+               function _putcatalog() {
+                       $this->_out('/Type /Catalog');
+                       $this->_out('/Pages 1 0 R');
+
+                       if ($this->ZoomMode == 'fullpage') {
+                               $this->_out('/OpenAction [3 0 R /Fit]');
+                       } elseif ($this->ZoomMode == 'fullwidth') {
+                               $this->_out('/OpenAction [3 0 R /FitH null]');
+                       } elseif ($this->ZoomMode == 'real') {
+                               $this->_out('/OpenAction [3 0 R /XYZ null null 1]');
+                       } elseif (!is_string($this->ZoomMode)) {
+                               $this->_out('/OpenAction [3 0 R /XYZ null null '.($this->ZoomMode / 100).']');
+                       }
+                       if (isset($this->LayoutMode) AND (!empty($this->LayoutMode))) {
+                               $this->_out('/PageLayout /'.$this->LayoutMode.'');
+                       }
+                       if (isset($this->PageMode) AND (!empty($this->PageMode))) {
+                               $this->_out('/PageMode /'.$this->PageMode);
+                       }
+                       if (isset($this->l['a_meta_language'])) {
+                               $this->_out('/Lang /'.$this->l['a_meta_language']);
+                       }
+                       if (!empty($this->javascript)) {
+                               $this->_out('/Names <</JavaScript '.($this->n_js).' 0 R>>');
+                       }
+                       if (count($this->outlines) > 0) {
+                               $this->_out('/Outlines '.$this->OutlineRoot.' 0 R');
+                               $this->_out('/PageMode /UseOutlines');
+                       }
+                       $this->_putviewerpreferences();
+                       $p = $this->n_ocg_print.' 0 R';
+                       $v = $this->n_ocg_view.' 0 R';
+                       $as = "<</Event /Print /OCGs [".$p." ".$v."] /Category [/Print]>> <</Event /View /OCGs [".$p." ".$v."] /Category [/View]>>";
+                       $this->_out("/OCProperties <</OCGs [".$p." ".$v."] /D <</ON [".$p."] /OFF [".$v."] /AS [".$as."]>>>>");
+                       $this->_putuserrights();
+               }
+
+               /**
+               * Output viewer preferences.
+               * @author Nicola asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access protected
+               */
+               function _putviewerpreferences() {
+                       $this->_out('/ViewerPreferences<<');
+                       if ($this->rtl) {
+                               $this->_out('/Direction /R2L');
+                       } else {
+                               $this->_out('/Direction /L2R');
+                       }
+                       if (isset($this->viewer_preferences['HideToolbar']) AND ($this->viewer_preferences['HideToolbar'])) {
+                               $this->_out('/HideToolbar true');
+                       }
+                       if (isset($this->viewer_preferences['HideMenubar']) AND ($this->viewer_preferences['HideMenubar'])) {
+                               $this->_out('/HideMenubar true');
+                       }
+                       if (isset($this->viewer_preferences['HideWindowUI']) AND ($this->viewer_preferences['HideWindowUI'])) {
+                               $this->_out('/HideWindowUI true');
+                       }
+                       if (isset($this->viewer_preferences['FitWindow']) AND ($this->viewer_preferences['FitWindow'])) {
+                               $this->_out('/FitWindow true');
+                       }
+                       if (isset($this->viewer_preferences['CenterWindow']) AND ($this->viewer_preferences['CenterWindow'])) {
+                               $this->_out('/CenterWindow true');
+                       }
+                       if (isset($this->viewer_preferences['DisplayDocTitle']) AND ($this->viewer_preferences['DisplayDocTitle'])) {
+                               $this->_out('/DisplayDocTitle true');
+                       }
+                       if (isset($this->viewer_preferences['NonFullScreenPageMode'])) {
+                               $this->_out('/NonFullScreenPageMode /'.$this->viewer_preferences['NonFullScreenPageMode'].'');
+                       }
+                       if (isset($this->viewer_preferences['ViewArea'])) {
+                               $this->_out('/ViewArea /'.$this->viewer_preferences['ViewArea']);
+                       }
+                       if (isset($this->viewer_preferences['ViewClip'])) {
+                               $this->_out('/ViewClip /'.$this->viewer_preferences['ViewClip']);
+                       }
+                       if (isset($this->viewer_preferences['PrintArea'])) {
+                               $this->_out('/PrintArea /'.$this->viewer_preferences['PrintArea']);
+                       }
+                       if (isset($this->viewer_preferences['PrintClip'])) {
+                               $this->_out('/PrintClip /'.$this->viewer_preferences['PrintClip']);
+                       }
+                       if (isset($this->viewer_preferences['PrintScaling'])) {
+                               $this->_out('/PrintScaling /'.$this->viewer_preferences['PrintScaling']);
+                       }
+                       if (isset($this->viewer_preferences['Duplex']) AND (!empty($this->viewer_preferences['Duplex']))) {
+                               $this->_out('/Duplex /'.$this->viewer_preferences['Duplex']);
+                       }
+                       if (isset($this->viewer_preferences['PickTrayByPDFSize'])) {
+                               if ($this->viewer_preferences['PickTrayByPDFSize']) {
+                                       $this->_out('/PickTrayByPDFSize true');
+                               } else {
+                                       $this->_out('/PickTrayByPDFSize false');
+                               }
+                       }
+                       if (isset($this->viewer_preferences['PrintPageRange'])) {
+                               $PrintPageRangeNum = "";
+                               foreach ($this->viewer_preferences['PrintPageRange'] as $k => $v) {
+                                       $PrintPageRangeNum .= " ".($v-1)."";
+                               }
+                               $this->_out('/PrintPageRange ['.substr($PrintPageRangeNum,1).']');
+                       }
+                       if (isset($this->viewer_preferences['NumCopies'])) {
+                               $this->_out('/NumCopies '.intval($this->viewer_preferences['NumCopies']));
+                       }
+                       $this->_out('>>');
+               }
+
+               /**
+               * Output trailer.
+               * @access protected
+               */
+               function _puttrailer() {
+                       $this->_out('/Size '.($this->n + 1));
+                       $this->_out('/Root '.$this->n.' 0 R');
+                       $this->_out('/Info '.($this->n - 1).' 0 R');
+                       if ($this->encrypted) {
+                               $this->_out('/Encrypt '.$this->enc_obj_id.' 0 R');
+                               $this->_out('/ID [()()]');
+                       }
+               }
+
+               /**
+               * Output PDF header.
+               * @access protected
+               */
+               function _putheader() {
+                       $this->_out('%PDF-'.$this->PDFVersion);
+               }
+
+               /**
+               * Output end of document (EOF).
+               * @access protected
+               */
+               function _enddoc() {
+                       $this->_putheader();
+                       $this->_putpages();
+                       $this->_putresources();
+                       //Info
+                       $this->_newobj();
+                       $this->_out('<<');
+                       $this->_putinfo();
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       //Catalog
+                       $this->_newobj();
+                       $this->_out('<<');
+                       $this->_putcatalog();
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       //Cross-ref
+                       $o = strlen($this->buffer);
+                       $this->_out('xref');
+                       $this->_out('0 '.($this->n + 1));
+                       $this->_out('0000000000 65535 f ');
+                       for($i=1; $i <= $this->n; $i++) {
+                               $this->_out(sprintf('%010d 00000 n ',$this->offsets[$i]));
+                       }
+                       //Trailer
+                       $this->_out('trailer');
+                       $this->_out('<<');
+                       $this->_puttrailer();
+                       $this->_out('>>');
+                       $this->_out('startxref');
+                       $this->_out($o);
+                       $this->_out('%%EOF');
+                       $this->state = 3;
+               }
+
+               /**
+               * Initialize a new page.
+               * @param string $orientation page orientation. Possible values are (case insensitive):<ul><li>P or PORTRAIT (default)</li><li>L or LANDSCAPE</li></ul>
+               * @param mixed $format The format used for pages. It can be either one of the following values (case insensitive) or a custom format in the form of a two-element array containing the width and the height (expressed in the unit given by unit).<ul><li>4A0</li><li>2A0</li><li>A0</li><li>A1</li><li>A2</li><li>A3</li><li>A4 (default)</li><li>A5</li><li>A6</li><li>A7</li><li>A8</li><li>A9</li><li>A10</li><li>B0</li><li>B1</li><li>B2</li><li>B3</li><li>B4</li><li>B5</li><li>B6</li><li>B7</li><li>B8</li><li>B9</li><li>B10</li><li>C0</li><li>C1</li><li>C2</li><li>C3</li><li>C4</li><li>C5</li><li>C6</li><li>C7</li><li>C8</li><li>C9</li><li>C10</li><li>RA0</li><li>RA1</li><li>RA2</li><li>RA3</li><li>RA4</li><li>SRA0</li><li>SRA1</li><li>SRA2</li><li>SRA3</li><li>SRA4</li><li>LETTER</li><li>LEGAL</li><li>EXECUTIVE</li><li>FOLIO</li></ul>
+               * @access protected
+               */
+               function _beginpage($orientation='', $format='') {
+                       $this->page++;
+                       $this->pages[$this->page] = ""; // this mark should be removed before output
+                       $this->state = 2;
+                       if (empty($orientation)) {
+                               if (isset($this->CurOrientation)) {
+                                       $orientation = $this->CurOrientation;
+                               } else {
+                                       $orientation = 'P';
+                               }
+                       }
+                       if (!empty($format)) {
+                               $this->setPageFormat($format, $orientation);
+                       } else {
+                               $this->setPageOrientation($orientation);
+                       }
+                       if ($this->rtl) {
+                               $this->x = $this->w - $this->rMargin;
+                       } else {
+                               $this->x = $this->lMargin;
+                       }
+                       $this->y = $this->tMargin;
+                       if ($this->newpagegroup){
+                               // start a new group
+                               $n = sizeof($this->pagegroups) + 1;
+                               $alias = "{nb".$n."}";
+                               $this->pagegroups[$alias] = 1;
+                               $this->currpagegroup = $alias;
+                               $this->newpagegroup = false;
+                       } elseif ($this->currpagegroup) {
+                               $this->pagegroups[$this->currpagegroup]++;
+                       }
+               }
+
+               /**
+               * Mark end of page.
+               * @access protected
+               */
+               function _endpage() {
+                       $this->setVisibility("all");
+                       $this->state = 1;
+               }
+
+               /**
+               * Begin a new object.
+               * @access protected
+               */
+               function _newobj() {
+                       $this->n++;
+                       $this->offsets[$this->n] = strlen($this->buffer);
+                       $this->_out($this->n.' 0 obj');
+               }
+
+               /**
+               * Underline text.
+               * @param int $x X coordinate
+               * @param int $y Y coordinate
+               * @param string $txt text to underline
+               * @access protected
+               */
+               function _dounderline($x, $y, $txt) {
+                       $up = $this->CurrentFont['up'];
+                       $ut = $this->CurrentFont['ut'];
+                       $w = $this->GetStringWidth($txt);
+                       return sprintf('%.2f %.2f %.2f %.2f re f', $x * $this->k, ($this->h - ($y - $up / 1000 * $this->FontSize)) * $this->k, $w * $this->k, -$ut / 1000 * $this->FontSizePt);
+               }
+
+               /**
+               * Line through text.
+               * @param int $x X coordinate
+               * @param int $y Y coordinate
+               * @param string $txt text to underline
+               * @access protected
+               */
+               function _dolinethrough($x, $y, $txt) {
+                       $up = $this->CurrentFont['up'];
+                       $ut = $this->CurrentFont['ut'];
+                       $w = $this->GetStringWidth($txt);
+                       return sprintf('%.2f %.2f %.2f %.2f re f', $x * $this->k, ($this->h - ($y - ($this->FontSize/2) - $up / 1000 * $this->FontSize)) * $this->k, $w * $this->k, -$ut / 1000 * $this->FontSizePt);
+               }
+
+               /**
+               * Read a 4-byte integer from file.
+               * @param string $f file name.
+               * @return 4-byte integer
+               * @access protected
+               */
+               function _freadint($f) {
+                       $a = unpack('Ni', fread($f,4));
+                       return $a['i'];
+               }
+
+               /**
+               * Format a text string for meta information
+               * @param string $s string to escape.
+               * @return string escaped string.
+               * @access protected
+               */
+               function _textstring($s) {
+                       if ($this->isunicode) {
+                               if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) {
+                                       $s = $this->UTF8ToLatin1($s);
+                               } else {
+                                       //Convert string to UTF-16BE
+                                       $s = $this->UTF8ToUTF16BE($s, true);
+                               }
+                       }
+                       if ($this->encrypted) {
+                               $s = $this->_RC4($this->_objectkey($this->n), $s);
+                       }
+                       return '('. $this->_escape($s).')';
+               }
+
+               /**
+               * Format an URI string
+               * @param string $s string to escape.
+               * @return string escaped string.
+               * @access protected
+               */
+               function _uristring($s) {
+                       if ($this->encrypted) {
+                               $s = $this->_RC4($this->_objectkey($this->n), $s);
+                       }
+                       return '('.$this->_escape($s).')';
+               }
+
+               /**
+               * Format a text string
+               * @param string $s string to escape.
+               * @return string escaped string.
+               * @access protected
+               */
+               function _escapetext($s) {
+                       if ($this->isunicode) {
+                               if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) {
+                                       $s = $this->UTF8ToLatin1($s);
+                               } else {
+                                       //Convert string to UTF-16BE and reverse RTL language
+                                       $s = $this->utf8StrRev($s, false, $this->tmprtl);
+                               }
+                       }
+                       return $this->_escape($s);
+               }
+
+               /**
+               * Add "\" before "\", "(" and ")"
+               * @param string $s string to escape.
+               * @return string escaped string.
+               * @access protected
+               */
+               function _escape($s) {
+                       // the chr(13) substitution fixes the Bugs item #1421290.
+                       return strtr($s, array(')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r'));
+               }
+
+               /**
+               * Output a stream.
+               * @param string $s string to output.
+               * @access protected
+               */
+               function _putstream($s) {
+                       if ($this->encrypted) {
+                               $s = $this->_RC4($this->_objectkey($this->n), $s);
+                       }
+                       $this->_out('stream');
+                       $this->_out($s);
+                       $this->_out('endstream');
+               }
+
+               /**
+               * Output a string to the document.
+               * @param string $s string to output.
+               * @access protected
+               */
+               function _out($s) {
+                       if ($this->state == 2) {
+                               if (isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) {
+                                       // puts data before page footer
+                                       $page = substr($this->pages[$this->page], 0, -$this->footerlen[$this->page]);
+                                       $footer = substr($this->pages[$this->page], -$this->footerlen[$this->page]);
+                                       $this->pages[$this->page] = $page." ".$s."\n".$footer;
+                               } else {
+                                       $this->pages[$this->page] .= $s."\n";
+                               }
+                       } else {
+                               $this->buffer .= $s."\n";
+                       }
+               }
+
+               /**
+               * Adds unicode fonts.<br>
+               * Based on PDF Reference 1.3 (section 5)
+               * @access protected
+               * @author Nicola Asuni
+               * @since 1.52.0.TC005 (2005-01-05)
+               */
+               function _puttruetypeunicode($font) {
+                       // Type0 Font
+                       // A composite font composed of other fonts, organized hierarchically
+                       $this->_newobj();
+                       $this->_out('<</Type /Font');
+                       $this->_out('/Subtype /Type0');
+                       $this->_out('/BaseFont /'.$font['name'].'');
+                       $this->_out('/Encoding /Identity-H'); //The horizontal identity mapping for 2-byte CIDs; may be used with CIDFonts using any Registry, Ordering, and Supplement values.
+                       $this->_out('/DescendantFonts ['.($this->n + 1).' 0 R]');
+                       $this->_out('/ToUnicode '.($this->n + 2).' 0 R');
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       // CIDFontType2
+                       // A CIDFont whose glyph descriptions are based on TrueType font technology
+                       $this->_newobj();
+                       $this->_out('<</Type /Font');
+                       $this->_out('/Subtype /CIDFontType2');
+                       $this->_out('/BaseFont /'.$font['name'].'');
+                       $this->_out('/CIDSystemInfo '.($this->n + 2).' 0 R');
+                       $this->_out('/FontDescriptor '.($this->n + 3).' 0 R');
+                       if (isset($font['desc']['MissingWidth'])){
+                               $this->_out('/DW '.$font['desc']['MissingWidth'].''); // The default width for glyphs in the CIDFont MissingWidth
+                       }
+                       $w = "";
+                       foreach ($font['cw'] as $cid => $width) {
+                               $w .= ''.$cid.' ['.$width.'] '; // define a specific width for each individual CID
+                       }
+                       $this->_out('/W ['.$w.']'); // A description of the widths for the glyphs in the CIDFont
+                       $this->_out('/CIDToGIDMap '.($this->n + 4).' 0 R');
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       // ToUnicode
+                       // is a stream object that contains the definition of the CMap
+                       // (PDF Reference 1.3 chap. 5.9)
+                       $this->_newobj();
+                       $this->_out('<</Length 345>>');
+                       $this->_out('stream');
+                       $this->_out('/CIDInit /ProcSet findresource begin');
+                       $this->_out('12 dict begin');
+                       $this->_out('begincmap');
+                       $this->_out('/CIDSystemInfo');
+                       $this->_out('<</Registry (Adobe)');
+                       $this->_out('/Ordering (UCS)');
+                       $this->_out('/Supplement 0');
+                       $this->_out('>> def');
+                       $this->_out('/CMapName /Adobe-Identity-UCS def');
+                       $this->_out('/CMapType 2 def');
+                       $this->_out('1 begincodespacerange');
+                       $this->_out('<0000> <FFFF>');
+                       $this->_out('endcodespacerange');
+                       $this->_out('1 beginbfrange');
+                       $this->_out('<0000> <FFFF> <0000>');
+                       $this->_out('endbfrange');
+                       $this->_out('endcmap');
+                       $this->_out('CMapName currentdict /CMap defineresource pop');
+                       $this->_out('end');
+                       $this->_out('end');
+                       $this->_out('endstream');
+                       $this->_out('endobj');
+                       // CIDSystemInfo dictionary
+                       // A dictionary containing entries that define the character collection of the CIDFont.
+                       $this->_newobj();
+                       $this->_out('<</Registry (Adobe)'); // A string identifying an issuer of character collections
+                       $this->_out('/Ordering (UCS)'); // A string that uniquely names a character collection issued by a specific registry
+                       $this->_out('/Supplement 0'); // The supplement number of the character collection.
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       // Font descriptor
+                       // A font descriptor describing the CIDFont default metrics other than its glyph widths
+                       $this->_newobj();
+                       $this->_out('<</Type /FontDescriptor');
+                       $this->_out('/FontName /'.$font['name']);
+                       foreach ($font['desc'] as $key => $value) {
+                               $this->_out('/'.$key.' '.$value);
+                       }
+                       if ($font['file']) {
+                               // A stream containing a TrueType font program
+                               $this->_out('/FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R');
+                       }
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       // Embed CIDToGIDMap
+                       // A specification of the mapping from CIDs to glyph indices
+                       $this->_newobj();
+                       $ctgfile = $this->_getfontpath().strtolower($font['ctg']);
+                       if (!file_exists($ctgfile)) {
+                               $this->Error('Font file not found: '.$ctgfile);
+                       }
+                       $size = filesize($ctgfile);
+                       $this->_out('<</Length '.$size.'');
+                       if (substr($ctgfile, -2) == '.z') { // check file extension
+                               /* Decompresses data encoded using the public-domain
+                               zlib/deflate compression method, reproducing the
+                               original text or binary data */
+                               $this->_out('/Filter /FlateDecode');
+                       }
+                       $this->_out('>>');
+                       $this->_putstream(file_get_contents($ctgfile));
+                       $this->_out('endobj');
+               }
+
+                /**
+                * Converts UTF-8 strings to codepoints array.<br>
+                * Invalid byte sequences will be replaced with 0xFFFD (replacement character)<br>
+                * Based on: http://www.faqs.org/rfcs/rfc3629.html
+                * <pre>
+                *        Char. number range  |        UTF-8 octet sequence
+                *       (hexadecimal)    |              (binary)
+                *    --------------------+-----------------------------------------------
+                *    0000 0000-0000 007F | 0xxxxxxx
+                *    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
+                *    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
+                *    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+                *    ---------------------------------------------------------------------
+                *
+                *   ABFN notation:
+                *   ---------------------------------------------------------------------
+                *   UTF8-octets = *( UTF8-char )
+                *   UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
+                *   UTF8-1      = %x00-7F
+                *   UTF8-2      = %xC2-DF UTF8-tail
+                *
+                *   UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
+                *                 %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
+                *   UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
+                *                 %xF4 %x80-8F 2( UTF8-tail )
+                *   UTF8-tail   = %x80-BF
+                *   ---------------------------------------------------------------------
+                * </pre>
+                * @param string $str string to process.
+                * @return array containing codepoints (UTF-8 characters values)
+                * @access protected
+                * @author Nicola Asuni
+                * @since 1.53.0.TC005 (2005-01-05)
+                */
+               function UTF8StringToArray($str) {
+                       if (!$this->isunicode) {
+                               // split string into array of equivalent codes
+                               $strarr = array();
+                               $strlen = strlen($str);
+                               for($i=0; $i < $strlen; $i++) {
+                                       $strarr[] = ord($str{$i});
+                               }
+                               return $strarr;
+                       }
+                       $unicode = array(); // array containing unicode values
+                       $bytes  = array(); // array containing single character byte sequences
+                       $numbytes  = 1; // number of octetc needed to represent the UTF-8 character
+                       $str .= ""; // force $str to be a string
+                       $length = strlen($str);
+                       for($i = 0; $i < $length; $i++) {
+                               $char = ord($str{$i}); // get one string character at time
+                               if (count($bytes) == 0) { // get starting octect
+                                       if ($char <= 0x7F) {
+                                               $unicode[] = $char; // use the character "as is" because is ASCII
+                                               $numbytes = 1;
+                                       } elseif (($char >> 0x05) == 0x06) { // 2 bytes character (0x06 = 110 BIN)
+                                               $bytes[] = ($char - 0xC0) << 0x06;
+                                               $numbytes = 2;
+                                       } elseif (($char >> 0x04) == 0x0E) { // 3 bytes character (0x0E = 1110 BIN)
+                                               $bytes[] = ($char - 0xE0) << 0x0C;
+                                               $numbytes = 3;
+                                       } elseif (($char >> 0x03) == 0x1E) { // 4 bytes character (0x1E = 11110 BIN)
+                                               $bytes[] = ($char - 0xF0) << 0x12;
+                                               $numbytes = 4;
+                                       } else {
+                                               // use replacement character for other invalid sequences
+                                               $unicode[] = 0xFFFD;
+                                               $bytes = array();
+                                               $numbytes = 1;
+                                       }
+                               } elseif (($char >> 0x06) == 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN
+                                       $bytes[] = $char - 0x80;
+                                       if (count($bytes) == $numbytes) {
+                                               // compose UTF-8 bytes to a single unicode value
+                                               $char = $bytes[0];
+                                               for($j = 1; $j < $numbytes; $j++) {
+                                                       $char += ($bytes[$j] << (($numbytes - $j - 1) * 0x06));
+                                               }
+                                               if ((($char >= 0xD800) AND ($char <= 0xDFFF)) OR ($char >= 0x10FFFF)) {
+                                                       /* The definition of UTF-8 prohibits encoding character numbers between
+                                                       U+D800 and U+DFFF, which are reserved for use with the UTF-16
+                                                       encoding form (as surrogate pairs) and do not directly represent
+                                                       characters. */
+                                                       $unicode[] = 0xFFFD; // use replacement character
+                                               } else {
+                                                       $unicode[] = $char; // add char to array
+                                               }
+                                               // reset data for next char
+                                               $bytes = array();
+                                               $numbytes = 1;
+                                       }
+                               } else {
+                                       // use replacement character for other invalid sequences
+                                       $unicode[] = 0xFFFD;
+                                       $bytes = array();
+                                       $numbytes = 1;
+                               }
+                       }
+                       return $unicode;
+               }
+
+               /**
+                * Converts UTF-8 strings to UTF16-BE.<br>
+                * @param string $str string to process.
+                * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF)
+                * @return string
+                * @access protected
+                * @author Nicola Asuni
+                * @since 1.53.0.TC005 (2005-01-05)
+                * @uses UTF8StringToArray(), arrUTF8ToUTF16BE()
+                */
+               function UTF8ToUTF16BE($str, $setbom=true) {
+                       if (!$this->isunicode) {
+                               return $str; // string is not in unicode
+                       }
+                       $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values
+                       return $this->arrUTF8ToUTF16BE($unicode, $setbom);
+               }
+
+               /**
+                * Converts UTF-8 strings to Latin1 when using the standard 14 core fonts.<br>
+                * @param string $str string to process.
+                * @return string
+                * @author Andrew Whitehead, Nicola Asuni
+                * @access protected
+                * @since 3.2.000 (2008-06-23)
+                */
+               function UTF8ToLatin1($str) {
+                       if (!$this->isunicode) {
+                               return $str; // string is not in unicode
+                       }
+                       $outstr = ""; // string to be returned
+                       $unicode = $this->UTF8StringToArray($str); // array containing UTF-8 unicode values
+                       foreach ($unicode as $char) {
+                               if ($char == 0xFFFD) {
+                                       // skip
+                               } elseif ($char == 0x2022) {
+                                       // fix for middot
+                                       $outstr .= chr(183);
+                               } elseif ($char < 256) {
+                                       $outstr .= chr($char);
+                               } else {
+                                       $outstr .= '?';
+                               }
+                       }
+                       return $outstr;
+               }
+
+               /**
+                * Converts array of UTF-8 characters to UTF16-BE string.<br>
+                * Based on: http://www.faqs.org/rfcs/rfc2781.html
+                * <pre>
+                *   Encoding UTF-16:
+                *
+                *   Encoding of a single character from an ISO 10646 character value to
+                *    UTF-16 proceeds as follows. Let U be the character number, no greater
+                *    than 0x10FFFF.
+                *
+                *    1) If U < 0x10000, encode U as a 16-bit unsigned integer and
+                *       terminate.
+                *
+                *    2) Let U' = U - 0x10000. Because U is less than or equal to 0x10FFFF,
+                *       U' must be less than or equal to 0xFFFFF. That is, U' can be
+                *       represented in 20 bits.
+                *
+                *    3) Initialize two 16-bit unsigned integers, W1 and W2, to 0xD800 and
+                *       0xDC00, respectively. These integers each have 10 bits free to
+                *       encode the character value, for a total of 20 bits.
+                *
+                *    4) Assign the 10 high-order bits of the 20-bit U' to the 10 low-order
+                *       bits of W1 and the 10 low-order bits of U' to the 10 low-order
+                *       bits of W2. Terminate.
+                *
+                *    Graphically, steps 2 through 4 look like:
+                *    U' = yyyyyyyyyyxxxxxxxxxx
+                *    W1 = 110110yyyyyyyyyy
+                *    W2 = 110111xxxxxxxxxx
+                * </pre>
+                * @param array $unicode array containing UTF-8 unicode values
+                * @param boolean $setbom if true set the Byte Order Mark (BOM = 0xFEFF)
+                * @return string
+                * @access protected
+                * @author Nicola Asuni
+                * @since 2.1.000 (2008-01-08)
+                * @see UTF8ToUTF16BE()
+                */
+               function arrUTF8ToUTF16BE($unicode, $setbom=true) {
+                       $outstr = ""; // string to be returned
+                       if ($setbom) {
+                               $outstr .= "\xFE\xFF"; // Byte Order Mark (BOM)
+                       }
+                       foreach($unicode as $char) {
+                               if ($char == 0xFFFD) {
+                                       $outstr .= "\xFF\xFD"; // replacement character
+                               } elseif ($char < 0x10000) {
+                                       $outstr .= chr($char >> 0x08);
+                                       $outstr .= chr($char & 0xFF);
+                               } else {
+                                       $char -= 0x10000;
+                                       $w1 = 0xD800 | ($char >> 0x10);
+                                       $w2 = 0xDC00 | ($char & 0x3FF);
+                                       $outstr .= chr($w1 >> 0x08);
+                                       $outstr .= chr($w1 & 0xFF);
+                                       $outstr .= chr($w2 >> 0x08);
+                                       $outstr .= chr($w2 & 0xFF);
+                               }
+                       }
+                       return $outstr;
+               }
+               // ====================================================
+
+               /**
+                * Set header font.
+                * @param array $font font
+                * @since 1.1
+                */
+               function setHeaderFont($font) {
+                       $this->header_font = $font;
+               }
+
+               /**
+                * Get header font.
+                * @return array()
+                * @since 4.0.012 (2008-07-24)
+                */
+               function getHeaderFont() {
+                       return $this->header_font;
+               }
+
+               /**
+                * Set footer font.
+                * @param array $font font
+                * @since 1.1
+                */
+               function setFooterFont($font) {
+                       $this->footer_font = $font;
+               }
+
+               /**
+                * Get Footer font.
+                * @return array()
+                * @since 4.0.012 (2008-07-24)
+                */
+               function getFooterFont() {
+                       return $this->footer_font;
+               }
+
+               /**
+                * Set language array.
+                * @param array $language
+                * @since 1.1
+                */
+               function setLanguageArray($language) {
+                       $this->l = $language;
+                       $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false;
+               }
+
+               /**
+                * Returns the PDF data.
+                */
+               function getPDFData() {
+                       if ($this->state < 3) {
+                               $this->Close();
+                       }
+                       return $this->buffer;
+               }
+
+               /**
+                * Sets font style.
+                * @param string $tag tag name in lowercase. Supported tags are:<ul>
+                * <li>b : bold text</li>
+                * <li>i : italic</li>
+                * <li>u : underlined</li>
+                * <li>lt : line-through</li></ul>
+                * @param boolean $enable
+                * @access protected
+                */
+               function setStyle($tag, $enable) {
+                       //Modify style and select corresponding font
+                       $this->$tag += ($enable ? 1 : -1);
+                       $style = '';
+                       foreach(array('b', 'i', 'u', 'd') as $s) {
+                               if ($this->$s > 0) {
+                                       $style .= $s;
+                               }
+                       }
+                       $this->SetFont('', $style);
+               }
+
+               /**
+                * Output anchor link.
+                * @param string $url link URL
+                * @param string $name link name
+                * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+                * @param boolean $firstline if true prints only the first line and return the remaining string.
+                * @return the number of cells used or the remaining text if $firstline = true;
+                * @access public
+                */
+               function addHtmlLink($url, $name, $fill=0, $firstline=false) {
+                       $prevcolor = $this->fgcolor;
+                       $this->SetTextColor(0, 0, 255);
+                       $this->setStyle('u', true);
+                       $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline);
+                       $this->setStyle('u', false);
+                       $this->SetTextColorArray($prevcolor);
+                       return $ret;
+               }
+
+               /**
+                * Returns an associative array (keys: R,G,B) from an html color name or a six-digit or three-digit hexadecimal color representation (i.e. #3FE5AA or #7FF).
+                * @param string $color html color
+                * @return array
+                * @access protected
+                */
+               function convertHTMLColorToDec($color="#000000") {
+                       global $webcolor;
+                       // set default color to be returned in case of error
+                       $returncolor = array ('R' => 0, 'G' => 0, 'B' => 0);
+                       if (empty($color)) {
+                               return $returncolor;
+                       }
+                       if (substr($color, 0, 1) != "#") {
+                               // decode color name
+                               if (isset($webcolor[strtolower($color)])) {
+                                       $color_code = $webcolor[strtolower($color)];
+                               } else {
+                                       return $returncolor;
+                               }
+                       } else {
+                               $color_code = substr($color, 1);
+                       }
+                       switch (strlen($color_code)) {
+                               case 3: {
+                                       // three-digit hexadecimal representation
+                                       $r = substr($color_code, 0, 1);
+                                       $g = substr($color_code, 1, 1);
+                                       $b = substr($color_code, 2, 1);
+                                       $returncolor['R'] = hexdec($r.$r);
+                                       $returncolor['G'] = hexdec($g.$g);
+                                       $returncolor['B'] = hexdec($b.$b);
+                                       break;
+                               }
+                               case 6: {
+                                       // six-digit hexadecimal representation
+                                       $returncolor['R'] = hexdec(substr($color_code, 0, 2));
+                                       $returncolor['G'] = hexdec(substr($color_code, 2, 2));
+                                       $returncolor['B'] = hexdec(substr($color_code, 4, 2));
+                                       break;
+                               }
+                       }
+                       return $returncolor;
+               }
+
+               /**
+                * Converts pixels to Units.
+                * @param int $px pixels
+                * @return float millimeters
+                * @access public
+                */
+               function pixelsToUnits($px){
+                       return $px / $this->k;
+               }
+
+               /**
+                * Reverse function for htmlentities.
+                * Convert entities in UTF-8.
+                * @param $text_to_convert Text to convert.
+                * @return string converted
+                */
+               function unhtmlentities($text_to_convert) {
+                       if (!$this->isunicode) {
+                               return html_entity_decode($text_to_convert);
+                       }
+                       return html_entity_decode_php4($text_to_convert);
+               }
+
+               // ENCRYPTION METHODS ----------------------------------
+               // SINCE 2.0.000 (2008-01-02)
+               /**
+               * Compute encryption key depending on object number where the encrypted data is stored
+               * @param int $n object number
+               * @since 2.0.000 (2008-01-02)
+               */
+               function _objectkey($n) {
+                       return substr($this->_md5_16($this->encryption_key.pack('VXxx',$n)),0,10);
+               }
+
+               /**
+                * Put encryption on PDF document.
+                * @since 2.0.000 (2008-01-02)
+                */
+               function _putencryption() {
+                       $this->_out('/Filter /Standard');
+                       $this->_out('/V 1');
+                       $this->_out('/R 2');
+                       $this->_out('/O ('.$this->_escape($this->Ovalue).')');
+                       $this->_out('/U ('.$this->_escape($this->Uvalue).')');
+                       $this->_out('/P '.$this->Pvalue);
+               }
+
+               /**
+               * Returns the input text exrypted using RC4 algorithm and the specified key.
+               * RC4 is the standard encryption algorithm used in PDF format
+               * @param string $key encryption key
+               * @param String $text input text to be encrypted
+               * @return String encrypted text
+               * @since 2.0.000 (2008-01-02)
+               * @author Klemen Vodopivec
+               */
+               function _RC4($key, $text) {
+                       if ($this->last_rc4_key != $key) {
+                               $k = str_repeat($key, 256/strlen($key)+1);
+                               $rc4 = range(0,255);
+                               $j = 0;
+                               for ($i=0; $i < 256; $i++) {
+                                       $t = $rc4[$i];
+                                       $j = ($j + $t + ord($k{$i})) % 256;
+                                       $rc4[$i] = $rc4[$j];
+                                       $rc4[$j] = $t;
+                               }
+                               $this->last_rc4_key = $key;
+                               $this->last_rc4_key_c = $rc4;
+                       } else {
+                               $rc4 = $this->last_rc4_key_c;
+                       }
+                       $len = strlen($text);
+                       $a = 0;
+                       $b = 0;
+                       $out = '';
+                       for ($i=0; $i < $len; $i++) {
+                               $a = ($a + 1) % 256;
+                               $t = $rc4[$a];
+                               $b = ($b + $t) % 256;
+                               $rc4[$a] = $rc4[$b];
+                               $rc4[$b] = $t;
+                               $k = $rc4[($rc4[$a] + $rc4[$b]) % 256];
+                               $out .= chr(ord($text{$i}) ^ $k);
+                       }
+                       return $out;
+               }
+
+               /**
+               * Encrypts a string using MD5 and returns it's value as a binary string.
+               * @param string $str input string
+               * @return String MD5 encrypted binary string
+               * @since 2.0.000 (2008-01-02)
+               * @author Klemen Vodopivec
+               */
+               function _md5_16($str) {
+                       return pack('H*',md5($str));
+               }
+
+               /**
+               * Compute O value (used for RC4 encryption)
+               * @param String $user_pass user password
+               * @param String $owner_pass user password
+               * @return String O value
+               * @since 2.0.000 (2008-01-02)
+               * @author Klemen Vodopivec
+               */
+               function _Ovalue($user_pass, $owner_pass) {
+                       $tmp = $this->_md5_16($owner_pass);
+                       $owner_RC4_key = substr($tmp,0,5);
+                       return $this->_RC4($owner_RC4_key, $user_pass);
+               }
+
+               /**
+               * Compute U value (used for RC4 encryption)
+               * @return String U value
+               * @since 2.0.000 (2008-01-02)
+               * @author Klemen Vodopivec
+               */
+               function _Uvalue() {
+                       return $this->_RC4($this->encryption_key, $this->padding);
+               }
+
+               /**
+               * Compute encryption key
+               * @param String $user_pass user password
+               * @param String $owner_pass user password
+               * @param String $protection protection type
+               * @since 2.0.000 (2008-01-02)
+               * @author Klemen Vodopivec
+               */
+               function _generateencryptionkey($user_pass, $owner_pass, $protection) {
+                       // Pad passwords
+                       $user_pass = substr($user_pass.$this->padding,0,32);
+                       $owner_pass = substr($owner_pass.$this->padding,0,32);
+                       // Compute O value
+                       $this->Ovalue = $this->_Ovalue($user_pass, $owner_pass);
+                       // Compute encyption key
+                       $tmp = $this->_md5_16($user_pass.$this->Ovalue.chr($protection)."\xFF\xFF\xFF");
+                       $this->encryption_key = substr($tmp,0,5);
+                       // Compute U value
+                       $this->Uvalue = $this->_Uvalue();
+                       // Compute P value
+                       $this->Pvalue = -(($protection^255)+1);
+               }
+
+               /**
+               * Set document protection
+               * The permission array is composed of values taken from the following ones:
+               * - copy: copy text and images to the clipboard
+               * - print: print the document
+               * - modify: modify it (except for annotations and forms)
+               * - annot-forms: add annotations and forms
+               * Remark: the protection against modification is for people who have the full Acrobat product.
+               * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access.
+               * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts.
+               * @param Array $permissions the set of permissions. Empty by default (only viewing is allowed). (print, modify, copy, annot-forms)
+               * @param String $user_pass user password. Empty by default.
+               * @param String $owner_pass owner password. If not specified, a random value is used.
+               * @since 2.0.000 (2008-01-02)
+               * @author Klemen Vodopivec
+               */
+               function SetProtection($permissions=array(), $user_pass='', $owner_pass=null) {
+                       $options = array('print' => 4, 'modify' => 8, 'copy' => 16, 'annot-forms' => 32);
+                       $protection = 192;
+                       foreach($permissions as $permission) {
+                               if (!isset($options[$permission])) {
+                                       $this->Error('Incorrect permission: '.$permission);
+                               }
+                               $protection += $options[$permission];
+                       }
+                       if ($owner_pass === null) {
+                               $owner_pass = uniqid(rand());
+                       }
+                       $this->encrypted = true;
+                       $this->_generateencryptionkey($user_pass, $owner_pass, $protection);
+               }
+
+               // END OF ENCRYPTION FUNCTIONS -------------------------
+
+               // START TRANSFORMATIONS SECTION -----------------------
+               // authors: Moritz Wagner, Andreas Wurmser, Nicola Asuni
+
+               /**
+               * Starts a 2D tranformation saving current graphic state.
+               * This function must be called before scaling, mirroring, translation, rotation and skewing.
+               * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior.
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function StartTransform() {
+                       $this->_out('q');
+               }
+
+               /**
+               * Stops a 2D tranformation restoring previous graphic state.
+               * This function must be called after scaling, mirroring, translation, rotation and skewing.
+               * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior.
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function StopTransform() {
+                       $this->_out('Q');
+               }
+               /**
+               * Horizontal Scaling.
+               * @param float $s_x scaling factor for width as percent. 0 is not allowed.
+               * @param int $x abscissa of the scaling center. Default is current x position
+               * @param int $y ordinate of the scaling center. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function ScaleX($s_x, $x='', $y=''){
+                       $this->Scale($s_x, 100, $x, $y);
+               }
+
+               /**
+               * Vertical Scaling.
+               * @param float $s_y scaling factor for height as percent. 0 is not allowed.
+               * @param int $x abscissa of the scaling center. Default is current x position
+               * @param int $y ordinate of the scaling center. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function ScaleY($s_y, $x='', $y=''){
+                       $this->Scale(100, $s_y, $x, $y);
+               }
+
+               /**
+               * Vertical and horizontal proportional Scaling.
+               * @param float $s scaling factor for width and height as percent. 0 is not allowed.
+               * @param int $x abscissa of the scaling center. Default is current x position
+               * @param int $y ordinate of the scaling center. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function ScaleXY($s, $x='', $y=''){
+                       $this->Scale($s, $s, $x, $y);
+               }
+
+               /**
+               * Vertical and horizontal non-proportional Scaling.
+               * @param float $s_x scaling factor for width as percent. 0 is not allowed.
+               * @param float $s_y scaling factor for height as percent. 0 is not allowed.
+               * @param int $x abscissa of the scaling center. Default is current x position
+               * @param int $y ordinate of the scaling center. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function Scale($s_x, $s_y, $x='', $y=''){
+                       if ($x === '') {
+                               $x=$this->x;
+                       }
+                       if ($y === '') {
+                               $y=$this->y;
+                       }
+                       if ($this->rtl) {
+                               $x = $this->w - $x;
+                       }
+                       if (($s_x == 0) OR ($s_y == 0)) {
+                               $this->Error('Please use values unequal to zero for Scaling');
+                       }
+                       $y = ($this->h - $y) * $this->k;
+                       $x *= $this->k;
+                       //calculate elements of transformation matrix
+                       $s_x /= 100;
+                       $s_y /= 100;
+                       $tm[0] = $s_x;
+                       $tm[1] = 0;
+                       $tm[2] = 0;
+                       $tm[3] = $s_y;
+                       $tm[4] = $x * (1 - $s_x);
+                       $tm[5] = $y * (1 - $s_y);
+                       //scale the coordinate system
+                       $this->Transform($tm);
+               }
+
+               /**
+               * Horizontal Mirroring.
+               * @param int $x abscissa of the point. Default is current x position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function MirrorH($x=''){
+                       $this->Scale(-100, 100, $x);
+               }
+
+               /**
+               * Verical Mirroring.
+               * @param int $y ordinate of the point. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function MirrorV($y=''){
+                       $this->Scale(100, -100, '', $y);
+               }
+
+               /**
+               * Point reflection mirroring.
+               * @param int $x abscissa of the point. Default is current x position
+               * @param int $y ordinate of the point. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function MirrorP($x='',$y=''){
+                       $this->Scale(-100, -100, $x, $y);
+               }
+
+               /**
+               * Reflection against a straight line through point (x, y) with the gradient angle (angle).
+               * @param float $angle gradient angle of the straight line. Default is 0 (horizontal line).
+               * @param int $x abscissa of the point. Default is current x position
+               * @param int $y ordinate of the point. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function MirrorL($angle=0, $x='',$y=''){
+                       $this->Scale(-100, 100, $x, $y);
+                       $this->Rotate(-2*($angle-90), $x, $y);
+               }
+
+               /**
+               * Translate graphic object horizontally.
+               * @param int $t_x movement to the right (or left for RTL)
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function TranslateX($t_x){
+                       $this->Translate($t_x, 0);
+               }
+
+               /**
+               * Translate graphic object vertically.
+               * @param int $t_y movement to the bottom
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function TranslateY($t_y){
+                       $this->Translate(0, $t_y);
+               }
+
+               /**
+               * Translate graphic object horizontally and vertically.
+               * @param int $t_x movement to the right
+               * @param int $t_y movement to the bottom
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function Translate($t_x, $t_y){
+                       if ($this->rtl) {
+                               $t_x = -$t_x;
+                       }
+                       //calculate elements of transformation matrix
+                       $tm[0] = 1;
+                       $tm[1] = 0;
+                       $tm[2] = 0;
+                       $tm[3] = 1;
+                       $tm[4] = $t_x * $this->k;
+                       $tm[5] = -$t_y * $this->k;
+                       //translate the coordinate system
+                       $this->Transform($tm);
+               }
+
+               /**
+               * Rotate object.
+               * @param float $angle angle in degrees for counter-clockwise rotation
+               * @param int $x abscissa of the rotation center. Default is current x position
+               * @param int $y ordinate of the rotation center. Default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function Rotate($angle, $x='', $y=''){
+                       if ($x === '') {
+                               $x=$this->x;
+                       }
+                       if ($y === '') {
+                               $y=$this->y;
+                       }
+                       if ($this->rtl) {
+                               $x = $this->w - $x;
+                               $angle = -$angle;
+                       }
+                       $y = ($this->h - $y) * $this->k;
+                       $x *= $this->k;
+                       //calculate elements of transformation matrix
+                       $tm[0] = cos(deg2rad($angle));
+                       $tm[1] = sin(deg2rad($angle));
+                       $tm[2] = -$tm[1];
+                       $tm[3] = $tm[0];
+                       $tm[4] = $x + $tm[1] * $y - $tm[0] * $x;
+                       $tm[5] = $y - $tm[0] * $y - $tm[1] * $x;
+                       //rotate the coordinate system around ($x,$y)
+                       $this->Transform($tm);
+               }
+
+               /**
+               * Skew horizontally.
+               * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right)
+               * @param int $x abscissa of the skewing center. default is current x position
+               * @param int $y ordinate of the skewing center. default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function SkewX($angle_x, $x='', $y=''){
+                       $this->Skew($angle_x, 0, $x, $y);
+               }
+
+               /**
+               * Skew vertically.
+               * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
+               * @param int $x abscissa of the skewing center. default is current x position
+               * @param int $y ordinate of the skewing center. default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function SkewY($angle_y, $x='', $y=''){
+                       $this->Skew(0, $angle_y, $x, $y);
+               }
+
+               /**
+               * Skew.
+               * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right)
+               * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
+               * @param int $x abscissa of the skewing center. default is current x position
+               * @param int $y ordinate of the skewing center. default is current y position
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function Skew($angle_x, $angle_y, $x='', $y=''){
+                       if ($x === '') {
+                               $x = $this->x;
+                       }
+                       if ($y === '') {
+                               $y = $this->y;
+                       }
+                       if ($this->rtl) {
+                               $x = $this->w - $x;
+                               $angle_x = -$angle_x;
+                       }
+                       if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) {
+                               $this->Error('Please use values between -90 and +90 degrees for Skewing.');
+                       }
+                       $x *= $this->k;
+                       $y = ($this->h - $y) * $this->k;
+                       //calculate elements of transformation matrix
+                       $tm[0] = 1;
+                       $tm[1] = tan(deg2rad($angle_y));
+                       $tm[2] = tan(deg2rad($angle_x));
+                       $tm[3] = 1;
+                       $tm[4] = -$tm[2] * $y;
+                       $tm[5] = -$tm[1] * $x;
+                       //skew the coordinate system
+                       $this->Transform($tm);
+               }
+
+               /**
+               * Apply graphic transformations.
+               * @since 2.1.000 (2008-01-07)
+               * @see StartTransform(), StopTransform()
+               */
+               function Transform($tm){
+                       $this->_out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5]));
+               }
+
+               // END TRANSFORMATIONS SECTION -------------------------
+
+
+               // START GRAPHIC FUNCTIONS SECTION ---------------------
+               // The following section is based on the code provided by David Hernandez Sanz
+
+               /**
+               * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page.
+               * @param float $width The width.
+               * @since 1.0
+               * @see Line(), Rect(), Cell(), MultiCell()
+               */
+               function SetLineWidth($width) {
+                       //Set line width
+                       $this->LineWidth = $width;
+                       $this->linestyleWidth = sprintf('%.2f w', ($width * $this->k));
+                       $this->_out($this->linestyleWidth);
+               }
+
+               /**
+               * Returns the current the line width.
+               * @return int Line width
+               * @since 2.1.000 (2008-01-07)
+               * @see Line(), SetLineWidth()
+               */
+               function GetLineWidth() {
+                       return $this->LineWidth;
+               }
+
+               /**
+               * Set line style.
+               * @param array $style Line style. Array with keys among the following:
+               * <ul>
+               *        <li>width (float): Width of the line in user units.</li>
+               *        <li>cap (string): Type of cap to put on the line. Possible values are:
+               * butt, round, square. The difference between "square" and "butt" is that
+               * "square" projects a flat end past the end of the line.</li>
+               *        <li>join (string): Type of join. Possible values are: miter, round,
+               * bevel.</li>
+               *        <li>dash (mixed): Dash pattern. Is 0 (without dash) or string with
+               * series of length values, which are the lengths of the on and off dashes.
+               * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on,
+               * 1 off, 2 on, 1 off, ...</li>
+               *        <li>phase (integer): Modifier on the dash pattern which is used to shift
+               * the point at which the pattern starts.</li>
+               *        <li>color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K).</li>
+               * </ul>
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function SetLineStyle($style) {
+                       extract($style);
+                       if (isset($width)) {
+                               $width_prev = $this->LineWidth;
+                               $this->SetLineWidth($width);
+                               $this->LineWidth = $width_prev;
+                       }
+                       if (isset($cap)) {
+                               $ca = array("butt" => 0, "round"=> 1, "square" => 2);
+                               if (isset($ca[$cap])) {
+                                       $this->linestyleCap = $ca[$cap]." J";
+                                       $this->_out($this->linestyleCap);
+                               }
+                       }
+                       if (isset($join)) {
+                               $ja = array("miter" => 0, "round" => 1, "bevel" => 2);
+                               if (isset($ja[$join])) {
+                                       $this->linestyleJoin = $ja[$join]." j";
+                                       $this->_out($this->linestyleJoin);
+                               }
+                       }
+                       if (isset($dash)) {
+                               $dash_string = "";
+                               if ($dash) {
+                                       if (ereg("^.+,", $dash)) {
+                                               $tab = explode(",", $dash);
+                                       } else {
+                                               $tab = array($dash);
+                                       }
+                                       $dash_string = "";
+                                       foreach ($tab as $i => $v) {
+                                               if ($i) {
+                                                       $dash_string .= " ";
+                                               }
+                                               $dash_string .= sprintf("%.2f", $v);
+                                       }
+                               }
+                               if (!isset($phase) OR !$dash) {
+                                       $phase = 0;
+                               }
+                               $this->linestyleDash = sprintf("[%s] %.2f d", $dash_string, $phase);
+                               $this->_out($this->linestyleDash);
+                       }
+                       if (isset($color)) {
+                               $this->SetDrawColorArray($color);
+                       }
+               }
+
+               /*
+               * Set a draw point.
+               * @param float $x Abscissa of point.
+               * @param float $y Ordinate of point.
+               * @access protected
+               * @since 2.1.000 (2008-01-08)
+               */
+               function _outPoint($x, $y) {
+                       if ($this->rtl) {
+                               $x = $this->w - $x;
+                       }
+                       $this->_out(sprintf("%.2f %.2f m", $x * $this->k, ($this->h - $y) * $this->k));
+               }
+
+               /*
+               * Draws a line from last draw point.
+               * @param float $x Abscissa of end point.
+               * @param float $y Ordinate of end point.
+               * @access protected
+               * @since 2.1.000 (2008-01-08)
+               */
+               function _outLine($x, $y) {
+                       if ($this->rtl) {
+                               $x = $this->w - $x;
+                       }
+                       $this->_out(sprintf("%.2f %.2f l", $x * $this->k, ($this->h - $y) * $this->k));
+               }
+
+               /**
+               * Draws a rectangle.
+               * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language).
+               * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language).
+               * @param float $w Width.
+               * @param float $h Height.
+               * @param string $op options
+               * @access protected
+               * @since 2.1.000 (2008-01-08)
+               */
+               function _outRect($x, $y, $w, $h, $op) {
+                       if ($this->rtl) {
+                               $x = $this->w - $x - $w;
+                       }
+                       $this->_out(sprintf('%.2f %.2f %.2f %.2f re %s', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k, $op));
+               }
+
+               /*
+               * Draws a Bezier curve from last draw point.
+               * The Bezier curve is a tangent to the line between the control points at either end of the curve.
+               * @param float $x1 Abscissa of control point 1.
+               * @param float $y1 Ordinate of control point 1.
+               * @param float $x2 Abscissa of control point 2.
+               * @param float $y2 Ordinate of control point 2.
+               * @param float $x3 Abscissa of end point.
+               * @param float $y3 Ordinate of end point.
+               * @access protected
+               * @since 2.1.000 (2008-01-08)
+               */
+               function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) {
+                       if ($this->rtl) {
+                               $x1 = $this->w - $x1;
+                               $x2 = $this->w - $x2;
+                               $x3 = $this->w - $x3;
+                       }
+                       $this->_out(sprintf("%.2f %.2f %.2f %.2f %.2f %.2f c", $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
+               }
+
+               /**
+               * Draws a line between two points.
+               * @param float $x1 Abscissa of first point.
+               * @param float $y1 Ordinate of first point.
+               * @param float $x2 Abscissa of second point.
+               * @param float $y2 Ordinate of second point.
+               * @param array $style Line style. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @access public
+               * @since 1.0
+               * @see SetLineWidth(), SetDrawColor(), SetLineStyle()
+               */
+               function Line($x1, $y1, $x2, $y2, $style=array()) {
+                       if ($style) {
+                               $this->SetLineStyle($style);
+                       }
+                       $this->_outPoint($x1, $y1);
+                       $this->_outLine($x2, $y2);
+                       $this->_out(" S");
+               }
+
+               /**
+               * Draws a rectangle.
+               * @param float $x Abscissa of upper-left corner (or upper-right corner for RTL language).
+               * @param float $y Ordinate of upper-left corner (or upper-right corner for RTL language).
+               * @param float $w Width.
+               * @param float $h Height.
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $border_style Border style of rectangle. Array with keys among the following:
+               * <ul>
+               *        <li>all: Line style of all borders. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               *        <li>L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               * </ul>
+               * If a key is not present or is null, not draws the border. Default value: default line style (empty array).
+               * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+               * @access public
+               * @since 1.0
+               * @see SetLineStyle()
+               */
+               function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) {
+                       if (!(false === strpos($style, "F")) AND isset($fill_color)) {
+                               $this->SetFillColorArray($fill_color);
+                       }
+                       switch ($style) {
+                               case "F": {
+                                       $op = 'f';
+                                       $border_style = array();
+                                       $this->_outRect($x, $y, $w, $h, $op);
+                                       break;
+                               }
+                               case "DF":
+                               case "FD": {
+                                       if ((!$border_style) OR (isset($border_style["all"]))) {
+                                               $op = 'B';
+                                               if (isset($border_style["all"])) {
+                                                       $this->SetLineStyle($border_style["all"]);
+                                                       $border_style = array();
+                                               }
+                                       } else {
+                                               $op = 'f';
+                                       }
+                                       $this->_outRect($x, $y, $w, $h, $op);
+                                       break;
+                               }
+                               case "CNZ": {
+                                       $op = "W n";
+                                       break;
+                               }
+                               case "CEO": {
+                                       $op = "W* n";
+                                       break;
+                               }
+                               default: {
+                                       $op = 'S';
+                                       if ((!$border_style) OR (isset($border_style["all"]))) {
+                                               if (isset($border_style["all"]) AND $border_style["all"]) {
+                                                       $this->SetLineStyle($border_style["all"]);
+                                                       $border_style = array();
+                                               }
+                                               $this->_outRect($x, $y, $w, $h, $op);
+                                       }
+                                       break;
+                               }
+                       }
+                       if ($border_style) {
+                               $border_style2 = array();
+                               foreach ($border_style as $line => $value) {
+                                       $lenght = strlen($line);
+                                       for ($i = 0; $i < $lenght; $i++) {
+                                               $border_style2[$line[$i]] = $value;
+                                       }
+                               }
+                               $border_style = $border_style2;
+                               if (isset($border_style["L"]) AND $border_style["L"]) {
+                                       $this->Line($x, $y, $x, $y + $h, $border_style["L"]);
+                               }
+                               if (isset($border_style["T"]) AND $border_style["T"]) {
+                                       $this->Line($x, $y, $x + $w, $y, $border_style["T"]);
+                               }
+                               if (isset($border_style["R"]) AND $border_style["R"]) {
+                                       $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style["R"]);
+                               }
+                               if (isset($border_style["B"]) AND $border_style["B"]) {
+                                       $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style["B"]);
+                               }
+                       }
+               }
+
+
+               /**
+               * Draws a Bezier curve.
+               * The Bezier curve is a tangent to the line between the control points at
+               * either end of the curve.
+               * @param float $x0 Abscissa of start point.
+               * @param float $y0 Ordinate of start point.
+               * @param float $x1 Abscissa of control point 1.
+               * @param float $y1 Ordinate of control point 1.
+               * @param float $x2 Abscissa of control point 2.
+               * @param float $y2 Ordinate of control point 2.
+               * @param float $x3 Abscissa of end point.
+               * @param float $y3 Ordinate of end point.
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+               * @access public
+               * @see SetLineStyle()
+               * @since 2.1.000 (2008-01-08)
+               */
+               function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style="", $line_style=array(), $fill_color=array()) {
+                       if (!(false === strpos($style, "F")) AND isset($fill_color)) {
+                               $this->SetFillColorArray($fill_color);
+                       }
+                       switch ($style) {
+                               case "F": {
+                                       $op = "f";
+                                       $line_style = array();
+                                       break;
+                               }
+                               case "FD":
+                               case "DF": {
+                                       $op = "B";
+                                       break;
+                               }
+                               case "CNZ": {
+                                       $op = "W n";
+                                       break;
+                               }
+                               case "CEO": {
+                                       $op = "W* n";
+                                       break;
+                               }
+                               default: {
+                                       $op = "S";
+                                       break;
+                               }
+                       }
+                       if ($line_style) {
+                               $this->SetLineStyle($line_style);
+                       }
+                       $this->_outPoint($x0, $y0);
+                       $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3);
+                       $this->_out($op);
+               }
+
+               /**
+               * Draws a poly-Bezier curve.
+               * Each Bezier curve segment is a tangent to the line between the control points at
+               * either end of the curve.
+               * @param float $x0 Abscissa of start point.
+               * @param float $y0 Ordinate of start point.
+               * @param float $segments An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3).
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of curve. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+               * @access public
+               * @see SetLineStyle()
+               * @since 3.0008 (2008-05-12)
+               */
+               function Polycurve($x0, $y0, $segments, $style="", $line_style=array(), $fill_color=array()) {
+                       if (!(false === strpos($style, "F")) AND isset($fill_color)) {
+                               $this->SetFillColorArray($fill_color);
+                       }
+                       switch ($style) {
+                               case "F": {
+                                       $op = "f";
+                                       $line_style = array();
+                                       break;
+                               }
+                               case "FD":
+                               case "DF": {
+                                       $op = "B";
+                                       break;
+                               }
+                               case "CNZ": {
+                                       $op = "W n";
+                                       break;
+                               }
+                               case "CEO": {
+                                       $op = "W* n";
+                                       break;
+                               }
+                               default: {
+                                       $op = "S";
+                                       break;
+                               }
+                       }
+                       if ($line_style) {
+                               $this->SetLineStyle($line_style);
+                       }
+                       $this->_outPoint($x0, $y0);
+                       foreach ($segments as $segment) {
+                               list($x1, $y1, $x2, $y2, $x3, $y3) = $segment;
+                               $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3);
+                       }
+                       $this->_out($op);
+               }
+
+               /**
+               * Draws an ellipse.
+               * An ellipse is formed from n Bezier curves.
+               * @param float $x0 Abscissa of center point.
+               * @param float $y0 Ordinate of center point.
+               * @param float $rx Horizontal radius.
+               * @param float $ry Vertical radius (if ry = 0 then is a circle, see {@link Circle Circle}). Default value: 0.
+               * @param float $angle: Angle oriented (anti-clockwise). Default value: 0.
+               * @param float $astart: Angle start of draw line. Default value: 0.
+               * @param float $afinish: Angle finish of draw line. Default value: 360.
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>C: Draw close.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of ellipse. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+               * @param integer $nc Number of curves used in ellipse. Default value: 8.
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function Ellipse($x0, $y0, $rx, $ry=0, $angle=0, $astart=0, $afinish=360, $style="", $line_style=array(), $fill_color=array(), $nc=8) {
+                       if ($angle) {
+                               $this->StartTransform();
+                               $this->Rotate($angle, $x0, $y0);
+                               $this->Ellipse($x0, $y0, $rx, $ry, 0, $astart, $afinish, $style, $line_style, $fill_color, $nc);
+                               $this->StopTransform();
+                               return;
+                       }
+                       if ($rx) {
+                               if (!(false === strpos($style, "F")) AND isset($fill_color)) {
+                                       $this->SetFillColorArray($fill_color);
+                               }
+                               switch ($style) {
+                                       case "F": {
+                                               $op = "f";
+                                               $line_style = array();
+                                               break;
+                                       }
+                                       case "FD":
+                                       case "DF": {
+                                               $op = "B";
+                                               break;
+                                       }
+                                       case "C": {
+                                               $op = "s"; // Small "s" signifies closing the path as well
+                                               break;
+                                       }
+                                       case "CNZ": {
+                                               $op = "W n";
+                                               break;
+                                       }
+                                       case "CEO": {
+                                               $op = "W* n";
+                                               break;
+                                       }
+                                       default: {
+                                               $op = "S";
+                                               break;
+                                       }
+                               }
+                               if ($line_style) {
+                                       $this->SetLineStyle($line_style);
+                               }
+                               if (!$ry) {
+                                       $ry = $rx;
+                               }
+                               $rx *= $this->k;
+                               $ry *= $this->k;
+                               if ($nc < 2){
+                                       $nc = 2;
+                               }
+                               $astart = deg2rad((float) $astart);
+                               $afinish = deg2rad((float) $afinish);
+                               $total_angle = $afinish - $astart;
+                               $dt = $total_angle / $nc;
+                               $dtm = $dt / 3;
+                               $x0 *= $this->k;
+                               $y0 = ($this->h - $y0) * $this->k;
+                               $t1 = $astart;
+                               $a0 = $x0 + ($rx * cos($t1));
+                               $b0 = $y0 + ($ry * sin($t1));
+                               $c0 = -$rx * sin($t1);
+                               $d0 = $ry * cos($t1);
+                               $this->_outPoint($a0 / $this->k, $this->h - ($b0 / $this->k));
+                               for ($i = 1; $i <= $nc; $i++) {
+                                       // Draw this bit of the total curve
+                                       $t1 = ($i * $dt) + $astart;
+                                       $a1 = $x0 + ($rx * cos($t1));
+                                       $b1 = $y0 + ($ry * sin($t1));
+                                       $c1 = -$rx * sin($t1);
+                                       $d1 = $ry * cos($t1);
+                                       $this->_outCurve(($a0 + ($c0 * $dtm)) / $this->k, $this->h - (($b0 + ($d0 * $dtm)) / $this->k), ($a1 - ($c1 * $dtm)) / $this->k, $this->h - (($b1 - ($d1 * $dtm)) / $this->k), $a1 / $this->k, $this->h - ($b1 / $this->k));
+                                       $a0 = $a1;
+                                       $b0 = $b1;
+                                       $c0 = $c1;
+                                       $d0 = $d1;
+                               }
+                               $this->_out($op);
+                       }
+               }
+
+               /**
+               * Draws a circle.
+               * A circle is formed from n Bezier curves.
+               * @param float $x0 Abscissa of center point.
+               * @param float $y0 Ordinate of center point.
+               * @param float $r Radius.
+               * @param float $astart: Angle start of draw line. Default value: 0.
+               * @param float $afinish: Angle finish of draw line. Default value: 360.
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>C: Draw close.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of circle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array).
+               * @param integer $nc Number of curves used in circle. Default value: 8.
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function Circle($x0, $y0, $r, $astart=0, $afinish=360, $style="", $line_style=array(), $fill_color=array(), $nc=8) {
+                       $this->Ellipse($x0, $y0, $r, 0, 0, $astart, $afinish, $style, $line_style, $fill_color, $nc);
+               }
+
+               /**
+               * Draws a polygon.
+               * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1))
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of polygon. Array with keys among the following:
+               * <ul>
+               *        <li>all: Line style of all lines. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               *        <li>0 to ($np - 1): Line style of each line. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               * </ul>
+               * If a key is not present or is null, not draws the line. Default value is default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function Polygon($p, $style="", $line_style=array(), $fill_color=array()) {
+                       $np = count($p) / 2;
+                       if (!(false === strpos($style, "F")) AND isset($fill_color)) {
+                               $this->SetFillColorArray($fill_color);
+                       }
+                       switch ($style) {
+                               case "F": {
+                                       $line_style = array();
+                                       $op = "f";
+                                       break;
+                               }
+                               case "FD":
+                               case "DF": {
+                                       $op = "B";
+                                       break;
+                               }
+                               case "CNZ": {
+                                       $op = "W n";
+                                       break;
+                               }
+                               case "CEO": {
+                                       $op = "W* n";
+                                       break;
+                               }
+                               default: {
+                                       $op = "S";
+                                       break;
+                               }
+                       }
+                       $draw = true;
+                       if ($line_style) {
+                               if (isset($line_style["all"])) {
+                                       $this->SetLineStyle($line_style["all"]);
+                               } else { // 0 .. (np - 1), op = {B, S}
+                                       $draw = false;
+                                       if ("B" == $op) {
+                                               $op = "f";
+                                               $this->_outPoint($p[0], $p[1]);
+                                               for ($i = 2; $i < ($np * 2); $i = $i + 2) {
+                                                       $this->_outLine($p[$i], $p[$i + 1]);
+                                               }
+                                               $this->_outLine($p[0], $p[1]);
+                                               $this->_out($op);
+                                       }
+                                       $p[($np * 2)] = $p[0];
+                                       $p[(($np * 2) + 1)] = $p[1];
+                                       for ($i = 0; $i < $np; $i++) {
+                                               if (isset($line_style[$i]) AND ($line_style[$i] != 0)) {
+                                                       $this->Line($p[($i * 2)], $p[(($i * 2) + 1)], $p[(($i * 2) + 2)], $p[(($i * 2) + 3)], $line_style[$i]);
+                                               }
+                                       }
+                               }
+                       }
+                       if ($draw) {
+                               $this->_outPoint($p[0], $p[1]);
+                               for ($i = 2; $i < ($np * 2); $i = $i + 2) {
+                                       $this->_outLine($p[$i], $p[$i + 1]);
+                               }
+                               $this->_outLine($p[0], $p[1]);
+                               $this->_out($op);
+                       }
+               }
+
+               /**
+               * Draws a regular polygon.
+               * @param float $x0 Abscissa of center point.
+               * @param float $y0 Ordinate of center point.
+               * @param float $r: Radius of inscribed circle.
+               * @param integer $ns Number of sides.
+               * @param float $angle Angle oriented (anti-clockwise). Default value: 0.
+               * @param boolean $draw_circle Draw inscribed circle or not. Default value: false.
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of polygon sides. Array with keys among the following:
+               * <ul>
+               *        <li>all: Line style of all sides. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               *        <li>0 to ($ns - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               * </ul>
+               * If a key is not present or is null, not draws the side. Default value is default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array).
+               * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array).
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style="", $line_style=array(), $fill_color=array(), $circle_style="", $circle_outLine_style=array(), $circle_fill_color=array()) {
+                       if (3 > $ns) {
+                               $ns = 3;
+                       }
+                       if ($draw_circle) {
+                               $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color);
+                       }
+                       $p = array();
+                       for ($i = 0; $i < $ns; $i++) {
+                               $a = $angle + ($i * 360 / $ns);
+                               $a_rad = deg2rad((float) $a);
+                               $p[] = $x0 + ($r * sin($a_rad));
+                               $p[] = $y0 + ($r * cos($a_rad));
+                       }
+                       $this->Polygon($p, $style, $line_style, $fill_color);
+               }
+
+               /**
+               * Draws a star polygon
+               * @param float $x0 Abscissa of center point.
+               * @param float $y0 Ordinate of center point.
+               * @param float $r Radius of inscribed circle.
+               * @param integer $nv Number of vertices.
+               * @param integer $ng Number of gap (if ($ng % $nv = 1) then is a regular polygon).
+               * @param float $angle: Angle oriented (anti-clockwise). Default value: 0.
+               * @param boolean $draw_circle: Draw inscribed circle or not. Default value is false.
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $line_style Line style of polygon sides. Array with keys among the following:
+               * <ul>
+               *        <li>all: Line style of all sides. Array like for
+               * {@link SetLineStyle SetLineStyle}.</li>
+               *        <li>0 to (n - 1): Line style of each side. Array like for {@link SetLineStyle SetLineStyle}.</li>
+               * </ul>
+               * If a key is not present or is null, not draws the side. Default value is default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array).
+               * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array).
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style="", $line_style=array(), $fill_color=array(), $circle_style="", $circle_outLine_style=array(), $circle_fill_color=array()) {
+                       if (2 > $nv) {
+                               $nv = 2;
+                       }
+                       if ($draw_circle) {
+                               $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color);
+                       }
+                       $p2 = array();
+                       $visited = array();
+                       for ($i = 0; $i < $nv; $i++) {
+                               $a = $angle + ($i * 360 / $nv);
+                               $a_rad = deg2rad((float) $a);
+                               $p2[] = $x0 + ($r * sin($a_rad));
+                               $p2[] = $y0 + ($r * cos($a_rad));
+                               $visited[] = false;
+                       }
+                       $p = array();
+                       $i = 0;
+                       do {
+                               $p[] = $p2[$i * 2];
+                               $p[] = $p2[($i * 2) + 1];
+                               $visited[$i] = true;
+                               $i += $ng;
+                               $i %= $nv;
+                       } while (!$visited[$i]);
+                       $this->Polygon($p, $style, $line_style, $fill_color);
+               }
+
+               /**
+               * Draws a rounded rectangle.
+               * @param float $x Abscissa of upper-left corner.
+               * @param float $y Ordinate of upper-left corner.
+               * @param float $w Width.
+               * @param float $h Height.
+               * @param float $r Radius of the rounded corners.
+               * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top left, top right, bottom right and bottom left. Default value: all rounded corner ("1111").
+               * @param string $style Style of rendering. Possible values are:
+               * <ul>
+               *        <li>D or empty string: Draw (default).</li>
+               *        <li>F: Fill.</li>
+               *        <li>DF or FD: Draw and fill.</li>
+               *        <li>CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).</li>
+               *        <li>CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).</li>
+               * </ul>
+               * @param array $border_style Border style of rectangle. Array like for {@link SetLineStyle SetLineStyle}. Default value: default line style (empty array).
+               * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K). Default value: default color (empty array).
+               * @access public
+               * @since 2.1.000 (2008-01-08)
+               */
+               function RoundedRect($x, $y, $w, $h, $r, $round_corner="1111", $style="", $border_style=array(), $fill_color=array()) {
+                       if ("0000" == $round_corner) { // Not rounded
+                               $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color);
+                       } else { // Rounded
+                               if (!(false === strpos($style, "F")) AND isset($fill_color)) {
+                                       $this->SetFillColorArray($fill_color);
+                               }
+                               switch ($style) {
+                                       case "F": {
+                                               $border_style = array();
+                                               $op = "f";
+                                               break;
+                                       }
+                                       case "FD":
+                                       case "DF": {
+                                               $op = "B";
+                                               break;
+                                       }
+                                       case "CNZ": {
+                                               $op = "W n";
+                                               break;
+                                       }
+                                       case "CEO": {
+                                               $op = "W* n";
+                                               break;
+                                       }
+                                       default: {
+                                               $op = "S";
+                                               break;
+                                       }
+                               }
+                               if ($border_style) {
+                                       $this->SetLineStyle($border_style);
+                               }
+                               $MyArc = 4 / 3 * (sqrt(2) - 1);
+                               $this->_outPoint($x + $r, $y);
+                               $xc = $x + $w - $r;
+                               $yc = $y + $r;
+                               $this->_outLine($xc, $y);
+                               if ($round_corner[0]) {
+                                       $this->_outCurve($xc + ($r * $MyArc), $yc - $r, $xc + $r, $yc - ($r * $MyArc), $xc + $r, $yc);
+                               } else {
+                                       $this->_outLine($x + $w, $y);
+                               }
+                               $xc = $x + $w - $r;
+                               $yc = $y + $h - $r;
+                               $this->_outLine($x + $w, $yc);
+                               if ($round_corner[1]) {
+                                       $this->_outCurve($xc + $r, $yc + ($r * $MyArc), $xc + ($r * $MyArc), $yc + $r, $xc, $yc + $r);
+                               } else {
+                                       $this->_outLine($x + $w, $y + $h);
+                               }
+                               $xc = $x + $r;
+                               $yc = $y + $h - $r;
+                               $this->_outLine($xc, $y + $h);
+                               if ($round_corner[2]) {
+                                       $this->_outCurve($xc - ($r * $MyArc), $yc + $r, $xc - $r, $yc + ($r * $MyArc), $xc - $r, $yc);
+                               } else {
+                                       $this->_outLine($x, $y + $h);
+                               }
+                               $xc = $x + $r;
+                               $yc = $y + $r;
+                               $this->_outLine($x, $yc);
+                               if ($round_corner[3]) {
+                                       $this->_outCurve($xc - $r, $yc - ($r * $MyArc), $xc - ($r * $MyArc), $yc - $r, $xc, $yc - $r);
+                               } else {
+                                       $this->_outLine($x, $y);
+                                       $this->_outLine($x + $r, $y);
+                               }
+                               $this->_out($op);
+                       }
+               }
+
+               // END GRAPHIC FUNCTIONS SECTION -----------------------
+
+               // BIDIRECTIONAL TEXT SECTION --------------------------
+               /**
+                * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
+                * @param string $str string to manipulate.
+                * @param bool $forcertl if 'R' forces RTL, if 'L' forces LTR
+                * @return string
+                * @author Nicola Asuni
+                * @since 2.1.000 (2008-01-08)
+               */
+               function utf8StrRev($str, $setbom=false, $forcertl=false) {
+                       return $this->arrUTF8ToUTF16BE($this->utf8Bidi($this->UTF8StringToArray($str), $forcertl), $setbom);
+               }
+
+               /**
+                * Reverse the RLT substrings using the Bidirectional Algorithm (http://unicode.org/reports/tr9/).
+                * @param array $ta array of characters composing the string.
+                * @param bool $forcertl if 'R' forces RTL, if 'L' forces LTR
+                * @return string
+                * @author Nicola Asuni
+                * @since 2.4.000 (2008-03-06)
+               */
+               function utf8Bidi($ta, $forcertl=false) {
+                       global $unicode, $unicode_mirror, $unicode_arlet, $laa_array, $diacritics;
+
+                       // paragraph embedding level
+                       $pel = 0;
+                       // max level
+                       $maxlevel = 0;
+                       // create string from array
+                       $str = $this->UTF8ArrSubString($ta);
+                       // check if string contains arabic text
+                       if (preg_match(K_RE_PATTERN_ARABIC, $str)) {
+                               $arabic = true;
+                       } else {
+                               $arabic = false;
+                       }
+                       // check if string contains RTL text
+                       if (!($forcertl OR $arabic OR preg_match(K_RE_PATTERN_RTL, $str))) {
+                               return $ta;
+                       }
+                       // get number of chars
+                       $numchars = count($ta);
+                       if ($forcertl == 'R') {
+                                       $pel = 1;
+                       } elseif ($forcertl == 'L') {
+                                       $pel = 0;
+                       } else {
+                               // P2. In each paragraph, find the first character of type L, AL, or R.
+                               // P3. If a character is found in P2 and it is of type AL or R, then set the paragraph embedding level to one; otherwise, set it to zero.
+                               for ($i=0; $i < $numchars; $i++) {
+                                       $type = $unicode[$ta[$i]];
+                                       if ($type == 'L') {
+                                               $pel = 0;
+                                               break;
+                                       } elseif (($type == 'AL') OR ($type == 'R')) {
+                                               $pel = 1;
+                                               break;
+                                       }
+                               }
+                       }
+                       // Current Embedding Level
+                       $cel = $pel;
+                       // directional override status
+                       $dos = 'N';
+                       $remember = array();
+                       // start-of-level-run
+                       $sor = $pel % 2 ? 'R' : 'L';
+                       $eor = $sor;
+
+                       //$levels = array(array('level' => $cel, 'sor' => $sor, 'eor' => '', 'chars' => array()));
+                       //$current_level = &$levels[count( $levels )-1];
+
+                       // Array of characters data
+                       $chardata = Array();
+
+                       // X1. Begin by setting the current embedding level to the paragraph embedding level. Set the directional override status to neutral. Process each character iteratively, applying rules X2 through X9. Only embedding levels from 0 to 61 are valid in this phase.
+                       //      In the resolution of levels in rules I1 and I2, the maximum embedding level of 62 can be reached.
+                       for ($i=0; $i < $numchars; $i++) {
+                               if ($ta[$i] == K_RLE) {
+                                       // X2. With each RLE, compute the least greater odd embedding level.
+                                       //      a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral.
+                                       //      b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+                                       $next_level = $cel + ($cel % 2) + 1;
+                                       if ($next_level < 62) {
+                                               $remember[] = array('num' => K_RLE, 'cel' => $cel, 'dos' => $dos);
+                                               $cel = $next_level;
+                                               $dos = 'N';
+                                               $sor = $eor;
+                                               $eor = $cel % 2 ? 'R' : 'L';
+                                       }
+                               } elseif ($ta[$i] == K_LRE) {
+                                       // X3. With each LRE, compute the least greater even embedding level.
+                                       //      a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to neutral.
+                                       //      b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+                                       $next_level = $cel + 2 - ($cel % 2);
+                                       if ( $next_level < 62 ) {
+                                               $remember[] = array('num' => K_LRE, 'cel' => $cel, 'dos' => $dos);
+                                               $cel = $next_level;
+                                               $dos = 'N';
+                                               $sor = $eor;
+                                               $eor = $cel % 2 ? 'R' : 'L';
+                                       }
+                               } elseif ($ta[$i] == K_RLO) {
+                                       // X4. With each RLO, compute the least greater odd embedding level.
+                                       //      a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to right-to-left.
+                                       //      b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+                                       $next_level = $cel + ($cel % 2) + 1;
+                                       if ($next_level < 62) {
+                                               $remember[] = array('num' => K_RLO, 'cel' => $cel, 'dos' => $dos);
+                                               $cel = $next_level;
+                                               $dos = 'R';
+                                               $sor = $eor;
+                                               $eor = $cel % 2 ? 'R' : 'L';
+                                       }
+                               } elseif ($ta[$i] == K_LRO) {
+                                       // X5. With each LRO, compute the least greater even embedding level.
+                                       //      a. If this new level would be valid, then this embedding code is valid. Remember (push) the current embedding level and override status. Reset the current level to this new level, and reset the override status to left-to-right.
+                                       //      b. If the new level would not be valid, then this code is invalid. Do not change the current level or override status.
+                                       $next_level = $cel + 2 - ($cel % 2);
+                                       if ( $next_level < 62 ) {
+                                               $remember[] = array('num' => K_LRO, 'cel' => $cel, 'dos' => $dos);
+                                               $cel = $next_level;
+                                               $dos = 'L';
+                                               $sor = $eor;
+                                               $eor = $cel % 2 ? 'R' : 'L';
+                                       }
+                               } elseif ($ta[$i] == K_PDF) {
+                                       // X7. With each PDF, determine the matching embedding or override code. If there was a valid matching code, restore (pop) the last remembered (pushed) embedding level and directional override.
+                                       if (count($remember)) {
+                                               $last = count($remember ) - 1;
+                                               if (($remember[$last]['num'] == K_RLE) OR
+                                                         ($remember[$last]['num'] == K_LRE) OR
+                                                         ($remember[$last]['num'] == K_RLO) OR
+                                                         ($remember[$last]['num'] == K_LRO)) {
+                                                       $match = array_pop($remember);
+                                                       $cel = $match['cel'];
+                                                       $dos = $match['dos'];
+                                                       $sor = $eor;
+                                                       $eor = ($cel > $match['cel'] ? $cel : $match['cel']) % 2 ? 'R' : 'L';
+                                               }
+                                       }
+                               } elseif (($ta[$i] != K_RLE) AND
+                                                                ($ta[$i] != K_LRE) AND
+                                                                ($ta[$i] != K_RLO) AND
+                                                                ($ta[$i] != K_LRO) AND
+                                                                ($ta[$i] != K_PDF)) {
+                                       // X6. For all types besides RLE, LRE, RLO, LRO, and PDF:
+                                       //      a. Set the level of the current character to the current embedding level.
+                                       //      b. Whenever the directional override status is not neutral, reset the current character type to the directional override status.
+                                       if ($dos != 'N') {
+                                               $chardir = $dos;
+                                       } else {
+                                               $chardir = $unicode[$ta[$i]];
+                                       }
+                                       // stores string characters and other information
+                                       $chardata[] = array('char' => $ta[$i], 'level' => $cel, 'type' => $chardir, 'sor' => $sor, 'eor' => $eor);
+                               }
+                       } // end for each char
+
+                       // X8. All explicit directional embeddings and overrides are completely terminated at the end of each paragraph. Paragraph separators are not included in the embedding.
+                       // X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes.
+                       // X10. The remaining rules are applied to each run of characters at the same level. For each run, determine the start-of-level-run (sor) and end-of-level-run (eor) type, either L or R. This depends on the higher of the two levels on either side of the boundary (at the start or end of the paragraph, the level of the \93other\94 run is the base embedding level). If the higher level is odd, the type is R; otherwise, it is L.
+
+                       // 3.3.3 Resolving Weak Types
+                       // Weak types are now resolved one level run at a time. At level run boundaries where the type of the character on the other side of the boundary is required, the type assigned to sor or eor is used.
+                       // Nonspacing marks are now resolved based on the previous characters.
+                       $numchars = count($chardata);
+
+                       // W1. Examine each nonspacing mark (NSM) in the level run, and change the type of the NSM to the type of the previous character. If the NSM is at the start of the level run, it will get the type of sor.
+                       $prevlevel = -1; // track level changes
+                       $levcount = 0; // counts consecutive chars at the same level
+                       for ($i=0; $i < $numchars; $i++) {
+                               if ($chardata[$i]['type'] == 'NSM') {
+                                       if ($levcount) {
+                                               $chardata[$i]['type'] = $chardata[$i]['sor'];
+                                       } elseif ($i > 0) {
+                                               $chardata[$i]['type'] = $chardata[($i-1)]['type'];
+                                       }
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sor) is found. If an AL is found, change the type of the European number to Arabic number.
+                       $prevlevel = -1;
+                       $levcount = 0;
+                       for ($i=0; $i < $numchars; $i++) {
+                               if ($chardata[$i]['char'] == 'EN') {
+                                       for ($j=$levcount; $j >= 0; $j--) {
+                                               if ($chardata[$j]['type'] == 'AL') {
+                                                       $chardata[$i]['type'] = 'AN';
+                                               } elseif (($chardata[$j]['type'] == 'L') OR ($chardata[$j]['type'] == 'R')) {
+                                                       break;
+                                               }
+                                       }
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       // W3. Change all ALs to R.
+                       for ($i=0; $i < $numchars; $i++) {
+                               if ($chardata[$i]['type'] == 'AL') {
+                                       $chardata[$i]['type'] = 'R';
+                               }
+                       }
+
+                       // W4. A single European separator between two European numbers changes to a European number. A single common separator between two numbers of the same type changes to that type.
+                       $prevlevel = -1;
+                       $levcount = 0;
+                       for ($i=0; $i < $numchars; $i++) {
+                               if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
+                                       if (($chardata[$i]['type'] == 'ES') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) {
+                                               $chardata[$i]['type'] = 'EN';
+                                       } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'EN') AND ($chardata[($i+1)]['type'] == 'EN')) {
+                                               $chardata[$i]['type'] = 'EN';
+                                       } elseif (($chardata[$i]['type'] == 'CS') AND ($chardata[($i-1)]['type'] == 'AN') AND ($chardata[($i+1)]['type'] == 'AN')) {
+                                               $chardata[$i]['type'] = 'AN';
+                                       }
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.
+                       $prevlevel = -1;
+                       $levcount = 0;
+                       for ($i=0; $i < $numchars; $i++) {
+                               if ($chardata[$i]['type'] == 'ET') {
+                                       if (($levcount > 0) AND ($chardata[($i-1)]['type'] == 'EN')) {
+                                               $chardata[$i]['type'] = 'EN';
+                                       } else {
+                                               $j = $i+1;
+                                               while (($j < $numchars) AND ($chardata[$j]['level'] == $prevlevel)) {
+                                                       if ($chardata[$j]['type'] == 'EN') {
+                                                               $chardata[$i]['type'] = 'EN';
+                                                               break;
+                                                       } elseif ($chardata[$j]['type'] != 'ET') {
+                                                               break;
+                                                       }
+                                                       $j++;
+                                               }
+                                       }
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       // W6. Otherwise, separators and terminators change to Other Neutral.
+                       $prevlevel = -1;
+                       $levcount = 0;
+                       for ($i=0; $i < $numchars; $i++) {
+                               if (($chardata[$i]['type'] == 'ET') OR ($chardata[$i]['type'] == 'ES') OR ($chardata[$i]['type'] == 'CS')) {
+                                       $chardata[$i]['type'] = 'ON';
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       //W7. Search backward from each instance of a European number until the first strong type (R, L, or sor) is found. If an L is found, then change the type of the European number to L.
+                       $prevlevel = -1;
+                       $levcount = 0;
+                       for ($i=0; $i < $numchars; $i++) {
+                               if ($chardata[$i]['char'] == 'EN') {
+                                       for ($j=$levcount; $j >= 0; $j--) {
+                                               if ($chardata[$j]['type'] == 'L') {
+                                                       $chardata[$i]['type'] = 'L';
+                                               } elseif ($chardata[$j]['type'] == 'R') {
+                                                       break;
+                                               }
+                                       }
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       // N1. A sequence of neutrals takes the direction of the surrounding strong text if the text on both sides has the same direction. European and Arabic numbers act as if they were R in terms of their influence on neutrals. Start-of-level-run (sor) and end-of-level-run (eor) are used at level run boundaries.
+                       $prevlevel = -1;
+                       $levcount = 0;
+                       for ($i=0; $i < $numchars; $i++) {
+                               if (($levcount > 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
+                                       if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) {
+                                               $chardata[$i]['type'] = 'L';
+                                       } elseif (($chardata[$i]['type'] == 'N') AND
+                                        (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND
+                                        (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) {
+                                               $chardata[$i]['type'] = 'R';
+                                       } elseif ($chardata[$i]['type'] == 'N') {
+                                               // N2. Any remaining neutrals take the embedding direction
+                                               $chardata[$i]['type'] = $chardata[$i]['sor'];
+                                       }
+                               } elseif (($levcount == 0) AND (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] == $prevlevel)) {
+                                       // first char
+                                       if (($chardata[$i]['type'] == 'N') AND ($chardata[$i]['sor'] == 'L') AND ($chardata[($i+1)]['type'] == 'L')) {
+                                               $chardata[$i]['type'] = 'L';
+                                       } elseif (($chardata[$i]['type'] == 'N') AND
+                                        (($chardata[$i]['sor'] == 'R') OR ($chardata[$i]['sor'] == 'EN') OR ($chardata[$i]['sor'] == 'AN')) AND
+                                        (($chardata[($i+1)]['type'] == 'R') OR ($chardata[($i+1)]['type'] == 'EN') OR ($chardata[($i+1)]['type'] == 'AN'))) {
+                                               $chardata[$i]['type'] = 'R';
+                                       } elseif ($chardata[$i]['type'] == 'N') {
+                                               // N2. Any remaining neutrals take the embedding direction
+                                               $chardata[$i]['type'] = $chardata[$i]['sor'];
+                                       }
+                               } elseif (($levcount > 0) AND ((($i+1) == $numchars) OR (($i+1) < $numchars) AND ($chardata[($i+1)]['level'] != $prevlevel))) {
+                                       //last char
+                                       if (($chardata[$i]['type'] == 'N') AND ($chardata[($i-1)]['type'] == 'L') AND ($chardata[$i]['eor'] == 'L')) {
+                                               $chardata[$i]['type'] = 'L';
+                                       } elseif (($chardata[$i]['type'] == 'N') AND
+                                        (($chardata[($i-1)]['type'] == 'R') OR ($chardata[($i-1)]['type'] == 'EN') OR ($chardata[($i-1)]['type'] == 'AN')) AND
+                                        (($chardata[$i]['eor'] == 'R') OR ($chardata[$i]['eor'] == 'EN') OR ($chardata[$i]['eor'] == 'AN'))) {
+                                               $chardata[$i]['type'] = 'R';
+                                       } elseif ($chardata[$i]['type'] == 'N') {
+                                               // N2. Any remaining neutrals take the embedding direction
+                                               $chardata[$i]['type'] = $chardata[$i]['sor'];
+                                       }
+                               } elseif ($chardata[$i]['type'] == 'N') {
+                                       // N2. Any remaining neutrals take the embedding direction
+                                       $chardata[$i]['type'] = $chardata[$i]['sor'];
+                               }
+                               if ($chardata[$i]['level'] != $prevlevel) {
+                                       $levcount = 0;
+                               } else {
+                                       $levcount++;
+                               }
+                               $prevlevel = $chardata[$i]['level'];
+                       }
+
+                       // I1. For all characters with an even (left-to-right) embedding direction, those of type R go up one level and those of type AN or EN go up two levels.
+                       // I2. For all characters with an odd (right-to-left) embedding direction, those of type L, EN or AN go up one level.
+                       for ($i=0; $i < $numchars; $i++) {
+                               $odd = $chardata[$i]['level'] % 2;
+                               if ($odd) {
+                                       if (($chardata[$i]['type'] == 'L') OR ($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')){
+                                               $chardata[$i]['level'] += 1;
+                                       }
+                               } else {
+                                       if ($chardata[$i]['type'] == 'R') {
+                                               $chardata[$i]['level'] += 1;
+                                       } elseif (($chardata[$i]['type'] == 'AN') OR ($chardata[$i]['type'] == 'EN')){
+                                               $chardata[$i]['level'] += 2;
+                                       }
+                               }
+                               $maxlevel = max($chardata[$i]['level'],$maxlevel);
+                       }
+
+                       // L1. On each line, reset the embedding level of the following characters to the paragraph embedding level:
+                       //      1. Segment separators,
+                       //      2. Paragraph separators,
+                       //      3. Any sequence of whitespace characters preceding a segment separator or paragraph separator, and
+                       //      4. Any sequence of white space characters at the end of the line.
+                       for ($i=0; $i < $numchars; $i++) {
+                               if (($chardata[$i]['type'] == 'B') OR ($chardata[$i]['type'] == 'S')) {
+                                       $chardata[$i]['level'] = $pel;
+                               } elseif ($chardata[$i]['type'] == 'WS') {
+                                       $j = $i+1;
+                                       while ($j < $numchars) {
+                                               if ((($chardata[$j]['type'] == 'B') OR ($chardata[$j]['type'] == 'S')) OR
+                                                       (($j == ($numchars-1)) AND ($chardata[$j]['type'] == 'WS'))) {
+                                                       $chardata[$i]['level'] = $pel;
+                                                       break;
+                                               } elseif ($chardata[$j]['type'] != 'WS') {
+                                                       break;
+                                               }
+                                               $j++;
+                                       }
+                               }
+                       }
+
+                       // Arabic Shaping
+                       // Cursively connected scripts, such as Arabic or Syriac, require the selection of positional character shapes that depend on adjacent characters. Shaping is logically applied after the Bidirectional Algorithm is used and is limited to characters within the same directional run.
+                       if ($arabic) {
+                               $endedletter = array(1569,1570,1571,1572,1573,1575,1577,1583,1584,1585,1586,1608,1688);
+                               $alfletter = array(1570,1571,1573,1575);
+                               $chardata2 = $chardata;
+                               $laaletter = false;
+                               $charAL = array();
+                               $x = 0;
+                               for ($i=0; $i < $numchars; $i++) {
+                                       if (($unicode[$chardata[$i]['char']] == 'AL') OR ($chardata[$i]['char'] == 32) OR ($chardata[$i]['char'] == 8204)) {
+                                               $charAL[$x] = $chardata[$i];
+                                               $charAL[$x]['i'] = $i;
+                                               $chardata[$i]['x'] = $x;
+                                               $x++;
+                                       }
+                               }
+                               $numAL = $x;
+                               for ($i=0; $i < $numchars; $i++) {
+                                       $thischar = $chardata[$i];
+                                       if ($i > 0) {
+                                               $prevchar = $chardata[($i-1)];
+                                       } else {
+                                               $prevchar = false;
+                                       }
+                                       if (($i+1) < $numchars) {
+                                               $nextchar = $chardata[($i+1)];
+                                       } else {
+                                               $nextchar = false;
+                                       }
+                                       if ($unicode[$thischar['char']] == 'AL') {
+                                               $x = $thischar['x'];
+                                               if ($x > 0) {
+                                                       $prevchar = $charAL[($x-1)];
+                                               } else {
+                                                       $prevchar = false;
+                                               }
+                                               if (($x+1) < $numAL) {
+                                                       $nextchar = $charAL[($x+1)];
+                                               } else {
+                                                       $nextchar = false;
+                                               }
+                                               // if laa letter
+                                               if (($prevchar !== false) AND ($prevchar['char'] == 1604) AND (in_array($thischar['char'], $alfletter))) {
+                                                       $arabicarr = $laa_array;
+                                                       $laaletter = true;
+                                                       if ($x > 1) {
+                                                               $prevchar = $charAL[($x-2)];
+                                                       } else {
+                                                               $prevchar = false;
+                                                       }
+                                               } else {
+                                                       $arabicarr = $unicode_arlet;
+                                                       $laaletter = false;
+                                               }
+                                               if (($prevchar !== false) AND ($nextchar !== false) AND
+                                                       (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND
+                                                       (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND
+                                                       ($prevchar['type'] == $thischar['type']) AND
+                                                       ($nextchar['type'] == $thischar['type']) AND
+                                                       ($nextchar['char'] != 1567)) {
+                                                       if (in_array($prevchar['char'], $endedletter)) {
+                                                               if (isset($arabicarr[$thischar['char']][2])) {
+                                                                       // initial
+                                                                       $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2];
+                                                               }
+                                                       } else {
+                                                               if (isset($arabicarr[$thischar['char']][3])) {
+                                                                       // medial
+                                                                       $chardata2[$i]['char'] = $arabicarr[$thischar['char']][3];
+                                                               }
+                                                       }
+                                               } elseif (($nextchar !== false) AND
+                                                       (($unicode[$nextchar['char']] == 'AL') OR ($unicode[$nextchar['char']] == 'NSM')) AND
+                                                       ($nextchar['type'] == $thischar['type']) AND
+                                                       ($nextchar['char'] != 1567)) {
+                                                       if (isset($arabicarr[$chardata[$i]['char']][2])) {
+                                                               // initial
+                                                               $chardata2[$i]['char'] = $arabicarr[$thischar['char']][2];
+                                                       }
+                                               } elseif ((($prevchar !== false) AND
+                                                       (($unicode[$prevchar['char']] == 'AL') OR ($unicode[$prevchar['char']] == 'NSM')) AND
+                                                       ($prevchar['type'] == $thischar['type'])) OR
+                                                       (($nextchar !== false) AND ($nextchar['char'] == 1567))) {
+                                                       // final
+                                                       if (($i > 1) AND ($thischar['char'] == 1607) AND
+                                                               ($chardata[$i-1]['char'] == 1604) AND
+                                                               ($chardata[$i-2]['char'] == 1604)) {
+                                                               //Allah Word
+                                                               // mark characters to delete with false
+                                                               $chardata2[$i-2]['char'] = false;
+                                                               $chardata2[$i-1]['char'] = false;
+                                                               $chardata2[$i]['char'] = 65010;
+                                                       } else {
+                                                               if (($prevchar !== false) AND in_array($prevchar['char'], $endedletter)) {
+                                                                       if (isset($arabicarr[$thischar['char']][0])) {
+                                                                               // isolated
+                                                                               $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0];
+                                                                       }
+                                                               } else {
+                                                                       if (isset($arabicarr[$thischar['char']][1])) {
+                                                                               // final
+                                                                               $chardata2[$i]['char'] = $arabicarr[$thischar['char']][1];
+                                                                       }
+                                                               }
+                                                       }
+                                               } elseif (isset($arabicarr[$thischar['char']][0])) {
+                                                       // isolated
+                                                       $chardata2[$i]['char'] = $arabicarr[$thischar['char']][0];
+                                               }
+                                               // if laa letter
+                                               if ($laaletter) {
+                                                       // mark characters to delete with false
+                                                       $chardata2[($charAL[($x-1)]['i'])]['char'] = false;
+                                               }
+                                       } // end if AL (Arabic Letter)
+                               } // end for each char
+                               /*
+                                * Combining characters that can occur with Shadda (0651 HEX, 1617 DEC) are placed in UE586-UE594.
+                                * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner.
+                                */
+                               $cw = &$this->CurrentFont['cw'];
+                               for ($i=0; $i < ($numchars-1); $i++) {
+                                       if (($chardata2[$i]['char'] == 1617) AND (isset($diacritics[($chardata2[$i+1]['char'])]))) {
+                                               // check if the subtitution font is defined on current font
+                                               if (isset($cw[($diacritics[($chardata2[$i+1]['char'])])])) {
+                                                       $chardata2[$i]['char'] = false;
+                                                       $chardata2[$i+1]['char'] = $diacritics[($chardata2[$i+1]['char'])];
+                                               }
+                                       }
+                               }
+                               // remove marked characters
+                               foreach($chardata2 as $key => $value) {
+                                       if ($value['char'] === false) {
+                                               unset($chardata2[$key]);
+                                       }
+                               }
+                               $chardata = array_values($chardata2);
+                               $numchars = count($chardata);
+                               unset($chardata2);
+                               unset($arabicarr);
+                               unset($laaletter);
+                               unset($charAL);
+                       }
+
+                       // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.
+                       for ($j=$maxlevel; $j > 0; $j--) {
+                               $ordarray = Array();
+                               $revarr = Array();
+                               $onlevel = false;
+                               for ($i=0; $i < $numchars; $i++) {
+                                       if ($chardata[$i]['level'] >= $j) {
+                                               $onlevel = true;
+                                               if (isset($unicode_mirror[$chardata[$i]['char']])) {
+                                                       // L4. A character is depicted by a mirrored glyph if and only if (a) the resolved directionality of that character is R, and (b) the Bidi_Mirrored property value of that character is true.
+                                                       $chardata[$i]['char'] = $unicode_mirror[$chardata[$i]['char']];
+                                               }
+                                               $revarr[] = $chardata[$i];
+                                       } else {
+                                               if ($onlevel) {
+                                                       $revarr = array_reverse($revarr);
+                                                       $ordarray = array_merge($ordarray, $revarr);
+                                                       $revarr = Array();
+                                                       $onlevel = false;
+                                               }
+                                               $ordarray[] = $chardata[$i];
+                                       }
+                               }
+                               if ($onlevel) {
+                                       $revarr = array_reverse($revarr);
+                                       $ordarray = array_merge($ordarray, $revarr);
+                               }
+                               $chardata = $ordarray;
+                       }
+
+                       $ordarray = array();
+                       for ($i=0; $i < $numchars; $i++) {
+                               $ordarray[] = $chardata[$i]['char'];
+                       }
+
+                       return $ordarray;
+               }
+
+               // END OF BIDIRECTIONAL TEXT SECTION -------------------
+
+               /*
+               * Adds a bookmark.
+               * @param string $txt bookmark description.
+               * @param int $level bookmark level.
+               * @param float $y Ordinate of the boorkmark position (default = -1 = current position).
+               * @access public
+               * @author Olivier Plathey, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function Bookmark($txt, $level=0, $y=-1) {
+                       if ($y == -1) {
+                               $y = $this->GetY();
+                       }
+                       $this->outlines[] = array('t' => $txt, 'l' => $level, 'y' => $y, 'p' => $this->PageNo());
+               }
+
+               /*
+               * Create a bookmark PDF string.
+               * @access protected
+               * @author Olivier Plathey, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function _putbookmarks() {
+                       $nb = count($this->outlines);
+                       if ($nb == 0) {
+                               return;
+                       }
+                       $lru = array();
+                       $level = 0;
+                       foreach($this->outlines as $i => $o) {
+                               if ($o['l'] > 0) {
+                                       $parent = $lru[($o['l'] - 1)];
+                                       //Set parent and last pointers
+                                       $this->outlines[$i]['parent'] = $parent;
+                                       $this->outlines[$parent]['last'] = $i;
+                                       if ($o['l'] > $level) {
+                                               //Level increasing: set first pointer
+                                               $this->outlines[$parent]['first'] = $i;
+                                       }
+                               } else {
+                                       $this->outlines[$i]['parent'] = $nb;
+                               }
+                               if (($o['l'] <= $level) AND ($i > 0)) {
+                                       //Set prev and next pointers
+                                       $prev = $lru[$o['l']];
+                                       $this->outlines[$prev]['next'] = $i;
+                                       $this->outlines[$i]['prev'] = $prev;
+                               }
+                               $lru[$o['l']] = $i;
+                               $level = $o['l'];
+                       }
+                       //Outline items
+                       $n = $this->n + 1;
+                       foreach($this->outlines as $i => $o) {
+                               $this->_newobj();
+                               $this->_out('<</Title '.$this->_textstring($o['t']));
+                               $this->_out('/Parent '.($n+$o['parent']).' 0 R');
+                               if (isset($o['prev']))
+                               $this->_out('/Prev '.($n+$o['prev']).' 0 R');
+                               if (isset($o['next']))
+                               $this->_out('/Next '.($n+$o['next']).' 0 R');
+                               if (isset($o['first']))
+                               $this->_out('/First '.($n+$o['first']).' 0 R');
+                               if (isset($o['last']))
+                               $this->_out('/Last '.($n+$o['last']).' 0 R');
+                               $this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]', 1+2*$o['p'], ($this->h-$o['y'])*$this->k));
+                               $this->_out('/Count 0>>');
+                               $this->_out('endobj');
+                       }
+                       //Outline root
+                       $this->_newobj();
+                       $this->OutlineRoot=$this->n;
+                       $this->_out('<</Type /Outlines /First '.$n.' 0 R');
+                       $this->_out('/Last '.($n+$lru[0]).' 0 R>>');
+                       $this->_out('endobj');
+               }
+
+
+               // --- JAVASCRIPT - FORMS ------------------------------
+
+               /*
+               * Adds a javascript
+               * @access public
+               * @author Johannes Güntert, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function IncludeJS($script) {
+                       $this->javascript .= $script;
+               }
+
+               /*
+               * Create a javascript PDF string.
+               * @access protected
+               * @author Johannes Güntert, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function _putjavascript() {
+                       if (empty($this->javascript)) {
+                               return;
+                       }
+                       $this->_newobj();
+                       $this->n_js = $this->n;
+                       $this->_out('<<');
+                       $this->_out('/Names [(EmbeddedJS) '.($this->n + 1).' 0 R ]');
+                       $this->_out('>>');
+                       $this->_out('endobj');
+                       $this->_newobj();
+                       $this->_out('<<');
+                       $this->_out('/S /JavaScript');
+                       $this->_out('/JS '.$this->_textstring($this->javascript));
+                       $this->_out('>>');
+                       $this->_out('endobj');
+               }
+
+               /*
+               * Convert color to javascript color.
+               * @param string $color color name or #RRGGBB
+               * @access protected
+               * @author Denis Van Nuffelen, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function _JScolor($color) {
+                       static $aColors = array('transparent', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'dkGray', 'gray', 'ltGray');
+                       if (substr($color,0,1) == '#') {
+                               return sprintf("['RGB',%.3f,%.3f,%.3f]", hexdec(substr($color,1,2))/255, hexdec(substr($color,3,2))/255, hexdec(substr($color,5,2))/255);
+                       }
+                       if (!in_array($color,$aColors)) {
+                               $this->Error('Invalid color: '.$color);
+                       }
+                       return 'color.'.$color;
+               }
+
+               /*
+               * Adds a javascript form field.
+               * @param string $type field type
+               * @param string $name field name
+               * @param int $x horizontal position
+               * @param int $y vertical position
+               * @param int $w width
+               * @param int $h height
+               * @param array $prop array of properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access protected
+               * @author Denis Van Nuffelen, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function _addfield($type, $name, $x, $y, $w, $h, $prop) {
+                       $k = $this->k;
+                       $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%d,[%.2f,%.2f,%.2f,%.2f]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n";
+                       $this->javascript .= "f".$name.".textSize=".$this->FontSizePt.";\n";
+                       while (list($key, $val) = each($prop)) {
+                               if (strcmp(substr($key,-5),"Color") == 0) {
+                                       $val = $this->_JScolor($val);
+                               } else {
+                                       $val = "'".$val."'";
+                               }
+                               $this->javascript .= "f".$name.".".$key."=".$val.";\n";
+                       }
+                       $this->x += $w;
+               }
+
+               /*
+               * Creates a text field
+               * @param string $name field name
+               * @param int $w width
+               * @param int $h height
+               * @param string $prop properties. The value property allows to set the initial value. The multiline property allows to define the field as multiline. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access public
+               * @author Denis Van Nuffelen, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function TextField($name, $w, $h, $prop=array()) {
+                       $this->_addfield('text', $name, $this->x, $this->y, $w, $h, $prop);
+               }
+
+               /*
+               * Creates a RadioButton field
+               * @param string $name field name
+               * @param int $w width
+               * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access public
+               * @author Nicola Asuni
+               * @since 2.2.003 (2008-03-03)
+               */
+               function RadioButton($name, $w, $prop=array()) {
+                       if (!isset($prop['strokeColor'])) {
+                               $prop['strokeColor']='black';
+                       }
+                       $this->_addfield('radiobutton', $name, $this->x, $this->y, $w, $w, $prop);
+               }
+
+               /*
+               * Creates a List-box field
+               * @param string $name field name
+               * @param int $w width
+               * @param int $h height
+               * @param array $values array containing the list of values.
+               * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access public
+               * @author Nicola Asuni
+               * @since 2.2.003 (2008-03-03)
+               */
+               function ListBox($name, $w, $h, $values, $prop=array()) {
+                       if (!isset($prop['strokeColor'])) {
+                               $prop['strokeColor'] = 'ltGray';
+                       }
+                       $this->_addfield('listbox', $name, $this->x, $this->y, $w, $h, $prop);
+                       $s = '';
+                       foreach($values as $value) {
+                               $s .= "'".addslashes($value)."',";
+                       }
+                       $this->javascript .= "f".$name.".setItems([".substr($s,0,-1)."]);\n";
+               }
+
+               /*
+               * Creates a Combo-box field
+               * @param string $name field name
+               * @param int $w width
+               * @param int $h height
+               * @param array $values array containing the list of values.
+               * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access public
+               * @author Denis Van Nuffelen, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function ComboBox($name, $w, $h, $values, $prop=array()) {
+                       $this->_addfield('combobox', $name, $this->x, $this->y, $w, $h, $prop);
+                       $s = '';
+                       foreach($values as $value) {
+                               $s .= "'".addslashes($value)."',";
+                       }
+                       $this->javascript .= "f".$name.".setItems([".substr($s,0,-1)."]);\n";
+               }
+
+               /*
+               * Creates a CheckBox field
+               * @param string $name field name
+               * @param int $w width
+               * @param boolean $checked define the initial state (default = false).
+               * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access public
+               * @author Denis Van Nuffelen, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function CheckBox($name, $w, $checked=false, $prop=array()) {
+                       $prop['value'] = ($checked ? 'Yes' : 'Off');
+                       if (!isset($prop['strokeColor'])) {
+                               $prop['strokeColor'] = 'black';
+                       }
+                       $this->_addfield('checkbox', $name, $this->x, $this->y, $w, $w, $prop);
+               }
+
+               /*
+               * Creates a button field
+               * @param string $name field name
+               * @param int $w width
+               * @param int $h height
+               * @param string $caption caption.
+               * @param string $action action triggered by the button (JavaScript code).
+               * @param string $prop properties. Possible values are (http://www.adobe.com/devnet/acrobat/pdfs/js_developer_guide.pdf): <ul><li>rect: Position and size of field on page.</li><li>borderStyle: Rectangle border appearance.</li><li>strokeColor: Color of bounding rectangle.</li><li>lineWidth: Width of the edge of the surrounding rectangle.</li><li>rotation: Rotation of field in 90-degree increments.</li><li>fillColor: Background color of field (gray, transparent, RGB, or CMYK).</li><li>userName: Short description of field that appears on mouse-over.</li><li>readonly: Whether the user may change the field contents.</li><li>doNotScroll: Whether text fields may scroll.</li><li>display: Whether visible or hidden on screen or in print.</li><li>textFont: Text font.</li><li>textColor: Text color.</li><li>textSize: Text size.</li><li>richText: Rich text.</li><li>richValue: Text.</li><li>comb: Text comb format.</li><li>multiline: Text multiline.</li><li>charLimit: Text limit to number of characters.</li><li>fileSelect: Text file selection format.</li><li>password: Text password format.</li><li>alignment: Text layout in text fields.</li><li>buttonAlignX: X alignment of icon on button face.</li><li>buttonAlignY: Y alignment of icon on button face.</li><li>buttonFitBounds: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleHow: Relative scaling of an icon to fit inside a button face.</li><li>buttonScaleWhen: Relative scaling of an icon to fit inside a button face.</li><li>highlight: Appearance of a button when pushed.</li><li>style: Glyph style for checkbox and radio buttons.</li><li>numItems: Number of items in a combo box or list box.</li><li>editable: Whether the user can type in a combo box.</li><li>multipleSelection: Whether multiple list box items may be selected.</li></ul>
+               * @access public
+               * @author Denis Van Nuffelen, Nicola Asuni
+               * @since 2.1.002 (2008-02-12)
+               */
+               function Button($name, $w, $h, $caption, $action, $prop=array()) {
+                       if (!isset($prop['strokeColor'])) {
+                               $prop['strokeColor'] = 'black';
+                       }
+                       if (!isset($prop['borderStyle'])) {
+                               $prop['borderStyle'] = 'beveled';
+                       }
+                       $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop);
+                       $this->javascript .= "f".$name.".buttonSetCaption('".addslashes($caption)."');\n";
+                       $this->javascript .= "f".$name.".setAction('MouseUp','".addslashes($action)."');\n";
+                       $this->javascript .= "f".$name.".highlight='push';\n";
+                       $this->javascript .= "f".$name.".print=false;\n";
+               }
+
+               // END JAVASCRIPT - FORMS ------------------------------
+
+               /*
+               * Enable Write permissions for PDF Reader.
+               * @access protected
+               * @author Nicola Asuni
+               * @since 2.9.000 (2008-03-26)
+               */
+               function _putuserrights() {
+                       if (!$this->ur) {
+                               return;
+                       }
+                       $this->_out('/Perms');
+                       $this->_out('<<');
+                       $this->_out('/UR3');
+                       $this->_out('<<');
+                       //$this->_out('/SubFilter/adbe.pkcs7.detached/Filter/Adobe.PPKLite/Contents');
+                       //$this->_out('<0>');
+                       //$this->_out('/ByteRange[0 3]');
+                       $this->_out('/M '.$this->_datestring('D:'.date('YmdHis')));
+                       $this->_out('/Name(TCPDF)');
+                       $this->_out('/Reference[');
+                       $this->_out('<<');
+                       $this->_out('/TransformParams');
+                       $this->_out('<<');
+                       $this->_out('/Type/TransformParams');
+                       $this->_out('/V/2.2');
+                       if (!empty($this->ur_document)) {
+                               $this->_out('/Document['.$this->ur_document.']');
+                       }
+                       if (!empty($this->ur_annots)) {
+                               $this->_out('/Annots['.$this->ur_annots.']');
+                       }
+                       if (!empty($this->ur_form)) {
+                               $this->_out('/Form['.$this->ur_form.']');
+                       }
+                       if (!empty($this->ur_signature)) {
+                               $this->_out('/Signature['.$this->ur_signature.']');
+                       }
+                       $this->_out('>>');
+                       $this->_out('/TransformMethod/UR3');
+                       $this->_out('/Type/SigRef');
+                       $this->_out('>>');
+                       $this->_out(']');
+                       $this->_out('/Type/Sig');
+                       $this->_out('>>');
+                       $this->_out('>>');
+               }
+
+               /*
+               * Set User's Rights for PDF Reader
+               * Check the PDF Reference 8.7.1 Transform Methods,
+               * Table 8.105 Entries in the UR transform parameters dictionary
+               * @param boolean $enable if true enable user's rights on PDF reader
+               * @param string $document Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data.
+               * @param string $annots Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations.
+               * @param string $form Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate
+               * @param string $signature Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field.
+               * @access public
+               * @author Nicola Asuni
+               * @since 2.9.000 (2008-03-26)
+               */
+               function setUserRights(
+                               $enable=true,
+                               $document="/FullSave",
+                               $annots="/Create/Delete/Modify/Copy/Import/Export",
+                               $form="/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate",
+                               $signature="/Modify") {
+                       $this->ur = $enable;
+                       $this->ur_document = $document;
+                       $this->ur_annots = $annots;
+                       $this->ur_form = $form;
+                       $this->ur_signature = $signature;
+               }
+
+               /*
+               * Create a new page group.
+               * NOTE: call this function before calling AddPage()
+               * @access public
+               * @since 3.0.000 (2008-03-27)
+               */
+               function startPageGroup() {
+                       $this->newpagegroup = true;
+               }
+
+               /*
+               * Return the current page in the group.
+               * @return current page in the group
+               * @access public
+               * @since 3.0.000 (2008-03-27)
+               */
+               function getGroupPageNo() {
+                       return $this->pagegroups[$this->currpagegroup];
+               }
+
+               /*
+               * Return the alias of the current page group
+               * (will be replaced by the total number of pages in this group).
+               * @return alias of the current page group
+               * @access public
+               * @since 3.0.000 (2008-03-27)
+               */
+               function getPageGroupAlias() {
+                       return $this->currpagegroup;
+               }
+
+               /*
+               * Put visibility settings.
+               * @access protected
+               * @since 3.0.000 (2008-03-27)
+               */
+               function _putocg() {
+                       $this->_newobj();
+                       $this->n_ocg_print = $this->n;
+                       $this->_out('<</Type /OCG /Name '.$this->_textstring('print'));
+                       $this->_out('/Usage <</Print <</PrintState /ON>> /View <</ViewState /OFF>>>>>>');
+                       $this->_out('endobj');
+                       $this->_newobj();
+                       $this->n_ocg_view=$this->n;
+                       $this->_out('<</Type /OCG /Name '.$this->_textstring('view'));
+                       $this->_out('/Usage <</Print <</PrintState /OFF>> /View <</ViewState /ON>>>>>>');
+                       $this->_out('endobj');
+               }
+
+               /*
+               * Set the visibility of the successive elements.
+               * This can be useful, for instance, to put a background
+               * image or color that will show on screen but won't print.
+               * @param string $v visibility mode. Legal values are: all, print, screen.
+               * @access public
+               * @since 3.0.000 (2008-03-27)
+               */
+               function setVisibility($v) {
+                       if ($this->openMarkedContent) {
+                               // close existing open marked-content
+                               $this->_out('EMC');
+                               $this->openMarkedContent = false;
+                       }
+                       switch($v) {
+                               case "print": {
+                                       $this->_out('/OC /OC1 BDC');
+                                       $this->openMarkedContent = true;
+                                       break;
+                               }
+                               case "screen": {
+                                       $this->_out('/OC /OC2 BDC');
+                                       $this->openMarkedContent = true;
+                                       break;
+                               }
+                               case "all": {
+                                       $this->_out('');
+                                       break;
+                               }
+                               default: {
+                                       $this->Error('Incorrect visibility: '.$v);
+                                       break;
+                               }
+                       }
+                       $this->visibility = $v;
+               }
+
+               /*
+               * Add transparency parameters to the current extgstate
+               * @param array $params parameters
+               * @return the number of extgstates
+               * @access protected
+               * @since 3.0.000 (2008-03-27)
+               */
+               function addExtGState($parms) {
+                       $n = count($this->extgstates) + 1;
+                       $this->extgstates[$n]['parms'] = $parms;
+                       return $n;
+               }
+
+               /*
+               * Add an extgstate
+               * @param array $gs extgstate
+               * @access protected
+               * @since 3.0.000 (2008-03-27)
+               */
+               function setExtGState($gs) {
+                       $this->_out(sprintf('/GS%d gs', $gs));
+               }
+
+               /*
+               * Put extgstates for object transparency
+               * @param array $gs extgstate
+               * @access protected
+               * @since 3.0.000 (2008-03-27)
+               */
+               function _putextgstates() {
+                       $ne = count($this->extgstates);
+                       for ($i = 1; $i <= $ne; $i++) {
+                               $this->_newobj();
+                               $this->extgstates[$i]['n'] = $this->n;
+                               $this->_out('<</Type /ExtGState');
+                               foreach ($this->extgstates[$i]['parms'] as $k => $v) {
+                                       $this->_out('/'.$k.' '.$v);
+                               }
+                               $this->_out('>>');
+                               $this->_out('endobj');
+                       }
+               }
+
+               /*
+               * Set alpha for stroking (CA) and non-stroking (ca) operations.
+               * @param float $alpha real value from 0 (transparent) to 1 (opaque)
+               * @param string $bm blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity
+               * @access public
+               * @since 3.0.000 (2008-03-27)
+               */
+               function setAlpha($alpha, $bm='Normal') {
+                       $gs = $this->addExtGState(array('ca' => $alpha, 'CA' => $alpha, 'BM' => '/'.$bm));
+                       $this->setExtGState($gs);
+               }
+
+               /*
+               * Set the default JPEG compression quality (1-100)
+               * @param int $quality JPEG quality, integer between 1 and 100
+               * @access public
+               * @since 3.0.000 (2008-03-27)
+               */
+               function setJPEGQuality($quality) {
+                       if (($quality < 1) OR ($quality > 100)) {
+                               $quality = 75;
+                       }
+                       $this->jpeg_quality = intval($quality);
+               }
+
+               /*
+               * Set the default number of columns in a row for HTML tables.
+               * @param int $cols number of columns
+               * @access public
+               * @since 3.0.014 (2008-06-04)
+               */
+               function setDefaultTableColumns($cols=4) {
+                       $this->default_table_columns = intval($cols);
+               }
+
+               /*
+               * Set the height of cell repect font height.
+               * @param int $h cell proportion respect font height (typical value = 1.25).
+               * @access public
+               * @since 3.0.014 (2008-06-04)
+               */
+               function setCellHeightRatio($h) {
+                       $this->cell_height_ratio = $h;
+               }
+
+               /*
+               * return the height of cell repect font height.
+               * @access public
+               * @since 4.0.012 (2008-07-24)
+               */
+               function getCellHeightRatio() {
+                       return $this->cell_height_ratio;
+               }
+
+               /*
+               * Set the PDF version (check PDF reference for valid values).
+               * Default value is 1.t
+               * @access public
+               * @since 3.1.000 (2008-06-09)
+               */
+               function setPDFVersion($version="1.7") {
+                       $this->PDFVersion = $version;
+               }
+
+               /*
+               * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print.
+               * (see Section 8.1 of PDF reference, "Viewer Preferences").
+               * <ul>
+               * <li>HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.</li>
+               * <li>HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.</li>
+               * <li>HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.</li>
+               * <li>FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.</li>
+               * <li>CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.</li>
+               * <li>DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.</li>
+               * <li>NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:<ul><li>UseNone Neither document outline nor thumbnail images visible</li><li>UseOutlines Document outline visible</li><li>UseThumbs Thumbnail images visible</li><li>UseOC Optional content group panel visible</li><ul>This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.</li>
+               * <li>ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+               * <li>ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+               * <li>PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+               * <li>PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:<ul><li>MediaBox</li><li>CropBox (default)</li><li>BleedBox</li><li>TrimBox</li><li>ArtBox</li></ul></li>
+               * <li>PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are: <ul><li>None, which indicates that the print dialog should reflect no page scaling</li><li>AppDefault (default), which indicates that applications should use the current print scaling</li><ul></li>
+               * <li>Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:<ul><li>Simplex - Print single-sided</li><li>DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet</li><li>DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet</li></ul>Default value: none</li>
+               * <li>PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.</li>
+               * <li>PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application</li>
+               * <li>NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1</li>
+               * </ul>
+               * @param array $preferences array of options.
+               * @author Nicola Asuni
+               * @access public
+               * @since 3.1.000 (2008-06-09)
+               */
+               function setViewerPreferences($preferences) {
+                       $this->viewer_preferences = $preferences;
+               }
+
+               /**
+               * Paints a linear colour gradient.
+               * @param float $x abscissa of the top left corner of the rectangle.
+               * @param float $y ordinate of the top left corner of the rectangle.
+               * @param float $w width of the rectangle.
+               * @param float $h height of the rectangle.
+               * @param array $col1 first color (RGB components).
+               * @param array $col2 second color (RGB components).
+               * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0).
+               * @author Andreas Würmser, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access public
+               */
+               function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) {
+                       $this->Clip($x, $y, $w, $h);
+                       $this->Gradient(2, $col1, $col2, $coords);
+               }
+
+               /**
+               * Paints a radial colour gradient.
+               * @param float $x abscissa of the top left corner of the rectangle.
+               * @param float $y ordinate of the top left corner of the rectangle.
+               * @param float $w width of the rectangle.
+               * @param float $h height of the rectangle.
+               * @param array $col1 first color (RGB components).
+               * @param array $col2 second color (RGB components).
+               * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined.
+               * @author Andreas Würmser, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access public
+               */
+               function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) {
+                       $this->Clip($x, $y, $w, $h);
+                       $this->Gradient(3, $col1, $col2, $coords);
+               }
+
+               /**
+               * Paints a coons patch mesh.
+               * @param float $x abscissa of the top left corner of the rectangle.
+               * @param float $y ordinate of the top left corner of the rectangle.
+               * @param float $w width of the rectangle.
+               * @param float $h height of the rectangle.
+               * @param array $col1 first color (lower left corner) (RGB components).
+               * @param array $col2 second color (lower right corner) (RGB components).
+               * @param array $col3 third color (upper right corner) (RGB components).
+               * @param array $col4 fourth color (upper left corner) (RGB components).
+               * @param array $coords <ul><li>for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bézier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).</li><li>for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bézier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches</li></ul>
+               * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0
+               * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1
+               * @author Andreas Würmser, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access public
+               */
+               function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1) {
+                       $this->Clip($x, $y, $w, $h);
+                       $n = count($this->gradients) + 1;
+                       $this->gradients[$n]['type'] = 6; //coons patch mesh
+                       //check the coords array if it is the simple array or the multi patch array
+                       if (!isset($coords[0]['f'])){
+                               //simple array -> convert to multi patch array
+                               if (!isset($col1[1])) {
+                                       $col1[1] = $col1[2] = $col1[0];
+                               }
+                               if (!isset($col2[1])) {
+                                       $col2[1] = $col2[2] = $col2[0];
+                               }
+                               if (!isset($col3[1])) {
+                                       $col3[1] = $col3[2] = $col3[0];
+                               }
+                               if (!isset($col4[1])) {
+                                       $col4[1] = $col4[2] = $col4[0];
+                               }
+                               $patch_array[0]['f'] = 0;
+                               $patch_array[0]['points'] = $coords;
+                               $patch_array[0]['colors'][0]['r'] = $col1[0];
+                               $patch_array[0]['colors'][0]['g'] = $col1[1];
+                               $patch_array[0]['colors'][0]['b'] = $col1[2];
+                               $patch_array[0]['colors'][1]['r'] = $col2[0];
+                               $patch_array[0]['colors'][1]['g'] = $col2[1];
+                               $patch_array[0]['colors'][1]['b'] = $col2[2];
+                               $patch_array[0]['colors'][2]['r'] = $col3[0];
+                               $patch_array[0]['colors'][2]['g'] = $col3[1];
+                               $patch_array[0]['colors'][2]['b'] = $col3[2];
+                               $patch_array[0]['colors'][3]['r'] = $col4[0];
+                               $patch_array[0]['colors'][3]['g'] = $col4[1];
+                               $patch_array[0]['colors'][3]['b'] = $col4[2];
+                       } else {
+                               //multi patch array
+                               $patch_array = $coords;
+                       }
+                       $bpcd = 65535; //16 BitsPerCoordinate
+                       //build the data stream
+                       $this->gradients[$n]['stream'] = "";
+                       for($i=0; $i < count($patch_array); $i++) {
+                               $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit
+                               for($j=0; $j < count($patch_array[$i]['points']); $j++) {
+                                       //each point as 16 bit
+                                       $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j]-$coords_min)/($coords_max-$coords_min))*$bpcd;
+                                       if ($patch_array[$i]['points'][$j] < 0) {
+                                               $patch_array[$i]['points'][$j] = 0;
+                                       }
+                                       if ($patch_array[$i]['points'][$j] > $bpcd) {
+                                               $patch_array[$i]['points'][$j] = $bpcd;
+                                       }
+                                       $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j]/256));
+                                       $this->gradients[$n]['stream'] .= chr(floor($patch_array[$i]['points'][$j]%256));
+                               }
+                               for($j=0; $j < count($patch_array[$i]['colors']); $j++) {
+                                       //each color component as 8 bit
+                                       $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']);
+                                       $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']);
+                                       $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']);
+                               }
+                       }
+                       //paint the gradient
+                       $this->_out('/Sh'.$n.' sh');
+                       //restore previous Graphic State
+                       $this->_out('Q');
+               }
+
+               /**
+               * Set a rectangular clipping area.
+               * @param float $x abscissa of the top left corner of the rectangle (or top right corner for RTL mode).
+               * @param float $y ordinate of the top left corner of the rectangle.
+               * @param float $w width of the rectangle.
+               * @param float $h height of the rectangle.
+               * @author Andreas Würmser, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access protected
+               */
+               function Clip($x, $y, $w, $h){
+                       if ($this->rtl) {
+                               $x = $this->w - $x - $w;
+                       }
+                       //save current Graphic State
+                       $s = 'q';
+                       //set clipping area
+                       $s .= sprintf(' %.2f %.2f %.2f %.2f re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k);
+                       //set up transformation matrix for gradient
+                       $s .= sprintf(' %.3f 0 0 %.3f %.3f %.3f cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k);
+                       $this->_out($s);
+               }
+
+               /**
+               * Output gradient.
+               * @param int $type type of gradient.
+               * @param array $col1 first color (RGB components).
+               * @param array $col2 second color (RGB components).
+               * @param array $coords array of coordinates.
+               * @author Andreas Würmser, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access protected
+               */
+               function Gradient($type, $col1, $col2, $coords){
+                       $n = count($this->gradients) + 1;
+                       $this->gradients[$n]['type'] = $type;
+                       if (!isset($col1[1])) {
+                               $col1[1]=$col1[2]=$col1[0];
+                       }
+                       $this->gradients[$n]['col1'] = sprintf('%.3f %.3f %.3f', ($col1[0]/255), ($col1[1]/255), ($col1[2]/255));
+                       if (!isset($col2[1])) {
+                               $col2[1] = $col2[2] = $col2[0];
+                       }
+                       $this->gradients[$n]['col2'] = sprintf('%.3f %.3f %.3f', ($col2[0]/255), ($col2[1]/255), ($col2[2]/255));
+                       $this->gradients[$n]['coords'] = $coords;
+                       //paint the gradient
+                       $this->_out('/Sh'.$n.' sh');
+                       //restore previous Graphic State
+                       $this->_out('Q');
+               }
+
+               /**
+               * Output shaders.
+               * @author Andreas Würmser, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access protected
+               */
+               function _putshaders() {
+                       foreach($this->gradients as $id => $grad) {
+                               if (($grad['type'] == 2) OR ($grad['type'] == 3)) {
+                                       $this->_newobj();
+                                       $this->_out('<<');
+                                       $this->_out('/FunctionType 2');
+                                       $this->_out('/Domain [0.0 1.0]');
+                                       $this->_out('/C0 ['.$grad['col1'].']');
+                                       $this->_out('/C1 ['.$grad['col2'].']');
+                                       $this->_out('/N 1');
+                                       $this->_out('>>');
+                                       $this->_out('endobj');
+                                       $f1 = $this->n;
+                               }
+                               $this->_newobj();
+                               $this->_out('<<');
+                               $this->_out('/ShadingType '.$grad['type']);
+                               $this->_out('/ColorSpace /DeviceRGB');
+                               if ($grad['type'] == 2) {
+                                       $this->_out(sprintf('/Coords [%.3f %.3f %.3f %.3f]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]));
+                                       $this->_out('/Function '.$f1.' 0 R');
+                                       $this->_out('/Extend [true true] ');
+                                       $this->_out('>>');
+                               } elseif ($grad['type'] == 3) {
+                                       //x0, y0, r0, x1, y1, r1
+                                       //at this this time radius of inner circle is 0
+                                       $this->_out(sprintf('/Coords [%.3f %.3f 0 %.3f %.3f %.3f]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]));
+                                       $this->_out('/Function '.$f1.' 0 R');
+                                       $this->_out('/Extend [true true] ');
+                                       $this->_out('>>');
+                               } elseif ($grad['type'] == 6) {
+                                       $this->_out('/BitsPerCoordinate 16');
+                                       $this->_out('/BitsPerComponent 8');
+                                       $this->_out('/Decode[0 1 0 1 0 1 0 1 0 1]');
+                                       $this->_out('/BitsPerFlag 8');
+                                       $this->_out('/Length '.strlen($grad['stream']));
+                                       $this->_out('>>');
+                                       $this->_putstream($grad['stream']);
+                               }
+                               $this->_out('endobj');
+                               $this->gradients[$id]['id'] = $this->n;
+                       }
+               }
+
+               /**
+               * Output an arc
+               * @author Maxime Delorme, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access protected
+               */
+               function _outarc($x1, $y1, $x2, $y2, $x3, $y3 ) {
+                       $h = $this->h;
+                       $this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c', $x1*$this->k, ($h-$y1)*$this->k, $x2*$this->k, ($h-$y2)*$this->k, $x3*$this->k, ($h-$y3)*$this->k));
+               }
+
+               /**
+               * Draw the sector of a circle.
+               * It can be used for instance to render pie charts.
+               * @param float $xc abscissa of the center.
+               * @param float $yc ordinate of the center.
+               * @param float $r radius.
+               * @param float $a start angle (in degrees).
+               * @param float $b end angle (in degrees).
+               * @param string $style: D, F, FD or DF (draw, fill, fill and draw). Default: FD.
+               * @param float $cw: indicates whether to go clockwise (default: true).
+               * @param float $o: origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90.
+               * @author Maxime Delorme, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access public
+               */
+               function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) {
+                       if ($this->rtl) {
+                               $xc = $this->w - $xc - $w;
+                       }
+                       if ($cw) {
+                               $d = $b;
+                               $b = $o - $a;
+                               $a = $o - $d;
+                       } else {
+                               $b += $o;
+                               $a += $o;
+                       }
+                       $a = ($a % 360) + 360;
+                       $b = ($b % 360) + 360;
+                       if ($a > $b) {
+                               $b +=360;
+                       }
+                       $b = $b / 360 * 2 * M_PI;
+                       $a = $a / 360 * 2 * M_PI;
+                       $d = $b - $a;
+                       if ($d == 0 ) {
+                               $d = 2 * M_PI;
+                       }
+                       $k = $this->k;
+                       $hp = $this->h;
+                       if ($style=='F') {
+                               $op = 'f';
+                       } elseif ($style=='FD' or $style=='DF') {
+                               $op = 'b';
+                       } else {
+                               $op = 's';
+                       }
+                       if (sin($d/2)) {
+                               $MyArc = 4/3 * (1 - cos($d/2)) / sin($d/2) * $r;
+                       }
+                       //first put the center
+                       $this->_out(sprintf('%.2f %.2f m', ($xc)*$k, ($hp-$yc)*$k));
+                       //put the first point
+                       $this->_out(sprintf('%.2f %.2f l', ($xc+$r*cos($a))*$k, (($hp-($yc-$r*sin($a)))*$k)));
+                       //draw the arc
+                       if ($d < (M_PI/2)) {
+                               $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+                       } else {
+                               $b = $a + $d/4;
+                               $MyArc = 4/3*(1-cos($d/8))/sin($d/8)*$r;
+                               $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+                               $a = $b;
+                               $b = $a + $d/4;
+                               $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+                               $a = $b;
+                               $b = $a + $d/4;
+                               $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b) );
+                               $a = $b;
+                               $b = $a + $d/4;
+                               $this->_outarc($xc+$r*cos($a)+$MyArc*cos(M_PI/2+$a), $yc-$r*sin($a)-$MyArc*sin(M_PI/2+$a), $xc+$r*cos($b)+$MyArc*cos($b-M_PI/2), $yc-$r*sin($b)-$MyArc*sin($b-M_PI/2), $xc+$r*cos($b), $yc-$r*sin($b));
+                       }
+                       //terminate drawing
+                       $this->_out($op);
+               }
+
+               /**
+               * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files.
+               * Only vector drawing is supported, not text or bitmap.
+               * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2).
+               * @param string $file Name of the file containing the image.
+               * @param float $x Abscissa of the upper-left corner.
+               * @param float $y Ordinate of the upper-left corner.
+               * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated.
+               * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated.
+               * @param mixed $link URL or identifier returned by AddLink().
+               * @param boolean useBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true.
+               * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+               * @author Valentin Schmidt, Nicola Asuni
+               * @since 3.1.000 (2008-06-09)
+               * @access public
+               */
+               function ImageEps($file, $x, $y, $w=0, $h=0, $link='', $useBoundingBox=true, $align='') {
+                       if ($this->rtl) {
+                               $x = ($this->w - $x - $w);
+                       }
+                       $data = file_get_contents($file);
+                       if ($data === false) {
+                               $this->Error('EPS file not found: '.$file);
+                       }
+                       $regs = array();
+                       // EPS/AI compatibility check (only checks files created by Adobe Illustrator!)
+                       preg_match ('/%%Creator:([^\r\n]+)/', $data, $regs); # find Creator
+                       if (count($regs) > 1) {
+                               $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0"
+                               if (strpos($version_str, 'Adobe Illustrator') !== false) {
+                                       $versexp = explode(' ', $version_str);
+                                       $version = (float)array_pop($versexp);
+                                       if ($version >= 9) {
+                                               $this->Error('This version of Adobe Illustrator file is not supported: '.$file);
+                                       }
+                               }
+                       }
+                       // strip binary bytes in front of PS-header
+                       $start = strpos($data, '%!PS-Adobe');
+                       if ($start > 0) {
+                               $data = substr($data, $start);
+                       }
+                       // find BoundingBox params
+                       preg_match ("/%%BoundingBox:([^\r\n]+)/", $data, $regs);
+                       if (count($regs) > 1) {
+                               list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1]));
+                       } else {
+                               $this->Error('No BoundingBox found in EPS file: '.$file);
+                       }
+                       $start = strpos($data, '%%EndSetup');
+                       if ($start === false) {
+                               $start = strpos($data, '%%EndProlog');
+                       }
+                       if ($start === false) {
+                               $start = strpos($data, '%%BoundingBox');
+                       }
+                       $data = substr($data, $start);
+                       $end = strpos($data, '%%PageTrailer');
+                       if ($end===false) {
+                               $end = strpos($data, 'showpage');
+                       }
+                       if ($end) {
+                               $data = substr($data, 0, $end);
+                       }
+                       // save the current graphic state
+                       $this->_out('q');
+                       $k = $this->k;
+                       if ($useBoundingBox){
+                               $dx = $x * $k - $x1;
+                               $dy = $y * $k - $y1;
+                       } else {
+                               $dx = $x * $k;
+                               $dy = $y * $k;
+                       }
+                       // translate
+                       $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', 1, 0, 0, 1, $dx, $dy+($this->hPt - 2*$y*$k - ($y2-$y1))));
+                       if ($w > 0) {
+                               $scale_x = $w/(($x2-$x1)/$k);
+                               if ($h > 0) {
+                                       $scale_y = $h/(($y2-$y1)/$k);
+                               } else {
+                                       $scale_y = $scale_x;
+                                       $h = ($y2-$y1)/$k * $scale_y;
+                               }
+                       } else {
+                               if ($h > 0) {
+                                       $scale_y = $h/(($y2-$y1)/$k);
+                                       $scale_x = $scale_y;
+                                       $w = ($x2-$x1)/$k * $scale_x;
+                               } else {
+                                       $w = ($x2 - $x1) / $k;
+                                       $h = ($y2 - $y1) / $k;
+                               }
+                       }
+                       // scale
+                       if (isset($scale_x)) {
+                               $this->_out(sprintf('%.3F %.3F %.3F %.3F %.3F %.3F cm', $scale_x, 0, 0, $scale_y, $x1*(1-$scale_x), $y2*(1-$scale_y)));
+                       }
+                       // handle pc/unix/mac line endings
+                       $lines = split ("\r\n|[\r\n]", $data);
+                       $u=0;
+                       $cnt = count($lines);
+                       for ($i=0; $i < $cnt; $i++) {
+                               $line = $lines[$i];
+                               if (($line == '') OR ($line{0} == '%')) {
+                                       continue;
+                               }
+                               $len = strlen($line);
+                               $chunks = explode(' ', $line);
+                               $cmd = array_pop($chunks);
+                               // RGB
+                               if (($cmd == 'Xa') OR ($cmd == 'XA')) {
+                                       $b = array_pop($chunks);
+                                       $g = array_pop($chunks);
+                                       $r = array_pop($chunks);
+                                       $this->_out("$r $g $b ". ($cmd=='Xa'?'rg':'RG') ); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg!
+                                       continue;
+                               }
+                               switch ($cmd) {
+                                       case 'm':
+                                       case 'l':
+                                       case 'v':
+                                       case 'y':
+                                       case 'c':
+                                       case 'k':
+                                       case 'K':
+                                       case 'g':
+                                       case 'G':
+                                       case 's':
+                                       case 'S':
+                                       case 'J':
+                                       case 'j':
+                                       case 'w':
+                                       case 'M':
+                                       case 'd':
+                                       case 'n':
+                                       case 'v': {
+                                               $this->_out($line);
+                                               break;
+                                       }
+                                       case 'x': {// custom fill color
+                                               list($c,$m,$y,$k) = $chunks;
+                                               $this->_out("$c $m $y $k k");
+                                               break;
+                                       }
+                                       case 'X': { // custom stroke color
+                                               list($c,$m,$y,$k) = $chunks;
+                                               $this->_out("$c $m $y $k K");
+                                               break;
+                                       }
+                                       case 'Y':
+                                       case 'N':
+                                       case 'V':
+                                       case 'L':
+                                       case 'C': {
+                                               $line{$len-1} = strtolower($cmd);
+                                               $this->_out($line);
+                                               break;
+                                       }
+                                       case 'b':
+                                       case 'B': {
+                                               $this->_out($cmd . '*');
+                                               break;
+                                       }
+                                       case 'f':
+                                       case 'F': {
+                                               if ($u > 0) {
+                                                       $isU = false;
+                                                       $max = min($i+5, $cnt);
+                                                       for ($j=$i+1; $j < $max; $j++)
+                                                         $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U')));
+                                                       if ($isU) {
+                                                               $this->_out("f*");
+                                                       }
+                                               } else {
+                                                       $this->_out("f*");
+                                               }
+                                               break;
+                                       }
+                                       case '*u': {
+                                               $u++;
+                                               break;
+                                       }
+                                       case '*U': {
+                                               $u--;
+                                               break;
+                                       }
+                               }
+                       }
+                       // restore previous graphic state
+                       $this->_out('Q');
+                       if ($link) {
+                               $this->Link($x, $y, $w, $h, $link);
+                       }
+                       // set bottomcoordinates
+                       $this->img_rb_y = $y + $h;
+                       if ($this->rtl) {
+                               // set left side coordinate
+                               $this->img_rb_x = ($this->w - $x - $w);
+                       } else {
+                               // set right side coordinate
+                               $this->img_rb_x = $x + $w;
+                       }
+                       // set pointer to align the successive text/objects
+                       switch($align) {
+                               case 'T':{
+                                       $this->y = $y;
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'M':{
+                                       $this->y = $y + round($h/2);
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'B':{
+                                       $this->y = $this->img_rb_y;
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'N':{
+                                       $this->SetY($this->img_rb_y);
+                                       break;
+                               }
+                               default:{
+                                       break;
+                               }
+                       }
+               }
+
+               /**
+                * Set document barcode.
+                * @param string $bc barcode
+                */
+               function setBarcode($bc="") {
+                       $this->barcode = $bc;
+               }
+
+               /**
+                * Get current barcode.
+                * @return string
+                * @since 4.0.012 (2008-07-24)
+                */
+               function getBarcode() {
+                       return $this->barcode;
+               }
+
+               /**
+                * Print Barcode.
+                * @param string $code code to print
+                * @param string $type type of barcode.
+                * @param int $x x position in user units
+                * @param int $y y position in user units
+                * @param int $w width in user units
+                * @param int $h height position in user units
+                * @param float $xres width of the smallest bar in user units
+                * @param array $style array of options:<ul><li>string $style["position"] barcode position inside the specified width: L = left (default for LTR); C = center; R = right (default for RTL); S = stretch</li><li>boolean $style["border"] if true prints a border around the barcode</li><li>int $style["padding"] padding to leave around the barcode in user units</li><li>array $style["fgcolor"] color array for bars and text</li><li>mixed $style["bgcolor"] color array for background or false for transparent</li><li>boolean $style["text"] boolean if true prints text below the barcode</li><li>string $style["font"] font name for text</li><li>int $style["fontsize"] font size for text</li><li>int $style["stretchtext"]: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing</li></ul>
+                * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:<ul><li>T: top-right for LTR or top-left for RTL</li><li>M: middle-right for LTR or middle-left for RTL</li><li>B: bottom-right for LTR or bottom-left for RTL</li><li>N: next line</li></ul>
+                * @author Nicola Asuni
+                * @since 3.1.000 (2008-06-09)
+                * @access public
+                */
+               function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres=0.4, $style='', $align='') {
+                       if (empty($code)) {
+                               return;
+                       }
+                       $barcodeobj = new TCPDFbarcode($code, $type);
+                       $arrcode = $barcodeobj->getBarcodeArray();
+                       if ($arrcode === false) {
+                               $this->Error('Error in barcode string');
+                       }
+                       // set default values
+                       if (!isset($style["position"])) {
+                               if ($this->rtl) {
+                                       $style["position"] = "R";
+                               } else {
+                                       $style["position"] = "L";
+                               }
+                       }
+                       if (!isset($style["padding"])) {
+                               $style["padding"] = 0;
+                       }
+                       if (!isset($style["fgcolor"])) {
+                               $style["fgcolor"] = array(0,0,0); // default black
+                       }
+                       if (!isset($style["bgcolor"])) {
+                               $style["bgcolor"] = false; // default transparent
+                       }
+                       if (!isset($style["border"])) {
+                               $style["border"] = false;
+                       }
+                       if (!isset($style["text"])) {
+                               $style["text"] = false;
+                               $fontsize = 0;
+                       }
+                       if ($style["text"] AND isset($style["font"])) {
+                               $prevFontFamily = $this->FontFamily;
+                               $prevFontStyle = $this->FontStyle;
+                               $prevFontSizePt = $this->FontSizePt;
+                               if (isset($style["fontsize"])) {
+                                       $fontsize = $style["fontsize"];
+                               } else {
+                                       $fontsize = 0;
+                               }
+                               $this->SetFont($style["font"], '', $fontsize);
+                       }
+                       if (!isset($style["stretchtext"])) {
+                               $style["stretchtext"] = 4;
+                       }
+                       // set foreground color
+                       $prevDrawColor = $this->DrawColor;
+                       $prevTextColor = $this->TextColor;
+                       $this->SetDrawColorArray($style["fgcolor"]);
+                       $this->SetTextColorArray($style["fgcolor"]);
+                       if (empty($w) OR ($w <= 0)) {
+                               if ($this->rtl) {
+                                       $w = $this->x - $this->lMargin;
+                               } else {
+                                       $w = $this->w - $this->rMargin - $this->x;
+                               }
+                       }
+                       if (empty($x)) {
+                               $x = $this->GetX();
+                       }
+                       if ($this->rtl) {
+                               $x = $this->w - $x;
+                       }
+                       if (empty($y)) {
+                               $y = $this->GetY();
+                       }
+                       if (empty($xres)) {
+                               $xres = 0.4;
+                       }
+                       $fbw = ($arrcode["maxw"] * $xres) + (2 * $style["padding"]);
+                       $extraspace = ($this->cell_height_ratio * $fontsize / $this->k) + (2 * $style["padding"]);
+                       if (empty($h)) {
+                               $h = 10 + $extraspace;
+                       }
+                       if ((($y + $h) > $this->PageBreakTrigger) AND (empty($this->InFooter)) AND ($this->AcceptPageBreak())) {
+                               //Automatic page break
+                               $x = $this->x;
+                               $ws = $this->ws;
+                               if ($ws > 0) {
+                                       $this->ws = 0;
+                                       $this->_out('0 Tw');
+                               }
+                               $this->AddPage($this->CurOrientation);
+                               if ($ws > 0) {
+                                       $this->ws = $ws;
+                                       $this->_out(sprintf('%.3f Tw',$ws * $k));
+                               }
+                               $this->x = $x;
+                               $y = $this->y;
+                       }
+                       // maximum bar heigth
+                       $barh = $h - $extraspace;
+                       switch ($style["position"]) {
+                               case "L": { // left
+                                       if ($this->rtl) {
+                                               $xpos = $x - $w;
+                                       } else {
+                                               $xpos = $x;
+                                       }
+                                       break;
+                               }
+                               case "C": { // center
+                                       $xdiff = (($w - $fbw) / 2);
+                                       if ($this->rtl) {
+                                               $xpos = $x - $w + $xdiff;
+                                       } else {
+                                               $xpos = $x + $xdiff;
+                                       }
+                                       break;
+                               }
+                               case "R": { // right
+                                       if ($this->rtl) {
+                                               $xpos = $x - $fbw;
+                                       } else {
+                                               $xpos = $x + $w - $fbw;
+                                       }
+                                       break;
+                               }
+                               case "S": { // stretch
+                                       $fbw = $w;
+                                       $xres = ($w - (2 * $style["padding"])) / $arrcode["maxw"];
+                                       if ($this->rtl) {
+                                               $xpos = $x - $w;
+                                       } else {
+                                               $xpos = $x;
+                                       }
+                                       break;
+                               }
+                       }
+                       $xpos_rect = $xpos;
+                       $xpos = $xpos_rect + $style["padding"];
+                       $xpos_text = $xpos;
+                       // barcode is always printed in LTR direction
+                       $tempRTL = $this->rtl;
+                       $this->rtl = false;
+                       // print background color
+                       if ($style["bgcolor"]) {
+                               $this->Rect($xpos_rect, $y, $fbw, $h, 'DF', '', $style["bgcolor"]);
+                       } elseif ($style["border"]) {
+                               $this->Rect($xpos_rect, $y, $fbw, $h, 'D');
+                       }
+                       // print bars
+                       if ($arrcode !== false) {
+                               foreach ($arrcode["bcode"] as $k => $v) {
+                                       $bw = ($v["w"] * $xres);
+                                       if ($v["t"]) {
+                                               // braw a vertical bar
+                                               $ypos = $y + $style["padding"] + ($v["p"] * $barh / $arrcode["maxh"]);
+                                               $this->Rect($xpos, $ypos, $bw, ($v["h"] * $barh  / $arrcode["maxh"]), 'DF', array("L"=>0,"T"=>0,"R"=>0,"B"=>0), $style["fgcolor"]);
+                                       }
+                                       $xpos += $bw;
+                               }
+                       }
+                       // print text
+                       if ($style["text"]) {
+                               // print text
+                               $this->x = $xpos_text;
+                               $this->y = $y + $style["padding"] + $barh;
+                               $this->Cell(($arrcode["maxw"] * $xres), ($this->cell_height_ratio * $fontsize / $this->k), $code, 0, 0, 'C', 0, '', $style["stretchtext"]);
+                       }
+                       // restore original direction
+                       $this->rtl = $tempRTL;
+                       // restore previous font
+                       if ($style["text"] AND isset($style["font"])) {
+                               $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt);
+                       }
+                       // restore colors
+                       $this->DrawColor = $prevDrawColor;
+                       $this->TextColor = $prevTextColor;
+                       // set bottomcoordinates
+                       $this->img_rb_y = $y + $h;
+                       if ($this->rtl) {
+                               // set left side coordinate
+                               $this->img_rb_x = ($this->w - $x - $w);
+                       } else {
+                               // set right side coordinate
+                               $this->img_rb_x = $x + $w;
+                       }
+                       // set pointer to align the successive text/objects
+                       switch($align) {
+                               case 'T':{
+                                       $this->y = $y;
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'M':{
+                                       $this->y = $y + round($h/2);
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'B':{
+                                       $this->y = $this->img_rb_y;
+                                       $this->x = $this->img_rb_x;
+                                       break;
+                               }
+                               case 'N':{
+                                       $this->SetY($this->img_rb_y);
+                                       break;
+                               }
+                               default:{
+                                       break;
+                               }
+                       }
+               }
+
+               /**
+                * This function is DEPRECATED, please use the new write1DBarcode() function.
+                * @param int $x x position in user units
+                * @param int $y y position in user units
+                * @param int $w width in user units
+                * @param int $h height position in user units
+                * @param string $type type of barcode (I25, C128A, C128B, C128C, C39)
+                * @param string $style barcode style
+                * @param string $font font for text
+                * @param int $xres x resolution
+                * @param string $code code to print
+                * @deprecated deprecated since version 3.1.000 (2008-06-10)
+                * @see write1DBarcode()
+                */
+               function writeBarcode($x, $y, $w, $h, $type, $style, $font, $xres, $code) {
+                       // convert old settings for the new write1DBarcode() function.
+                       $xres = 1 / $xres;
+                       $newstyle = array(
+                               "position" => "L",
+                               "border" => false,
+                               "padding" => 0,
+                               "fgcolor" => array(0,0,0),
+                               "bgcolor" => false,
+                               "text" => true,
+                               "font" => $font,
+                               "fontsize" => 8,
+                               "stretchtext" => 4
+                       );
+                       if ($style & 1) {
+                               $newstyle["border"] = true;
+                       }
+                       if ($style & 2) {
+                               $newstyle["bgcolor"] = false;
+                       }
+                       if ($style & 4) {
+                               $newstyle["position"] = "C";
+                       } elseif ($style & 8) {
+                               $newstyle["position"] = "L";
+                       } elseif ($style & 16) {
+                               $newstyle["position"] = "R";
+                       }
+                       if ($style & 128) {
+                               $newstyle["text"] = true;
+                       }
+                       if ($style & 256) {
+                               $newstyle["stretchtext"] = 4;
+                       }
+                       $this->write1DBarcode($code, $type, $x, $y, $w, $h, $xres, $newstyle, '');
+               }
+
+               /**
+                * Returns an array containing current margins:
+                * <ul>
+                               <li>$ret['left'] = left  margin</li>
+                               <li>$ret['right'] = right margin</li>
+                               <li>$ret['top'] = top margin</li>
+                               <li>$ret['bottom'] = bottom margin</li>
+                               <li>$ret['header'] = header margin</li>
+                               <li>$ret['footer'] = footer margin</li>
+                               <li>$ret['cell'] = cell margin</li>
+                * </ul>
+                * @return array containing all margins measures
+                * @since 3.2.000 (2008-06-23)
+                */
+               function getMargins() {
+                       $ret = array(
+                               'left' => $this->lMargin,
+                               'right' => $this->rMargin,
+                               'top' => $this->tMargin,
+                               'bottom' => $this->bMargin,
+                               'header' => $this->header_margin,
+                               'footer' => $this->footer_margin,
+                               'cell' => $this->cMargin,
+                       );
+                       return $ret;
+               }
+
+               /**
+                * Returns an array containing original margins:
+                * <ul>
+                               <li>$ret['left'] = left  margin</li>
+                               <li>$ret['right'] = right margin</li>
+                * </ul>
+                * @return array containing all margins measures
+                * @since 4.0.012 (2008-07-24)
+                */
+               function getOriginalMargins() {
+                       $ret = array(
+                               'left' => $this->original_lMargin,
+                               'right' => $this->original_rMargin
+                       );
+                       return $ret;
+               }
+
+               /**
+                * Returns the current font size.
+                * @return current font size
+                * @since 3.2.000 (2008-06-23)
+                */
+               function getFontSize() {
+                       return $this->FontSize;
+               }
+
+               /**
+                * Returns the current font size in points unit.
+                * @return current font size in points unit
+                * @since 3.2.000 (2008-06-23)
+                */
+               function getFontSizePt() {
+                       return $this->FontSizePt;
+               }
+
+               /**
+                * Prints a cell (rectangular area) with optional borders, background color and html text string.
+                * The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br />
+                * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting.
+                * @param float $w Cell width. If 0, the cell extends up to the right margin.
+                * @param float $h Cell minimum height. The cell extends automatically if needed.
+                * @param float $x upper-left corner X coordinate
+                * @param float $y upper-left corner Y coordinate
+                * @param string $html html text to print. Default value: empty string.
+                * @param mixed $border Indicates if borders must be drawn around the cell. The value can be either a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul>or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul>
+                * @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
+       Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
+                * @param int $fill Indicates if the cell background must be painted (1) or transparent (0). Default value: 0.
+                * @param boolean $reseth if true reset the last cell height (default true).
+                * @param string $align Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+                * @uses MultiCell()
+                * @see Multicell(), writeHTML()
+                */
+               function writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='') {
+                       return $this->MultiCell($w, $h, $html, $border, $align, $fill, $ln, $x, $y, $reseth, 0, true);
+               }
+
+               /**
+                * Returns the HTML DOM array.
+                * <ul><li>$dom[$key]['tag'] = true if tag, false otherwise;</li><li>$dom[$key]['value'] = tag name or text;</li><li>$dom[$key]['opening'] = true if opening tag, false otherwise;</li><li>$dom[$key]['attribute'] = array of attributes (attribute name is the key);</li><li>$dom[$key]['style'] = array of style attributes (attribute name is the key);</li><li>$dom[$key]['parent'] = id of parent element;</li><li>$dom[$key]['fontname'] = font family name;</li><li>$dom[$key]['fontstyle'] = font style;</li><li>$dom[$key]['fontsize'] = font size in points;</li><li>$dom[$key]['bgcolor'] = RGB array of background color;</li><li>$dom[$key]['fgcolor'] = RGB array of foreground color;</li><li>$dom[$key]['width'] = width in pixels;</li><li>$dom[$key]['height'] = height in pixels;</li><li>$dom[$key]['align'] = text alignment;</li><li>$dom[$key]['cols'] = number of colums in table;</li><li>$dom[$key]['rows'] = number of rows in table;</li></ul>
+                * @param string $html html code
+                * @return array
+                * @since 3.2.000 (2008-06-20)
+                */
+               function getHtmlDomArray($html) {
+                       // remove all unsupported tags (the line below lists all supported tags)
+                       $html = strip_tags($html, "<a><b><blockquote><br><br/><dd><del><div><dl><dt><em><font><h1><h2><h3><h4><h5><h6><hr><i><img><li><ol><p><small><span><strong><sub><sup><table><td><th><tr><u><ul>");
+                       //replace carriage returns, newlines and tabs
+                       $repTable = array("\t" => " ", "\n" => " ", "\r" => " ", "\0" => " ", "\x0B" => " ", "\\" => "\\\\");
+                       $html = strtr($html, $repTable);
+                       // remove extra spaces from tables
+                       $html = preg_replace('/[\s]*<\/table>[\s]*/', '</table>', $html);
+                       $html = preg_replace('/[\s]*<\/tr>[\s]*/', '</tr>', $html);
+                       $html = preg_replace('/[\s]*<tr/', '<tr', $html);
+                       $html = preg_replace('/[\s]*<\/th>[\s]*/', '</th>', $html);
+                       $html = preg_replace('/[\s]*<th/', '<th', $html);
+                       $html = preg_replace('/[\s]*<\/td>[\s]*/', '</td>', $html);
+                       $html = preg_replace('/[\s]*<td/', '<td', $html);
+                       // pattern for generic tag
+                       $tagpattern = '/(<[^>]+>)/Uu';
+                       // explodes the string
+                       $a = preg_split($tagpattern, $html, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+                       // count elements
+                       $maxel = count($a);
+                       $key = 0;
+                       // create an array of elements
+                       $dom = array();
+                       $dom[$key] = array();
+                       // set first void element
+                       $dom[$key]['tag'] = false;
+                       $dom[$key]['value'] = "";
+                       $dom[$key]['parent'] = 0;
+                       $dom[$key]['fontname'] = $this->FontFamily;
+                       $dom[$key]['fontstyle'] = $this->FontStyle;
+                       $dom[$key]['fontsize'] = $this->FontSizePt;
+                       $dom[$key]['bgcolor'] = false;
+                       $dom[$key]['fgcolor'] = $this->fgcolor;
+                       $dom[$key]['align'] = '';
+                       $key++;
+                       $level = array();
+                       array_push($level, 0); // root
+                       while ($key <= $maxel) {
+                               if ($key > 0) {
+                                       $dom[$key] = array();
+                               }
+                               $element = $a[($key-1)];
+                               if (preg_match($tagpattern, $element)) {
+                                       // html tag
+                                       $dom[$key]['tag'] = true;
+                                       $element = substr($element, 1, -1);
+                                       // get tag name
+                                       preg_match('/[\/]?([a-zA-Z0-9]*)/', $element, $tag);
+                                       $dom[$key]['value'] = strtolower($tag[1]);
+                                       if ($element{0} == '/') {
+                                               // closing html tag
+                                               $dom[$key]['opening'] = false;
+                                               $dom[$key]['parent'] = end($level);
+                                               array_pop($level);
+                                               $dom[$key]['fontname'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontname'];
+                                               $dom[$key]['fontstyle'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontstyle'];
+                                               $dom[$key]['fontsize'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fontsize'];
+                                               $dom[$key]['bgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['bgcolor'];
+                                               $dom[$key]['fgcolor'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['fgcolor'];
+                                               $dom[$key]['align'] = $dom[($dom[($dom[$key]['parent'])]['parent'])]['align'];
+                                               // set the number of columns in table tag
+                                               if (($dom[$key]['value'] == "tr") AND (!isset($dom[($dom[($dom[$key]['parent'])]['parent'])]['cols']))) {
+                                                       $dom[($dom[($dom[$key]['parent'])]['parent'])]['cols'] = $dom[($dom[$key]['parent'])]['cols'];
+                                               }
+                                               if (($dom[$key]['value'] == "td") OR ($dom[$key]['value'] == "th")) {
+                                                       $dom[($dom[$key]['parent'])]['content'] = "";
+                                                       for ($i = ($dom[$key]['parent'] + 1); $i < $key; $i++) {
+                                                               $dom[($dom[$key]['parent'])]['content'] .= $a[($i-1)];
+                                                       }
+                                                       $key = $i;
+                                               }
+                                       } else {
+                                               // opening html tag
+                                               $dom[$key]['opening'] = true;
+                                               $dom[$key]['parent'] = end($level);
+                                               if (substr($element, -1, 1) != '/') {
+                                                       // not self-closing tag
+                                                       array_push($level, $key);
+                                                       $dom[$key]['self'] = false;
+                                               } else {
+                                                       $dom[$key]['self'] = true;
+                                               }
+                                               // copy some values from parent
+                                               if ($key > 0) {
+                                                       $dom[$key]['fontname'] = $dom[($dom[$key]['parent'])]['fontname'];
+                                                       $dom[$key]['fontstyle'] = $dom[($dom[$key]['parent'])]['fontstyle'];
+                                                       $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'];
+                                                       $dom[$key]['bgcolor'] = $dom[($dom[$key]['parent'])]['bgcolor'];
+                                                       $dom[$key]['fgcolor'] = $dom[($dom[$key]['parent'])]['fgcolor'];
+                                                       $dom[$key]['align'] = $dom[($dom[$key]['parent'])]['align'];
+                                               }
+                                               // get attributes
+                                               preg_match_all('/([^=\s]*)=["\']?([^"\']*)["\']?/', $element, $attr_array, PREG_PATTERN_ORDER);
+                                               $dom[$key]['attribute'] = array(); // reset attribute array
+                                               while (list($id, $name) = each($attr_array[1])) {
+                                                       $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
+                                               }
+                                               // split style attributes
+                                               if (isset($dom[$key]['attribute']['style'])) {
+                                                       // get style attributes
+                                                       preg_match_all('/([^:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
+                                                       $dom[$key]['style'] = array(); // reset style attribute array
+                                                       while (list($id, $name) = each($style_array[1])) {
+                                                               $dom[$key]['style'][strtolower($name)] = $style_array[2][$id];
+                                                       }
+                                                       // --- get some style attributes ---
+                                                       if (isset($dom[$key]['style']['font-family'])) {
+                                                               // font family
+                                                               if (isset($dom[$key]['style']['font-family'])) {
+                                                                       $fontslist = split(",", strtolower($dom[$key]['style']['font-family']));
+                                                                       foreach($fontslist as $font) {
+                                                                               $font = trim(strtolower($font));
+                                                                               if (in_array($font, $this->fontlist)){
+                                                                                       $dom[$key]['fontname'] = $font;
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                                       // font size
+                                                       if (isset($dom[$key]['style']['font-size'])) {
+                                                               $dom[$key]['fontsize'] = intval($dom[$key]['style']['font-size']);
+                                                       }
+                                                       // font style
+                                                       $dom[$key]['fontstyle'] = "";
+                                                       if (isset($dom[$key]['style']['font-weight']) AND (strtolower($dom[$key]['style']['font-weight']{0}) == "b")) {
+                                                               $dom[$key]['fontstyle'] .= "B";
+                                                       }
+                                                       if (isset($dom[$key]['style']['font-style']) AND (strtolower($dom[$key]['style']['font-style']{0}) == "i")) {
+                                                               $dom[$key]['fontstyle'] .= "I";
+                                                       }
+                                                       // check for width attribute
+                                                       if (isset($dom[$key]['style']['width'])) {
+                                                               $dom[$key]['width'] = intval($dom[$key]['style']['width']);
+                                                       }
+                                                       // check for height attribute
+                                                       if (isset($dom[$key]['style']['height'])) {
+                                                               $dom[$key]['height'] = intval($dom[$key]['style']['height']);
+                                                       }
+                                                       // check for text alignment
+                                                       if (isset($dom[$key]['style']['text-align'])) {
+                                                               $dom[$key]['align'] = strtoupper($dom[$key]['style']['text-align']{0});
+                                                       }
+                                               }
+                                               // check for font tag
+                                               if ($dom[$key]['value'] == "font") {
+                                                       // font family
+                                                       if (isset($dom[$key]['attribute']['face'])) {
+                                                               $fontslist = split(",", strtolower($dom[$key]['attribute']['face']));
+                                                               foreach($fontslist as $font) {
+                                                                       $font = trim(strtolower($font));
+                                                                       if (in_array($font, $this->fontlist)){
+                                                                               $dom[$key]['fontname'] = $font;
+                                                                               break;
+                                                                       }
+                                                               }
+                                                       }
+                                                       // font size
+                                                       if (isset($dom[$key]['attribute']['size'])) {
+                                                               if ($key > 0) {
+                                                                       if ($dom[$key]['attribute']['size']{0} == "+") {
+                                                                               $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] + intval(substr($dom[$key]['attribute']['size'], 1));
+                                                                       } elseif ($dom[$key]['attribute']['size']{0} == "-") {
+                                                                               $dom[$key]['fontsize'] = $dom[($dom[$key]['parent'])]['fontsize'] - intval(substr($dom[$key]['attribute']['size'], 1));
+                                                                       } else {
+                                                                               $dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
+                                                                       }
+                                                               } else {
+                                                                       $dom[$key]['fontsize'] = intval($dom[$key]['attribute']['size']);
+                                                               }
+                                                       }
+                                               }
+                                               if (($dom[$key]['value'] == "ul") OR ($dom[$key]['value'] == "ol") OR ($dom[$key]['value'] == "dl")) {
+                                                       // force natural alignment for lists
+                                                       if ($this->rtl) {
+                                                               $dom[$key]['align'] = "R";
+                                                       } else {
+                                                               $dom[$key]['align'] = "L";
+                                                       }
+                                               }
+                                               if (($dom[$key]['value'] == "small") OR ($dom[$key]['value'] == "sup") OR ($dom[$key]['value'] == "sub")) {
+                                                       $dom[$key]['fontsize'] = $dom[$key]['fontsize'] * K_SMALL_RATIO;
+                                               }
+                                               if (($dom[$key]['value'] == "strong") OR ($dom[$key]['value'] == "b")) {
+                                                       $dom[$key]['fontstyle'] .= "B";
+                                               }
+                                               if (($dom[$key]['value'] == "em") OR ($dom[$key]['value'] == "i")) {
+                                                       $dom[$key]['fontstyle'] .= "I";
+                                               }
+                                               if (($dom[$key]['value']{0} == "h") AND (intval($dom[$key]['value']{1}) > 0) AND (intval($dom[$key]['value']{1}) < 7)) {
+                                                       $headsize = (4 - intval($dom[$key]['value']{1})) * 2;
+                                                       $dom[$key]['fontsize'] = $dom[0]['fontsize'] + $headsize;
+                                                       $dom[$key]['fontstyle'] .= "B";
+                                               }
+                                               if (($dom[$key]['value'] == "table")) {
+                                                       $dom[$key]['rows'] = 0; // number of rows
+                                                       $dom[$key]['trids'] = array(); // IDs of TR elements
+                                               }
+                                               if (($dom[$key]['value'] == "tr")) {
+                                                       $dom[$key]['cols'] = 0;
+                                                       // store the number of rows on table element
+                                                       $dom[($dom[$key]['parent'])]['rows']++;
+                                                       // store the TR elements IDs on table element
+                                                       array_push($dom[($dom[$key]['parent'])]['trids'], $key);
+                                               }
+                                               if (($dom[$key]['value'] == "th") OR ($dom[$key]['value'] == "td")) {
+                                                       if (isset($dom[$key]['attribute']['colspan'])) {
+                                                               $colspan = intval($dom[$key]['attribute']['colspan']);
+                                                       } else {
+                                                               $colspan = 1;
+                                                       }
+                                                       $dom[$key]['attribute']['colspan'] = $colspan;
+                                                       $dom[($dom[$key]['parent'])]['cols'] += $colspan;
+                                               }
+                                               // set foreground color attribute
+                                               if (isset($dom[$key]['attribute']['color']) AND (!empty($dom[$key]['attribute']['color']))) {
+                                                       $dom[$key]['fgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['color']);
+                                               }
+                                               // set background color attribute
+                                               if (isset($dom[$key]['attribute']['bgcolor']) AND (!empty($dom[$key]['attribute']['bgcolor']))) {
+                                                       $dom[$key]['bgcolor'] = $this->convertHTMLColorToDec($dom[$key]['attribute']['bgcolor']);
+                                               }
+                                               // check for width attribute
+                                               if (isset($dom[$key]['attribute']['width'])) {
+                                                       $dom[$key]['width'] = intval($dom[$key]['attribute']['width']);
+                                               }
+                                               // check for height attribute
+                                               if (isset($dom[$key]['attribute']['height'])) {
+                                                       $dom[$key]['height'] = intval($dom[$key]['attribute']['height']);
+                                               }
+                                               // check for text alignment
+                                               if (isset($dom[$key]['attribute']['align']) AND (!empty($dom[$key]['attribute']['align'])) AND ($dom[$key]['value'] !== 'img')) {
+                                                       $dom[$key]['align'] = strtoupper($dom[$key]['attribute']['align']{0});
+                                               }
+                                       } // end opening tag
+                               } else {
+                                       // text
+                                       $dom[$key]['tag'] = false;
+                                       $dom[$key]['value'] = stripslashes($this->unhtmlentities($element));
+                                       $dom[$key]['parent'] = end($level);
+                                       // calculate text width
+                                       //$dom[$key]['width'] = $this->GetStringWidth($dom[$key]['value'], $dom[($dom[$key]['parent'])]['fontname'], $dom[($dom[$key]['parent'])]['fontstyle'], $dom[($dom[$key]['parent'])]['fontsize']);
+                               }
+                               $key++;
+                       }
+                       return $dom;
+               }
+
+               /**
+                * Allows to preserve some HTML formatting (limited support).<br />
+                * Supported tags are: a, b, blockquote, br, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, img, li, ol, p, small, span, strong, sub, sup, table, td, th, tr, u, ul,
+                * @param string $html text to display
+                * @param boolean $ln if true add a new line after text (default = true)
+                * @param int $fill Indicates if the background must be painted (true) or transparent (false).
+                * @param boolean $reseth if true reset the last cell height (default false).
+                * @param boolean $cell if true add the default cMargin space to each Write (default false).
+                * @param string $align Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
+                */
+               function writeHTML($html, $ln=true, $fill=false, $reseth=false, $cell=false, $align='') {
+                       // store current values
+                       $prevlMargin = $this->lMargin;
+                       $prevrMargin = $this->rMargin;
+                       $prevcMargin = $this->cMargin;
+                       $prevFontFamily = $this->FontFamily;
+                       $prevFontStyle = $this->FontStyle;
+                       $prevFontSizePt = $this->FontSizePt;
+                       $curfontname = $prevFontFamily;
+                       $curfontstyle = $prevFontStyle;
+                       $curfontsize = $prevFontSizePt;
+                       $prevbgcolor = $this->bgcolor;
+                       $prevfgcolor = $this->fgcolor;
+                       $this->newline = true;
+                       $startlinepage = $this->page;
+                       if (isset($this->footerpos[$this->page])) {
+                               $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
+                               $startlinepos = $this->footerpos[$this->page];
+                       } else {
+                               $startlinepos = strlen($this->pages[$this->page]);
+                       }
+                       $lalign = $align;
+                       $plalign = $align;
+                       if ($this->rtl) {
+                               $w = $this->x - $this->lMargin;
+                       } else {
+                               $w = $this->w - $this->rMargin - $this->x;
+                       }
+                       $w -= (2 * $this->cMargin);
+                       if ($cell) {
+                               if ($this->rtl) {
+                                       $this->x -= $this->cMargin;
+                               } else {
+                                       $this->x += $this->cMargin;
+                               }
+                       }
+                       $this->listindent = $this->GetStringWidth("0000");
+                       $this->listnum = 0;
+                       if ((empty($this->lasth))OR ($reseth)) {
+                               //set row height
+                               $this->lasth = $this->FontSize * $this->cell_height_ratio;
+                       }
+                       $dom = $this->getHtmlDomArray($html);
+                       $maxel = count($dom);
+                       $key = 0;
+                       while ($key < $maxel) {
+                               if ($dom[$key]['tag'] OR ($key == 0)) {
+                                       if (isset($dom[$key]['fontname']) OR isset($dom[$key]['fontstyle']) OR isset($dom[$key]['fontsize'])) {
+                                               $fontname = isset($dom[$key]['fontname']) ? $dom[$key]['fontname'] : '';
+                                               $fontstyle = isset($dom[$key]['fontstyle']) ? $dom[$key]['fontstyle'] : '';
+                                               $fontsize = isset($dom[$key]['fontsize']) ? $dom[$key]['fontsize'] : '';
+                                               if (($fontname != $curfontname) OR ($fontstyle != $curfontstyle) OR ($fontsize != $curfontsize)) {
+                                                       $this->SetFont($fontname, $fontstyle, $fontsize);
+                                                       $this->lasth = $this->FontSize * $this->cell_height_ratio;
+                                                       $curfontname = $fontname;
+                                                       $curfontstyle = $fontstyle;
+                                                       $curfontsize = $fontsize;
+                                               }
+                                       }
+                                       if (isset($dom[$key]['bgcolor']) AND ($dom[$key]['bgcolor'] !== false)) {
+                                               $this->SetFillColorArray($dom[$key]['bgcolor']);
+                                               $wfill = true;
+                                       } else {
+                                               $wfill = $fill | false;
+                                       }
+                                       if (isset($dom[$key]['fgcolor']) AND ($dom[$key]['fgcolor'] !== false)) {
+                                               $this->SetTextColorArray($dom[$key]['fgcolor']);
+                                       }
+                                       if (isset($dom[$key]['align'])) {
+                                               $lalign = $dom[$key]['align'];
+                                       }
+                                       if (empty($lalign)) {
+                                               $lalign = $align;
+                                       }
+                               }
+                               // align lines
+                               if ($this->newline AND (strlen($dom[$key]['value']) > 0) AND ($dom[$key]['value'] != 'td') AND ($dom[$key]['value'] != 'th')) {
+                                       // we are at the beginning of a new line
+                                       if (isset($startlinex)) {
+                                               if (isset($plalign) AND ((($plalign == "C") OR (($plalign == "R") AND (!$this->rtl)) OR (($plalign == "L") AND ($this->rtl))))) {
+                                                       // the last line must be shifted to be aligned as requested
+                                                       $linew = abs($this->endlinex - $startlinex);
+                                                       $pstart = substr($this->pages[$startlinepage], 0, $startlinepos);
+                                                       if (isset($opentagpos) AND isset($this->footerpos[$startlinepage])) {
+                                                               $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
+                                                               $midpos = min($opentagpos, $this->footerpos[$startlinepage]);
+                                                       } elseif (isset($opentagpos)) {
+                                                               $midpos = $opentagpos;
+                                                       } elseif (isset($this->footerpos[$startlinepage])) {
+                                                               $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
+                                                               $midpos = $this->footerpos[$startlinepage];
+                                                       } else {
+                                                               $midpos = 0;
+                                                       }
+                                                       if ($midpos > 0) {
+                                                               $pmid = substr($this->pages[$startlinepage], $startlinepos, ($midpos - $startlinepos));
+                                                               $pend = substr($this->pages[$startlinepage], $midpos);
+                                                       } else {
+                                                               $pmid = substr($this->pages[$startlinepage], $startlinepos);
+                                                               $pend = "";
+                                                       }
+                                                       // calculate shifting amount
+                                                       $mdiff = abs($w - $linew);
+                                                       if ($plalign == "C") {
+                                                               if ($this->rtl) {
+                                                                       $t_x = -($mdiff / 2);
+                                                               } else {
+                                                                       $t_x = ($mdiff / 2);
+                                                               }
+                                                       }       elseif (($plalign == "R") AND (!$this->rtl)) {
+                                                               // right alignment on LTR document
+                                                               $t_x = $mdiff;
+                                                       }       elseif (($plalign == "L") AND ($this->rtl)) {
+                                                               // left alignment on RTL document
+                                                               $t_x = -$mdiff;
+                                                       }
+                                                       // shift the line
+                                                       $trx = sprintf('1 0 0 1 %.3f 0 cm', ($t_x * $this->k));
+                                                       $this->pages[$startlinepage] = $pstart."\nq\n".$trx."\n".$pmid."\nQ\n".$pend;
+                                                       $endlinepos = strlen($pstart."\nq\n".$trx."\n".$pmid."\nQ\n");
+                                               }
+                                       }
+                                       $this->checkPageBreak($this->lasth);
+                                       $this->SetFont($fontname, $fontstyle, $fontsize);
+                                       if ($wfill) {
+                                               $this->SetFillColorArray($this->bgcolor);
+                                       }
+                                       $startlinex = $this->x;
+                                       $startlinepage = $this->page;
+                                       if (isset($endlinepos)) {
+                                               $startlinepos = $endlinepos;
+                                               unset($endlinepos);
+                                       } else {
+                                               if (isset($this->footerpos[$this->page])) {
+                                                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
+                                                       $startlinepos = $this->footerpos[$this->page];
+                                               } else {
+                                                       $startlinepos = strlen($this->pages[$this->page]);
+                                               }
+                                       }
+                                       $plalign = $lalign;
+                                       $this->newline = false;
+                               }
+                               if (isset($opentagpos)) {
+                                       unset($opentagpos);
+                               }
+                               if ($dom[$key]['tag']) {
+                                       if ($dom[$key]['opening']) {
+                                               // table content is handled in a special way
+                                               if (($dom[$key]['value'] == "td") OR ($dom[$key]['value'] == "th")) {
+                                                       $trid = $dom[$key]['parent'];
+                                                       $table_el = $dom[$trid]['parent'];
+                                                       if (!isset($dom[$table_el]['cols'])) {
+                                                               $dom[$table_el]['cols'] = $trid['cols'];
+                                                       }
+                                                       // calculate cell width
+                                                       if (isset($dom[($dom[$key]['parent'])]['width'])) {
+                                                               $table_width = $this->pixelsToUnits($dom[($dom[$key]['parent'])]['width']);
+                                                       } else {
+                                                               $table_width = $w;
+                                                       }
+                                                       if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellpadding'])) {
+                                                               $currentcmargin = $this->pixelsToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellpadding']);
+                                                               $this->cMargin = $currentcmargin;
+                                                       } else {
+                                                               $currentcmargin = 0;
+                                                       }
+                                                       if (isset($dom[($dom[$trid]['parent'])]['attribute']['cellspacing'])) {
+                                                               $cellspacing = $this->pixelsToUnits($dom[($dom[$trid]['parent'])]['attribute']['cellspacing']);
+                                                       } else {
+                                                               $cellspacing = 0;
+                                                       }
+                                                       if ($this->rtl) {
+                                                               $cellspacingx = -$cellspacing;
+                                                       } else {
+                                                               $cellspacingx = $cellspacing;
+                                                       }
+                                                       $colspan = $dom[$key]['attribute']['colspan'];
+                                                       if (isset($dom[$key]['width'])) {
+                                                               $cellw = $this->pixelsToUnits($dom[$key]['width']);
+                                                       } else {
+                                                               $cellw = ($colspan * ($table_width / $dom[$table_el]['cols']));
+                                                       }
+                                                       $cellw -= $cellspacing;
+                                                       $cell_content = $dom[$key]['content'];
+                                                       $tagtype = $dom[$key]['value'];
+                                                       $parentid = $key;
+                                                       while (($key < $maxel) AND (!(($dom[$key]['tag']) AND (!$dom[$key]['opening']) AND ($dom[$key]['value'] == $tagtype) AND ($dom[$key]['parent'] == $parentid)))) {
+                                                               // move $key index forward
+                                                               $key++;
+                                                       }
+                                                       if (!isset($dom[$trid]['startpage'])) {
+                                                               $dom[$trid]['startpage'] = $this->page;
+                                                       } else {
+                                                               $this->setPage($dom[$trid]['startpage']);
+                                                       }
+                                                       if (!isset($dom[$trid]['starty'])) {
+                                                               $dom[$trid]['starty'] = $this->y;
+                                                       } else {
+                                                               $this->y = $dom[$trid]['starty'];
+                                                       }
+                                                       if (!isset($dom[$trid]['startx'])) {
+                                                               $dom[$trid]['startx'] = $this->x;
+                                                       }
+                                                       $this->x += ($cellspacingx / 2);
+                                                       if (isset($dom[$parentid]['attribute']['rowspan'])) {
+                                                               $rowspan = intval($dom[$parentid]['attribute']['rowspan']);
+                                                       }       else {
+                                                               $rowspan = 1;
+                                                       }
+                                                       // skip row-spanned cells started on the previous rows
+                                                       if (isset($dom[$table_el]['rowspans'])) {
+                                                               foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+                                                                       if  (($trwsp['startx'] == $this->x) AND (($trwsp['starty'] < $this->y) OR ($trwsp['startpage'] < $this->page)) AND ($trwsp['rowspan'] > 0)) {
+                                                                               $this->x = $trwsp['endx'] + $cellspacingx;
+                                                                       }
+                                                               }
+                                                       }
+                                                       // add rowspan information to table element
+                                                       if ($rowspan > 1) {
+                                                               if (isset($this->footerpos[$this->page])) {
+                                                                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
+                                                                       $trintmrkpos = $this->footerpos[$this->page];
+                                                               } else {
+                                                                       $trintmrkpos = strlen($this->pages[$this->page]);
+                                                               }
+                                                               $trsid = array_push($dom[$table_el]['rowspans'], array('rowspan' => $rowspan, 'colspan' => $colspan, 'startpage' => $this->page, 'startx' => $this->x, 'starty' => $this->y, 'intmrkpos' => $trintmrkpos));
+                                                       }
+                                                       $cellid = array_push($dom[$trid]['cellpos'], array('startx' => $this->x));
+                                                       if ($rowspan > 1) {
+                                                               $dom[$trid]['cellpos'][($cellid - 1)]['rowspanid'] = ($trsid - 1);
+                                                       }
+                                                       // push background colors
+                                                       if (isset($dom[$parentid]['bgcolor']) AND ($dom[$parentid]['bgcolor'] !== false)) {
+                                                               $dom[$trid]['cellpos'][($cellid - 1)]['bgcolor'] = $dom[$parentid]['bgcolor'];
+                                                       }
+
+                                                       // write the cell content
+                                                       $this->MultiCell($cellw, 0, $cell_content, false, $lalign, false, 2, '', '', true, 0, true);
+
+                                                       $this->cMargin = $currentcmargin;
+                                                       $dom[$trid]['cellpos'][($cellid - 1)]['endx'] = $this->x;
+                                                       // update the end of row position
+                                                       if (isset($dom[$trid]['endy'])) {
+                                                               if ($this->page == $dom[$trid]['endpage']) {
+                                                                       $dom[$trid]['endy'] = max($this->y, $dom[$trid]['endy']);
+                                                               } elseif ($this->page > $dom[$trid]['endpage']) {
+                                                                       $dom[$trid]['endy'] = $this->y;
+                                                               }
+                                                       } else {
+                                                               $dom[$trid]['endy'] = $this->y;
+                                                       }
+                                                       if (isset($dom[$trid]['endpage'])) {
+                                                               $dom[$trid]['endpage'] = max($this->page, $dom[$trid]['endpage']);
+                                                       } else {
+                                                               $dom[$trid]['endpage'] = $this->page;
+                                                       }
+                                                       // account for row-spanned cells
+                                                       if ($rowspan > 1) {
+                                                               $dom[$table_el]['rowspans'][($trsid - 1)]['endx'] = $this->x;
+                                                       }
+                                                       if (isset($dom[$table_el]['rowspans'])) {
+                                                               foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+                                                                       if ($trwsp['rowspan'] > 0) {
+                                                                               $dom[$table_el]['rowspans'][$k]['endy'] = $dom[$trid]['endy'];
+                                                                               $dom[$table_el]['rowspans'][$k]['endpage'] = $dom[$trid]['endpage'];
+                                                                       }
+                                                               }
+                                                       }
+                                                       $this->x += ($cellspacingx / 2);
+                                               } else {
+                                                       // opening tag (or self-closing tag)
+                                                       if (!isset($opentagpos)) {
+                                                               if (isset($this->footerpos[$this->page])) {
+                                                                       $this->footerpos[$this->page] = strlen($this->pages[$this->page]) - $this->footerlen[$this->page];
+                                                                       $opentagpos = $this->footerpos[$this->page];
+                                                               } else {
+                                                                       $opentagpos = strlen($this->pages[$this->page]);
+                                                               }
+                                                       }
+                                                       $this->openHTMLTagHandler($dom, $key, $cell);
+                                               }
+                                       } else {
+                                               // closing tag
+                                               $this->closeHTMLTagHandler($dom, $key, $cell);
+                                       }
+                               } elseif (strlen($dom[$key]['value']) > 0) {
+                                       // text
+                                       if ($this->HREF) {
+                                               // HTML <a> Link
+                                               $strrest = $this->addHtmlLink($this->HREF, $dom[$key]['value'], $wfill, true);
+                                       } else {
+                                               $ctmpmargin = $this->cMargin;
+                                               $this->cMargin = 0;
+                                               // write only the first line and get the rest
+                                               $strrest = $this->Write($this->lasth, $dom[$key]['value'], '', $wfill, "", false, 0, true);
+                                               $this->cMargin = $ctmpmargin;
+                                       }
+                                       if (strlen($strrest) > 0) {
+                                               // store the remaining string on the previous $key position
+                                               $this->newline = true;
+                                               if ($cell) {
+                                                       if ($this->rtl) {
+                                                               $this->x -= $this->cMargin;
+                                                       } else {
+                                                               $this->x += $this->cMargin;
+                                                       }
+                                               }
+                                               $dom[$key]['value'] = ltrim($strrest);
+                                               $key--;
+                                       }
+                               }
+                               $key++;
+                       } // end for each $key
+                       // align the last line
+                       if (isset($startlinex)) {
+                               if (isset($plalign) AND ((($plalign == "C") OR (($plalign == "R") AND (!$this->rtl)) OR (($plalign == "L") AND ($this->rtl))))) {
+                                       // the last line must be shifted to be aligned as requested
+                                       $linew = abs($this->endlinex - $startlinex);
+                                       $pstart = substr($this->pages[$startlinepage], 0, $startlinepos);
+                                       if (isset($opentagpos) AND isset($this->footerpos[$startlinepage])) {
+                                               $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
+                                               $midpos = min($opentagpos, $this->footerpos[$startlinepage]);
+                                       } elseif (isset($opentagpos)) {
+                                               $midpos = $opentagpos;
+                                       } elseif (isset($this->footerpos[$startlinepage])) {
+                                               $this->footerpos[$startlinepage] = strlen($this->pages[$startlinepage]) - $this->footerlen[$startlinepage];
+                                               $midpos = $this->footerpos[$startlinepage];
+                                       } else {
+                                               $midpos = 0;
+                                       }
+                                       if ($midpos > 0) {
+                                               $pmid = substr($this->pages[$startlinepage], $startlinepos, ($midpos - $startlinepos));
+                                               $pend = substr($this->pages[$startlinepage], $midpos);
+                                       } else {
+                                               $pmid = substr($this->pages[$startlinepage], $startlinepos);
+                                               $pend = "";
+                                       }
+                                       // calculate shifting amount
+                                       $mdiff = abs($w - $linew);
+                                       if ($plalign == "C") {
+                                               if ($this->rtl) {
+                                                       $t_x = -($mdiff / 2);
+                                               } else {
+                                                       $t_x = ($mdiff / 2);
+                                               }
+                                       }       elseif (($plalign == "R") AND (!$this->rtl)) {
+                                               // right alignment on LTR document
+                                               $t_x = $mdiff;
+                                       }       elseif (($plalign == "L") AND ($this->rtl)) {
+                                               // left alignment on RTL document
+                                               $t_x = -$mdiff;
+                                       }
+                                       // shift the line
+                                       $trx = sprintf('1 0 0 1 %.3f 0 cm', ($t_x * $this->k));
+                                       $this->pages[$startlinepage] = $pstart."\nq\n".$trx."\n".$pmid."\nQ\n".$pend;
+                               }
+                       }
+                       if ($ln AND (!($cell AND ($dom[$key-1]['value'] == "table")))) {
+                               $this->Ln($this->lasth);
+                       }
+                       // restore previous values
+                       $this->SetFont($prevFontFamily, $prevFontStyle, $prevFontSizePt);
+                       $this->SetFillColorArray($prevbgcolor);
+                       $this->SetTextColorArray($prevfgcolor);
+                       $this->lMargin = $prevlMargin;
+                       $this->rMargin = $prevrMargin;
+                       $this->cMargin = $prevcMargin;
+                       unset($dom);
+               }
+
+               /**
+                * Process opening tags.
+                * @param array $dom html dom array
+                * @param int $key current element id
+                * @param boolean $cell if true add the default cMargin space to each new line (default false).
+                * @access protected
+                */
+               function openHTMLTagHandler(&$dom, $key, $cell=false) {
+                       $tag = $dom[$key];
+                       $parent = $dom[($dom[$key]['parent'])];
+                       // check for text direction attribute
+                       if (isset($tag['attribute']['dir'])) {
+                               $this->tmprtl = $tag['attribute']['dir'] == 'rtl' ? 'R' : 'L';
+                       } else {
+                               $this->tmprtl = false;
+                       }
+                       //Opening tag
+                       switch($tag['value']) {
+                               case 'table': {
+                                       $dom[$key]['rowspans'] = array();
+                                       if (isset($tag['attribute']['cellpadding'])) {
+                                               $this->oldcMargin = $this->cMargin;
+                                               $this->cMargin = $this->pixelsToUnits($tag['attribute']['cellpadding']);
+                                       }
+                                       break;
+                               }
+                               case 'tr': {
+                                       // array of columns positions
+                                       $dom[$key]['cellpos'] = array();
+                                       break;
+                               }
+                               case 'td':
+                               case 'th': {
+                                       break;
+                               }
+                               case 'hr': {
+                                       $this->Ln('', $cell);
+                                       if ((isset($tag['attribute']['width'])) AND ($tag['attribute']['width'] != '')) {
+                                               $hrWidth = $this->pixelsToUnits($tag['attribute']['width']);
+                                       } else {
+                                               $hrWidth = $this->w - $this->lMargin - $this->rMargin;
+                                       }
+                                       $x = $this->GetX();
+                                       $y = $this->GetY();
+                                       $prevlinewidth = $this->GetLineWidth();
+                                       $this->Line($x, $y, $x + $hrWidth, $y);
+                                       $this->SetLineWidth($prevlinewidth);
+                                       $this->Ln('', $cell);
+                                       break;
+                               }
+                               case 'u': {
+                                       $this->setStyle('u', true);
+                                       break;
+                               }
+                               case 'del': {
+                                       $this->setStyle('d', true);
+                                       break;
+                               }
+                               case 'a': {
+                                       $this->HREF = $tag['attribute']['href'];
+                                       break;
+                               }
+                               case 'img': {
+                                       if (isset($tag['attribute']['src'])) {
+                                               // replace relative path with real server path
+                                               if ($tag['attribute']['src'][0] == '/') {
+                                                       $tag['attribute']['src'] = $_SERVER['DOCUMENT_ROOT'].$tag['attribute']['src'];
+                                               }
+                                               $tag['attribute']['src'] = str_replace(K_PATH_URL, K_PATH_MAIN, $tag['attribute']['src']);
+                                               if (!isset($tag['attribute']['width'])) {
+                                                       $tag['attribute']['width'] = 0;
+                                               }
+                                               if (!isset($tag['attribute']['height'])) {
+                                                       $tag['attribute']['height'] = 0;
+                                               }
+                                               if (!isset($tag['attribute']['align'])) {
+                                                       $align = 'N';
+                                               } else {
+                                                       switch($tag['attribute']['align']) {
+                                                               case 'top':{
+                                                                       $align = 'T';
+                                                                       break;
+                                                               }
+                                                               case 'middle':{
+                                                                       $align = 'M';
+                                                                       break;
+                                                               }
+                                                               case 'bottom':{
+                                                                       $align = 'B';
+                                                                       break;
+                                                               }
+                                                               default:{
+                                                                       $align = 'N';
+                                                                       break;
+                                                               }
+                                                       }
+                                               }
+                                               $fileinfo = pathinfo($tag['attribute']['src']);
+                                               if (isset($fileinfo['extension']) AND (!empty($fileinfo['extension']))) {
+                                                       $type = strtolower($fileinfo['extension']);
+                                               }
+                                               if (($type == "eps") OR ($type == "ai")) {
+                                                       $this->ImageEps($tag['attribute']['src'], $this->GetX(), $this->GetY(), $this->pixelsToUnits($tag['attribute']['width']), $this->pixelsToUnits($tag['attribute']['height']), '', true, $align);
+                                               } else {
+                                                       $this->Image($tag['attribute']['src'], $this->GetX(), $this->GetY(), $this->pixelsToUnits($tag['attribute']['width']), $this->pixelsToUnits($tag['attribute']['height']), '', '', $align);
+                                               }
+                                       }
+                                       break;
+                               }
+                               case 'dl': {
+                                       $this->listnum++;
+                                       break;
+                               }
+                               case 'dt': {
+                                       $this->Ln('', $cell);
+                                       break;
+                               }
+                               case 'dd': {
+                                       if ($this->rtl) {
+                                               $this->rMargin += $this->listindent;
+                                       } else {
+                                               $this->lMargin += $this->listindent;
+                                       }
+                                       $this->Ln('', $cell);
+                                       break;
+                               }
+                               case 'ul':
+                               case 'ol': {
+                                       $this->listnum++;
+                                       if ($tag['value'] == "ol") {
+                                               $this->listordered[$this->listnum] = true;
+                                       } else {
+                                               $this->listordered[$this->listnum] = false;
+                                       }
+                                       $this->listcount[$this->listnum] = 0;
+                                       if ($this->rtl) {
+                                               $this->rMargin += $this->listindent;
+                                       } else {
+                                               $this->lMargin += $this->listindent;
+                                       }
+                                       break;
+                               }
+                               case 'li': {
+                                       $this->Ln('', $cell);
+                                       if ($tag['value'] == 'li') {
+                                               if ($this->listordered[$this->listnum]) {
+                                                       if (isset($tag['attribute']['value'])) {
+                                                               $this->listcount[$this->listnum] = intval($tag['attribute']['value']);
+                                                       }
+                                                       $this->listcount[$this->listnum]++;
+                                                       if ($this->rtl) {
+                                                               $this->lispacer = ".".($this->listcount[$this->listnum]);
+                                                       } else {
+                                                               $this->lispacer = ($this->listcount[$this->listnum]).".";
+                                                       }
+                                               } else {
+                                                       //unordered list symbol
+                                                       $this->lispacer = "-";
+                                               }
+                                       } else {
+                                               $this->lispacer = "";
+                                       }
+                                       $tmpx = $this->x;
+                                       $lspace = $this->GetStringWidth($this->lispacer."  ");
+                                       if ($this->rtl) {
+                                               $this->x += $lspace;
+                                       } else {
+                                               $this->x -= $lspace;
+                                       }
+                                       $this->Write($this->lasth, $this->lispacer, '', false, '', false, 0, false);
+                                       $this->x = $tmpx;
+                                       break;
+                               }
+                               case 'blockquote':
+                               case 'br': {
+                                       $this->Ln('', $cell);
+                                       break;
+                               }
+                               case 'p': {
+                                       $this->Ln('', $cell);
+                                       $this->Ln('', $cell);
+                                       break;
+                               }
+                               case 'sup': {
+                                       $this->SetXY($this->GetX(), $this->GetY() - (($parent['fontsize'] - $this->FontSizePt) / $this->k));
+                                       break;
+                               }
+                               case 'sub': {
+                                       $this->SetXY($this->GetX(), $this->GetY() + (($parent['fontsize'] - (0.5 * $this->FontSizePt)) / $this->k));
+                                       break;
+                               }
+                               case 'small': {
+                                       $this->SetXY($this->GetX(), $this->GetY() + (($parent['fontsize'] - $this->FontSizePt)/$this->k));
+                                       break;
+                               }
+                               case 'h1':
+                               case 'h2':
+                               case 'h3':
+                               case 'h4':
+                               case 'h5':
+                               case 'h6': {
+                                       $this->Ln(($tag['fontsize'] * 1.5) / $this->k, $cell);
+                                       break;
+                               }
+                               default: {
+                                       break;
+                               }
+                       }
+               }
+
+               /**
+                * Process closing tags.
+                * @param array $dom html dom array
+                * @param int $key current element id
+                * @param boolean $cell if true add the default cMargin space to each new line (default false).
+                * @access protected
+                */
+               function closeHTMLTagHandler(&$dom, $key, $cell=false) {
+                       $tag = $dom[$key];
+                       $parent = $dom[($dom[$key]['parent'])];
+                       //Closing tag
+                       switch($tag['value']) {
+                               case 'td':
+                               case 'th': {
+                                       break;
+                               }
+                               case 'tr': {
+                                       $table_el = $dom[($dom[$key]['parent'])]['parent'];
+                                       $this->setPage($parent['endpage']);
+                                       $this->y = $parent['endy'];
+                                       if (isset($dom[$table_el]['attribute']['cellspacing'])) {
+                                               $cellspacing = $this->pixelsToUnits($dom[$table_el]['attribute']['cellspacing']);
+                                               $this->y += $cellspacing;
+                                       }
+                                       $this->Ln(0, $cell);
+                                       $this->x = $parent['startx'];
+                                       // update row-spanned cells
+                                       if (isset($dom[$table_el]['rowspans'])) {
+                                               foreach ($dom[$table_el]['rowspans'] as $k => $trwsp) {
+                                                               $dom[$table_el]['rowspans'][$k]['rowspan'] -= 1;
+                                               }
+                                       }
+                                       break;
+                               }
+                               case 'table': {
+                                       // draw borders
+                                       $table_el = $parent;
+                                       if ((isset($table_el['attribute']['border']) AND ($table_el['attribute']['border'] > 0))
+                                               OR (isset($table_el['style']['border']) AND ($table_el['style']['border'] > 0))) {
+                                                       $border = 1;
+                                       } else {
+                                               $border = 0;
+                                       }
+                                       // for each row
+                                       foreach ($table_el['trids'] as $j => $trkey) {
+                                               $parent = $dom[$trkey];
+                                               $this->setPage($parent['startpage']);
+                                               $this->y = $parent['starty'];
+                                               $restspace = $this->getPageHeight() - $this->y - $this->getBreakMargin();
+                                               $startpage = $parent['startpage'];
+                                               $endpage = $parent['endpage'];
+                                               // for each cell on the row
+                                               foreach ($parent['cellpos'] as $k => $cellpos) {
+                                                       if (isset($cellpos['rowspanid'])) {
+                                                               $cellpos['startx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['startx'];
+                                                               $cellpos['endx'] = $table_el['rowspans'][($cellpos['rowspanid'])]['endx'];
+                                                               $endy = $table_el['rowspans'][($cellpos['rowspanid'])]['endy'];
+                                                               $startpage = $table_el['rowspans'][($cellpos['rowspanid'])]['startpage'];
+                                                               $endpage = $table_el['rowspans'][($cellpos['rowspanid'])]['endpage'];
+                                                       } else {
+                                                               $endy = $parent['endy'];
+                                                       }
+                                                       if ($endpage > $startpage) {
+                                                               // design borders around HTML cells.
+                                                               for ($page=$startpage; $page <= $endpage; $page++) {
+                                                                       $this->setPage($page);
+                                                                       if ($page == $startpage) {
+                                                                               $this->y = $this->getPageHeight() - $restspace - $this->getBreakMargin();
+                                                                               $ch = $restspace;
+                                                                       } elseif ($page == $endpage) {
+                                                                               $this->y = $this->tMargin; // put cursor at the beginning of text
+                                                                               $ch = $endy - $this->tMargin;
+                                                                       } else {
+                                                                               $this->y = $this->tMargin; // put cursor at the beginning of text
+                                                                               $ch = $this->getPageHeight() - $this->tMargin - $this->getBreakMargin();
+                                                                       }
+
+                                                                       if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) {
+                                                                               $this->SetFillColorArray($cellpos['bgcolor']);
+                                                                               $fill = true;
+                                                                       } else {
+                                                                               $fill = false;
+                                                                       }
+                                                                       $cw = abs($cellpos['endx'] - $cellpos['startx']);
+                                                                       $this->x = $cellpos['startx'];
+                                                                       // design a cell around the text
+                                                                       $ccode = $this->FillColor."\n".$this->getCellCode($cw, $ch, "", $border, 1, '', $fill);
+                                                                       $pstart = substr($this->pages[$this->page], 0, $this->intmrk[$this->page]);
+                                                                       $pend = substr($this->pages[$this->page], $this->intmrk[$this->page]);
+                                                                       $this->pages[$this->page] = $pstart.$ccode."\n".$pend;
+                                                                       $this->intmrk[$this->page] += strlen($ccode."\n");
+                                                               }
+                                                       } else {
+                                                               $ch = $endy - $parent['starty'];
+                                                               if (isset($cellpos['bgcolor']) AND ($cellpos['bgcolor']) !== false) {
+                                                                       $this->SetFillColorArray($cellpos['bgcolor']);
+                                                                       $fill = true;
+                                                               } else {
+                                                                       $fill = false;
+                                                               }
+                                                               $cw = abs($cellpos['endx'] - $cellpos['startx']);
+                                                               $this->x = $cellpos['startx'];
+                                                               $this->y = $parent['starty'];
+                                                               // design a cell around the text
+                                                               $ccode = $this->FillColor."\n".$this->getCellCode($cw, $ch, "", $border, 1, '', $fill);
+                                                               $pstart = substr($this->pages[$this->page], 0, $this->intmrk[$this->page]);
+                                                               $pend = substr($this->pages[$this->page], $this->intmrk[$this->page]);
+                                                               $this->pages[$this->page] = $pstart.$ccode."\n".$pend;
+                                                               $this->intmrk[$this->page] += strlen($ccode."\n");
+                                                       }
+                                               }
+                                               if (isset($table_el['attribute']['cellspacing'])) {
+                                                       $cellspacing = $this->pixelsToUnits($table_el['attribute']['cellspacing']);
+                                                       $this->y += $cellspacing;
+                                               }
+                                               $this->Ln(0, $cell);
+                                               $this->x = $parent['startx'];
+                                       }
+                                       if (isset($parent['cellpadding'])) {
+                                               $this->cMargin = $this->oldcMargin;
+                                       }
+                                       //set row height
+                                       $this->lasth = $this->FontSize * $this->cell_height_ratio;
+                                       break;
+                               }
+                               case 'u': {
+                                       $this->setStyle('u', false);
+                                       break;
+                               }
+                               case 'del': {
+                                       $this->setStyle('d', false);
+                                       break;
+                               }
+                               case 'a': {
+                                       $this->HREF = '';
+                                       break;
+                               }
+                               case 'sup': {
+                                       $this->SetXY($this->GetX(), $this->GetY() + (($this->FontSizePt - $parent['fontsize'])/$this->k));
+                                       break;
+                               }
+                               case 'sub': {
+                                       $this->SetXY($this->GetX(), $this->GetY() - (($this->FontSizePt - (0.5 * $parent['fontsize']))/$this->k));
+                                       break;
+                               }
+                               case 'small': {
+                                       $this->SetXY($this->GetX(), $this->GetY() - (($this->FontSizePt - $parent['fontsize'])/$this->k));
+                                       break;
+                               }
+                               case 'p': {
+                                       $this->Ln('', $cell);
+                                       $this->Ln('', $cell);
+                                       break;
+                               }
+                               case 'dl': {
+                                       $this->listnum--;
+                                       if ($this->listnum <= 0) {
+                                               $this->listnum = 0;
+                                               $this->Ln('', $cell);
+                                               $this->Ln('', $cell);
+                                       }
+                                       break;
+                               }
+                               case 'dt': {
+                                       $this->lispacer = "";
+                                       break;
+                               }
+                               case 'dd': {
+                                       $this->lispacer = "";
+                                       if ($this->rtl) {
+                                               $this->rMargin -= $this->listindent;
+                                       } else {
+                                               $this->lMargin -= $this->listindent;
+                                       }
+                                       break;
+                               }
+                               case 'ul':
+                               case 'ol': {
+                                       $this->listnum--;
+                                       $this->lispacer = "";
+                                       if ($this->rtl) {
+                                               $this->rMargin -= $this->listindent;
+                                       } else {
+                                               $this->lMargin -= $this->listindent;
+                                       }
+                                       if ($this->listnum <= 0) {
+                                               $this->listnum = 0;
+                                               $this->Ln('', $cell);
+                                               $this->Ln('', $cell);
+                                       }
+                                       $this->lasth = $this->FontSize * $this->cell_height_ratio;
+                                       break;
+                               }
+                               case 'li': {
+                                       $this->lispacer = "";
+                                       break;
+                               }
+                               case 'h1':
+                               case 'h2':
+                               case 'h3':
+                               case 'h4':
+                               case 'h5':
+                               case 'h6': {
+                                       $this->Ln(($parent['fontsize'] * 1.5) / $this->k, $cell);
+                                       break;
+                               }
+                               default : {
+                                       break;
+                               }
+                       }
+                       $this->tmprtl = false;
+               }
+       } // END OF TCPDF CLASS
+}
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
\ No newline at end of file
diff --git a/reporting/includes/unicode_data2.php b/reporting/includes/unicode_data2.php
new file mode 100644 (file)
index 0000000..3caa17a
--- /dev/null
@@ -0,0 +1,2769 @@
+<?php
+//============================================================+
+// File name   : unicode_data.php
+// Begin       : 2008-01-01
+// Last Update : 2008-07-21
+// License     : GNU LGPL (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 <http://www.gnu.org/licenses/>.
+//
+//     See LICENSE.TXT file for more information.
+//  ----------------------------------------------------------------------------
+//
+// Description : Unicode Include file for 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
+//============================================================+
+// THANKS TO
+// Efthimios Mavrogeorgiadis
+// Saleh AlMatrafe
+
+/**
+ * Unicode Include file for TCPDF.
+ * @author Nicola Asuni
+ * @copyright 2004-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
+ * @package com.tecnick.tcpdf
+ * @link http://www.tcpdf.org
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ * @since 2.1.000 (2008-01-08)
+*/
+
+/**
+* Left-to-Right Mark
+*/
+define("K_LRM", 8206);
+/**
+* Right-to-Left Mark
+*/
+define("K_RLM", 8207);
+/**
+* Left-to-Right Embedding
+*/
+define("K_LRE", 8234);
+/**
+* Right-to-Left Embedding
+*/
+define("K_RLE", 8235);
+/**
+* Pop Directional Format
+*/
+define("K_PDF", 8236);
+/**
+* Left-to-Right Override
+*/
+define("K_LRO", 8237);
+/**
+* Right-to-Left Override
+*/
+define("K_RLO", 8238);
+
+/*
+ * Pattern to test RTL (Righ-To-Left) strings using regular expressions.
+ */
+if (!defined("K_RE_PATTERN_RTL"))
+define("K_RE_PATTERN_RTL", "/(
+         \xD6\xBE                                                                                                                                                                                      # R
+       | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4]                                                                  # R
+       | \xDF[\x80-\xAA\xB4\xB5\xBA]                                                                                                           # R
+       | \xE2\x80\x8F                                                                                                                                                                  # R
+       | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE]                     # R
+       | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F]                                                                           # R
+       | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF]  # R
+       | \xF0\x90\xA4[\x80-\x99]                                                                                                                               # R
+       | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3]                                 # R
+       | \xF0\x90\xA9[\x80-\x87\x90-\x98]                                                                                      # R
+       | \xE2\x80[\xAB\xAE]                                                                                                                                            # RLE & RLO
+       )/x");
+/*
+ * Pattern to test Arabic strings using regular expressions.
+ * source: http://www.w3.org/International/questions/qa-forms-utf-8
+ */
+if (!defined("K_RE_PATTERN_ARABIC"))
+define("K_RE_PATTERN_ARABIC", "/(
+                         \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA]  # AL
+                       | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF]                                                     # AL
+                       | \xDA[\x80-\xBF]                                                                                                                               # AL
+                       | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF]  # AL
+                       | \xDC[\x80-\x8D\x90\x92-\xAF]                                                                  # AL
+                       | \xDD[\x8D-\xAD]                                                                                                                               # AL
+                       | \xDE[\x80-\xA5\xB1]                                                                                                           # AL
+                       | \xEF\xAD[\x90-\xBF]                                                                                                           # AL
+                       | \xEF\xAE[\x80-\xB1]                                                                                                           # AL
+                       | \xEF\xAF[\x93-\xBF]                                                                                                           # AL
+                       | \xEF[\xB0-\xB3][\x80-\xBF]                                                                            # AL
+                       | \xEF\xB4[\x80-\xBD]                                                                                                           # AL
+                       | \xEF\xB5[\x90-\xBF]                                                                                                           # AL
+                       | \xEF\xB6[\x80-\x8F\x92-\xBF]                                                                  # AL
+                       | \xEF\xB7[\x80-\x87\xB0-\xBC]                                                                  # AL
+                       | \xEF\xB9[\xB0-\xB4\xB6-\xBF]                                                                  # AL
+                       | \xEF\xBA[\x80-\xBF]                                                                                                           # AL
+                       | \xEF\xBB[\x80-\xBC]                                                                                                           # AL
+                       | \xD9[\xA0-\xA9\xAB\xAC]                                                                                               # AN
+                       )/x");
+/**
+ * Array of unicode types
+ */
+$unicode = array(
+       0                       =>      'BN',
+       1                       =>      'BN',
+       2                       =>      'BN',
+       3                       =>      'BN',
+       4                       =>      'BN',
+       5                       =>      'BN',
+       6                       =>      'BN',
+       7                       =>      'BN',
+       8                       =>      'BN',
+       9                       =>      'S',
+       10              =>      'B',
+       11              =>      'S',
+       12              =>      'WS',
+       13              =>      'B',
+       14              =>      'BN',
+       15              =>      'BN',
+       16              =>      'BN',
+       17              =>      'BN',
+       18              =>      'BN',
+       19              =>      'BN',
+       20              =>      'BN',
+       21              =>      'BN',
+       22              =>      'BN',
+       23              =>      'BN',
+       24              =>      'BN',
+       25              =>      'BN',
+       26              =>      'BN',
+       27              =>      'BN',
+       28              =>      'B',
+       29              =>      'B',
+       30              =>      'B',
+       31              =>      'S',
+       32              =>      'WS',
+       33              =>      'ON',
+       34              =>      'ON',
+       35              =>      'ET',
+       36              =>      'ET',
+       37              =>      'ET',
+       38              =>      'ON',
+       39              =>      'ON',
+       40              =>      'ON',
+       41              =>      'ON',
+       42              =>      'ON',
+       43              =>      'ES',
+       44              =>      'CS',
+       45              =>      'ES',
+       46              =>      'CS',
+       47              =>      'CS',
+       48              =>      'EN',
+       49              =>      'EN',
+       50              =>      'EN',
+       51              =>      'EN',
+       52              =>      'EN',
+       53              =>      'EN',
+       54              =>      'EN',
+       55              =>      'EN',
+       56              =>      'EN',
+       57              =>      'EN',
+       58              =>      'CS',
+       59              =>      'ON',
+       60              =>      'ON',
+       61              =>      'ON',
+       62              =>      'ON',
+       63              =>      'ON',
+       64              =>      'ON',
+       65              =>      'L',
+       66              =>      'L',
+       67              =>      'L',
+       68              =>      'L',
+       69              =>      'L',
+       70              =>      'L',
+       71              =>      'L',
+       72              =>      'L',
+       73              =>      'L',
+       74              =>      'L',
+       75              =>      'L',
+       76              =>      'L',
+       77              =>      'L',
+       78              =>      'L',
+       79              =>      'L',
+       80              =>      'L',
+       81              =>      'L',
+       82              =>      'L',
+       83              =>      'L',
+       84              =>      'L',
+       85              =>      'L',
+       86              =>      'L',
+       87              =>      'L',
+       88              =>      'L',
+       89              =>      'L',
+       90              =>      'L',
+       91              =>      'ON',
+       92              =>      'ON',
+       93              =>      'ON',
+       94              =>      'ON',
+       95              =>      'ON',
+       96              =>      'ON',
+       97              =>      'L',
+       98              =>      'L',
+       99              =>      'L',
+       100             =>      'L',
+       101             =>      'L',
+       102             =>      'L',
+       103             =>      'L',
+       104             =>      'L',
+       105             =>      'L',
+       106             =>      'L',
+       107             =>      'L',
+       108             =>      'L',
+       109             =>      'L',
+       110             =>      'L',
+       111             =>      'L',
+       112             =>      'L',
+       113             =>      'L',
+       114             =>      'L',
+       115             =>      'L',
+       116             =>      'L',
+       117             =>      'L',
+       118             =>      'L',
+       119             =>      'L',
+       120             =>      'L',
+       121             =>      'L',
+       122             =>      'L',
+       123             =>      'ON',
+       124             =>      'ON',
+       125             =>      'ON',
+       126             =>      'ON',
+       127             =>      'BN',
+       128             =>      'BN',
+       129             =>      'BN',
+       130             =>      'BN',
+       131             =>      'BN',
+       132             =>      'BN',
+       133             =>      'B',
+       134             =>      'BN',
+       135             =>      'BN',
+       136             =>      'BN',
+       137             =>      'BN',
+       138             =>      'BN',
+       139             =>      'BN',
+       140             =>      'BN',
+       141             =>      'BN',
+       142             =>      'BN',
+       143             =>      'BN',
+       144             =>      'BN',
+       145             =>      'BN',
+       146             =>      'BN',
+       147             =>      'BN',
+       148             =>      'BN',
+       149             =>      'BN',
+       150             =>      'BN',
+       151             =>      'BN',
+       152             =>      'BN',
+       153             =>      'BN',
+       154             =>      'BN',
+       155             =>      'BN',
+       156             =>      'BN',
+       157             =>      'BN',
+       158             =>      'BN',
+       159             =>      'BN',
+       160             =>      'CS',
+       161             =>      'ON',
+       162             =>      'ET',
+       163             =>      'ET',
+       164             =>      'ET',
+       165             =>      'ET',
+       166             =>      'ON',
+       167             =>      'ON',
+       168             =>      'ON',
+       169             =>      'ON',
+       170             =>      'L',
+       171             =>      'ON',
+       172             =>      'ON',
+       173             =>      'BN',
+       174             =>      'ON',
+       175             =>      'ON',
+       176             =>      'ET',
+       177             =>      'ET',
+       178             =>      'EN',
+       179             =>      'EN',
+       180             =>      'ON',
+       181             =>      'L',
+       182             =>      'ON',
+       183             =>      'ON',
+       184             =>      'ON',
+       185             =>      'EN',
+       186             =>      'L',
+       187             =>      'ON',
+       188             =>      'ON',
+       189             =>      'ON',
+       190             =>      'ON',
+       191             =>      'ON',
+       192             =>      'L',
+       193             =>      'L',
+       194             =>      'L',
+       195             =>      'L',
+       196             =>      'L',
+       197             =>      'L',
+       198             =>      'L',
+       199             =>      'L',
+       200             =>      'L',
+       201             =>      'L',
+       202             =>      'L',
+       203             =>      'L',
+       204             =>      'L',
+       205             =>      'L',
+       206             =>      'L',
+       207             =>      'L',
+       208             =>      'L',
+       209             =>      'L',
+       210             =>      'L',
+       211             =>      'L',
+       212             =>      'L',
+       213             =>      'L',
+       214             =>      'L',
+       215             =>      'ON',
+       216             =>      'L',
+       217             =>      'L',
+       218             =>      'L',
+       219             =>      'L',
+       220             =>      'L',
+       221             =>      'L',
+       222             =>      'L',
+       223             =>      'L',
+       224             =>      'L',
+       225             =>      'L',
+       226             =>      'L',
+       227             =>      'L',
+       228             =>      'L',
+       229             =>      'L',
+       230             =>      'L',
+       231             =>      'L',
+       232             =>      'L',
+       233             =>      'L',
+       234             =>      'L',
+       235             =>      'L',
+       236             =>      'L',
+       237             =>      'L',
+       238             =>      'L',
+       239             =>      'L',
+       240             =>      'L',
+       241             =>      'L',
+       242             =>      'L',
+       243             =>      'L',
+       244             =>      'L',
+       245             =>      'L',
+       246             =>      'L',
+       247             =>      'ON',
+       248             =>      'L',
+       249             =>      'L',
+       250             =>      'L',
+       251             =>      'L',
+       252             =>      'L',
+       253             =>      'L',
+       254             =>      'L',
+       255             =>      'L',
+       256             =>      'L',
+       257             =>      'L',
+       258             =>      'L',
+       259             =>      'L',
+       260             =>      'L',
+       261             =>      'L',
+       262             =>      'L',
+       263             =>      'L',
+       264             =>      'L',
+       265             =>      'L',
+       266             =>      'L',
+       267             =>      'L',
+       268             =>      'L',
+       269             =>      'L',
+       270             =>      'L',
+       271             =>      'L',
+       272             =>      'L',
+       273             =>      'L',
+       274             =>      'L',
+       275             =>      'L',
+       276             =>      'L',
+       277             =>      'L',
+       278             =>      'L',
+       279             =>      'L',
+       280             =>      'L',
+       281             =>      'L',
+       282             =>      'L',
+       283             =>      'L',
+       284             =>      'L',
+       285             =>      'L',
+       286             =>      'L',
+       287             =>      'L',
+       288             =>      'L',
+       289             =>      'L',
+       290             =>      'L',
+       291             =>      'L',
+       292             =>      'L',
+       293             =>      'L',
+       294             =>      'L',
+       295             =>      'L',
+       296             =>      'L',
+       297             =>      'L',
+       298             =>      'L',
+       299             =>      'L',
+       300             =>      'L',
+       301             =>      'L',
+       302             =>      'L',
+       303             =>      'L',
+       304             =>      'L',
+       305             =>      'L',
+       306             =>      'L',
+       307             =>      'L',
+       308             =>      'L',
+       309             =>      'L',
+       310             =>      'L',
+       311             =>      'L',
+       312             =>      'L',
+       313             =>      'L',
+       314             =>      'L',
+       315             =>      'L',
+       316             =>      'L',
+       317             =>      'L',
+       318             =>      'L',
+       319             =>      'L',
+       320             =>      'L',
+       321             =>      'L',
+       322             =>      'L',
+       323             =>      'L',
+       324             =>      'L',
+       325             =>      'L',
+       326             =>      'L',
+       327             =>      'L',
+       328             =>      'L',
+       329             =>      'L',
+       330             =>      'L',
+       331             =>      'L',
+       332             =>      'L',
+       333             =>      'L',
+       334             =>      'L',
+       335             =>      'L',
+       336             =>      'L',
+       337             =>      'L',
+       338             =>      'L',
+       339             =>      'L',
+       340             =>      'L',
+       341             =>      'L',
+       342             =>      'L',
+       343             =>      'L',
+       344             =>      'L',
+       345             =>      'L',
+       346             =>      'L',
+       347             =>      'L',
+       348             =>      'L',
+       349             =>      'L',
+       350             =>      'L',
+       351             =>      'L',
+       352             =>      'L',
+       353             =>      'L',
+       354             =>      'L',
+       355             =>      'L',
+       356             =>      'L',
+       357             =>      'L',
+       358             =>      'L',
+       359             =>      'L',
+       360             =>      'L',
+       361             =>      'L',
+       362             =>      'L',
+       363             =>      'L',
+       364             =>      'L',
+       365             =>      'L',
+       366             =>      'L',
+       367             =>      'L',
+       368             =>      'L',
+       369             =>      'L',
+       370             =>      'L',
+       371             =>      'L',
+       372             =>      'L',
+       373             =>      'L',
+       374             =>      'L',
+       375             =>      'L',
+       376             =>      'L',
+       377             =>      'L',
+       378             =>      'L',
+       379             =>      'L',
+       380             =>      'L',
+       381             =>      'L',
+       382             =>      'L',
+       383             =>      'L',
+       384             =>      'L',
+       385             =>      'L',
+       386             =>      'L',
+       387             =>      'L',
+       388             =>      'L',
+       389             =>      'L',
+       390             =>      'L',
+       391             =>      'L',
+       392             =>      'L',
+       393             =>      'L',
+       394             =>      'L',
+       395             =>      'L',
+       396             =>      'L',
+       397             =>      'L',
+       398             =>      'L',
+       399             =>      'L',
+       400             =>      'L',
+       401             =>      'L',
+       402             =>      'L',
+       403             =>      'L',
+       404             =>      'L',
+       405             =>      'L',
+       406             =>      'L',
+       407             =>      'L',
+       408             =>      'L',
+       409             =>      'L',
+       410             =>      'L',
+       411             =>      'L',
+       412             =>      'L',
+       413             =>      'L',
+       414             =>      'L',
+       415             =>      'L',
+       416             =>      'L',
+       417             =>      'L',
+       418             =>      'L',
+       419             =>      'L',
+       420             =>      'L',
+       421             =>      'L',
+       422             =>      'L',
+       423             =>      'L',
+       424             =>      'L',
+       425             =>      'L',
+       426             =>      'L',
+       427             =>      'L',
+       428             =>      'L',
+       429             =>      'L',
+       430             =>      'L',
+       431             =>      'L',
+       432             =>      'L',
+       433             =>      'L',
+       434             =>      'L',
+       435             =>      'L',
+       436             =>      'L',
+       437             =>      'L',
+       438             =>      'L',
+       439             =>      'L',
+       440             =>      'L',
+       441             =>      'L',
+       442             =>      'L',
+       443             =>      'L',
+       444             =>      'L',
+       445             =>      'L',
+       446             =>      'L',
+       447             =>      'L',
+       448             =>      'L',
+       449             =>      'L',
+       450             =>      'L',
+       451             =>      'L',
+       452             =>      'L',
+       453             =>      'L',
+       454             =>      'L',
+       455             =>      'L',
+       456             =>      'L',
+       457             =>      'L',
+       458             =>      'L',
+       459             =>      'L',
+       460             =>      'L',
+       461             =>      'L',
+       462             =>      'L',
+       463             =>      'L',
+       464             =>      'L',
+       465             =>      'L',
+       466             =>      'L',
+       467             =>      'L',
+       468             =>      'L',
+       469             =>      'L',
+       470             =>      'L',
+       471             =>      'L',
+       472             =>      'L',
+       473             =>      'L',
+       474             =>      'L',
+       475             =>      'L',
+       476             =>      'L',
+       477             =>      'L',
+       478             =>      'L',
+       479             =>      'L',
+       480             =>      'L',
+       481             =>      'L',
+       482             =>      'L',
+       483             =>      'L',
+       484             =>      'L',
+       485             =>      'L',
+       486             =>      'L',
+       487             =>      'L',
+       488             =>      'L',
+       489             =>      'L',
+       490             =>      'L',
+       491             =>      'L',
+       492             =>      'L',
+       493             =>      'L',
+       494             =>      'L',
+       495             =>      'L',
+       496             =>      'L',
+       497             =>      'L',
+       498             =>      'L',
+       499             =>      'L',
+       500             =>      'L',
+       501             =>      'L',
+       502             =>      'L',
+       503             =>      'L',
+       504             =>      'L',
+       505             =>      'L',
+       506             =>      'L',
+       507             =>      'L',
+       508             =>      'L',
+       509             =>      'L',
+       510             =>      'L',
+       511             =>      'L',
+       512             =>      'L',
+       513             =>      'L',
+       514             =>      'L',
+       515             =>      'L',
+       516             =>      'L',
+       517             =>      'L',
+       518             =>      'L',
+       519             =>      'L',
+       520             =>      'L',
+       521             =>      'L',
+       522             =>      'L',
+       523             =>      'L',
+       524             =>      'L',
+       525             =>      'L',
+       526             =>      'L',
+       527             =>      'L',
+       528             =>      'L',
+       529             =>      'L',
+       530             =>      'L',
+       531             =>      'L',
+       532             =>      'L',
+       533             =>      'L',
+       534             =>      'L',
+       535             =>      'L',
+       536             =>      'L',
+       537             =>      'L',
+       538             =>      'L',
+       539             =>      'L',
+       540             =>      'L',
+       541             =>      'L',
+       542             =>      'L',
+       543             =>      'L',
+       544             =>      'L',
+       545             =>      'L',
+       546             =>      'L',
+       547             =>      'L',
+       548             =>      'L',
+       549             =>      'L',
+       550             =>      'L',
+       551             =>      'L',
+       552             =>      'L',
+       553             =>      'L',
+       554             =>      'L',
+       555             =>      'L',
+       556             =>      'L',
+       557             =>      'L',
+       558             =>      'L',
+       559             =>      'L',
+       560             =>      'L',
+       561             =>      'L',
+       562             =>      'L',
+       563             =>      'L',
+       564             =>      'L',
+       565             =>      'L',
+       566             =>      'L',
+       567             =>      'L',
+       568             =>      'L',
+       569             =>      'L',
+       570             =>      'L',
+       571             =>      'L',
+       572             =>      'L',
+       573             =>      'L',
+       574             =>      'L',
+       575             =>      'L',
+       576             =>      'L',
+       577             =>      'L',
+       578             =>      'L',
+       579             =>      'L',
+       580             =>      'L',
+       581             =>      'L',
+       582             =>      'L',
+       583             =>      'L',
+       584             =>      'L',
+       585             =>      'L',
+       586             =>      'L',
+       587             =>      'L',
+       588             =>      'L',
+       589             =>      'L',
+       590             =>      'L',
+       591             =>      'L',
+       592             =>      'L',
+       593             =>      'L',
+       594             =>      'L',
+       595             =>      'L',
+       596             =>      'L',
+       597             =>      'L',
+       598             =>      'L',
+       599             =>      'L',
+       600             =>      'L',
+       601             =>      'L',
+       602             =>      'L',
+       603             =>      'L',
+       604             =>      'L',
+       605             =>      'L',
+       606             =>      'L',
+       607             =>      'L',
+       608             =>      'L',
+       609             =>      'L',
+       610             =>      'L',
+       611             =>      'L',
+       612             =>      'L',
+       613             =>      'L',
+       614             =>      'L',
+       615             =>      'L',
+       616             =>      'L',
+       617             =>      'L',
+       618             =>      'L',
+       619             =>      'L',
+       620             =>      'L',
+       621             =>      'L',
+       622             =>      'L',
+       623             =>      'L',
+       624             =>      'L',
+       625             =>      'L',
+       626             =>      'L',
+       627             =>      'L',
+       628             =>      'L',
+       629             =>      'L',
+       630             =>      'L',
+       631             =>      'L',
+       632             =>      'L',
+       633             =>      'L',
+       634             =>      'L',
+       635             =>      'L',
+       636             =>      'L',
+       637             =>      'L',
+       638             =>      'L',
+       639             =>      'L',
+       640             =>      'L',
+       641             =>      'L',
+       642             =>      'L',
+       643             =>      'L',
+       644             =>      'L',
+       645             =>      'L',
+       646             =>      'L',
+       647             =>      'L',
+       648             =>      'L',
+       649             =>      'L',
+       650             =>      'L',
+       651             =>      'L',
+       652             =>      'L',
+       653             =>      'L',
+       654             =>      'L',
+       655             =>      'L',
+       656             =>      'L',
+       657             =>      'L',
+       658             =>      'L',
+       659             =>      'L',
+       660             =>      'L',
+       661             =>      'L',
+       662             =>      'L',
+       663             =>      'L',
+       664             =>      'L',
+       665             =>      'L',
+       666             =>      'L',
+       667             =>      'L',
+       668             =>      'L',
+       669             =>      'L',
+       670             =>      'L',
+       671             =>      'L',
+       672             =>      'L',
+       673             =>      'L',
+       674             =>      'L',
+       675             =>      'L',
+       676             =>      'L',
+       677             =>      'L',
+       678             =>      'L',
+       679             =>      'L',
+       680             =>      'L',
+       681             =>      'L',
+       682             =>      'L',
+       683             =>      'L',
+       684             =>      'L',
+       685             =>      'L',
+       686             =>      'L',
+       687             =>      'L',
+       688             =>      'L',
+       689             =>      'L',
+       690             =>      'L',
+       691             =>      'L',
+       692             =>      'L',
+       693             =>      'L',
+       694             =>      'L',
+       695             =>      'L',
+       696             =>      'L',
+       697             =>      'ON',
+       698             =>      'ON',
+       699             =>      'L',
+       700             =>      'L',
+       701             =>      'L',
+       702             =>      'L',
+       703             =>      'L',
+       704             =>      'L',
+       705             =>      'L',
+       706             =>      'ON',
+       707             =>      'ON',
+       708             =>      'ON',
+       709             =>      'ON',
+       710             =>      'ON',
+       711             =>      'ON',
+       712             =>      'ON',
+       713             =>      'ON',
+       714             =>      'ON',
+       715             =>      'ON',
+       716             =>      'ON',
+       717             =>      'ON',
+       718             =>      'ON',
+       719             =>      'ON',
+       720             =>      'L',
+       721             =>      'L',
+       722             =>      'ON',
+       723             =>      'ON',
+       724             =>      'ON',
+       725             =>      'ON',
+       726             =>      'ON',
+       727             =>      'ON',
+       728             =>      'ON',
+       729             =>      'ON',
+       730             =>      'ON',
+       731             =>      'ON',
+       732             =>      'ON',
+       733             =>      'ON',
+       734             =>      'ON',
+       735             =>      'ON',
+       736             =>      'L',
+       737             =>      'L',
+       738             =>      'L',
+       739             =>      'L',
+       740             =>      'L',
+       741             =>      'ON',
+       742             =>      'ON',
+       743             =>      'ON',
+       744             =>      'ON',
+       745             =>      'ON',
+       746             =>      'ON',
+       747             =>      'ON',
+       748             =>      'ON',
+       749             =>      'ON',
+       750             =>      'L',
+       751             =>      'ON',
+       752             =>      'ON',
+       753             =>      'ON',
+       754             =>      'ON',
+       755             =>      'ON',
+       756             =>      'ON',
+       757             =>      'ON',
+       758             =>      'ON',
+       759             =>      'ON',
+       760             =>      'ON',
+       761             =>      'ON',
+       762             =>      'ON',
+       763             =>      'ON',
+       764             =>      'ON',
+       765             =>      'ON',
+       766             =>      'ON',
+       767             =>      'ON',
+       768             =>      'NSM',
+       769             =>      'NSM',
+       770             =>      'NSM',
+       771             =>      'NSM',
+       772             =>      'NSM',
+       773             =>      'NSM',
+       774             =>      'NSM',
+       775             =>      'NSM',
+       776             =>      'NSM',
+       777             =>      'NSM',
+       778             =>      'NSM',
+       779             =>      'NSM',
+       780             =>      'NSM',
+       781             =>      'NSM',
+       782             =>      'NSM',
+       783             =>      'NSM',
+       784             =>      'NSM',
+       785             =>      'NSM',
+       786             =>      'NSM',
+       787             =>      'NSM',
+       788             =>      'NSM',
+       789             =>      'NSM',
+       790             =>      'NSM',
+       791             =>      'NSM',
+       792             =>      'NSM',
+       793             =>      'NSM',
+       794             =>      'NSM',
+       795             =>      'NSM',
+       796             =>      'NSM',
+       797             =>      'NSM',
+       798             =>      'NSM',
+       799             =>      'NSM',
+       800             =>      'NSM',
+       801             =>      'NSM',
+       802             =>      'NSM',
+       803             =>      'NSM',
+       804             =>      'NSM',
+       805             =>      'NSM',
+       806             =>      'NSM',
+       807             =>      'NSM',
+       808             =>      'NSM',
+       809             =>      'NSM',
+       810             =>      'NSM',
+       811             =>      'NSM',
+       812             =>      'NSM',
+       813             =>      'NSM',
+       814             =>      'NSM',
+       815             =>      'NSM',
+       816             =>      'NSM',
+       817             =>      'NSM',
+       818             =>      'NSM',
+       819             =>      'NSM',
+       820             =>      'NSM',
+       821             =>      'NSM',
+       822             =>      'NSM',
+       823             =>      'NSM',
+       824             =>      'NSM',
+       825             =>      'NSM',
+       826             =>      'NSM',
+       827             =>      'NSM',
+       828             =>      'NSM',
+       829             =>      'NSM',
+       830             =>      'NSM',
+       831             =>      'NSM',
+       832             =>      'NSM',
+       833             =>      'NSM',
+       834             =>      'NSM',
+       835             =>      'NSM',
+       836             =>      'NSM',
+       837             =>      'NSM',
+       838             =>      'NSM',
+       839             =>      'NSM',
+       840             =>      'NSM',
+       841             =>      'NSM',
+       842             =>      'NSM',
+       843             =>      'NSM',
+       844             =>      'NSM',
+       845             =>      'NSM',
+       846             =>      'NSM',
+       847             =>      'NSM',
+       848             =>      'NSM',
+       849             =>      'NSM',
+       850             =>      'NSM',
+       851             =>      'NSM',
+       852             =>      'NSM',
+       853             =>      'NSM',
+       854             =>      'NSM',
+       855             =>      'NSM',
+       856             =>      'NSM',
+       857             =>      'NSM',
+       858             =>      'NSM',
+       859             =>      'NSM',
+       860             =>      'NSM',
+       861             =>      'NSM',
+       862             =>      'NSM',
+       863             =>      'NSM',
+       864             =>      'NSM',
+       865             =>      'NSM',
+       866             =>      'NSM',
+       867             =>      'NSM',
+       868             =>      'NSM',
+       869             =>      'NSM',
+       870             =>      'NSM',
+       871             =>      'NSM',
+       872             =>      'NSM',
+       873             =>      'NSM',
+       874             =>      'NSM',
+       875             =>      'NSM',
+       876             =>      'NSM',
+       877             =>      'NSM',
+       878             =>      'NSM',
+       879             =>      'NSM',
+       884             =>      'ON',
+       885             =>      'ON',
+       890             =>      'L',
+       891             =>      'L',
+       892             =>      'L',
+       893             =>      'L',
+       894             =>      'ON',
+       900             =>      'ON',
+       901             =>      'ON',
+       902             =>      'L',
+       903             =>      'ON',
+       904             =>      'L',
+       905             =>      'L',
+       906             =>      'L',
+       908             =>      'L',
+       910             =>      'L',
+       911             =>      'L',
+       912             =>      'L',
+       913             =>      'L',
+       914             =>      'L',
+       915             =>      'L',
+       916             =>      'L',
+       917             =>      'L',
+       918             =>      'L',
+       919             =>      'L',
+       920             =>      'L',
+       921             =>      'L',
+       922             =>      'L',
+       923             =>      'L',
+       924             =>      'L',
+       925             =>      'L',
+       926             =>      'L',
+       927             =>      'L',
+       928             =>      'L',
+       929             =>      'L',
+       931             =>      'L',
+       932             =>      'L',
+       933             =>      'L',
+       934             =>      'L',
+       935             =>      'L',
+       936             =>      'L',
+       937             =>      'L',
+       938             =>      'L',
+       939             =>      'L',
+       940             =>      'L',
+       941             =>      'L',
+       942             =>      'L',
+       943             =>      'L',
+       944             =>      'L',
+       945             =>      'L',
+       946             =>      'L',
+       947             =>      'L',
+       948             =>      'L',
+       949             =>      'L',
+       950             =>      'L',
+       951             =>      'L',
+       952             =>      'L',
+       953             =>      'L',
+       954             =>      'L',
+       955             =>      'L',
+       956             =>      'L',
+       957             =>      'L',
+       958             =>      'L',
+       959             =>      'L',
+       960             =>      'L',
+       961             =>      'L',
+       962             =>      'L',
+       963             =>      'L',
+       964             =>      'L',
+       965             =>      'L',
+       966             =>      'L',
+       967             =>      'L',
+       968             =>      'L',
+       969             =>      'L',
+       970             =>      'L',
+       971             =>      'L',
+       972             =>      'L',
+       973             =>      'L',
+       974             =>      'L',
+       976             =>      'L',
+       977             =>      'L',
+       978             =>      'L',
+       979             =>      'L',
+       980             =>      'L',
+       981             =>      'L',
+       982             =>      'L',
+       983             =>      'L',
+       984             =>      'L',
+       985             =>      'L',
+       986             =>      'L',
+       987             =>      'L',
+       988             =>      'L',
+       989             =>      'L',
+       990             =>      'L',
+       991             =>      'L',
+       992             =>      'L',
+       993             =>      'L',
+       994             =>      'L',
+       995             =>      'L',
+       996             =>      'L',
+       997             =>      'L',
+       998             =>      'L',
+       999             =>      'L',
+       1000            =>      'L',
+       1001            =>      'L',
+       1002            =>      'L',
+       1003            =>      'L',
+       1004            =>      'L',
+       1005            =>      'L',
+       1006            =>      'L',
+       1007            =>      'L',
+       1008            =>      'L',
+       1009            =>      'L',
+       1010            =>      'L',
+       1011            =>      'L',
+       1012            =>      'L',
+       1013            =>      'L',
+       1014            =>      'ON',
+       1015            =>      'L',
+       1016            =>      'L',
+       1017            =>      'L',
+       1018            =>      'L',
+       1019            =>      'L',
+       1020            =>      'L',
+       1021            =>      'L',
+       1022            =>      'L',
+       1023            =>      'L',
+       1024            =>      'L',
+       1025            =>      'L',
+       1026            =>      'L',
+       1027            =>      'L',
+       1028            =>      'L',
+       1029            =>      'L',
+       1030            =>      'L',
+       1031            =>      'L',
+       1032            =>      'L',
+       1033            =>      'L',
+       1034            =>      'L',
+       1035            =>      'L',
+       1036            =>      'L',
+       1037            =>      'L',
+       1038            =>      'L',
+       1039            =>      'L',
+       1040            =>      'L',
+       1041            =>      'L',
+       1042            =>      'L',
+       1043            =>      'L',
+       1044            =>      'L',
+       1045            =>      'L',
+       1046            =>      'L',
+       1047            =>      'L',
+       1048            =>      'L',
+       1049            =>      'L',
+       1050            =>      'L',
+       1051            =>      'L',
+       1052            =>      'L',
+       1053            =>      'L',
+       1054            =>      'L',
+       1055            =>      'L',
+       1056            =>      'L',
+       1057            =>      'L',
+       1058            =>      'L',
+       1059            =>      'L',
+       1060            =>      'L',
+       1061            =>      'L',
+       1062            =>      'L',
+       1063            =>      'L',
+       1064            =>      'L',
+       1065            =>      'L',
+       1066            =>      'L',
+       1067            =>      'L',
+       1068            =>      'L',
+       1069            =>      'L',
+       1070            =>      'L',
+       1071            =>      'L',
+       1072            =>      'L',
+       1073            =>      'L',
+       1074            =>      'L',
+       1075            =>      'L',
+       1076            =>      'L',
+       1077            =>      'L',
+       1078            =>      'L',
+       1079            =>      'L',
+       1080            =>      'L',
+       1081            =>      'L',
+       1082            =>      'L',
+       1083            =>      'L',
+       1084            =>      'L',
+       1085            =>      'L',
+       1086            =>      'L',
+       1087            =>      'L',
+       1088            =>      'L',
+       1089            =>      'L',
+       1090            =>      'L',
+       1091            =>      'L',
+       1092            =>      'L',
+       1093            =>      'L',
+       1094            =>      'L',
+       1095            =>      'L',
+       1096            =>      'L',
+       1097            =>      'L',
+       1098            =>      'L',
+       1099            =>      'L',
+       1100            =>      'L',
+       1101            =>      'L',
+       1102            =>      'L',
+       1103            =>      'L',
+       1104            =>      'L',
+       1105            =>      'L',
+       1106            =>      'L',
+       1107            =>      'L',
+       1108            =>      'L',
+       1109            =>      'L',
+       1110            =>      'L',
+       1111            =>      'L',
+       1112            =>      'L',
+       1113            =>      'L',
+       1114            =>      'L',
+       1115            =>      'L',
+       1116            =>      'L',
+       1117            =>      'L',
+       1118            =>      'L',
+       1119            =>      'L',
+       1120            =>      'L',
+       1121            =>      'L',
+       1122            =>      'L',
+       1123            =>      'L',
+       1124            =>      'L',
+       1125            =>      'L',
+       1126            =>      'L',
+       1127            =>      'L',
+       1128            =>      'L',
+       1129            =>      'L',
+       1130            =>      'L',
+       1131            =>      'L',
+       1132            =>      'L',
+       1133            =>      'L',
+       1134            =>      'L',
+       1135            =>      'L',
+       1136            =>      'L',
+       1137            =>      'L',
+       1138            =>      'L',
+       1139            =>      'L',
+       1140            =>      'L',
+       1141            =>      'L',
+       1142            =>      'L',
+       1143            =>      'L',
+       1144            =>      'L',
+       1145            =>      'L',
+       1146            =>      'L',
+       1147            =>      'L',
+       1148            =>      'L',
+       1149            =>      'L',
+       1150            =>      'L',
+       1151            =>      'L',
+       1152            =>      'L',
+       1153            =>      'L',
+       1154            =>      'L',
+       1155            =>      'NSM',
+       1156            =>      'NSM',
+       1157            =>      'NSM',
+       1158            =>      'NSM',
+       1160            =>      'NSM',
+       1161            =>      'NSM',
+       1162            =>      'L',
+       1163            =>      'L',
+       1164            =>      'L',
+       1165            =>      'L',
+       1166            =>      'L',
+       1167            =>      'L',
+       1168            =>      'L',
+       1169            =>      'L',
+       1170            =>      'L',
+       1171            =>      'L',
+       1172            =>      'L',
+       1173            =>      'L',
+       1174            =>      'L',
+       1175            =>      'L',
+       1176            =>      'L',
+       1177            =>      'L',
+       1178            =>      'L',
+       1179            =>      'L',
+       1180            =>      'L',
+       1181            =>      'L',
+       1182            =>      'L',
+       1183            =>      'L',
+       1184            =>      'L',
+       1185            =>      'L',
+       1186            =>      'L',
+       1187            =>      'L',
+       1188            =>      'L',
+       1189            =>      'L',
+       1190            =>      'L',
+       1191            =>      'L',
+       1192            =>      'L',
+       1193            =>      'L',
+       1194            =>      'L',
+       1195            =>      'L',
+       1196            =>      'L',
+       1197            =>      'L',
+       1198            =>      'L',
+       1199            =>      'L',
+       1200            =>      'L',
+       1201            =>      'L',
+       1202            =>      'L',
+       1203            =>      'L',
+       1204            =>      'L',
+       1205            =>      'L',
+       1206            =>      'L',
+       1207            =>      'L',
+       1208            =>      'L',
+       1209            =>      'L',
+       1210            =>      'L',
+       1211            =>      'L',
+       1212            =>      'L',
+       1213            =>      'L',
+       1214            =>      'L',
+       1215            =>      'L',
+       1216            =>      'L',
+       1217            =>      'L',
+       1218            =>      'L',
+       1219            =>      'L',
+       1220            =>      'L',
+       1221            =>      'L',
+       1222            =>      'L',
+       1223            =>      'L',
+       1224            =>      'L',
+       1225            =>      'L',
+       1226            =>      'L',
+       1227            =>      'L',
+       1228            =>      'L',
+       1229            =>      'L',
+       1230            =>      'L',
+       1231            =>      'L',
+       1232            =>      'L',
+       1233            =>      'L',
+       1234            =>      'L',
+       1235            =>      'L',
+       1236            =>      'L',
+       1237            =>      'L',
+       1238            =>      'L',
+       1239            =>      'L',
+       1240            =>      'L',
+       1241            =>      'L',
+       1242            =>      'L',
+       1243            =>      'L',
+       1244            =>      'L',
+       1245            =>      'L',
+       1246            =>      'L',
+       1247            =>      'L',
+       1248            =>      'L',
+       1249            =>      'L',
+       1250            =>      'L',
+       1251            =>      'L',
+       1252            =>      'L',
+       1253            =>      'L',
+       1254            =>      'L',
+       1255            =>      'L',
+       1256            =>      'L',
+       1257            =>      'L',
+       1258            =>      'L',
+       1259            =>      'L',
+       1260            =>      'L',
+       1261            =>      'L',
+       1262            =>      'L',
+       1263            =>      'L',
+       1264            =>      'L',
+       1265            =>      'L',
+       1266            =>      'L',
+       1267            =>      'L',
+       1268            =>      'L',
+       1269            =>      'L',
+       1270            =>      'L',
+       1271            =>      'L',
+       1272            =>      'L',
+       1273            =>      'L',
+       1274            =>      'L',
+       1275            =>      'L',
+       1276            =>      'L',
+       1277            =>      'L',
+       1278            =>      'L',
+       1279            =>      'L',
+       1280            =>      'L',
+       1281            =>      'L',
+       1282            =>      'L',
+       1283            =>      'L',
+       1284            =>      'L',
+       1285            =>      'L',
+       1286            =>      'L',
+       1287            =>      'L',
+       1288            =>      'L',
+       1289            =>      'L',
+       1290            =>      'L',
+       1291            =>      'L',
+       1292            =>      'L',
+       1293            =>      'L',
+       1294            =>      'L',
+       1295            =>      'L',
+       1296            =>      'L',
+       1297            =>      'L',
+       1298            =>      'L',
+       1299            =>      'L',
+       1329            =>      'L',
+       1330            =>      'L',
+       1331            =>      'L',
+       1332            =>      'L',
+       1333            =>      'L',
+       1334            =>      'L',
+       1335            =>      'L',
+       1336            =>      'L',
+       1337            =>      'L',
+       1338            =>      'L',
+       1339            =>      'L',
+       1340            =>      'L',
+       1341            =>      'L',
+       1342            =>      'L',
+       1343            =>      'L',
+       1344            =>      'L',
+       1345            =>      'L',
+       1346            =>      'L',
+       1347            =>      'L',
+       1348            =>      'L',
+       1349            =>      'L',
+       1350            =>      'L',
+       1351            =>      'L',
+       1352            =>      'L',
+       1353            =>      'L',
+       1354            =>      'L',
+       1355            =>      'L',
+       1356            =>      'L',
+       1357            =>      'L',
+       1358            =>      'L',
+       1359            =>      'L',
+       1360            =>      'L',
+       1361            =>      'L',
+       1362            =>      'L',
+       1363            =>      'L',
+       1364            =>      'L',
+       1365            =>      'L',
+       1366            =>      'L',
+       1369            =>      'L',
+       1370            =>      'L',
+       1371            =>      'L',
+       1372            =>      'L',
+       1373            =>      'L',
+       1374            =>      'L',
+       1375            =>      'L',
+       1377            =>      'L',
+       1378            =>      'L',
+       1379            =>      'L',
+       1380            =>      'L',
+       1381            =>      'L',
+       1382            =>      'L',
+       1383            =>      'L',
+       1384            =>      'L',
+       1385            =>      'L',
+       1386            =>      'L',
+       1387            =>      'L',
+       1388            =>      'L',
+       1389            =>      'L',
+       1390            =>      'L',
+       1391            =>      'L',
+       1392            =>      'L',
+       1393            =>      'L',
+       1394            =>      'L',
+       1395            =>      'L',
+       1396            =>      'L',
+       1397            =>      'L',
+       1398            =>      'L',
+       1399            =>      'L',
+       1400            =>      'L',
+       1401            =>      'L',
+       1402            =>      'L',
+       1403            =>      'L',
+       1404            =>      'L',
+       1405            =>      'L',
+       1406            =>      'L',
+       1407            =>      'L',
+       1408            =>      'L',
+       1409            =>      'L',
+       1410            =>      'L',
+       1411            =>      'L',
+       1412            =>      'L',
+       1413            =>      'L',
+       1414            =>      'L',
+       1415            =>      'L',
+       1417            =>      'L',
+       1418            =>      'ON',
+       1425            =>      'NSM',
+       1426            =>      'NSM',
+       1427            =>      'NSM',
+       1428            =>      'NSM',
+       1429            =>      'NSM',
+       1430            =>      'NSM',
+       1431            =>      'NSM',
+       1432            =>      'NSM',
+       1433            =>      'NSM',
+       1434            =>      'NSM',
+       1435            =>      'NSM',
+       1436            =>      'NSM',
+       1437            =>      'NSM',
+       1438            =>      'NSM',
+       1439            =>      'NSM',
+       1440            =>      'NSM',
+       1441            =>      'NSM',
+       1442            =>      'NSM',
+       1443            =>      'NSM',
+       1444            =>      'NSM',
+       1445            =>      'NSM',
+       1446            =>      'NSM',
+       1447            =>      'NSM',
+       1448            =>      'NSM',
+       1449            =>      'NSM',
+       1450            =>      'NSM',
+       1451            =>      'NSM',
+       1452            =>      'NSM',
+       1453            =>      'NSM',
+       1454            =>      'NSM',
+       1455            =>      'NSM',
+       1456            =>      'NSM',
+       1457            =>      'NSM',
+       1458            =>      'NSM',
+       1459            =>      'NSM',
+       1460            =>      'NSM',
+       1461            =>      'NSM',
+       1462            =>      'NSM',
+       1463            =>      'NSM',
+       1464            =>      'NSM',
+       1465            =>      'NSM',
+       1466            =>      'NSM',
+       1467            =>      'NSM',
+       1468            =>      'NSM',
+       1469            =>      'NSM',
+       1470            =>      'R',
+       1471            =>      'NSM',
+       1472            =>      'R',
+       1473            =>      'NSM',
+       1474            =>      'NSM',
+       1475            =>      'R',
+       1476            =>      'NSM',
+       1477            =>      'NSM',
+       1478            =>      'R',
+       1479            =>      'NSM',
+       1488            =>      'R',
+       1489            =>      'R',
+       1490            =>      'R',
+       1491            =>      'R',
+       1492            =>      'R',
+       1493            =>      'R',
+       1494            =>      'R',
+       1495            =>      'R',
+       1496            =>      'R',
+       1497            =>      'R',
+       1498            =>      'R',
+       1499            =>      'R',
+       1500            =>      'R',
+       1501            =>      'R',
+       1502            =>      'R',
+       1503            =>      'R',
+       1504            =>      'R',
+       1505            =>      'R',
+       1506            =>      'R',
+       1507            =>      'R',
+       1508            =>      'R',
+       1509            =>      'R',
+       1510            =>      'R',
+       1511            =>      'R',
+       1512            =>      'R',
+       1513            =>      'R',
+       1514            =>      'R',
+       1520            =>      'R',
+       1521            =>      'R',
+       1522            =>      'R',
+       1523            =>      'R',
+       1524            =>      'R',
+       1536            =>      'AL',
+       1537            =>      'AL',
+       1538            =>      'AL',
+       1539            =>      'AL',
+       1547            =>      'AL',
+       1548            =>      'CS',
+       1549            =>      'AL',
+       1550            =>      'ON',
+       1551            =>      'ON',
+       1552            =>      'NSM',
+       1553            =>      'NSM',
+       1554            =>      'NSM',
+       1555            =>      'NSM',
+       1556            =>      'NSM',
+       1557            =>      'NSM',
+       1563            =>      'AL',
+       1566            =>      'AL',
+       1567            =>      'AL',
+       1569            =>      'AL',
+       1570            =>      'AL',
+       1571            =>      'AL',
+       1572            =>      'AL',
+       1573            =>      'AL',
+       1574            =>      'AL',
+       1575            =>      'AL',
+       1576            =>      'AL',
+       1577            =>      'AL',
+       1578            =>      'AL',
+       1579            =>      'AL',
+       1580            =>      'AL',
+       1581            =>      'AL',
+       1582            =>      'AL',
+       1583            =>      'AL',
+       1584            =>      'AL',
+       1585            =>      'AL',
+       1586            =>      'AL',
+       1587            =>      'AL',
+       1588            =>      'AL',
+       1589            =>      'AL',
+       1590            =>      'AL',
+       1591            =>      'AL',
+       1592            =>      'AL',
+       1593            =>      'AL',
+       1594            =>      'AL',
+       1600            =>      'AL',
+       1601            =>      'AL',
+       1602            =>      'AL',
+       1603            =>      'AL',
+       1604            =>      'AL',
+       1605            =>      'AL',
+       1606            =>      'AL',
+       1607            =>      'AL',
+       1608            =>      'AL',
+       1609            =>      'AL',
+       1610            =>      'AL',
+       1611            =>      'NSM',
+       1612            =>      'NSM',
+       1613            =>      'NSM',
+       1614            =>      'NSM',
+       1615            =>      'NSM',
+       1616            =>      'NSM',
+       1617            =>      'NSM',
+       1618            =>      'NSM',
+       1619            =>      'NSM',
+       1620            =>      'NSM',
+       1621            =>      'NSM',
+       1622            =>      'NSM',
+       1623            =>      'NSM',
+       1624            =>      'NSM',
+       1625            =>      'NSM',
+       1626            =>      'NSM',
+       1627            =>      'NSM',
+       1628            =>      'NSM',
+       1629            =>      'NSM',
+       1630            =>      'NSM',
+       1632            =>      'AN',
+       1633            =>      'AN',
+       1634            =>      'AN',
+       1635            =>      'AN',
+       1636            =>      'AN',
+       1637            =>      'AN',
+       1638            =>      'AN',
+       1639            =>      'AN',
+       1640            =>      'AN',
+       1641            =>      'AN',
+       1642            =>      'ET',
+       1643            =>      'AN',
+       1644            =>      'AN',
+       1645            =>      'AL',
+       1646            =>      'AL',
+       1647            =>      'AL',
+       1648            =>      'NSM',
+       1649            =>      'AL',
+       1650            =>      'AL',
+       1651            =>      'AL',
+       1652            =>      'AL',
+       1653            =>      'AL',
+       1654            =>      'AL',
+       1655            =>      'AL',
+       1656            =>      'AL',
+       1657            =>      'AL',
+       1658            =>      'AL',
+       1659            =>      'AL',
+       1660            =>      'AL',
+       1661            =>      'AL',
+       1662            =>      'AL',
+       1663            =>      'AL',
+       1664            =>      'AL',
+       1665            =>      'AL',
+       1666            =>      'AL',
+       1667            =>      'AL',
+       1668            =>      'AL',
+       1669            =>      'AL',
+       1670            =>      'AL',
+       1671            =>      'AL',
+       1672            =>      'AL',
+       1673            =>      'AL',
+       1674            =>      'AL',
+       1675            =>      'AL',
+       1676            =>      'AL',
+       1677            =>      'AL',
+       1678            =>      'AL',
+       1679            =>      'AL',
+       1680            =>      'AL',
+       1681            =>      'AL',
+       1682            =>      'AL',
+       1683            =>      'AL',
+       1684            =>      'AL',
+       1685            =>      'AL',
+       1686            =>      'AL',
+       1687            =>      'AL',
+       1688            =>      'AL',
+       1689            =>      'AL',
+       1690            =>      'AL',
+       1691            =>      'AL',
+       1692            =>      'AL',
+       1693            =>      'AL',
+       1694            =>      'AL',
+       1695            =>      'AL',
+       1696            =>      'AL',
+       1697            =>      'AL',
+       1698            =>      'AL',
+       1699            =>      'AL',
+       1700            =>      'AL',
+       1701            =>      'AL',
+       1702            =>      'AL',
+       1703            =>      'AL',
+       1704            =>      'AL',
+       1705            =>      'AL',
+       1706            =>      'AL',
+       1707            =>      'AL',
+       1708            =>      'AL',
+       1709            =>      'AL',
+       1710            =>      'AL',
+       1711            =>      'AL',
+       1712            =>      'AL',
+       1713            =>      'AL',
+       1714            =>      'AL',
+       1715            =>      'AL',
+       1716            =>      'AL',
+       1717            =>      'AL',
+       1718            =>      'AL',
+       1719            =>      'AL',
+       1720            =>      'AL',
+       1721            =>      'AL',
+       1722            =>      'AL',
+       1723            =>      'AL',
+       1724            =>      'AL',
+       1725            =>      'AL',
+       1726            =>      'AL',
+       1727            =>      'AL',
+       1728            =>      'AL',
+       1729            =>      'AL',
+       1730            =>      'AL',
+       1731            =>      'AL',
+       1732            =>      'AL',
+       1733            =>      'AL',
+       1734            =>      'AL',
+       1735            =>      'AL',
+       1736            =>      'AL',
+       1737            =>      'AL',
+       1738            =>      'AL',
+       1739            =>      'AL',
+       1740            =>      'AL',
+       1741            =>      'AL',
+       1742            =>      'AL',
+       1743            =>      'AL',
+       1744            =>      'AL',
+       1745            =>      'AL',
+       1746            =>      'AL',
+       1747            =>      'AL',
+       1748            =>      'AL',
+       1749            =>      'AL',
+       1750            =>      'NSM',
+       1751            =>      'NSM',
+       1752            =>      'NSM',
+       1753            =>      'NSM',
+       1754            =>      'NSM',
+       1755            =>      'NSM',
+       1756            =>      'NSM',
+       1757            =>      'AL',
+       1758            =>      'NSM',
+       1759            =>      'NSM',
+       1760            =>      'NSM',
+       1761            =>      'NSM',
+       1762            =>      'NSM',
+       1763            =>      'NSM',
+       1764            =>      'NSM',
+       1765            =>      'AL',
+       1766            =>      'AL',
+       1767            =>      'NSM',
+       1768            =>      'NSM',
+       1769            =>      'ON',
+       1770            =>      'NSM',
+       1771            =>      'NSM',
+       1772            =>      'NSM',
+       1773            =>      'NSM',
+       1774            =>      'AL',
+       1775            =>      'AL',
+       1776            =>      'EN',
+       1777            =>      'EN',
+       1778            =>      'EN',
+       1779            =>      'EN',
+       1780            =>      'EN',
+       1781            =>      'EN',
+       1782            =>      'EN',
+       1783            =>      'EN',
+       1784            =>      'EN',
+       1785            =>      'EN',
+       1786            =>      'AL',
+       1787            =>      'AL',
+       1788            =>      'AL',
+       1789            =>      'AL',
+       1790            =>      'AL',
+       1791            =>      'AL',
+       1792            =>      'AL',
+       1793            =>      'AL',
+       1794            =>      'AL',
+       1795            =>      'AL',
+       1796            =>      'AL',
+       1797            =>      'AL',
+       1798            =>      'AL',
+       1799            =>      'AL',
+       1800            =>      'AL',
+       1801            =>      'AL',
+       1802            =>      'AL',
+       1803            =>      'AL',
+       1804            =>      'AL',
+       1805            =>      'AL',
+       1807            =>      'BN',
+       1808            =>      'AL',
+       1809            =>      'NSM',
+       1810            =>      'AL',
+       1811            =>      'AL',
+       1812            =>      'AL',
+       1813            =>      'AL',
+       1814            =>      'AL',
+       1815            =>      'AL',
+       1816            =>      'AL',
+       1817            =>      'AL',
+       1818            =>      'AL',
+       1819            =>      'AL',
+       1820            =>      'AL',
+       1821            =>      'AL',
+       1822            =>      'AL',
+       1823            =>      'AL',
+       1824            =>      'AL',
+       1825            =>      'AL',
+       1826            =>      'AL',
+       1827            =>      'AL',
+       1828            =>      'AL',
+       1829            =>      'AL',
+       1830            =>      'AL',
+       1831            =>      'AL',
+       1832            =>      'AL',
+       1833            =>      'AL',
+       1834            =>      'AL',
+       1835            =>      'AL',
+       1836            =>      'AL',
+       1837            =>      'AL',
+       1838            =>      'AL',
+       1839            =>      'AL',
+       1840            =>      'NSM',
+       1841            =>      'NSM',
+       1842            =>      'NSM',
+       1843            =>      'NSM',
+       1844            =>      'NSM',
+       1845            =>      'NSM',
+       1846            =>      'NSM',
+       1847            =>      'NSM',
+       1848            =>      'NSM',
+       1849            =>      'NSM',
+       1850            =>      'NSM',
+       1851            =>      'NSM',
+       1852            =>      'NSM',
+       1853            =>      'NSM',
+       1854            =>      'NSM',
+       1855            =>      'NSM',
+       1856            =>      'NSM',
+       1857            =>      'NSM',
+       1858            =>      'NSM',
+       1859            =>      'NSM',
+       1860            =>      'NSM',
+       1861            =>      'NSM',
+       1862            =>      'NSM',
+       1863            =>      'NSM',
+       1864            =>      'NSM',
+       1865            =>      'NSM',
+       1866            =>      'NSM',
+       1869            =>      'AL',
+       1870            =>      'AL',
+       1871            =>      'AL',
+       1872            =>      'AL',
+       1873            =>      'AL',
+       1874            =>      'AL',
+       1875            =>      'AL',
+       1876            =>      'AL',
+       1877            =>      'AL',
+       1878            =>      'AL',
+       1879            =>      'AL',
+       1880            =>      'AL',
+       1881            =>      'AL',
+       1882            =>      'AL',
+       1883            =>      'AL',
+       1884            =>      'AL',
+       1885            =>      'AL',
+       1886            =>      'AL',
+       1887            =>      'AL',
+       1888            =>      'AL',
+       1889            =>      'AL',
+       1890            =>      'AL',
+       1891            =>      'AL',
+       1892            =>      'AL',
+       1893            =>      'AL',
+       1894            =>      'AL',
+       1895            =>      'AL',
+       1896            =>      'AL',
+       1897            =>      'AL',
+       1898            =>      'AL',
+       1899            =>      'AL',
+       1900            =>      'AL',
+       1901            =>      'AL',
+       1920            =>      'AL',
+       1921            =>      'AL',
+       1922            =>      'AL',
+       1923            =>      'AL',
+       1924            =>      'AL',
+       1925            =>      'AL',
+       1926            =>      'AL',
+       1927            =>      'AL',
+       1928            =>      'AL',
+       1929            =>      'AL',
+       1930            =>      'AL',
+       1931            =>      'AL',
+       1932            =>      'AL',
+       1933            =>      'AL',
+       1934            =>      'AL',
+       1935            =>      'AL',
+       1936            =>      'AL',
+       1937            =>      'AL',
+       1938            =>      'AL',
+       1939            =>      'AL',
+       1940            =>      'AL',
+       1941            =>      'AL',
+       1942            =>      'AL',
+       1943            =>      'AL',
+       1944            =>      'AL',
+       1945            =>      'AL',
+       1946            =>      'AL',
+       1947            =>      'AL',
+       1948            =>      'AL',
+       1949            =>      'AL',
+       1950            =>      'AL',
+       1951            =>      'AL',
+       1952            =>      'AL',
+       1953            =>      'AL',
+       1954            =>      'AL',
+       1955            =>      'AL',
+       1956            =>      'AL',
+       1957            =>      'AL',
+       1958            =>      'NSM',
+       1959            =>      'NSM',
+       1960            =>      'NSM',
+       1961            =>      'NSM',
+       1962            =>      'NSM',
+       1963            =>      'NSM',
+       1964            =>      'NSM',
+       1965            =>      'NSM',
+       1966            =>      'NSM',
+       1967            =>      'NSM',
+       1968            =>      'NSM',
+       1969            =>      'AL',
+       1984            =>      'R',
+       1985            =>      'R',
+       1986            =>      'R',
+       1987            =>      'R',
+       1988            =>      'R',
+       1989            =>      'R',
+       1990            =>      'R',
+       1991            =>      'R',
+       1992            =>      'R',
+       1993            =>      'R',
+       1994            =>      'R',
+       1995            =>      'R',
+       1996            =>      'R',
+       1997            =>      'R',
+       1998            =>      'R',
+       1999            =>      'R',
+       2000            =>      'R',
+       2001            =>      'R',
+       2002            =>      'R',
+       2003            =>      'R',
+       2004            =>      'R',
+       2005            =>      'R',
+       2006            =>      'R',
+       2007            =>      'R',
+       2008            =>      'R',
+       2009            =>      'R',
+       2010            =>      'R',
+       2011            =>      'R',
+       2012            =>      'R',
+       2013            =>      'R',
+       2014            =>      'R',
+       2015            =>      'R',
+       2016            =>      'R',
+       2017            =>      'R',
+       2018            =>      'R',
+       2019            =>      'R',
+       2020            =>      'R',
+       2021            =>      'R',
+       2022            =>      'R',
+       2023            =>      'R',
+       2024            =>      'R',
+       2025            =>      'R',
+       2026            =>      'R',
+       2036            =>      'R',
+       2037            =>      'R',
+       2042            =>      'R',
+       8207            =>      'R',
+       65136           =>      'AL',
+       65137           =>      'AL',
+       65138           =>      'AL',
+       65139           =>      'AL',
+       65140           =>      'AL',
+       65142           =>      'AL',
+       65143           =>      'AL',
+       65144           =>      'AL',
+       65145           =>      'AL',
+       65146           =>      'AL',
+       65147           =>      'AL',
+       65148           =>      'AL',
+       65149           =>      'AL',
+       65150           =>      'AL',
+       65151           =>      'AL',
+       65152           =>      'AL',
+       65153           =>      'AL',
+       65154           =>      'AL',
+       65155           =>      'AL',
+       65156           =>      'AL',
+       65157           =>      'AL',
+       65158           =>      'AL',
+       65159           =>      'AL',
+       65160           =>      'AL',
+       65161           =>      'AL',
+       65162           =>      'AL',
+       65163           =>      'AL',
+       65164           =>      'AL',
+       65165           =>      'AL',
+       65166           =>      'AL',
+       65167           =>      'AL',
+       65168           =>      'AL',
+       65169           =>      'AL',
+       65170           =>      'AL',
+       65171           =>      'AL',
+       65172           =>      'AL',
+       65173           =>      'AL',
+       65174           =>      'AL',
+       65175           =>      'AL',
+       65176           =>      'AL',
+       65177           =>      'AL',
+       65178           =>      'AL',
+       65179           =>      'AL',
+       65180           =>      'AL',
+       65181           =>      'AL',
+       65182           =>      'AL',
+       65183           =>      'AL',
+       65184           =>      'AL',
+       65185           =>      'AL',
+       65186           =>      'AL',
+       65187           =>      'AL',
+       65188           =>      'AL',
+       65189           =>      'AL',
+       65190           =>      'AL',
+       65191           =>      'AL',
+       65192           =>      'AL',
+       65193           =>      'AL',
+       65194           =>      'AL',
+       65195           =>      'AL',
+       65196           =>      'AL',
+       65197           =>      'AL',
+       65198           =>      'AL',
+       65199           =>      'AL',
+       65200           =>      'AL',
+       65201           =>      'AL',
+       65202           =>      'AL',
+       65203           =>      'AL',
+       65204           =>      'AL',
+       65205           =>      'AL',
+       65206           =>      'AL',
+       65207           =>      'AL',
+       65208           =>      'AL',
+       65209           =>      'AL',
+       65210           =>      'AL',
+       65211           =>      'AL',
+       65212           =>      'AL',
+       65213           =>      'AL',
+       65214           =>      'AL',
+       65215           =>      'AL',
+       65216           =>      'AL',
+       65217           =>      'AL',
+       65218           =>      'AL',
+       65219           =>      'AL',
+       65220           =>      'AL',
+       65221           =>      'AL',
+       65222           =>      'AL',
+       65223           =>      'AL',
+       65224           =>      'AL',
+       65225           =>      'AL',
+       65226           =>      'AL',
+       65227           =>      'AL',
+       65228           =>      'AL',
+       65229           =>      'AL',
+       65230           =>      'AL',
+       65231           =>      'AL',
+       65232           =>      'AL',
+       65233           =>      'AL',
+       65234           =>      'AL',
+       65235           =>      'AL',
+       65236           =>      'AL',
+       65237           =>      'AL',
+       65238           =>      'AL',
+       65239           =>      'AL',
+       65240           =>      'AL',
+       65241           =>      'AL',
+       65242           =>      'AL',
+       65243           =>      'AL',
+       65244           =>      'AL',
+       65245           =>      'AL',
+       65246           =>      'AL',
+       65247           =>      'AL',
+       65248           =>      'AL',
+       65249           =>      'AL',
+       65250           =>      'AL',
+       65251           =>      'AL',
+       65252           =>      'AL',
+       65253           =>      'AL',
+       65254           =>      'AL',
+       65255           =>      'AL',
+       65256           =>      'AL',
+       65257           =>      'AL',
+       65258           =>      'AL',
+       65259           =>      'AL',
+       65260           =>      'AL',
+       65261           =>      'AL',
+       65262           =>      'AL',
+       65263           =>      'AL',
+       65264           =>      'AL',
+       65265           =>      'AL',
+       65266           =>      'AL',
+       65267           =>      'AL',
+       65268           =>      'AL',
+       65269           =>      'AL',
+       65270           =>      'AL',
+       65271           =>      'AL',
+       65272           =>      'AL',
+       65273           =>      'AL',
+       65274           =>      'AL',
+       65275           =>      'AL',
+       65276           =>      'AL',
+       67584           =>      'R',
+       67585           =>      'R',
+       67586           =>      'R',
+       67587           =>      'R',
+       67588           =>      'R',
+       67589           =>      'R',
+       67592           =>      'R',
+       67594           =>      'R',
+       67595           =>      'R',
+       67596           =>      'R',
+       67597           =>      'R',
+       67598           =>      'R',
+       67599           =>      'R',
+       67600           =>      'R',
+       67601           =>      'R',
+       67602           =>      'R',
+       67603           =>      'R',
+       67604           =>      'R',
+       67605           =>      'R',
+       67606           =>      'R',
+       67607           =>      'R',
+       67608           =>      'R',
+       67609           =>      'R',
+       67610           =>      'R',
+       67611           =>      'R',
+       67612           =>      'R',
+       67613           =>      'R',
+       67614           =>      'R',
+       67615           =>      'R',
+       67616           =>      'R',
+       67617           =>      'R',
+       67618           =>      'R',
+       67619           =>      'R',
+       67620           =>      'R',
+       67621           =>      'R',
+       67622           =>      'R',
+       67623           =>      'R',
+       67624           =>      'R',
+       67625           =>      'R',
+       67626           =>      'R',
+       67627           =>      'R',
+       67628           =>      'R',
+       67629           =>      'R',
+       67630           =>      'R',
+       67631           =>      'R',
+       67632           =>      'R',
+       67633           =>      'R',
+       67634           =>      'R',
+       67635           =>      'R',
+       67636           =>      'R',
+       67637           =>      'R',
+       67639           =>      'R',
+       67640           =>      'R',
+       67644           =>      'R',
+       67647           =>      'R',
+       67840           =>      'R',
+       67841           =>      'R',
+       67842           =>      'R',
+       67843           =>      'R',
+       67844           =>      'R',
+       67845           =>      'R',
+       67846           =>      'R',
+       67847           =>      'R',
+       67848           =>      'R',
+       67849           =>      'R',
+       67850           =>      'R',
+       67851           =>      'R',
+       67852           =>      'R',
+       67853           =>      'R',
+       67854           =>      'R',
+       67855           =>      'R',
+       67856           =>      'R',
+       67857           =>      'R',
+       67858           =>      'R',
+       67859           =>      'R',
+       67860           =>      'R',
+       67861           =>      'R',
+       67862           =>      'R',
+       67863           =>      'R',
+       67864           =>      'R',
+       67865           =>      'R',
+       68096           =>      'R',
+       68112           =>      'R',
+       68113           =>      'R',
+       68114           =>      'R',
+       68115           =>      'R',
+       68117           =>      'R',
+       68118           =>      'R',
+       68119           =>      'R',
+       68121           =>      'R',
+       68122           =>      'R',
+       68123           =>      'R',
+       68124           =>      'R',
+       68125           =>      'R',
+       68126           =>      'R',
+       68127           =>      'R',
+       68128           =>      'R',
+       68129           =>      'R',
+       68130           =>      'R',
+       68131           =>      'R',
+       68132           =>      'R',
+       68133           =>      'R',
+       68134           =>      'R',
+       68135           =>      'R',
+       68136           =>      'R',
+       68137           =>      'R',
+       68138           =>      'R',
+       68139           =>      'R',
+       68140           =>      'R',
+       68141           =>      'R',
+       68142           =>      'R',
+       68143           =>      'R',
+       68144           =>      'R',
+       68145           =>      'R',
+       68146           =>      'R',
+       68147           =>      'R',
+       68160           =>      'R',
+       68161           =>      'R',
+       68162           =>      'R',
+       68163           =>      'R',
+       68164           =>      'R',
+       68165           =>      'R',
+       68166           =>      'R',
+       68167           =>      'R',
+       68176           =>      'R',
+       68177           =>      'R',
+       68178           =>      'R',
+       68179           =>      'R',
+       68180           =>      'R',
+       68181           =>      'R',
+       68182           =>      'R',
+       68183           =>      'R',
+       68184           =>      'R'
+);
+
+
+/**
+ * Mirror unicode characters.
+ * For information on bidi mirroring, see UAX #9: Bidirectional Algorithm,
+ * at http://www.unicode.org/unicode/reports/tr9/
+ */
+$unicode_mirror = array(
+0x0028 => 0x0029,
+0x0029 => 0x0028,
+0x003C => 0x003E,
+0x003E => 0x003C,
+0x005B => 0x005D,
+0x005D => 0x005B,
+0x007B => 0x007D,
+0x007D => 0x007B,
+0x00AB => 0x00BB,
+0x00BB => 0x00AB,
+0x0F3A => 0x0F3B,
+0x0F3B => 0x0F3A,
+0x0F3C => 0x0F3D,
+0x0F3D => 0x0F3C,
+0x169B => 0x169C,
+0x169C => 0x169B,
+0x2018 => 0x2019,
+0x2019 => 0x2018,
+0x201C => 0x201D,
+0x201D => 0x201C,
+0x2039 => 0x203A,
+0x203A => 0x2039,
+0x2045 => 0x2046,
+0x2046 => 0x2045,
+0x207D => 0x207E,
+0x207E => 0x207D,
+0x208D => 0x208E,
+0x208E => 0x208D,
+0x2208 => 0x220B,
+0x2209 => 0x220C,
+0x220A => 0x220D,
+0x220B => 0x2208,
+0x220C => 0x2209,
+0x220D => 0x220A,
+0x2215 => 0x29F5,
+0x223C => 0x223D,
+0x223D => 0x223C,
+0x2243 => 0x22CD,
+0x2252 => 0x2253,
+0x2253 => 0x2252,
+0x2254 => 0x2255,
+0x2255 => 0x2254,
+0x2264 => 0x2265,
+0x2265 => 0x2264,
+0x2266 => 0x2267,
+0x2267 => 0x2266,
+0x2268 => 0x2269,
+0x2269 => 0x2268,
+0x226A => 0x226B,
+0x226B => 0x226A,
+0x226E => 0x226F,
+0x226F => 0x226E,
+0x2270 => 0x2271,
+0x2271 => 0x2270,
+0x2272 => 0x2273,
+0x2273 => 0x2272,
+0x2274 => 0x2275,
+0x2275 => 0x2274,
+0x2276 => 0x2277,
+0x2277 => 0x2276,
+0x2278 => 0x2279,
+0x2279 => 0x2278,
+0x227A => 0x227B,
+0x227B => 0x227A,
+0x227C => 0x227D,
+0x227D => 0x227C,
+0x227E => 0x227F,
+0x227F => 0x227E,
+0x2280 => 0x2281,
+0x2281 => 0x2280,
+0x2282 => 0x2283,
+0x2283 => 0x2282,
+0x2284 => 0x2285,
+0x2285 => 0x2284,
+0x2286 => 0x2287,
+0x2287 => 0x2286,
+0x2288 => 0x2289,
+0x2289 => 0x2288,
+0x228A => 0x228B,
+0x228B => 0x228A,
+0x228F => 0x2290,
+0x2290 => 0x228F,
+0x2291 => 0x2292,
+0x2292 => 0x2291,
+0x2298 => 0x29B8,
+0x22A2 => 0x22A3,
+0x22A3 => 0x22A2,
+0x22A6 => 0x2ADE,
+0x22A8 => 0x2AE4,
+0x22A9 => 0x2AE3,
+0x22AB => 0x2AE5,
+0x22B0 => 0x22B1,
+0x22B1 => 0x22B0,
+0x22B2 => 0x22B3,
+0x22B3 => 0x22B2,
+0x22B4 => 0x22B5,
+0x22B5 => 0x22B4,
+0x22B6 => 0x22B7,
+0x22B7 => 0x22B6,
+0x22C9 => 0x22CA,
+0x22CA => 0x22C9,
+0x22CB => 0x22CC,
+0x22CC => 0x22CB,
+0x22CD => 0x2243,
+0x22D0 => 0x22D1,
+0x22D1 => 0x22D0,
+0x22D6 => 0x22D7,
+0x22D7 => 0x22D6,
+0x22D8 => 0x22D9,
+0x22D9 => 0x22D8,
+0x22DA => 0x22DB,
+0x22DB => 0x22DA,
+0x22DC => 0x22DD,
+0x22DD => 0x22DC,
+0x22DE => 0x22DF,
+0x22DF => 0x22DE,
+0x22E0 => 0x22E1,
+0x22E1 => 0x22E0,
+0x22E2 => 0x22E3,
+0x22E3 => 0x22E2,
+0x22E4 => 0x22E5,
+0x22E5 => 0x22E4,
+0x22E6 => 0x22E7,
+0x22E7 => 0x22E6,
+0x22E8 => 0x22E9,
+0x22E9 => 0x22E8,
+0x22EA => 0x22EB,
+0x22EB => 0x22EA,
+0x22EC => 0x22ED,
+0x22ED => 0x22EC,
+0x22F0 => 0x22F1,
+0x22F1 => 0x22F0,
+0x22F2 => 0x22FA,
+0x22F3 => 0x22FB,
+0x22F4 => 0x22FC,
+0x22F6 => 0x22FD,
+0x22F7 => 0x22FE,
+0x22FA => 0x22F2,
+0x22FB => 0x22F3,
+0x22FC => 0x22F4,
+0x22FD => 0x22F6,
+0x22FE => 0x22F7,
+0x2308 => 0x2309,
+0x2309 => 0x2308,
+0x230A => 0x230B,
+0x230B => 0x230A,
+0x2329 => 0x232A,
+0x232A => 0x2329,
+0x2768 => 0x2769,
+0x2769 => 0x2768,
+0x276A => 0x276B,
+0x276B => 0x276A,
+0x276C => 0x276D,
+0x276D => 0x276C,
+0x276E => 0x276F,
+0x276F => 0x276E,
+0x2770 => 0x2771,
+0x2771 => 0x2770,
+0x2772 => 0x2773,
+0x2773 => 0x2772,
+0x2774 => 0x2775,
+0x2775 => 0x2774,
+0x27C3 => 0x27C4,
+0x27C4 => 0x27C3,
+0x27C5 => 0x27C6,
+0x27C6 => 0x27C5,
+0x27D5 => 0x27D6,
+0x27D6 => 0x27D5,
+0x27DD => 0x27DE,
+0x27DE => 0x27DD,
+0x27E2 => 0x27E3,
+0x27E3 => 0x27E2,
+0x27E4 => 0x27E5,
+0x27E5 => 0x27E4,
+0x27E6 => 0x27E7,
+0x27E7 => 0x27E6,
+0x27E8 => 0x27E9,
+0x27E9 => 0x27E8,
+0x27EA => 0x27EB,
+0x27EB => 0x27EA,
+0x2983 => 0x2984,
+0x2984 => 0x2983,
+0x2985 => 0x2986,
+0x2986 => 0x2985,
+0x2987 => 0x2988,
+0x2988 => 0x2987,
+0x2989 => 0x298A,
+0x298A => 0x2989,
+0x298B => 0x298C,
+0x298C => 0x298B,
+0x298D => 0x2990,
+0x298E => 0x298F,
+0x298F => 0x298E,
+0x2990 => 0x298D,
+0x2991 => 0x2992,
+0x2992 => 0x2991,
+0x2993 => 0x2994,
+0x2994 => 0x2993,
+0x2995 => 0x2996,
+0x2996 => 0x2995,
+0x2997 => 0x2998,
+0x2998 => 0x2997,
+0x29B8 => 0x2298,
+0x29C0 => 0x29C1,
+0x29C1 => 0x29C0,
+0x29C4 => 0x29C5,
+0x29C5 => 0x29C4,
+0x29CF => 0x29D0,
+0x29D0 => 0x29CF,
+0x29D1 => 0x29D2,
+0x29D2 => 0x29D1,
+0x29D4 => 0x29D5,
+0x29D5 => 0x29D4,
+0x29D8 => 0x29D9,
+0x29D9 => 0x29D8,
+0x29DA => 0x29DB,
+0x29DB => 0x29DA,
+0x29F5 => 0x2215,
+0x29F8 => 0x29F9,
+0x29F9 => 0x29F8,
+0x29FC => 0x29FD,
+0x29FD => 0x29FC,
+0x2A2B => 0x2A2C,
+0x2A2C => 0x2A2B,
+0x2A2D => 0x2A2E,
+0x2A2E => 0x2A2D,
+0x2A34 => 0x2A35,
+0x2A35 => 0x2A34,
+0x2A3C => 0x2A3D,
+0x2A3D => 0x2A3C,
+0x2A64 => 0x2A65,
+0x2A65 => 0x2A64,
+0x2A79 => 0x2A7A,
+0x2A7A => 0x2A79,
+0x2A7D => 0x2A7E,
+0x2A7E => 0x2A7D,
+0x2A7F => 0x2A80,
+0x2A80 => 0x2A7F,
+0x2A81 => 0x2A82,
+0x2A82 => 0x2A81,
+0x2A83 => 0x2A84,
+0x2A84 => 0x2A83,
+0x2A8B => 0x2A8C,
+0x2A8C => 0x2A8B,
+0x2A91 => 0x2A92,
+0x2A92 => 0x2A91,
+0x2A93 => 0x2A94,
+0x2A94 => 0x2A93,
+0x2A95 => 0x2A96,
+0x2A96 => 0x2A95,
+0x2A97 => 0x2A98,
+0x2A98 => 0x2A97,
+0x2A99 => 0x2A9A,
+0x2A9A => 0x2A99,
+0x2A9B => 0x2A9C,
+0x2A9C => 0x2A9B,
+0x2AA1 => 0x2AA2,
+0x2AA2 => 0x2AA1,
+0x2AA6 => 0x2AA7,
+0x2AA7 => 0x2AA6,
+0x2AA8 => 0x2AA9,
+0x2AA9 => 0x2AA8,
+0x2AAA => 0x2AAB,
+0x2AAB => 0x2AAA,
+0x2AAC => 0x2AAD,
+0x2AAD => 0x2AAC,
+0x2AAF => 0x2AB0,
+0x2AB0 => 0x2AAF,
+0x2AB3 => 0x2AB4,
+0x2AB4 => 0x2AB3,
+0x2ABB => 0x2ABC,
+0x2ABC => 0x2ABB,
+0x2ABD => 0x2ABE,
+0x2ABE => 0x2ABD,
+0x2ABF => 0x2AC0,
+0x2AC0 => 0x2ABF,
+0x2AC1 => 0x2AC2,
+0x2AC2 => 0x2AC1,
+0x2AC3 => 0x2AC4,
+0x2AC4 => 0x2AC3,
+0x2AC5 => 0x2AC6,
+0x2AC6 => 0x2AC5,
+0x2ACD => 0x2ACE,
+0x2ACE => 0x2ACD,
+0x2ACF => 0x2AD0,
+0x2AD0 => 0x2ACF,
+0x2AD1 => 0x2AD2,
+0x2AD2 => 0x2AD1,
+0x2AD3 => 0x2AD4,
+0x2AD4 => 0x2AD3,
+0x2AD5 => 0x2AD6,
+0x2AD6 => 0x2AD5,
+0x2ADE => 0x22A6,
+0x2AE3 => 0x22A9,
+0x2AE4 => 0x22A8,
+0x2AE5 => 0x22AB,
+0x2AEC => 0x2AED,
+0x2AED => 0x2AEC,
+0x2AF7 => 0x2AF8,
+0x2AF8 => 0x2AF7,
+0x2AF9 => 0x2AFA,
+0x2AFA => 0x2AF9,
+0x2E02 => 0x2E03,
+0x2E03 => 0x2E02,
+0x2E04 => 0x2E05,
+0x2E05 => 0x2E04,
+0x2E09 => 0x2E0A,
+0x2E0A => 0x2E09,
+0x2E0C => 0x2E0D,
+0x2E0D => 0x2E0C,
+0x2E1C => 0x2E1D,
+0x2E1D => 0x2E1C,
+0x3008 => 0x3009,
+0x3009 => 0x3008,
+0x300A => 0x300B,
+0x300B => 0x300A,
+0x300C => 0x300D,
+0x300D => 0x300C,
+0x300E => 0x300F,
+0x300F => 0x300E,
+0x3010 => 0x3011,
+0x3011 => 0x3010,
+0x3014 => 0x3015,
+0x3015 => 0x3014,
+0x3016 => 0x3017,
+0x3017 => 0x3016,
+0x3018 => 0x3019,
+0x3019 => 0x3018,
+0x301A => 0x301B,
+0x301B => 0x301A,
+0x301D => 0x301E,
+0x301E => 0x301D,
+0xFE59 => 0xFE5A,
+0xFE5A => 0xFE59,
+0xFE5B => 0xFE5C,
+0xFE5C => 0xFE5B,
+0xFE5D => 0xFE5E,
+0xFE5E => 0xFE5D,
+0xFE64 => 0xFE65,
+0xFE65 => 0xFE64,
+0xFF08 => 0xFF09,
+0xFF09 => 0xFF08,
+0xFF1C => 0xFF1E,
+0xFF1E => 0xFF1C,
+0xFF3B => 0xFF3D,
+0xFF3D => 0xFF3B,
+0xFF5B => 0xFF5D,
+0xFF5D => 0xFF5B,
+0xFF5F => 0xFF60,
+0xFF60 => 0xFF5F,
+0xFF62 => 0xFF63,
+0xFF63 => 0xFF62);
+
+/**
+ * Arabic shape subtitutions
+ * char code => isolated, final, initial, medial
+ */
+$unicode_arlet = array(
+       1569    =>      array(65152),
+       1570    =>      array(65153, 65154, 65153, 65154),
+       1571    =>      array(65155, 65156, 65155, 65156),
+       1572    =>      array(65157, 65158),
+       1573    =>      array(65159, 65160, 65159, 65160),
+       1574    =>      array(65161, 65162, 65163, 65164),
+       1575    =>      array(65165, 65166, 65165, 65166),
+       1576    =>      array(65167, 65168, 65169, 65170),
+       1577    =>      array(65171, 65172),
+       1578    =>      array(65173, 65174, 65175, 65176),
+       1579    =>      array(65177, 65178, 65179, 65180),
+       1580    =>      array(65181, 65182, 65183, 65184),
+       1581    =>      array(65185, 65186, 65187, 65188),
+       1582    =>      array(65189, 65190, 65191, 65192),
+       1583    =>      array(65193, 65194, 65193, 65194),
+       1584    =>      array(65195, 65196, 65195, 65196),
+       1585    =>      array(65197, 65198, 65197, 65198),
+       1586    =>      array(65199, 65200, 65199, 65200),
+       1587    =>      array(65201, 65202, 65203, 65204),
+       1588    =>      array(65205, 65206, 65207, 65208),
+       1589    =>      array(65209, 65210, 65211, 65212),
+       1590    =>      array(65213, 65214, 65215, 65216),
+       1591    =>      array(65217, 65218, 65219, 65220),
+       1592    =>      array(65221, 65222, 65223, 65224),
+       1593    =>      array(65225, 65226, 65227, 65228),
+       1594    =>      array(65229, 65230, 65231, 65232),
+       1601    =>      array(65233, 65234, 65235, 65236),
+       1602    =>      array(65237, 65238, 65239, 65240),
+       1603    =>      array(65241, 65242, 65243, 65244),
+       1604    =>      array(65245, 65246, 65247, 65248),
+       1605    =>      array(65249, 65250, 65251, 65252),
+       1606    =>      array(65253, 65254, 65255, 65256),
+       1607    =>      array(65257, 65258, 65259, 65260),
+       1608    =>      array(65261, 65262, 65261, 65262),
+       1609    =>      array(65263, 65264, 64488, 64489),
+       1610    =>      array(65265, 65266, 65267, 65268),
+       1649    =>      array(64336, 64337),
+       1655    =>      array(64477),
+       1657    =>      array(64358, 64359, 64360, 64361),
+       1658    =>      array(64350, 64351, 64352, 64353),
+       1659    =>      array(64338, 64339, 64340, 64341),
+       1662    =>      array(64342, 64343, 64344, 64345),
+       1663    =>      array(64354, 64355, 64356, 64357),
+       1664    =>      array(64346, 64347, 64348, 64349),
+       1667    =>      array(64374, 64375, 64376, 64377),
+       1668    =>      array(64370, 64371, 64372, 64373),
+       1670    =>      array(64378, 64379, 64380, 64381),
+       1671    =>      array(64382, 64383, 64384, 64385),
+       1672    =>      array(64392, 64393),
+       1676    =>      array(64388, 64389),
+       1677    =>      array(64386, 64387),
+       1678    =>      array(64390, 64391),
+       1681    =>      array(64396, 64397),
+       1688    =>      array(64394, 64395, 64394, 64395),
+       1700    =>      array(64362, 64363, 64364, 64365),
+       1702    =>      array(64366, 64367, 64368, 64369),
+       1705    =>      array(64398, 64399, 64400, 64401),
+       1709    =>      array(64467, 64468, 64469, 64470),
+       1711    =>      array(64402, 64403, 64404, 64405),
+       1713    =>      array(64410, 64411, 64412, 64413),
+       1715    =>      array(64406, 64407, 64408, 64409),
+       1722    =>      array(64414, 64415),
+       1723    =>      array(64416, 64417, 64418, 64419),
+       1726    =>      array(64426, 64427, 64428, 64429),
+       1728    =>      array(64420, 64421),
+       1729    =>      array(64422, 64423, 64424, 64425),
+       1733    =>      array(64480, 64481),
+       1734    =>      array(64473, 64474),
+       1735    =>      array(64471, 64472),
+       1736    =>      array(64475, 64476),
+       1737    =>      array(64482, 64483),
+       1739    =>      array(64478, 64479),
+       1740    =>      array(64508, 64509, 64510, 64511),
+       1744    =>      array(64484, 64485, 64486, 64487),
+       1746    =>      array(64430, 64431),
+       1747    =>      array(64432, 64433)
+);
+
+/**
+ * Arabic laa letter
+ * char code => isolated, final, initial, medial
+ */
+$laa_array = array (
+       1570  => array(65269, 65270, 65269, 65270),
+       1571  => array(65271, 65272, 65271, 65272),
+       1573  => array(65273, 65274, 65273, 65274),
+       1575  => array(65275, 65276, 65275, 65276)
+);
+
+/**
+ * Array of character substitutions for sequences of two diacritics symbols starting with SHADDA (0651 HEX, 1617 DEC).
+ * Combining characters that can occur with Shadda (U0651) are placed in UE586-UE594.
+ * Putting the combining mark and shadda in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner.
+ * second NSM char code => substitution char
+ */
+$diacritics = array (
+       1612 => 64606, // Shadda + Dammatan
+       1613 => 64607, // Shadda + Kasratan
+       1614 => 64608, // Shadda + Fatha
+       1615 => 64609, // Shadda + Damma
+       1616 => 64610  // Shadda + Kasra
+);
+
+//============================================================+
+// END OF FILE
+//============================================================+
+?>
\ No newline at end of file