1 /* Copyright 2005, 2009 Elliotte Rusty Harold 2 3 This library is free software; you can redistribute it and/or modify 4 it under the terms of version 2.1 of the GNU Lesser General Public 5 License as published by the Free Software Foundation. 6 7 This library is distributed in the hope that it will be useful, 8 but WITHOUT ANY WARRANTY; without even the implied warranty of 9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 GNU Lesser General Public License for more details. 11 12 You should have received a copy of the GNU Lesser General Public 13 License along with this library; if not, write to the 14 Free Software Foundation, Inc., 59 Temple Place, Suite 330, 15 Boston, MA 02111-1307 USA 16 17 You can contact Elliotte Rusty Harold by sending e-mail to 18 elharo@ibiblio.org. Please include the word "XOM" in the 19 subject line. The XOM home page is located at http://www.xom.nu/ 20 */ 21 22 package nu.xom; 23 24 import java.io.InputStream; 25 import java.io.DataInputStream; 26 import java.io.IOException; 27 import java.util.Map; 28 import java.util.HashMap; 29 30 /** 31 * <p> 32 * 33 * </p> 34 * 35 * @author Elliotte Rusty Harold 36 * @version 1.2b3 37 * 38 */ 39 final class UnicodeUtil { 40 41 42 private static final int CANONICAL_COMBINING_CLASS_NOT_REORDERED = 0; 43 private static final int CANONICAL_COMBINING_CLASS_OVERLAY = 1; 44 private static final int CANONICAL_COMBINING_CLASS_NUKTA = 7; 45 private static final int CANONICAL_COMBINING_CLASS_KANA_VOICING = 8; 46 private final static int CANONICAL_COMBINING_CLASS_VIRAMA = 9; 47 private final static int CANONICAL_COMBINING_CLASS_10 = 10; 48 private final static int CANONICAL_COMBINING_CLASS_11 = 11; 49 private final static int CANONICAL_COMBINING_CLASS_12 = 12; 50 private final static int CANONICAL_COMBINING_CLASS_13 = 13; 51 private final static int CANONICAL_COMBINING_CLASS_14 = 14; 52 private final static int CANONICAL_COMBINING_CLASS_15 = 15; 53 private final static int CANONICAL_COMBINING_CLASS_16 = 16; 54 private final static int CANONICAL_COMBINING_CLASS_17 = 17; 55 private final static int CANONICAL_COMBINING_CLASS_18 = 18; 56 private final static int CANONICAL_COMBINING_CLASS_19 = 19; 57 private final static int CANONICAL_COMBINING_CLASS_20 = 20; 58 private final static int CANONICAL_COMBINING_CLASS_21 = 21; 59 private final static int CANONICAL_COMBINING_CLASS_22 = 22; 60 private final static int CANONICAL_COMBINING_CLASS_23 = 23; 61 private final static int CANONICAL_COMBINING_CLASS_24 = 24; 62 private final static int CANONICAL_COMBINING_CLASS_25 = 25; 63 private final static int CANONICAL_COMBINING_CLASS_26 = 26; 64 private final static int CANONICAL_COMBINING_CLASS_27 = 27; 65 private final static int CANONICAL_COMBINING_CLASS_28 = 28; 66 private final static int CANONICAL_COMBINING_CLASS_29 = 29; 67 private final static int CANONICAL_COMBINING_CLASS_30 = 30; 68 private final static int CANONICAL_COMBINING_CLASS_31 = 31; 69 private final static int CANONICAL_COMBINING_CLASS_32 = 32; 70 private final static int CANONICAL_COMBINING_CLASS_33 = 33; 71 private final static int CANONICAL_COMBINING_CLASS_34 = 34; 72 private final static int CANONICAL_COMBINING_CLASS_35 = 35; 73 private final static int CANONICAL_COMBINING_CLASS_36 = 36; 74 private final static int CANONICAL_COMBINING_CLASS_84 = 84; 75 private final static int CANONICAL_COMBINING_CLASS_91 = 91; 76 private final static int CANONICAL_COMBINING_CLASS_103 = 103; 77 private final static int CANONICAL_COMBINING_CLASS_107 = 107; 78 private final static int CANONICAL_COMBINING_CLASS_118 = 118; 79 private final static int CANONICAL_COMBINING_CLASS_122 = 122; 80 private final static int CANONICAL_COMBINING_CLASS_129 = 129; 81 private final static int CANONICAL_COMBINING_CLASS_130 = 130; 82 private final static int CANONICAL_COMBINING_CLASS_132 = 132; 83 private final static int CANONICAL_COMBINING_CLASS_ATTACHED_BELOW = 202; 84 private static final int CANONICAL_COMBINING_CLASS_214 = 214; 85 private static final int CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT = 216; 86 private final static int CANONICAL_COMBINING_CLASS_BELOW_LEFT = 218; 87 private final static int CANONICAL_COMBINING_CLASS_BELOW = 220; 88 private final static int CANONICAL_COMBINING_CLASS_BELOW_RIGHT = 222; 89 private final static int CANONICAL_COMBINING_CLASS_LEFT = 224; 90 private final static int CANONICAL_COMBINING_CLASS_RIGHT = 226; 91 private final static int CANONICAL_COMBINING_CLASS_ABOVE_LEFT = 228; 92 private final static int CANONICAL_COMBINING_CLASS_ABOVE = 230; 93 private final static int CANONICAL_COMBINING_CLASS_ABOVE_RIGHT = 232; 94 private final static int CANONICAL_COMBINING_CLASS_DOUBLE_BELOW = 233; 95 private final static int CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE = 234; 96 private final static int CANONICAL_COMBINING_CLASS_IOTA_SUBSCRIPT = 240; 97 98 isHighSurrogate(char c)99 private static boolean isHighSurrogate(char c) { 100 return c >= HI_SURROGATE_START && c <= HI_SURROGATE_END; 101 } 102 103 104 private static int HI_SURROGATE_START = 0xD800; 105 private static int HI_SURROGATE_END = 0xDBFF; 106 private static int LOW_SURROGATE_START = 0xDC00; 107 108 109 private static Map compositions; 110 loadCompositions()111 private static void loadCompositions() { 112 113 ClassLoader loader = Verifier.class.getClassLoader(); 114 if (loader != null) loadCompositions(loader); 115 // If that didn't work, try a different ClassLoader 116 if (compositions == null) { 117 loader = Thread.currentThread().getContextClassLoader(); 118 loadCompositions(loader); 119 } 120 if (compositions == null) { 121 throw new RuntimeException("Broken XOM installation: " 122 + "could not load nu/xom/compositions.dat"); 123 } 124 125 } 126 127 128 // XXX use a BiMap and make decompose much simpler? loadCompositions(ClassLoader loader)129 private static void loadCompositions(ClassLoader loader) { 130 131 DataInputStream in = null; 132 try { 133 InputStream source = loader.getResourceAsStream("nu/xom/compositions.dat"); 134 in = new DataInputStream(source); 135 // ???? would it make sense to store a serialized HashMap instead???? 136 compositions = new HashMap(); 137 try { 138 while (true) { 139 String composed = in.readUTF(); 140 String decomposed = in.readUTF(); 141 compositions.put(decomposed, composed); 142 } 143 } 144 catch (java.io.EOFException ex) { 145 // finished 146 } 147 } 148 catch (IOException ex) { 149 return; 150 } 151 finally { 152 try { 153 if (in != null) in.close(); 154 } 155 catch (IOException ex) { 156 // no big deal 157 } 158 } 159 160 } 161 162 isStarter(int character)163 private static boolean isStarter(int character) { 164 return getCombiningClass(character) == 0; 165 } 166 167 getCombiningClass(int character)168 private static int getCombiningClass(int character) { 169 // ???? optimize with table lookup? 170 171 if (character <= 0x2ff) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 172 if (character <= 0x314) return CANONICAL_COMBINING_CLASS_ABOVE; 173 if (character <= 0x315) return CANONICAL_COMBINING_CLASS_ABOVE_RIGHT; 174 if (character <= 0x319) return CANONICAL_COMBINING_CLASS_BELOW; 175 if (character <= 0x31a) return CANONICAL_COMBINING_CLASS_ABOVE_RIGHT; 176 if (character <= 0x31b) return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT; 177 if (character <= 0x320) return CANONICAL_COMBINING_CLASS_BELOW; 178 if (character <= 0x322) return CANONICAL_COMBINING_CLASS_ATTACHED_BELOW; 179 if (character <= 0x326) return CANONICAL_COMBINING_CLASS_BELOW; 180 if (character <= 0x328) return CANONICAL_COMBINING_CLASS_ATTACHED_BELOW; 181 if (character <= 0x333) return CANONICAL_COMBINING_CLASS_BELOW; 182 if (character <= 0x338) return CANONICAL_COMBINING_CLASS_OVERLAY; 183 if (character <= 0x33c) return CANONICAL_COMBINING_CLASS_BELOW; 184 if (character <= 0x344) return CANONICAL_COMBINING_CLASS_ABOVE; 185 if (character <= 0x345) return CANONICAL_COMBINING_CLASS_IOTA_SUBSCRIPT; 186 if (character <= 0x346) return CANONICAL_COMBINING_CLASS_ABOVE; 187 if (character <= 0x349) return CANONICAL_COMBINING_CLASS_BELOW; 188 if (character <= 0x34c) return CANONICAL_COMBINING_CLASS_ABOVE; 189 if (character <= 0x34e) return CANONICAL_COMBINING_CLASS_BELOW; 190 if (character <= 0x34f) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 191 if (character <= 0x352) return CANONICAL_COMBINING_CLASS_ABOVE; 192 if (character <= 0x356) return CANONICAL_COMBINING_CLASS_BELOW; 193 if (character <= 0x357) return CANONICAL_COMBINING_CLASS_ABOVE; 194 if (character <= 0x358) return CANONICAL_COMBINING_CLASS_ABOVE_RIGHT; 195 if (character <= 0x35a) return CANONICAL_COMBINING_CLASS_BELOW; 196 if (character <= 0x35b) return CANONICAL_COMBINING_CLASS_ABOVE; 197 if (character <= 0x35c) return CANONICAL_COMBINING_CLASS_DOUBLE_BELOW; 198 if (character <= 0x35e) return CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE; 199 if (character <= 0x35f) return CANONICAL_COMBINING_CLASS_DOUBLE_BELOW; 200 if (character <= 0x361) return CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE; 201 if (character <= 0x362) return CANONICAL_COMBINING_CLASS_DOUBLE_BELOW; 202 if (character <= 0x36f) return CANONICAL_COMBINING_CLASS_ABOVE; 203 if (character <= 0x482) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 204 if (character <= 0x487) return CANONICAL_COMBINING_CLASS_ABOVE; 205 if (character <= 0x590) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 206 if (character <= 0x591) return CANONICAL_COMBINING_CLASS_BELOW; 207 if (character <= 0x595) return CANONICAL_COMBINING_CLASS_ABOVE; 208 if (character <= 0x596) return CANONICAL_COMBINING_CLASS_BELOW; 209 if (character <= 0x599) return CANONICAL_COMBINING_CLASS_ABOVE; 210 if (character <= 0x59a) return CANONICAL_COMBINING_CLASS_BELOW_RIGHT; 211 if (character <= 0x59b) return CANONICAL_COMBINING_CLASS_BELOW; 212 if (character <= 0x5a1) return CANONICAL_COMBINING_CLASS_ABOVE; 213 if (character <= 0x5a7) return CANONICAL_COMBINING_CLASS_BELOW; 214 if (character <= 0x5a9) return CANONICAL_COMBINING_CLASS_ABOVE; 215 if (character <= 0x5aa) return CANONICAL_COMBINING_CLASS_BELOW; 216 if (character <= 0x5ac) return CANONICAL_COMBINING_CLASS_ABOVE; 217 if (character <= 0x5ad) return CANONICAL_COMBINING_CLASS_BELOW_RIGHT; 218 if (character <= 0x5ae) return CANONICAL_COMBINING_CLASS_ABOVE_LEFT; 219 if (character <= 0x5af) return CANONICAL_COMBINING_CLASS_ABOVE; 220 if (character <= 0x5b0) return CANONICAL_COMBINING_CLASS_10; 221 if (character <= 0x5b1) return CANONICAL_COMBINING_CLASS_11; 222 if (character <= 0x5b2) return CANONICAL_COMBINING_CLASS_12; 223 if (character <= 0x5b3) return CANONICAL_COMBINING_CLASS_13; 224 if (character <= 0x5b4) return CANONICAL_COMBINING_CLASS_14; 225 if (character <= 0x5b5) return CANONICAL_COMBINING_CLASS_15; 226 if (character <= 0x5b6) return CANONICAL_COMBINING_CLASS_16; 227 if (character <= 0x5b7) return CANONICAL_COMBINING_CLASS_17; 228 if (character <= 0x5b8) return CANONICAL_COMBINING_CLASS_18; 229 if (character <= 0x5ba) return CANONICAL_COMBINING_CLASS_19; 230 if (character <= 0x5bb) return CANONICAL_COMBINING_CLASS_20; 231 if (character <= 0x5bc) return CANONICAL_COMBINING_CLASS_21; 232 if (character <= 0x5bd) return CANONICAL_COMBINING_CLASS_22; 233 if (character <= 0x5be) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 234 if (character <= 0x5bf) return CANONICAL_COMBINING_CLASS_23; 235 if (character <= 0x5c0) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 236 if (character <= 0x5c1) return CANONICAL_COMBINING_CLASS_24; 237 if (character <= 0x5c2) return CANONICAL_COMBINING_CLASS_25; 238 if (character <= 0x5c3) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 239 if (character <= 0x5c4) return CANONICAL_COMBINING_CLASS_ABOVE; 240 if (character <= 0x5c5) return CANONICAL_COMBINING_CLASS_BELOW; 241 if (character <= 0x5c6) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 242 if (character <= 0x5c7) return CANONICAL_COMBINING_CLASS_18; 243 if (character <= 0x60f) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 244 if (character <= 0x617) return CANONICAL_COMBINING_CLASS_ABOVE; 245 if (character <= 0x618) return CANONICAL_COMBINING_CLASS_30; 246 if (character <= 0x619) return CANONICAL_COMBINING_CLASS_31; 247 if (character <= 0x61a) return CANONICAL_COMBINING_CLASS_32; 248 if (character <= 0x64a) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 249 if (character <= 0x64b) return CANONICAL_COMBINING_CLASS_27; 250 if (character <= 0x64c) return CANONICAL_COMBINING_CLASS_28; 251 if (character <= 0x64d) return CANONICAL_COMBINING_CLASS_29; 252 if (character <= 0x64e) return CANONICAL_COMBINING_CLASS_30; 253 if (character <= 0x64f) return CANONICAL_COMBINING_CLASS_31; 254 if (character <= 0x650) return CANONICAL_COMBINING_CLASS_32; 255 if (character <= 0x651) return CANONICAL_COMBINING_CLASS_33; 256 if (character <= 0x652) return CANONICAL_COMBINING_CLASS_34; 257 if (character <= 0x654) return CANONICAL_COMBINING_CLASS_ABOVE; 258 if (character <= 0x656) return CANONICAL_COMBINING_CLASS_BELOW; 259 if (character <= 0x65b) return CANONICAL_COMBINING_CLASS_ABOVE; 260 if (character <= 0x65c) return CANONICAL_COMBINING_CLASS_BELOW; 261 if (character <= 0x65e) return CANONICAL_COMBINING_CLASS_ABOVE; 262 if (character <= 0x66f) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 263 if (character <= 0x670) return CANONICAL_COMBINING_CLASS_35; 264 if (character <= 0x6d5) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 265 if (character <= 0x6dc) return CANONICAL_COMBINING_CLASS_ABOVE; 266 if (character <= 0x6de) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 267 if (character <= 0x6e2) return CANONICAL_COMBINING_CLASS_ABOVE; 268 if (character <= 0x6e3) return CANONICAL_COMBINING_CLASS_BELOW; 269 if (character <= 0x6e4) return CANONICAL_COMBINING_CLASS_ABOVE; 270 if (character <= 0x6e6) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 271 if (character <= 0x6e8) return CANONICAL_COMBINING_CLASS_ABOVE; 272 if (character <= 0x6e9) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 273 if (character <= 0x6ea) return CANONICAL_COMBINING_CLASS_BELOW; 274 if (character <= 0x6ec) return CANONICAL_COMBINING_CLASS_ABOVE; 275 if (character <= 0x6ed) return CANONICAL_COMBINING_CLASS_BELOW; 276 if (character <= 0x710) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 277 if (character <= 0x711) return CANONICAL_COMBINING_CLASS_36; 278 if (character <= 0x72f) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 279 if (character <= 0x730) return CANONICAL_COMBINING_CLASS_ABOVE; 280 if (character <= 0x731) return CANONICAL_COMBINING_CLASS_BELOW; 281 if (character <= 0x733) return CANONICAL_COMBINING_CLASS_ABOVE; 282 if (character <= 0x734) return CANONICAL_COMBINING_CLASS_BELOW; 283 if (character <= 0x736) return CANONICAL_COMBINING_CLASS_ABOVE; 284 if (character <= 0x739) return CANONICAL_COMBINING_CLASS_BELOW; 285 if (character <= 0x73a) return CANONICAL_COMBINING_CLASS_ABOVE; 286 if (character <= 0x73c) return CANONICAL_COMBINING_CLASS_BELOW; 287 if (character <= 0x73d) return CANONICAL_COMBINING_CLASS_ABOVE; 288 if (character <= 0x73e) return CANONICAL_COMBINING_CLASS_BELOW; 289 if (character <= 0x741) return CANONICAL_COMBINING_CLASS_ABOVE; 290 if (character <= 0x742) return CANONICAL_COMBINING_CLASS_BELOW; 291 if (character <= 0x743) return CANONICAL_COMBINING_CLASS_ABOVE; 292 if (character <= 0x744) return CANONICAL_COMBINING_CLASS_BELOW; 293 if (character <= 0x745) return CANONICAL_COMBINING_CLASS_ABOVE; 294 if (character <= 0x746) return CANONICAL_COMBINING_CLASS_BELOW; 295 if (character <= 0x747) return CANONICAL_COMBINING_CLASS_ABOVE; 296 if (character <= 0x748) return CANONICAL_COMBINING_CLASS_BELOW; 297 if (character <= 0x74a) return CANONICAL_COMBINING_CLASS_ABOVE; 298 if (character <= 0x7ea) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 299 if (character <= 0x7f1) return CANONICAL_COMBINING_CLASS_ABOVE; 300 if (character <= 0x7f2) return CANONICAL_COMBINING_CLASS_BELOW; 301 if (character <= 0x7f3) return CANONICAL_COMBINING_CLASS_ABOVE; 302 if (character <= 0x93b) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 303 if (character <= 0x93c) return CANONICAL_COMBINING_CLASS_NUKTA; 304 if (character <= 0x94c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 305 if (character <= 0x94d) return CANONICAL_COMBINING_CLASS_VIRAMA; 306 if (character <= 0x950) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 307 if (character <= 0x951) return CANONICAL_COMBINING_CLASS_ABOVE; 308 if (character <= 0x952) return CANONICAL_COMBINING_CLASS_BELOW; 309 if (character <= 0x954) return CANONICAL_COMBINING_CLASS_ABOVE; 310 if (character <= 0x9bb) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 311 if (character <= 0x9bc) return CANONICAL_COMBINING_CLASS_NUKTA; 312 if (character <= 0x9cc) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 313 if (character <= 0x9cd) return CANONICAL_COMBINING_CLASS_VIRAMA; 314 if (character <= 0xa3b) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 315 if (character <= 0xa3c) return CANONICAL_COMBINING_CLASS_NUKTA; 316 if (character <= 0xa4c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 317 if (character <= 0xa4d) return CANONICAL_COMBINING_CLASS_VIRAMA; 318 if (character <= 0xabb) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 319 if (character <= 0xabc) return CANONICAL_COMBINING_CLASS_NUKTA; 320 if (character <= 0xacc) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 321 if (character <= 0xacd) return CANONICAL_COMBINING_CLASS_VIRAMA; 322 if (character <= 0xb3b) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 323 if (character <= 0xb3c) return CANONICAL_COMBINING_CLASS_NUKTA; 324 if (character <= 0xb4c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 325 if (character <= 0xb4d) return CANONICAL_COMBINING_CLASS_VIRAMA; 326 if (character <= 0xbcc) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 327 if (character <= 0xbcd) return CANONICAL_COMBINING_CLASS_VIRAMA; 328 if (character <= 0xc4c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 329 if (character <= 0xc4d) return CANONICAL_COMBINING_CLASS_VIRAMA; 330 if (character <= 0xc54) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 331 if (character <= 0xc55) return CANONICAL_COMBINING_CLASS_84; 332 if (character <= 0xc56) return CANONICAL_COMBINING_CLASS_91; 333 if (character <= 0xcbb) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 334 if (character <= 0xcbc) return CANONICAL_COMBINING_CLASS_NUKTA; 335 if (character <= 0xccc) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 336 if (character <= 0xccd) return CANONICAL_COMBINING_CLASS_VIRAMA; 337 if (character <= 0xd4c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 338 if (character <= 0xd4d) return CANONICAL_COMBINING_CLASS_VIRAMA; 339 if (character <= 0xdc9) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 340 if (character <= 0xdca) return CANONICAL_COMBINING_CLASS_VIRAMA; 341 if (character <= 0xe37) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 342 if (character <= 0xe39) return CANONICAL_COMBINING_CLASS_103; 343 if (character <= 0xe3a) return CANONICAL_COMBINING_CLASS_VIRAMA; 344 if (character <= 0xe47) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 345 if (character <= 0xe4b) return CANONICAL_COMBINING_CLASS_107; 346 if (character <= 0xeb7) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 347 if (character <= 0xeb9) return CANONICAL_COMBINING_CLASS_118; 348 if (character <= 0xec7) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 349 if (character <= 0xecb) return CANONICAL_COMBINING_CLASS_122; 350 if (character <= 0xf17) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 351 if (character <= 0xf19) return CANONICAL_COMBINING_CLASS_BELOW; 352 if (character <= 0xf34) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 353 if (character <= 0xf35) return CANONICAL_COMBINING_CLASS_BELOW; 354 if (character <= 0xf36) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 355 if (character <= 0xf37) return CANONICAL_COMBINING_CLASS_BELOW; 356 if (character <= 0xf38) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 357 if (character <= 0xf39) return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT; 358 if (character <= 0xf70) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 359 if (character <= 0xf71) return CANONICAL_COMBINING_CLASS_129; 360 if (character <= 0xf72) return CANONICAL_COMBINING_CLASS_130; 361 if (character <= 0xf73) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 362 if (character <= 0xf74) return CANONICAL_COMBINING_CLASS_132; 363 if (character <= 0xf79) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 364 if (character <= 0xf7d) return CANONICAL_COMBINING_CLASS_130; 365 if (character <= 0xf7f) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 366 if (character <= 0xf80) return CANONICAL_COMBINING_CLASS_130; 367 if (character <= 0xf81) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 368 if (character <= 0xf83) return CANONICAL_COMBINING_CLASS_ABOVE; 369 if (character <= 0xf84) return CANONICAL_COMBINING_CLASS_VIRAMA; 370 if (character <= 0xf85) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 371 if (character <= 0xf87) return CANONICAL_COMBINING_CLASS_ABOVE; 372 if (character <= 0xfc5) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 373 if (character <= 0xfc6) return CANONICAL_COMBINING_CLASS_BELOW; 374 if (character <= 0x1036) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 375 if (character <= 0x1037) return CANONICAL_COMBINING_CLASS_NUKTA; 376 if (character <= 0x1038) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 377 if (character <= 0x103a) return CANONICAL_COMBINING_CLASS_VIRAMA; 378 if (character <= 0x108c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 379 if (character <= 0x108d) return CANONICAL_COMBINING_CLASS_BELOW; 380 if (character <= 0x135e) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 381 if (character <= 0x135f) return CANONICAL_COMBINING_CLASS_ABOVE; 382 if (character <= 0x1713) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 383 if (character <= 0x1714) return CANONICAL_COMBINING_CLASS_VIRAMA; 384 if (character <= 0x1733) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 385 if (character <= 0x1734) return CANONICAL_COMBINING_CLASS_VIRAMA; 386 if (character <= 0x17d1) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 387 if (character <= 0x17d2) return CANONICAL_COMBINING_CLASS_VIRAMA; 388 if (character <= 0x17dc) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 389 if (character <= 0x17dd) return CANONICAL_COMBINING_CLASS_ABOVE; 390 if (character <= 0x18a8) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 391 if (character <= 0x18a9) return CANONICAL_COMBINING_CLASS_ABOVE_LEFT; 392 if (character <= 0x1938) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 393 if (character <= 0x1939) return CANONICAL_COMBINING_CLASS_BELOW_RIGHT; 394 if (character <= 0x193a) return CANONICAL_COMBINING_CLASS_ABOVE; 395 if (character <= 0x193b) return CANONICAL_COMBINING_CLASS_BELOW; 396 if (character <= 0x1a16) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 397 if (character <= 0x1a17) return CANONICAL_COMBINING_CLASS_ABOVE; 398 if (character <= 0x1a18) return CANONICAL_COMBINING_CLASS_BELOW; 399 if (character <= 0x1b33) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 400 if (character <= 0x1b34) return CANONICAL_COMBINING_CLASS_NUKTA; 401 if (character <= 0x1b43) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 402 if (character <= 0x1b44) return CANONICAL_COMBINING_CLASS_VIRAMA; 403 if (character <= 0x1b6a) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 404 if (character <= 0x1b6b) return CANONICAL_COMBINING_CLASS_ABOVE; 405 if (character <= 0x1b6c) return CANONICAL_COMBINING_CLASS_BELOW; 406 if (character <= 0x1b73) return CANONICAL_COMBINING_CLASS_ABOVE; 407 if (character <= 0x1ba9) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 408 if (character <= 0x1baa) return CANONICAL_COMBINING_CLASS_VIRAMA; 409 if (character <= 0x1c36) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 410 if (character <= 0x1c37) return CANONICAL_COMBINING_CLASS_NUKTA; 411 if (character <= 0x1dbf) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 412 if (character <= 0x1dc1) return CANONICAL_COMBINING_CLASS_ABOVE; 413 if (character <= 0x1dc2) return CANONICAL_COMBINING_CLASS_BELOW; 414 if (character <= 0x1dc9) return CANONICAL_COMBINING_CLASS_ABOVE; 415 if (character <= 0x1dca) return CANONICAL_COMBINING_CLASS_BELOW; 416 if (character <= 0x1dcc) return CANONICAL_COMBINING_CLASS_ABOVE; 417 if (character <= 0x1dcd) return CANONICAL_COMBINING_CLASS_DOUBLE_ABOVE; 418 if (character <= 0x1dce) return CANONICAL_COMBINING_CLASS_214; 419 if (character <= 0x1dcf) return CANONICAL_COMBINING_CLASS_BELOW; 420 if (character <= 0x1dd0) return CANONICAL_COMBINING_CLASS_ATTACHED_BELOW; 421 if (character <= 0x1de6) return CANONICAL_COMBINING_CLASS_ABOVE; 422 if (character <= 0x1dfd) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 423 if (character <= 0x1dfe) return CANONICAL_COMBINING_CLASS_ABOVE; 424 if (character <= 0x1dff) return CANONICAL_COMBINING_CLASS_BELOW; 425 if (character <= 0x20cf) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 426 if (character <= 0x20d1) return CANONICAL_COMBINING_CLASS_ABOVE; 427 if (character <= 0x20d3) return CANONICAL_COMBINING_CLASS_OVERLAY; 428 if (character <= 0x20d7) return CANONICAL_COMBINING_CLASS_ABOVE; 429 if (character <= 0x20da) return CANONICAL_COMBINING_CLASS_OVERLAY; 430 if (character <= 0x20dc) return CANONICAL_COMBINING_CLASS_ABOVE; 431 if (character <= 0x20e0) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 432 if (character <= 0x20e1) return CANONICAL_COMBINING_CLASS_ABOVE; 433 if (character <= 0x20e4) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 434 if (character <= 0x20e6) return CANONICAL_COMBINING_CLASS_OVERLAY; 435 if (character <= 0x20e7) return CANONICAL_COMBINING_CLASS_ABOVE; 436 if (character <= 0x20e8) return CANONICAL_COMBINING_CLASS_BELOW; 437 if (character <= 0x20e9) return CANONICAL_COMBINING_CLASS_ABOVE; 438 if (character <= 0x20eb) return CANONICAL_COMBINING_CLASS_OVERLAY; 439 if (character <= 0x20ef) return CANONICAL_COMBINING_CLASS_BELOW; 440 if (character <= 0x20f0) return CANONICAL_COMBINING_CLASS_ABOVE; 441 if (character <= 0x2ddf) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 442 if (character <= 0x2dff) return CANONICAL_COMBINING_CLASS_ABOVE; 443 if (character <= 0x3029) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 444 if (character <= 0x302a) return CANONICAL_COMBINING_CLASS_BELOW_LEFT; 445 if (character <= 0x302b) return CANONICAL_COMBINING_CLASS_ABOVE_LEFT; 446 if (character <= 0x302c) return CANONICAL_COMBINING_CLASS_ABOVE_RIGHT; 447 if (character <= 0x302d) return CANONICAL_COMBINING_CLASS_BELOW_RIGHT; 448 if (character <= 0x302f) return CANONICAL_COMBINING_CLASS_LEFT; 449 if (character <= 0x3098) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 450 if (character <= 0x309a) return CANONICAL_COMBINING_CLASS_KANA_VOICING; 451 if (character <= 0xa66e) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 452 if (character <= 0xa66f) return CANONICAL_COMBINING_CLASS_ABOVE; 453 if (character <= 0xa67b) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 454 if (character <= 0xa67d) return CANONICAL_COMBINING_CLASS_ABOVE; 455 if (character <= 0xa805) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 456 if (character <= 0xa806) return CANONICAL_COMBINING_CLASS_VIRAMA; 457 if (character <= 0xa8c3) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 458 if (character <= 0xa8c4) return CANONICAL_COMBINING_CLASS_VIRAMA; 459 if (character <= 0xa92a) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 460 if (character <= 0xa92d) return CANONICAL_COMBINING_CLASS_BELOW; 461 if (character <= 0xa952) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 462 if (character <= 0xa953) return CANONICAL_COMBINING_CLASS_VIRAMA; 463 if (character <= 0xfb1d) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 464 if (character <= 0xfb1e) return CANONICAL_COMBINING_CLASS_26; 465 if (character <= 0xfe1f) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 466 if (character <= 0xfe26) return CANONICAL_COMBINING_CLASS_ABOVE; 467 if (character <= 0x101fc) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 468 if (character <= 0x101fd) return CANONICAL_COMBINING_CLASS_BELOW; 469 if (character <= 0x10a0c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 470 if (character <= 0x10a0d) return CANONICAL_COMBINING_CLASS_BELOW; 471 if (character <= 0x10a0e) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 472 if (character <= 0x10a0f) return CANONICAL_COMBINING_CLASS_ABOVE; 473 if (character <= 0x10a37) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 474 if (character <= 0x10a38) return CANONICAL_COMBINING_CLASS_ABOVE; 475 if (character <= 0x10a39) return CANONICAL_COMBINING_CLASS_OVERLAY; 476 if (character <= 0x10a3a) return CANONICAL_COMBINING_CLASS_BELOW; 477 if (character <= 0x10a3e) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 478 if (character <= 0x10a3f) return CANONICAL_COMBINING_CLASS_VIRAMA; 479 if (character <= 0x1d164) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 480 if (character <= 0x1d166) return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT; 481 if (character <= 0x1d169) return CANONICAL_COMBINING_CLASS_OVERLAY; 482 if (character <= 0x1d16c) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 483 if (character <= 0x1d16d) return CANONICAL_COMBINING_CLASS_RIGHT; 484 if (character <= 0x1d172) return CANONICAL_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT; 485 if (character <= 0x1d17a) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 486 if (character <= 0x1d182) return CANONICAL_COMBINING_CLASS_BELOW; 487 if (character <= 0x1d184) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 488 if (character <= 0x1d189) return CANONICAL_COMBINING_CLASS_ABOVE; 489 if (character <= 0x1d18b) return CANONICAL_COMBINING_CLASS_BELOW; 490 if (character <= 0x1d1a9) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 491 if (character <= 0x1d1ad) return CANONICAL_COMBINING_CLASS_ABOVE; 492 if (character <= 0x1d241) return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 493 if (character <= 0x1d244) return CANONICAL_COMBINING_CLASS_ABOVE; 494 495 496 return CANONICAL_COMBINING_CLASS_NOT_REORDERED; 497 } 498 499 500 private final static int FIRST_HANGUL_SYLLABLE = 0xAC00; 501 // even if this is not right; why do tests still pass???? 502 // private final static int LAST_HANGUL_SYLLABLE = 0xAC00; // FIXME 503 private final static int LAST_HANGUL_SYLLABLE = 0xD7A3; 504 505 combineSurrogatePair(char highSurrogate, char lowSurrogate)506 static int combineSurrogatePair(char highSurrogate, char lowSurrogate) { 507 508 int high = highSurrogate & 0x7FF; 509 int low = lowSurrogate - 0xDC00; 510 int highShifted = high << 10; 511 int combined = highShifted | low; 512 int codePoint = combined + 0x10000; 513 return codePoint; 514 515 } 516 makeSurrogatePair(int codePoint)517 private static String makeSurrogatePair(int codePoint) { 518 519 StringBuffer s = new StringBuffer(2); 520 if (codePoint <= 0xFFFF) s.append((char) codePoint); 521 else { 522 char high = (char) (0xD800 - (0x10000 >> 10) + (codePoint >> 10)); 523 char low = (char) (0xDC00 + (codePoint & 0x3FF)); 524 s.append(high); 525 s.append(low); 526 } 527 return s.toString(); 528 529 } 530 getHighSurrogate(int codepoint)531 private static char getHighSurrogate(int codepoint) { 532 533 char x = (char) codepoint; 534 int u = (codepoint >> 16) & ((1<<5) - 1); 535 char w = (char) (u - 1); 536 return (char) (HI_SURROGATE_START | (w << 6) | x >> 10); 537 538 } 539 540 getLowSurrogate(int codepoint)541 private static char getLowSurrogate(int codepoint) { 542 543 char x = (char) codepoint; 544 return (char) (LOW_SURROGATE_START | x & ((1<<10) - 1)); 545 546 } 547 548 normalize(String s)549 static String normalize(String s) { 550 551 boolean needsNormalizing = false; 552 553 int length = s.length(); 554 for (int i = 0; i < length; i++) { 555 char c = s.charAt(i); 556 if (c > 255) { 557 needsNormalizing = true; 558 break; 559 } 560 } 561 562 if (needsNormalizing) { 563 564 // ???? unnecessarily invoking this in many cases 565 s = decomposeHangul(s); 566 UnicodeString ustring = new UnicodeString(s); 567 UnicodeString decomposed = ustring.decompose(); 568 UnicodeString recomposed = decomposed.compose(); 569 String result = recomposed.toString(); 570 // ???? unnecessarily invoking this in many cases 571 result = composeHangul(result); 572 return result; 573 } 574 575 return s; 576 577 } 578 579 decomposeHangul(String s)580 private static String decomposeHangul(String s) { 581 582 int length = s.length(); 583 StringBuffer sb = new StringBuffer(s.length()); 584 for (int i = 0; i < length; i++) { 585 char c = s.charAt(i); 586 if (c >= FIRST_HANGUL_SYLLABLE && c <= LAST_HANGUL_SYLLABLE) { 587 sb.append(decomposeHangul(c)); 588 } 589 else { 590 sb.append(c); 591 } 592 } 593 return sb.toString(); 594 595 } 596 597 598 // return -1 if the character cannot be combined with the starter; 599 // otherwise return the composed character composeCharacter(int starter, int c)600 private static int composeCharacter(int starter, int c) { 601 602 StringBuffer decomposed = new StringBuffer(4); 603 604 if (starter > 0xFFFF) { 605 decomposed.append(getHighSurrogate(starter)); 606 decomposed.append(getLowSurrogate(starter)); 607 } 608 else decomposed.append((char) starter); 609 610 if (c > 0xFFFF) { 611 decomposed.append(getHighSurrogate(c)); 612 decomposed.append(getLowSurrogate(c)); 613 } 614 else decomposed.append((char) c); 615 616 String recomposed = (String) compositions.get(decomposed.toString()); 617 if (recomposed == null) return -1; 618 else if (recomposed.length() == 1) return recomposed.charAt(0); 619 else return combineSurrogatePair(recomposed.charAt(0), recomposed.charAt(1)); 620 621 } 622 623 624 // FIXME must recurse this 625 ///CLOVER:OFF decompose(int character)626 private static String decompose(int character) { 627 628 if (character < 0x00C0) { 629 return String.valueOf((char) character); 630 } 631 else if (character >= FIRST_HANGUL_SYLLABLE && character <= LAST_HANGUL_SYLLABLE) { 632 return decomposeHangul((char) character); 633 } 634 635 // XXX use lookup table prepopulated with large string at first use 636 switch (character) { 637 case 0x00C0: 638 return "\u0041\u0300"; 639 case 0x00C1: 640 return "\u0041\u0301"; 641 case 0x00C2: 642 return "\u0041\u0302"; 643 case 0x00C3: 644 return "\u0041\u0303"; 645 case 0x00C4: 646 return "\u0041\u0308"; 647 case 0x00C5: 648 return "\u0041\u030A"; 649 case 0x00C7: 650 return "\u0043\u0327"; 651 case 0x00C8: 652 return "\u0045\u0300"; 653 case 0x00C9: 654 return "\u0045\u0301"; 655 case 0x00CA: 656 return "\u0045\u0302"; 657 case 0x00CB: 658 return "\u0045\u0308"; 659 case 0x00CC: 660 return "\u0049\u0300"; 661 case 0x00CD: 662 return "\u0049\u0301"; 663 case 0x00CE: 664 return "\u0049\u0302"; 665 case 0x00CF: 666 return "\u0049\u0308"; 667 case 0x00D1: 668 return "\u004E\u0303"; 669 case 0x00D2: 670 return "\u004F\u0300"; 671 case 0x00D3: 672 return "\u004F\u0301"; 673 case 0x00D4: 674 return "\u004F\u0302"; 675 case 0x00D5: 676 return "\u004F\u0303"; 677 case 0x00D6: 678 return "\u004F\u0308"; 679 case 0x00D9: 680 return "\u0055\u0300"; 681 case 0x00DA: 682 return "\u0055\u0301"; 683 case 0x00DB: 684 return "\u0055\u0302"; 685 case 0x00DC: 686 return "\u0055\u0308"; 687 case 0x00DD: 688 return "\u0059\u0301"; 689 case 0x00E0: 690 return "\u0061\u0300"; 691 case 0x00E1: 692 return "\u0061\u0301"; 693 case 0x00E2: 694 return "\u0061\u0302"; 695 case 0x00E3: 696 return "\u0061\u0303"; 697 case 0x00E4: 698 return "\u0061\u0308"; 699 case 0x00E5: 700 return "\u0061\u030A"; 701 case 0x00E7: 702 return "\u0063\u0327"; 703 case 0x00E8: 704 return "\u0065\u0300"; 705 case 0x00E9: 706 return "\u0065\u0301"; 707 case 0x00EA: 708 return "\u0065\u0302"; 709 case 0x00EB: 710 return "\u0065\u0308"; 711 case 0x00EC: 712 return "\u0069\u0300"; 713 case 0x00ED: 714 return "\u0069\u0301"; 715 case 0x00EE: 716 return "\u0069\u0302"; 717 case 0x00EF: 718 return "\u0069\u0308"; 719 case 0x00F1: 720 return "\u006E\u0303"; 721 case 0x00F2: 722 return "\u006F\u0300"; 723 case 0x00F3: 724 return "\u006F\u0301"; 725 case 0x00F4: 726 return "\u006F\u0302"; 727 case 0x00F5: 728 return "\u006F\u0303"; 729 case 0x00F6: 730 return "\u006F\u0308"; 731 case 0x00F9: 732 return "\u0075\u0300"; 733 case 0x00FA: 734 return "\u0075\u0301"; 735 case 0x00FB: 736 return "\u0075\u0302"; 737 case 0x00FC: 738 return "\u0075\u0308"; 739 case 0x00FD: 740 return "\u0079\u0301"; 741 case 0x00FF: 742 return "\u0079\u0308"; 743 case 0x0100: 744 return "\u0041\u0304"; 745 case 0x0101: 746 return "\u0061\u0304"; 747 case 0x0102: 748 return "\u0041\u0306"; 749 case 0x0103: 750 return "\u0061\u0306"; 751 case 0x0104: 752 return "\u0041\u0328"; 753 case 0x0105: 754 return "\u0061\u0328"; 755 case 0x0106: 756 return "\u0043\u0301"; 757 case 0x0107: 758 return "\u0063\u0301"; 759 case 0x0108: 760 return "\u0043\u0302"; 761 case 0x0109: 762 return "\u0063\u0302"; 763 case 0x010A: 764 return "\u0043\u0307"; 765 case 0x010B: 766 return "\u0063\u0307"; 767 case 0x010C: 768 return "\u0043\u030C"; 769 case 0x010D: 770 return "\u0063\u030C"; 771 case 0x010E: 772 return "\u0044\u030C"; 773 case 0x010F: 774 return "\u0064\u030C"; 775 case 0x0112: 776 return "\u0045\u0304"; 777 case 0x0113: 778 return "\u0065\u0304"; 779 case 0x0114: 780 return "\u0045\u0306"; 781 case 0x0115: 782 return "\u0065\u0306"; 783 case 0x0116: 784 return "\u0045\u0307"; 785 case 0x0117: 786 return "\u0065\u0307"; 787 case 0x0118: 788 return "\u0045\u0328"; 789 case 0x0119: 790 return "\u0065\u0328"; 791 case 0x011A: 792 return "\u0045\u030C"; 793 case 0x011B: 794 return "\u0065\u030C"; 795 case 0x011C: 796 return "\u0047\u0302"; 797 case 0x011D: 798 return "\u0067\u0302"; 799 case 0x011E: 800 return "\u0047\u0306"; 801 case 0x011F: 802 return "\u0067\u0306"; 803 case 0x0120: 804 return "\u0047\u0307"; 805 case 0x0121: 806 return "\u0067\u0307"; 807 case 0x0122: 808 return "\u0047\u0327"; 809 case 0x0123: 810 return "\u0067\u0327"; 811 case 0x0124: 812 return "\u0048\u0302"; 813 case 0x0125: 814 return "\u0068\u0302"; 815 case 0x0128: 816 return "\u0049\u0303"; 817 case 0x0129: 818 return "\u0069\u0303"; 819 case 0x012A: 820 return "\u0049\u0304"; 821 case 0x012B: 822 return "\u0069\u0304"; 823 case 0x012C: 824 return "\u0049\u0306"; 825 case 0x012D: 826 return "\u0069\u0306"; 827 case 0x012E: 828 return "\u0049\u0328"; 829 case 0x012F: 830 return "\u0069\u0328"; 831 case 0x0130: 832 return "\u0049\u0307"; 833 case 0x0134: 834 return "\u004A\u0302"; 835 case 0x0135: 836 return "\u006A\u0302"; 837 case 0x0136: 838 return "\u004B\u0327"; 839 case 0x0137: 840 return "\u006B\u0327"; 841 case 0x0139: 842 return "\u004C\u0301"; 843 case 0x013A: 844 return "\u006C\u0301"; 845 case 0x013B: 846 return "\u004C\u0327"; 847 case 0x013C: 848 return "\u006C\u0327"; 849 case 0x013D: 850 return "\u004C\u030C"; 851 case 0x013E: 852 return "\u006C\u030C"; 853 case 0x0143: 854 return "\u004E\u0301"; 855 case 0x0144: 856 return "\u006E\u0301"; 857 case 0x0145: 858 return "\u004E\u0327"; 859 case 0x0146: 860 return "\u006E\u0327"; 861 case 0x0147: 862 return "\u004E\u030C"; 863 case 0x0148: 864 return "\u006E\u030C"; 865 case 0x014C: 866 return "\u004F\u0304"; 867 case 0x014D: 868 return "\u006F\u0304"; 869 case 0x014E: 870 return "\u004F\u0306"; 871 case 0x014F: 872 return "\u006F\u0306"; 873 case 0x0150: 874 return "\u004F\u030B"; 875 case 0x0151: 876 return "\u006F\u030B"; 877 case 0x0154: 878 return "\u0052\u0301"; 879 case 0x0155: 880 return "\u0072\u0301"; 881 case 0x0156: 882 return "\u0052\u0327"; 883 case 0x0157: 884 return "\u0072\u0327"; 885 case 0x0158: 886 return "\u0052\u030C"; 887 case 0x0159: 888 return "\u0072\u030C"; 889 case 0x015A: 890 return "\u0053\u0301"; 891 case 0x015B: 892 return "\u0073\u0301"; 893 case 0x015C: 894 return "\u0053\u0302"; 895 case 0x015D: 896 return "\u0073\u0302"; 897 case 0x015E: 898 return "\u0053\u0327"; 899 case 0x015F: 900 return "\u0073\u0327"; 901 case 0x0160: 902 return "\u0053\u030C"; 903 case 0x0161: 904 return "\u0073\u030C"; 905 case 0x0162: 906 return "\u0054\u0327"; 907 case 0x0163: 908 return "\u0074\u0327"; 909 case 0x0164: 910 return "\u0054\u030C"; 911 case 0x0165: 912 return "\u0074\u030C"; 913 case 0x0168: 914 return "\u0055\u0303"; 915 case 0x0169: 916 return "\u0075\u0303"; 917 case 0x016A: 918 return "\u0055\u0304"; 919 case 0x016B: 920 return "\u0075\u0304"; 921 case 0x016C: 922 return "\u0055\u0306"; 923 case 0x016D: 924 return "\u0075\u0306"; 925 case 0x016E: 926 return "\u0055\u030A"; 927 case 0x016F: 928 return "\u0075\u030A"; 929 case 0x0170: 930 return "\u0055\u030B"; 931 case 0x0171: 932 return "\u0075\u030B"; 933 case 0x0172: 934 return "\u0055\u0328"; 935 case 0x0173: 936 return "\u0075\u0328"; 937 case 0x0174: 938 return "\u0057\u0302"; 939 case 0x0175: 940 return "\u0077\u0302"; 941 case 0x0176: 942 return "\u0059\u0302"; 943 case 0x0177: 944 return "\u0079\u0302"; 945 case 0x0178: 946 return "\u0059\u0308"; 947 case 0x0179: 948 return "\u005A\u0301"; 949 case 0x017A: 950 return "\u007A\u0301"; 951 case 0x017B: 952 return "\u005A\u0307"; 953 case 0x017C: 954 return "\u007A\u0307"; 955 case 0x017D: 956 return "\u005A\u030C"; 957 case 0x017E: 958 return "\u007A\u030C"; 959 case 0x01A0: 960 return "\u004F\u031B"; 961 case 0x01A1: 962 return "\u006F\u031B"; 963 case 0x01AF: 964 return "\u0055\u031B"; 965 case 0x01B0: 966 return "\u0075\u031B"; 967 case 0x01CD: 968 return "\u0041\u030C"; 969 case 0x01CE: 970 return "\u0061\u030C"; 971 case 0x01CF: 972 return "\u0049\u030C"; 973 case 0x01D0: 974 return "\u0069\u030C"; 975 case 0x01D1: 976 return "\u004F\u030C"; 977 case 0x01D2: 978 return "\u006F\u030C"; 979 case 0x01D3: 980 return "\u0055\u030C"; 981 case 0x01D4: 982 return "\u0075\u030C"; 983 case 0x01D5: 984 return "\u00DC\u0304"; 985 case 0x01D6: 986 return "\u00FC\u0304"; 987 case 0x01D7: 988 return "\u00DC\u0301"; 989 case 0x01D8: 990 return "\u00FC\u0301"; 991 case 0x01D9: 992 return "\u00DC\u030C"; 993 case 0x01DA: 994 return "\u00FC\u030C"; 995 case 0x01DB: 996 return "\u00DC\u0300"; 997 case 0x01DC: 998 return "\u00FC\u0300"; 999 case 0x01DE: 1000 return "\u00C4\u0304"; 1001 case 0x01DF: 1002 return "\u00E4\u0304"; 1003 case 0x01E0: 1004 return "\u0226\u0304"; 1005 case 0x01E1: 1006 return "\u0227\u0304"; 1007 case 0x01E2: 1008 return "\u00C6\u0304"; 1009 case 0x01E3: 1010 return "\u00E6\u0304"; 1011 case 0x01E6: 1012 return "\u0047\u030C"; 1013 case 0x01E7: 1014 return "\u0067\u030C"; 1015 case 0x01E8: 1016 return "\u004B\u030C"; 1017 case 0x01E9: 1018 return "\u006B\u030C"; 1019 case 0x01EA: 1020 return "\u004F\u0328"; 1021 case 0x01EB: 1022 return "\u006F\u0328"; 1023 case 0x01EC: 1024 return "\u01EA\u0304"; 1025 case 0x01ED: 1026 return "\u01EB\u0304"; 1027 case 0x01EE: 1028 return "\u01B7\u030C"; 1029 case 0x01EF: 1030 return "\u0292\u030C"; 1031 case 0x01F0: 1032 return "\u006A\u030C"; 1033 case 0x01F4: 1034 return "\u0047\u0301"; 1035 case 0x01F5: 1036 return "\u0067\u0301"; 1037 case 0x01F8: 1038 return "\u004E\u0300"; 1039 case 0x01F9: 1040 return "\u006E\u0300"; 1041 case 0x01FA: 1042 return "\u00C5\u0301"; 1043 case 0x01FB: 1044 return "\u00E5\u0301"; 1045 case 0x01FC: 1046 return "\u00C6\u0301"; 1047 case 0x01FD: 1048 return "\u00E6\u0301"; 1049 case 0x01FE: 1050 return "\u00D8\u0301"; 1051 case 0x01FF: 1052 return "\u00F8\u0301"; 1053 case 0x0200: 1054 return "\u0041\u030F"; 1055 case 0x0201: 1056 return "\u0061\u030F"; 1057 case 0x0202: 1058 return "\u0041\u0311"; 1059 case 0x0203: 1060 return "\u0061\u0311"; 1061 case 0x0204: 1062 return "\u0045\u030F"; 1063 case 0x0205: 1064 return "\u0065\u030F"; 1065 case 0x0206: 1066 return "\u0045\u0311"; 1067 case 0x0207: 1068 return "\u0065\u0311"; 1069 case 0x0208: 1070 return "\u0049\u030F"; 1071 case 0x0209: 1072 return "\u0069\u030F"; 1073 case 0x020A: 1074 return "\u0049\u0311"; 1075 case 0x020B: 1076 return "\u0069\u0311"; 1077 case 0x020C: 1078 return "\u004F\u030F"; 1079 case 0x020D: 1080 return "\u006F\u030F"; 1081 case 0x020E: 1082 return "\u004F\u0311"; 1083 case 0x020F: 1084 return "\u006F\u0311"; 1085 case 0x0210: 1086 return "\u0052\u030F"; 1087 case 0x0211: 1088 return "\u0072\u030F"; 1089 case 0x0212: 1090 return "\u0052\u0311"; 1091 case 0x0213: 1092 return "\u0072\u0311"; 1093 case 0x0214: 1094 return "\u0055\u030F"; 1095 case 0x0215: 1096 return "\u0075\u030F"; 1097 case 0x0216: 1098 return "\u0055\u0311"; 1099 case 0x0217: 1100 return "\u0075\u0311"; 1101 case 0x0218: 1102 return "\u0053\u0326"; 1103 case 0x0219: 1104 return "\u0073\u0326"; 1105 case 0x021A: 1106 return "\u0054\u0326"; 1107 case 0x021B: 1108 return "\u0074\u0326"; 1109 case 0x021E: 1110 return "\u0048\u030C"; 1111 case 0x021F: 1112 return "\u0068\u030C"; 1113 case 0x0226: 1114 return "\u0041\u0307"; 1115 case 0x0227: 1116 return "\u0061\u0307"; 1117 case 0x0228: 1118 return "\u0045\u0327"; 1119 case 0x0229: 1120 return "\u0065\u0327"; 1121 case 0x022A: 1122 return "\u00D6\u0304"; 1123 case 0x022B: 1124 return "\u00F6\u0304"; 1125 case 0x022C: 1126 return "\u00D5\u0304"; 1127 case 0x022D: 1128 return "\u00F5\u0304"; 1129 case 0x022E: 1130 return "\u004F\u0307"; 1131 case 0x022F: 1132 return "\u006F\u0307"; 1133 case 0x0230: 1134 return "\u022E\u0304"; 1135 case 0x0231: 1136 return "\u022F\u0304"; 1137 case 0x0232: 1138 return "\u0059\u0304"; 1139 case 0x0233: 1140 return "\u0079\u0304"; 1141 case 0x0340: 1142 return "\u0300"; 1143 case 0x0341: 1144 return "\u0301"; 1145 case 0x0343: 1146 return "\u0313"; 1147 case 0x0344: 1148 return "\u0308\u0301"; 1149 case 0x0374: 1150 return "\u02B9"; 1151 case 0x037E: 1152 return "\u003B"; 1153 case 0x0385: 1154 return "\u00A8\u0301"; 1155 case 0x0386: 1156 return "\u0391\u0301"; 1157 case 0x0387: 1158 return "\u00B7"; 1159 case 0x0388: 1160 return "\u0395\u0301"; 1161 case 0x0389: 1162 return "\u0397\u0301"; 1163 case 0x038A: 1164 return "\u0399\u0301"; 1165 case 0x038C: 1166 return "\u039F\u0301"; 1167 case 0x038E: 1168 return "\u03A5\u0301"; 1169 case 0x038F: 1170 return "\u03A9\u0301"; 1171 case 0x0390: 1172 return "\u03CA\u0301"; 1173 case 0x03AA: 1174 return "\u0399\u0308"; 1175 case 0x03AB: 1176 return "\u03A5\u0308"; 1177 case 0x03AC: 1178 return "\u03B1\u0301"; 1179 case 0x03AD: 1180 return "\u03B5\u0301"; 1181 case 0x03AE: 1182 return "\u03B7\u0301"; 1183 case 0x03AF: 1184 return "\u03B9\u0301"; 1185 case 0x03B0: 1186 return "\u03CB\u0301"; 1187 case 0x03CA: 1188 return "\u03B9\u0308"; 1189 case 0x03CB: 1190 return "\u03C5\u0308"; 1191 case 0x03CC: 1192 return "\u03BF\u0301"; 1193 case 0x03CD: 1194 return "\u03C5\u0301"; 1195 case 0x03CE: 1196 return "\u03C9\u0301"; 1197 case 0x03D3: 1198 return "\u03D2\u0301"; 1199 case 0x03D4: 1200 return "\u03D2\u0308"; 1201 case 0x0400: 1202 return "\u0415\u0300"; 1203 case 0x0401: 1204 return "\u0415\u0308"; 1205 case 0x0403: 1206 return "\u0413\u0301"; 1207 case 0x0407: 1208 return "\u0406\u0308"; 1209 case 0x040C: 1210 return "\u041A\u0301"; 1211 case 0x040D: 1212 return "\u0418\u0300"; 1213 case 0x040E: 1214 return "\u0423\u0306"; 1215 case 0x0419: 1216 return "\u0418\u0306"; 1217 case 0x0439: 1218 return "\u0438\u0306"; 1219 case 0x0450: 1220 return "\u0435\u0300"; 1221 case 0x0451: 1222 return "\u0435\u0308"; 1223 case 0x0453: 1224 return "\u0433\u0301"; 1225 case 0x0457: 1226 return "\u0456\u0308"; 1227 case 0x045C: 1228 return "\u043A\u0301"; 1229 case 0x045D: 1230 return "\u0438\u0300"; 1231 case 0x045E: 1232 return "\u0443\u0306"; 1233 case 0x0476: 1234 return "\u0474\u030F"; 1235 case 0x0477: 1236 return "\u0475\u030F"; 1237 case 0x04C1: 1238 return "\u0416\u0306"; 1239 case 0x04C2: 1240 return "\u0436\u0306"; 1241 case 0x04D0: 1242 return "\u0410\u0306"; 1243 case 0x04D1: 1244 return "\u0430\u0306"; 1245 case 0x04D2: 1246 return "\u0410\u0308"; 1247 case 0x04D3: 1248 return "\u0430\u0308"; 1249 case 0x04D6: 1250 return "\u0415\u0306"; 1251 case 0x04D7: 1252 return "\u0435\u0306"; 1253 case 0x04DA: 1254 return "\u04D8\u0308"; 1255 case 0x04DB: 1256 return "\u04D9\u0308"; 1257 case 0x04DC: 1258 return "\u0416\u0308"; 1259 case 0x04DD: 1260 return "\u0436\u0308"; 1261 case 0x04DE: 1262 return "\u0417\u0308"; 1263 case 0x04DF: 1264 return "\u0437\u0308"; 1265 case 0x04E2: 1266 return "\u0418\u0304"; 1267 case 0x04E3: 1268 return "\u0438\u0304"; 1269 case 0x04E4: 1270 return "\u0418\u0308"; 1271 case 0x04E5: 1272 return "\u0438\u0308"; 1273 case 0x04E6: 1274 return "\u041E\u0308"; 1275 case 0x04E7: 1276 return "\u043E\u0308"; 1277 case 0x04EA: 1278 return "\u04E8\u0308"; 1279 case 0x04EB: 1280 return "\u04E9\u0308"; 1281 case 0x04EC: 1282 return "\u042D\u0308"; 1283 case 0x04ED: 1284 return "\u044D\u0308"; 1285 case 0x04EE: 1286 return "\u0423\u0304"; 1287 case 0x04EF: 1288 return "\u0443\u0304"; 1289 case 0x04F0: 1290 return "\u0423\u0308"; 1291 case 0x04F1: 1292 return "\u0443\u0308"; 1293 case 0x04F2: 1294 return "\u0423\u030B"; 1295 case 0x04F3: 1296 return "\u0443\u030B"; 1297 case 0x04F4: 1298 return "\u0427\u0308"; 1299 case 0x04F5: 1300 return "\u0447\u0308"; 1301 case 0x04F8: 1302 return "\u042B\u0308"; 1303 case 0x04F9: 1304 return "\u044B\u0308"; 1305 case 0x0622: 1306 return "\u0627\u0653"; 1307 case 0x0623: 1308 return "\u0627\u0654"; 1309 case 0x0624: 1310 return "\u0648\u0654"; 1311 case 0x0625: 1312 return "\u0627\u0655"; 1313 case 0x0626: 1314 return "\u064A\u0654"; 1315 case 0x06C0: 1316 return "\u06D5\u0654"; 1317 case 0x06C2: 1318 return "\u06C1\u0654"; 1319 case 0x06D3: 1320 return "\u06D2\u0654"; 1321 case 0x0929: 1322 return "\u0928\u093C"; 1323 case 0x0931: 1324 return "\u0930\u093C"; 1325 case 0x0934: 1326 return "\u0933\u093C"; 1327 case 0x0958: 1328 return "\u0915\u093C"; 1329 case 0x0959: 1330 return "\u0916\u093C"; 1331 case 0x095A: 1332 return "\u0917\u093C"; 1333 case 0x095B: 1334 return "\u091C\u093C"; 1335 case 0x095C: 1336 return "\u0921\u093C"; 1337 case 0x095D: 1338 return "\u0922\u093C"; 1339 case 0x095E: 1340 return "\u092B\u093C"; 1341 case 0x095F: 1342 return "\u092F\u093C"; 1343 case 0x09CB: 1344 return "\u09C7\u09BE"; 1345 case 0x09CC: 1346 return "\u09C7\u09D7"; 1347 case 0x09DC: 1348 return "\u09A1\u09BC"; 1349 case 0x09DD: 1350 return "\u09A2\u09BC"; 1351 case 0x09DF: 1352 return "\u09AF\u09BC"; 1353 case 0x0A33: 1354 return "\u0A32\u0A3C"; 1355 case 0x0A36: 1356 return "\u0A38\u0A3C"; 1357 case 0x0A59: 1358 return "\u0A16\u0A3C"; 1359 case 0x0A5A: 1360 return "\u0A17\u0A3C"; 1361 case 0x0A5B: 1362 return "\u0A1C\u0A3C"; 1363 case 0x0A5E: 1364 return "\u0A2B\u0A3C"; 1365 case 0x0B48: 1366 return "\u0B47\u0B56"; 1367 case 0x0B4B: 1368 return "\u0B47\u0B3E"; 1369 case 0x0B4C: 1370 return "\u0B47\u0B57"; 1371 case 0x0B5C: 1372 return "\u0B21\u0B3C"; 1373 case 0x0B5D: 1374 return "\u0B22\u0B3C"; 1375 case 0x0B94: 1376 return "\u0B92\u0BD7"; 1377 case 0x0BCA: 1378 return "\u0BC6\u0BBE"; 1379 case 0x0BCB: 1380 return "\u0BC7\u0BBE"; 1381 case 0x0BCC: 1382 return "\u0BC6\u0BD7"; 1383 case 0x0C48: 1384 return "\u0C46\u0C56"; 1385 case 0x0CC0: 1386 return "\u0CBF\u0CD5"; 1387 case 0x0CC7: 1388 return "\u0CC6\u0CD5"; 1389 case 0x0CC8: 1390 return "\u0CC6\u0CD6"; 1391 case 0x0CCA: 1392 return "\u0CC6\u0CC2"; 1393 case 0x0CCB: 1394 return "\u0CCA\u0CD5"; 1395 case 0x0D4A: 1396 return "\u0D46\u0D3E"; 1397 case 0x0D4B: 1398 return "\u0D47\u0D3E"; 1399 case 0x0D4C: 1400 return "\u0D46\u0D57"; 1401 case 0x0DDA: 1402 return "\u0DD9\u0DCA"; 1403 case 0x0DDC: 1404 return "\u0DD9\u0DCF"; 1405 case 0x0DDD: 1406 return "\u0DDC\u0DCA"; 1407 case 0x0DDE: 1408 return "\u0DD9\u0DDF"; 1409 case 0x0F43: 1410 return "\u0F42\u0FB7"; 1411 case 0x0F4D: 1412 return "\u0F4C\u0FB7"; 1413 case 0x0F52: 1414 return "\u0F51\u0FB7"; 1415 case 0x0F57: 1416 return "\u0F56\u0FB7"; 1417 case 0x0F5C: 1418 return "\u0F5B\u0FB7"; 1419 case 0x0F69: 1420 return "\u0F40\u0FB5"; 1421 case 0x0F73: 1422 return "\u0F71\u0F72"; 1423 case 0x0F75: 1424 return "\u0F71\u0F74"; 1425 case 0x0F76: 1426 return "\u0FB2\u0F80"; 1427 case 0x0F78: 1428 return "\u0FB3\u0F80"; 1429 case 0x0F81: 1430 return "\u0F71\u0F80"; 1431 case 0x0F93: 1432 return "\u0F92\u0FB7"; 1433 case 0x0F9D: 1434 return "\u0F9C\u0FB7"; 1435 case 0x0FA2: 1436 return "\u0FA1\u0FB7"; 1437 case 0x0FA7: 1438 return "\u0FA6\u0FB7"; 1439 case 0x0FAC: 1440 return "\u0FAB\u0FB7"; 1441 case 0x0FB9: 1442 return "\u0F90\u0FB5"; 1443 case 0x1026: 1444 return "\u1025\u102E"; 1445 case 0x1B06: 1446 return "\u1B05\u1B35"; 1447 case 0x1B08: 1448 return "\u1B07\u1B35"; 1449 case 0x1B0A: 1450 return "\u1B09\u1B35"; 1451 case 0x1B0C: 1452 return "\u1B0B\u1B35"; 1453 case 0x1B0E: 1454 return "\u1B0D\u1B35"; 1455 case 0x1B12: 1456 return "\u1B11\u1B35"; 1457 case 0x1B3B: 1458 return "\u1B3A\u1B35"; 1459 case 0x1B3D: 1460 return "\u1B3C\u1B35"; 1461 case 0x1B40: 1462 return "\u1B3E\u1B35"; 1463 case 0x1B41: 1464 return "\u1B3F\u1B35"; 1465 case 0x1B43: 1466 return "\u1B42\u1B35"; 1467 case 0x1E00: 1468 return "\u0041\u0325"; 1469 case 0x1E01: 1470 return "\u0061\u0325"; 1471 case 0x1E02: 1472 return "\u0042\u0307"; 1473 case 0x1E03: 1474 return "\u0062\u0307"; 1475 case 0x1E04: 1476 return "\u0042\u0323"; 1477 case 0x1E05: 1478 return "\u0062\u0323"; 1479 case 0x1E06: 1480 return "\u0042\u0331"; 1481 case 0x1E07: 1482 return "\u0062\u0331"; 1483 case 0x1E08: 1484 return "\u00C7\u0301"; 1485 case 0x1E09: 1486 return "\u00E7\u0301"; 1487 case 0x1E0A: 1488 return "\u0044\u0307"; 1489 case 0x1E0B: 1490 return "\u0064\u0307"; 1491 case 0x1E0C: 1492 return "\u0044\u0323"; 1493 case 0x1E0D: 1494 return "\u0064\u0323"; 1495 case 0x1E0E: 1496 return "\u0044\u0331"; 1497 case 0x1E0F: 1498 return "\u0064\u0331"; 1499 case 0x1E10: 1500 return "\u0044\u0327"; 1501 case 0x1E11: 1502 return "\u0064\u0327"; 1503 case 0x1E12: 1504 return "\u0044\u032D"; 1505 case 0x1E13: 1506 return "\u0064\u032D"; 1507 case 0x1E14: 1508 return "\u0112\u0300"; 1509 case 0x1E15: 1510 return "\u0113\u0300"; 1511 case 0x1E16: 1512 return "\u0112\u0301"; 1513 case 0x1E17: 1514 return "\u0113\u0301"; 1515 case 0x1E18: 1516 return "\u0045\u032D"; 1517 case 0x1E19: 1518 return "\u0065\u032D"; 1519 case 0x1E1A: 1520 return "\u0045\u0330"; 1521 case 0x1E1B: 1522 return "\u0065\u0330"; 1523 case 0x1E1C: 1524 return "\u0228\u0306"; 1525 case 0x1E1D: 1526 return "\u0229\u0306"; 1527 case 0x1E1E: 1528 return "\u0046\u0307"; 1529 case 0x1E1F: 1530 return "\u0066\u0307"; 1531 case 0x1E20: 1532 return "\u0047\u0304"; 1533 case 0x1E21: 1534 return "\u0067\u0304"; 1535 case 0x1E22: 1536 return "\u0048\u0307"; 1537 case 0x1E23: 1538 return "\u0068\u0307"; 1539 case 0x1E24: 1540 return "\u0048\u0323"; 1541 case 0x1E25: 1542 return "\u0068\u0323"; 1543 case 0x1E26: 1544 return "\u0048\u0308"; 1545 case 0x1E27: 1546 return "\u0068\u0308"; 1547 case 0x1E28: 1548 return "\u0048\u0327"; 1549 case 0x1E29: 1550 return "\u0068\u0327"; 1551 case 0x1E2A: 1552 return "\u0048\u032E"; 1553 case 0x1E2B: 1554 return "\u0068\u032E"; 1555 case 0x1E2C: 1556 return "\u0049\u0330"; 1557 case 0x1E2D: 1558 return "\u0069\u0330"; 1559 case 0x1E2E: 1560 return "\u00CF\u0301"; 1561 case 0x1E2F: 1562 return "\u00EF\u0301"; 1563 case 0x1E30: 1564 return "\u004B\u0301"; 1565 case 0x1E31: 1566 return "\u006B\u0301"; 1567 case 0x1E32: 1568 return "\u004B\u0323"; 1569 case 0x1E33: 1570 return "\u006B\u0323"; 1571 case 0x1E34: 1572 return "\u004B\u0331"; 1573 case 0x1E35: 1574 return "\u006B\u0331"; 1575 case 0x1E36: 1576 return "\u004C\u0323"; 1577 case 0x1E37: 1578 return "\u006C\u0323"; 1579 case 0x1E38: 1580 return "\u1E36\u0304"; 1581 case 0x1E39: 1582 return "\u1E37\u0304"; 1583 case 0x1E3A: 1584 return "\u004C\u0331"; 1585 case 0x1E3B: 1586 return "\u006C\u0331"; 1587 case 0x1E3C: 1588 return "\u004C\u032D"; 1589 case 0x1E3D: 1590 return "\u006C\u032D"; 1591 case 0x1E3E: 1592 return "\u004D\u0301"; 1593 case 0x1E3F: 1594 return "\u006D\u0301"; 1595 case 0x1E40: 1596 return "\u004D\u0307"; 1597 case 0x1E41: 1598 return "\u006D\u0307"; 1599 case 0x1E42: 1600 return "\u004D\u0323"; 1601 case 0x1E43: 1602 return "\u006D\u0323"; 1603 case 0x1E44: 1604 return "\u004E\u0307"; 1605 case 0x1E45: 1606 return "\u006E\u0307"; 1607 case 0x1E46: 1608 return "\u004E\u0323"; 1609 case 0x1E47: 1610 return "\u006E\u0323"; 1611 case 0x1E48: 1612 return "\u004E\u0331"; 1613 case 0x1E49: 1614 return "\u006E\u0331"; 1615 case 0x1E4A: 1616 return "\u004E\u032D"; 1617 case 0x1E4B: 1618 return "\u006E\u032D"; 1619 case 0x1E4C: 1620 return "\u00D5\u0301"; 1621 case 0x1E4D: 1622 return "\u00F5\u0301"; 1623 case 0x1E4E: 1624 return "\u00D5\u0308"; 1625 case 0x1E4F: 1626 return "\u00F5\u0308"; 1627 case 0x1E50: 1628 return "\u014C\u0300"; 1629 case 0x1E51: 1630 return "\u014D\u0300"; 1631 case 0x1E52: 1632 return "\u014C\u0301"; 1633 case 0x1E53: 1634 return "\u014D\u0301"; 1635 case 0x1E54: 1636 return "\u0050\u0301"; 1637 case 0x1E55: 1638 return "\u0070\u0301"; 1639 case 0x1E56: 1640 return "\u0050\u0307"; 1641 case 0x1E57: 1642 return "\u0070\u0307"; 1643 case 0x1E58: 1644 return "\u0052\u0307"; 1645 case 0x1E59: 1646 return "\u0072\u0307"; 1647 case 0x1E5A: 1648 return "\u0052\u0323"; 1649 case 0x1E5B: 1650 return "\u0072\u0323"; 1651 case 0x1E5C: 1652 return "\u1E5A\u0304"; 1653 case 0x1E5D: 1654 return "\u1E5B\u0304"; 1655 case 0x1E5E: 1656 return "\u0052\u0331"; 1657 case 0x1E5F: 1658 return "\u0072\u0331"; 1659 case 0x1E60: 1660 return "\u0053\u0307"; 1661 case 0x1E61: 1662 return "\u0073\u0307"; 1663 case 0x1E62: 1664 return "\u0053\u0323"; 1665 case 0x1E63: 1666 return "\u0073\u0323"; 1667 case 0x1E64: 1668 return "\u015A\u0307"; 1669 case 0x1E65: 1670 return "\u015B\u0307"; 1671 case 0x1E66: 1672 return "\u0160\u0307"; 1673 case 0x1E67: 1674 return "\u0161\u0307"; 1675 case 0x1E68: 1676 return "\u1E62\u0307"; 1677 case 0x1E69: 1678 return "\u1E63\u0307"; 1679 case 0x1E6A: 1680 return "\u0054\u0307"; 1681 case 0x1E6B: 1682 return "\u0074\u0307"; 1683 case 0x1E6C: 1684 return "\u0054\u0323"; 1685 case 0x1E6D: 1686 return "\u0074\u0323"; 1687 case 0x1E6E: 1688 return "\u0054\u0331"; 1689 case 0x1E6F: 1690 return "\u0074\u0331"; 1691 case 0x1E70: 1692 return "\u0054\u032D"; 1693 case 0x1E71: 1694 return "\u0074\u032D"; 1695 case 0x1E72: 1696 return "\u0055\u0324"; 1697 case 0x1E73: 1698 return "\u0075\u0324"; 1699 case 0x1E74: 1700 return "\u0055\u0330"; 1701 case 0x1E75: 1702 return "\u0075\u0330"; 1703 case 0x1E76: 1704 return "\u0055\u032D"; 1705 case 0x1E77: 1706 return "\u0075\u032D"; 1707 case 0x1E78: 1708 return "\u0168\u0301"; 1709 case 0x1E79: 1710 return "\u0169\u0301"; 1711 case 0x1E7A: 1712 return "\u016A\u0308"; 1713 case 0x1E7B: 1714 return "\u016B\u0308"; 1715 case 0x1E7C: 1716 return "\u0056\u0303"; 1717 case 0x1E7D: 1718 return "\u0076\u0303"; 1719 case 0x1E7E: 1720 return "\u0056\u0323"; 1721 case 0x1E7F: 1722 return "\u0076\u0323"; 1723 case 0x1E80: 1724 return "\u0057\u0300"; 1725 case 0x1E81: 1726 return "\u0077\u0300"; 1727 case 0x1E82: 1728 return "\u0057\u0301"; 1729 case 0x1E83: 1730 return "\u0077\u0301"; 1731 case 0x1E84: 1732 return "\u0057\u0308"; 1733 case 0x1E85: 1734 return "\u0077\u0308"; 1735 case 0x1E86: 1736 return "\u0057\u0307"; 1737 case 0x1E87: 1738 return "\u0077\u0307"; 1739 case 0x1E88: 1740 return "\u0057\u0323"; 1741 case 0x1E89: 1742 return "\u0077\u0323"; 1743 case 0x1E8A: 1744 return "\u0058\u0307"; 1745 case 0x1E8B: 1746 return "\u0078\u0307"; 1747 case 0x1E8C: 1748 return "\u0058\u0308"; 1749 case 0x1E8D: 1750 return "\u0078\u0308"; 1751 case 0x1E8E: 1752 return "\u0059\u0307"; 1753 case 0x1E8F: 1754 return "\u0079\u0307"; 1755 case 0x1E90: 1756 return "\u005A\u0302"; 1757 case 0x1E91: 1758 return "\u007A\u0302"; 1759 case 0x1E92: 1760 return "\u005A\u0323"; 1761 case 0x1E93: 1762 return "\u007A\u0323"; 1763 case 0x1E94: 1764 return "\u005A\u0331"; 1765 case 0x1E95: 1766 return "\u007A\u0331"; 1767 case 0x1E96: 1768 return "\u0068\u0331"; 1769 case 0x1E97: 1770 return "\u0074\u0308"; 1771 case 0x1E98: 1772 return "\u0077\u030A"; 1773 case 0x1E99: 1774 return "\u0079\u030A"; 1775 case 0x1E9B: 1776 return "\u017F\u0307"; 1777 case 0x1EA0: 1778 return "\u0041\u0323"; 1779 case 0x1EA1: 1780 return "\u0061\u0323"; 1781 case 0x1EA2: 1782 return "\u0041\u0309"; 1783 case 0x1EA3: 1784 return "\u0061\u0309"; 1785 case 0x1EA4: 1786 return "\u00C2\u0301"; 1787 case 0x1EA5: 1788 return "\u00E2\u0301"; 1789 case 0x1EA6: 1790 return "\u00C2\u0300"; 1791 case 0x1EA7: 1792 return "\u00E2\u0300"; 1793 case 0x1EA8: 1794 return "\u00C2\u0309"; 1795 case 0x1EA9: 1796 return "\u00E2\u0309"; 1797 case 0x1EAA: 1798 return "\u00C2\u0303"; 1799 case 0x1EAB: 1800 return "\u00E2\u0303"; 1801 case 0x1EAC: 1802 return "\u1EA0\u0302"; 1803 case 0x1EAD: 1804 return "\u1EA1\u0302"; 1805 case 0x1EAE: 1806 return "\u0102\u0301"; 1807 case 0x1EAF: 1808 return "\u0103\u0301"; 1809 case 0x1EB0: 1810 return "\u0102\u0300"; 1811 case 0x1EB1: 1812 return "\u0103\u0300"; 1813 case 0x1EB2: 1814 return "\u0102\u0309"; 1815 case 0x1EB3: 1816 return "\u0103\u0309"; 1817 case 0x1EB4: 1818 return "\u0102\u0303"; 1819 case 0x1EB5: 1820 return "\u0103\u0303"; 1821 case 0x1EB6: 1822 return "\u1EA0\u0306"; 1823 case 0x1EB7: 1824 return "\u1EA1\u0306"; 1825 case 0x1EB8: 1826 return "\u0045\u0323"; 1827 case 0x1EB9: 1828 return "\u0065\u0323"; 1829 case 0x1EBA: 1830 return "\u0045\u0309"; 1831 case 0x1EBB: 1832 return "\u0065\u0309"; 1833 case 0x1EBC: 1834 return "\u0045\u0303"; 1835 case 0x1EBD: 1836 return "\u0065\u0303"; 1837 case 0x1EBE: 1838 return "\u00CA\u0301"; 1839 case 0x1EBF: 1840 return "\u00EA\u0301"; 1841 case 0x1EC0: 1842 return "\u00CA\u0300"; 1843 case 0x1EC1: 1844 return "\u00EA\u0300"; 1845 case 0x1EC2: 1846 return "\u00CA\u0309"; 1847 case 0x1EC3: 1848 return "\u00EA\u0309"; 1849 case 0x1EC4: 1850 return "\u00CA\u0303"; 1851 case 0x1EC5: 1852 return "\u00EA\u0303"; 1853 case 0x1EC6: 1854 return "\u1EB8\u0302"; 1855 case 0x1EC7: 1856 return "\u1EB9\u0302"; 1857 case 0x1EC8: 1858 return "\u0049\u0309"; 1859 case 0x1EC9: 1860 return "\u0069\u0309"; 1861 case 0x1ECA: 1862 return "\u0049\u0323"; 1863 case 0x1ECB: 1864 return "\u0069\u0323"; 1865 case 0x1ECC: 1866 return "\u004F\u0323"; 1867 case 0x1ECD: 1868 return "\u006F\u0323"; 1869 case 0x1ECE: 1870 return "\u004F\u0309"; 1871 case 0x1ECF: 1872 return "\u006F\u0309"; 1873 case 0x1ED0: 1874 return "\u00D4\u0301"; 1875 case 0x1ED1: 1876 return "\u00F4\u0301"; 1877 case 0x1ED2: 1878 return "\u00D4\u0300"; 1879 case 0x1ED3: 1880 return "\u00F4\u0300"; 1881 case 0x1ED4: 1882 return "\u00D4\u0309"; 1883 case 0x1ED5: 1884 return "\u00F4\u0309"; 1885 case 0x1ED6: 1886 return "\u00D4\u0303"; 1887 case 0x1ED7: 1888 return "\u00F4\u0303"; 1889 case 0x1ED8: 1890 return "\u1ECC\u0302"; 1891 case 0x1ED9: 1892 return "\u1ECD\u0302"; 1893 case 0x1EDA: 1894 return "\u01A0\u0301"; 1895 case 0x1EDB: 1896 return "\u01A1\u0301"; 1897 case 0x1EDC: 1898 return "\u01A0\u0300"; 1899 case 0x1EDD: 1900 return "\u01A1\u0300"; 1901 case 0x1EDE: 1902 return "\u01A0\u0309"; 1903 case 0x1EDF: 1904 return "\u01A1\u0309"; 1905 case 0x1EE0: 1906 return "\u01A0\u0303"; 1907 case 0x1EE1: 1908 return "\u01A1\u0303"; 1909 case 0x1EE2: 1910 return "\u01A0\u0323"; 1911 case 0x1EE3: 1912 return "\u01A1\u0323"; 1913 case 0x1EE4: 1914 return "\u0055\u0323"; 1915 case 0x1EE5: 1916 return "\u0075\u0323"; 1917 case 0x1EE6: 1918 return "\u0055\u0309"; 1919 case 0x1EE7: 1920 return "\u0075\u0309"; 1921 case 0x1EE8: 1922 return "\u01AF\u0301"; 1923 case 0x1EE9: 1924 return "\u01B0\u0301"; 1925 case 0x1EEA: 1926 return "\u01AF\u0300"; 1927 case 0x1EEB: 1928 return "\u01B0\u0300"; 1929 case 0x1EEC: 1930 return "\u01AF\u0309"; 1931 case 0x1EED: 1932 return "\u01B0\u0309"; 1933 case 0x1EEE: 1934 return "\u01AF\u0303"; 1935 case 0x1EEF: 1936 return "\u01B0\u0303"; 1937 case 0x1EF0: 1938 return "\u01AF\u0323"; 1939 case 0x1EF1: 1940 return "\u01B0\u0323"; 1941 case 0x1EF2: 1942 return "\u0059\u0300"; 1943 case 0x1EF3: 1944 return "\u0079\u0300"; 1945 case 0x1EF4: 1946 return "\u0059\u0323"; 1947 case 0x1EF5: 1948 return "\u0079\u0323"; 1949 case 0x1EF6: 1950 return "\u0059\u0309"; 1951 case 0x1EF7: 1952 return "\u0079\u0309"; 1953 case 0x1EF8: 1954 return "\u0059\u0303"; 1955 case 0x1EF9: 1956 return "\u0079\u0303"; 1957 case 0x1F00: 1958 return "\u03B1\u0313"; 1959 case 0x1F01: 1960 return "\u03B1\u0314"; 1961 case 0x1F02: 1962 return "\u1F00\u0300"; 1963 case 0x1F03: 1964 return "\u1F01\u0300"; 1965 case 0x1F04: 1966 return "\u1F00\u0301"; 1967 case 0x1F05: 1968 return "\u1F01\u0301"; 1969 case 0x1F06: 1970 return "\u1F00\u0342"; 1971 case 0x1F07: 1972 return "\u1F01\u0342"; 1973 case 0x1F08: 1974 return "\u0391\u0313"; 1975 case 0x1F09: 1976 return "\u0391\u0314"; 1977 case 0x1F0A: 1978 return "\u1F08\u0300"; 1979 case 0x1F0B: 1980 return "\u1F09\u0300"; 1981 case 0x1F0C: 1982 return "\u1F08\u0301"; 1983 case 0x1F0D: 1984 return "\u1F09\u0301"; 1985 case 0x1F0E: 1986 return "\u1F08\u0342"; 1987 case 0x1F0F: 1988 return "\u1F09\u0342"; 1989 case 0x1F10: 1990 return "\u03B5\u0313"; 1991 case 0x1F11: 1992 return "\u03B5\u0314"; 1993 case 0x1F12: 1994 return "\u1F10\u0300"; 1995 case 0x1F13: 1996 return "\u1F11\u0300"; 1997 case 0x1F14: 1998 return "\u1F10\u0301"; 1999 case 0x1F15: 2000 return "\u1F11\u0301"; 2001 case 0x1F18: 2002 return "\u0395\u0313"; 2003 case 0x1F19: 2004 return "\u0395\u0314"; 2005 case 0x1F1A: 2006 return "\u1F18\u0300"; 2007 case 0x1F1B: 2008 return "\u1F19\u0300"; 2009 case 0x1F1C: 2010 return "\u1F18\u0301"; 2011 case 0x1F1D: 2012 return "\u1F19\u0301"; 2013 case 0x1F20: 2014 return "\u03B7\u0313"; 2015 case 0x1F21: 2016 return "\u03B7\u0314"; 2017 case 0x1F22: 2018 return "\u1F20\u0300"; 2019 case 0x1F23: 2020 return "\u1F21\u0300"; 2021 case 0x1F24: 2022 return "\u1F20\u0301"; 2023 case 0x1F25: 2024 return "\u1F21\u0301"; 2025 case 0x1F26: 2026 return "\u1F20\u0342"; 2027 case 0x1F27: 2028 return "\u1F21\u0342"; 2029 case 0x1F28: 2030 return "\u0397\u0313"; 2031 case 0x1F29: 2032 return "\u0397\u0314"; 2033 case 0x1F2A: 2034 return "\u1F28\u0300"; 2035 case 0x1F2B: 2036 return "\u1F29\u0300"; 2037 case 0x1F2C: 2038 return "\u1F28\u0301"; 2039 case 0x1F2D: 2040 return "\u1F29\u0301"; 2041 case 0x1F2E: 2042 return "\u1F28\u0342"; 2043 case 0x1F2F: 2044 return "\u1F29\u0342"; 2045 case 0x1F30: 2046 return "\u03B9\u0313"; 2047 case 0x1F31: 2048 return "\u03B9\u0314"; 2049 case 0x1F32: 2050 return "\u1F30\u0300"; 2051 case 0x1F33: 2052 return "\u1F31\u0300"; 2053 case 0x1F34: 2054 return "\u1F30\u0301"; 2055 case 0x1F35: 2056 return "\u1F31\u0301"; 2057 case 0x1F36: 2058 return "\u1F30\u0342"; 2059 case 0x1F37: 2060 return "\u1F31\u0342"; 2061 case 0x1F38: 2062 return "\u0399\u0313"; 2063 case 0x1F39: 2064 return "\u0399\u0314"; 2065 case 0x1F3A: 2066 return "\u1F38\u0300"; 2067 case 0x1F3B: 2068 return "\u1F39\u0300"; 2069 case 0x1F3C: 2070 return "\u1F38\u0301"; 2071 case 0x1F3D: 2072 return "\u1F39\u0301"; 2073 case 0x1F3E: 2074 return "\u1F38\u0342"; 2075 case 0x1F3F: 2076 return "\u1F39\u0342"; 2077 case 0x1F40: 2078 return "\u03BF\u0313"; 2079 case 0x1F41: 2080 return "\u03BF\u0314"; 2081 case 0x1F42: 2082 return "\u1F40\u0300"; 2083 case 0x1F43: 2084 return "\u1F41\u0300"; 2085 case 0x1F44: 2086 return "\u1F40\u0301"; 2087 case 0x1F45: 2088 return "\u1F41\u0301"; 2089 case 0x1F48: 2090 return "\u039F\u0313"; 2091 case 0x1F49: 2092 return "\u039F\u0314"; 2093 case 0x1F4A: 2094 return "\u1F48\u0300"; 2095 case 0x1F4B: 2096 return "\u1F49\u0300"; 2097 case 0x1F4C: 2098 return "\u1F48\u0301"; 2099 case 0x1F4D: 2100 return "\u1F49\u0301"; 2101 case 0x1F50: 2102 return "\u03C5\u0313"; 2103 case 0x1F51: 2104 return "\u03C5\u0314"; 2105 case 0x1F52: 2106 return "\u1F50\u0300"; 2107 case 0x1F53: 2108 return "\u1F51\u0300"; 2109 case 0x1F54: 2110 return "\u1F50\u0301"; 2111 case 0x1F55: 2112 return "\u1F51\u0301"; 2113 case 0x1F56: 2114 return "\u1F50\u0342"; 2115 case 0x1F57: 2116 return "\u1F51\u0342"; 2117 case 0x1F59: 2118 return "\u03A5\u0314"; 2119 case 0x1F5B: 2120 return "\u1F59\u0300"; 2121 case 0x1F5D: 2122 return "\u1F59\u0301"; 2123 case 0x1F5F: 2124 return "\u1F59\u0342"; 2125 case 0x1F60: 2126 return "\u03C9\u0313"; 2127 case 0x1F61: 2128 return "\u03C9\u0314"; 2129 case 0x1F62: 2130 return "\u1F60\u0300"; 2131 case 0x1F63: 2132 return "\u1F61\u0300"; 2133 case 0x1F64: 2134 return "\u1F60\u0301"; 2135 case 0x1F65: 2136 return "\u1F61\u0301"; 2137 case 0x1F66: 2138 return "\u1F60\u0342"; 2139 case 0x1F67: 2140 return "\u1F61\u0342"; 2141 case 0x1F68: 2142 return "\u03A9\u0313"; 2143 case 0x1F69: 2144 return "\u03A9\u0314"; 2145 case 0x1F6A: 2146 return "\u1F68\u0300"; 2147 case 0x1F6B: 2148 return "\u1F69\u0300"; 2149 case 0x1F6C: 2150 return "\u1F68\u0301"; 2151 case 0x1F6D: 2152 return "\u1F69\u0301"; 2153 case 0x1F6E: 2154 return "\u1F68\u0342"; 2155 case 0x1F6F: 2156 return "\u1F69\u0342"; 2157 case 0x1F70: 2158 return "\u03B1\u0300"; 2159 case 0x1F71: 2160 return "\u03AC"; 2161 case 0x1F72: 2162 return "\u03B5\u0300"; 2163 case 0x1F73: 2164 return "\u03AD"; 2165 case 0x1F74: 2166 return "\u03B7\u0300"; 2167 case 0x1F75: 2168 return "\u03AE"; 2169 case 0x1F76: 2170 return "\u03B9\u0300"; 2171 case 0x1F77: 2172 return "\u03AF"; 2173 case 0x1F78: 2174 return "\u03BF\u0300"; 2175 case 0x1F79: 2176 return "\u03CC"; 2177 case 0x1F7A: 2178 return "\u03C5\u0300"; 2179 case 0x1F7B: 2180 return "\u03CD"; 2181 case 0x1F7C: 2182 return "\u03C9\u0300"; 2183 case 0x1F7D: 2184 return "\u03CE"; 2185 case 0x1F80: 2186 return "\u1F00\u0345"; 2187 case 0x1F81: 2188 return "\u1F01\u0345"; 2189 case 0x1F82: 2190 return "\u1F02\u0345"; 2191 case 0x1F83: 2192 return "\u1F03\u0345"; 2193 case 0x1F84: 2194 return "\u1F04\u0345"; 2195 case 0x1F85: 2196 return "\u1F05\u0345"; 2197 case 0x1F86: 2198 return "\u1F06\u0345"; 2199 case 0x1F87: 2200 return "\u1F07\u0345"; 2201 case 0x1F88: 2202 return "\u1F08\u0345"; 2203 case 0x1F89: 2204 return "\u1F09\u0345"; 2205 case 0x1F8A: 2206 return "\u1F0A\u0345"; 2207 case 0x1F8B: 2208 return "\u1F0B\u0345"; 2209 case 0x1F8C: 2210 return "\u1F0C\u0345"; 2211 case 0x1F8D: 2212 return "\u1F0D\u0345"; 2213 case 0x1F8E: 2214 return "\u1F0E\u0345"; 2215 case 0x1F8F: 2216 return "\u1F0F\u0345"; 2217 case 0x1F90: 2218 return "\u1F20\u0345"; 2219 case 0x1F91: 2220 return "\u1F21\u0345"; 2221 case 0x1F92: 2222 return "\u1F22\u0345"; 2223 case 0x1F93: 2224 return "\u1F23\u0345"; 2225 case 0x1F94: 2226 return "\u1F24\u0345"; 2227 case 0x1F95: 2228 return "\u1F25\u0345"; 2229 case 0x1F96: 2230 return "\u1F26\u0345"; 2231 case 0x1F97: 2232 return "\u1F27\u0345"; 2233 case 0x1F98: 2234 return "\u1F28\u0345"; 2235 case 0x1F99: 2236 return "\u1F29\u0345"; 2237 case 0x1F9A: 2238 return "\u1F2A\u0345"; 2239 case 0x1F9B: 2240 return "\u1F2B\u0345"; 2241 case 0x1F9C: 2242 return "\u1F2C\u0345"; 2243 case 0x1F9D: 2244 return "\u1F2D\u0345"; 2245 case 0x1F9E: 2246 return "\u1F2E\u0345"; 2247 case 0x1F9F: 2248 return "\u1F2F\u0345"; 2249 case 0x1FA0: 2250 return "\u1F60\u0345"; 2251 case 0x1FA1: 2252 return "\u1F61\u0345"; 2253 case 0x1FA2: 2254 return "\u1F62\u0345"; 2255 case 0x1FA3: 2256 return "\u1F63\u0345"; 2257 case 0x1FA4: 2258 return "\u1F64\u0345"; 2259 case 0x1FA5: 2260 return "\u1F65\u0345"; 2261 case 0x1FA6: 2262 return "\u1F66\u0345"; 2263 case 0x1FA7: 2264 return "\u1F67\u0345"; 2265 case 0x1FA8: 2266 return "\u1F68\u0345"; 2267 case 0x1FA9: 2268 return "\u1F69\u0345"; 2269 case 0x1FAA: 2270 return "\u1F6A\u0345"; 2271 case 0x1FAB: 2272 return "\u1F6B\u0345"; 2273 case 0x1FAC: 2274 return "\u1F6C\u0345"; 2275 case 0x1FAD: 2276 return "\u1F6D\u0345"; 2277 case 0x1FAE: 2278 return "\u1F6E\u0345"; 2279 case 0x1FAF: 2280 return "\u1F6F\u0345"; 2281 case 0x1FB0: 2282 return "\u03B1\u0306"; 2283 case 0x1FB1: 2284 return "\u03B1\u0304"; 2285 case 0x1FB2: 2286 return "\u1F70\u0345"; 2287 case 0x1FB3: 2288 return "\u03B1\u0345"; 2289 case 0x1FB4: 2290 return "\u03AC\u0345"; 2291 case 0x1FB6: 2292 return "\u03B1\u0342"; 2293 case 0x1FB7: 2294 return "\u1FB6\u0345"; 2295 case 0x1FB8: 2296 return "\u0391\u0306"; 2297 case 0x1FB9: 2298 return "\u0391\u0304"; 2299 case 0x1FBA: 2300 return "\u0391\u0300"; 2301 case 0x1FBB: 2302 return "\u0386"; 2303 case 0x1FBC: 2304 return "\u0391\u0345"; 2305 case 0x1FBE: 2306 return "\u03B9"; 2307 case 0x1FC1: 2308 return "\u00A8\u0342"; 2309 case 0x1FC2: 2310 return "\u1F74\u0345"; 2311 case 0x1FC3: 2312 return "\u03B7\u0345"; 2313 case 0x1FC4: 2314 return "\u03AE\u0345"; 2315 case 0x1FC6: 2316 return "\u03B7\u0342"; 2317 case 0x1FC7: 2318 return "\u1FC6\u0345"; 2319 case 0x1FC8: 2320 return "\u0395\u0300"; 2321 case 0x1FC9: 2322 return "\u0388"; 2323 case 0x1FCA: 2324 return "\u0397\u0300"; 2325 case 0x1FCB: 2326 return "\u0389"; 2327 case 0x1FCC: 2328 return "\u0397\u0345"; 2329 case 0x1FCD: 2330 return "\u1FBF\u0300"; 2331 case 0x1FCE: 2332 return "\u1FBF\u0301"; 2333 case 0x1FCF: 2334 return "\u1FBF\u0342"; 2335 case 0x1FD0: 2336 return "\u03B9\u0306"; 2337 case 0x1FD1: 2338 return "\u03B9\u0304"; 2339 case 0x1FD2: 2340 return "\u03CA\u0300"; 2341 case 0x1FD3: 2342 return "\u0390"; 2343 case 0x1FD6: 2344 return "\u03B9\u0342"; 2345 case 0x1FD7: 2346 return "\u03CA\u0342"; 2347 case 0x1FD8: 2348 return "\u0399\u0306"; 2349 case 0x1FD9: 2350 return "\u0399\u0304"; 2351 case 0x1FDA: 2352 return "\u0399\u0300"; 2353 case 0x1FDB: 2354 return "\u038A"; 2355 case 0x1FDD: 2356 return "\u1FFE\u0300"; 2357 case 0x1FDE: 2358 return "\u1FFE\u0301"; 2359 case 0x1FDF: 2360 return "\u1FFE\u0342"; 2361 case 0x1FE0: 2362 return "\u03C5\u0306"; 2363 case 0x1FE1: 2364 return "\u03C5\u0304"; 2365 case 0x1FE2: 2366 return "\u03CB\u0300"; 2367 case 0x1FE3: 2368 return "\u03B0"; 2369 case 0x1FE4: 2370 return "\u03C1\u0313"; 2371 case 0x1FE5: 2372 return "\u03C1\u0314"; 2373 case 0x1FE6: 2374 return "\u03C5\u0342"; 2375 case 0x1FE7: 2376 return "\u03CB\u0342"; 2377 case 0x1FE8: 2378 return "\u03A5\u0306"; 2379 case 0x1FE9: 2380 return "\u03A5\u0304"; 2381 case 0x1FEA: 2382 return "\u03A5\u0300"; 2383 case 0x1FEB: 2384 return "\u038E"; 2385 case 0x1FEC: 2386 return "\u03A1\u0314"; 2387 case 0x1FED: 2388 return "\u00A8\u0300"; 2389 case 0x1FEE: 2390 return "\u0385"; 2391 case 0x1FEF: 2392 return "\u0060"; 2393 case 0x1FF2: 2394 return "\u1F7C\u0345"; 2395 case 0x1FF3: 2396 return "\u03C9\u0345"; 2397 case 0x1FF4: 2398 return "\u03CE\u0345"; 2399 case 0x1FF6: 2400 return "\u03C9\u0342"; 2401 case 0x1FF7: 2402 return "\u1FF6\u0345"; 2403 case 0x1FF8: 2404 return "\u039F\u0300"; 2405 case 0x1FF9: 2406 return "\u038C"; 2407 case 0x1FFA: 2408 return "\u03A9\u0300"; 2409 case 0x1FFB: 2410 return "\u038F"; 2411 case 0x1FFC: 2412 return "\u03A9\u0345"; 2413 case 0x1FFD: 2414 return "\u00B4"; 2415 case 0x2000: 2416 return "\u2002"; 2417 case 0x2001: 2418 return "\u2003"; 2419 case 0x2126: 2420 return "\u03A9"; 2421 case 0x212A: 2422 return "\u004B"; 2423 case 0x212B: 2424 return "\u00C5"; 2425 case 0x219A: 2426 return "\u2190\u0338"; 2427 case 0x219B: 2428 return "\u2192\u0338"; 2429 case 0x21AE: 2430 return "\u2194\u0338"; 2431 case 0x21CD: 2432 return "\u21D0\u0338"; 2433 case 0x21CE: 2434 return "\u21D4\u0338"; 2435 case 0x21CF: 2436 return "\u21D2\u0338"; 2437 case 0x2204: 2438 return "\u2203\u0338"; 2439 case 0x2209: 2440 return "\u2208\u0338"; 2441 case 0x220C: 2442 return "\u220B\u0338"; 2443 case 0x2224: 2444 return "\u2223\u0338"; 2445 case 0x2226: 2446 return "\u2225\u0338"; 2447 case 0x2241: 2448 return "\u223C\u0338"; 2449 case 0x2244: 2450 return "\u2243\u0338"; 2451 case 0x2247: 2452 return "\u2245\u0338"; 2453 case 0x2249: 2454 return "\u2248\u0338"; 2455 case 0x2260: 2456 return "\u003D\u0338"; 2457 case 0x2262: 2458 return "\u2261\u0338"; 2459 case 0x226D: 2460 return "\u224D\u0338"; 2461 case 0x226E: 2462 return "\u003C\u0338"; 2463 case 0x226F: 2464 return "\u003E\u0338"; 2465 case 0x2270: 2466 return "\u2264\u0338"; 2467 case 0x2271: 2468 return "\u2265\u0338"; 2469 case 0x2274: 2470 return "\u2272\u0338"; 2471 case 0x2275: 2472 return "\u2273\u0338"; 2473 case 0x2278: 2474 return "\u2276\u0338"; 2475 case 0x2279: 2476 return "\u2277\u0338"; 2477 case 0x2280: 2478 return "\u227A\u0338"; 2479 case 0x2281: 2480 return "\u227B\u0338"; 2481 case 0x2284: 2482 return "\u2282\u0338"; 2483 case 0x2285: 2484 return "\u2283\u0338"; 2485 case 0x2288: 2486 return "\u2286\u0338"; 2487 case 0x2289: 2488 return "\u2287\u0338"; 2489 case 0x22AC: 2490 return "\u22A2\u0338"; 2491 case 0x22AD: 2492 return "\u22A8\u0338"; 2493 case 0x22AE: 2494 return "\u22A9\u0338"; 2495 case 0x22AF: 2496 return "\u22AB\u0338"; 2497 case 0x22E0: 2498 return "\u227C\u0338"; 2499 case 0x22E1: 2500 return "\u227D\u0338"; 2501 case 0x22E2: 2502 return "\u2291\u0338"; 2503 case 0x22E3: 2504 return "\u2292\u0338"; 2505 case 0x22EA: 2506 return "\u22B2\u0338"; 2507 case 0x22EB: 2508 return "\u22B3\u0338"; 2509 case 0x22EC: 2510 return "\u22B4\u0338"; 2511 case 0x22ED: 2512 return "\u22B5\u0338"; 2513 case 0x2329: 2514 return "\u3008"; 2515 case 0x232A: 2516 return "\u3009"; 2517 case 0x2ADC: 2518 return "\u2ADD\u0338"; 2519 case 0x304C: 2520 return "\u304B\u3099"; 2521 case 0x304E: 2522 return "\u304D\u3099"; 2523 case 0x3050: 2524 return "\u304F\u3099"; 2525 case 0x3052: 2526 return "\u3051\u3099"; 2527 case 0x3054: 2528 return "\u3053\u3099"; 2529 case 0x3056: 2530 return "\u3055\u3099"; 2531 case 0x3058: 2532 return "\u3057\u3099"; 2533 case 0x305A: 2534 return "\u3059\u3099"; 2535 case 0x305C: 2536 return "\u305B\u3099"; 2537 case 0x305E: 2538 return "\u305D\u3099"; 2539 case 0x3060: 2540 return "\u305F\u3099"; 2541 case 0x3062: 2542 return "\u3061\u3099"; 2543 case 0x3065: 2544 return "\u3064\u3099"; 2545 case 0x3067: 2546 return "\u3066\u3099"; 2547 case 0x3069: 2548 return "\u3068\u3099"; 2549 case 0x3070: 2550 return "\u306F\u3099"; 2551 case 0x3071: 2552 return "\u306F\u309A"; 2553 case 0x3073: 2554 return "\u3072\u3099"; 2555 case 0x3074: 2556 return "\u3072\u309A"; 2557 case 0x3076: 2558 return "\u3075\u3099"; 2559 case 0x3077: 2560 return "\u3075\u309A"; 2561 case 0x3079: 2562 return "\u3078\u3099"; 2563 case 0x307A: 2564 return "\u3078\u309A"; 2565 case 0x307C: 2566 return "\u307B\u3099"; 2567 case 0x307D: 2568 return "\u307B\u309A"; 2569 case 0x3094: 2570 return "\u3046\u3099"; 2571 case 0x309E: 2572 return "\u309D\u3099"; 2573 case 0x30AC: 2574 return "\u30AB\u3099"; 2575 case 0x30AE: 2576 return "\u30AD\u3099"; 2577 case 0x30B0: 2578 return "\u30AF\u3099"; 2579 case 0x30B2: 2580 return "\u30B1\u3099"; 2581 case 0x30B4: 2582 return "\u30B3\u3099"; 2583 case 0x30B6: 2584 return "\u30B5\u3099"; 2585 case 0x30B8: 2586 return "\u30B7\u3099"; 2587 case 0x30BA: 2588 return "\u30B9\u3099"; 2589 case 0x30BC: 2590 return "\u30BB\u3099"; 2591 case 0x30BE: 2592 return "\u30BD\u3099"; 2593 case 0x30C0: 2594 return "\u30BF\u3099"; 2595 case 0x30C2: 2596 return "\u30C1\u3099"; 2597 case 0x30C5: 2598 return "\u30C4\u3099"; 2599 case 0x30C7: 2600 return "\u30C6\u3099"; 2601 case 0x30C9: 2602 return "\u30C8\u3099"; 2603 case 0x30D0: 2604 return "\u30CF\u3099"; 2605 case 0x30D1: 2606 return "\u30CF\u309A"; 2607 case 0x30D3: 2608 return "\u30D2\u3099"; 2609 case 0x30D4: 2610 return "\u30D2\u309A"; 2611 case 0x30D6: 2612 return "\u30D5\u3099"; 2613 case 0x30D7: 2614 return "\u30D5\u309A"; 2615 case 0x30D9: 2616 return "\u30D8\u3099"; 2617 case 0x30DA: 2618 return "\u30D8\u309A"; 2619 case 0x30DC: 2620 return "\u30DB\u3099"; 2621 case 0x30DD: 2622 return "\u30DB\u309A"; 2623 case 0x30F4: 2624 return "\u30A6\u3099"; 2625 case 0x30F7: 2626 return "\u30EF\u3099"; 2627 case 0x30F8: 2628 return "\u30F0\u3099"; 2629 case 0x30F9: 2630 return "\u30F1\u3099"; 2631 case 0x30FA: 2632 return "\u30F2\u3099"; 2633 case 0x30FE: 2634 return "\u30FD\u3099"; 2635 case 0xF900: 2636 return "\u8C48"; 2637 case 0xF901: 2638 return "\u66F4"; 2639 case 0xF902: 2640 return "\u8ECA"; 2641 case 0xF903: 2642 return "\u8CC8"; 2643 case 0xF904: 2644 return "\u6ED1"; 2645 case 0xF905: 2646 return "\u4E32"; 2647 case 0xF906: 2648 return "\u53E5"; 2649 case 0xF907: 2650 return "\u9F9C"; 2651 case 0xF908: 2652 return "\u9F9C"; 2653 case 0xF909: 2654 return "\u5951"; 2655 case 0xF90A: 2656 return "\u91D1"; 2657 case 0xF90B: 2658 return "\u5587"; 2659 case 0xF90C: 2660 return "\u5948"; 2661 case 0xF90D: 2662 return "\u61F6"; 2663 case 0xF90E: 2664 return "\u7669"; 2665 case 0xF90F: 2666 return "\u7F85"; 2667 case 0xF910: 2668 return "\u863F"; 2669 case 0xF911: 2670 return "\u87BA"; 2671 case 0xF912: 2672 return "\u88F8"; 2673 case 0xF913: 2674 return "\u908F"; 2675 case 0xF914: 2676 return "\u6A02"; 2677 case 0xF915: 2678 return "\u6D1B"; 2679 case 0xF916: 2680 return "\u70D9"; 2681 case 0xF917: 2682 return "\u73DE"; 2683 case 0xF918: 2684 return "\u843D"; 2685 case 0xF919: 2686 return "\u916A"; 2687 case 0xF91A: 2688 return "\u99F1"; 2689 case 0xF91B: 2690 return "\u4E82"; 2691 case 0xF91C: 2692 return "\u5375"; 2693 case 0xF91D: 2694 return "\u6B04"; 2695 case 0xF91E: 2696 return "\u721B"; 2697 case 0xF91F: 2698 return "\u862D"; 2699 case 0xF920: 2700 return "\u9E1E"; 2701 case 0xF921: 2702 return "\u5D50"; 2703 case 0xF922: 2704 return "\u6FEB"; 2705 case 0xF923: 2706 return "\u85CD"; 2707 case 0xF924: 2708 return "\u8964"; 2709 case 0xF925: 2710 return "\u62C9"; 2711 case 0xF926: 2712 return "\u81D8"; 2713 case 0xF927: 2714 return "\u881F"; 2715 case 0xF928: 2716 return "\u5ECA"; 2717 case 0xF929: 2718 return "\u6717"; 2719 case 0xF92A: 2720 return "\u6D6A"; 2721 case 0xF92B: 2722 return "\u72FC"; 2723 case 0xF92C: 2724 return "\u90CE"; 2725 case 0xF92D: 2726 return "\u4F86"; 2727 case 0xF92E: 2728 return "\u51B7"; 2729 case 0xF92F: 2730 return "\u52DE"; 2731 case 0xF930: 2732 return "\u64C4"; 2733 case 0xF931: 2734 return "\u6AD3"; 2735 case 0xF932: 2736 return "\u7210"; 2737 case 0xF933: 2738 return "\u76E7"; 2739 case 0xF934: 2740 return "\u8001"; 2741 case 0xF935: 2742 return "\u8606"; 2743 case 0xF936: 2744 return "\u865C"; 2745 case 0xF937: 2746 return "\u8DEF"; 2747 case 0xF938: 2748 return "\u9732"; 2749 case 0xF939: 2750 return "\u9B6F"; 2751 case 0xF93A: 2752 return "\u9DFA"; 2753 case 0xF93B: 2754 return "\u788C"; 2755 case 0xF93C: 2756 return "\u797F"; 2757 case 0xF93D: 2758 return "\u7DA0"; 2759 case 0xF93E: 2760 return "\u83C9"; 2761 case 0xF93F: 2762 return "\u9304"; 2763 case 0xF940: 2764 return "\u9E7F"; 2765 case 0xF941: 2766 return "\u8AD6"; 2767 case 0xF942: 2768 return "\u58DF"; 2769 case 0xF943: 2770 return "\u5F04"; 2771 case 0xF944: 2772 return "\u7C60"; 2773 case 0xF945: 2774 return "\u807E"; 2775 case 0xF946: 2776 return "\u7262"; 2777 case 0xF947: 2778 return "\u78CA"; 2779 case 0xF948: 2780 return "\u8CC2"; 2781 case 0xF949: 2782 return "\u96F7"; 2783 case 0xF94A: 2784 return "\u58D8"; 2785 case 0xF94B: 2786 return "\u5C62"; 2787 case 0xF94C: 2788 return "\u6A13"; 2789 case 0xF94D: 2790 return "\u6DDA"; 2791 case 0xF94E: 2792 return "\u6F0F"; 2793 case 0xF94F: 2794 return "\u7D2F"; 2795 case 0xF950: 2796 return "\u7E37"; 2797 case 0xF951: 2798 return "\u964B"; 2799 case 0xF952: 2800 return "\u52D2"; 2801 case 0xF953: 2802 return "\u808B"; 2803 case 0xF954: 2804 return "\u51DC"; 2805 case 0xF955: 2806 return "\u51CC"; 2807 case 0xF956: 2808 return "\u7A1C"; 2809 case 0xF957: 2810 return "\u7DBE"; 2811 case 0xF958: 2812 return "\u83F1"; 2813 case 0xF959: 2814 return "\u9675"; 2815 case 0xF95A: 2816 return "\u8B80"; 2817 case 0xF95B: 2818 return "\u62CF"; 2819 case 0xF95C: 2820 return "\u6A02"; 2821 case 0xF95D: 2822 return "\u8AFE"; 2823 case 0xF95E: 2824 return "\u4E39"; 2825 case 0xF95F: 2826 return "\u5BE7"; 2827 case 0xF960: 2828 return "\u6012"; 2829 case 0xF961: 2830 return "\u7387"; 2831 case 0xF962: 2832 return "\u7570"; 2833 case 0xF963: 2834 return "\u5317"; 2835 case 0xF964: 2836 return "\u78FB"; 2837 case 0xF965: 2838 return "\u4FBF"; 2839 case 0xF966: 2840 return "\u5FA9"; 2841 case 0xF967: 2842 return "\u4E0D"; 2843 case 0xF968: 2844 return "\u6CCC"; 2845 case 0xF969: 2846 return "\u6578"; 2847 case 0xF96A: 2848 return "\u7D22"; 2849 case 0xF96B: 2850 return "\u53C3"; 2851 case 0xF96C: 2852 return "\u585E"; 2853 case 0xF96D: 2854 return "\u7701"; 2855 case 0xF96E: 2856 return "\u8449"; 2857 case 0xF96F: 2858 return "\u8AAA"; 2859 case 0xF970: 2860 return "\u6BBA"; 2861 case 0xF971: 2862 return "\u8FB0"; 2863 case 0xF972: 2864 return "\u6C88"; 2865 case 0xF973: 2866 return "\u62FE"; 2867 case 0xF974: 2868 return "\u82E5"; 2869 case 0xF975: 2870 return "\u63A0"; 2871 case 0xF976: 2872 return "\u7565"; 2873 case 0xF977: 2874 return "\u4EAE"; 2875 case 0xF978: 2876 return "\u5169"; 2877 case 0xF979: 2878 return "\u51C9"; 2879 case 0xF97A: 2880 return "\u6881"; 2881 case 0xF97B: 2882 return "\u7CE7"; 2883 case 0xF97C: 2884 return "\u826F"; 2885 case 0xF97D: 2886 return "\u8AD2"; 2887 case 0xF97E: 2888 return "\u91CF"; 2889 case 0xF97F: 2890 return "\u52F5"; 2891 case 0xF980: 2892 return "\u5442"; 2893 case 0xF981: 2894 return "\u5973"; 2895 case 0xF982: 2896 return "\u5EEC"; 2897 case 0xF983: 2898 return "\u65C5"; 2899 case 0xF984: 2900 return "\u6FFE"; 2901 case 0xF985: 2902 return "\u792A"; 2903 case 0xF986: 2904 return "\u95AD"; 2905 case 0xF987: 2906 return "\u9A6A"; 2907 case 0xF988: 2908 return "\u9E97"; 2909 case 0xF989: 2910 return "\u9ECE"; 2911 case 0xF98A: 2912 return "\u529B"; 2913 case 0xF98B: 2914 return "\u66C6"; 2915 case 0xF98C: 2916 return "\u6B77"; 2917 case 0xF98D: 2918 return "\u8F62"; 2919 case 0xF98E: 2920 return "\u5E74"; 2921 case 0xF98F: 2922 return "\u6190"; 2923 case 0xF990: 2924 return "\u6200"; 2925 case 0xF991: 2926 return "\u649A"; 2927 case 0xF992: 2928 return "\u6F23"; 2929 case 0xF993: 2930 return "\u7149"; 2931 case 0xF994: 2932 return "\u7489"; 2933 case 0xF995: 2934 return "\u79CA"; 2935 case 0xF996: 2936 return "\u7DF4"; 2937 case 0xF997: 2938 return "\u806F"; 2939 case 0xF998: 2940 return "\u8F26"; 2941 case 0xF999: 2942 return "\u84EE"; 2943 case 0xF99A: 2944 return "\u9023"; 2945 case 0xF99B: 2946 return "\u934A"; 2947 case 0xF99C: 2948 return "\u5217"; 2949 case 0xF99D: 2950 return "\u52A3"; 2951 case 0xF99E: 2952 return "\u54BD"; 2953 case 0xF99F: 2954 return "\u70C8"; 2955 case 0xF9A0: 2956 return "\u88C2"; 2957 case 0xF9A1: 2958 return "\u8AAA"; 2959 case 0xF9A2: 2960 return "\u5EC9"; 2961 case 0xF9A3: 2962 return "\u5FF5"; 2963 case 0xF9A4: 2964 return "\u637B"; 2965 case 0xF9A5: 2966 return "\u6BAE"; 2967 case 0xF9A6: 2968 return "\u7C3E"; 2969 case 0xF9A7: 2970 return "\u7375"; 2971 case 0xF9A8: 2972 return "\u4EE4"; 2973 case 0xF9A9: 2974 return "\u56F9"; 2975 case 0xF9AA: 2976 return "\u5BE7"; 2977 case 0xF9AB: 2978 return "\u5DBA"; 2979 case 0xF9AC: 2980 return "\u601C"; 2981 case 0xF9AD: 2982 return "\u73B2"; 2983 case 0xF9AE: 2984 return "\u7469"; 2985 case 0xF9AF: 2986 return "\u7F9A"; 2987 case 0xF9B0: 2988 return "\u8046"; 2989 case 0xF9B1: 2990 return "\u9234"; 2991 case 0xF9B2: 2992 return "\u96F6"; 2993 case 0xF9B3: 2994 return "\u9748"; 2995 case 0xF9B4: 2996 return "\u9818"; 2997 case 0xF9B5: 2998 return "\u4F8B"; 2999 case 0xF9B6: 3000 return "\u79AE"; 3001 case 0xF9B7: 3002 return "\u91B4"; 3003 case 0xF9B8: 3004 return "\u96B8"; 3005 case 0xF9B9: 3006 return "\u60E1"; 3007 case 0xF9BA: 3008 return "\u4E86"; 3009 case 0xF9BB: 3010 return "\u50DA"; 3011 case 0xF9BC: 3012 return "\u5BEE"; 3013 case 0xF9BD: 3014 return "\u5C3F"; 3015 case 0xF9BE: 3016 return "\u6599"; 3017 case 0xF9BF: 3018 return "\u6A02"; 3019 case 0xF9C0: 3020 return "\u71CE"; 3021 case 0xF9C1: 3022 return "\u7642"; 3023 case 0xF9C2: 3024 return "\u84FC"; 3025 case 0xF9C3: 3026 return "\u907C"; 3027 case 0xF9C4: 3028 return "\u9F8D"; 3029 case 0xF9C5: 3030 return "\u6688"; 3031 case 0xF9C6: 3032 return "\u962E"; 3033 case 0xF9C7: 3034 return "\u5289"; 3035 case 0xF9C8: 3036 return "\u677B"; 3037 case 0xF9C9: 3038 return "\u67F3"; 3039 case 0xF9CA: 3040 return "\u6D41"; 3041 case 0xF9CB: 3042 return "\u6E9C"; 3043 case 0xF9CC: 3044 return "\u7409"; 3045 case 0xF9CD: 3046 return "\u7559"; 3047 case 0xF9CE: 3048 return "\u786B"; 3049 case 0xF9CF: 3050 return "\u7D10"; 3051 case 0xF9D0: 3052 return "\u985E"; 3053 case 0xF9D1: 3054 return "\u516D"; 3055 case 0xF9D2: 3056 return "\u622E"; 3057 case 0xF9D3: 3058 return "\u9678"; 3059 case 0xF9D4: 3060 return "\u502B"; 3061 case 0xF9D5: 3062 return "\u5D19"; 3063 case 0xF9D6: 3064 return "\u6DEA"; 3065 case 0xF9D7: 3066 return "\u8F2A"; 3067 case 0xF9D8: 3068 return "\u5F8B"; 3069 case 0xF9D9: 3070 return "\u6144"; 3071 case 0xF9DA: 3072 return "\u6817"; 3073 case 0xF9DB: 3074 return "\u7387"; 3075 case 0xF9DC: 3076 return "\u9686"; 3077 case 0xF9DD: 3078 return "\u5229"; 3079 case 0xF9DE: 3080 return "\u540F"; 3081 case 0xF9DF: 3082 return "\u5C65"; 3083 case 0xF9E0: 3084 return "\u6613"; 3085 case 0xF9E1: 3086 return "\u674E"; 3087 case 0xF9E2: 3088 return "\u68A8"; 3089 case 0xF9E3: 3090 return "\u6CE5"; 3091 case 0xF9E4: 3092 return "\u7406"; 3093 case 0xF9E5: 3094 return "\u75E2"; 3095 case 0xF9E6: 3096 return "\u7F79"; 3097 case 0xF9E7: 3098 return "\u88CF"; 3099 case 0xF9E8: 3100 return "\u88E1"; 3101 case 0xF9E9: 3102 return "\u91CC"; 3103 case 0xF9EA: 3104 return "\u96E2"; 3105 case 0xF9EB: 3106 return "\u533F"; 3107 case 0xF9EC: 3108 return "\u6EBA"; 3109 case 0xF9ED: 3110 return "\u541D"; 3111 case 0xF9EE: 3112 return "\u71D0"; 3113 case 0xF9EF: 3114 return "\u7498"; 3115 case 0xF9F0: 3116 return "\u85FA"; 3117 case 0xF9F1: 3118 return "\u96A3"; 3119 case 0xF9F2: 3120 return "\u9C57"; 3121 case 0xF9F3: 3122 return "\u9E9F"; 3123 case 0xF9F4: 3124 return "\u6797"; 3125 case 0xF9F5: 3126 return "\u6DCB"; 3127 case 0xF9F6: 3128 return "\u81E8"; 3129 case 0xF9F7: 3130 return "\u7ACB"; 3131 case 0xF9F8: 3132 return "\u7B20"; 3133 case 0xF9F9: 3134 return "\u7C92"; 3135 case 0xF9FA: 3136 return "\u72C0"; 3137 case 0xF9FB: 3138 return "\u7099"; 3139 case 0xF9FC: 3140 return "\u8B58"; 3141 case 0xF9FD: 3142 return "\u4EC0"; 3143 case 0xF9FE: 3144 return "\u8336"; 3145 case 0xF9FF: 3146 return "\u523A"; 3147 case 0xFA00: 3148 return "\u5207"; 3149 case 0xFA01: 3150 return "\u5EA6"; 3151 case 0xFA02: 3152 return "\u62D3"; 3153 case 0xFA03: 3154 return "\u7CD6"; 3155 case 0xFA04: 3156 return "\u5B85"; 3157 case 0xFA05: 3158 return "\u6D1E"; 3159 case 0xFA06: 3160 return "\u66B4"; 3161 case 0xFA07: 3162 return "\u8F3B"; 3163 case 0xFA08: 3164 return "\u884C"; 3165 case 0xFA09: 3166 return "\u964D"; 3167 case 0xFA0A: 3168 return "\u898B"; 3169 case 0xFA0B: 3170 return "\u5ED3"; 3171 case 0xFA0C: 3172 return "\u5140"; 3173 case 0xFA0D: 3174 return "\u55C0"; 3175 case 0xFA10: 3176 return "\u585A"; 3177 case 0xFA12: 3178 return "\u6674"; 3179 case 0xFA15: 3180 return "\u51DE"; 3181 case 0xFA16: 3182 return "\u732A"; 3183 case 0xFA17: 3184 return "\u76CA"; 3185 case 0xFA18: 3186 return "\u793C"; 3187 case 0xFA19: 3188 return "\u795E"; 3189 case 0xFA1A: 3190 return "\u7965"; 3191 case 0xFA1B: 3192 return "\u798F"; 3193 case 0xFA1C: 3194 return "\u9756"; 3195 case 0xFA1D: 3196 return "\u7CBE"; 3197 case 0xFA1E: 3198 return "\u7FBD"; 3199 case 0xFA20: 3200 return "\u8612"; 3201 case 0xFA22: 3202 return "\u8AF8"; 3203 case 0xFA25: 3204 return "\u9038"; 3205 case 0xFA26: 3206 return "\u90FD"; 3207 case 0xFA2A: 3208 return "\u98EF"; 3209 case 0xFA2B: 3210 return "\u98FC"; 3211 case 0xFA2C: 3212 return "\u9928"; 3213 case 0xFA2D: 3214 return "\u9DB4"; 3215 case 0xFA30: 3216 return "\u4FAE"; 3217 case 0xFA31: 3218 return "\u50E7"; 3219 case 0xFA32: 3220 return "\u514D"; 3221 case 0xFA33: 3222 return "\u52C9"; 3223 case 0xFA34: 3224 return "\u52E4"; 3225 case 0xFA35: 3226 return "\u5351"; 3227 case 0xFA36: 3228 return "\u559D"; 3229 case 0xFA37: 3230 return "\u5606"; 3231 case 0xFA38: 3232 return "\u5668"; 3233 case 0xFA39: 3234 return "\u5840"; 3235 case 0xFA3A: 3236 return "\u58A8"; 3237 case 0xFA3B: 3238 return "\u5C64"; 3239 case 0xFA3C: 3240 return "\u5C6E"; 3241 case 0xFA3D: 3242 return "\u6094"; 3243 case 0xFA3E: 3244 return "\u6168"; 3245 case 0xFA3F: 3246 return "\u618E"; 3247 case 0xFA40: 3248 return "\u61F2"; 3249 case 0xFA41: 3250 return "\u654F"; 3251 case 0xFA42: 3252 return "\u65E2"; 3253 case 0xFA43: 3254 return "\u6691"; 3255 case 0xFA44: 3256 return "\u6885"; 3257 case 0xFA45: 3258 return "\u6D77"; 3259 case 0xFA46: 3260 return "\u6E1A"; 3261 case 0xFA47: 3262 return "\u6F22"; 3263 case 0xFA48: 3264 return "\u716E"; 3265 case 0xFA49: 3266 return "\u722B"; 3267 case 0xFA4A: 3268 return "\u7422"; 3269 case 0xFA4B: 3270 return "\u7891"; 3271 case 0xFA4C: 3272 return "\u793E"; 3273 case 0xFA4D: 3274 return "\u7949"; 3275 case 0xFA4E: 3276 return "\u7948"; 3277 case 0xFA4F: 3278 return "\u7950"; 3279 case 0xFA50: 3280 return "\u7956"; 3281 case 0xFA51: 3282 return "\u795D"; 3283 case 0xFA52: 3284 return "\u798D"; 3285 case 0xFA53: 3286 return "\u798E"; 3287 case 0xFA54: 3288 return "\u7A40"; 3289 case 0xFA55: 3290 return "\u7A81"; 3291 case 0xFA56: 3292 return "\u7BC0"; 3293 case 0xFA57: 3294 return "\u7DF4"; 3295 case 0xFA58: 3296 return "\u7E09"; 3297 case 0xFA59: 3298 return "\u7E41"; 3299 case 0xFA5A: 3300 return "\u7F72"; 3301 case 0xFA5B: 3302 return "\u8005"; 3303 case 0xFA5C: 3304 return "\u81ED"; 3305 case 0xFA5D: 3306 return "\u8279"; 3307 case 0xFA5E: 3308 return "\u8279"; 3309 case 0xFA5F: 3310 return "\u8457"; 3311 case 0xFA60: 3312 return "\u8910"; 3313 case 0xFA61: 3314 return "\u8996"; 3315 case 0xFA62: 3316 return "\u8B01"; 3317 case 0xFA63: 3318 return "\u8B39"; 3319 case 0xFA64: 3320 return "\u8CD3"; 3321 case 0xFA65: 3322 return "\u8D08"; 3323 case 0xFA66: 3324 return "\u8FB6"; 3325 case 0xFA67: 3326 return "\u9038"; 3327 case 0xFA68: 3328 return "\u96E3"; 3329 case 0xFA69: 3330 return "\u97FF"; 3331 case 0xFA6A: 3332 return "\u983B"; 3333 case 0xFA70: 3334 return "\u4E26"; 3335 case 0xFA71: 3336 return "\u51B5"; 3337 case 0xFA72: 3338 return "\u5168"; 3339 case 0xFA73: 3340 return "\u4F80"; 3341 case 0xFA74: 3342 return "\u5145"; 3343 case 0xFA75: 3344 return "\u5180"; 3345 case 0xFA76: 3346 return "\u52C7"; 3347 case 0xFA77: 3348 return "\u52FA"; 3349 case 0xFA78: 3350 return "\u559D"; 3351 case 0xFA79: 3352 return "\u5555"; 3353 case 0xFA7A: 3354 return "\u5599"; 3355 case 0xFA7B: 3356 return "\u55E2"; 3357 case 0xFA7C: 3358 return "\u585A"; 3359 case 0xFA7D: 3360 return "\u58B3"; 3361 case 0xFA7E: 3362 return "\u5944"; 3363 case 0xFA7F: 3364 return "\u5954"; 3365 case 0xFA80: 3366 return "\u5A62"; 3367 case 0xFA81: 3368 return "\u5B28"; 3369 case 0xFA82: 3370 return "\u5ED2"; 3371 case 0xFA83: 3372 return "\u5ED9"; 3373 case 0xFA84: 3374 return "\u5F69"; 3375 case 0xFA85: 3376 return "\u5FAD"; 3377 case 0xFA86: 3378 return "\u60D8"; 3379 case 0xFA87: 3380 return "\u614E"; 3381 case 0xFA88: 3382 return "\u6108"; 3383 case 0xFA89: 3384 return "\u618E"; 3385 case 0xFA8A: 3386 return "\u6160"; 3387 case 0xFA8B: 3388 return "\u61F2"; 3389 case 0xFA8C: 3390 return "\u6234"; 3391 case 0xFA8D: 3392 return "\u63C4"; 3393 case 0xFA8E: 3394 return "\u641C"; 3395 case 0xFA8F: 3396 return "\u6452"; 3397 case 0xFA90: 3398 return "\u6556"; 3399 case 0xFA91: 3400 return "\u6674"; 3401 case 0xFA92: 3402 return "\u6717"; 3403 case 0xFA93: 3404 return "\u671B"; 3405 case 0xFA94: 3406 return "\u6756"; 3407 case 0xFA95: 3408 return "\u6B79"; 3409 case 0xFA96: 3410 return "\u6BBA"; 3411 case 0xFA97: 3412 return "\u6D41"; 3413 case 0xFA98: 3414 return "\u6EDB"; 3415 case 0xFA99: 3416 return "\u6ECB"; 3417 case 0xFA9A: 3418 return "\u6F22"; 3419 case 0xFA9B: 3420 return "\u701E"; 3421 case 0xFA9C: 3422 return "\u716E"; 3423 case 0xFA9D: 3424 return "\u77A7"; 3425 case 0xFA9E: 3426 return "\u7235"; 3427 case 0xFA9F: 3428 return "\u72AF"; 3429 case 0xFAA0: 3430 return "\u732A"; 3431 case 0xFAA1: 3432 return "\u7471"; 3433 case 0xFAA2: 3434 return "\u7506"; 3435 case 0xFAA3: 3436 return "\u753B"; 3437 case 0xFAA4: 3438 return "\u761D"; 3439 case 0xFAA5: 3440 return "\u761F"; 3441 case 0xFAA6: 3442 return "\u76CA"; 3443 case 0xFAA7: 3444 return "\u76DB"; 3445 case 0xFAA8: 3446 return "\u76F4"; 3447 case 0xFAA9: 3448 return "\u774A"; 3449 case 0xFAAA: 3450 return "\u7740"; 3451 case 0xFAAB: 3452 return "\u78CC"; 3453 case 0xFAAC: 3454 return "\u7AB1"; 3455 case 0xFAAD: 3456 return "\u7BC0"; 3457 case 0xFAAE: 3458 return "\u7C7B"; 3459 case 0xFAAF: 3460 return "\u7D5B"; 3461 case 0xFAB0: 3462 return "\u7DF4"; 3463 case 0xFAB1: 3464 return "\u7F3E"; 3465 case 0xFAB2: 3466 return "\u8005"; 3467 case 0xFAB3: 3468 return "\u8352"; 3469 case 0xFAB4: 3470 return "\u83EF"; 3471 case 0xFAB5: 3472 return "\u8779"; 3473 case 0xFAB6: 3474 return "\u8941"; 3475 case 0xFAB7: 3476 return "\u8986"; 3477 case 0xFAB8: 3478 return "\u8996"; 3479 case 0xFAB9: 3480 return "\u8ABF"; 3481 case 0xFABA: 3482 return "\u8AF8"; 3483 case 0xFABB: 3484 return "\u8ACB"; 3485 case 0xFABC: 3486 return "\u8B01"; 3487 case 0xFABD: 3488 return "\u8AFE"; 3489 case 0xFABE: 3490 return "\u8AED"; 3491 case 0xFABF: 3492 return "\u8B39"; 3493 case 0xFAC0: 3494 return "\u8B8A"; 3495 case 0xFAC1: 3496 return "\u8D08"; 3497 case 0xFAC2: 3498 return "\u8F38"; 3499 case 0xFAC3: 3500 return "\u9072"; 3501 case 0xFAC4: 3502 return "\u9199"; 3503 case 0xFAC5: 3504 return "\u9276"; 3505 case 0xFAC6: 3506 return "\u967C"; 3507 case 0xFAC7: 3508 return "\u96E3"; 3509 case 0xFAC8: 3510 return "\u9756"; 3511 case 0xFAC9: 3512 return "\u97DB"; 3513 case 0xFACA: 3514 return "\u97FF"; 3515 case 0xFACB: 3516 return "\u980B"; 3517 case 0xFACC: 3518 return "\u983B"; 3519 case 0xFACD: 3520 return "\u9B12"; 3521 case 0xFACE: 3522 return "\u9F9C"; 3523 case 0xFACF: 3524 return "\ud84a\udc4a"; 3525 case 0xFAD0: 3526 return "\ud84a\udc44"; 3527 case 0xFAD1: 3528 return "\ud84c\udfd5"; 3529 case 0xFAD2: 3530 return "\u3B9D"; 3531 case 0xFAD3: 3532 return "\u4018"; 3533 case 0xFAD4: 3534 return "\u4039"; 3535 case 0xFAD5: 3536 return "\ud854\ude49"; 3537 case 0xFAD6: 3538 return "\ud857\udcd0"; 3539 case 0xFAD7: 3540 return "\ud85f\uded3"; 3541 case 0xFAD8: 3542 return "\u9F43"; 3543 case 0xFAD9: 3544 return "\u9F8E"; 3545 case 0xFB1D: 3546 return "\u05D9\u05B4"; 3547 case 0xFB1F: 3548 return "\u05F2\u05B7"; 3549 case 0xFB2A: 3550 return "\u05E9\u05C1"; 3551 case 0xFB2B: 3552 return "\u05E9\u05C2"; 3553 case 0xFB2C: 3554 return "\uFB49\u05C1"; 3555 case 0xFB2D: 3556 return "\uFB49\u05C2"; 3557 case 0xFB2E: 3558 return "\u05D0\u05B7"; 3559 case 0xFB2F: 3560 return "\u05D0\u05B8"; 3561 case 0xFB30: 3562 return "\u05D0\u05BC"; 3563 case 0xFB31: 3564 return "\u05D1\u05BC"; 3565 case 0xFB32: 3566 return "\u05D2\u05BC"; 3567 case 0xFB33: 3568 return "\u05D3\u05BC"; 3569 case 0xFB34: 3570 return "\u05D4\u05BC"; 3571 case 0xFB35: 3572 return "\u05D5\u05BC"; 3573 case 0xFB36: 3574 return "\u05D6\u05BC"; 3575 case 0xFB38: 3576 return "\u05D8\u05BC"; 3577 case 0xFB39: 3578 return "\u05D9\u05BC"; 3579 case 0xFB3A: 3580 return "\u05DA\u05BC"; 3581 case 0xFB3B: 3582 return "\u05DB\u05BC"; 3583 case 0xFB3C: 3584 return "\u05DC\u05BC"; 3585 case 0xFB3E: 3586 return "\u05DE\u05BC"; 3587 case 0xFB40: 3588 return "\u05E0\u05BC"; 3589 case 0xFB41: 3590 return "\u05E1\u05BC"; 3591 case 0xFB43: 3592 return "\u05E3\u05BC"; 3593 case 0xFB44: 3594 return "\u05E4\u05BC"; 3595 case 0xFB46: 3596 return "\u05E6\u05BC"; 3597 case 0xFB47: 3598 return "\u05E7\u05BC"; 3599 case 0xFB48: 3600 return "\u05E8\u05BC"; 3601 case 0xFB49: 3602 return "\u05E9\u05BC"; 3603 case 0xFB4A: 3604 return "\u05EA\u05BC"; 3605 case 0xFB4B: 3606 return "\u05D5\u05B9"; 3607 case 0xFB4C: 3608 return "\u05D1\u05BF"; 3609 case 0xFB4D: 3610 return "\u05DB\u05BF"; 3611 case 0xFB4E: 3612 return "\u05E4\u05BF"; 3613 case 0x1D15E: 3614 return "\ud834\udd57\ud834\udd65"; 3615 case 0x1D15F: 3616 return "\ud834\udd58\ud834\udd65"; 3617 case 0x1D160: 3618 return "\ud834\udd5f\ud834\udd6e"; 3619 case 0x1D161: 3620 return "\ud834\udd5f\ud834\udd6f"; 3621 case 0x1D162: 3622 return "\ud834\udd5f\ud834\udd70"; 3623 case 0x1D163: 3624 return "\ud834\udd5f\ud834\udd71"; 3625 case 0x1D164: 3626 return "\ud834\udd5f\ud834\udd72"; 3627 case 0x1D1BB: 3628 return "\ud834\uddb9\ud834\udd65"; 3629 case 0x1D1BC: 3630 return "\ud834\uddba\ud834\udd65"; 3631 case 0x1D1BD: 3632 return "\ud834\uddbb\ud834\udd6e"; 3633 case 0x1D1BE: 3634 return "\ud834\uddbc\ud834\udd6e"; 3635 case 0x1D1BF: 3636 return "\ud834\uddbb\ud834\udd6f"; 3637 case 0x1D1C0: 3638 return "\ud834\uddbc\ud834\udd6f"; 3639 case 0x2F800: 3640 return "\u4E3D"; 3641 case 0x2F801: 3642 return "\u4E38"; 3643 case 0x2F802: 3644 return "\u4E41"; 3645 case 0x2F803: 3646 return "\ud840\udd22"; 3647 case 0x2F804: 3648 return "\u4F60"; 3649 case 0x2F805: 3650 return "\u4FAE"; 3651 case 0x2F806: 3652 return "\u4FBB"; 3653 case 0x2F807: 3654 return "\u5002"; 3655 case 0x2F808: 3656 return "\u507A"; 3657 case 0x2F809: 3658 return "\u5099"; 3659 case 0x2F80A: 3660 return "\u50E7"; 3661 case 0x2F80B: 3662 return "\u50CF"; 3663 case 0x2F80C: 3664 return "\u349E"; 3665 case 0x2F80D: 3666 return "\ud841\ude3a"; 3667 case 0x2F80E: 3668 return "\u514D"; 3669 case 0x2F80F: 3670 return "\u5154"; 3671 case 0x2F810: 3672 return "\u5164"; 3673 case 0x2F811: 3674 return "\u5177"; 3675 case 0x2F812: 3676 return "\ud841\udd1c"; 3677 case 0x2F813: 3678 return "\u34B9"; 3679 case 0x2F814: 3680 return "\u5167"; 3681 case 0x2F815: 3682 return "\u518D"; 3683 case 0x2F816: 3684 return "\ud841\udd4b"; 3685 case 0x2F817: 3686 return "\u5197"; 3687 case 0x2F818: 3688 return "\u51A4"; 3689 case 0x2F819: 3690 return "\u4ECC"; 3691 case 0x2F81A: 3692 return "\u51AC"; 3693 case 0x2F81B: 3694 return "\u51B5"; 3695 case 0x2F81C: 3696 return "\ud864\udddf"; 3697 case 0x2F81D: 3698 return "\u51F5"; 3699 case 0x2F81E: 3700 return "\u5203"; 3701 case 0x2F81F: 3702 return "\u34DF"; 3703 case 0x2F820: 3704 return "\u523B"; 3705 case 0x2F821: 3706 return "\u5246"; 3707 case 0x2F822: 3708 return "\u5272"; 3709 case 0x2F823: 3710 return "\u5277"; 3711 case 0x2F824: 3712 return "\u3515"; 3713 case 0x2F825: 3714 return "\u52C7"; 3715 case 0x2F826: 3716 return "\u52C9"; 3717 case 0x2F827: 3718 return "\u52E4"; 3719 case 0x2F828: 3720 return "\u52FA"; 3721 case 0x2F829: 3722 return "\u5305"; 3723 case 0x2F82A: 3724 return "\u5306"; 3725 case 0x2F82B: 3726 return "\u5317"; 3727 case 0x2F82C: 3728 return "\u5349"; 3729 case 0x2F82D: 3730 return "\u5351"; 3731 case 0x2F82E: 3732 return "\u535A"; 3733 case 0x2F82F: 3734 return "\u5373"; 3735 case 0x2F830: 3736 return "\u537D"; 3737 case 0x2F831: 3738 return "\u537F"; 3739 case 0x2F832: 3740 return "\u537F"; 3741 case 0x2F833: 3742 return "\u537F"; 3743 case 0x2F834: 3744 return "\ud842\ude2c"; 3745 case 0x2F835: 3746 return "\u7070"; 3747 case 0x2F836: 3748 return "\u53CA"; 3749 case 0x2F837: 3750 return "\u53DF"; 3751 case 0x2F838: 3752 return "\ud842\udf63"; 3753 case 0x2F839: 3754 return "\u53EB"; 3755 case 0x2F83A: 3756 return "\u53F1"; 3757 case 0x2F83B: 3758 return "\u5406"; 3759 case 0x2F83C: 3760 return "\u549E"; 3761 case 0x2F83D: 3762 return "\u5438"; 3763 case 0x2F83E: 3764 return "\u5448"; 3765 case 0x2F83F: 3766 return "\u5468"; 3767 case 0x2F840: 3768 return "\u54A2"; 3769 case 0x2F841: 3770 return "\u54F6"; 3771 case 0x2F842: 3772 return "\u5510"; 3773 case 0x2F843: 3774 return "\u5553"; 3775 case 0x2F844: 3776 return "\u5563"; 3777 case 0x2F845: 3778 return "\u5584"; 3779 case 0x2F846: 3780 return "\u5584"; 3781 case 0x2F847: 3782 return "\u5599"; 3783 case 0x2F848: 3784 return "\u55AB"; 3785 case 0x2F849: 3786 return "\u55B3"; 3787 case 0x2F84A: 3788 return "\u55C2"; 3789 case 0x2F84B: 3790 return "\u5716"; 3791 case 0x2F84C: 3792 return "\u5606"; 3793 case 0x2F84D: 3794 return "\u5717"; 3795 case 0x2F84E: 3796 return "\u5651"; 3797 case 0x2F84F: 3798 return "\u5674"; 3799 case 0x2F850: 3800 return "\u5207"; 3801 case 0x2F851: 3802 return "\u58EE"; 3803 case 0x2F852: 3804 return "\u57CE"; 3805 case 0x2F853: 3806 return "\u57F4"; 3807 case 0x2F854: 3808 return "\u580D"; 3809 case 0x2F855: 3810 return "\u578B"; 3811 case 0x2F856: 3812 return "\u5832"; 3813 case 0x2F857: 3814 return "\u5831"; 3815 case 0x2F858: 3816 return "\u58AC"; 3817 case 0x2F859: 3818 return "\ud845\udce4"; 3819 case 0x2F85A: 3820 return "\u58F2"; 3821 case 0x2F85B: 3822 return "\u58F7"; 3823 case 0x2F85C: 3824 return "\u5906"; 3825 case 0x2F85D: 3826 return "\u591A"; 3827 case 0x2F85E: 3828 return "\u5922"; 3829 case 0x2F85F: 3830 return "\u5962"; 3831 case 0x2F860: 3832 return "\ud845\udea8"; 3833 case 0x2F861: 3834 return "\ud845\udeea"; 3835 case 0x2F862: 3836 return "\u59EC"; 3837 case 0x2F863: 3838 return "\u5A1B"; 3839 case 0x2F864: 3840 return "\u5A27"; 3841 case 0x2F865: 3842 return "\u59D8"; 3843 case 0x2F866: 3844 return "\u5A66"; 3845 case 0x2F867: 3846 return "\u36EE"; 3847 case 0x2F868: 3848 return "\u36FC"; 3849 case 0x2F869: 3850 return "\u5B08"; 3851 case 0x2F86A: 3852 return "\u5B3E"; 3853 case 0x2F86B: 3854 return "\u5B3E"; 3855 case 0x2F86C: 3856 return "\ud846\uddc8"; 3857 case 0x2F86D: 3858 return "\u5BC3"; 3859 case 0x2F86E: 3860 return "\u5BD8"; 3861 case 0x2F86F: 3862 return "\u5BE7"; 3863 case 0x2F870: 3864 return "\u5BF3"; 3865 case 0x2F871: 3866 return "\ud846\udf18"; 3867 case 0x2F872: 3868 return "\u5BFF"; 3869 case 0x2F873: 3870 return "\u5C06"; 3871 case 0x2F874: 3872 return "\u5F53"; 3873 case 0x2F875: 3874 return "\u5C22"; 3875 case 0x2F876: 3876 return "\u3781"; 3877 case 0x2F877: 3878 return "\u5C60"; 3879 case 0x2F878: 3880 return "\u5C6E"; 3881 case 0x2F879: 3882 return "\u5CC0"; 3883 case 0x2F87A: 3884 return "\u5C8D"; 3885 case 0x2F87B: 3886 return "\ud847\udde4"; 3887 case 0x2F87C: 3888 return "\u5D43"; 3889 case 0x2F87D: 3890 return "\ud847\udde6"; 3891 case 0x2F87E: 3892 return "\u5D6E"; 3893 case 0x2F87F: 3894 return "\u5D6B"; 3895 case 0x2F880: 3896 return "\u5D7C"; 3897 case 0x2F881: 3898 return "\u5DE1"; 3899 case 0x2F882: 3900 return "\u5DE2"; 3901 case 0x2F883: 3902 return "\u382F"; 3903 case 0x2F884: 3904 return "\u5DFD"; 3905 case 0x2F885: 3906 return "\u5E28"; 3907 case 0x2F886: 3908 return "\u5E3D"; 3909 case 0x2F887: 3910 return "\u5E69"; 3911 case 0x2F888: 3912 return "\u3862"; 3913 case 0x2F889: 3914 return "\ud848\udd83"; 3915 case 0x2F88A: 3916 return "\u387C"; 3917 case 0x2F88B: 3918 return "\u5EB0"; 3919 case 0x2F88C: 3920 return "\u5EB3"; 3921 case 0x2F88D: 3922 return "\u5EB6"; 3923 case 0x2F88E: 3924 return "\u5ECA"; 3925 case 0x2F88F: 3926 return "\ud868\udf92"; 3927 case 0x2F890: 3928 return "\u5EFE"; 3929 case 0x2F891: 3930 return "\ud848\udf31"; 3931 case 0x2F892: 3932 return "\ud848\udf31"; 3933 case 0x2F893: 3934 return "\u8201"; 3935 case 0x2F894: 3936 return "\u5F22"; 3937 case 0x2F895: 3938 return "\u5F22"; 3939 case 0x2F896: 3940 return "\u38C7"; 3941 case 0x2F897: 3942 return "\ud84c\udeb8"; 3943 case 0x2F898: 3944 return "\ud858\uddda"; 3945 case 0x2F899: 3946 return "\u5F62"; 3947 case 0x2F89A: 3948 return "\u5F6B"; 3949 case 0x2F89B: 3950 return "\u38E3"; 3951 case 0x2F89C: 3952 return "\u5F9A"; 3953 case 0x2F89D: 3954 return "\u5FCD"; 3955 case 0x2F89E: 3956 return "\u5FD7"; 3957 case 0x2F89F: 3958 return "\u5FF9"; 3959 case 0x2F8A0: 3960 return "\u6081"; 3961 case 0x2F8A1: 3962 return "\u393A"; 3963 case 0x2F8A2: 3964 return "\u391C"; 3965 case 0x2F8A3: 3966 return "\u6094"; 3967 case 0x2F8A4: 3968 return "\ud849\uded4"; 3969 case 0x2F8A5: 3970 return "\u60C7"; 3971 case 0x2F8A6: 3972 return "\u6148"; 3973 case 0x2F8A7: 3974 return "\u614C"; 3975 case 0x2F8A8: 3976 return "\u614E"; 3977 case 0x2F8A9: 3978 return "\u614C"; 3979 case 0x2F8AA: 3980 return "\u617A"; 3981 case 0x2F8AB: 3982 return "\u618E"; 3983 case 0x2F8AC: 3984 return "\u61B2"; 3985 case 0x2F8AD: 3986 return "\u61A4"; 3987 case 0x2F8AE: 3988 return "\u61AF"; 3989 case 0x2F8AF: 3990 return "\u61DE"; 3991 case 0x2F8B0: 3992 return "\u61F2"; 3993 case 0x2F8B1: 3994 return "\u61F6"; 3995 case 0x2F8B2: 3996 return "\u6210"; 3997 case 0x2F8B3: 3998 return "\u621B"; 3999 case 0x2F8B4: 4000 return "\u625D"; 4001 case 0x2F8B5: 4002 return "\u62B1"; 4003 case 0x2F8B6: 4004 return "\u62D4"; 4005 case 0x2F8B7: 4006 return "\u6350"; 4007 case 0x2F8B8: 4008 return "\ud84a\udf0c"; 4009 case 0x2F8B9: 4010 return "\u633D"; 4011 case 0x2F8BA: 4012 return "\u62FC"; 4013 case 0x2F8BB: 4014 return "\u6368"; 4015 case 0x2F8BC: 4016 return "\u6383"; 4017 case 0x2F8BD: 4018 return "\u63E4"; 4019 case 0x2F8BE: 4020 return "\ud84a\udff1"; 4021 case 0x2F8BF: 4022 return "\u6422"; 4023 case 0x2F8C0: 4024 return "\u63C5"; 4025 case 0x2F8C1: 4026 return "\u63A9"; 4027 case 0x2F8C2: 4028 return "\u3A2E"; 4029 case 0x2F8C3: 4030 return "\u6469"; 4031 case 0x2F8C4: 4032 return "\u647E"; 4033 case 0x2F8C5: 4034 return "\u649D"; 4035 case 0x2F8C6: 4036 return "\u6477"; 4037 case 0x2F8C7: 4038 return "\u3A6C"; 4039 case 0x2F8C8: 4040 return "\u654F"; 4041 case 0x2F8C9: 4042 return "\u656C"; 4043 case 0x2F8CA: 4044 return "\ud84c\udc0a"; 4045 case 0x2F8CB: 4046 return "\u65E3"; 4047 case 0x2F8CC: 4048 return "\u66F8"; 4049 case 0x2F8CD: 4050 return "\u6649"; 4051 case 0x2F8CE: 4052 return "\u3B19"; 4053 case 0x2F8CF: 4054 return "\u6691"; 4055 case 0x2F8D0: 4056 return "\u3B08"; 4057 case 0x2F8D1: 4058 return "\u3AE4"; 4059 case 0x2F8D2: 4060 return "\u5192"; 4061 case 0x2F8D3: 4062 return "\u5195"; 4063 case 0x2F8D4: 4064 return "\u6700"; 4065 case 0x2F8D5: 4066 return "\u669C"; 4067 case 0x2F8D6: 4068 return "\u80AD"; 4069 case 0x2F8D7: 4070 return "\u43D9"; 4071 case 0x2F8D8: 4072 return "\u6717"; 4073 case 0x2F8D9: 4074 return "\u671B"; 4075 case 0x2F8DA: 4076 return "\u6721"; 4077 case 0x2F8DB: 4078 return "\u675E"; 4079 case 0x2F8DC: 4080 return "\u6753"; 4081 case 0x2F8DD: 4082 return "\ud84c\udfc3"; 4083 case 0x2F8DE: 4084 return "\u3B49"; 4085 case 0x2F8DF: 4086 return "\u67FA"; 4087 case 0x2F8E0: 4088 return "\u6785"; 4089 case 0x2F8E1: 4090 return "\u6852"; 4091 case 0x2F8E2: 4092 return "\u6885"; 4093 case 0x2F8E3: 4094 return "\ud84d\udc6d"; 4095 case 0x2F8E4: 4096 return "\u688E"; 4097 case 0x2F8E5: 4098 return "\u681F"; 4099 case 0x2F8E6: 4100 return "\u6914"; 4101 case 0x2F8E7: 4102 return "\u3B9D"; 4103 case 0x2F8E8: 4104 return "\u6942"; 4105 case 0x2F8E9: 4106 return "\u69A3"; 4107 case 0x2F8EA: 4108 return "\u69EA"; 4109 case 0x2F8EB: 4110 return "\u6AA8"; 4111 case 0x2F8EC: 4112 return "\ud84d\udea3"; 4113 case 0x2F8ED: 4114 return "\u6ADB"; 4115 case 0x2F8EE: 4116 return "\u3C18"; 4117 case 0x2F8EF: 4118 return "\u6B21"; 4119 case 0x2F8F0: 4120 return "\ud84e\udca7"; 4121 case 0x2F8F1: 4122 return "\u6B54"; 4123 case 0x2F8F2: 4124 return "\u3C4E"; 4125 case 0x2F8F3: 4126 return "\u6B72"; 4127 case 0x2F8F4: 4128 return "\u6B9F"; 4129 case 0x2F8F5: 4130 return "\u6BBA"; 4131 case 0x2F8F6: 4132 return "\u6BBB"; 4133 case 0x2F8F7: 4134 return "\ud84e\ude8d"; 4135 case 0x2F8F8: 4136 return "\ud847\udd0b"; 4137 case 0x2F8F9: 4138 return "\ud84e\udefa"; 4139 case 0x2F8FA: 4140 return "\u6C4E"; 4141 case 0x2F8FB: 4142 return "\ud84f\udcbc"; 4143 case 0x2F8FC: 4144 return "\u6CBF"; 4145 case 0x2F8FD: 4146 return "\u6CCD"; 4147 case 0x2F8FE: 4148 return "\u6C67"; 4149 case 0x2F8FF: 4150 return "\u6D16"; 4151 case 0x2F900: 4152 return "\u6D3E"; 4153 case 0x2F901: 4154 return "\u6D77"; 4155 case 0x2F902: 4156 return "\u6D41"; 4157 case 0x2F903: 4158 return "\u6D69"; 4159 case 0x2F904: 4160 return "\u6D78"; 4161 case 0x2F905: 4162 return "\u6D85"; 4163 case 0x2F906: 4164 return "\ud84f\udd1e"; 4165 case 0x2F907: 4166 return "\u6D34"; 4167 case 0x2F908: 4168 return "\u6E2F"; 4169 case 0x2F909: 4170 return "\u6E6E"; 4171 case 0x2F90A: 4172 return "\u3D33"; 4173 case 0x2F90B: 4174 return "\u6ECB"; 4175 case 0x2F90C: 4176 return "\u6EC7"; 4177 case 0x2F90D: 4178 return "\ud84f\uded1"; 4179 case 0x2F90E: 4180 return "\u6DF9"; 4181 case 0x2F90F: 4182 return "\u6F6E"; 4183 case 0x2F910: 4184 return "\ud84f\udf5e"; 4185 case 0x2F911: 4186 return "\ud84f\udf8e"; 4187 case 0x2F912: 4188 return "\u6FC6"; 4189 case 0x2F913: 4190 return "\u7039"; 4191 case 0x2F914: 4192 return "\u701E"; 4193 case 0x2F915: 4194 return "\u701B"; 4195 case 0x2F916: 4196 return "\u3D96"; 4197 case 0x2F917: 4198 return "\u704A"; 4199 case 0x2F918: 4200 return "\u707D"; 4201 case 0x2F919: 4202 return "\u7077"; 4203 case 0x2F91A: 4204 return "\u70AD"; 4205 case 0x2F91B: 4206 return "\ud841\udd25"; 4207 case 0x2F91C: 4208 return "\u7145"; 4209 case 0x2F91D: 4210 return "\ud850\ude63"; 4211 case 0x2F91E: 4212 return "\u719C"; 4213 case 0x2F91F: 4214 return "\ud850\udfab"; 4215 case 0x2F920: 4216 return "\u7228"; 4217 case 0x2F921: 4218 return "\u7235"; 4219 case 0x2F922: 4220 return "\u7250"; 4221 case 0x2F923: 4222 return "\ud851\ude08"; 4223 case 0x2F924: 4224 return "\u7280"; 4225 case 0x2F925: 4226 return "\u7295"; 4227 case 0x2F926: 4228 return "\ud851\udf35"; 4229 case 0x2F927: 4230 return "\ud852\udc14"; 4231 case 0x2F928: 4232 return "\u737A"; 4233 case 0x2F929: 4234 return "\u738B"; 4235 case 0x2F92A: 4236 return "\u3EAC"; 4237 case 0x2F92B: 4238 return "\u73A5"; 4239 case 0x2F92C: 4240 return "\u3EB8"; 4241 case 0x2F92D: 4242 return "\u3EB8"; 4243 case 0x2F92E: 4244 return "\u7447"; 4245 case 0x2F92F: 4246 return "\u745C"; 4247 case 0x2F930: 4248 return "\u7471"; 4249 case 0x2F931: 4250 return "\u7485"; 4251 case 0x2F932: 4252 return "\u74CA"; 4253 case 0x2F933: 4254 return "\u3F1B"; 4255 case 0x2F934: 4256 return "\u7524"; 4257 case 0x2F935: 4258 return "\ud853\udc36"; 4259 case 0x2F936: 4260 return "\u753E"; 4261 case 0x2F937: 4262 return "\ud853\udc92"; 4263 case 0x2F938: 4264 return "\u7570"; 4265 case 0x2F939: 4266 return "\ud848\udd9f"; 4267 case 0x2F93A: 4268 return "\u7610"; 4269 case 0x2F93B: 4270 return "\ud853\udfa1"; 4271 case 0x2F93C: 4272 return "\ud853\udfb8"; 4273 case 0x2F93D: 4274 return "\ud854\udc44"; 4275 case 0x2F93E: 4276 return "\u3FFC"; 4277 case 0x2F93F: 4278 return "\u4008"; 4279 case 0x2F940: 4280 return "\u76F4"; 4281 case 0x2F941: 4282 return "\ud854\udcf3"; 4283 case 0x2F942: 4284 return "\ud854\udcf2"; 4285 case 0x2F943: 4286 return "\ud854\udd19"; 4287 case 0x2F944: 4288 return "\ud854\udd33"; 4289 case 0x2F945: 4290 return "\u771E"; 4291 case 0x2F946: 4292 return "\u771F"; 4293 case 0x2F947: 4294 return "\u771F"; 4295 case 0x2F948: 4296 return "\u774A"; 4297 case 0x2F949: 4298 return "\u4039"; 4299 case 0x2F94A: 4300 return "\u778B"; 4301 case 0x2F94B: 4302 return "\u4046"; 4303 case 0x2F94C: 4304 return "\u4096"; 4305 case 0x2F94D: 4306 return "\ud855\udc1d"; 4307 case 0x2F94E: 4308 return "\u784E"; 4309 case 0x2F94F: 4310 return "\u788C"; 4311 case 0x2F950: 4312 return "\u78CC"; 4313 case 0x2F951: 4314 return "\u40E3"; 4315 case 0x2F952: 4316 return "\ud855\ude26"; 4317 case 0x2F953: 4318 return "\u7956"; 4319 case 0x2F954: 4320 return "\ud855\ude9a"; 4321 case 0x2F955: 4322 return "\ud855\udec5"; 4323 case 0x2F956: 4324 return "\u798F"; 4325 case 0x2F957: 4326 return "\u79EB"; 4327 case 0x2F958: 4328 return "\u412F"; 4329 case 0x2F959: 4330 return "\u7A40"; 4331 case 0x2F95A: 4332 return "\u7A4A"; 4333 case 0x2F95B: 4334 return "\u7A4F"; 4335 case 0x2F95C: 4336 return "\ud856\udd7c"; 4337 case 0x2F95D: 4338 return "\ud856\udea7"; 4339 case 0x2F95E: 4340 return "\ud856\udea7"; 4341 case 0x2F95F: 4342 return "\u7AEE"; 4343 case 0x2F960: 4344 return "\u4202"; 4345 case 0x2F961: 4346 return "\ud856\udfab"; 4347 case 0x2F962: 4348 return "\u7BC6"; 4349 case 0x2F963: 4350 return "\u7BC9"; 4351 case 0x2F964: 4352 return "\u4227"; 4353 case 0x2F965: 4354 return "\ud857\udc80"; 4355 case 0x2F966: 4356 return "\u7CD2"; 4357 case 0x2F967: 4358 return "\u42A0"; 4359 case 0x2F968: 4360 return "\u7CE8"; 4361 case 0x2F969: 4362 return "\u7CE3"; 4363 case 0x2F96A: 4364 return "\u7D00"; 4365 case 0x2F96B: 4366 return "\ud857\udf86"; 4367 case 0x2F96C: 4368 return "\u7D63"; 4369 case 0x2F96D: 4370 return "\u4301"; 4371 case 0x2F96E: 4372 return "\u7DC7"; 4373 case 0x2F96F: 4374 return "\u7E02"; 4375 case 0x2F970: 4376 return "\u7E45"; 4377 case 0x2F971: 4378 return "\u4334"; 4379 case 0x2F972: 4380 return "\ud858\ude28"; 4381 case 0x2F973: 4382 return "\ud858\ude47"; 4383 case 0x2F974: 4384 return "\u4359"; 4385 case 0x2F975: 4386 return "\ud858\uded9"; 4387 case 0x2F976: 4388 return "\u7F7A"; 4389 case 0x2F977: 4390 return "\ud858\udf3e"; 4391 case 0x2F978: 4392 return "\u7F95"; 4393 case 0x2F979: 4394 return "\u7FFA"; 4395 case 0x2F97A: 4396 return "\u8005"; 4397 case 0x2F97B: 4398 return "\ud859\udcda"; 4399 case 0x2F97C: 4400 return "\ud859\udd23"; 4401 case 0x2F97D: 4402 return "\u8060"; 4403 case 0x2F97E: 4404 return "\ud859\udda8"; 4405 case 0x2F97F: 4406 return "\u8070"; 4407 case 0x2F980: 4408 return "\ud84c\udf5f"; 4409 case 0x2F981: 4410 return "\u43D5"; 4411 case 0x2F982: 4412 return "\u80B2"; 4413 case 0x2F983: 4414 return "\u8103"; 4415 case 0x2F984: 4416 return "\u440B"; 4417 case 0x2F985: 4418 return "\u813E"; 4419 case 0x2F986: 4420 return "\u5AB5"; 4421 case 0x2F987: 4422 return "\ud859\udfa7"; 4423 case 0x2F988: 4424 return "\ud859\udfb5"; 4425 case 0x2F989: 4426 return "\ud84c\udf93"; 4427 case 0x2F98A: 4428 return "\ud84c\udf9c"; 4429 case 0x2F98B: 4430 return "\u8201"; 4431 case 0x2F98C: 4432 return "\u8204"; 4433 case 0x2F98D: 4434 return "\u8F9E"; 4435 case 0x2F98E: 4436 return "\u446B"; 4437 case 0x2F98F: 4438 return "\u8291"; 4439 case 0x2F990: 4440 return "\u828B"; 4441 case 0x2F991: 4442 return "\u829D"; 4443 case 0x2F992: 4444 return "\u52B3"; 4445 case 0x2F993: 4446 return "\u82B1"; 4447 case 0x2F994: 4448 return "\u82B3"; 4449 case 0x2F995: 4450 return "\u82BD"; 4451 case 0x2F996: 4452 return "\u82E6"; 4453 case 0x2F997: 4454 return "\ud85a\udf3c"; 4455 case 0x2F998: 4456 return "\u82E5"; 4457 case 0x2F999: 4458 return "\u831D"; 4459 case 0x2F99A: 4460 return "\u8363"; 4461 case 0x2F99B: 4462 return "\u83AD"; 4463 case 0x2F99C: 4464 return "\u8323"; 4465 case 0x2F99D: 4466 return "\u83BD"; 4467 case 0x2F99E: 4468 return "\u83E7"; 4469 case 0x2F99F: 4470 return "\u8457"; 4471 case 0x2F9A0: 4472 return "\u8353"; 4473 case 0x2F9A1: 4474 return "\u83CA"; 4475 case 0x2F9A2: 4476 return "\u83CC"; 4477 case 0x2F9A3: 4478 return "\u83DC"; 4479 case 0x2F9A4: 4480 return "\ud85b\udc36"; 4481 case 0x2F9A5: 4482 return "\ud85b\udd6b"; 4483 case 0x2F9A6: 4484 return "\ud85b\udcd5"; 4485 case 0x2F9A7: 4486 return "\u452B"; 4487 case 0x2F9A8: 4488 return "\u84F1"; 4489 case 0x2F9A9: 4490 return "\u84F3"; 4491 case 0x2F9AA: 4492 return "\u8516"; 4493 case 0x2F9AB: 4494 return "\ud85c\udfca"; 4495 case 0x2F9AC: 4496 return "\u8564"; 4497 case 0x2F9AD: 4498 return "\ud85b\udf2c"; 4499 case 0x2F9AE: 4500 return "\u455D"; 4501 case 0x2F9AF: 4502 return "\u4561"; 4503 case 0x2F9B0: 4504 return "\ud85b\udfb1"; 4505 case 0x2F9B1: 4506 return "\ud85c\udcd2"; 4507 case 0x2F9B2: 4508 return "\u456B"; 4509 case 0x2F9B3: 4510 return "\u8650"; 4511 case 0x2F9B4: 4512 return "\u865C"; 4513 case 0x2F9B5: 4514 return "\u8667"; 4515 case 0x2F9B6: 4516 return "\u8669"; 4517 case 0x2F9B7: 4518 return "\u86A9"; 4519 case 0x2F9B8: 4520 return "\u8688"; 4521 case 0x2F9B9: 4522 return "\u870E"; 4523 case 0x2F9BA: 4524 return "\u86E2"; 4525 case 0x2F9BB: 4526 return "\u8779"; 4527 case 0x2F9BC: 4528 return "\u8728"; 4529 case 0x2F9BD: 4530 return "\u876B"; 4531 case 0x2F9BE: 4532 return "\u8786"; 4533 case 0x2F9BF: 4534 return "\u45D7"; 4535 case 0x2F9C0: 4536 return "\u87E1"; 4537 case 0x2F9C1: 4538 return "\u8801"; 4539 case 0x2F9C2: 4540 return "\u45F9"; 4541 case 0x2F9C3: 4542 return "\u8860"; 4543 case 0x2F9C4: 4544 return "\u8863"; 4545 case 0x2F9C5: 4546 return "\ud85d\ude67"; 4547 case 0x2F9C6: 4548 return "\u88D7"; 4549 case 0x2F9C7: 4550 return "\u88DE"; 4551 case 0x2F9C8: 4552 return "\u4635"; 4553 case 0x2F9C9: 4554 return "\u88FA"; 4555 case 0x2F9CA: 4556 return "\u34BB"; 4557 case 0x2F9CB: 4558 return "\ud85e\udcae"; 4559 case 0x2F9CC: 4560 return "\ud85e\udd66"; 4561 case 0x2F9CD: 4562 return "\u46BE"; 4563 case 0x2F9CE: 4564 return "\u46C7"; 4565 case 0x2F9CF: 4566 return "\u8AA0"; 4567 case 0x2F9D0: 4568 return "\u8AED"; 4569 case 0x2F9D1: 4570 return "\u8B8A"; 4571 case 0x2F9D2: 4572 return "\u8C55"; 4573 case 0x2F9D3: 4574 return "\ud85f\udca8"; 4575 case 0x2F9D4: 4576 return "\u8CAB"; 4577 case 0x2F9D5: 4578 return "\u8CC1"; 4579 case 0x2F9D6: 4580 return "\u8D1B"; 4581 case 0x2F9D7: 4582 return "\u8D77"; 4583 case 0x2F9D8: 4584 return "\ud85f\udf2f"; 4585 case 0x2F9D9: 4586 return "\ud842\udc04"; 4587 case 0x2F9DA: 4588 return "\u8DCB"; 4589 case 0x2F9DB: 4590 return "\u8DBC"; 4591 case 0x2F9DC: 4592 return "\u8DF0"; 4593 case 0x2F9DD: 4594 return "\ud842\udcde"; 4595 case 0x2F9DE: 4596 return "\u8ED4"; 4597 case 0x2F9DF: 4598 return "\u8F38"; 4599 case 0x2F9E0: 4600 return "\ud861\uddd2"; 4601 case 0x2F9E1: 4602 return "\ud861\udded"; 4603 case 0x2F9E2: 4604 return "\u9094"; 4605 case 0x2F9E3: 4606 return "\u90F1"; 4607 case 0x2F9E4: 4608 return "\u9111"; 4609 case 0x2F9E5: 4610 return "\ud861\udf2e"; 4611 case 0x2F9E6: 4612 return "\u911B"; 4613 case 0x2F9E7: 4614 return "\u9238"; 4615 case 0x2F9E8: 4616 return "\u92D7"; 4617 case 0x2F9E9: 4618 return "\u92D8"; 4619 case 0x2F9EA: 4620 return "\u927C"; 4621 case 0x2F9EB: 4622 return "\u93F9"; 4623 case 0x2F9EC: 4624 return "\u9415"; 4625 case 0x2F9ED: 4626 return "\ud862\udffa"; 4627 case 0x2F9EE: 4628 return "\u958B"; 4629 case 0x2F9EF: 4630 return "\u4995"; 4631 case 0x2F9F0: 4632 return "\u95B7"; 4633 case 0x2F9F1: 4634 return "\ud863\udd77"; 4635 case 0x2F9F2: 4636 return "\u49E6"; 4637 case 0x2F9F3: 4638 return "\u96C3"; 4639 case 0x2F9F4: 4640 return "\u5DB2"; 4641 case 0x2F9F5: 4642 return "\u9723"; 4643 case 0x2F9F6: 4644 return "\ud864\udd45"; 4645 case 0x2F9F7: 4646 return "\ud864\ude1a"; 4647 case 0x2F9F8: 4648 return "\u4A6E"; 4649 case 0x2F9F9: 4650 return "\u4A76"; 4651 case 0x2F9FA: 4652 return "\u97E0"; 4653 case 0x2F9FB: 4654 return "\ud865\udc0a"; 4655 case 0x2F9FC: 4656 return "\u4AB2"; 4657 case 0x2F9FD: 4658 return "\ud865\udc96"; 4659 case 0x2F9FE: 4660 return "\u980B"; 4661 case 0x2F9FF: 4662 return "\u980B"; 4663 case 0x2FA00: 4664 return "\u9829"; 4665 case 0x2FA01: 4666 return "\ud865\uddb6"; 4667 case 0x2FA02: 4668 return "\u98E2"; 4669 case 0x2FA03: 4670 return "\u4B33"; 4671 case 0x2FA04: 4672 return "\u9929"; 4673 case 0x2FA05: 4674 return "\u99A7"; 4675 case 0x2FA06: 4676 return "\u99C2"; 4677 case 0x2FA07: 4678 return "\u99FE"; 4679 case 0x2FA08: 4680 return "\u4BCE"; 4681 case 0x2FA09: 4682 return "\ud866\udf30"; 4683 case 0x2FA0A: 4684 return "\u9B12"; 4685 case 0x2FA0B: 4686 return "\u9C40"; 4687 case 0x2FA0C: 4688 return "\u9CFD"; 4689 case 0x2FA0D: 4690 return "\u4CCE"; 4691 case 0x2FA0E: 4692 return "\u4CED"; 4693 case 0x2FA0F: 4694 return "\u9D67"; 4695 case 0x2FA10: 4696 return "\ud868\udcce"; 4697 case 0x2FA11: 4698 return "\u4CF8"; 4699 case 0x2FA12: 4700 return "\ud868\udd05"; 4701 case 0x2FA13: 4702 return "\ud868\ude0e"; 4703 case 0x2FA14: 4704 return "\ud868\ude91"; 4705 case 0x2FA15: 4706 return "\u9EBB"; 4707 case 0x2FA16: 4708 return "\u4D56"; 4709 case 0x2FA17: 4710 return "\u9EF9"; 4711 case 0x2FA18: 4712 return "\u9EFE"; 4713 case 0x2FA19: 4714 return "\u9F05"; 4715 case 0x2FA1A: 4716 return "\u9F0F"; 4717 case 0x2FA1B: 4718 return "\u9F16"; 4719 case 0x2FA1C: 4720 return "\u9F3B"; 4721 case 0x2FA1D: 4722 return "\ud869\ude00"; 4723 default: // not decomposable 4724 if (character <= 0xFFFF) { 4725 return String.valueOf((char) character); 4726 } 4727 else { 4728 StringBuffer sb = new StringBuffer(2); 4729 sb.append(getHighSurrogate(character)); 4730 sb.append(getLowSurrogate(character)); 4731 return sb.toString(); 4732 } 4733 } 4734 4735 } 4736 ///CLOVER:ON 4737 4738 decomposeHangul(char c)4739 private static String decomposeHangul(char c) { 4740 4741 final int firstLeadingConsonant = 0x1100; 4742 final int firstMedialVowel = 0x1161; 4743 final int firstTrailingConsonant = 0x11A7; 4744 4745 final int numberOfLeadingConsonants = 19; 4746 final int numberOfMedialVowels = 21; 4747 final int numberOfTrailingConsonants = 28; 4748 4749 final int numberOfFinalPairs 4750 = numberOfMedialVowels * numberOfTrailingConsonants; 4751 final int numberOfSyllables 4752 = numberOfLeadingConsonants * numberOfFinalPairs; 4753 4754 final int syllable = c - FIRST_HANGUL_SYLLABLE; 4755 4756 if (syllable < 0 || syllable >= numberOfSyllables) { 4757 return String.valueOf(c); 4758 } 4759 4760 int leadingConsonant = firstLeadingConsonant 4761 + syllable / numberOfFinalPairs; 4762 int medialVowel = firstMedialVowel 4763 + (syllable % numberOfFinalPairs) / numberOfTrailingConsonants; 4764 int trailingConsonant = firstTrailingConsonant 4765 + syllable % numberOfTrailingConsonants; 4766 4767 StringBuffer result = new StringBuffer(3); 4768 result.append((char) leadingConsonant); 4769 result.append((char) medialVowel); 4770 if (trailingConsonant != firstTrailingConsonant) { 4771 result.append((char) trailingConsonant); 4772 } 4773 4774 return result.toString(); 4775 4776 } 4777 4778 composeHangul(String source)4779 private static String composeHangul(String source) { 4780 4781 final int firstLeadingConsonant = 0x1100; 4782 final int firstMedialVowel = 0x1161; 4783 final int firstTrailingConsonant = 0x11A7; 4784 4785 final int numberOfLeadingConsonants = 19; 4786 final int numberOfMedialVowels = 21; 4787 final int numberOfTrailingConsonants = 28; 4788 4789 final int numberOfFinalPairs 4790 = numberOfMedialVowels * numberOfTrailingConsonants; 4791 final int numberOfSyllables 4792 = numberOfLeadingConsonants * numberOfFinalPairs; 4793 4794 final int length = source.length(); 4795 if (length == 0) return ""; 4796 StringBuffer result = new StringBuffer(length); 4797 char previous = source.charAt(0); 4798 result.append(previous); 4799 4800 for (int i = 1; i < length; ++i) { 4801 char c = source.charAt(i); 4802 4803 int leadingConsonant = previous - firstLeadingConsonant; 4804 if (0 <= leadingConsonant && leadingConsonant < numberOfLeadingConsonants) { 4805 int medialVowel = c - firstMedialVowel; 4806 if (medialVowel >= 0 && medialVowel < numberOfMedialVowels) { 4807 previous = (char) (FIRST_HANGUL_SYLLABLE 4808 + (leadingConsonant * numberOfMedialVowels + medialVowel) 4809 * numberOfTrailingConsonants); 4810 result.setCharAt(result.length()-1, previous); 4811 continue; 4812 } 4813 } 4814 4815 int syllable = previous - FIRST_HANGUL_SYLLABLE; 4816 if (syllable >= 0 && syllable < numberOfSyllables 4817 && (syllable % numberOfTrailingConsonants) == 0) { 4818 int trailingConsonant = c - firstTrailingConsonant; 4819 if (trailingConsonant >= 0 && trailingConsonant <= numberOfTrailingConsonants) { 4820 previous += trailingConsonant; 4821 result.setCharAt(result.length()-1, previous); 4822 continue; 4823 } 4824 } 4825 4826 previous = c; 4827 result.append(c); 4828 } 4829 4830 return result.toString(); 4831 4832 } 4833 4834 4835 private static class UnicodeString { 4836 4837 private int[] data; 4838 private int size = 0; 4839 UnicodeString(String s)4840 UnicodeString(String s) { 4841 4842 int length = s.length(); 4843 data = new int[length]; 4844 int index = 0; 4845 for (int i = 0; i < length; i++) { 4846 char c = s.charAt(i); 4847 int codePoint = c; 4848 if (isHighSurrogate(c)) { 4849 i++; 4850 codePoint = combineSurrogatePair(c, s.charAt(i)); 4851 } 4852 data[index] = codePoint; 4853 index++; 4854 } 4855 this.size = index; 4856 4857 } 4858 4859 UnicodeString(int length)4860 UnicodeString(int length) { 4861 this.size = 0; 4862 data = new int[length]; 4863 } 4864 4865 decompose()4866 UnicodeString decompose() { 4867 4868 UnicodeString result = new UnicodeString(size); 4869 for (int i = 0; i < size; i++) { 4870 int c = data[i]; 4871 String d = UnicodeUtil.decompose(c); 4872 result.append(d); 4873 } 4874 4875 /* now put into canonical order */ 4876 4877 for (int i = 0; i < result.size-1; i++) { 4878 int first = result.data[i]; 4879 int second = result.data[i+1]; 4880 int secondClass = getCombiningClass(second); 4881 if (secondClass == 0) continue; 4882 int firstClass = getCombiningClass(first); 4883 if (firstClass > secondClass ) { 4884 result.data[i] = second; 4885 result.data[i+1] = first; 4886 i -= 2; 4887 if (i == -2) i = -1; 4888 } 4889 } 4890 4891 return result; 4892 4893 } 4894 4895 compose()4896 UnicodeString compose() { 4897 4898 if (compositions == null) loadCompositions(); 4899 4900 UnicodeString composed = new UnicodeString(size); 4901 4902 int lastStarter = -1; 4903 int lastStarterIndex = -1; 4904 int composedLastStarterIndex = -1; 4905 4906 for (int i = 0; i < size; i++) { 4907 int c = data[i]; 4908 if (lastStarter == -1 || isBlocked(lastStarterIndex, i)) { 4909 composed.append(c); 4910 if (isStarter(c) ) { 4911 lastStarter = c; 4912 lastStarterIndex = i; 4913 composedLastStarterIndex = composed.size-1; 4914 } 4915 } 4916 else { 4917 int composedChar = composeCharacter(lastStarter, c); 4918 if (composedChar == -1) { 4919 composed.append(c); 4920 if (isStarter(c) ) { 4921 lastStarter = c; 4922 lastStarterIndex = i; 4923 composedLastStarterIndex = composed.size-1; 4924 } 4925 } 4926 else { 4927 lastStarter = composedChar; 4928 // XXX dangerous side effects 4929 data[lastStarterIndex] = composedChar; 4930 data[i] = 0; 4931 composed.data[composedLastStarterIndex] = composedChar; 4932 } 4933 } 4934 } 4935 4936 return composed; 4937 4938 } 4939 4940 append(String s)4941 void append(String s) { 4942 4943 for (int i = 0; i < s.length(); i++) { 4944 char c = s.charAt(i); 4945 if (isHighSurrogate(c)) { 4946 append(UnicodeUtil.combineSurrogatePair(c, s.charAt(i+1))); 4947 i++; 4948 } 4949 else { 4950 append(c); 4951 } 4952 } 4953 4954 } 4955 4956 append(int c)4957 void append(int c) { 4958 4959 if (size < data.length-1) { 4960 data[size] = c; 4961 size++; 4962 } 4963 else { 4964 int[] array = new int[data.length+10]; 4965 System.arraycopy(data, 0, array, 0, size); 4966 data = array; 4967 append(c); 4968 } 4969 4970 } 4971 toString()4972 public String toString() { 4973 4974 StringBuffer sb = new StringBuffer(); 4975 for (int i = 0; i < size; i++) { 4976 int c = data[i]; 4977 if (c <= 0xFFFF) sb.append((char) c); 4978 else { 4979 sb.append(makeSurrogatePair(c)); 4980 } 4981 } 4982 return sb.toString(); 4983 4984 } 4985 isBlocked(int lastStarterIndex, int index)4986 private boolean isBlocked(int lastStarterIndex, int index) { 4987 4988 int combiningClass = getCombiningClass(data[index]); 4989 for (int i = lastStarterIndex+1; i < index; i++) { 4990 if (data[i] !=0 && combiningClass == getCombiningClass(data[i])) { 4991 return true; 4992 } 4993 } 4994 return false; 4995 4996 } 4997 4998 } 4999 5000 5001 } 5002