├── Makefile ├── README.md ├── dictree ├── classmap.cpp ├── flexTree.cpp ├── lidstree.cpp ├── mixTypes.cpp ├── mxTables.cpp └── stemtree.cpp ├── expected └── rusmorph.out ├── include ├── mlma1049.h └── typedefs.h ├── libdict ├── chartype.cpp ├── mlmadefs.h ├── mlmamain.cpp └── namespace.h ├── rusmorph--1.0.sql ├── rusmorph.c ├── rusmorph.control ├── sql └── rusmorph.sql └── xmorph ├── capsheme.cpp ├── capsheme.h ├── flexmake.h ├── gramlist.h ├── grammap.h ├── lemmatiz.cpp ├── lemmatiz.h ├── scandict.h ├── scanlist.h ├── typedefs.h ├── wildscan.cpp └── wildscan.h /Makefile: -------------------------------------------------------------------------------- 1 | # contrib/rusmorph/Makefile 2 | 3 | MODULE_big = rusmorph 4 | OBJS = rusmorph.o libdict/chartype.o libdict/mlmamain.o xmorph/wildscan.o xmorph/capsheme.o xmorph/lemmatiz.o dictree/lidstree.o dictree/mixTypes.o dictree/stemtree.o dictree/flexTree.o dictree/classmap.o dictree/mxTables.o $(WIN32RES) 5 | 6 | EXTENSION = rusmorph 7 | DATA = rusmorph--1.0.sql 8 | PGFILEDESC = "rusmorph - add-on dictionary template for full-text search" 9 | 10 | REGRESS = rusmorph 11 | 12 | CUSTOM_COPT = -Iinclude 13 | 14 | CXXFLAGS = -Wall -g -O2 -fpic -std=c++11 -Ilibdict 15 | 16 | ifdef USE_PGXS 17 | PG_CONFIG = pg_config 18 | PGXS := $(shell $(PG_CONFIG) --pgxs) 19 | include $(PGXS) 20 | else 21 | subdir = contrib/rusmorph 22 | top_builddir = ../.. 23 | include $(top_builddir)/src/Makefile.global 24 | include $(top_srcdir)/contrib/contrib-global.mk 25 | endif 26 | 27 | override COMPILER := g++ 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is Russian morphological dictionary (rusmorph) for Postgres based on libmorph library: 2 | https://github.com/big-keva/libmorph 3 | -------------------------------------------------------------------------------- /dictree/classmap.cpp: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | 3 | libmorphrus - dictiorary-based morphological analyser for Russian. 4 | Copyright (C) 1994-2016 Andrew Kovalenko aka Keva 5 | 6 | This program is free software; you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation; either version 2 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License along 17 | with this program; if not, write to the Free Software Foundation, Inc., 18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | 20 | Contacts: 21 | email: keva@meta.ua, keva@rambler.ru 22 | Skype: big_keva 23 | Phone: +7(495)648-4058, +7(926)513-2991 24 | 25 | ******************************************************************************/ 26 | #include "namespace.h" 27 | #include "mlmadefs.h" 28 | 29 | namespace __libmorphrus__ 30 | { 31 | 32 | unsigned char const classmap[] = 33 | { 34 | 0x01,0x20,0x01,0x00,0x01,0x61,0x01,0x00,0x8a,0x03,0x01,0x20, 35 | 0x42,0x00,0x01,0x20,0x88,0x00,0x01,0x20,0xb3,0x00,0x01,0x20, 36 | 0xf4,0x00,0x01,0x20,0x39,0x01,0x01,0x20,0x7f,0x01,0x01,0x20, 37 | 0xc5,0x01,0x01,0x20,0x16,0x02,0x01,0x20,0x57,0x02,0x01,0x20, 38 | 0x5b,0x02,0x01,0x20,0x9c,0x02,0x01,0x20,0xa0,0x02,0x01,0x20, 39 | 0xe6,0x02,0x01,0x20,0x11,0x03,0x01,0x20,0x56,0x03,0x01,0x20, 40 | 0x9b,0x03,0x01,0x20,0xe0,0x03,0x01,0x20,0xe4,0x03,0x01,0x20, 41 | 0x31,0x04,0x01,0x20,0x71,0x04,0x01,0x20,0xb7,0x04,0x01,0x20, 42 | 0x02,0x05,0x01,0x20,0x43,0x05,0x01,0x20,0x51,0x05,0x01,0x20, 43 | 0xac,0x05,0x01,0x20,0xae,0x05,0x01,0x20,0xb2,0x05,0x01,0x20, 44 | 0x03,0x06,0x01,0x61,0x2e,0x06,0xda,0x02,0x01,0x20,0x66,0x06, 45 | 0x01,0x20,0xb2,0x06,0x01,0x20,0xff,0x06,0x01,0x20,0x51,0x07, 46 | 0x01,0x20,0x7d,0x07,0x01,0x20,0xc9,0x07,0x01,0x20,0x1c,0x08, 47 | 0x01,0x20,0x48,0x08,0x01,0x20,0x94,0x08,0x01,0x20,0xe6,0x08, 48 | 0x01,0x20,0x28,0x09,0x01,0x20,0x6a,0x09,0x01,0x20,0xb2,0x09, 49 | 0x01,0x20,0xfa,0x09,0x01,0x20,0x3e,0x0a,0x01,0x20,0x84,0x0a, 50 | 0x01,0x20,0xb3,0x0a,0x01,0x20,0xff,0x0a,0x01,0x20,0x1a,0x0b, 51 | 0x01,0x20,0x61,0x0b,0x01,0x20,0xa0,0x0b,0x01,0x20,0xe7,0x0b, 52 | 0x01,0x20,0xea,0x0b,0x01,0x20,0x31,0x0c,0x01,0x20,0xa1,0x0c, 53 | 0x01,0x20,0xcc,0x0c,0x01,0x20,0x17,0x0d,0x01,0x20,0x37,0x0d, 54 | 0x01,0x20,0x87,0x0d,0x01,0x20,0xb1,0x0d,0x01,0x20,0xfd,0x0d, 55 | 0x01,0x20,0x1e,0x0e,0x01,0x20,0x3f,0x0e,0x01,0x20,0x91,0x0e, 56 | 0x01,0x20,0xe2,0x0e,0x01,0x20,0x27,0x0f,0x01,0x20,0xa1,0x0f, 57 | 0x01,0x20,0xcc,0x0f,0x01,0x20,0x17,0x10,0x01,0x20,0x5f,0x10, 58 | 0x01,0x60,0xa5,0x10,0x30,0x02,0x01,0x60,0xf1,0x10,0x2a,0x02, 59 | 0x01,0x60,0xf1,0x10,0x30,0x02,0x01,0x60,0xf1,0x10,0x36,0x02, 60 | 0x01,0x60,0xf1,0x10,0x3c,0x02,0x01,0x60,0x31,0x11,0x2a,0x02, 61 | 0x01,0x60,0x67,0x11,0x36,0x02,0x01,0x60,0xa3,0x11,0x2a,0x02, 62 | 0x01,0x60,0xce,0x11,0x30,0x02,0x01,0x60,0xce,0x11,0x2a,0x02, 63 | 0x01,0x60,0xce,0x11,0x36,0x02,0x01,0x60,0xce,0x11,0x42,0x02, 64 | 0x01,0x60,0xa1,0x0c,0x2a,0x02,0x01,0x60,0xa1,0x0c,0x30,0x02, 65 | 0x01,0x60,0xa1,0x0c,0x36,0x02,0x01,0x60,0x13,0x12,0x2a,0x02, 66 | 0x01,0x60,0x4f,0x12,0x70,0x02,0x01,0x60,0x4f,0x12,0x60,0x02, 67 | 0x01,0x60,0x4f,0x12,0x5b,0x02,0x01,0x60,0x4f,0x12,0x6b,0x02, 68 | 0x01,0x60,0x91,0x12,0x60,0x02,0x03,0x60,0xc7,0x12,0x70,0x02, 69 | 0x01,0x60,0xe4,0x12,0x5b,0x02,0x01,0x60,0x1b,0x13,0x60,0x02, 70 | 0x01,0x60,0x55,0x13,0x70,0x02,0x01,0x60,0x70,0x13,0x70,0x02, 71 | 0x01,0x60,0x70,0x13,0x60,0x02,0x01,0x60,0xa6,0x13,0x70,0x02, 72 | 0x01,0x60,0xa6,0x13,0x60,0x02,0x01,0x60,0xa6,0x13,0x6b,0x02, 73 | 0x01,0x60,0xa6,0x13,0x5b,0x02,0x01,0x60,0xed,0x13,0x70,0x02, 74 | 0x01,0x60,0xed,0x13,0x60,0x02,0x01,0x60,0xed,0x13,0x5b,0x02, 75 | 0x01,0x60,0xed,0x13,0x6b,0x02,0x01,0x60,0x18,0x14,0x5b,0x02, 76 | 0x01,0x60,0x18,0x14,0x65,0x02,0x01,0x60,0x59,0x14,0x60,0x02, 77 | 0x01,0x60,0x59,0x14,0x5b,0x02,0x01,0x60,0x8e,0x14,0x65,0x02, 78 | 0x01,0x60,0xd0,0x14,0x65,0x02,0x01,0x60,0x06,0x15,0x6b,0x02, 79 | 0x01,0x60,0x06,0x15,0x65,0x02,0x01,0x60,0x4d,0x15,0x65,0x02, 80 | 0x01,0x60,0x93,0x15,0x5b,0x02,0x01,0x60,0x93,0x15,0x65,0x02, 81 | 0x01,0x20,0xbd,0x15,0x01,0x60,0xfe,0x15,0x6b,0x02,0x01,0x60, 82 | 0xfe,0x15,0x70,0x02,0x01,0x20,0x4e,0x16,0x01,0x20,0x8e,0x16, 83 | 0x01,0x20,0xc8,0x16,0x01,0x20,0xca,0x16,0x01,0x20,0xff,0x16, 84 | 0x01,0x20,0x39,0x17,0x01,0x60,0x4e,0x16,0x2a,0x02,0x01,0x60, 85 | 0x4e,0x16,0x30,0x02,0x01,0x60,0x4e,0x16,0x36,0x02,0x01,0x60, 86 | 0x4e,0x16,0x42,0x02,0x01,0x60,0x4e,0x16,0x3c,0x02,0x01,0x20, 87 | 0x63,0x17,0x01,0x60,0xcc,0x0c,0x48,0x02,0x01,0x60,0x9c,0x17, 88 | 0x42,0x02,0x01,0x60,0x9c,0x17,0x2a,0x02,0x01,0x60,0x9c,0x17, 89 | 0x30,0x02,0x01,0x60,0x9c,0x17,0x36,0x02,0x01,0x60,0x87,0x0d, 90 | 0x2a,0x02,0x01,0x60,0x87,0x0d,0x30,0x02,0x01,0x60,0x87,0x0d, 91 | 0x36,0x02,0x01,0x60,0x87,0x0d,0x42,0x02,0x01,0x60,0x18,0x14, 92 | 0x60,0x02,0x01,0x60,0x18,0x14,0x70,0x02,0x01,0x60,0x18,0x14, 93 | 0x6b,0x02,0x01,0x60,0xe0,0x17,0x60,0x02,0x01,0x60,0xe0,0x17, 94 | 0x6b,0x02,0x01,0x60,0xe0,0x17,0x65,0x02,0x01,0x60,0xe0,0x17, 95 | 0x5b,0x02,0x01,0x60,0x59,0x14,0x65,0x02,0x01,0x60,0x1b,0x13, 96 | 0x5b,0x02,0x01,0x60,0xe0,0x17,0x70,0x02,0x01,0x20,0x15,0x18, 97 | 0x01,0x60,0x56,0x18,0x70,0x02,0x01,0x60,0x56,0x18,0x6b,0x02, 98 | 0x01,0x60,0x4d,0x15,0x5b,0x02,0x01,0x60,0x4d,0x15,0x56,0x02, 99 | 0x01,0x60,0x4d,0x15,0x70,0x02,0x01,0x60,0x4d,0x15,0x60,0x02, 100 | 0x01,0x60,0x4d,0x15,0x6b,0x02,0x01,0x60,0x93,0x15,0x70,0x02, 101 | 0x01,0x60,0x93,0x15,0x60,0x02,0x01,0x60,0x93,0x15,0x6b,0x02, 102 | 0x01,0x20,0x9a,0x18,0x01,0x60,0xcc,0x0c,0x2a,0x02,0x01,0x60, 103 | 0x37,0x0d,0x30,0x02,0x01,0x60,0x37,0x0d,0x42,0x02,0x01,0x60, 104 | 0x37,0x0d,0x2a,0x02,0x01,0x60,0x37,0x0d,0x36,0x02,0x01,0x60, 105 | 0xeb,0x18,0x6b,0x02,0x01,0x60,0xeb,0x18,0x70,0x02,0x01,0x60, 106 | 0xeb,0x18,0x5b,0x02,0x01,0x60,0x56,0x18,0x5b,0x02,0x01,0x60, 107 | 0xeb,0x18,0x60,0x02,0x03,0x60,0x36,0x19,0x5b,0x02,0x01,0x60, 108 | 0xfe,0x15,0x5b,0x02,0x01,0x60,0xfe,0x15,0x60,0x02,0x01,0x60, 109 | 0x56,0x18,0x60,0x02,0x01,0x20,0x53,0x19,0x01,0x60,0x9f,0x19, 110 | 0xa5,0x02,0x01,0x60,0xe0,0x19,0xa5,0x02,0x01,0x20,0x2c,0x1a, 111 | 0x01,0x20,0x30,0x1a,0x01,0x60,0x66,0x1a,0xaa,0x02,0x01,0x20, 112 | 0x9c,0x1a,0x01,0x60,0xa0,0x1a,0xa5,0x02,0x01,0x20,0xda,0x1a, 113 | 0x01,0x20,0x14,0x1b,0x01,0x20,0x3f,0x1b,0x01,0x61,0x43,0x1b, 114 | 0x31,0x00,0x01,0x20,0x87,0x1b,0x01,0x60,0x30,0x1a,0x42,0x02, 115 | 0x01,0x60,0xcd,0x1b,0x6b,0x02,0x01,0x20,0x07,0x1c,0x01,0x20, 116 | 0x53,0x1c,0x01,0x61,0x8a,0x1c,0xca,0x02,0x01,0x20,0xd0,0x1c, 117 | 0x01,0x61,0x1c,0x1d,0xd0,0x02,0x01,0x61,0x5e,0x1d,0x8c,0x02, 118 | 0x01,0x61,0x5e,0x1d,0xb0,0x02,0x01,0x61,0x5e,0x1d,0xd0,0x02, 119 | 0x01,0x61,0x5e,0x1d,0xd5,0x02,0x01,0x20,0xa5,0x1d,0x01,0x20, 120 | 0xe0,0x1d,0x01,0x61,0x0b,0x1e,0xea,0x02,0x01,0x61,0x51,0x1e, 121 | 0x1a,0x00,0x01,0x20,0x97,0x1e,0x01,0x20,0xd9,0x1e,0x01,0x20, 122 | 0xdd,0x1e,0x01,0x61,0x24,0x1f,0x8c,0x02,0x01,0x61,0x24,0x1f, 123 | 0xdf,0x02,0x01,0x61,0x24,0x1f,0xaa,0x02,0x01,0x61,0x66,0x1f, 124 | 0xb0,0x02,0x01,0x61,0x24,0x1f,0xa5,0x02,0x01,0x61,0x9c,0x1f, 125 | 0x6b,0x02,0x01,0x61,0xe3,0x1f,0x98,0x02,0x01,0x61,0xe3,0x1f, 126 | 0xd5,0x02,0x01,0x61,0x25,0x20,0xb0,0x02,0x01,0x61,0x25,0x20, 127 | 0xaa,0x02,0x01,0x61,0x25,0x20,0x8c,0x02,0x01,0x61,0x25,0x20, 128 | 0xdf,0x02,0x01,0x61,0x6c,0x20,0x98,0x02,0x01,0x20,0xb3,0x20, 129 | 0x01,0x20,0xe9,0x20,0x01,0x20,0x1f,0x21,0x01,0x61,0x1f,0x21, 130 | 0x20,0x00,0x01,0x61,0x5a,0x21,0x12,0x03,0x01,0x20,0xa1,0x21, 131 | 0x01,0x20,0xa4,0x21,0x01,0x20,0xf0,0x21,0x01,0x20,0x36,0x22, 132 | 0x01,0x20,0x87,0x22,0x01,0x20,0xc8,0x22,0x01,0x20,0xcc,0x22, 133 | 0x01,0x20,0x18,0x23,0x01,0x20,0x59,0x23,0x01,0x20,0xa0,0x23, 134 | 0x01,0x20,0xa8,0x23,0x01,0x20,0xde,0x23,0x01,0x20,0x19,0x24, 135 | 0x01,0x20,0x5b,0x24,0x01,0x20,0xa1,0x24,0x01,0x20,0xe8,0x24, 136 | 0x01,0x20,0x2e,0x25,0x01,0x20,0x73,0x25,0x01,0x20,0xb9,0x25, 137 | 0x01,0x61,0xff,0x25,0x49,0x03,0x01,0x20,0x43,0x26,0x01,0x20, 138 | 0x85,0x26,0x01,0x20,0xcb,0x26,0x01,0x20,0xcf,0x26,0x02,0x20, 139 | 0xfa,0x26,0x02,0x20,0x16,0x27,0x02,0x20,0x30,0x27,0x02,0x20, 140 | 0x4c,0x27,0x02,0x20,0x68,0x27,0x02,0x61,0x84,0x27,0xb5,0x02, 141 | 0x02,0x61,0x9f,0x27,0x39,0x03,0x02,0x20,0xac,0x05,0x02,0x20, 142 | 0xbb,0x27,0x02,0x20,0xbf,0x27,0x02,0x20,0xcc,0x27,0x02,0x20, 143 | 0x07,0x28,0x02,0x20,0x24,0x28,0x02,0x20,0x41,0x28,0x02,0x20, 144 | 0x68,0x28,0x02,0x20,0xa4,0x28,0x02,0x20,0xb2,0x09,0x02,0x20, 145 | 0xc1,0x28,0x02,0x20,0xd3,0x28,0x02,0x20,0xee,0x28,0x02,0x20, 146 | 0x09,0x29,0x02,0x20,0x2f,0x29,0x02,0x20,0x4b,0x29,0x02,0x20, 147 | 0x71,0x29,0x02,0x20,0x8d,0x29,0x02,0x20,0xa8,0x29,0x02,0x20, 148 | 0xc3,0x29,0x02,0x20,0xc8,0x16,0x02,0x20,0xde,0x29,0x02,0x20, 149 | 0x19,0x2a,0x02,0x20,0x34,0x2a,0x02,0x20,0x4f,0x2a,0x02,0x20, 150 | 0xff,0x16,0x02,0x60,0x8d,0x29,0x30,0x02,0x02,0x60,0x8d,0x29, 151 | 0x36,0x02,0x02,0x60,0x8d,0x29,0x42,0x02,0x02,0x60,0x8d,0x29, 152 | 0x3c,0x02,0x02,0x60,0x8a,0x2a,0x3c,0x02,0x02,0x60,0xa6,0x2a, 153 | 0x60,0x02,0x02,0x60,0xa6,0x2a,0x70,0x02,0x02,0x60,0xa6,0x2a, 154 | 0x5b,0x02,0x02,0x60,0xa6,0x2a,0x6b,0x02,0x02,0x20,0xc1,0x2a, 155 | 0x02,0x60,0xdd,0x2a,0x70,0x02,0x02,0x60,0xdd,0x2a,0x5b,0x02, 156 | 0x02,0x60,0xf8,0x2a,0x5b,0x02,0x02,0x60,0xf8,0x2a,0x70,0x02, 157 | 0x02,0x60,0xf8,0x2a,0x6b,0x02,0x02,0x60,0xf8,0x2a,0x60,0x02, 158 | 0x02,0x60,0x55,0x13,0x70,0x02,0x02,0x60,0x55,0x13,0x60,0x02, 159 | 0x02,0x60,0x55,0x13,0x65,0x02,0x02,0x20,0x8e,0x16,0x02,0x20, 160 | 0x33,0x2b,0x02,0x60,0x19,0x2a,0x36,0x02,0x02,0x60,0x19,0x2a, 161 | 0x2a,0x02,0x02,0x60,0x19,0x2a,0x30,0x02,0x02,0x60,0x19,0x2a, 162 | 0x42,0x02,0x02,0x60,0x8e,0x16,0x36,0x02,0x02,0x60,0x55,0x13, 163 | 0x6b,0x02,0x02,0x60,0x55,0x13,0x5b,0x02,0x02,0x60,0x4e,0x2b, 164 | 0x70,0x02,0x02,0x60,0x4e,0x2b,0x60,0x02,0x02,0x60,0x4e,0x2b, 165 | 0x5b,0x02,0x02,0x60,0x4e,0x2b,0x6b,0x02,0x02,0x60,0x1b,0x13, 166 | 0x65,0x02,0x02,0x60,0x1b,0x13,0x5b,0x02,0x02,0x60,0x1b,0x13, 167 | 0x6b,0x02,0x02,0x60,0x1b,0x13,0x70,0x02,0x02,0x60,0x1b,0x13, 168 | 0x60,0x02,0x02,0x60,0x56,0x18,0x70,0x02,0x02,0x60,0x69,0x2b, 169 | 0x98,0x02,0x02,0x60,0x8f,0x2b,0xa5,0x02,0x02,0x60,0xaa,0x2b, 170 | 0xbb,0x02,0x02,0x20,0xc5,0x2b,0x02,0x20,0xe0,0x2b,0x02,0x60, 171 | 0xe0,0x2b,0x2a,0x02,0x02,0x60,0xe0,0x2b,0x36,0x02,0x02,0x60, 172 | 0xe0,0x2b,0x42,0x02,0x02,0x60,0x8f,0x2b,0xb0,0x02,0x02,0x60, 173 | 0x8f,0x2b,0x98,0x02,0x02,0x60,0x8f,0x2b,0xaa,0x02,0x02,0x60, 174 | 0xfb,0x2b,0xa5,0x02,0x02,0x60,0xfb,0x2b,0xaa,0x02,0x02,0x20, 175 | 0x16,0x2c,0x02,0x20,0x31,0x2c,0x02,0x20,0xda,0x1a,0x02,0x20, 176 | 0x34,0x2c,0x02,0x20,0x5f,0x2c,0x02,0x20,0x89,0x2c,0x02,0x20, 177 | 0xc2,0x2c,0x02,0x20,0xde,0x2c,0x02,0x20,0xfa,0x2c,0x02,0x61, 178 | 0x16,0x2d,0xd5,0x02,0x02,0x61,0x16,0x2d,0xd0,0x02,0x02,0x61, 179 | 0x9f,0x27,0xb0,0x02,0x02,0x61,0x9f,0x27,0xdf,0x02,0x02,0x61, 180 | 0x32,0x2d,0xda,0x02,0x02,0x61,0x6c,0x2d,0xd0,0x02,0x02,0x20, 181 | 0xa6,0x2d,0x02,0x20,0xc1,0x2d,0x02,0x20,0xdd,0x2d,0x02,0x61, 182 | 0x9f,0x27,0x34,0x03,0x02,0x61,0x9f,0x27,0xd0,0x02,0x02,0x61, 183 | 0x9f,0x27,0xd5,0x02,0x02,0x61,0xf9,0x2d,0xb0,0x02,0x02,0x61, 184 | 0xf9,0x2d,0x34,0x03,0x02,0x61,0xf9,0x2d,0xd5,0x02,0x02,0x20, 185 | 0x34,0x2e,0x02,0x20,0x50,0x2e,0x02,0x20,0x6c,0x2e,0x02,0x20, 186 | 0x88,0x2e,0x02,0x20,0xa3,0x2e,0x02,0x20,0xbe,0x2e,0x02,0x20, 187 | 0xc0,0x2e,0x02,0x20,0xdc,0x2e,0x02,0x20,0xf8,0x2e,0x02,0x20, 188 | 0x14,0x2f,0x02,0x20,0x2f,0x2f,0x02,0x20,0x4a,0x2f,0x02,0x61, 189 | 0x65,0x2f,0x49,0x03,0x02,0x20,0x80,0x2f,0x02,0x20,0x9d,0x2f, 190 | 0x02,0x20,0xb8,0x2f,0x02,0x20,0xcd,0x2f,0x02,0x20,0xd3,0x2f, 191 | 0x03,0x20,0xf0,0x2f,0x03,0x61,0x0c,0x30,0x8a,0x03,0x03,0x20, 192 | 0x0c,0x30,0x03,0x61,0xf0,0x2f,0x8a,0x03,0x03,0x62,0x3c,0x30, 193 | 0xa0,0x03,0x03,0x62,0x3c,0x30,0xa6,0x03,0x03,0x62,0x3c,0x30, 194 | 0x98,0x03,0x03,0x62,0x3c,0x30,0xbb,0x03,0x03,0x62,0x3c,0x30, 195 | 0x12,0x03,0x03,0x62,0x3c,0x30,0x54,0x00,0x03,0x62,0x3c,0x30, 196 | 0xac,0x03,0x03,0x62,0x59,0x30,0xbb,0x03,0x03,0x62,0x59,0x30, 197 | 0x12,0x03,0x03,0x62,0x59,0x30,0x54,0x00,0x03,0x62,0x59,0x30, 198 | 0xa0,0x03,0x03,0x62,0x59,0x30,0xa6,0x03,0x03,0x62,0x59,0x30, 199 | 0x98,0x03,0x03,0x20,0x3c,0x30,0x03,0x20,0x59,0x30,0x03,0x20, 200 | 0x89,0x30,0x03,0x20,0xa5,0x30,0x03,0x20,0xc1,0x30,0x03,0x20, 201 | 0xf1,0x30,0x03,0x20,0x0d,0x31,0x03,0x20,0x3d,0x31,0x03,0x20, 202 | 0x59,0x31,0x03,0x20,0x75,0x31,0x03,0x20,0xa5,0x31,0x03,0x20, 203 | 0xc1,0x31,0x03,0x20,0xf1,0x31,0x03,0x61,0x03,0x32,0xc1,0x03, 204 | 0x03,0x61,0x1f,0x32,0xc1,0x03,0x03,0x61,0x4f,0x32,0xc7,0x03, 205 | 0x03,0x61,0x6b,0x32,0xc7,0x03,0x03,0x61,0x9b,0x32,0xc7,0x03, 206 | 0x03,0x61,0xb7,0x32,0xc7,0x03,0x03,0x20,0x03,0x32,0x03,0x20, 207 | 0x6b,0x32,0x03,0x20,0xb7,0x32,0x03,0x20,0xe7,0x32,0x03,0x20, 208 | 0x03,0x33,0x03,0x61,0x20,0x33,0xcd,0x03,0x03,0x20,0x4f,0x32, 209 | 0x03,0x20,0x50,0x33,0x03,0x20,0x1f,0x32,0x03,0x20,0x9b,0x32, 210 | 0x03,0x20,0x81,0x33,0x03,0x20,0x9e,0x33,0x03,0x20,0xbb,0x33, 211 | 0x03,0x20,0xd8,0x33,0x03,0x20,0x09,0x34,0x03,0x20,0x26,0x34, 212 | 0x03,0x20,0x56,0x34,0x03,0x20,0x90,0x34,0x03,0x20,0xac,0x34, 213 | 0x03,0x20,0xbe,0x34,0x03,0x20,0xe3,0x34,0x03,0x20,0x13,0x35, 214 | 0x03,0x20,0x2e,0x35,0x03,0x20,0x4a,0x35,0x03,0x20,0x65,0x35, 215 | 0x03,0x20,0x76,0x35,0x03,0x20,0xa6,0x35,0x03,0x20,0xc3,0x35, 216 | 0x03,0x20,0xd4,0x35,0x03,0x20,0xf9,0x35,0x03,0x20,0x16,0x36, 217 | 0x03,0x20,0x47,0x36,0x03,0x20,0x4b,0x36,0x03,0x20,0x7c,0x36, 218 | 0x03,0x20,0x97,0x36,0x03,0x20,0xb5,0x36,0x03,0x20,0xd3,0x36, 219 | 0x03,0x20,0x05,0x37,0x03,0x20,0x21,0x37,0x03,0x20,0x40,0x37, 220 | 0x03,0x20,0x72,0x37,0x03,0x20,0x8e,0x37,0x03,0x20,0xac,0x37, 221 | 0x03,0x20,0xde,0x37,0x03,0x20,0x10,0x38,0x03,0x20,0x2c,0x38, 222 | 0x03,0x20,0x57,0x38,0x03,0x20,0x73,0x38,0x03,0x20,0x8f,0x38, 223 | 0x03,0x20,0xbf,0x38,0x03,0x20,0xdb,0x38,0x03,0x20,0x0b,0x39, 224 | 0x03,0x20,0x27,0x39,0x03,0x20,0x58,0x39,0x03,0x20,0x88,0x39, 225 | 0x03,0x20,0xa4,0x39,0x03,0x20,0xb3,0x39,0x03,0x20,0xcf,0x39, 226 | 0x03,0x20,0xe1,0x39,0x03,0x20,0x06,0x3a,0x03,0x20,0x0a,0x3a, 227 | 0x03,0x20,0x1c,0x3a,0x03,0x20,0x42,0x3a,0x03,0x20,0x95,0x3a, 228 | 0x03,0x20,0xdb,0x3a,0x03,0x20,0x06,0x3b,0x03,0x20,0x2d,0x3b, 229 | 0x03,0x20,0x72,0x3b,0x03,0x20,0x76,0x3b,0x03,0x20,0x92,0x3b, 230 | 0x03,0x20,0xb0,0x3b,0x03,0x20,0xe1,0x3b,0x03,0x20,0x11,0x3c, 231 | 0x03,0x20,0x2c,0x3c,0x03,0x20,0x46,0x3c,0x03,0x20,0x63,0x3c, 232 | 0x03,0x20,0x80,0x3c,0x03,0x20,0x9d,0x3c,0x03,0x20,0xce,0x3c, 233 | 0x03,0x20,0xef,0x3c,0x03,0x20,0x11,0x3d,0x03,0x20,0x2e,0x3d, 234 | 0x03,0x20,0x60,0x3d,0x03,0x20,0x91,0x3d,0x03,0x20,0xcb,0x3d, 235 | 0x03,0x20,0xe6,0x3d,0x03,0x60,0xe6,0x3d,0x91,0x02,0x03,0x20, 236 | 0x03,0x3e,0x03,0x20,0x05,0x3e,0x03,0x20,0x22,0x3e,0x03,0x20, 237 | 0x53,0x3e,0x03,0x20,0x70,0x3e,0x03,0x20,0x90,0x3e,0x03,0x20, 238 | 0xc1,0x3e,0x03,0x20,0xe2,0x3e,0x03,0x20,0xff,0x3e,0x03,0x20, 239 | 0x31,0x3f,0x03,0x20,0x34,0x3f,0x03,0x20,0x6e,0x3f,0x03,0x20, 240 | 0x9e,0x3f,0x03,0x20,0xb9,0x3f,0x03,0x20,0xd6,0x3f,0x03,0x20, 241 | 0xf2,0x3f,0x03,0x60,0x63,0x3c,0x2a,0x02,0x03,0x60,0x63,0x3c, 242 | 0x30,0x02,0x03,0x60,0x63,0x3c,0x36,0x02,0x03,0x60,0x63,0x3c, 243 | 0x42,0x02,0x03,0x60,0x63,0x3c,0x3c,0x02,0x03,0x60,0x11,0x3d, 244 | 0x2a,0x02,0x03,0x60,0x11,0x3d,0x36,0x02,0x03,0x60,0x2e,0x3d, 245 | 0x36,0x02,0x03,0x60,0x2e,0x3d,0x2a,0x02,0x03,0x60,0x2e,0x3d, 246 | 0x30,0x02,0x03,0x60,0x0c,0x40,0x2a,0x02,0x03,0x60,0x0c,0x40, 247 | 0x36,0x02,0x03,0x60,0x60,0x3d,0x2a,0x02,0x03,0x60,0x60,0x3d, 248 | 0x30,0x02,0x03,0x60,0x60,0x3d,0x36,0x02,0x03,0x60,0x60,0x3d, 249 | 0x42,0x02,0x03,0x60,0xe1,0x3b,0x2a,0x02,0x03,0x60,0xe1,0x3b, 250 | 0x30,0x02,0x03,0x60,0xe1,0x3b,0x36,0x02,0x03,0x60,0xe1,0x3b, 251 | 0x42,0x02,0x03,0x60,0xcb,0x3d,0x2a,0x02,0x03,0x60,0xcb,0x3d, 252 | 0x30,0x02,0x03,0x60,0xcb,0x3d,0x36,0x02,0x03,0x60,0xcb,0x3d, 253 | 0x42,0x02,0x03,0x60,0xcb,0x3d,0x3c,0x02,0x03,0x60,0xe6,0x3d, 254 | 0x2a,0x02,0x03,0x60,0xe6,0x3d,0x30,0x02,0x03,0x60,0xe6,0x3d, 255 | 0x36,0x02,0x03,0x60,0x28,0x40,0x2a,0x02,0x03,0x60,0x5a,0x40, 256 | 0x2a,0x02,0x03,0x60,0xe6,0x3d,0x48,0x02,0x03,0x60,0x2c,0x3c, 257 | 0x30,0x02,0x03,0x60,0xc7,0x12,0x60,0x02,0x03,0x60,0xc7,0x12, 258 | 0x5b,0x02,0x03,0x60,0xc7,0x12,0x6b,0x02,0x03,0x60,0x76,0x40, 259 | 0x60,0x02,0x03,0x60,0x87,0x40,0x70,0x02,0x03,0x60,0x98,0x40, 260 | 0x60,0x02,0x03,0x60,0xc7,0x12,0x56,0x02,0x03,0x60,0x76,0x40, 261 | 0x5b,0x02,0x03,0x60,0xc9,0x40,0x5b,0x02,0x03,0x60,0x98,0x40, 262 | 0x98,0x02,0x03,0x60,0x98,0x40,0x8c,0x02,0x03,0x20,0xe6,0x40, 263 | 0x03,0x60,0x16,0x41,0x5b,0x02,0x03,0x60,0x16,0x41,0x6b,0x02, 264 | 0x03,0x60,0x34,0x41,0x70,0x02,0x03,0x60,0x66,0x41,0x5b,0x02, 265 | 0x03,0x60,0x98,0x40,0x70,0x02,0x03,0x60,0x98,0x40,0x5b,0x02, 266 | 0x03,0x60,0x98,0x40,0x6b,0x02,0x03,0x60,0x98,0x40,0x56,0x02, 267 | 0x03,0x60,0x98,0x41,0x60,0x02,0x03,0x60,0x98,0x41,0x6b,0x02, 268 | 0x03,0x60,0x98,0x41,0x70,0x02,0x03,0x60,0x98,0x41,0x5b,0x02, 269 | 0x03,0x60,0x98,0x41,0x56,0x02,0x03,0x60,0x98,0x41,0x4e,0x02, 270 | 0x03,0x60,0xc8,0x41,0x70,0x02,0x03,0x60,0xc8,0x41,0x60,0x02, 271 | 0x03,0x60,0xc8,0x41,0x5b,0x02,0x03,0x60,0xc8,0x41,0x6b,0x02, 272 | 0x03,0x60,0xe3,0x41,0x5b,0x02,0x03,0x60,0xe3,0x41,0x70,0x02, 273 | 0x03,0x60,0x36,0x19,0x70,0x02,0x03,0x60,0x36,0x19,0x60,0x02, 274 | 0x03,0x60,0x36,0x19,0x56,0x02,0x03,0x60,0x36,0x19,0x6b,0x02, 275 | 0x03,0x60,0x36,0x19,0x4e,0x02,0x03,0x60,0x36,0x19,0x65,0x02, 276 | 0x03,0x60,0xfd,0x41,0x60,0x02,0x03,0x60,0x21,0x42,0x70,0x02, 277 | 0x03,0x20,0x32,0x42,0x03,0x60,0x16,0x41,0x65,0x02,0x03,0x60, 278 | 0x4e,0x42,0x6b,0x02,0x03,0x60,0x4e,0x42,0x65,0x02,0x03,0x60, 279 | 0x98,0x41,0x65,0x02,0x03,0x60,0x80,0x42,0x70,0x02,0x03,0x60, 280 | 0xe3,0x41,0x60,0x02,0x03,0x60,0xe3,0x41,0x6b,0x02,0x03,0x60, 281 | 0xe3,0x41,0x65,0x02,0x03,0x60,0x98,0x41,0x7f,0x02,0x03,0x60, 282 | 0xe6,0x3d,0x42,0x02,0x03,0x60,0xe6,0x3d,0x3c,0x02,0x03,0x60, 283 | 0xaf,0x42,0x36,0x02,0x03,0x60,0xaf,0x42,0x42,0x02,0x03,0x20, 284 | 0xc0,0x42,0x03,0x60,0xe6,0x3d,0x9d,0x02,0x03,0x60,0x2c,0x3c, 285 | 0x36,0x02,0x03,0x60,0x2c,0x3c,0x42,0x02,0x03,0x60,0x36,0x19, 286 | 0x75,0x02,0x03,0x60,0xe3,0x42,0x60,0x02,0x03,0x60,0xe3,0x42, 287 | 0x5b,0x02,0x03,0x60,0x21,0x42,0x60,0x02,0x03,0x60,0x21,0x42, 288 | 0x65,0x02,0x03,0x60,0xfd,0x41,0x6b,0x02,0x03,0x60,0xf4,0x42, 289 | 0x4e,0x02,0x03,0x60,0xe3,0x42,0x70,0x02,0x03,0x60,0xe3,0x42, 290 | 0x6b,0x02,0x03,0x60,0x21,0x42,0x5b,0x02,0x03,0x20,0x36,0x19, 291 | 0x03,0x60,0xf4,0x42,0x87,0x02,0x03,0x60,0x98,0x41,0x8c,0x02, 292 | 0x03,0x60,0x98,0x41,0x75,0x02,0x03,0x20,0xfd,0x41,0x03,0x20, 293 | 0x11,0x43,0x03,0x20,0x2e,0x43,0x03,0x60,0x2c,0x3c,0x2a,0x02, 294 | 0x03,0x20,0x5f,0x43,0x03,0x61,0x79,0x43,0xc1,0x02,0x03,0x61, 295 | 0x96,0x43,0xc1,0x02,0x03,0x20,0xc6,0x43,0x03,0x20,0xeb,0x43, 296 | 0x03,0x20,0x07,0x44,0x03,0x20,0x24,0x44,0x03,0x60,0x54,0x44, 297 | 0xb5,0x02,0x03,0x20,0x6f,0x44,0x03,0x20,0x8c,0x44,0x03,0x20, 298 | 0xa9,0x44,0x03,0x20,0xda,0x44,0x03,0x60,0xf5,0x44,0xa5,0x02, 299 | 0x03,0x60,0x13,0x45,0xa5,0x02,0x03,0x60,0x25,0x45,0xa5,0x02, 300 | 0x03,0x60,0x56,0x45,0xa5,0x02,0x03,0x60,0x25,0x45,0x70,0x02, 301 | 0x03,0x60,0x72,0x45,0xbb,0x02,0x03,0x60,0x54,0x44,0xbb,0x02, 302 | 0x03,0x60,0x83,0x45,0xbb,0x02,0x03,0x20,0xa8,0x45,0x03,0x20, 303 | 0xb9,0x45,0x03,0x60,0xa8,0x45,0x42,0x02,0x03,0x60,0xb9,0x45, 304 | 0x36,0x02,0x03,0x60,0xb9,0x45,0x42,0x02,0x03,0x60,0xd4,0x45, 305 | 0x70,0x02,0x03,0x60,0xf1,0x45,0x70,0x02,0x03,0x60,0xf1,0x45, 306 | 0xaa,0x02,0x03,0x60,0xf1,0x45,0xb0,0x02,0x03,0x60,0x02,0x46, 307 | 0x70,0x02,0x03,0x60,0x02,0x46,0xaa,0x02,0x03,0x60,0x27,0x46, 308 | 0x70,0x02,0x03,0x60,0x57,0x46,0x70,0x02,0x03,0x60,0x57,0x46, 309 | 0x98,0x02,0x03,0x60,0x57,0x46,0xaa,0x02,0x03,0x60,0x57,0x46, 310 | 0xb0,0x02,0x03,0x20,0x72,0x46,0x03,0x20,0x83,0x46,0x03,0x20, 311 | 0xa7,0x46,0x03,0x20,0xc1,0x46,0x03,0x20,0xd2,0x46,0x03,0x20, 312 | 0xf5,0x46,0x03,0x20,0x10,0x47,0x03,0x20,0x2a,0x47,0x03,0x20, 313 | 0x3c,0x47,0x03,0x20,0x62,0x47,0x03,0x20,0x7e,0x47,0x03,0x61, 314 | 0x79,0x43,0x31,0x00,0x03,0x61,0x96,0x43,0x31,0x00,0x03,0x20, 315 | 0x82,0x47,0x03,0x20,0x9f,0x47,0x03,0x60,0xcf,0x47,0x42,0x02, 316 | 0x03,0x60,0x82,0x47,0x42,0x02,0x03,0x60,0xd4,0x45,0x6b,0x02, 317 | 0x03,0x60,0x27,0x46,0x6b,0x02,0x03,0x61,0xf4,0x47,0xf1,0x02, 318 | 0x03,0x61,0xf4,0x47,0xfe,0x02,0x03,0x61,0x11,0x48,0xf1,0x02, 319 | 0x03,0x20,0x42,0x48,0x03,0x20,0x5f,0x48,0x03,0x61,0xf4,0x47, 320 | 0xb5,0x02,0x03,0x61,0x11,0x48,0xca,0x02,0x03,0x61,0x71,0x48, 321 | 0x2a,0x02,0x03,0x20,0xa2,0x48,0x03,0x20,0xd8,0x48,0x03,0x61, 322 | 0xf7,0x48,0xd0,0x02,0x03,0x61,0xf7,0x48,0xb0,0x02,0x03,0x61, 323 | 0x14,0x49,0xd0,0x02,0x03,0x61,0xf7,0x48,0x8c,0x02,0x04,0x61, 324 | 0xf7,0x48,0x8c,0x02,0x04,0x65,0x45,0x49,0x8c,0x02,0x03,0x61, 325 | 0x61,0x49,0x8c,0x02,0x03,0x61,0x61,0x49,0x98,0x02,0x03,0x61, 326 | 0x61,0x49,0xb0,0x02,0x03,0x61,0x61,0x49,0xaa,0x02,0x03,0x61, 327 | 0x61,0x49,0xa5,0x02,0x03,0x61,0x61,0x49,0xdf,0x02,0x03,0x61, 328 | 0x61,0x49,0xd5,0x02,0x03,0x61,0x7e,0x49,0x8c,0x02,0x03,0x61, 329 | 0x14,0x49,0x8c,0x02,0x03,0x61,0x14,0x49,0xb0,0x02,0x03,0x61, 330 | 0x14,0x49,0x98,0x02,0x03,0x61,0x14,0x49,0xd5,0x02,0x03,0x61, 331 | 0xb1,0x49,0xb0,0x02,0x03,0x61,0xb1,0x49,0x8c,0x02,0x03,0x61, 332 | 0xb1,0x49,0x98,0x02,0x03,0x61,0xb1,0x49,0xaa,0x02,0x03,0x61, 333 | 0xb1,0x49,0xd5,0x02,0x03,0x61,0xb1,0x49,0xd0,0x02,0x03,0x61, 334 | 0x45,0x49,0xd0,0x02,0x03,0x61,0xe2,0x49,0xe5,0x02,0x03,0x61, 335 | 0xfc,0x49,0xb0,0x02,0x03,0x20,0x18,0x4a,0x03,0x20,0x49,0x4a, 336 | 0x03,0x61,0xf4,0x47,0xea,0x02,0x03,0x61,0x11,0x48,0xea,0x02, 337 | 0x03,0x61,0xf4,0x47,0x1a,0x00,0x03,0x20,0x65,0x4a,0x03,0x61, 338 | 0x11,0x48,0x1a,0x00,0x03,0x20,0x7e,0x4a,0x03,0x20,0x9b,0x4a, 339 | 0x03,0x61,0x61,0x49,0x34,0x03,0x03,0x61,0xcc,0x4a,0xb0,0x02, 340 | 0x03,0x61,0xcc,0x4a,0xd0,0x02,0x03,0x61,0x61,0x49,0xd0,0x02, 341 | 0x03,0x61,0xde,0x4a,0x6b,0x02,0x03,0x61,0xb1,0x49,0xdf,0x02, 342 | 0x03,0x61,0xfc,0x49,0xd0,0x02,0x03,0x61,0xfc,0x49,0x98,0x02, 343 | 0x03,0x61,0xfc,0x49,0xaa,0x02,0x03,0x61,0xfc,0x49,0xd5,0x02, 344 | 0x03,0x61,0xfc,0x49,0x8c,0x02,0x03,0x61,0xfc,0x49,0xdf,0x02, 345 | 0x03,0x61,0xfc,0x49,0xa5,0x02,0x03,0x61,0x61,0x49,0x22,0x03, 346 | 0x03,0x61,0x61,0x49,0x2b,0x03,0x03,0x61,0xfc,0x49,0x22,0x03, 347 | 0x03,0x61,0xb1,0x49,0x2b,0x03,0x03,0x61,0xb1,0x49,0x22,0x03, 348 | 0x03,0x61,0xb1,0x49,0x18,0x03,0x03,0x61,0x61,0x49,0x09,0x03, 349 | 0x03,0x61,0xb1,0x49,0x09,0x03,0x03,0x20,0x61,0x49,0x03,0x20, 350 | 0xfb,0x4a,0x03,0x20,0xb1,0x49,0x03,0x20,0xcc,0x4a,0x03,0x20, 351 | 0xfc,0x49,0x03,0x20,0xfe,0x4a,0x03,0x20,0x1c,0x4b,0x03,0x61, 352 | 0x61,0x49,0x20,0x00,0x03,0x61,0xb1,0x49,0x20,0x00,0x03,0x61, 353 | 0x61,0x49,0x12,0x03,0x03,0x61,0xfc,0x49,0x12,0x03,0x03,0x61, 354 | 0xb1,0x49,0x12,0x03,0x03,0x20,0x38,0x4b,0x03,0x20,0x55,0x4b, 355 | 0x03,0x20,0x73,0x4b,0x03,0x20,0x90,0x4b,0x03,0x20,0xa1,0x4b, 356 | 0x03,0x20,0xb2,0x4b,0x03,0x20,0xcd,0x4b,0x03,0x20,0xdf,0x4b, 357 | 0x03,0x20,0xfb,0x4b,0x03,0x20,0x18,0x4c,0x03,0x20,0x49,0x4c, 358 | 0x03,0x20,0x65,0x4c,0x03,0x20,0x95,0x4c,0x03,0x20,0xc6,0x4c, 359 | 0x03,0x20,0xe3,0x4c,0x03,0x20,0x14,0x4d,0x03,0x20,0x45,0x4d, 360 | 0x03,0x20,0x62,0x4d,0x03,0x20,0x7d,0x4d,0x03,0x20,0xae,0x4d, 361 | 0x03,0x20,0xb2,0x4d,0x03,0x20,0xe4,0x4d,0x03,0x20,0x00,0x4e, 362 | 0x03,0x20,0x1d,0x4e,0x03,0x20,0x4f,0x4e,0x03,0x20,0x63,0x4e, 363 | 0x03,0x20,0x80,0x4e,0x03,0x20,0x92,0x4e,0x03,0x20,0xae,0x4e, 364 | 0x03,0x20,0xdf,0x4e,0x03,0x20,0xfb,0x4e,0x03,0x20,0x2b,0x4f, 365 | 0x03,0x20,0x46,0x4f,0x03,0x20,0x62,0x4f,0x03,0x20,0x80,0x4f, 366 | 0x03,0x20,0xb2,0x4f,0x03,0x20,0xd8,0x4f,0x03,0x20,0xf5,0x4f, 367 | 0x03,0x20,0x12,0x50,0x03,0x20,0x43,0x50,0x03,0x20,0x60,0x50, 368 | 0x03,0x20,0x91,0x50,0x03,0x20,0xac,0x50,0x03,0x20,0xaf,0x50, 369 | 0x03,0x20,0xca,0x50,0x03,0x20,0xe8,0x50,0x03,0x20,0x1a,0x51, 370 | 0x03,0x20,0x37,0x51,0x03,0x20,0x68,0x51,0x03,0x20,0x85,0x51, 371 | 0x03,0x20,0xb6,0x51,0x03,0x61,0xd2,0x51,0x59,0x03,0x03,0x61, 372 | 0xee,0x51,0x6f,0x03,0x03,0x61,0xee,0x51,0x78,0x03,0x03,0x61, 373 | 0xee,0x51,0x64,0x03,0x03,0x61,0x1e,0x52,0x64,0x03,0x03,0x61, 374 | 0xd2,0x51,0x49,0x03,0x03,0x61,0xee,0x51,0x49,0x03,0x03,0x61, 375 | 0x39,0x52,0x49,0x03,0x03,0x20,0x69,0x52,0x03,0x20,0x87,0x52, 376 | 0x03,0x20,0xba,0x52,0x03,0x20,0xbe,0x52,0x03,0x20,0xef,0x52, 377 | 0x03,0x20,0x0b,0x53,0x03,0x20,0x1e,0x53,0x03,0x20,0x44,0x53, 378 | 0x03,0x20,0x62,0x53,0x03,0x20,0x93,0x53,0x03,0x20,0xae,0x53, 379 | 0x03,0x20,0xcb,0x53,0x03,0x20,0xfc,0x53,0x03,0x20,0x17,0x54, 380 | 0x03,0x20,0x28,0x54,0x03,0x20,0x43,0x54,0x03,0x20,0x5f,0x54, 381 | 0x03,0x20,0x7b,0x54,0x03,0x20,0xab,0x54,0x03,0x20,0xc8,0x54, 382 | 0x03,0x20,0xf8,0x54,0x03,0x20,0x16,0x55,0x03,0x20,0x49,0x55, 383 | 0x03,0x20,0x66,0x55,0x05,0x20,0xa6,0x35,0x05,0x20,0xc3,0x35, 384 | 0x05,0x20,0x6a,0x55,0x05,0x20,0xa7,0x55,0x05,0x20,0xfa,0x55, 385 | 0x05,0x20,0x48,0x56,0x05,0x20,0x8f,0x56,0x05,0x20,0x51,0x07, 386 | 0x05,0x20,0x8e,0x37,0x05,0x20,0xe3,0x56,0x05,0x60,0x30,0x57, 387 | 0x4e,0x02,0x05,0x20,0x19,0x2a,0x05,0x20,0x8e,0x16,0x05,0x60, 388 | 0x30,0x57,0x65,0x02,0x06,0x20,0x24,0x28,0x06,0x20,0x78,0x57, 389 | 0x06,0x20,0xb6,0x57,0x04,0x20,0xc7,0x57,0x04,0x20,0xc3,0x35, 390 | 0x04,0x20,0xd9,0x57,0x04,0x20,0xeb,0x57,0x04,0x20,0xf1,0x31, 391 | 0x04,0x20,0xfb,0x57,0x04,0x20,0xac,0x34,0x04,0x20,0x0d,0x58, 392 | 0x04,0x20,0xbe,0x34,0x04,0x20,0x65,0x35,0x04,0x20,0x10,0x58, 393 | 0x04,0x61,0x35,0x58,0xb5,0x02,0x04,0x61,0xcc,0x4a,0x39,0x03, 394 | 0x04,0x20,0x47,0x58,0x04,0x20,0xd4,0x35,0x04,0x20,0x49,0x58, 395 | 0x04,0x20,0x5b,0x58,0x04,0x20,0x6d,0x58,0x04,0x20,0x7b,0x58, 396 | 0x04,0x20,0xa1,0x58,0x04,0x20,0xb3,0x58,0x04,0x20,0xcf,0x39, 397 | 0x04,0x24,0xcf,0x39,0x04,0x20,0xd9,0x58,0x04,0x20,0xeb,0x58, 398 | 0x04,0x20,0xfd,0x58,0x04,0x20,0x0d,0x59,0x04,0x20,0xe1,0x39, 399 | 0x04,0x20,0x32,0x59,0x04,0x20,0x43,0x59,0x04,0x20,0x55,0x59, 400 | 0x04,0x20,0x67,0x59,0x04,0x20,0x83,0x59,0x04,0x20,0x95,0x59, 401 | 0x04,0x20,0x1c,0x3a,0x04,0x20,0xb1,0x59,0x04,0x20,0x06,0x3b, 402 | 0x04,0x20,0xcc,0x59,0x04,0x20,0x07,0x5a,0x04,0x20,0x2c,0x5a, 403 | 0x04,0x20,0x3d,0x5a,0x04,0x20,0x4e,0x5a,0x04,0x20,0x60,0x5a, 404 | 0x04,0x20,0xaf,0x42,0x04,0x20,0x85,0x5a,0x04,0x20,0x89,0x5a, 405 | 0x04,0x20,0x03,0x3e,0x04,0x20,0x9a,0x5a,0x04,0x60,0x2c,0x5a, 406 | 0x30,0x02,0x04,0x60,0x2c,0x5a,0x36,0x02,0x04,0x60,0x2c,0x5a, 407 | 0x3c,0x02,0x04,0x60,0x60,0x5a,0x30,0x02,0x04,0x60,0xaf,0x42, 408 | 0x42,0x02,0x04,0x60,0x4e,0x5a,0x3c,0x02,0x04,0x60,0x76,0x40, 409 | 0x5b,0x02,0x04,0x60,0x76,0x40,0x70,0x02,0x04,0x60,0x76,0x40, 410 | 0x60,0x02,0x04,0x60,0x76,0x40,0x6b,0x02,0x04,0x60,0xc7,0x12, 411 | 0x70,0x02,0x04,0x60,0xc7,0x12,0x6b,0x02,0x04,0x60,0x87,0x40, 412 | 0x70,0x02,0x04,0x60,0x87,0x40,0x5b,0x02,0x04,0x60,0xab,0x5a, 413 | 0x5b,0x02,0x04,0x60,0xab,0x5a,0x70,0x02,0x04,0x60,0xab,0x5a, 414 | 0x60,0x02,0x04,0x20,0xfd,0x41,0x04,0x60,0xe3,0x42,0x70,0x02, 415 | 0x04,0x60,0xe3,0x42,0x60,0x02,0x04,0x60,0xe3,0x42,0x65,0x02, 416 | 0x04,0x60,0x21,0x42,0x70,0x02,0x04,0x20,0xd0,0x5a,0x04,0x60, 417 | 0xaf,0x42,0x2a,0x02,0x04,0x60,0xaf,0x42,0x30,0x02,0x04,0x60, 418 | 0xaf,0x42,0x36,0x02,0x04,0x60,0xd0,0x5a,0x36,0x02,0x04,0x60, 419 | 0xe3,0x42,0x5b,0x02,0x04,0x60,0xe3,0x42,0x6b,0x02,0x04,0x60, 420 | 0x36,0x19,0x65,0x02,0x04,0x60,0x21,0x42,0x60,0x02,0x04,0x60, 421 | 0x21,0x42,0x5b,0x02,0x04,0x60,0xfd,0x41,0x70,0x02,0x04,0x60, 422 | 0xfd,0x41,0x6b,0x02,0x04,0x60,0xfd,0x41,0x5b,0x02,0x04,0x60, 423 | 0xfd,0x41,0x60,0x02,0x04,0x60,0xfd,0x41,0x65,0x02,0x04,0x60, 424 | 0x98,0x41,0x65,0x02,0x04,0x60,0xd0,0x5a,0x42,0x02,0x04,0x20, 425 | 0x2a,0x47,0x04,0x60,0x72,0x45,0xbb,0x02,0x04,0x60,0x83,0x45, 426 | 0xbb,0x02,0x04,0x20,0xf4,0x5a,0x04,0x20,0xa8,0x45,0x04,0x20, 427 | 0xcf,0x47,0x04,0x60,0xa8,0x45,0x2a,0x02,0x04,0x60,0xa8,0x45, 428 | 0x36,0x02,0x04,0x60,0xa8,0x45,0x42,0x02,0x04,0x60,0xf1,0x45, 429 | 0xb0,0x02,0x04,0x60,0xf1,0x45,0xaa,0x02,0x04,0x60,0xf1,0x45, 430 | 0x70,0x02,0x04,0x60,0xf1,0x45,0x98,0x02,0x04,0x60,0x05,0x5b, 431 | 0x70,0x02,0x04,0x60,0x05,0x5b,0xaa,0x02,0x04,0x60,0x02,0x46, 432 | 0x98,0x02,0x04,0x60,0x02,0x46,0xb0,0x02,0x04,0x20,0x72,0x46, 433 | 0x04,0x20,0x16,0x5b,0x04,0x20,0xc1,0x46,0x04,0x20,0xd2,0x46, 434 | 0x04,0x20,0x3c,0x47,0x04,0x20,0x3a,0x5b,0x04,0x20,0x4c,0x5b, 435 | 0x04,0x61,0x5e,0x5b,0xd0,0x02,0x04,0x61,0xcc,0x4a,0xda,0x02, 436 | 0x04,0x61,0xcc,0x4a,0xb0,0x02,0x04,0x61,0xcc,0x4a,0xdf,0x02, 437 | 0x04,0x61,0x70,0x5b,0xd0,0x02,0x04,0x20,0x95,0x5b,0x04,0x20, 438 | 0xcc,0x4a,0x04,0x20,0xba,0x5b,0x04,0x61,0xcc,0x4a,0x34,0x03, 439 | 0x04,0x61,0xcc,0x4a,0xd0,0x02,0x04,0x61,0xcc,0x4a,0xaa,0x02, 440 | 0x04,0x61,0xcc,0x4a,0xd5,0x02,0x04,0x61,0xcc,0x5b,0x34,0x03, 441 | 0x04,0x61,0xcc,0x5b,0xb0,0x02,0x04,0x61,0xcc,0x5b,0x8c,0x02, 442 | 0x04,0x61,0xcc,0x5b,0xd0,0x02,0x04,0x61,0xcc,0x5b,0xd5,0x02, 443 | 0x04,0x20,0xf1,0x5b,0x04,0x61,0xcc,0x4a,0x20,0x00,0x04,0x20, 444 | 0xcc,0x5b,0x04,0x20,0x03,0x5c,0x04,0x20,0x90,0x4b,0x04,0x20, 445 | 0xcd,0x4b,0x04,0x20,0x15,0x5c,0x04,0x20,0x27,0x5c,0x04,0x20, 446 | 0x38,0x5c,0x04,0x20,0x4a,0x5c,0x04,0x20,0x5b,0x5c,0x04,0x20, 447 | 0x6c,0x5c,0x04,0x20,0x7e,0x5c,0x04,0x20,0x80,0x5c,0x04,0x20, 448 | 0xa5,0x5c,0x04,0x20,0xcb,0x5c,0x04,0x20,0xce,0x5c,0x04,0x20, 449 | 0xf4,0x5c,0x04,0x20,0x06,0x5d,0x04,0x20,0x17,0x5d,0x04,0x20, 450 | 0x28,0x5d,0x04,0x20,0x4d,0x5d,0x04,0x61,0x5f,0x5d,0x81,0x03, 451 | 0x04,0x61,0x5f,0x5d,0x49,0x03,0x04,0x20,0x70,0x5d,0x04,0x20, 452 | 0x0b,0x53,0x04,0x20,0x1e,0x53,0x04,0x20,0x97,0x5d,0x04,0x20, 453 | 0x17,0x54,0x04,0x20,0xa9,0x5d,0x04,0x20,0xbb,0x5d,0x04,0x20, 454 | 0xce,0x5d,0x04,0x20,0xf5,0x5d,0x3d,0x00,0x3e,0x00,0x3b,0x00, 455 | 0x3c,0x00,0x30,0x00,0x2b,0x00,0x2d,0x00,0x2d,0x20,0x1b,0x5e, 456 | 0x2d,0x20,0x1f,0x5e,0x2d,0x20,0x22,0x5e,0x2d,0x20,0x26,0x5e, 457 | 0x2d,0x20,0x29,0x5e,0x2d,0x20,0x2c,0x5e,0x2d,0x20,0x2f,0x5e, 458 | 0x2d,0x20,0x31,0x5e,0x2c,0x00,0x2c,0x20,0x35,0x5e,0x2c,0x20, 459 | 0x38,0x5e,0x2c,0x20,0x3b,0x5e,0x2c,0x20,0x3e,0x5e,0x2c,0x20, 460 | 0x41,0x5e,0x2c,0x20,0x44,0x5e,0x2c,0x20,0x47,0x5e,0x2c,0x20, 461 | 0x4a,0x5e,0x1b,0x20,0x4d,0x5e,0x1b,0x20,0x50,0x5e,0x2e,0x00, 462 | 0x2e,0x20,0x53,0x5e,0x2e,0x20,0x56,0x5e,0x0d,0x20,0x59,0x5e, 463 | 0x25,0x00,0x27,0x00,0x27,0x20,0x5e,0x5e,0x26,0x20,0x5e,0x5e, 464 | 0x27,0x20,0x61,0x5e,0x26,0x20,0x61,0x5e,0x27,0x20,0x64,0x5e, 465 | 0x26,0x20,0x64,0x5e,0x27,0x20,0x67,0x5e,0x26,0x20,0x67,0x5e, 466 | 0x27,0x20,0x6a,0x5e,0x26,0x20,0x6a,0x5e,0x27,0x20,0x6d,0x5e, 467 | 0x26,0x20,0x6d,0x5e,0x27,0x20,0x2f,0x5e,0x26,0x00,0x26,0x20, 468 | 0x70,0x5e,0x26,0x20,0x73,0x5e,0x26,0x20,0x78,0x5e,0x26,0x20, 469 | 0x7d,0x5e,0x26,0x20,0x82,0x5e,0x26,0x20,0x87,0x5e,0x26,0x20, 470 | 0x8c,0x5e,0x26,0x20,0x91,0x5e,0x26,0x20,0x96,0x5e,0x07,0x20, 471 | 0x9a,0x5e,0x58,0x20,0x9f,0x5e,0x58,0x20,0xa4,0x5e,0x58,0x60, 472 | 0xa9,0x5e,0x7a,0x00,0x58,0x60,0xa9,0x5e,0x6e,0x00,0x15,0x00, 473 | 0x31,0x00,0x07,0x20,0xae,0x5e,0x6f,0x20,0xb3,0x5e,0x6f,0x20, 474 | 0xb6,0x5e,0x6f,0x20,0xb9,0x5e,0x6f,0x20,0xbc,0x5e,0x6f,0x20, 475 | 0xbf,0x5e,0x6f,0x20,0xc2,0x5e,0x6f,0x20,0xc5,0x5e,0x4d,0x20, 476 | 0x9f,0x5e,0x4d,0x20,0xa4,0x5e,0x4d,0x60,0xc8,0x5e,0x1a,0x00, 477 | 0x4d,0x60,0xa9,0x5e,0x7a,0x00,0x4d,0x60,0xa9,0x5e,0x6e,0x00, 478 | 0x4d,0x20,0xa9,0x5e,0x4d,0x20,0xcd,0x5e,0x4d,0x20,0xd2,0x5e, 479 | 0x47,0x20,0x9a,0x5e,0x47,0x20,0xd7,0x5e,0x47,0x20,0xdc,0x5e, 480 | 0x47,0x20,0xe1,0x5e,0x50,0x00,0x50,0x20,0xe6,0x5e,0x50,0x60, 481 | 0xeb,0x5e,0x16,0x02,0x14,0x00,0x14,0x20,0xf0,0x5e,0x09,0x60, 482 | 0xf5,0x5e,0x9a,0x01,0x09,0x20,0xf5,0x5e,0x09,0x20,0xfb,0x5e, 483 | 0x09,0x20,0x00,0x5f,0x09,0x20,0x06,0x5f,0x08,0x20,0x0b,0x5f, 484 | 0x1b,0x20,0x10,0x5f,0x1b,0x20,0x18,0x5f,0x1b,0x20,0x1b,0x5f, 485 | 0x1b,0x20,0x20,0x5f,0x1b,0x20,0x24,0x5f,0x1b,0x20,0x29,0x5f, 486 | 0x1b,0x20,0x2c,0x5f,0x1b,0x20,0x35,0x5f,0x1b,0x20,0x3b,0x5f, 487 | 0x1b,0x20,0x40,0x5f,0x1b,0x20,0x48,0x5f,0x24,0x20,0x48,0x5f, 488 | 0x24,0x20,0x51,0x5f,0x36,0x00,0x36,0x04,0x29,0x20,0x5e,0x5e, 489 | 0x28,0x20,0x52,0x5f,0x28,0x20,0x55,0x5f,0x19,0x00,0x32,0x00, 490 | 0x33,0x20,0x08,0x00,0x33,0x20,0x28,0x00,0x33,0x20,0x18,0x00, 491 | 0x33,0x20,0x04,0x00,0x33,0x20,0x01,0x00,0x33,0x20,0x20,0x00, 492 | 0x33,0x20,0x02,0x00,0x33,0x20,0x12,0x00,0x33,0x20,0x10,0x00, 493 | 0x33,0x00,0x10,0x00,0x17,0x00,0x10,0x20,0x58,0x5f,0x39,0x00, 494 | 0x38,0x00,0x37,0x00,0x34,0x00,0x74,0x00,0x3a,0x00,0x2a,0x00, 495 | 0x2a,0x20,0x5d,0x5f,0x2a,0x20,0x63,0x5f,0x2a,0x20,0x6b,0x5f, 496 | 0x2a,0x20,0x72,0x5f,0x2a,0x20,0x79,0x5f,0x2a,0x20,0x7e,0x5f, 497 | 0x2a,0x20,0x83,0x5f,0x2a,0x20,0x88,0x5f,0x2a,0x20,0x8b,0x5f, 498 | 0x2a,0x20,0x90,0x5f,0x2a,0x20,0x95,0x5f,0x2a,0x20,0x9a,0x5f, 499 | 0x2a,0x20,0xa0,0x5f,0x2a,0x20,0xa5,0x5f,0x2a,0x20,0xab,0x5f, 500 | 0x2a,0x20,0xae,0x5f,0x35,0x00,0x21,0x20,0xb6,0x5f,0x21,0x20, 501 | 0xb9,0x5f,0x21,0x20,0xbc,0x5f,0x21,0x20,0x2f,0x5e,0x21,0x20, 502 | 0xbf,0x5f,0x21,0x20,0xc3,0x5f,0x21,0x20,0xc5,0x5f,0x21,0x20, 503 | 0xcb,0x5f,0x21,0x20,0xd3,0x5f,0x21,0x20,0xd5,0x5f,0x21,0x20, 504 | 0xda,0x5f,0x21,0x20,0xe0,0x5f,0x21,0x20,0xe6,0x5f,0x21,0x20, 505 | 0xec,0x5f,0x21,0x20,0xf1,0x5f,0x21,0x20,0xf9,0x5f,0x22,0x20, 506 | 0xfa,0x5f,0x22,0x20,0x00,0x60,0x22,0x20,0x07,0x60,0x23,0x20, 507 | 0x0d,0x60,0x23,0x20,0x10,0x60,0x07,0x00,0x07,0x60,0x9a,0x5e, 508 | 0x5b,0x01,0x07,0x60,0x9a,0x5e,0x55,0x01,0x07,0x60,0x9a,0x5e, 509 | 0x3c,0x01,0x07,0x60,0x9a,0x5e,0x4f,0x01,0x07,0x60,0x9a,0x5e, 510 | 0x43,0x01,0x07,0x60,0x13,0x60,0x5b,0x01,0x07,0x60,0x9a,0x5e, 511 | 0x82,0x01,0x07,0x60,0x9a,0x5e,0x88,0x01,0x07,0x60,0x9a,0x5e, 512 | 0x9a,0x01,0x07,0x60,0x9a,0x5e,0x49,0x01,0x07,0x60,0x9a,0x5e, 513 | 0x94,0x01,0x07,0x60,0x9a,0x5e,0xa0,0x01,0x07,0x60,0x9a,0x5e, 514 | 0x7c,0x01,0x07,0x60,0x9a,0x5e,0x6f,0x01,0x07,0x60,0x18,0x60, 515 | 0x8e,0x01,0x07,0x60,0x18,0x60,0x82,0x01,0x07,0x60,0x18,0x60, 516 | 0x76,0x01,0x07,0x60,0x18,0x60,0x88,0x01,0x07,0x60,0x1d,0x60, 517 | 0x61,0x01,0x07,0x60,0x23,0x60,0x9a,0x01,0x07,0x24,0x9a,0x5e, 518 | 0x07,0x20,0x29,0x60,0x07,0x20,0x2e,0x60,0x07,0x20,0x3b,0x5e, 519 | 0x07,0x24,0x3b,0x5e,0x07,0x20,0x2f,0x60,0x07,0x20,0x13,0x60, 520 | 0x07,0x20,0x35,0x60,0x07,0x20,0x18,0x60,0x07,0x20,0x38,0x60, 521 | 0x07,0x20,0x3b,0x60,0x07,0x20,0x3e,0x60,0x07,0x20,0x3f,0x60, 522 | 0x07,0x20,0x40,0x60,0x07,0x20,0x42,0x60,0x07,0x20,0x43,0x60, 523 | 0x07,0x20,0x45,0x60,0x07,0x20,0x46,0x60,0x07,0x20,0x47,0x60, 524 | 0x07,0x20,0x48,0x60,0x07,0x20,0x49,0x60,0x07,0x20,0x4a,0x60, 525 | 0x07,0x20,0x4b,0x60,0x07,0x20,0x4c,0x60,0x07,0x20,0x52,0x60, 526 | 0x47,0x20,0x52,0x60,0x07,0x20,0x57,0x60,0x47,0x20,0x57,0x60, 527 | 0x07,0x20,0x5c,0x60,0x47,0x20,0x64,0x60,0x07,0x20,0x65,0x60, 528 | 0x07,0x20,0x6a,0x60,0x07,0x20,0x6f,0x60,0x07,0x20,0x74,0x60, 529 | 0x07,0x20,0x1d,0x60,0x07,0x20,0x79,0x60,0x07,0x20,0x7a,0x60, 530 | 0x07,0x20,0x80,0x60,0x07,0x20,0x86,0x60,0x07,0x60,0xd7,0x5e, 531 | 0x55,0x01,0x07,0x60,0xd7,0x5e,0x5b,0x01,0x07,0x60,0xd7,0x5e, 532 | 0x82,0x01,0x07,0x20,0x8d,0x60,0x07,0x60,0x93,0x60,0x55,0x01, 533 | 0x07,0x60,0x93,0x60,0x76,0x01,0x07,0x60,0xd7,0x5e,0x49,0x01, 534 | 0x07,0x60,0xd7,0x5e,0x4f,0x01,0x07,0x60,0xd7,0x5e,0x76,0x01, 535 | 0x07,0x20,0xd7,0x5e,0x07,0x20,0x3e,0x5e,0x07,0x20,0x98,0x60, 536 | 0x07,0x20,0x93,0x60,0x47,0x20,0x9e,0x60,0x47,0x20,0x9f,0x60, 537 | 0x47,0x20,0xa0,0x60,0x07,0x20,0xa0,0x60,0x47,0x20,0xa5,0x60, 538 | 0x07,0x60,0xdc,0x5e,0xad,0x01,0x07,0x60,0xdc,0x5e,0xb3,0x01, 539 | 0x07,0x60,0xdc,0x5e,0xa6,0x01,0x07,0x20,0xab,0x60,0x07,0x20, 540 | 0xb1,0x60,0x07,0x60,0x3b,0x5e,0xb3,0x01,0x07,0x60,0x3b,0x5e, 541 | 0xad,0x01,0x07,0x60,0xb7,0x60,0xb3,0x01,0x07,0x60,0xb7,0x60, 542 | 0xad,0x01,0x07,0x60,0xdc,0x5e,0xb9,0x01,0x07,0x60,0xdc,0x5e, 543 | 0xc0,0x01,0x07,0x60,0xbc,0x60,0xad,0x01,0x07,0x60,0xb7,0x60, 544 | 0xa6,0x01,0x07,0x60,0xb7,0x60,0xb9,0x01,0x07,0x60,0xc1,0x60, 545 | 0xad,0x01,0x07,0x60,0x3f,0x60,0xad,0x01,0x07,0x20,0xc6,0x60, 546 | 0x07,0x20,0xcc,0x60,0x07,0x20,0xdc,0x5e,0x07,0x20,0xb7,0x60, 547 | 0x07,0x20,0xc1,0x60,0x07,0x20,0xd2,0x60,0x07,0x20,0xd3,0x60, 548 | 0x07,0x20,0xd4,0x60,0x07,0x20,0xd5,0x60,0x07,0x24,0xdc,0x5e, 549 | 0x07,0x20,0xda,0x60,0x07,0x20,0xdf,0x60,0x07,0x20,0xe5,0x60, 550 | 0x07,0x20,0xed,0x60,0x07,0x20,0xf6,0x60,0x07,0x20,0xfc,0x60, 551 | 0x47,0x20,0xfc,0x60,0x07,0x20,0x41,0x5e,0x07,0x20,0x01,0x61, 552 | 0x07,0x20,0x07,0x61,0x07,0x20,0x0c,0x61,0x07,0x20,0xe1,0x5e, 553 | 0x07,0x20,0x0d,0x61,0x07,0x60,0x12,0x61,0xd4,0x01,0x07,0x60, 554 | 0x12,0x61,0xc6,0x01,0x47,0x20,0x12,0x61,0x07,0x60,0x41,0x5e, 555 | 0xd4,0x01,0x07,0x60,0x17,0x61,0xc6,0x01,0x07,0x60,0x17,0x61, 556 | 0xd4,0x01,0x07,0x60,0x1c,0x61,0xc6,0x01,0x07,0x60,0x1c,0x61, 557 | 0xd4,0x01,0x07,0x60,0x9a,0x5e,0xd4,0x01,0x07,0x60,0x9a,0x5e, 558 | 0xc6,0x01,0x07,0x60,0x3b,0x5e,0xd4,0x01,0x07,0x60,0x3b,0x5e, 559 | 0xc6,0x01,0x07,0x60,0x13,0x60,0xd4,0x01,0x07,0x20,0x12,0x61, 560 | 0x07,0x20,0x1d,0x61,0x07,0x20,0x22,0x61,0x07,0x20,0x28,0x61, 561 | 0x07,0x20,0x2d,0x61,0x07,0x20,0x33,0x61,0x47,0x20,0x33,0x61, 562 | 0x07,0x20,0x47,0x5e,0x07,0x20,0x38,0x61,0x07,0x20,0x3d,0x61, 563 | 0x07,0x20,0x40,0x61,0x07,0x20,0x43,0x61,0x07,0x20,0x44,0x61, 564 | 0x07,0x20,0x45,0x61,0x07,0x20,0x4a,0x61,0x07,0x20,0x4f,0x61, 565 | 0x07,0x20,0x55,0x61,0x47,0x20,0x55,0x61,0x07,0x20,0x4a,0x5e, 566 | 0x07,0x20,0x5a,0x61,0x07,0x20,0x5f,0x61,0x07,0x20,0x62,0x61, 567 | 0x07,0x20,0x67,0x61,0x07,0x20,0x6c,0x61,0x09,0x00,0x09,0x60, 568 | 0xf5,0x5e,0x5b,0x01,0x09,0x20,0x6d,0x61,0x09,0x60,0x00,0x5f, 569 | 0xad,0x01,0x09,0x60,0x00,0x5f,0xb9,0x01,0x09,0x20,0x73,0x61, 570 | 0x08,0x00,0x08,0x60,0x73,0x5e,0x5b,0x01,0x08,0x60,0x73,0x5e, 571 | 0x49,0x01,0x08,0x60,0x73,0x5e,0x82,0x01,0x08,0x60,0x73,0x5e, 572 | 0x76,0x01,0x08,0x60,0x73,0x5e,0x9a,0x01,0x08,0x60,0x73,0x5e, 573 | 0x68,0x01,0x08,0x60,0x73,0x5e,0x55,0x01,0x08,0x60,0x73,0x5e, 574 | 0x94,0x01,0x08,0x20,0x73,0x5e,0x48,0x20,0x73,0x5e,0x08,0x20, 575 | 0x79,0x61,0x08,0x20,0x55,0x5f,0x08,0x20,0x7e,0x61,0x08,0x20, 576 | 0x3e,0x60,0x08,0x20,0x83,0x61,0x08,0x20,0x89,0x61,0x08,0x20, 577 | 0x8e,0x61,0x08,0x20,0x94,0x61,0x08,0x20,0x99,0x61,0x08,0x20, 578 | 0x9f,0x61,0x08,0x20,0xa5,0x61,0x08,0x20,0xaa,0x61,0x08,0x20, 579 | 0xaf,0x61,0x08,0x20,0xb5,0x61,0x08,0x20,0xba,0x61,0x08,0x60, 580 | 0x78,0x5e,0x55,0x01,0x08,0x60,0x78,0x5e,0x6f,0x01,0x08,0x60, 581 | 0x78,0x5e,0x5b,0x01,0x08,0x60,0x78,0x5e,0x49,0x01,0x08,0x60, 582 | 0x78,0x5e,0x76,0x01,0x08,0x20,0x78,0x5e,0x48,0x20,0x78,0x5e, 583 | 0x08,0x20,0xc0,0x61,0x08,0x20,0xc3,0x61,0x08,0x20,0xc8,0x61, 584 | 0x08,0x20,0xcb,0x61,0x08,0x20,0xd0,0x61,0x08,0x20,0xd5,0x61, 585 | 0x08,0x20,0xda,0x61,0x08,0x60,0x7d,0x5e,0xad,0x01,0x08,0x60, 586 | 0x7d,0x5e,0xb3,0x01,0x08,0x60,0x7d,0x5e,0xa6,0x01,0x08,0x20, 587 | 0xe0,0x61,0x08,0x20,0xe6,0x61,0x08,0x20,0xf0,0x61,0x08,0x60, 588 | 0x7d,0x5e,0xb9,0x01,0x08,0x20,0xf8,0x61,0x08,0x20,0x7d,0x5e, 589 | 0x48,0x20,0x7d,0x5e,0x08,0x20,0x00,0x62,0x08,0x20,0x08,0x62, 590 | 0x08,0x20,0x0e,0x62,0x08,0x20,0x13,0x62,0x08,0x20,0x19,0x62, 591 | 0x08,0x20,0x1f,0x62,0x08,0x20,0x27,0x62,0x08,0x20,0x2f,0x62, 592 | 0x08,0x20,0x37,0x62,0x08,0x20,0x82,0x5e,0x08,0x20,0x3d,0x62, 593 | 0x08,0x20,0x42,0x62,0x08,0x20,0x47,0x62,0x08,0x20,0x4c,0x62, 594 | 0x08,0x60,0x4c,0x62,0xcd,0x01,0x08,0x60,0x4c,0x62,0xd4,0x01, 595 | 0x08,0x60,0x4c,0x62,0xc6,0x01,0x08,0x60,0x4c,0x62,0xda,0x01, 596 | 0x08,0x60,0x73,0x5e,0xd4,0x01,0x08,0x60,0x73,0x5e,0xc6,0x01, 597 | 0x08,0x60,0x73,0x5e,0xcd,0x01,0x08,0x20,0x51,0x62,0x08,0x20, 598 | 0x8c,0x5e,0x08,0x20,0x91,0x5e,0x08,0x60,0x57,0x62,0xe1,0x01, 599 | 0x08,0x20,0x5c,0x62,0x08,0x20,0x5f,0x62,0x0d,0x00,0x0d,0x60, 600 | 0x9f,0x5e,0xe7,0x01,0x0d,0x60,0x9f,0x5e,0x14,0x00,0x4d,0x60, 601 | 0x9f,0x5e,0x1a,0x00,0x4d,0x60,0x9f,0x5e,0x14,0x00,0x0d,0x60, 602 | 0x9f,0x5e,0x31,0x00,0x0d,0x60,0x9f,0x5e,0xee,0x01,0x0d,0x60, 603 | 0x9f,0x5e,0xf4,0x01,0x4d,0x60,0x9f,0x5e,0x31,0x00,0x0d,0x60, 604 | 0x62,0x62,0xfb,0x01,0x0d,0x60,0x9f,0x5e,0x1a,0x00,0x0d,0x20, 605 | 0x1b,0x5e,0x0d,0x20,0x9f,0x5e,0x13,0x20,0x9f,0x5e,0x0d,0x20, 606 | 0x67,0x62,0x0d,0x20,0x68,0x62,0x0d,0x20,0x69,0x62,0x4d,0x20, 607 | 0x64,0x60,0x4d,0x20,0x4b,0x60,0x0d,0x20,0x6a,0x62,0x0d,0x20, 608 | 0x62,0x62,0x4d,0x20,0x62,0x62,0x0d,0x60,0xc8,0x5e,0x31,0x00, 609 | 0x0d,0x60,0xc8,0x5e,0x1a,0x00,0x0d,0x20,0x1f,0x5e,0x0d,0x60, 610 | 0x6f,0x62,0x14,0x00,0x0d,0x60,0x6f,0x62,0x06,0x00,0x0d,0x60, 611 | 0x6f,0x62,0x0d,0x00,0x0d,0x20,0xa4,0x5e,0x0d,0x60,0xc8,0x5e, 612 | 0x14,0x00,0x4d,0x60,0x6f,0x62,0x14,0x00,0x0d,0x20,0xc8,0x5e, 613 | 0x0d,0x20,0x74,0x62,0x0d,0x60,0xa9,0x5e,0x6e,0x00,0x0d,0x60, 614 | 0xa9,0x5e,0x7a,0x00,0x0d,0x60,0xa9,0x5e,0x67,0x00,0x0d,0x60, 615 | 0xa9,0x5e,0x60,0x00,0x0d,0x60,0xa9,0x5e,0x74,0x00,0x0d,0x60, 616 | 0xa9,0x5e,0x02,0x02,0x4d,0x60,0xa9,0x5e,0x67,0x00,0x4d,0x60, 617 | 0xa9,0x5e,0x60,0x00,0x0d,0x20,0x22,0x5e,0x0d,0x20,0x7b,0x62, 618 | 0x0d,0x20,0x7c,0x62,0x4d,0x20,0x7e,0x62,0x4d,0x20,0x9e,0x60, 619 | 0x4d,0x20,0x7f,0x62,0x4d,0x20,0x81,0x62,0x0d,0x60,0x82,0x62, 620 | 0x7a,0x00,0x0d,0x60,0x82,0x62,0x10,0x02,0x4d,0x60,0xa9,0x5e, 621 | 0x02,0x02,0x0d,0x20,0xa9,0x5e,0x0d,0x20,0x87,0x62,0x0d,0x20, 622 | 0x88,0x62,0x0d,0x20,0x82,0x62,0x0d,0x20,0xcd,0x5e,0x0d,0x20, 623 | 0x8d,0x62,0x0d,0x20,0x26,0x5e,0x0d,0x20,0x92,0x62,0x0d,0x20, 624 | 0x99,0x62,0x0d,0x20,0x9e,0x62,0x0d,0x20,0xa4,0x62,0x0d,0x60, 625 | 0xaa,0x62,0x1d,0x02,0x0d,0x20,0xaf,0x62,0x0d,0x60,0x9f,0x5e, 626 | 0x1d,0x02,0x0d,0x20,0xb1,0x62,0x0d,0x20,0xaa,0x62,0x4d,0x20, 627 | 0xaa,0x62,0x0d,0x20,0x29,0x5e,0x0d,0x20,0xb3,0x62,0x0d,0x20, 628 | 0x67,0x5e,0x0d,0x20,0xb9,0x62,0x0d,0x20,0xbf,0x62,0x0d,0x20, 629 | 0xc5,0x62,0x0d,0x20,0xca,0x62,0x0d,0x20,0x6f,0x62,0x0d,0x20, 630 | 0xcf,0x62,0x4d,0x20,0xcf,0x62,0x0d,0x20,0x2c,0x5e,0x0d,0x20, 631 | 0x9e,0x60,0x0d,0x20,0xd4,0x62,0x0d,0x20,0xd9,0x62,0x0d,0x20, 632 | 0xde,0x62,0x0d,0x20,0xe3,0x62,0x0d,0x20,0xd2,0x5e,0x0d,0x20, 633 | 0x2f,0x5e,0x0d,0x20,0xea,0x62,0x0d,0x20,0xeb,0x62,0x0d,0x20, 634 | 0xec,0x62,0x0d,0x20,0xed,0x62,0x0d,0x20,0xf2,0x62,0x0d,0x20, 635 | 0xf7,0x62,0x0d,0x20,0xfc,0x62,0x0d,0x20,0x02,0x63,0x0f,0x20, 636 | 0x08,0x63,0x0f,0x60,0x0e,0x63,0x7a,0x00,0x0f,0x20,0x0e,0x63, 637 | 0x0f,0x20,0x14,0x63,0x0f,0x20,0x1a,0x63,0x58,0x20,0x9a,0x5e, 638 | 0x58,0x20,0x12,0x61,0x0e,0x00,0x0e,0x60,0xf0,0x5e,0x54,0x00, 639 | 0x0e,0x60,0xf0,0x5e,0x14,0x00,0x0e,0x60,0xf0,0x5e,0x31,0x00, 640 | 0x0e,0x60,0xf0,0x5e,0x20,0x00,0x0e,0x20,0xf0,0x5e,0x4e,0x20, 641 | 0xf0,0x5e,0x0b,0x20,0xf0,0x5e,0x0e,0x20,0x1b,0x5e,0x0e,0x20, 642 | 0x1f,0x63,0x0b,0x20,0x1f,0x63,0x0e,0x20,0x24,0x63,0x0e,0x60, 643 | 0x29,0x63,0x14,0x00,0x0e,0x60,0x29,0x63,0x1a,0x00,0x0e,0x60, 644 | 0x2e,0x63,0x14,0x00,0x0e,0x20,0x1f,0x5e,0x0e,0x20,0x29,0x63, 645 | 0x0b,0x20,0x29,0x63,0x0b,0x20,0x24,0x63,0x14,0x20,0x24,0x63, 646 | 0x0b,0x20,0x33,0x63,0x0e,0x20,0x39,0x63,0x0e,0x60,0x3f,0x63, 647 | 0x7a,0x00,0x0e,0x60,0x3f,0x63,0x6e,0x00,0x0e,0x60,0x3f,0x63, 648 | 0x60,0x00,0x0e,0x60,0x3f,0x63,0x67,0x00,0x0e,0x60,0x3f,0x63, 649 | 0x74,0x00,0x4e,0x60,0x3f,0x63,0x6e,0x00,0x4e,0x60,0x3f,0x63, 650 | 0x7a,0x00,0x0b,0x60,0x3f,0x63,0x67,0x00,0x0b,0x60,0x3f,0x63, 651 | 0x6e,0x00,0x0b,0x60,0x3f,0x63,0x7a,0x00,0x0b,0x60,0x3f,0x63, 652 | 0x60,0x00,0x14,0x60,0x3f,0x63,0x67,0x00,0x14,0x60,0x3f,0x63, 653 | 0x6e,0x00,0x0e,0x20,0x22,0x5e,0x0b,0x20,0x22,0x5e,0x0e,0x20, 654 | 0x3f,0x63,0x0b,0x20,0x3f,0x63,0x14,0x20,0x3f,0x63,0x0e,0x20, 655 | 0x44,0x63,0x0b,0x20,0x44,0x63,0x0e,0x20,0x49,0x63,0x0b,0x20, 656 | 0x49,0x63,0x0b,0x20,0x4e,0x63,0x0e,0x20,0x53,0x63,0x0e,0x20, 657 | 0x5a,0x63,0x0e,0x20,0x5f,0x63,0x0b,0x20,0x5f,0x63,0x0e,0x60, 658 | 0xf0,0x5e,0x1d,0x02,0x0e,0x20,0x65,0x63,0x0b,0x20,0x65,0x63, 659 | 0x0e,0x20,0x29,0x5e,0x0e,0x20,0x6a,0x63,0x0e,0x20,0x72,0x63, 660 | 0x14,0x20,0x72,0x63,0x0b,0x20,0x78,0x63,0x0e,0x20,0x7e,0x63, 661 | 0x0b,0x20,0x7e,0x63,0x0e,0x20,0x84,0x63,0x14,0x20,0x84,0x63, 662 | 0x0e,0x20,0x2e,0x63,0x0e,0x20,0x89,0x63,0x0b,0x20,0x89,0x63, 663 | 0x0e,0x20,0x2c,0x5e,0x0b,0x20,0x8e,0x63,0x14,0x20,0x93,0x63, 664 | 0x0b,0x20,0x99,0x63,0x0e,0x20,0x9e,0x63,0x0e,0x20,0xa3,0x63, 665 | 0x0e,0x20,0x2f,0x5e,0x0e,0x20,0xa8,0x63,0x0e,0x20,0xad,0x63, 666 | 0x0e,0x20,0xb3,0x63,0x0e,0x20,0xb8,0x63,0x0f,0x60,0x08,0x63, 667 | 0x54,0x00,0x0f,0x60,0x0e,0x63,0x67,0x00,0x0f,0x60,0x0e,0x63, 668 | 0x6e,0x00,0x0f,0x20,0xbe,0x63,0x14,0x60,0xf0,0x5e,0x31,0x00, 669 | 0x14,0x20,0x1b,0x5e,0x14,0x20,0x1f,0x63,0x14,0x20,0x29,0x63, 670 | 0x14,0x20,0x39,0x63,0x14,0x60,0x3f,0x63,0x7a,0x00,0x14,0x60, 671 | 0x3f,0x63,0x60,0x00,0x14,0x20,0x49,0x63,0x14,0x20,0x4e,0x63, 672 | 0x14,0x20,0x5f,0x63,0x14,0x20,0x65,0x63,0x14,0x20,0x89,0x63, 673 | 0x10,0x60,0xe6,0x5e,0x14,0x00,0x10,0x60,0xe6,0x5e,0x1a,0x00, 674 | 0x50,0x60,0xe6,0x5e,0x14,0x00,0x10,0x20,0xc3,0x63,0x10,0x20, 675 | 0xc9,0x63,0x10,0x60,0xcf,0x63,0x54,0x00,0x10,0x20,0xd2,0x63, 676 | 0x10,0x60,0xe6,0x5e,0xf4,0x01,0x10,0x60,0xe6,0x5e,0x20,0x00, 677 | 0x10,0x60,0xe6,0x5e,0x31,0x00,0x10,0x60,0xe6,0x5e,0x54,0x00, 678 | 0x10,0x20,0xd5,0x63,0x10,0x20,0xe6,0x5e,0x10,0x20,0x3f,0x60, 679 | 0x10,0x20,0xdb,0x63,0x10,0x20,0xe3,0x63,0x10,0x20,0xe9,0x63, 680 | 0x10,0x20,0xee,0x63,0x10,0x20,0xf3,0x63,0x10,0x20,0xf9,0x63, 681 | 0x10,0x20,0xfc,0x63,0x10,0x60,0x01,0x64,0x7a,0x00,0x10,0x60, 682 | 0x01,0x64,0x6e,0x00,0x0a,0x60,0x01,0x64,0x7a,0x00,0x0a,0x60, 683 | 0x01,0x64,0x6e,0x00,0x10,0x20,0x06,0x64,0x10,0x60,0x0b,0x64, 684 | 0x6e,0x00,0x0a,0x60,0x0b,0x64,0x6e,0x00,0x10,0x20,0x11,0x64, 685 | 0x10,0x20,0x01,0x64,0x10,0x20,0x16,0x64,0x10,0x20,0x1b,0x64, 686 | 0x10,0x20,0x21,0x64,0x10,0x20,0xeb,0x5e,0x50,0x20,0xeb,0x5e, 687 | 0x0a,0x20,0x27,0x64,0x10,0x20,0x2c,0x64,0x0a,0x20,0x31,0x64, 688 | 0x10,0x60,0xeb,0x5e,0x16,0x02,0x10,0x60,0xeb,0x5e,0x1d,0x02, 689 | 0x50,0x60,0xeb,0x5e,0x1d,0x02,0x10,0x20,0x36,0x64,0x10,0x20, 690 | 0x3b,0x64,0x50,0x20,0x3b,0x64,0x10,0x20,0x41,0x64,0x10,0x60, 691 | 0xe6,0x5e,0x1d,0x02,0x10,0x60,0xe6,0x5e,0x16,0x02,0x10,0x60, 692 | 0xe6,0x5e,0x23,0x02,0x10,0x20,0x47,0x64,0x10,0x20,0x4c,0x64, 693 | 0x50,0x20,0x4c,0x64,0x10,0x20,0x56,0x5e,0x10,0x20,0x51,0x64, 694 | 0x10,0x20,0x52,0x64,0x10,0x20,0x58,0x64,0x10,0x20,0x5d,0x64, 695 | 0x10,0x20,0x60,0x64,0x10,0x20,0x65,0x64,0x50,0x20,0x65,0x64, 696 | 0x10,0x20,0x6e,0x64,0x10,0x20,0x74,0x64,0x10,0x20,0x75,0x64, 697 | 0x10,0x20,0x76,0x64,0x10,0x20,0x77,0x64,0x10,0x20,0x79,0x64, 698 | 0x10,0x20,0x7a,0x64,0x10,0x20,0x7b,0x64,0x10,0x20,0x80,0x64, 699 | 0x10,0x20,0x82,0x64,0x10,0x20,0x87,0x64,0x10,0x20,0x8c,0x64, 700 | 0x10,0x20,0x8f,0x64,0x10,0x20,0x94,0x64,0x12,0x20,0x99,0x64, 701 | 0x12,0x20,0x9e,0x64,0x11,0x00,0x11,0x20,0xa8,0x64,0x51,0x20, 702 | 0xa8,0x64,0x16,0x20,0xa8,0x64,0x0c,0x20,0xad,0x64,0x11,0x20, 703 | 0xd2,0x63,0x11,0x60,0xb2,0x64,0x7a,0x00,0x11,0x60,0xb2,0x64, 704 | 0x6e,0x00,0x0c,0x60,0xb2,0x64,0x60,0x00,0x0c,0x20,0xb7,0x64, 705 | 0x11,0x20,0xbc,0x64,0x0c,0x20,0xc1,0x64,0x11,0x20,0xc7,0x64, 706 | 0x0c,0x20,0xc7,0x64,0x11,0x20,0xcc,0x64,0x11,0x20,0xcd,0x64, 707 | 0x12,0x20,0xd4,0x64,0x19,0x60,0xd9,0x64,0x14,0x00,0x19,0x60, 708 | 0xd9,0x64,0x06,0x00,0x19,0x20,0xe5,0x64,0x19,0x60,0xd9,0x64, 709 | 0x0d,0x00,0x19,0x62,0xd9,0x64,0x14,0x00,0x19,0x60,0xef,0x64, 710 | 0x14,0x00,0x19,0x60,0xef,0x64,0x06,0x00,0x19,0x60,0xfa,0x64, 711 | 0x14,0x00,0x19,0x60,0xfa,0x64,0x06,0x00,0x19,0x60,0xfa,0x64, 712 | 0x0d,0x00,0x19,0x62,0xfa,0x64,0x14,0x00,0x19,0x20,0x04,0x65, 713 | 0x19,0x20,0x10,0x65,0x19,0x20,0x1b,0x65,0x19,0x20,0x25,0x65, 714 | 0x19,0x20,0x30,0x65,0x19,0x20,0x3b,0x65,0x19,0x22,0x3b,0x65, 715 | 0x19,0x20,0x45,0x65,0x19,0x20,0x4b,0x65,0x19,0x20,0x4f,0x65, 716 | 0x19,0x20,0x5b,0x65,0x19,0x20,0x68,0x65,0x19,0x20,0x74,0x65, 717 | 0x19,0x20,0x80,0x65,0x19,0x20,0x8a,0x65,0x19,0x20,0x97,0x65, 718 | 0x19,0x60,0xa2,0x65,0x14,0x00,0x19,0x60,0xa2,0x65,0x0d,0x00, 719 | 0x19,0x60,0xa2,0x65,0x06,0x00,0x19,0x62,0xa2,0x65,0x14,0x00, 720 | 0x19,0x60,0xad,0x65,0x14,0x00,0x19,0x60,0xb8,0x65,0x14,0x00, 721 | 0x19,0x60,0xb8,0x65,0x0d,0x00,0x19,0x60,0xb8,0x65,0x06,0x00, 722 | 0x19,0x62,0xb8,0x65,0x14,0x00,0x19,0x60,0xc3,0x65,0x14,0x00, 723 | 0x19,0x60,0xc3,0x65,0x0d,0x00,0x19,0x20,0xfa,0x64,0x19,0x22, 724 | 0xe5,0x64,0x19,0x60,0xd9,0x64,0x1a,0x00,0x19,0x60,0xd9,0x64, 725 | 0x20,0x00,0x19,0x20,0xcf,0x65,0x19,0x60,0xd9,0x64,0x31,0x00, 726 | 0x19,0x20,0xdb,0x65,0x19,0x60,0xa2,0x65,0x31,0x00,0x19,0x60, 727 | 0xa2,0x65,0x20,0x00,0x19,0x20,0xe6,0x65,0x19,0x20,0xea,0x65, 728 | 0x19,0x20,0xee,0x65,0x19,0x20,0xfb,0x65,0x19,0x20,0x07,0x66, 729 | 0x19,0x60,0xd9,0x64,0x37,0x00,0x19,0x60,0x12,0x66,0x14,0x00, 730 | 0x19,0x60,0x12,0x66,0x06,0x00,0x19,0x61,0x12,0x66,0x14,0x00, 731 | 0x19,0x60,0x1e,0x66,0x06,0x00,0x19,0x60,0x1e,0x66,0x54,0x00, 732 | 0x19,0x60,0x1e,0x66,0x31,0x00,0x19,0x60,0x2a,0x66,0x06,0x00, 733 | 0x19,0x20,0x35,0x66,0x19,0x20,0x38,0x66,0x19,0x60,0x1e,0x66, 734 | 0x14,0x00,0x19,0x60,0x42,0x66,0x14,0x00,0x19,0x60,0x4d,0x66, 735 | 0x14,0x00,0x19,0x20,0xd9,0x64,0x19,0x22,0xd9,0x64,0x19,0x20, 736 | 0x59,0x66,0x19,0x22,0xfa,0x64,0x19,0x20,0xa2,0x65,0x19,0x20, 737 | 0xad,0x65,0x19,0x20,0x64,0x66,0x19,0x20,0xb8,0x65,0x19,0x20, 738 | 0x66,0x66,0x19,0x60,0x72,0x66,0x26,0x00,0x19,0x20,0x7d,0x66, 739 | 0x19,0x60,0x72,0x66,0x3e,0x00,0x19,0x60,0x72,0x66,0x44,0x00, 740 | 0x19,0x20,0x89,0x66,0x19,0x60,0x72,0x66,0x4e,0x00,0x19,0x20, 741 | 0x96,0x66,0x19,0x20,0x9c,0x66,0x19,0x60,0x72,0x66,0x49,0x00, 742 | 0x19,0x20,0x9d,0x66,0x19,0x20,0x12,0x66,0x19,0x20,0x1e,0x66, 743 | 0x19,0x20,0x42,0x66,0x19,0x20,0xa9,0x66,0x19,0x60,0xb4,0x66, 744 | 0x3e,0x00,0x19,0x60,0xb4,0x66,0x49,0x00,0x19,0x60,0xb4,0x66, 745 | 0x44,0x00,0x19,0x60,0xbf,0x66,0x3e,0x00,0x19,0x20,0xca,0x66, 746 | 0x19,0x22,0x38,0x66,0x19,0x20,0xcd,0x66,0x19,0x20,0xd1,0x66, 747 | 0x19,0x60,0xd7,0x66,0x14,0x00,0x19,0x60,0xd7,0x66,0x0d,0x00, 748 | 0x19,0x20,0xe2,0x66,0x19,0x60,0xec,0x66,0x5a,0x00,0x19,0x20, 749 | 0xf7,0x66,0x19,0x22,0xf7,0x66,0x19,0x60,0x01,0x67,0x14,0x00, 750 | 0x19,0x20,0x0d,0x67,0x19,0x20,0x18,0x67,0x19,0x60,0x23,0x67, 751 | 0x80,0x00,0x19,0x20,0x2e,0x67,0x19,0x60,0x38,0x67,0x7a,0x00, 752 | 0x19,0x60,0x38,0x67,0x60,0x00,0x19,0x60,0x38,0x67,0x6e,0x00, 753 | 0x19,0x60,0x38,0x67,0x67,0x00,0x19,0x20,0x43,0x67,0x19,0x60, 754 | 0x46,0x67,0x7a,0x00,0x19,0x60,0x23,0x67,0x88,0x00,0x19,0x60, 755 | 0x46,0x67,0x74,0x00,0x19,0x20,0x51,0x67,0x19,0x60,0x5e,0x67, 756 | 0x80,0x00,0x19,0x60,0x5e,0x67,0x92,0x00,0x19,0x20,0x69,0x67, 757 | 0x19,0x60,0x38,0x67,0x80,0x00,0x19,0x60,0x23,0x67,0xa4,0x00, 758 | 0x19,0x60,0x38,0x67,0x74,0x00,0x19,0x60,0x23,0x67,0xc1,0x00, 759 | 0x19,0x60,0x23,0x67,0xcb,0x00,0x19,0x60,0x23,0x67,0xd5,0x00, 760 | 0x19,0x60,0x23,0x67,0xde,0x00,0x19,0x20,0x73,0x67,0x19,0x60, 761 | 0x80,0x67,0x92,0x00,0x19,0x60,0x8c,0x67,0x9c,0x00,0x19,0x60, 762 | 0x23,0x67,0xb8,0x00,0x19,0x60,0x23,0x67,0xae,0x00,0x19,0x20, 763 | 0x98,0x67,0x19,0x60,0x5e,0x67,0xe7,0x00,0x19,0x60,0x5e,0x67, 764 | 0xef,0x00,0x19,0x60,0x5e,0x67,0xf4,0x00,0x19,0x20,0xa5,0x67, 765 | 0x19,0x20,0x38,0x67,0x19,0x20,0x46,0x67,0x19,0x60,0x23,0x67, 766 | 0xef,0x00,0x19,0x60,0x23,0x67,0xf9,0x00,0x19,0x60,0x23,0x67, 767 | 0x05,0x01,0x19,0x60,0x23,0x67,0xfe,0x00,0x19,0x60,0x23,0x67, 768 | 0x0c,0x01,0x19,0x60,0x23,0x67,0x14,0x01,0x19,0x60,0xb0,0x67, 769 | 0xf4,0x00,0x19,0x60,0x5e,0x67,0xf9,0x00,0x19,0x20,0xbc,0x67, 770 | 0x19,0x20,0xc6,0x67,0x19,0x60,0xc9,0x67,0x1d,0x01,0x19,0x60, 771 | 0xd6,0x67,0xef,0x00,0x19,0x20,0xe1,0x67,0x19,0x20,0xeb,0x67, 772 | 0x19,0x60,0xd6,0x67,0xf9,0x00,0x19,0x60,0xd6,0x67,0x26,0x01, 773 | 0x19,0x60,0xf6,0x67,0xf9,0x00,0x19,0x20,0x01,0x68,0x19,0x20, 774 | 0x0d,0x68,0x19,0x60,0x18,0x68,0x30,0x01,0x19,0x20,0x23,0x68, 775 | 0x19,0x20,0x2e,0x68,0x19,0x20,0x39,0x68,0x19,0x21,0x39,0x68, 776 | 0x19,0x20,0x43,0x68,0x19,0x20,0x4e,0x68,0x19,0x21,0x4e,0x68, 777 | 0x19,0x20,0x58,0x68,0x19,0x20,0x67,0x68,0x19,0x20,0x6a,0x68, 778 | 0x19,0x20,0x78,0x68,0x19,0x20,0x85,0x68,0x24,0x20,0x90,0x68, 779 | 0x1c,0x20,0x99,0x68,0x24,0x20,0x99,0x68,0x1c,0x20,0x38,0x66, 780 | 0x24,0x20,0x38,0x66,0x1c,0x20,0xf7,0x66,0x1c,0x20,0x69,0x67, 781 | 0x1c,0x20,0xa3,0x68,0x1c,0x20,0xae,0x68,0x1c,0x20,0xe1,0x67, 782 | 0x1c,0x20,0x4e,0x68,0x1d,0x20,0xb8,0x68,0x1d,0x20,0xbf,0x68, 783 | 0x1d,0x20,0xc6,0x68,0x1d,0x20,0xca,0x68,0x1d,0x20,0xcd,0x68, 784 | 0x1d,0x20,0xd0,0x68,0x1d,0x20,0xd3,0x68,0x1c,0x00,0x1c,0x20, 785 | 0x90,0x68,0x1c,0x20,0xd7,0x68,0x1c,0x20,0xe0,0x68,0x1c,0x20, 786 | 0xe9,0x68,0x1c,0x20,0xf2,0x68,0x1c,0x20,0xfb,0x68,0x1c,0x20, 787 | 0x04,0x69,0x1c,0x20,0x0d,0x69,0x1c,0x20,0x16,0x69,0x1c,0x20, 788 | 0x64,0x66,0x5d,0x20,0x1f,0x69,0x5d,0x20,0x24,0x69,0x1f,0x20, 789 | 0x27,0x69,0x1e,0x20,0x2c,0x69,0x20,0x20,0x32,0x69,0x20,0x20, 790 | 0x38,0x69,0x20,0x20,0x3b,0x69,0x20,0x20,0x3e,0x69,0x20,0x20, 791 | 0x41,0x69,0x0d,0x20,0x44,0x69,0x0d,0x20,0x4a,0x69,0x0d,0x20, 792 | 0x4b,0x69,0x0d,0x20,0x51,0x69,0x0d,0x20,0x57,0x69,0x0d,0x20, 793 | 0x58,0x69,0x0e,0x20,0x5e,0x69,0x0e,0x20,0x64,0x69,0x0e,0x20, 794 | 0x6a,0x69,0x0e,0x20,0x70,0x69,0x0e,0x20,0x76,0x69,0x07,0x20, 795 | 0x7f,0x69,0x47,0x20,0x7f,0x69,0x07,0x20,0x84,0x69,0x47,0x20, 796 | 0x84,0x69,0x07,0x20,0x89,0x69,0x47,0x20,0x89,0x69,0x07,0x20, 797 | 0x8e,0x69,0x47,0x20,0x8e,0x69,0x48,0x20,0x93,0x69,0x08,0x20, 798 | 0x93,0x69,0x48,0x20,0x98,0x69,0x08,0x20,0x98,0x69,0x48,0x20, 799 | 0x9d,0x69,0x08,0x20,0x9d,0x69,0x48,0x20,0xa2,0x69,0x08,0x20, 800 | 0xa2,0x69,0x08,0x20,0xa7,0x69,0x08,0x20,0xac,0x69,0x08,0x20, 801 | 0xb4,0x69,0x50,0x20,0xb7,0x69,0x10,0x20,0xb7,0x69,0x10,0x20, 802 | 0xbc,0x69,0x10,0x20,0xbf,0x69,0x10,0x20,0xc4,0x69,0x50,0x20, 803 | 0xc7,0x69,0x10,0x20,0xc7,0x69,0x10,0x20,0xcc,0x69,0x11,0x20, 804 | 0xcf,0x69,0x11,0x20,0xd4,0x69,0x11,0x20,0xd9,0x69,0x11,0x20, 805 | 0xde,0x69,0x07,0x28,0x9a,0x5e,0x0d,0x28,0x2f,0x5e,0x08,0x28, 806 | 0x7d,0x5e,0x08,0x28,0x73,0x5e,0x02,0x28,0xe6,0x69,0x04,0x28, 807 | 0x1f,0x6a,0x03,0x28,0x31,0x6a,0x02,0x28,0x60,0x6a,0x04,0x28, 808 | 0xcc,0x4a,0x03,0x28,0xb1,0x49,0x03,0x28,0x7c,0x36,0x01,0x28, 809 | 0xca,0x16,0x03,0x28,0xb9,0x3f,0x03,0x28,0xcf,0x39,0x03,0x28, 810 | 0x73,0x38,0x01,0x28,0x03,0x06,0x03,0x28,0xc3,0x35,0x19,0x28, 811 | 0xe5,0x64,0x0d,0x28,0x9f,0x5e,0x0d,0x28,0x1f,0x5e,0x0d,0x68, 812 | 0xa9,0x5e,0x7a,0x00,0x0d,0x28,0x22,0x5e,0x0d,0x28,0x2c,0x5e, 813 | 0x0e,0x28,0xf0,0x5e,0x0e,0x68,0x3f,0x63,0x7a,0x00,0x0e,0x68, 814 | 0x3f,0x63,0x60,0x00,0x0e,0x28,0x49,0x63,0x0e,0x28,0xad,0x63, 815 | 0x07,0x28,0x3b,0x5e,0x07,0x28,0xdc,0x5e,0x07,0x68,0x41,0x5e, 816 | 0xd4,0x01,0x07,0x28,0x4a,0x61,0x07,0x28,0x55,0x61,0x08,0x28, 817 | 0x78,0x5e,0x08,0x28,0x82,0x5e,0x08,0x68,0x4c,0x62,0xd4,0x01, 818 | 0x08,0x28,0x8c,0x5e,0x36,0x08,0x01,0x28,0x91,0x0e,0x01,0x68, 819 | 0xa1,0x0c,0x2a,0x02,0x01,0x68,0x18,0x14,0x70,0x02,0x01,0x28, 820 | 0x1f,0x21,0x02,0x28,0x68,0x27,0x02,0x28,0x24,0x28,0x02,0x28, 821 | 0x34,0x2a,0x02,0x68,0x8f,0x2b,0xa5,0x02,0x19,0x68,0xd9,0x64, 822 | 0x06,0x00,0x19,0x28,0xef,0x64,0x19,0x68,0xfa,0x64,0x14,0x00, 823 | 0x19,0x28,0x3b,0x65,0x19,0x28,0xfa,0x64,0x19,0x28,0x2e,0x67, 824 | 0x19,0x28,0xbc,0x67,0x19,0x28,0x2e,0x68,0x10,0x28,0xd2,0x63, 825 | 0x10,0x28,0xe6,0x5e,0x03,0x28,0x58,0x39,0x03,0x28,0x63,0x3c, 826 | 0x03,0x28,0xcb,0x3d,0x03,0x28,0x05,0x3e,0x03,0x28,0x22,0x3e, 827 | 0x03,0x68,0x36,0x19,0x70,0x02,0x03,0x68,0x57,0x46,0x70,0x02, 828 | 0x03,0x28,0x61,0x49,0x03,0x28,0x9a,0x6a,0x04,0x28,0xcf,0x39, 829 | 0x04,0x28,0x2c,0x5a,0x04,0x68,0xe3,0x42,0x70,0x02,0x04,0x68, 830 | 0xf1,0x45,0x70,0x02,0x04,0x68,0x02,0x46,0x70,0x02,0x04,0x28, 831 | 0xa1,0x21,0x04,0x28,0xb6,0x6a,0x0b,0x28,0xf0,0x5e,0x0a,0x28, 832 | 0xe6,0x5e,0x0a,0x28,0x27,0x64,0x4d,0x68,0xa9,0x5e,0x7a,0x00, 833 | 0x47,0x28,0xd7,0x5e,0x0b,0x68,0x3f,0x63,0x6e,0x00,0x1b,0x28, 834 | 0x10,0x5f 835 | }; 836 | 837 | } // end namespace 838 | 839 | -------------------------------------------------------------------------------- /dictree/mixTypes.cpp: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | 3 | libmorphrus - dictiorary-based morphological analyser for Russian. 4 | Copyright (C) 1994-2016 Andrew Kovalenko aka Keva 5 | 6 | This program is free software; you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation; either version 2 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License along 17 | with this program; if not, write to the Free Software Foundation, Inc., 18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | 20 | Contacts: 21 | email: keva@meta.ua, keva@rambler.ru 22 | Skype: big_keva 23 | Phone: +7(495)648-4058, +7(926)513-2991 24 | 25 | ******************************************************************************/ 26 | #include "namespace.h" 27 | #include "mlmadefs.h" 28 | 29 | namespace __libmorphrus__ 30 | { 31 | 32 | unsigned char const mixTypes[] = 33 | { 34 | 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06, 35 | 0x06,0x05,0x06,0x07,0x05,0x06,0x07,0x05,0x06,0x05,0x06,0x05, 36 | 0x05,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 37 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 38 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 39 | 0x00,0x00,0x00,0x00 40 | }; 41 | 42 | } // end namespace 43 | 44 | -------------------------------------------------------------------------------- /dictree/mxTables.cpp: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | 3 | libmorphrus - dictiorary-based morphological analyser for Russian. 4 | Copyright (C) 1994-2016 Andrew Kovalenko aka Keva 5 | 6 | This program is free software; you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation; either version 2 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License along 17 | with this program; if not, write to the Free Software Foundation, Inc., 18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | 20 | Contacts: 21 | email: keva@meta.ua, keva@rambler.ru 22 | Skype: big_keva 23 | Phone: +7(495)648-4058, +7(926)513-2991 24 | 25 | ******************************************************************************/ 26 | #include "namespace.h" 27 | #include "mlmadefs.h" 28 | 29 | namespace __libmorphrus__ 30 | { 31 | 32 | unsigned char const mxTables[] = 33 | { 34 | 0x69,0x6e,0x74,0x65,0x72,0x63,0x02,0x22,0xe5,0xed,0x52,0xfc, 35 | 0xed,0x02,0x22,0xe5,0xed,0x52,0xe9,0xed,0x02,0x22,0xe5,0xed, 36 | 0x51,0xed,0x02,0x22,0xe5,0xeb,0x51,0xeb,0x02,0x22,0xe5,0xf0, 37 | 0x51,0xf0,0x02,0x33,0xec,0xe0,0xeb,0x45,0xec,0xe5,0xed,0xfc, 38 | 0xf8,0x02,0x51,0xed,0x22,0xee,0xed,0x02,0x22,0xe8,0xed,0x52, 39 | 0xe9,0xed,0x02,0x32,0xf1,0xf2,0x41,0xf9,0x02,0x31,0xe4,0x41, 40 | 0xe6,0x02,0x31,0xf2,0x41,0xf7,0x02,0x31,0xe2,0x42,0xe2,0xeb, 41 | 0x02,0x51,0xeb,0x22,0xee,0xeb,0x02,0x21,0xed,0x52,0xed,0xed, 42 | 0x02,0x22,0xe5,0xea,0x52,0xe9,0xea,0x02,0x22,0xe5,0xea,0x52, 43 | 0xfc,0xea,0x02,0x22,0xe5,0xea,0x51,0xea,0x02,0x51,0xe3,0x22, 44 | 0xee,0xe3,0x02,0x51,0xea,0x22,0xee,0xea,0x03,0x11,0xea,0x22, 45 | 0xee,0xea,0x41,0xf7,0x03,0x12,0xf1,0xea,0x23,0xf1,0xee,0xea, 46 | 0x41,0xf9,0x03,0x22,0xe5,0xea,0x12,0xe9,0xea,0x42,0xe9,0xf7, 47 | 0x03,0x40,0x22,0xe5,0xea,0x12,0xfc,0xea,0x03,0x12,0xe4,0xea, 48 | 0x23,0xe4,0xee,0xea,0x41,0xe6,0x03,0x12,0xe4,0xea,0x23,0xe4, 49 | 0xee,0xea,0x41,0xf9,0x03,0x11,0xe3,0x22,0xee,0xe3,0x42,0xfc, 50 | 0xf8,0x03,0x41,0xe6,0x12,0xe7,0xea,0x23,0xe7,0xee,0xea,0x03, 51 | 0x12,0xf2,0xea,0x23,0xf2,0xee,0xea,0x41,0xf7,0x03,0x11,0xea, 52 | 0x22,0xee,0xea,0x42,0xfc,0xf7,0x03,0x11,0xea,0x22,0xee,0xea, 53 | 0x42,0xfc,0xf8,0x03,0x22,0xe5,0xea,0x11,0xea,0x41,0xf7,0x02, 54 | 0x31,0xe3,0x41,0xe6,0x02,0x31,0xea,0x41,0xf7,0x02,0x31,0xf5, 55 | 0x41,0xf8,0x02,0x33,0xf1,0xee,0xea,0x41,0xf8,0x02,0x41,0xf0, 56 | 0x33,0xf0,0xee,0xea,0x02,0x42,0xe1,0xe6,0x33,0xe1,0xee,0xea, 57 | 0x02,0x33,0xeb,0xe5,0xea,0x43,0xeb,0xfc,0xf8,0x02,0x32,0xe0, 58 | 0xeb,0x44,0xe5,0xed,0xfc,0xf8,0x02,0x34,0xef,0xeb,0xee,0xf5, 59 | 0x43,0xf5,0xf3,0xe6,0x02,0x44,0xeb,0xf3,0xf7,0xf8,0x35,0xf5, 60 | 0xee,0xf0,0xee,0xf8,0x02,0x52,0xe5,0xec,0x22,0xe9,0xec,0x02, 61 | 0x52,0xe5,0xf2,0x21,0xf2,0x02,0x52,0xee,0xf0,0x21,0xf0,0x02, 62 | 0x21,0xed,0x52,0xee,0xed,0x02,0x52,0xe5,0xed,0x21,0xed,0x02, 63 | 0x52,0xe5,0xeb,0x21,0xeb,0x02,0x52,0xe5,0xe4,0x22,0xfc,0xe4, 64 | 0x02,0x52,0xe5,0xe2,0x22,0xfc,0xe2,0x02,0x52,0xe5,0xed,0x22, 65 | 0xfc,0xed,0x02,0x52,0xee,0xf2,0x21,0xf2,0x02,0x21,0xec,0x52, 66 | 0xee,0xec,0x02,0x21,0xeb,0x52,0xee,0xeb,0x02,0x21,0xe2,0x52, 67 | 0xee,0xe2,0x02,0x21,0xe1,0x52,0xee,0xe1,0x02,0x52,0xe5,0xf1, 68 | 0x21,0xf1,0x02,0x52,0xe5,0xf0,0x21,0xf0,0x02,0x52,0xe0,0xed, 69 | 0x21,0xed,0x02,0x52,0xe5,0xea,0x22,0xe9,0xea,0x02,0x21,0xea, 70 | 0x52,0xee,0xea,0x02,0x52,0xe5,0xea,0x21,0xea,0x02,0x52,0xe5, 71 | 0xea,0x22,0xfc,0xea,0x02,0x52,0xee,0xf5,0x21,0xf5,0x02,0x52, 72 | 0xe5,0xf6,0x22,0xfc,0xf6,0x02,0x52,0xe5,0xf6,0x22,0xe9,0xf6, 73 | 0x02,0x52,0xe5,0xf6,0x21,0xf6,0x02,0x22,0xe9,0xf6,0x52,0xff, 74 | 0xf6,0x02,0x52,0xe8,0xed,0x21,0xed,0x02,0x22,0xe5,0xe1,0x52, 75 | 0xfc,0xe1,0x02,0x22,0xe5,0xec,0x51,0xec,0x02,0x22,0xe5,0xec, 76 | 0x52,0xfc,0xec,0x02,0x22,0xe5,0xec,0x52,0xe9,0xec,0x02,0x22, 77 | 0xe5,0xe3,0x52,0xfc,0xe3,0x02,0x22,0xe5,0xe3,0x52,0xe9,0xe3, 78 | 0x02,0x51,0xe3,0x22,0xe5,0xe3,0x02,0x22,0xe5,0xf6,0x52,0xfc, 79 | 0xf6,0x02,0x22,0xe5,0xf6,0x51,0xf6,0x02,0x22,0xe8,0xf6,0x52, 80 | 0xe9,0xf6,0x02,0x11,0xe1,0x62,0xe1,0xeb,0x02,0x11,0xe2,0x62, 81 | 0xe2,0xeb,0x02,0x11,0xec,0x62,0xec,0xeb,0x02,0x11,0xf4,0x62, 82 | 0xf4,0xeb,0x02,0x11,0xef,0x62,0xef,0xeb,0x02,0x51,0xec,0x22, 83 | 0xec,0xeb,0x03,0x11,0xe4,0x21,0xe6,0x42,0xe6,0xe4,0x02,0x11, 84 | 0xf2,0x61,0xf9,0x02,0x11,0xf1,0x61,0xf8,0x02,0x61,0xe6,0x11, 85 | 0xe7,0x02,0x12,0xf1,0xf2,0x61,0xf9,0x02,0x11,0xf2,0x61,0xf7, 86 | 0x02,0x11,0xe4,0x61,0xe6,0x03,0x42,0xe6,0xe4,0x12,0xe7,0xe4, 87 | 0x22,0xe7,0xe6,0x03,0x11,0xf2,0x42,0xf2,0xed,0x21,0xf7,0x02, 88 | 0x51,0xf1,0x21,0xf8,0x02,0x21,0xe6,0x51,0xe7,0x02,0x32,0xf1, 89 | 0xeb,0x42,0xf8,0xeb,0x02,0x51,0xf1,0x21,0xf8,0x02,0x12,0xf2, 90 | 0xe2,0x63,0xf9,0xe2,0xeb,0x02,0x51,0xe4,0x21,0xe6,0x02,0x52, 91 | 0xf1,0xf2,0x21,0xf9,0x02,0x51,0xf2,0x21,0xf7,0x02,0x51,0xef, 92 | 0x22,0xef,0xeb,0x02,0x51,0xef,0x22,0xef,0xeb,0x02,0x23,0xe3, 93 | 0xee,0xed,0x53,0xee,0xe3,0xed,0x02,0x51,0xe1,0x22,0xe1,0xeb, 94 | 0x02,0x51,0xea,0x21,0xf7,0x02,0x51,0xf5,0x21,0xf8,0x02,0x51, 95 | 0xe3,0x21,0xe6,0x02,0x52,0xf1,0xea,0x21,0xf9,0x02,0x21,0xe4, 96 | 0x51,0xf5,0x02,0x52,0xf1,0xeb,0x22,0xf8,0xeb,0x02,0x55,0xe7, 97 | 0xee,0xf1,0xf2,0xeb,0x25,0xf1,0xf1,0xf2,0xe5,0xeb,0x02,0x54, 98 | 0xee,0xf1,0xf2,0xeb,0x24,0xf1,0xf2,0xe5,0xeb,0x02,0x23,0xe7, 99 | 0xee,0xe2,0x53,0xee,0xe7,0xe2,0x02,0x51,0xe2,0x22,0xee,0xe2, 100 | 0x02,0x23,0xe1,0xe5,0xf0,0x54,0xe1,0xee,0xe1,0xf0,0x02,0x23, 101 | 0xe1,0xe5,0xf0,0x53,0xee,0xe1,0xf0,0x02,0x23,0xe4,0xe5,0xf0, 102 | 0x53,0xee,0xe4,0xf0,0x02,0x51,0xf2,0x21,0xf9,0x02,0x22,0xe5, 103 | 0xf9,0x53,0xe8,0xf1,0xf2,0x02,0x22,0xee,0xe1,0x53,0xee,0xe1, 104 | 0xee,0x02,0x52,0xe5,0xf0,0x21,0xf0,0x02,0x24,0xe1,0xee,0xef, 105 | 0xf0,0x53,0xef,0xe5,0xf0,0x02,0x24,0xe7,0xee,0xef,0xf0,0x54, 106 | 0xf1,0xef,0xe5,0xf0,0x02,0x24,0xe7,0xee,0xf2,0xf0,0x54,0xf1, 107 | 0xf2,0xe5,0xf0,0x02,0x23,0xee,0xef,0xf0,0x53,0xef,0xe5,0xf0, 108 | 0x02,0x23,0xee,0xf2,0xf0,0x53,0xf2,0xe5,0xf0,0x02,0x53,0xec, 109 | 0xe5,0xf0,0x23,0xee,0xec,0xf0,0x02,0x22,0xe5,0xeb,0x52,0xee, 110 | 0xeb,0x02,0x51,0xe1,0x23,0xe1,0xee,0xe1,0x02,0x23,0xe7,0xee, 111 | 0xf8,0x52,0xf1,0xf8,0x02,0x51,0xe1,0x22,0xee,0xe1,0x02,0x22, 112 | 0xee,0xf8,0x51,0xf8,0x02,0x23,0xe7,0xee,0xef,0x52,0xf1,0xef, 113 | 0x02,0x23,0xe1,0xee,0xef,0x51,0xef,0x02,0x22,0xee,0xef,0x51, 114 | 0xef,0x02,0x51,0xec,0x22,0xee,0xec,0x02,0x51,0xe6,0x22,0xee, 115 | 0xe6,0x02,0x51,0xe7,0x22,0xee,0xe7 116 | }; 117 | 118 | } // end namespace 119 | 120 | -------------------------------------------------------------------------------- /expected/rusmorph.out: -------------------------------------------------------------------------------- 1 | create extension rusmorph; 2 | set client_encoding to 'utf-8'; 3 | select ts_lexize('rusmorph', 'слушать'); 4 | ts_lexize 5 | ----------- 6 | {слушать} 7 | (1 row) 8 | 9 | select ts_lexize('rusmorph', 'слушаю'); 10 | ts_lexize 11 | ----------- 12 | {слушать} 13 | (1 row) 14 | 15 | select ts_lexize('rusmorph', 'слушаюсь'); 16 | ts_lexize 17 | ----------- 18 | {слушать} 19 | (1 row) 20 | 21 | select ts_lexize('rusmorph', 'слушаясь'); 22 | ts_lexize 23 | ----------- 24 | {слушать} 25 | (1 row) 26 | 27 | select ts_lexize('rusmorph', 'слушаемся'); 28 | ts_lexize 29 | ----------- 30 | {слушать} 31 | (1 row) 32 | 33 | select ts_lexize('rusmorph', 'слушается'); 34 | ts_lexize 35 | ----------- 36 | {слушать} 37 | (1 row) 38 | 39 | select ts_lexize('rusmorph', 'слушалось'); 40 | ts_lexize 41 | ----------- 42 | {слушать} 43 | (1 row) 44 | 45 | select ts_lexize('rusmorph', 'слушались'); 46 | ts_lexize 47 | ----------- 48 | {слушать} 49 | (1 row) 50 | 51 | select ts_lexize('rusmorph', 'слушалась'); 52 | ts_lexize 53 | ----------- 54 | {слушать} 55 | (1 row) 56 | 57 | select ts_lexize('rusmorph', 'слушаешься'); 58 | ts_lexize 59 | ----------- 60 | {слушать} 61 | (1 row) 62 | 63 | select ts_lexize('rusmorph', 'слушаетесь'); 64 | ts_lexize 65 | ----------- 66 | {слушать} 67 | (1 row) 68 | 69 | select ts_lexize('rusmorph', 'слушаются'); 70 | ts_lexize 71 | ----------- 72 | {слушать} 73 | (1 row) 74 | 75 | select ts_lexize('rusmorph', 'слушался'); 76 | ts_lexize 77 | ----------- 78 | {слушать} 79 | (1 row) 80 | 81 | select ts_lexize('rusmorph', 'слушавший'); 82 | ts_lexize 83 | ----------- 84 | {слушать} 85 | (1 row) 86 | 87 | select ts_lexize('rusmorph', 'чудо'); 88 | ts_lexize 89 | ----------- 90 | {чудо} 91 | (1 row) 92 | 93 | select ts_lexize('rusmorph', 'чудес'); 94 | ts_lexize 95 | --------------- 96 | {чудеса,чудо} 97 | (1 row) 98 | 99 | select ts_lexize('rusmorph', 'чудеса'); 100 | ts_lexize 101 | --------------- 102 | {чудеса,чудо} 103 | (1 row) 104 | 105 | select ts_lexize('rusmorph', 'чудесам'); 106 | ts_lexize 107 | --------------- 108 | {чудеса,чудо} 109 | (1 row) 110 | 111 | select ts_lexize('rusmorph', 'Чудо'); 112 | ts_lexize 113 | ----------- 114 | {чудо} 115 | (1 row) 116 | 117 | select ts_lexize('rusmorph', 'Лебедев'); 118 | ts_lexize 119 | ----------- 120 | {Лебедев} 121 | (1 row) 122 | 123 | select ts_lexize('rusmorph', 'лебедев'); 124 | ts_lexize 125 | ----------- 126 | {Лебедев} 127 | (1 row) 128 | 129 | select ts_lexize('rusmorph', 'Лебедева'); 130 | ts_lexize 131 | ----------- 132 | {Лебедев} 133 | (1 row) 134 | 135 | select ts_lexize('rusmorph', 'лебедева'); 136 | ts_lexize 137 | ----------- 138 | {Лебедев} 139 | (1 row) 140 | 141 | -------------------------------------------------------------------------------- /include/mlma1049.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/include/mlma1049.h -------------------------------------------------------------------------------- /include/typedefs.h: -------------------------------------------------------------------------------- 1 | #ifndef __TYPEDEFS_H__ 2 | #define __TYPEDEFS_H__ 3 | 4 | typedef unsigned int word32_t; 5 | typedef unsigned int word16_t; 6 | typedef unsigned char byte_t; 7 | 8 | #endif 9 | 10 | -------------------------------------------------------------------------------- /libdict/chartype.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/libdict/chartype.cpp -------------------------------------------------------------------------------- /libdict/mlmadefs.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/libdict/mlmadefs.h -------------------------------------------------------------------------------- /libdict/mlmamain.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/libdict/mlmamain.cpp -------------------------------------------------------------------------------- /libdict/namespace.h: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | 3 | libmorphrus - dictiorary-based morphological analyser for Russian. 4 | Copyright (C) 1994-2016 Andrew Kovalenko aka Keva 5 | 6 | This program is free software; you can redistribute it and/or modify 7 | it under the terms of the GNU General Public License as published by 8 | the Free Software Foundation; either version 2 of the License, or 9 | (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU General Public License for more details. 15 | 16 | You should have received a copy of the GNU General Public License along 17 | with this program; if not, write to the Free Software Foundation, Inc., 18 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19 | 20 | Contacts: 21 | email: keva@meta.ua, keva@rambler.ru 22 | Skype: big_keva 23 | Phone: +7(495)648-4058, +7(926)513-2991 24 | 25 | ******************************************************************************/ 26 | # if !defined( __namespace_h__ ) 27 | # define __namespace_h__ 28 | 29 | # define LIBMORPH_NAMESPACE __libmorphrus__ 30 | 31 | # endif // __namespace_h__ 32 | -------------------------------------------------------------------------------- /rusmorph--1.0.sql: -------------------------------------------------------------------------------- 1 | /* contrib/rusmorph/rusmorph--1.0.sql */ 2 | 3 | -- complain if script is sourced in psql, rather than via CREATE EXTENSION 4 | \echo Use "CREATE EXTENSION rusmorph" to load this file. \quit 5 | 6 | CREATE FUNCTION rusmorph_init(internal) 7 | RETURNS internal 8 | AS 'MODULE_PATHNAME' 9 | LANGUAGE C STRICT; 10 | 11 | CREATE FUNCTION rusmorph_lexize(internal, internal, internal, internal) 12 | RETURNS internal 13 | AS 'MODULE_PATHNAME' 14 | LANGUAGE C STRICT; 15 | 16 | CREATE TEXT SEARCH TEMPLATE rusmorph_template ( 17 | LEXIZE = rusmorph_lexize, 18 | INIT = rusmorph_init 19 | ); 20 | 21 | CREATE TEXT SEARCH DICTIONARY rusmorph ( 22 | TEMPLATE = rusmorph_template 23 | ); 24 | 25 | COMMENT ON TEXT SEARCH DICTIONARY rusmorph IS 'Morphologycal analysers/taggers for Russia'; 26 | -------------------------------------------------------------------------------- /rusmorph.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include "mlma1049.h" 6 | #include "typedefs.h" 7 | 8 | PG_MODULE_MAGIC; 9 | 10 | PG_FUNCTION_INFO_V1(rusmorph_init); 11 | PG_FUNCTION_INFO_V1(rusmorph_lexize); 12 | 13 | size_t client2win(char* dst, size_t dst_size, char const* src, size_t src_size) 14 | { 15 | PG_TRY(); 16 | { 17 | char* cnv = (char*)pg_do_encoding_conversion((unsigned char*)src, src_size, pg_get_client_encoding(), PG_WIN1251); 18 | strncpy(dst, cnv, dst_size); 19 | if (cnv == src && src_size < dst_size) { 20 | dst[src_size] = '\0'; 21 | return src_size; 22 | } 23 | return strlen(dst); 24 | } 25 | PG_CATCH(); 26 | { 27 | return (size_t)-1; 28 | } 29 | PG_END_TRY(); 30 | } 31 | 32 | size_t win2client(char* dst, size_t dst_size, char const* src, size_t src_size) 33 | { 34 | PG_TRY(); 35 | { 36 | char* cnv = (char*)pg_do_encoding_conversion((unsigned char*)src, src_size, PG_WIN1251, pg_get_client_encoding()); 37 | strncpy(dst, cnv, dst_size); 38 | if (cnv == src && src_size < dst_size) { 39 | dst[src_size] = '\0'; 40 | return src_size; 41 | } 42 | return strlen(dst); 43 | } 44 | PG_CATCH(); 45 | { 46 | return (size_t)-1; 47 | } 48 | PG_END_TRY(); 49 | } 50 | 51 | Datum 52 | rusmorph_init(PG_FUNCTION_ARGS) 53 | { 54 | PG_RETURN_POINTER(palloc(1)); 55 | } 56 | 57 | Datum 58 | rusmorph_lexize(PG_FUNCTION_ARGS) 59 | { 60 | IMlmaMb* pmorph; 61 | char* in = (char *) PG_GETARG_POINTER(1); 62 | int length = PG_GETARG_INT32(2); 63 | SLemmInfoA lemmas[0x20]; 64 | char normal[0x100]; 65 | SGramInfo agrams[0x40]; 66 | int i, nlemma; 67 | TSLexeme *res; 68 | 69 | if (!length) 70 | PG_RETURN_POINTER(NULL); 71 | 72 | mlmaruLoadMbAPI(&pmorph); 73 | 74 | nlemma = pmorph->vtbl->Lemmatize(pmorph, in, length, lemmas, 0x20, normal, 0x100, agrams, 0x40, sfIgnoreCapitals); 75 | if (nlemma == 0) { 76 | PG_RETURN_POINTER(NULL); 77 | } 78 | res = palloc0(sizeof(TSLexeme) * (nlemma+1)); 79 | 80 | for (i = 0; i < nlemma; i++) 81 | { 82 | res[i].lexeme = pstrdup(lemmas[i].plemma); 83 | } 84 | res[i].lexeme = NULL; 85 | PG_RETURN_POINTER(res); 86 | } 87 | -------------------------------------------------------------------------------- /rusmorph.control: -------------------------------------------------------------------------------- 1 | # rusmorph extension 2 | comment = 'Morphologycal analysers/taggers for Russia' 3 | default_version = '1.0' 4 | module_pathname = '$libdir/rusmorph' 5 | relocatable = true 6 | -------------------------------------------------------------------------------- /sql/rusmorph.sql: -------------------------------------------------------------------------------- 1 | create extension rusmorph; 2 | 3 | set client_encoding to 'utf-8'; 4 | 5 | select ts_lexize('rusmorph', 'слушать'); 6 | select ts_lexize('rusmorph', 'слушаю'); 7 | select ts_lexize('rusmorph', 'слушаюсь'); 8 | select ts_lexize('rusmorph', 'слушаясь'); 9 | select ts_lexize('rusmorph', 'слушаемся'); 10 | select ts_lexize('rusmorph', 'слушается'); 11 | select ts_lexize('rusmorph', 'слушалось'); 12 | select ts_lexize('rusmorph', 'слушались'); 13 | select ts_lexize('rusmorph', 'слушалась'); 14 | select ts_lexize('rusmorph', 'слушаешься'); 15 | select ts_lexize('rusmorph', 'слушаетесь'); 16 | select ts_lexize('rusmorph', 'слушаются'); 17 | select ts_lexize('rusmorph', 'слушался'); 18 | select ts_lexize('rusmorph', 'слушавший'); 19 | 20 | select ts_lexize('rusmorph', 'чудо'); 21 | select ts_lexize('rusmorph', 'чудес'); 22 | select ts_lexize('rusmorph', 'чудеса'); 23 | select ts_lexize('rusmorph', 'чудесам'); 24 | select ts_lexize('rusmorph', 'Чудо'); 25 | 26 | select ts_lexize('rusmorph', 'Лебедев'); 27 | select ts_lexize('rusmorph', 'лебедев'); 28 | select ts_lexize('rusmorph', 'Лебедева'); 29 | select ts_lexize('rusmorph', 'лебедева'); 30 | 31 | -------------------------------------------------------------------------------- /xmorph/capsheme.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/capsheme.cpp -------------------------------------------------------------------------------- /xmorph/capsheme.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/capsheme.h -------------------------------------------------------------------------------- /xmorph/flexmake.h: -------------------------------------------------------------------------------- 1 | # if !defined( _flexmake_h_ ) 2 | # define _flexmake_h_ 3 | 4 | # include 5 | # include 6 | # include "mlmadefs.h" 7 | # include 8 | 9 | namespace LIBMORPH_NAMESPACE 10 | { 11 | class stringCollect 12 | { 13 | byte_t* output; 14 | const byte_t* prefix; 15 | size_t ccpref; 16 | int fcount; 17 | 18 | public: // collector 19 | stringCollect( byte_t* o, const byte_t* p, size_t l ): 20 | output( o ), prefix( p ), ccpref( l ), fcount( 0 ) {} 21 | void AddStr( const byte_t* addstr, size_t cchstr ) 22 | { 23 | size_t cbcopy; 24 | const byte_t* szcopy; 25 | 26 | for ( szcopy = prefix, cbcopy = ccpref; cbcopy-- > 0; ) 27 | *output++ = *szcopy++; 28 | 29 | for ( ++fcount; cchstr-- > 0; ) 30 | *output++ = *addstr++; 31 | 32 | *output++ = '\0'; 33 | } 34 | int GetLen() const 35 | { 36 | return fcount; 37 | } 38 | }; 39 | 40 | struct doCollectFlex 41 | { 42 | doCollectFlex( stringCollect& o, const byte_t* t, word16_t g, byte_t f ): 43 | output( o ), grinfo( g ), bflags( f ) 44 | { 45 | } 46 | 47 | public: // functor 48 | int operator () ( const byte_t* pflist, const byte_t* ptrace, unsigned ltrace ) const 49 | { 50 | int ngrams = *pflist++; 51 | 52 | while ( ngrams-- > 0 ) 53 | { 54 | word16_t cginfo = getword16( pflist ); 55 | byte_t cflags = *pflist++; 56 | 57 | if ( cginfo == grinfo && (bflags & cflags) != 0 ) 58 | output.AddStr( ptrace, ltrace ); 59 | } 60 | return 0; 61 | } 62 | 63 | protected: // variables 64 | stringCollect& output; 65 | const word16_t grinfo; 66 | const byte_t bflags; 67 | 68 | }; 69 | 70 | inline int BuildFlexSet( byte_t* pszout, 71 | const byte_t* ptable, 72 | const byte_t* prefix, size_t ccpref, 73 | word16_t grinfo, byte_t bother ) 74 | { 75 | byte_t atrack[0x100]; 76 | stringCollect output( pszout, prefix, ccpref ); 77 | 78 | return RecursGetTrack( doCollectFlex( output, atrack, grinfo, bother ), ptable, atrack, 0 ) >= 0 ? 79 | output.GetLen() : -1; 80 | } 81 | 82 | } // end namespace 83 | 84 | # endif // _flexmake_h_ 85 | -------------------------------------------------------------------------------- /xmorph/gramlist.h: -------------------------------------------------------------------------------- 1 | # if !defined( __gramlist_h__ ) 2 | # define __gramlist_h__ 3 | # include 4 | # include "mlmadefs.h" 5 | # include 6 | 7 | namespace LIBMORPH_NAMESPACE 8 | { 9 | 10 | class gramBuffer 11 | { 12 | const steminfo& stinfo; 13 | unsigned powset; 14 | SGramInfo* outorg; 15 | SGramInfo* outptr; 16 | 17 | public: // construction 18 | gramBuffer( const steminfo& s, unsigned m, SGramInfo* p ): stinfo( s ), powset( m ), outorg( p ), outptr( p ) {} 19 | 20 | public: // API 21 | size_t getlen() const { return outptr - outorg; } 22 | void append( word16_t grinfo, byte_t bflags ) { *outptr++ = { 0, 0, grinfo, bflags }; } 23 | 24 | private: // check classes 25 | struct anyvalue 26 | { 27 | bool operator () ( word16_t grinfo, byte_t bflags ) const 28 | { return true; } 29 | }; 30 | struct multiple 31 | { 32 | bool operator () ( word16_t grinfo, byte_t bflags ) const 33 | { return (grinfo & gfMultiple) != 0; } 34 | }; 35 | class mixlevel 36 | { 37 | const steminfo& stinfo; 38 | unsigned powset; 39 | 40 | public: // construction 41 | mixlevel( const steminfo& s, unsigned m ): stinfo( s ), powset( m ) 42 | {} 43 | 44 | public: // functor 45 | bool operator () ( word16_t grinfo, byte_t bflags ) const 46 | { 47 | int desire = stinfo.GetSwapLevel( grinfo, bflags ); 48 | assert( desire >= 1 ); 49 | 50 | return (powset & (1 << (desire - 1))) != 0; 51 | } 52 | }; 53 | 54 | protected: // filler 55 | template 56 | size_t FilterGram( const byte_t* thedic, 57 | isplural plural, // plural filter, defined if wfMultiple 58 | mixlevel isswap ) // mixpower filter 59 | { 60 | for ( auto nforms = *thedic++; nforms-- > 0; ) 61 | { 62 | word16_t grInfo = getword16( thedic ); 63 | byte_t bflags = *thedic++; 64 | 65 | if ( plural( grInfo, bflags ) && isswap( grInfo, bflags ) ) 66 | append( grInfo, bflags ); 67 | } 68 | 69 | return getlen(); 70 | } 71 | 72 | public: // gramLoader functor 73 | int operator () ( const byte_t* thedic, const byte_t* thestr, size_t cchstr ) 74 | { 75 | if ( cchstr == 0 ) 76 | { 77 | if ( (stinfo.wdinfo & wfMultiple) != 0 ) 78 | { 79 | return powset == (unsigned)-1 ? FilterGram( thedic, multiple(), anyvalue() ) 80 | : FilterGram( thedic, multiple(), mixlevel( stinfo, powset ) ); 81 | } 82 | else 83 | { 84 | return powset == (unsigned)-1 ? FilterGram( thedic, anyvalue(), anyvalue() ) 85 | : FilterGram( thedic, anyvalue(), mixlevel( stinfo, powset ) ); 86 | } 87 | } 88 | return 0; 89 | } 90 | 91 | }; 92 | 93 | } // LIBMORPH_NAMESPACE 94 | 95 | # endif // __gramlist_h__ 96 | -------------------------------------------------------------------------------- /xmorph/grammap.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/grammap.h -------------------------------------------------------------------------------- /xmorph/lemmatiz.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/lemmatiz.cpp -------------------------------------------------------------------------------- /xmorph/lemmatiz.h: -------------------------------------------------------------------------------- 1 | # if !defined( _lemmatiz_h_ ) 2 | # define _lemmatiz_h_ 3 | 4 | # include 5 | # include "mlmadefs.h" 6 | # include 7 | 8 | namespace LIBMORPH_NAMESPACE 9 | { 10 | #if !defined( lemmatize_errors_defined ) 11 | #define lemmatize_errors_defined 12 | #define LEMMBUFF_FAILED -1 13 | #define LIDSBUFF_FAILED -2 14 | #define GRAMBUFF_FAILED -3 15 | #define WORDBUFF_FAILED -4 16 | #endif 17 | 18 | // 19 | // doCheckWord - empty actor, reports no error on stem action, and the code 20 | // will return correct result itself 21 | // 22 | struct doCheckWord 23 | { 24 | const byte_t* szstem; // base string pointer 25 | unsigned scheme; // the capitalization scheme 26 | unsigned dwsets; 27 | 28 | public: 29 | doCheckWord( const byte_t* szbase, unsigned uflags ): 30 | szstem( szbase ), scheme( 0 ), dwsets( uflags ) 31 | { 32 | } 33 | int InsertStem( lexeme_t, const steminfo&, const byte_t*, const byte_t*, const SGramInfo*, unsigned ) 34 | { 35 | return 1; 36 | } 37 | bool VerifyCaps( const steminfo& s ) const 38 | { 39 | return (dwsets & sfIgnoreCapitals) != 0 || IsGoodSheme( scheme, s.MinCapScheme() ); 40 | } 41 | }; 42 | 43 | // 44 | // doLemmatize - create lemmatization result, build normal (dictionary) form for a stem 45 | // passed to function 46 | // the output data - the references to the arrays to be filled by the lemmatizer 47 | // 48 | struct doLemmatize: public doCheckWord 49 | { 50 | SLemmInfoA* plemma; // the output buffer for descriptions 51 | SLemmInfoA* elemma; 52 | char* pforms; // the buffer for the forms 53 | char* eforms; // the buffer size 54 | SGramInfo* pgrams; // the buffer for grammar descriptions 55 | SGramInfo* egrams; // gramma descriptions length 56 | unsigned encode; // the character encoding 57 | 58 | int nerror; 59 | 60 | public: // the registration API 61 | doLemmatize( const byte_t* szbase, unsigned uflags, unsigned cp ): doCheckWord( szbase, uflags ), 62 | plemma( nullptr ), 63 | pforms( nullptr ), 64 | pgrams( nullptr ), 65 | encode( cp ), 66 | nerror( 0x00 ) 67 | { 68 | } 69 | int InsertStem( lexeme_t nlexid, 70 | const steminfo& stinfo, 71 | const byte_t* szpost, 72 | const byte_t* pszstr, 73 | const SGramInfo* flexes, 74 | unsigned fcount ); 75 | 76 | }; 77 | 78 | struct doGetWdInfo: public doCheckWord 79 | { 80 | doGetWdInfo( const byte_t* szbase, unsigned uflags ): doCheckWord( szbase, uflags ) 81 | { 82 | } 83 | int InsertStem( lexeme_t /*nlexid*/, 84 | const byte_t* /*strend*/, 85 | const steminfo& stinfo, 86 | const SGramInfo* /*flexes*/, 87 | unsigned /*fcount*/ ) 88 | { 89 | *(byte_t*)szstem = (byte_t)stinfo.wdinfo; 90 | return 1; 91 | } 92 | 93 | }; 94 | 95 | struct doBuildForm: public doCheckWord 96 | { 97 | char* output; 98 | char* outend; 99 | 100 | word16_t grinfo; 101 | byte_t bflags; 102 | unsigned idform; 103 | unsigned encode; 104 | 105 | int rcount; 106 | int nerror; 107 | 108 | public: // the registration API 109 | doBuildForm( const byte_t* szbase, unsigned dwsets, unsigned cp ): doCheckWord( szbase, dwsets ), 110 | output( NULL ), 111 | encode( cp ), 112 | rcount( 0 ), 113 | nerror( 0 ) 114 | { 115 | } 116 | int InsertStem( lexeme_t nlexid, 117 | const steminfo& stinfo, 118 | const byte_t* szpost, 119 | const byte_t* strend, 120 | const SGramInfo* flexes, 121 | unsigned fcount ); 122 | 123 | }; 124 | 125 | } // end namespace 126 | 127 | # endif // _lemmatiz_h_ 128 | -------------------------------------------------------------------------------- /xmorph/scandict.h: -------------------------------------------------------------------------------- 1 | # if !defined( __scandict_h__ ) 2 | # define __scandict_h__ 3 | # include 4 | # include 5 | # include 6 | 7 | # if defined( LIBMORPH_NAMESPACE ) 8 | namespace LIBMORPH_NAMESPACE { 9 | # endif // LIBMORPH_NAMESPACE 10 | 11 | inline unsigned __xmorph__getserial__( const unsigned char*& p ) 12 | { 13 | unsigned char bfetch = *p++; 14 | unsigned serial = bfetch & ~0x80; 15 | int nshift = 1; 16 | 17 | while ( (bfetch & 0x80) != 0 ) 18 | serial |= (((unsigned)(bfetch = *p++) & ~0x80) << (nshift++ * 7)); 19 | return serial; 20 | } 21 | 22 | template 23 | inline bool hasupper( flattype a ) 24 | { return (a & (1 << (sizeof(a) * CHAR_BIT - 1))) != 0; } 25 | 26 | template 27 | inline int getlower( flagtype a ) 28 | { return a & ~(1 << (sizeof(a) * CHAR_BIT - 1)); } 29 | 30 | template 31 | struct scan_stack 32 | { 33 | const unsigned char* thestr; 34 | size_t cchstr; 35 | unsigned char chfind; 36 | const unsigned char* thedic; 37 | flagtype aflags; 38 | int ccount; 39 | 40 | public: // init 41 | scan_stack* setlevel( const unsigned char* p, const unsigned char* s, size_t l ) 42 | { 43 | ccount = getlower( aflags = *(flagtype*)(thedic = p) ); 44 | thedic += sizeof(flagtype); 45 | thestr = s; 46 | chfind = (cchstr = l) > 0 ? *thestr : 0; 47 | return this; 48 | } 49 | const unsigned char* findchar() 50 | { 51 | while ( ccount-- > 0 ) 52 | { 53 | unsigned char chnext = *thedic++; 54 | unsigned sublen = __xmorph__getserial__( thedic ); 55 | const unsigned char* subdic = thedic; thedic += sublen; 56 | 57 | if ( chfind == chnext ) 58 | return subdic; 59 | if ( chfind > chnext && !hasupper( aflags ) ) 60 | return 0; 61 | } 62 | return 0; 63 | } 64 | }; 65 | 66 | template 67 | result LinearScanDict( action& doitem, const byte_t* thedic, 68 | const byte_t* thestr, size_t cchstr ) 69 | { 70 | scan_stack astack[0x40]; // never longer words 71 | scan_stack* pstack; 72 | result retval; 73 | 74 | for ( (pstack = astack)->setlevel( thedic, thestr, cchstr ); pstack >= astack; ) 75 | { 76 | const unsigned char* subdic; 77 | 78 | // check if not found or no more data 79 | if ( (subdic = pstack->findchar()) != 0 ) 80 | { 81 | pstack = (pstack + 1)->setlevel( subdic, pstack->thestr + 1, pstack->cchstr - 1 ); 82 | continue; 83 | } 84 | 85 | if ( hasupper( pstack->aflags ) ) 86 | if ( (retval = doitem( pstack->thedic, pstack->thestr, pstack->cchstr )) != (result)0 ) 87 | return retval; 88 | 89 | --pstack; 90 | } 91 | return (result)0; 92 | } 93 | 94 | template 95 | result RecursScanDict( const action& doitem, const unsigned char* thedic, 96 | const unsigned char* thestr, size_t cchstr ) 97 | { 98 | aflags uflags = *(aflags*)thedic; thedic += sizeof(aflags); 99 | int ncount = getlower( uflags ); 100 | unsigned char chfind; 101 | result retval; 102 | 103 | assert( cchstr > 0 ); 104 | 105 | for ( chfind = *thestr; ncount-- > 0; ) 106 | { 107 | unsigned char chnext = *thedic++; 108 | unsigned sublen = __xmorph__getserial__( thedic ); 109 | const unsigned char* subdic = thedic; thedic += sublen; 110 | 111 | if ( chnext == chfind && cchstr > 0 ) 112 | if ( (retval = RecursScanDict( doitem, subdic, thestr + 1, cchstr - 1 )) != (result)0 ) 113 | return retval; 114 | } 115 | return hasupper( uflags ) ? doitem( thedic, thestr, cchstr ) : (result)0; 116 | } 117 | 118 | template 119 | result RecursGetTrack( const action& doitem, 120 | const unsigned char* thedic, 121 | unsigned char* ptrack, 122 | unsigned ltrack, 123 | const unsigned char* dicpos = NULL ) 124 | { 125 | aflags uflags = *(aflags*)thedic; thedic += sizeof(aflags); 126 | int ncount = getlower( uflags ); 127 | 128 | while ( ncount-- > 0 ) 129 | { 130 | unsigned char chnext = *thedic++; 131 | unsigned sublen = __xmorph__getserial__( thedic ); 132 | const unsigned char* subdic; 133 | int nerror; 134 | 135 | thedic = (subdic = thedic) + sublen; 136 | 137 | if ( dicpos == NULL || ( dicpos >= subdic && dicpos <= thedic ) ) 138 | { 139 | ptrack[ltrack] = chnext; 140 | 141 | if ( (nerror = RecursGetTrack( doitem, subdic, ptrack, ltrack + 1, dicpos )) != 0 ) 142 | return nerror; 143 | } 144 | } 145 | return hasupper( uflags ) ? doitem( thedic, ptrack, ltrack ) : (result)0; 146 | } 147 | 148 | # if defined( LIBMORPH_NAMESPACE ) 149 | } // LIBMORPH_NAMESPACE 150 | # endif // LIBMORPH_NAMESPACE 151 | 152 | # endif // __scandict_h__ 153 | -------------------------------------------------------------------------------- /xmorph/scanlist.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/scanlist.h -------------------------------------------------------------------------------- /xmorph/typedefs.h: -------------------------------------------------------------------------------- 1 | # if !defined( __typedefs_h__ ) 2 | # define __typedefs_h__ 3 | 4 | # if defined( LIBMORPH_NAMESPACE ) 5 | namespace LIBMORPH_NAMESPACE { 6 | # endif // LIBMORPH_NAMESPACE 7 | 8 | // Define common types used in the analyser 9 | # if !defined( __byte_t_defined__ ) 10 | # define __byte_t_defined__ 11 | typedef unsigned char byte_t; 12 | # endif // !__byte_t_defined__ 13 | 14 | # if !defined( __word16_t_defined__ ) 15 | # define __word16_t_defined__ 16 | typedef unsigned short word16_t; 17 | # endif // !__word16_t_defined__ 18 | 19 | # if !defined( __word32_t_defined__ ) 20 | # define __word32_t_defined__ 21 | typedef unsigned int word32_t; 22 | # endif // !__word32_t_defined__ 23 | 24 | # if defined( LIBMORPH_NAMESPACE ) 25 | } 26 | # endif // LIBMORPH_NAMESPACE 27 | 28 | # endif // __typedefs_h__ 29 | -------------------------------------------------------------------------------- /xmorph/wildscan.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/wildscan.cpp -------------------------------------------------------------------------------- /xmorph/wildscan.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/postgrespro/rusmorph/ff845a31b2573811e56914ab854bf37569f94f9e/xmorph/wildscan.h --------------------------------------------------------------------------------