/* font.h - Font for PNG images */ /* libzint - the open source barcode library Copyright (C) 2008-2016 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ static const int ascii_font[] = { /* Each character is 7 x 14 pixels */ 0, 0, 8, 8, 8, 8, 8, 8, 8, 0, 8, 8, 0, 0, /* ! */ 0, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* " */ 0, 0, 20, 20, 20, 62, 20, 20, 62, 20, 20, 20, 0, 0, /* # */ 0, 0, 8, 60, 74, 74, 40, 28, 10, 74, 74, 60, 8, 0, /* $ */ 0, 0, 50, 74, 76, 56, 8, 16, 28, 50, 82, 76, 0, 0, /* % */ 0, 0, 24, 36, 36, 36, 24, 50, 74, 68, 76, 50, 0, 0, /* & */ 0, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ' */ 0, 2, 4, 8, 8, 16, 16, 16, 16, 16, 8, 8, 4, 2, /* ( */ 0, 32, 16, 8, 8, 4, 4, 4, 4, 4, 8, 8, 16, 32, /* ) */ 0, 0, 0, 0, 8, 42, 28, 8, 28, 42, 8, 0, 0, 0, /* * */ 0, 0, 0, 0, 8, 8, 8, 62, 8, 8, 8, 0, 0, 0, /* + */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 8, 16, /* , */ 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, /* - */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 28, 8, 0, /* . */ 0, 2, 2, 4, 4, 8, 8, 8, 16, 16, 32, 32, 64, 64, /* / */ 0, 0, 24, 36, 66, 66, 66, 66, 66, 66, 36, 24, 0, 0, /* 0 */ 0, 0, 8, 24, 40, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* 1 */ 0, 0, 60, 66, 66, 2, 4, 4, 8, 16, 32, 126, 0, 0, /* 2 */ 0, 0, 126, 2, 4, 8, 28, 2, 2, 66, 66, 60, 0, 0, /* 3 */ 0, 0, 4, 12, 20, 20, 36, 36, 68, 126, 4, 4, 0, 0, /* 4 */ 0, 0, 126, 64, 64, 124, 66, 2, 2, 66, 66, 60, 0, 0, /* 5 */ 0, 0, 28, 32, 64, 64, 92, 98, 66, 66, 66, 60, 0, 0, /* 6 */ 0, 0, 126, 2, 4, 4, 8, 8, 16, 16, 32, 32, 0, 0, /* 7 */ 0, 0, 60, 66, 66, 36, 24, 36, 66, 66, 66, 60, 0, 0, /* 8 */ 0, 0, 60, 66, 66, 66, 70, 58, 2, 66, 68, 56, 0, 0, /* 9 */ 0, 0, 0, 0, 8, 28, 8, 0, 0, 8, 28, 8, 0, 0, /* : */ 0, 0, 0, 0, 0, 24, 24, 0, 0, 24, 8, 8, 16, 0, /* ; */ 0, 0, 0, 2, 4, 8, 16, 32, 16, 8, 4, 2, 0, 0, /* < */ 0, 0, 0, 0, 0, 126, 0, 0, 126, 0, 0, 0, 0, 0, /* = */ 0, 0, 0, 32, 16, 8, 4, 2, 4, 8, 16, 32, 0, 0, /* > */ 0, 0, 60, 66, 66, 4, 8, 8, 8, 0, 8, 8, 0, 0, /* ? */ 0, 0, 28, 34, 78, 82, 82, 82, 82, 78, 32, 30, 0, 0, /* @ */ 0, 0, 24, 36, 66, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* A */ 0, 0, 120, 68, 66, 68, 120, 68, 66, 66, 68, 120, 0, 0, /* B */ 0, 0, 60, 66, 66, 64, 64, 64, 64, 66, 66, 60, 0, 0, /* C */ 0, 0, 120, 68, 66, 66, 66, 66, 66, 66, 68, 120, 0, 0, /* D */ 0, 0, 126, 64, 64, 64, 120, 64, 64, 64, 64, 126, 0, 0, /* E */ 0, 0, 126, 64, 64, 64, 120, 64, 64, 64, 64, 64, 0, 0, /* F */ 0, 0, 60, 66, 66, 64, 64, 78, 66, 66, 70, 58, 0, 0, /* G */ 0, 0, 66, 66, 66, 66, 126, 66, 66, 66, 66, 66, 0, 0, /* H */ 0, 0, 62, 8, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* I */ 0, 0, 14, 4, 4, 4, 4, 4, 4, 68, 68, 56, 0, 0, /* J */ 0, 0, 66, 68, 72, 80, 96, 80, 72, 68, 66, 66, 0, 0, /* K */ 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 126, 0, 0, /* L */ 0, 0, 66, 102, 102, 90, 90, 66, 66, 66, 66, 66, 0, 0, /* M */ 0, 0, 66, 66, 98, 98, 82, 74, 70, 70, 66, 66, 0, 0, /* N */ 0, 0, 60, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* O */ 0, 0, 124, 66, 66, 66, 66, 124, 64, 64, 64, 64, 0, 0, /* P */ 0, 0, 60, 66, 66, 66, 66, 66, 114, 74, 70, 60, 4, 2, /* Q */ 0, 0, 124, 66, 66, 66, 66, 124, 72, 68, 66, 66, 0, 0, /* R */ 0, 0, 60, 66, 66, 64, 48, 12, 2, 66, 66, 60, 0, 0, /* S */ 0, 0, 127, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, /* T */ 0, 0, 66, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* U */ 0, 0, 66, 66, 66, 66, 36, 36, 36, 24, 24, 24, 0, 0, /* V */ 0, 0, 34, 34, 34, 34, 34, 34, 42, 42, 42, 20, 0, 0, /* W */ 0, 0, 66, 66, 36, 36, 24, 24, 36, 36, 66, 66, 0, 0, /* X */ 0, 0, 34, 34, 34, 20, 20, 8, 8, 8, 8, 8, 0, 0, /* Y */ 0, 0, 126, 2, 4, 8, 8, 16, 32, 32, 64, 126, 0, 0, /* Z */ 0, 30, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 30, /* [ */ 0, 64, 64, 32, 32, 16, 16, 16, 8, 8, 4, 4, 2, 2, /* \ */ 0, 60, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 60, /* ] */ 0, 24, 36, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ^ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 126, /* _ */ 0, 16, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ` */ 0, 0, 0, 0, 0, 60, 66, 2, 62, 66, 66, 62, 0, 0, /* a */ 0, 0, 64, 64, 64, 92, 98, 66, 66, 66, 98, 92, 0, 0, /* b */ 0, 0, 0, 0, 0, 60, 66, 64, 64, 64, 66, 60, 0, 0, /* c */ 0, 0, 2, 2, 2, 58, 70, 66, 66, 66, 70, 58, 0, 0, /* d */ 0, 0, 0, 0, 0, 60, 66, 66, 126, 64, 66, 60, 0, 0, /* e */ 0, 0, 12, 18, 16, 16, 124, 16, 16, 16, 16, 16, 0, 0, /* f */ 0, 0, 0, 0, 0, 58, 68, 68, 68, 56, 32, 92, 66, 60, /* g */ 0, 0, 64, 64, 64, 92, 98, 66, 66, 66, 66, 66, 0, 0, /* h */ 0, 0, 8, 8, 0, 24, 8, 8, 8, 8, 8, 62, 0, 0, /* i */ 0, 0, 2, 2, 0, 6, 2, 2, 2, 2, 2, 34, 34, 28, /* j */ 0, 0, 64, 64, 64, 68, 72, 80, 112, 72, 68, 66, 0, 0, /* k */ 0, 0, 24, 8, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* l */ 0, 0, 0, 0, 0, 52, 42, 42, 42, 42, 42, 34, 0, 0, /* m */ 0, 0, 0, 0, 0, 92, 98, 66, 66, 66, 66, 66, 0, 0, /* n */ 0, 0, 0, 0, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0, /* o */ 0, 0, 0, 0, 0, 92, 98, 66, 66, 66, 98, 92, 64, 64, /* p */ 0, 0, 0, 0, 0, 58, 70, 66, 66, 66, 70, 58, 2, 2, /* q */ 0, 0, 0, 0, 0, 92, 98, 66, 64, 64, 64, 64, 0, 0, /* r */ 0, 0, 0, 0, 0, 60, 66, 32, 24, 4, 66, 60, 0, 0, /* s */ 0, 0, 16, 16, 16, 124, 16, 16, 16, 16, 18, 12, 0, 0, /* t */ 0, 0, 0, 0, 0, 66, 66, 66, 66, 66, 70, 58, 0, 0, /* u */ 0, 0, 0, 0, 0, 34, 34, 34, 20, 20, 8, 8, 0, 0, /* v */ 0, 0, 0, 0, 0, 34, 34, 42, 42, 42, 42, 20, 0, 0, /* w */ 0, 0, 0, 0, 0, 66, 66, 36, 24, 36, 66, 66, 0, 0, /* x */ 0, 0, 0, 0, 0, 66, 66, 66, 66, 70, 58, 2, 66, 60, /* y */ 0, 0, 0, 0, 0, 126, 4, 8, 16, 16, 32, 126, 0, 0, /* z */ 0, 6, 8, 8, 8, 8, 8, 16, 8, 8, 8, 8, 8, 6, /* { */ 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, /* | */ 0, 48, 8, 8, 8, 8, 8, 4, 8, 8, 8, 8, 8, 48, /* } */ 0, 32, 82, 74, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ~ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*  */ 0, 0, 8, 8, 0, 8, 8, 8, 8, 8, 8, 8, 0, 0, /* ¡ */ 0, 0, 0, 0, 16, 60, 82, 80, 80, 80, 82, 60, 16, 0, /* ¢ */ 0, 0, 0, 12, 18, 16, 16, 60, 16, 16, 60, 18, 0, 0, /* £ */ 0, 0, 0, 0, 66, 60, 36, 36, 60, 66, 0, 0, 0, 0, /* ¤ */ 0, 0, 34, 20, 20, 8, 62, 8, 62, 8, 8, 8, 0, 0, /* ¥ */ 0, 0, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 0, 0, /* ¦ */ 0, 60, 66, 32, 24, 36, 66, 36, 24, 4, 66, 60, 0, 0, /* § */ 0, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ¨ */ 0, 60, 66, 90, 102, 98, 98, 98, 102, 90, 66, 60, 0, 0, /* © */ 0, 28, 34, 30, 34, 38, 26, 0, 62, 0, 0, 0, 0, 0, /* ª */ 0, 0, 0, 0, 0, 10, 20, 40, 80, 40, 20, 10, 0, 0, /* « */ 0, 0, 0, 0, 0, 0, 0, 0, 62, 2, 2, 2, 0, 0, /* ¬ */ 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, /* ­ */ 0, 60, 66, 122, 102, 102, 122, 102, 102, 102, 66, 60, 0, 0, /* ® */ 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ¯ */ 0, 24, 36, 36, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ° */ 0, 0, 0, 0, 0, 0, 8, 8, 62, 8, 8, 62, 0, 0, /* ± */ 0, 24, 36, 4, 8, 16, 32, 60, 0, 0, 0, 0, 0, 0, /* ² */ 0, 24, 36, 4, 24, 4, 36, 24, 0, 0, 0, 0, 0, 0, /* ³ */ 0, 4, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ´ */ 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 54, 42, 32, 32, /* µ */ 0, 0, 30, 42, 42, 42, 42, 26, 10, 10, 10, 10, 10, 14, /* ¶ */ 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, /* · */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 16, /* ¸ */ 0, 8, 24, 8, 8, 8, 8, 28, 0, 0, 0, 0, 0, 0, /* ¹ */ 0, 0, 24, 36, 36, 24, 0, 60, 0, 0, 0, 0, 0, 0, /* º */ 0, 0, 0, 0, 0, 80, 40, 20, 10, 20, 40, 80, 0, 0, /* » */ 0, 0, 32, 98, 36, 36, 40, 18, 22, 42, 78, 66, 0, 0, /* ¼ */ 0, 0, 32, 98, 36, 36, 40, 20, 26, 34, 68, 78, 0, 0, /* ½ */ 0, 0, 98, 18, 36, 24, 104, 18, 38, 42, 78, 2, 0, 0, /* ¾ */ 0, 0, 0, 16, 16, 0, 16, 16, 16, 16, 32, 66, 66, 60, /* ¿ */ 16, 8, 0, 24, 36, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* À */ 8, 16, 0, 24, 36, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* Á */ 24, 36, 0, 24, 36, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* Â */ 50, 76, 0, 24, 36, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* Ã */ 0, 36, 0, 24, 36, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* Ä */ 0, 24, 36, 24, 36, 66, 66, 126, 66, 66, 66, 66, 0, 0, /* Å */ 0, 0, 30, 40, 72, 72, 126, 72, 72, 72, 72, 78, 0, 0, /* Æ */ 0, 0, 60, 66, 66, 64, 64, 64, 64, 66, 66, 60, 8, 16, /* Ç */ 16, 8, 0, 126, 64, 64, 64, 124, 64, 64, 64, 126, 0, 0, /* È */ 8, 16, 0, 126, 64, 64, 64, 124, 64, 64, 64, 126, 0, 0, /* É */ 24, 36, 0, 126, 64, 64, 64, 124, 64, 64, 64, 126, 0, 0, /* Ê */ 0, 36, 0, 126, 64, 64, 64, 124, 64, 64, 64, 126, 0, 0, /* Ë */ 16, 8, 0, 62, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* Ì */ 4, 8, 0, 62, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* Í */ 8, 20, 0, 62, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* Î */ 0, 20, 0, 62, 8, 8, 8, 8, 8, 8, 8, 62, 0, 0, /* Ï */ 0, 0, 60, 34, 33, 33, 121, 33, 33, 33, 34, 60, 0, 0, /* Ð */ 50, 76, 0, 98, 98, 82, 82, 74, 74, 74, 70, 70, 0, 0, /* Ñ */ 16, 8, 0, 60, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ò */ 8, 16, 0, 60, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ó */ 24, 36, 0, 60, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ô */ 50, 76, 0, 60, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Õ */ 0, 36, 0, 60, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ö */ 0, 0, 0, 0, 0, 65, 34, 20, 8, 20, 34, 65, 0, 0, /* × */ 2, 2, 60, 70, 74, 74, 74, 82, 82, 82, 98, 60, 64, 64, /* Ø */ 16, 8, 0, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ù */ 8, 16, 0, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ú */ 24, 36, 0, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Û */ 0, 36, 0, 66, 66, 66, 66, 66, 66, 66, 66, 60, 0, 0, /* Ü */ 4, 8, 0, 34, 34, 20, 20, 8, 8, 8, 8, 8, 0, 0, /* Ý */ 0, 0, 64, 64, 124, 66, 66, 66, 66, 124, 64, 64, 0, 0, /* Þ */ 0, 0, 24, 36, 36, 36, 56, 36, 34, 34, 34, 124, 0, 0, /* ß */ 0, 0, 16, 8, 0, 60, 66, 14, 50, 66, 70, 58, 0, 0, /* à */ 0, 0, 4, 8, 0, 60, 66, 14, 50, 66, 70, 58, 0, 0, /* á */ 0, 0, 24, 36, 0, 60, 66, 14, 50, 66, 70, 58, 0, 0, /* â */ 0, 0, 50, 76, 0, 60, 66, 14, 50, 66, 70, 58, 0, 0, /* ã */ 0, 0, 0, 36, 0, 60, 66, 14, 50, 66, 70, 58, 0, 0, /* ä */ 0, 24, 36, 24, 0, 60, 66, 14, 50, 66, 70, 58, 0, 0, /* å */ 0, 0, 0, 0, 0, 62, 73, 25, 47, 72, 73, 62, 0, 0, /* æ */ 0, 0, 0, 0, 0, 60, 66, 64, 64, 64, 66, 60, 8, 16, /* ç */ 0, 0, 16, 8, 0, 60, 66, 66, 126, 64, 66, 60, 0, 0, /* è */ 0, 0, 8, 16, 0, 60, 66, 66, 126, 64, 66, 60, 0, 0, /* é */ 0, 0, 24, 36, 0, 60, 66, 66, 126, 64, 66, 60, 0, 0, /* ê */ 0, 0, 0, 36, 0, 60, 66, 66, 126, 64, 66, 60, 0, 0, /* ë */ 0, 0, 16, 8, 0, 24, 8, 8, 8, 8, 8, 62, 0, 0, /* ì */ 0, 0, 4, 8, 0, 24, 8, 8, 8, 8, 8, 62, 0, 0, /* í */ 0, 0, 24, 36, 0, 24, 8, 8, 8, 8, 8, 62, 0, 0, /* î */ 0, 0, 0, 20, 0, 24, 8, 8, 8, 8, 8, 62, 0, 0, /* ï */ 0, 20, 8, 20, 2, 30, 34, 34, 34, 34, 34, 28, 0, 0, /* ð */ 0, 0, 50, 76, 0, 92, 98, 66, 66, 66, 66, 66, 0, 0, /* ñ */ 0, 0, 16, 8, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0, /* ò */ 0, 0, 8, 16, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0, /* ó */ 0, 0, 24, 36, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0, /* ô */ 0, 0, 50, 76, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0, /* õ */ 0, 0, 0, 36, 0, 60, 66, 66, 66, 66, 66, 60, 0, 0, /* ö */ 0, 0, 0, 0, 0, 0, 0, 24, 0, 126, 0, 24, 0, 0, /* ÷ */ 0, 0, 0, 2, 4, 60, 74, 74, 82, 82, 98, 60, 64, 64, /* ø */ 0, 0, 16, 8, 0, 66, 66, 66, 66, 66, 70, 58, 0, 0, /* ù */ 0, 0, 8, 16, 0, 66, 66, 66, 66, 66, 70, 58, 0, 0, /* ú */ 0, 0, 24, 36, 0, 66, 66, 66, 66, 66, 70, 58, 0, 0, /* û */ 0, 0, 0, 36, 0, 66, 66, 66, 66, 66, 70, 58, 0, 0, /* ü */ 0, 0, 8, 16, 0, 66, 66, 34, 36, 20, 28, 8, 72, 48, /* ý */ 0, 0, 64, 64, 64, 92, 98, 66, 66, 66, 98, 92, 64, 64, /* þ */ 0, 0, 0, 36, 0, 66, 66, 34, 36, 20, 28, 8, 72, 48, /* ÿ */ }; static const int small_font[] = { /* Each character is 5 x 9 pixels */ 0, 2, 2, 2, 2, 0, 2, 0, 0, /* ! */ 0, 5, 5, 5, 0, 0, 0, 0, 0, /* " */ 0, 0, 5, 15, 5, 15, 5, 0, 0, /* # */ 0, 0, 7, 26, 7, 18, 7, 0, 0, /* $ */ 0, 8, 9, 2, 4, 25, 1, 0, 0, /* % */ 0, 0, 4, 10, 4, 10, 5, 0, 0, /* & */ 0, 2, 2, 2, 0, 0, 0, 0, 0, /* ' */ 0, 2, 4, 4, 4, 4, 2, 0, 0, /* ( */ 0, 4, 2, 2, 2, 2, 4, 0, 0, /* ) */ 0, 0, 5, 2, 7, 2, 5, 0, 0, /* * */ 0, 0, 2, 2, 15, 2, 2, 0, 0, /* + */ 0, 0, 0, 0, 16, 3, 2, 4, 0, /* , */ 0, 0, 0, 0, 15, 0, 0, 0, 0, /* - */ 0, 0, 0, 0, 0, 6, 6, 0, 0, /* . */ 0, 0, 1, 2, 4, 8, 0, 0, 0, /* / */ 0, 2, 5, 5, 5, 5, 2, 0, 0, /* 0 */ 0, 2, 6, 2, 2, 2, 7, 0, 0, /* 1 */ 0, 6, 9, 1, 2, 4, 15, 0, 0, /* 2 */ 0, 15, 1, 6, 1, 9, 6, 0, 0, /* 3 */ 0, 2, 6, 10, 15, 2, 2, 0, 0, /* 4 */ 0, 15, 8, 14, 1, 9, 6, 0, 0, /* 5 */ 0, 6, 8, 14, 9, 9, 6, 0, 0, /* 6 */ 0, 15, 1, 2, 2, 4, 4, 0, 0, /* 7 */ 0, 6, 9, 6, 9, 9, 6, 0, 0, /* 8 */ 0, 6, 9, 9, 7, 1, 6, 0, 0, /* 9 */ 0, 0, 6, 6, 0, 6, 6, 0, 0, /* : */ 0, 0, 6, 6, 0, 6, 4, 8, 0, /* ; */ 0, 0, 1, 2, 4, 2, 1, 0, 0, /* < */ 0, 0, 0, 15, 0, 15, 0, 0, 0, /* = */ 0, 0, 4, 2, 1, 2, 4, 0, 0, /* > */ 0, 2, 5, 1, 2, 0, 2, 0, 0, /* ? */ 0, 6, 9, 11, 11, 8, 6, 0, 0, /* @ */ 0, 6, 9, 9, 15, 9, 9, 0, 0, /* A */ 0, 14, 9, 14, 9, 9, 14, 0, 0, /* B */ 0, 6, 9, 8, 8, 9, 6, 0, 0, /* C */ 0, 14, 9, 9, 9, 9, 14, 0, 0, /* D */ 0, 15, 8, 14, 8, 8, 15, 0, 0, /* E */ 0, 15, 8, 14, 8, 8, 8, 0, 0, /* F */ 0, 6, 9, 8, 11, 9, 7, 0, 0, /* G */ 0, 9, 9, 15, 9, 9, 9, 0, 0, /* H */ 0, 7, 2, 2, 2, 2, 7, 0, 0, /* I */ 0, 1, 1, 1, 1, 9, 6, 0, 0, /* J */ 0, 9, 10, 12, 12, 10, 9, 0, 0, /* K */ 0, 8, 8, 8, 8, 8, 15, 0, 0, /* L */ 0, 9, 15, 15, 9, 9, 9, 0, 0, /* M */ 0, 9, 13, 13, 11, 11, 9, 0, 0, /* N */ 0, 6, 9, 9, 9, 9, 6, 0, 0, /* O */ 0, 14, 9, 9, 14, 8, 8, 0, 0, /* P */ 0, 6, 9, 9, 9, 13, 6, 1, 0, /* Q */ 0, 14, 9, 9, 14, 10, 9, 0, 0, /* R */ 0, 6, 9, 4, 2, 9, 6, 0, 0, /* S */ 0, 7, 2, 2, 2, 2, 2, 0, 0, /* T */ 0, 9, 9, 9, 9, 9, 6, 0, 0, /* U */ 0, 9, 9, 9, 9, 6, 6, 0, 0, /* V */ 0, 9, 9, 9, 15, 15, 9, 0, 0, /* W */ 0, 9, 9, 6, 6, 9, 9, 0, 0, /* X */ 0, 5, 5, 5, 2, 2, 2, 0, 0, /* Y */ 0, 15, 1, 2, 4, 8, 15, 0, 0, /* Z */ 0, 7, 4, 4, 4, 4, 7, 0, 0, /* [ */ 0, 0, 8, 4, 2, 1, 0, 0, 0, /* \ */ 0, 7, 1, 1, 1, 1, 7, 0, 0, /* ] */ 0, 2, 5, 0, 0, 0, 0, 0, 0, /* ^ */ 0, 0, 0, 0, 0, 0, 15, 0, 0, /* _ */ 0, 4, 2, 0, 0, 0, 0, 0, 0, /* ` */ 0, 0, 0, 7, 9, 11, 5, 0, 0, /* a */ 0, 8, 8, 14, 9, 9, 14, 0, 0, /* b */ 0, 0, 0, 6, 8, 8, 6, 0, 0, /* c */ 0, 1, 1, 7, 9, 9, 7, 0, 0, /* d */ 0, 0, 0, 6, 11, 12, 6, 0, 0, /* e */ 0, 2, 5, 4, 14, 4, 4, 0, 0, /* f */ 0, 0, 0, 7, 9, 6, 8, 7, 0, /* g */ 0, 8, 8, 14, 9, 9, 9, 0, 0, /* h */ 0, 2, 0, 6, 2, 2, 7, 0, 0, /* i */ 0, 1, 0, 1, 1, 1, 5, 2, 0, /* j */ 0, 8, 8, 10, 12, 10, 9, 0, 0, /* k */ 0, 6, 2, 2, 2, 2, 7, 0, 0, /* l */ 0, 0, 0, 10, 15, 9, 9, 0, 0, /* m */ 0, 0, 0, 14, 9, 9, 9, 0, 0, /* n */ 0, 0, 0, 6, 9, 9, 6, 0, 0, /* o */ 0, 0, 0, 14, 9, 9, 14, 8, 0, /* p */ 0, 0, 0, 7, 9, 9, 7, 1, 0, /* q */ 0, 0, 0, 14, 9, 8, 8, 0, 0, /* r */ 0, 0, 0, 7, 12, 3, 14, 0, 0, /* s */ 0, 4, 4, 14, 4, 4, 3, 0, 0, /* t */ 0, 0, 0, 9, 9, 9, 7, 0, 0, /* u */ 0, 0, 0, 5, 5, 5, 2, 0, 0, /* v */ 0, 0, 0, 9, 9, 15, 15, 0, 0, /* w */ 0, 0, 0, 9, 6, 6, 9, 0, 0, /* x */ 0, 0, 0, 9, 9, 5, 2, 4, 0, /* y */ 0, 0, 0, 15, 2, 4, 15, 0, 0, /* z */ 0, 1, 2, 6, 2, 2, 1, 0, 0, /* { */ 0, 2, 2, 2, 2, 2, 2, 0, 0, /* | */ 0, 4, 2, 3, 2, 2, 4, 0, 0, /* } */ 0, 5, 10, 0, 0, 0, 0, 0, 0, /* ~ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, /*  */ 0, 2, 0, 2, 2, 2, 2, 0, 0, /* ¡ */ 0, 0, 2, 7, 10, 10, 7, 2, 0, /* ¢ */ 0, 0, 3, 4, 14, 4, 11, 0, 0, /* £ */ 0, 0, 8, 7, 5, 7, 8, 0, 0, /* ¤ */ 0, 5, 21, 2, 7, 2, 18, 0, 0, /* ¥ */ 0, 0, 2, 2, 0, 2, 2, 0, 0, /* ¦ */ 0, 3, 4, 6, 5, 3, 1, 6, 0, /* § */ 0, 5, 0, 0, 0, 0, 0, 0, 0, /* ¨ */ 0, 7, 8, 10, 12, 10, 8, 7, 0, /* © */ 0, 6, 26, 22, 16, 16, 16, 0, 0, /* ª */ 0, 0, 0, 4, 9, 4, 0, 0, 0, /* « */ 0, 0, 0, 16, 15, 17, 0, 0, 0, /* ¬ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ­ */ 0, 7, 8, 14, 12, 12, 8, 7, 0, /* ® */ 0, 15, 16, 16, 16, 16, 16, 0, 0, /* ¯ */ 0, 2, 5, 2, 0, 0, 0, 0, 0, /* ° */ 0, 2, 2, 15, 2, 2, 15, 0, 0, /* ± */ 0, 6, 2, 20, 6, 0, 16, 0, 0, /* ² */ 0, 6, 6, 2, 6, 0, 0, 0, 0, /* ³ */ 0, 2, 4, 0, 0, 0, 0, 0, 0, /* ´ */ 0, 0, 0, 9, 9, 9, 14, 8, 0, /* µ */ 0, 7, 13, 13, 5, 5, 5, 0, 0, /* ¶ */ 0, 0, 0, 6, 6, 0, 0, 0, 0, /* · */ 0, 0, 0, 0, 0, 0, 2, 4, 0, /* ¸ */ 0, 2, 6, 2, 7, 0, 0, 0, 0, /* ¹ */ 0, 4, 10, 4, 0, 0, 0, 0, 0, /* º */ 0, 0, 0, 9, 4, 9, 0, 0, 0, /* » */ 0, 8, 8, 8, 25, 3, 7, 1, 0, /* ¼ */ 0, 8, 8, 8, 11, 1, 2, 3, 0, /* ½ */ 0, 12, 12, 4, 13, 3, 7, 1, 0, /* ¾ */ 0, 2, 0, 2, 4, 5, 2, 0, 0, /* ¿ */ 0, 6, 9, 9, 15, 9, 9, 0, 0, /* À */ 0, 6, 9, 9, 15, 9, 9, 0, 0, /* Á */ 0, 6, 9, 9, 15, 9, 9, 0, 0, /* Â */ 0, 6, 9, 9, 15, 9, 9, 0, 0, /* Ã */ 0, 9, 6, 9, 15, 9, 9, 0, 0, /* Ä */ 0, 6, 6, 9, 15, 9, 9, 0, 0, /* Å */ 0, 7, 10, 11, 14, 10, 11, 0, 0, /* Æ */ 0, 6, 9, 8, 8, 9, 6, 4, 0, /* Ç */ 0, 15, 8, 14, 8, 8, 15, 0, 0, /* È */ 0, 15, 8, 14, 8, 8, 15, 0, 0, /* É */ 0, 15, 8, 14, 8, 8, 15, 0, 0, /* Ê */ 0, 15, 8, 14, 8, 8, 15, 0, 0, /* Ë */ 0, 7, 2, 2, 2, 2, 7, 0, 0, /* Ì */ 0, 7, 2, 2, 2, 2, 7, 0, 0, /* Í */ 0, 7, 2, 2, 2, 2, 7, 0, 0, /* Î */ 0, 7, 2, 2, 2, 2, 7, 0, 0, /* Ï */ 0, 14, 5, 13, 5, 5, 14, 0, 0, /* Ð */ 0, 11, 9, 13, 11, 11, 9, 0, 0, /* Ñ */ 0, 6, 9, 9, 9, 9, 6, 0, 0, /* Ò */ 0, 6, 9, 9, 9, 9, 6, 0, 0, /* Ó */ 0, 6, 9, 9, 9, 9, 6, 0, 0, /* Ô */ 0, 6, 9, 9, 9, 9, 6, 0, 0, /* Õ */ 0, 9, 6, 9, 9, 9, 6, 0, 0, /* Ö */ 0, 0, 0, 9, 6, 6, 9, 0, 0, /* × */ 0, 7, 11, 11, 13, 13, 14, 0, 0, /* Ø */ 0, 9, 9, 9, 9, 9, 6, 0, 0, /* Ù */ 0, 9, 9, 9, 9, 9, 6, 0, 0, /* Ú */ 0, 9, 9, 9, 9, 9, 6, 0, 0, /* Û */ 0, 9, 0, 9, 9, 9, 6, 0, 0, /* Ü */ 0, 5, 5, 5, 2, 2, 2, 0, 0, /* Ý */ 0, 8, 14, 9, 14, 8, 8, 0, 0, /* Þ */ 0, 6, 9, 10, 9, 9, 10, 0, 0, /* ß */ 0, 4, 2, 7, 9, 11, 5, 0, 0, /* à */ 0, 2, 4, 7, 9, 11, 5, 0, 0, /* á */ 0, 2, 5, 7, 9, 11, 5, 0, 0, /* â */ 0, 5, 10, 7, 9, 11, 5, 0, 0, /* ã */ 0, 5, 0, 7, 9, 11, 5, 0, 0, /* ä */ 0, 6, 6, 7, 9, 11, 5, 0, 0, /* å */ 0, 0, 0, 7, 11, 10, 7, 0, 0, /* æ */ 0, 0, 0, 3, 4, 4, 3, 2, 0, /* ç */ 0, 4, 2, 6, 11, 12, 6, 0, 0, /* è */ 0, 2, 4, 6, 11, 12, 6, 0, 0, /* é */ 0, 4, 10, 6, 11, 12, 6, 0, 0, /* ê */ 0, 10, 0, 6, 11, 12, 6, 0, 0, /* ë */ 0, 4, 2, 6, 2, 2, 7, 0, 0, /* ì */ 0, 2, 4, 6, 2, 2, 7, 0, 0, /* í */ 0, 2, 5, 6, 2, 2, 7, 0, 0, /* î */ 0, 5, 0, 6, 2, 2, 7, 0, 0, /* ï */ 0, 4, 3, 6, 9, 9, 6, 0, 0, /* ð */ 0, 5, 10, 14, 9, 9, 9, 0, 0, /* ñ */ 0, 4, 2, 6, 9, 9, 6, 0, 0, /* ò */ 0, 2, 4, 6, 9, 9, 6, 0, 0, /* ó */ 0, 6, 0, 6, 9, 9, 6, 0, 0, /* ô */ 0, 5, 10, 6, 9, 9, 6, 0, 0, /* õ */ 0, 5, 0, 6, 9, 9, 6, 0, 0, /* ö */ 0, 0, 6, 0, 15, 0, 6, 0, 0, /* ÷ */ 0, 0, 0, 7, 11, 13, 14, 0, 0, /* ø */ 0, 4, 2, 9, 9, 9, 7, 0, 0, /* ù */ 0, 2, 4, 9, 9, 9, 7, 0, 0, /* ú */ 0, 6, 0, 9, 9, 9, 7, 0, 0, /* û */ 0, 5, 0, 9, 9, 9, 7, 0, 0, /* ü */ 0, 2, 4, 9, 9, 5, 2, 4, 0, /* ý */ 0, 0, 8, 14, 9, 9, 14, 8, 0, /* þ */ 0, 5, 0, 9, 9, 5, 2, 4, 0, /* ÿ */ };