From 76e4f7caf9440f3ebb667b801fa55f5bc1c4be08 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 5 May 2016 16:32:15 +0200 Subject: [PATCH] remove unmaintained bitsy (ipaq) kernel --- sys/src/9/bitsy/Booting101 | 245 - sys/src/9/bitsy/bitsy | 49 - sys/src/9/bitsy/bitsyreset.s | 103 - sys/src/9/bitsy/clock.c | 254 - sys/src/9/bitsy/dat.h | 289 - sys/src/9/bitsy/defont.c | 291 - sys/src/9/bitsy/devether.c | 594 -- sys/src/9/bitsy/devflash.c | 876 --- sys/src/9/bitsy/devpcmcia.c | 713 -- sys/src/9/bitsy/devpenmouse.c | 510 -- sys/src/9/bitsy/devuda1341.c | 1401 ---- sys/src/9/bitsy/devµc.c | 407 -- sys/src/9/bitsy/etherif.h | 39 - sys/src/9/bitsy/etherwavelan.c | 49 - sys/src/9/bitsy/fns.h | 121 - sys/src/9/bitsy/fpi.c | 300 - sys/src/9/bitsy/fpi.h | 61 - sys/src/9/bitsy/fpiarm.c | 570 -- sys/src/9/bitsy/fpimem.c | 136 - sys/src/9/bitsy/gamma.c | 51 - sys/src/9/bitsy/gamma.h | 8195 ----------------------- sys/src/9/bitsy/init9.s | 12 - sys/src/9/bitsy/io.h | 337 - sys/src/9/bitsy/l.s | 857 --- sys/src/9/bitsy/main.c | 536 -- sys/src/9/bitsy/map | 10 - sys/src/9/bitsy/mem.h | 234 - sys/src/9/bitsy/mkfile | 139 - sys/src/9/bitsy/mmu.c | 532 -- sys/src/9/bitsy/mouse.c | 63 - sys/src/9/bitsy/paqfiles/cpurc | 175 - sys/src/9/bitsy/paqfiles/local | 6 - sys/src/9/bitsy/paqfiles/mfs | 41 - sys/src/9/bitsy/paqfiles/namespace | 53 - sys/src/9/bitsy/paqfiles/startip | 9 - sys/src/9/bitsy/paqfiles/unicode.6.font | 5 - sys/src/9/bitsy/power.c | 358 - sys/src/9/bitsy/sa1110dma.c | 227 - sys/src/9/bitsy/sa1110dma.h | 19 - sys/src/9/bitsy/screen.c | 492 -- sys/src/9/bitsy/screen.h | 14 - sys/src/9/bitsy/sd.h | 0 sys/src/9/bitsy/sdata.c | 2087 ------ sys/src/9/bitsy/tar.c | 81 - sys/src/9/bitsy/trap.c | 926 --- sys/src/9/bitsy/uartsa1110.c | 514 -- sys/src/9/bitsy/wavelan.c | 1223 ---- sys/src/9/bitsy/wavelan.h | 1 - sys/src/9/mkfile | 1 - 49 files changed, 24206 deletions(-) delete mode 100644 sys/src/9/bitsy/Booting101 delete mode 100644 sys/src/9/bitsy/bitsy delete mode 100644 sys/src/9/bitsy/bitsyreset.s delete mode 100644 sys/src/9/bitsy/clock.c delete mode 100644 sys/src/9/bitsy/dat.h delete mode 100644 sys/src/9/bitsy/defont.c delete mode 100644 sys/src/9/bitsy/devether.c delete mode 100644 sys/src/9/bitsy/devflash.c delete mode 100644 sys/src/9/bitsy/devpcmcia.c delete mode 100644 sys/src/9/bitsy/devpenmouse.c delete mode 100644 sys/src/9/bitsy/devuda1341.c delete mode 100644 sys/src/9/bitsy/devµc.c delete mode 100644 sys/src/9/bitsy/etherif.h delete mode 100644 sys/src/9/bitsy/etherwavelan.c delete mode 100644 sys/src/9/bitsy/fns.h delete mode 100644 sys/src/9/bitsy/fpi.c delete mode 100644 sys/src/9/bitsy/fpi.h delete mode 100644 sys/src/9/bitsy/fpiarm.c delete mode 100644 sys/src/9/bitsy/fpimem.c delete mode 100644 sys/src/9/bitsy/gamma.c delete mode 100644 sys/src/9/bitsy/gamma.h delete mode 100644 sys/src/9/bitsy/init9.s delete mode 100644 sys/src/9/bitsy/io.h delete mode 100644 sys/src/9/bitsy/l.s delete mode 100644 sys/src/9/bitsy/main.c delete mode 100644 sys/src/9/bitsy/map delete mode 100644 sys/src/9/bitsy/mem.h delete mode 100644 sys/src/9/bitsy/mkfile delete mode 100644 sys/src/9/bitsy/mmu.c delete mode 100644 sys/src/9/bitsy/mouse.c delete mode 100644 sys/src/9/bitsy/paqfiles/cpurc delete mode 100644 sys/src/9/bitsy/paqfiles/local delete mode 100644 sys/src/9/bitsy/paqfiles/mfs delete mode 100644 sys/src/9/bitsy/paqfiles/namespace delete mode 100644 sys/src/9/bitsy/paqfiles/startip delete mode 100644 sys/src/9/bitsy/paqfiles/unicode.6.font delete mode 100644 sys/src/9/bitsy/power.c delete mode 100644 sys/src/9/bitsy/sa1110dma.c delete mode 100644 sys/src/9/bitsy/sa1110dma.h delete mode 100644 sys/src/9/bitsy/screen.c delete mode 100644 sys/src/9/bitsy/screen.h delete mode 100644 sys/src/9/bitsy/sd.h delete mode 100644 sys/src/9/bitsy/sdata.c delete mode 100644 sys/src/9/bitsy/tar.c delete mode 100644 sys/src/9/bitsy/trap.c delete mode 100644 sys/src/9/bitsy/uartsa1110.c delete mode 100644 sys/src/9/bitsy/wavelan.c delete mode 100644 sys/src/9/bitsy/wavelan.h diff --git a/sys/src/9/bitsy/Booting101 b/sys/src/9/bitsy/Booting101 deleted file mode 100644 index 56b20991b..000000000 --- a/sys/src/9/bitsy/Booting101 +++ /dev/null @@ -1,245 +0,0 @@ - - -The bitsy comes with Wince. To get to Plan 9, you will need a serial cable, -a Windows machine with a serial interface, the CDROM that comes with the bitsy, -and a Plan 9 machine with a serial interface. The Windows machine is used to -get the Linux boot loader onto the bitsy (and to save away wince, if you so -desire). The Plan 9 machine is used to get the plan 9 kernel and a read only -file system onto the bitsy. - -0. charge up the bitsy. - -1. go to - ftp://ftp.handhelds.org/pub/linux/compaq/ipaq/stable/install.html -Get the latest version of the Linux "osloader" and "bootldr" programs -(we have tried versions 1.3.0 and 0000-2.14.8, respectively; newest -versions seem not to allow you to suspend your bitsy due to a bug -which is probably ours). You can find them all at -www.collyer.net/who/geoff/9/bitsy/. - -2. Use ActiveSync to copy osloader and bootldr to the bitsy. Copy or -rename the bootldr binary to "bootldr" on Windows, then copy it to the -bitsy; trying to rename it on WinCE won't produce the right result. - -Steps 3 - 7 may work on a Pocket PC bitsy, but see Steps 3a - 7a -if they don't or if you have a Pocket PC 2002 bitsy. - -3. Run osloader by clicking on it under the WinCE File Explorer - -4. Use osloader to save your WinCE flash away. This takes a while, -as it's 16MB over a 115,200 baud line. - -5. Select "Run" from the osloader menu. Ignore "Run from RAM"; it's -not needed. - -6. At this point, the bitsy's screen turns blank, but you can still -talk to the bitsy over its serial port. The serial port is connected -to the OS loader's terminal program. On Windows, you have to exit -ActiveSync before the serial port is available for a terminal program. -I moved the bitsy and its cable over to a Plan 9 machine and connected -using "con -b 115200 /dev/eia[01]" to talk to the console. The -command "help" lists the OS loader's commands. - -7. Now you need to download the BOOT loader program into flash (right -now, you're only running the OS loader program out of RAM; rebooting -will get you back to WinCE). In the con window, "load bootldr" to the -bitsy. It will indicate that it's starting an xmodem download. -Under con, type "Ctrl-\" to get a ">>>" prompt. At this prompt, you -want to run Plan 9's xms program to pipe the bootldr program to the -bitsy. For example, to download /tmp/bootldr, type "!xms /tmp/bootldr". - -If this step works successfully, the OS loader will print out some sort -of OK checksum message. - -If you have a Pocket PC 2002 or steps 3 - 7 above didn't work for you, -try 3a - 7a. - -3a. Copy BootBlaster (also) to the bitsy via ActiveSync. - -4a. Save your flash by running osloader and selecting "Flash->Save to -File". As it produces 4MB files, use ActiveSync to copy them off the -bitsy. - -5a. Move the bitsy and its cable over to a Plan 9 machine and connect -using "con -b 115200 /dev/eia[01]" to talk to the console. - -6a. Run BootBlaster by clicking on it under the WinCE File Explorer. - -7a. Select "Program"; it should copy "bootldr" into your flash in -about 15 seconds. - -8. Reboot your bitsy (either cycle the power or use the reset -switch). The new boot loader runs out of Flash. You'll get the linux -penguin splash screen and a bunch of options triggered by buttons. -Pick the one that gets you to the boot loader. - -9. Make the partitions you need in the bitsy's flash, type, using -the con program: - partition reset - partition define bootldr 0x000000 0x040000 2 - partition define params 0x040000 0x040000 0 - partition define kernel 0x080000 0x0c0000 0 - partition define user 0x140000 0x0c0000 0 - partition define ramdisk 0x200000 0x600000 0 - partition define fs 0x800000 0x800000 0 - params save - -These are the partitions as shown by partition show: - boot> partition show - argv[1]=partition - npartitions=00000006 - bootldr - base: 00000000 - size: 00040000 - flags: 00000002 - params - base: 00040000 - size: 00040000 - flags: 00000000 - kernel - base: 00080000 - size: 000C0000 - flags: 00000000 - user - base: 00140000 - size: 000C0000 - flags: 00000000 - ramdisk - base: 00200000 - size: 00600000 - flags: 00000000 - fs - base: 00800000 - size: 00800000 - flags: 00000000 - -After each line you'll get a message like `defining partition: params'. -Different versions of the bootloader predefine different partitions. -The bootldr partition is usually predefined, so you don't have to remake -that. You may have to delete one or two partitions. The command is - partition delete -Make sure the partition layout is as given above; some of this knowledge is -built into the kernel. - -10. Before you can fill the new partitions with a kernel and a read-only -file system, you'll have to make them. In the directory /sys/src/9/bitsy, -type mk and mk paqdisk. Before mk-ing paqdisk, make sure you have all -the necessary arm binaries installed in /arm and examine the file -paqfiles/mfs to see what you need to change for connecting to your local -file servers. - -11. Now you can type "load kernel". The boot loader will prompt for -another xmodem download. Again escape using "Ctrl-\", then use -"!xms /sys/src/9/bitsy/9bitsy" (or "!xms /arm/9bitsy" if you've already -installed it). - -12. Download the ramdisk, using "load ramdisk" and -"!xms /sys/src/9/bitsy/paqdisk" (or "!xms /arm/paqdisk" if you've already -installed it), similarly to 10, above. - -13. Type `boot' or `boot flash' depending on your version of the boot loader. -If you need the latter, you may want to - - set boot_type flash - params save - -to make boot flash the default. - -You'll get a Dutch flag (or a French one, if you hold the iPaq the wrong way), -then the boot screen will say, on the serial port, thus in your con window: - - root is from [paq]: - -Just wait a while or hit enter in the con window and it'll continue. - -14. The bitsy will now want to calibrate the screen. It'll put up a -series of crosses that you should press the center of. Hold the pen -down over each cross for a second or so; aim carefully. Hold the -machine in your hand the way you'ld normally use it or the calibration -could be off since there is depth to the glass in the screen. - -15. You'll get a new screen with a single line at the top and a -keyboard/scribble area at the bottom. This is a simple one file -editor. This file is similar to plan9.ini on PC's. There may be -garbage on the top line. If there is, delete the garbage letters. -(Be careful here: the backspace and delete keys are adjacent on the -wee keyboard and it's much too easy to hit delete instead of -backspace, especially if you haven't calibrated the screen dead-on.) -You should be left with a single line containing (with different -numbers): - calibrate='-16374 22919 251 -24' -You need to enter a few more things, including, but not limited to: - - user= - wvkey1= - wvkey2= - wvkey3= - wvtxkey= - wvessid= - auth= - cpu= - proxy= - fs= - -Your best bet is to copy these off a working bitsy. wv*key* only -matter if your wireless network is encrypted. When roaming the world, -omit wv*. When you're done, hit the "ESC" key on the simulated -keyboard, or the side button near the word iPAQ on the bitsy. The -system will now come up as you. However, you'll get a message about -the flash file system being corrupted, because we haven't yet -initialized it. - -16. To set up the file systems, sweep a window and give the following -sequence of commands. - - # aux/mkflashfs /dev/flash/fs - # aux/flashfs - -aux/flashfs created a Plan 9 server in /srv/brzr, which we can use to set up -default directories. - - # mount -c /srv/brzr /n/brzr - # cd /n/brzr - # mkdir n usr - # mkdir n/fs n/emelie n/choline n/nslocum - # mkdir usr/yourname usr/yourfriend - -17. For safety, reboot the system: - - # reboot - -18. Now reboot, go through the Linux splash screen, the Plan 9 boot -editor, and sweep yourself a new rio window. - -Before you can connect to other machines, you need a way to enter -passwords and keys into factotum. The easiest way to do this is to -run - - # auth/fgui & - -in the window you just made. The window will disappear (fgui spends -most of its time hidden), so sweep a new window and run the command - - # mfs - -to connect to file servers. You will probably need to modify mfs to -work in your environment (see point 10), though you can supply many -of the variables it needs in step 15, and doing - - # import $cpu /net - -before running mfs can go a long ways. - -19. When you're all set with a working wavelan, you can download new -kernels more quickly using - - # bitsyload k - -and new paqdisks using - - # bitsyload r - -(r stands for ramdisk, the name of the partition into which paqdisk goes). -Note that overwriting the ramdisk partition will cause the read-only file -system which forms the root of you namespace to fail. You'll need to -reboot immediately after bytsyload r. diff --git a/sys/src/9/bitsy/bitsy b/sys/src/9/bitsy/bitsy deleted file mode 100644 index 8f4c5c753..000000000 --- a/sys/src/9/bitsy/bitsy +++ /dev/null @@ -1,49 +0,0 @@ -dev - root - cons - dup - env - ether netif - flash - ip arp chandial ip ipv6 ipaux iproute netlog nullmedium pktmedium inferno - kprof - mnt - µc - pcmcia cis - draw - penmouse - pipe - proc - cap - srv - ssl - uart - uda1341 - sd - -ip - tcp - udp - ipifc - icmp - icmp6 - gre - ipmux - -link - etherwavelan wavelan - ethermedium - -misc - uartsa1110 - sdata - -port - int cpuserver = 1; - -bootdir - /$objtype/bin/paqfs - /$objtype/bin/auth/factotum - bootfs.paq - boot - diff --git a/sys/src/9/bitsy/bitsyreset.s b/sys/src/9/bitsy/bitsyreset.s deleted file mode 100644 index b3607ae09..000000000 --- a/sys/src/9/bitsy/bitsyreset.s +++ /dev/null @@ -1,103 +0,0 @@ -#include "mem.h" - - // Bitsy development board uses two banks: KM416S4030C, - // 12 row address bits, 8 col address bits - // Bitsy uses two banks KM416S8030C, 12 row address bits, - // 9 col address bits - // Have to set DRAC0 to 14 row bits or else you only get 8 col bits - // from the formfactor unit configuration registers: 0xF3536257 -mdcnfg: // DRAM Configuration Register 10.2.1 - WORD 1<<0 | 1<<2 | 0<<3 | 0x5<<4 | 0x3<<8 | 3<<12 | 3<<14 -mdrefr0: // DRAM Refresh Control Register 10.2.2 - WORD 1<<0 | 0x200<<4 | 1<<21 | 1<<22 | 1 <<31 -mdrefr1: // DRAM Refresh Control Register 10.2.2 - WORD 1<<0 | 0x200<<4 | 1<<21 | 1<<22 -mdrefr2: // DRAM Refresh Control Register 10.2.2 - WORD 1<<0 | 0x200<<4 | 1<<20 | 1<<21 | 1<<22 - - /* MDCAS settings from [1] Table 10-3 (page 10-18) */ -waveform0: - WORD 0xAAAAAAA7 -waveform1: - WORD 0xAAAAAAAA -waveform2: - WORD 0xAAAAAAAA - -delay: // delay without using memory - mov $100, r1 // 200MHz: 100 × (2 instructions @ 5 ns) == 1 ms -l1: - sub $1, r1 - bgt l1 - sub $1, r0 - bgt delay - ret - -reset: - mov $INTREGS+4, r0 // turn off interrupts - mov $0, (r0) - - // Is this necessary on wakeup? - mov $POWERREGS+14, r0 // set clock speed to 191.7MHz - mov $0xb, (r0) - - // This is necessary on hard reset, but not on sleep reset - mov $0x80, r0 // wait ±128 µs - bl delay - - /* check to see if we're operating out of DRAM */ - bic $0x000000ff, pc, r4 - bic $0x0000ff00, r4 - bic $0x00ff0000, r4 - cmp r4, $PHYSDRAM0 - beq dram - -dramwakeup: - - mov $POWERREGS+0x4, r1 // Clear DH in Power Manager Sleep Status Register - bic $(1<<3), (r1) // DH == DRAM Hold - // This releases nCAS/DQM and nRAS/nSDCS pins to make DRAM exit selfrefresh - - /* Set up the DRAM in banks 0 and 1 [1] 10.3 */ - mov $MEMCONFREGS, r1 - - mov mdrefr0, r2 // Turn on K1RUN - mov r2, 0x1c(r1) - - mov mdrefr1, r2 // Turn off SLFRSH - mov r2, 0x1c(r1) - - mov mdrefr2, r2 // Turn on E1PIN - mov r2, 0x1c(r1) - - mov waveform0, r2 - mov r2, 0x4(r1) - - mov waveform1, r2 - mov r2, 0x8(r1) - - mov waveform2, r2 - mov r2, 0xc(r1) - - mov $PHYSDRAM0, r0 - mov 0x00(r0), r2 // Eight non-burst read cycles - mov 0x20(r0), r2 - mov 0x40(r0), r2 - mov 0x60(r0), r2 - mov 0x80(r0), r2 - mov 0xa0(r0), r2 - mov 0xc0(r0), r2 - mov 0xe0(r0), r2 - - mov mdcnfg, r2 // Enable memory banks - mov r2, 0x0(r1) - - // Is there any use in turning on EAPD and KAPD in the MDREFR register? - - ret - - - - -dram: - - diff --git a/sys/src/9/bitsy/clock.c b/sys/src/9/bitsy/clock.c deleted file mode 100644 index ad04d5947..000000000 --- a/sys/src/9/bitsy/clock.c +++ /dev/null @@ -1,254 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "../port/error.h" - - -enum { - RTCREGS = 0x90010000, /* real time clock registers */ - RTSR_al = 0x01, /* alarm detected */ - RTSR_hz = 0x02, /* 1Hz tick */ - RTSR_ale= 0x04, /* alarm interrupt enable */ - RTSR_hze= 0x08, /* 1Hz tick enable */ - - Never = 0xffffffff, -}; - -typedef struct OSTimer -{ - ulong osmr[4]; /* match registers */ - volatile ulong oscr; /* counter register */ - ulong ossr; /* status register */ - ulong ower; /* watchdog enable register */ - ulong oier; /* timer interrupt enable register */ -} OSTimer; - -typedef struct RTCregs -{ - ulong rtar; /* alarm */ - ulong rcnr; /* count */ - ulong rttr; /* trim */ - ulong dummy; /* hole */ - ulong rtsr; /* status */ -} RTCregs; - -OSTimer *timerregs = (OSTimer*)OSTIMERREGS; -RTCregs *rtcregs = (RTCregs*)RTCREGS; -static int clockinited; - -static void clockintr(Ureg*, void*); -static void rtcintr(Ureg*, void*); -static Tval when; /* scheduled time of next interrupt */ - -long timeradjust; - -enum -{ - Minfreq = ClockFreq/HZ, /* At least one interrupt per HZ (50 ms) */ - Maxfreq = ClockFreq/10000, /* At most one interrupt every 100 µs */ -}; - -ulong -clockpower(int on) -{ - static ulong savedtime; - - if (on){ - timerregs->ossr |= 1<<0; - timerregs->oier = 1<<0; - timerregs->osmr[0] = timerregs->oscr + Minfreq; - if (rtcregs->rttr == 0){ - rtcregs->rttr = 0x8000; // nominal frequency. - rtcregs->rcnr = 0; - rtcregs->rtar = 0xffffffff; - rtcregs->rtsr |= RTSR_ale; - rtcregs->rtsr |= RTSR_hze; - } - if (rtcregs->rcnr > savedtime) - return rtcregs->rcnr - savedtime; - } else - savedtime = rtcregs->rcnr; - clockinited = on; - return 0L; -} - -void -clockinit(void) -{ - ulong x; - ulong id; - - /* map the clock registers */ - timerregs = mapspecial(OSTIMERREGS, sizeof(OSTimer)); - rtcregs = mapspecial(RTCREGS, sizeof(RTCregs)); - - /* enable interrupts on match register 0, turn off all others */ - timerregs->ossr |= 1<<0; - intrenable(IRQ, IRQtimer0, clockintr, nil, "clock"); - timerregs->oier = 1<<0; - - /* figure out processor frequency */ - x = powerregs->ppcr & 0x1f; - conf.hz = ClockFreq*(x*4+16); - conf.mhz = (conf.hz+499999)/1000000; - - /* get processor type */ - id = getcpuid(); - - print("%lud MHZ ARM, ver %lux/part %lux/step %lud\n", conf.mhz, - (id>>16)&0xff, (id>>4)&0xfff, id&0xf); - - /* post interrupt 1/HZ secs from now */ - when = timerregs->oscr + Minfreq; - timerregs->osmr[0] = when; - - /* enable RTC interrupts and alarms */ - intrenable(IRQ, IRQrtc, rtcintr, nil, "rtc"); - rtcregs->rttr = 0x8000; // make rcnr 1Hz - rtcregs->rcnr = 0; // reset counter - rtcregs->rtsr |= RTSR_al; - rtcregs->rtsr |= RTSR_ale; - - timersinit(); - - clockinited = 1; -} - -/* turn 32 bit counter into a 64 bit one. since todfix calls - * us at least once a second and we overflow once every 1165 - * seconds, we won't miss an overflow. - */ -uvlong -fastticks(uvlong *hz) -{ - static uvlong high; - static ulong last; - ulong x; - - if(hz != nil) - *hz = ClockFreq; - x = timerregs->oscr; - if(x < last) - high += 1LL<<32; - last = x; - return high+x; -} - -ulong -µs(void) -{ - return fastticks2us(fastticks(nil)); -} - -void -timerset(Tval v) -{ - ulong next, tics; /* Must be unsigned! */ - static int count; - - next = v; - - /* post next interrupt: calculate # of tics from now */ - tics = next - timerregs->oscr - Maxfreq; - if (tics > Minfreq){ - timeradjust++; - next = timerregs->oscr + Maxfreq; - } - timerregs->osmr[0] = next; -} - -static void -clockintr(Ureg *ureg, void*) -{ - /* reset previous interrupt */ - timerregs->ossr |= 1<<0; - when += Minfreq; - timerregs->osmr[0] = when; /* insurance */ - - timerintr(ureg, when); -} - -void -rtcalarm(ulong secs) -{ - vlong t; - - if (t == 0){ - iprint("RTC alarm cancelled\n"); - rtcregs->rtsr &= ~RTSR_ale; - rtcregs->rtar = 0xffffffff; - } else { - t = todget(nil); - t = t / 1000000000ULL; // nsec to secs - if (secs < t) - return; - secs -= t; - iprint("RTC alarm set to %uld seconds from now\n", secs); - rtcregs->rtar = rtcregs->rcnr + secs; - rtcregs->rtsr|= RTSR_ale; - } -} - -static void -rtcintr(Ureg*, void*) -{ - /* reset interrupt */ - rtcregs->rtsr&= ~RTSR_ale; - rtcregs->rtsr&= ~RTSR_al; - - rtcregs->rtar = 0; - iprint("RTC alarm: %lud\n", rtcregs->rcnr); -} - -void -delay(int ms) -{ - ulong start; - int i; - - if(clockinited){ - while(ms-- > 0){ - start = timerregs->oscr; - while(timerregs->oscr-start < ClockFreq/1000) - ; - } - } else { - while(ms-- > 0){ - for(i = 0; i < 1000; i++) - ; - } - } -} - -void -microdelay(int µs) -{ - ulong start; - int i; - - µs++; - if(clockinited){ - start = timerregs->oscr; - while(timerregs->oscr - start < 1UL+(µs*ClockFreq)/1000000UL) - ; - } else { - while(µs-- > 0){ - for(i = 0; i < 10; i++) - ; - } - } -} - -/* - * performance measurement ticks. must be low overhead. - * doesn't have to count over a second. - */ -ulong -perfticks(void) -{ - return timerregs->oscr; -} diff --git a/sys/src/9/bitsy/dat.h b/sys/src/9/bitsy/dat.h deleted file mode 100644 index 896dc986b..000000000 --- a/sys/src/9/bitsy/dat.h +++ /dev/null @@ -1,289 +0,0 @@ -typedef struct Cisdat Cisdat; -typedef struct Conf Conf; -typedef struct Confmem Confmem; -typedef struct FPU FPU; -typedef struct FPenv FPenv; -typedef struct FPsave FPsave; -typedef struct DevConf DevConf; -typedef struct Label Label; -typedef struct Lock Lock; -typedef struct MMU MMU; -typedef struct Mach Mach; -typedef struct Notsave Notsave; -typedef struct Page Page; -typedef struct PCMmap PCMmap; -typedef struct PCMslot PCMslot; -typedef struct PCMconftab PCMconftab; -typedef struct PhysUart PhysUart; -typedef struct PMMU PMMU; -typedef struct Proc Proc; -typedef struct Uart Uart; -typedef struct Ureg Ureg; -typedef struct Vctl Vctl; -typedef long Tval; - -#pragma incomplete Ureg - -typedef void IntrHandler(Ureg*, void*); - -#define MAXSYSARG 5 /* for mount(fd, mpt, flag, arg, srv) */ - -/* - * parameters for sysproc.c - */ -#define AOUT_MAGIC (E_MAGIC) - -struct Lock -{ - ulong key; - ulong sr; - ulong pc; - Proc *p; - Mach *m; - ushort isilock; -}; - -struct Label -{ - ulong sp; - ulong pc; -}; - -/* - * FPsave.status - */ -enum -{ - FPinit, - FPactive, - FPinactive, -}; -struct FPsave -{ - ulong status; - ulong control; - ulong regs[8][3]; /* emulated fp */ -}; - -struct Confmem -{ - ulong base; - ulong npage; - ulong limit; - ulong kbase; - ulong klimit; -}; - -struct Conf -{ - ulong nmach; /* processors */ - ulong nproc; /* processes */ - Confmem mem[2]; - ulong npage; /* total physical pages of memory */ - ulong upages; /* user page pool */ - ulong nimage; /* number of page cache image headers */ - ulong nswap; /* number of swap pages */ - int nswppo; /* max # of pageouts per segment pass */ - ulong copymode; /* 0 is copy on write, 1 is copy on reference */ - int monitor; - ulong ialloc; /* bytes available for interrupt time allocation */ - ulong pipeqsize; /* size in bytes of pipe queues */ - ulong hz; /* processor cycle freq */ - ulong mhz; -}; - -/* - * MMU stuff in proc - */ -enum -{ - NCOLOR= 1, /* 1 level cache, don't worry about VCE's */ - Nmeg= 32, /* maximum size of user space */ -}; - -struct PMMU -{ - Page *l1page[Nmeg]; /* this's process' level 1 entries */ - ulong l1table[Nmeg]; /* ... */ - Page *mmufree; /* free mmu pages */ -}; - -/* - * things saved in the Proc structure during a notify - */ -struct Notsave -{ - int dummy; -}; - -#include "../port/portdat.h" - -struct Mach -{ - int machno; /* physical id of processor */ - ulong splpc; /* pc of last caller to splhi */ - - Proc *proc; /* current process */ - ulong mmupid; /* process id currently in mmu & cache */ - - ulong ticks; /* of the clock since boot time */ - Label sched; /* scheduler wakeup */ - Lock alarmlock; /* access to alarm list */ - void* alarm; /* alarms bound to this clock */ - int inclockintr; - - Proc* readied; /* for runproc */ - ulong schedticks; /* next forced context switch */ - - /* stats */ - int tlbfault; - int tlbpurge; - int pfault; - int cs; - int syscall; - int load; - int intr; - vlong fastclock; /* last sampled value */ - uvlong inidle; /* time spent in idlehands() */ - ulong spuriousintr; - int lastintr; - int ilockdepth; - Perf perf; /* performance counters */ - - int flushmmu; /* make current proc flush it's mmu state */ - Proc *pid2proc[31]; /* what proc holds what pid */ - int lastpid; /* highest assigned pid slot */ - - int cpumhz; /* speed of cpu */ - vlong cpuhz; /* ... */ - uvlong cyclefreq; /* Frequency of user readable cycle counter */ - - /* save areas for exceptions */ - ulong sfiq[5]; - ulong sirq[5]; - ulong sund[5]; - ulong sabt[5]; - - int stack[1]; -}; - -/* - * Fake kmap since we direct map dram - */ -typedef void KMap; -#define VA(k) ((ulong)(k)) -#define kmap(p) (KMap*)((p)->pa) -#define kunmap(k) - -struct -{ - Lock; - char machs[MAXMACH]; /* active CPUs */ - int exiting; /* shutdown */ -}active; - -#define MACHP(n) ((Mach *)(MACHADDR+(n)*BY2PG)) - -extern Mach *m; -extern Proc *up; - -enum -{ - OneMeg= 1024*1024, -}; - -/* - * PCMCIA structures known by both port/cis.c and the pcmcia driver - */ - -/* - * Map between ISA memory space and PCMCIA card memory space. - */ -struct PCMmap { - ulong ca; /* card address */ - ulong cea; /* card end address */ - ulong isa; /* local virtual address */ - int len; /* length of the ISA area */ - int attr; /* attribute memory */ -}; - -/* - * a PCMCIA configuration entry - */ -struct PCMconftab -{ - int index; - ushort irqs; /* legal irqs */ - uchar irqtype; - uchar bit16; /* true for 16 bit access */ - struct { - ulong start; - ulong len; - } io[16]; - int nio; - uchar vpp1; - uchar vpp2; - uchar memwait; - ulong maxwait; - ulong readywait; - ulong otherwait; -}; - -/* - * PCMCIA card slot - */ -struct PCMslot -{ - RWlock; - - Ref ref; - - long memlen; /* memory length */ - uchar slotno; /* slot number */ - void *regs; /* i/o registers */ - void *mem; /* memory */ - void *attr; /* attribute memory */ - - /* status */ - uchar occupied; /* card in the slot */ - uchar configed; /* card configured */ - uchar inserted; /* card just inserted */ - - Dev *dev; /* set in ctlwrite `configure' */ - - /* cis info */ - int cisread; /* set when the cis has been read */ - char verstr[512]; /* version string */ - int ncfg; /* number of configurations */ - struct { - ushort cpresent; /* config registers present */ - ulong caddr; /* relative address of config registers */ - } cfg[8]; - int nctab; /* number of config table entries */ - PCMconftab ctab[8]; - PCMconftab *def; /* default conftab */ - - /* maps are fixed */ - PCMmap memmap; - PCMmap attrmap; -}; - -/* - * hardware info about a device - */ -typedef struct { - ulong port; - int size; -} Devport; - -struct DevConf -{ - RWlock; /* write: configure/unconfigure/suspend; read: normal access */ - ulong mem; /* mapped memory address */ - Devport *ports; /* ports[0]: mapped i/o regs, access size */ - int nports; /* always 1 for the bitsy */ - int itype; /* type of interrupt */ - ulong intnum; /* interrupt number */ - char *type; /* card type, mallocated */ -}; - diff --git a/sys/src/9/bitsy/defont.c b/sys/src/9/bitsy/defont.c deleted file mode 100644 index ac6cd8b1b..000000000 --- a/sys/src/9/bitsy/defont.c +++ /dev/null @@ -1,291 +0,0 @@ -#include -#include -#include - -/* - * /tmp/latin1.6x13, in uncompressed form - */ -uchar -defontdata[] = -{ - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x31,0x35,0x33,0x36,0x20, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x31,0x33,0x20,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2a,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x41,0x0e,0x00,0x60,0xc2,0x0a,0x00, - 0x00,0x00,0x60,0xc2,0x00,0x60,0xc2,0x00,0x00,0xa6,0x0c,0x20,0xa0,0x00,0x01,0x83, - 0x08,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0c,0x00,0x00,0x00,0x00,0x0c,0x00,0x03,0x00,0x00,0x00,0x3f, - 0x30,0x03,0x1c,0x30,0x00,0x00,0x00,0x83,0x00,0x41,0x02,0x00,0x31,0x85,0x14,0x51, - 0xc0,0x00,0x31,0x85,0x14,0x31,0x85,0x14,0x01,0x43,0x18,0x51,0x45,0x00,0x08,0xc6, - 0x14,0x51,0x86,0x1c,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x02,0x00, - 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x08,0x00,0x0c,0x00,0x73,0xe0,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x85,0x00,0x71,0x24,0x0c,0x11,0x00,0x00,0x00,0x00,0x02, - 0x20,0x87,0x3e,0x13,0xe7,0x3e,0x71,0xc0,0x00,0x08,0x08,0x1c,0x70,0x8f,0x1c,0xf3, - 0xef,0x9c,0x89,0xc3,0xa2,0x82,0x28,0x9c,0xf1,0xcf,0x1c,0xfa,0x28,0xa2,0x8a,0x2f, - 0x9c,0x81,0xc2,0x00,0x30,0x08,0x00,0x08,0x03,0x00,0x80,0x00,0x20,0x60,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x23,0x04,0xaa,0x8f,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0x0c,0x80,0x00,0x02,0x22,0x12,0x00,0xc0,0x80,0x00,0x03,0x00, - 0x48,0x04,0x82,0x60,0x06,0xc0,0x00,0x84,0x80,0x49,0x24,0x08,0x00,0x08,0x80,0x01, - 0x40,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x88,0x00,0x00,0x70,0x00, - 0x00,0x00,0x04,0x22,0x60,0xc5,0x0a,0x00,0x00,0x00,0x60,0xc5,0x00,0x60,0xc5,0x00, - 0x09,0x46,0x0c,0x51,0x40,0x00,0x01,0x83,0x14,0x00,0xc8,0x00,0x1b,0xe0,0x00,0x03, - 0x84,0x00,0xc0,0x00,0x00,0xf0,0x0e,0x38,0xc3,0x0c,0x30,0xc2,0x4e,0x38,0x63,0x8e, - 0x38,0xe3,0x8c,0x28,0x00,0x85,0x14,0xa2,0xaa,0x08,0x20,0x82,0x00,0x00,0x00,0x02, - 0x51,0x88,0x82,0x12,0x08,0x82,0x8a,0x20,0x00,0x10,0x04,0x22,0x89,0x44,0xa2,0x4a, - 0x08,0x22,0x88,0x81,0x22,0x82,0x2c,0xa2,0x8a,0x28,0xa2,0x22,0x28,0xa2,0x8a,0x20, - 0x90,0x80,0x45,0x00,0x10,0x08,0x00,0x08,0x04,0x80,0x80,0x81,0x20,0x20,0x00,0x00, - 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x08,0x20,0x8a,0x94,0x77,0xff,0xff,0x1e, - 0xff,0xcf,0xff,0xff,0xc3,0xfc,0x71,0xcf,0x3c,0xf3,0xcf,0x6c,0x71,0xe7,0x1c,0x71, - 0xc7,0x3c,0x73,0xd7,0x00,0x02,0x00,0x8a,0x22,0x10,0x51,0x23,0x82,0x00,0x04,0x80, - 0x48,0x01,0x0c,0x00,0x0a,0x80,0x00,0x84,0xa0,0x51,0x42,0x80,0x71,0xc7,0x1c,0x71, - 0xc7,0xa2,0xfb,0xef,0xbe,0x71,0xc7,0x1c,0x4a,0x27,0x1c,0x71,0xc7,0x00,0x9a,0x28, - 0xa2,0x8a,0x27,0x22,0x31,0x88,0x94,0x51,0xc0,0x00,0x31,0x88,0x94,0x31,0x88,0x94, - 0x7e,0x83,0x18,0x8a,0x85,0x0c,0x00,0xc6,0x22,0x51,0x88,0x14,0x9f,0xee,0x38,0xe2, - 0x0a,0x08,0xa2,0x88,0x22,0x81,0xc8,0x20,0xa2,0x8a,0x28,0xa3,0x48,0x20,0x92,0x08, - 0x20,0x82,0x0a,0x28,0x00,0x85,0x14,0xa1,0x4a,0x10,0x20,0x8a,0x88,0x00,0x00,0x04, - 0x8a,0x88,0x84,0x32,0x08,0x04,0x8a,0x22,0x08,0x20,0x02,0x22,0x8a,0x24,0xa0,0x4a, - 0x08,0x20,0x88,0x81,0x24,0x83,0x6c,0xa2,0x8a,0x28,0xa0,0x22,0x28,0xa2,0x51,0x41, - 0x10,0x40,0x48,0x80,0x08,0x08,0x00,0x08,0x04,0x00,0x80,0x00,0x20,0x20,0x00,0x00, - 0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x08,0x20,0x89,0x2a,0x74,0x71,0xc7,0x7d, - 0x7d,0xd7,0x5d,0xf7,0x5f,0x8d,0xf7,0xd7,0x5d,0x75,0xd7,0x2d,0xf7,0xdb,0x7d,0xf7, - 0xdf,0x5d,0xf5,0xd7,0x00,0x82,0x0c,0x71,0x42,0x10,0x02,0x14,0x84,0x00,0x08,0x40, - 0x48,0x82,0x02,0x00,0x0a,0x80,0x00,0x83,0x10,0x20,0x8d,0x08,0x8a,0x28,0xa2,0x8a, - 0x2a,0x20,0x82,0x08,0x20,0x20,0x82,0x08,0x4b,0x28,0xa2,0x8a,0x28,0x80,0x9a,0x28, - 0xa2,0x89,0x44,0xa6,0x00,0x00,0x00,0x01,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x08,0x00,0x00,0x00,0x00,0x0c,0x08,0x00,0x00,0x00,0x08,0x00,0xff,0xe8,0x20,0x83, - 0x8a,0x1c,0xc2,0x88,0x22,0xe2,0x0e,0x38,0xa2,0x8a,0x28,0xa2,0xce,0x30,0x83,0x8e, - 0x38,0xe2,0x8c,0x28,0x00,0x80,0x3e,0x70,0x44,0x00,0x40,0x4f,0x88,0x00,0x00,0x04, - 0x88,0x80,0x88,0x52,0xc8,0x04,0x8a,0x27,0x1c,0x43,0xe1,0x02,0x9a,0x24,0xa0,0x4a, - 0x08,0x20,0x88,0x81,0x28,0x82,0xaa,0xa2,0x8a,0x28,0xa0,0x22,0x28,0xa2,0x51,0x41, - 0x10,0x40,0x40,0x00,0x01,0xcf,0x1c,0x79,0xc4,0x1c,0xb1,0x83,0x24,0x23,0x4b,0x1c, - 0xf1,0xeb,0x1c,0xf2,0x28,0xa2,0x8a,0x2f,0x88,0x20,0x80,0x14,0xf5,0xf7,0xdf,0x1d, - 0x78,0xcf,0x5d,0xf7,0x47,0x7c,0x71,0xd7,0x5d,0x75,0xd7,0x4c,0x73,0xdf,0x1c,0x71, - 0xc7,0x3d,0x73,0xd7,0x00,0x87,0x12,0x51,0x42,0x1c,0x02,0xd4,0x8a,0xf8,0x0b,0x40, - 0x30,0x87,0x9c,0x01,0x2a,0x80,0x00,0x80,0x28,0x49,0x42,0x88,0x8a,0x28,0xa2,0x8a, - 0x2a,0x20,0x82,0x08,0x20,0x20,0x82,0x08,0x4b,0x28,0xa2,0x8a,0x28,0xa1,0xaa,0x28, - 0xa2,0x89,0x44,0xac,0x71,0xc7,0x1c,0x71,0xcf,0x1c,0x71,0xc7,0x1c,0x61,0x86,0x18, - 0x7a,0xc7,0x1c,0x71,0xc7,0x00,0x72,0x28,0xa2,0x8a,0x2f,0x22,0x1b,0xee,0x38,0xc2, - 0x0e,0x1c,0xa3,0x88,0x14,0x82,0x02,0x08,0xa2,0x8a,0x28,0xa2,0x42,0x20,0x92,0x02, - 0x20,0x82,0x8a,0x28,0x00,0x80,0x14,0x28,0x8a,0x00,0x40,0x47,0x3e,0x03,0xe0,0x08, - 0x88,0x81,0x1c,0x53,0x2f,0x08,0x71,0xe2,0x08,0x80,0x00,0x84,0xaa,0x27,0x20,0x4b, - 0xcf,0x20,0xf8,0x81,0x30,0x82,0xaa,0xa2,0xf2,0x2f,0x1c,0x22,0x25,0x2a,0x20,0x82, - 0x10,0x20,0x40,0x00,0x00,0x28,0xa2,0x8a,0x2f,0x22,0xc8,0x81,0x28,0x22,0xac,0xa2, - 0x8a,0x2c,0xa2,0x42,0x28,0xa2,0x52,0x21,0x30,0x20,0x60,0x2a,0xec,0x71,0xcf,0x7c, - 0x78,0xd7,0x1d,0xfa,0xdf,0x7f,0x7d,0xd7,0x5d,0x75,0xd7,0x6f,0x77,0xdb,0x7f,0x77, - 0xdf,0x5d,0x75,0xd7,0x00,0x8a,0x90,0x50,0x80,0x12,0x02,0x93,0x94,0x09,0xea,0x40, - 0x03,0xe0,0x00,0x01,0x26,0x8c,0x00,0x07,0x94,0x9a,0xa5,0x90,0x8a,0x28,0xa2,0x8a, - 0x2b,0xa0,0xf3,0xcf,0x3c,0x20,0x82,0x08,0xea,0xa8,0xa2,0x8a,0x28,0x92,0xaa,0x28, - 0xa2,0x88,0x85,0xa6,0x08,0x20,0x82,0x08,0x22,0xa2,0x8a,0x28,0xa2,0x20,0x82,0x08, - 0x8b,0x28,0xa2,0x8a,0x28,0x9e,0x9a,0x28,0xa2,0x8a,0x28,0xa2,0x3b,0xe2,0x20,0x83, - 0x8a,0x14,0xc2,0x8e,0x08,0x81,0xce,0x38,0xc3,0x0c,0x30,0xc2,0x4e,0x38,0x63,0x8e, - 0x38,0x83,0x8a,0x10,0x00,0x80,0x3e,0x29,0x09,0x80,0x40,0x4f,0x88,0x00,0x00,0x10, - 0x88,0x82,0x02,0x90,0x28,0x88,0x88,0x20,0x00,0x40,0x01,0x08,0xab,0xe4,0xa0,0x4a, - 0x08,0x26,0x88,0x81,0x28,0x82,0x29,0xa2,0x82,0x2a,0x02,0x22,0x25,0x2a,0x50,0x84, - 0x10,0x10,0x40,0x00,0x01,0xe8,0xa0,0x8b,0xe4,0x22,0x88,0x81,0x30,0x22,0xa8,0xa2, - 0x8a,0x28,0x18,0x42,0x28,0xaa,0x22,0x22,0x08,0x20,0x80,0x14,0xdf,0x77,0xdf,0x1d, - 0x7a,0xcf,0x5c,0x7d,0xdf,0x8c,0x71,0xcf,0x3c,0xf3,0xcf,0x6c,0x71,0xe7,0x1c,0x71, - 0xdf,0x5c,0x75,0xef,0x00,0x8a,0x3c,0x53,0xe2,0x0e,0x02,0xd0,0x28,0x09,0xea,0x40, - 0x00,0x80,0x00,0x01,0x22,0x8c,0x00,0x00,0x0a,0x28,0x2a,0xa0,0xfb,0xef,0xbe,0xfb, - 0xee,0x20,0x82,0x08,0x20,0x20,0x82,0x08,0x4a,0xa8,0xa2,0x8a,0x28,0x8c,0xaa,0x28, - 0xa2,0x88,0x86,0x22,0x79,0xe7,0x9e,0x79,0xe7,0xa0,0xfb,0xef,0xbe,0x20,0x82,0x08, - 0x8a,0x28,0xa2,0x8a,0x28,0x9e,0xaa,0x28,0xa2,0x8a,0x28,0xa2,0x33,0xee,0x38,0xf0, - 0xc5,0x3e,0x72,0x87,0x00,0x79,0xc0,0x00,0x20,0x01,0x0e,0x18,0xa4,0x98,0x49,0x16, - 0x1c,0x71,0xc7,0x1c,0x00,0x80,0x14,0x71,0x49,0x00,0x20,0x8a,0x88,0x00,0x00,0x10, - 0x88,0x84,0x02,0xf8,0x28,0x90,0x88,0x20,0x00,0x23,0xe2,0x08,0xb2,0x24,0xa0,0x4a, - 0x08,0x22,0x88,0x81,0x24,0x82,0x29,0xa2,0x82,0x29,0x02,0x22,0x25,0x2a,0x50,0x84, - 0x10,0x10,0x40,0x00,0x02,0x28,0xa0,0x8a,0x04,0x22,0x88,0x81,0x28,0x22,0xa8,0xa2, - 0x8a,0x28,0x04,0x42,0x25,0x2a,0x22,0x64,0x08,0x20,0x80,0x2a,0xdc,0x71,0xc3,0xce, - 0xb0,0x63,0x5e,0x3f,0xe1,0x8f,0xff,0xf7,0xff,0xbc,0x79,0xd6,0xd9,0xed,0xba,0x78, - 0xe3,0x8e,0x38,0xe3,0x00,0x8a,0x08,0x50,0x82,0x02,0x02,0x17,0x94,0x08,0x08,0x40, - 0x00,0x80,0x00,0x01,0x22,0x80,0x00,0x00,0x14,0x48,0x44,0xa2,0x8a,0x28,0xa2,0x8a, - 0x2a,0x20,0x82,0x08,0x20,0x20,0x82,0x08,0x4a,0x68,0xa2,0x8a,0x28,0x8c,0xca,0x28, - 0xa2,0x88,0x84,0x22,0x8a,0x28,0xa2,0x8a,0x2a,0x20,0x82,0x08,0x20,0x20,0x82,0x08, - 0x8a,0x28,0xa2,0x8a,0x28,0x80,0xaa,0x28,0xa2,0x8a,0x68,0xa6,0x33,0xe4,0x92,0x41, - 0x25,0x08,0x41,0xc4,0x3e,0x41,0x23,0x04,0x20,0x42,0x82,0x28,0xa6,0x94,0x69,0xb5, - 0x10,0x41,0x04,0x10,0x00,0x00,0x14,0x22,0xa6,0x80,0x20,0x82,0x00,0x30,0x02,0x20, - 0x50,0x88,0x22,0x12,0x28,0x90,0x8a,0x22,0x0c,0x10,0x04,0x00,0x82,0x24,0xa2,0x4a, - 0x08,0x22,0x88,0x89,0x22,0x82,0x28,0xa2,0x82,0xa8,0xa2,0x22,0x22,0x36,0x88,0x88, - 0x10,0x08,0x40,0x00,0x02,0x28,0xa2,0x8a,0x24,0x1e,0x88,0x81,0x24,0x22,0xa8,0xa2, - 0xf1,0xe8,0x22,0x4a,0x65,0x2a,0x51,0xa8,0x08,0x20,0x80,0x14,0xfe,0xdb,0x6f,0xb6, - 0xbd,0xef,0x8e,0xf0,0x6f,0xb7,0x3e,0xf7,0xef,0x5f,0x75,0xd6,0x5a,0xe5,0x92,0xbb, - 0xef,0xbe,0xfb,0xef,0x00,0x8a,0xbc,0x73,0xe2,0x02,0x01,0x20,0x0a,0x00,0x04,0x80, - 0x03,0xe0,0x00,0x01,0x62,0x80,0x00,0x00,0x28,0x78,0x87,0xa2,0x8a,0x28,0xa2,0x8a, - 0x2a,0x22,0x82,0x08,0x20,0x20,0x82,0x08,0x4a,0x68,0xa2,0x8a,0x28,0x92,0xca,0x28, - 0xa2,0x88,0x84,0x26,0x8a,0x28,0xa2,0x8a,0x2a,0xa2,0x8a,0x28,0xa2,0x20,0x82,0x08, - 0x8a,0x28,0xa2,0x8a,0x28,0x8c,0xca,0x69,0xa6,0x99,0xa8,0x9a,0x03,0xe3,0x0c,0x61, - 0x26,0x00,0x70,0x86,0x08,0x71,0xc4,0x84,0x20,0x41,0x04,0x48,0xc5,0x98,0x59,0x56, - 0x1c,0x71,0xc7,0x1c,0x00,0x80,0x00,0x02,0x40,0x00,0x11,0x00,0x00,0x20,0x07,0x20, - 0x23,0xef,0x9c,0x11,0xc7,0x10,0x71,0xc7,0x08,0x08,0x08,0x08,0x7a,0x2f,0x1c,0xf3, - 0xe8,0x1c,0x89,0xc6,0x22,0xfa,0x28,0x9c,0x81,0xc8,0x9c,0x21,0xc2,0x22,0x88,0x8f, - 0x9c,0x09,0xc0,0x00,0x01,0xef,0x1c,0x79,0xc4,0x02,0x89,0xc9,0x22,0x72,0x28,0x9c, - 0x80,0x28,0x1c,0x31,0xa2,0x14,0x88,0x2f,0x86,0x23,0x00,0x2a,0xdf,0x3c,0xe7,0xb6, - 0x7f,0xe3,0xde,0x7d,0xe3,0x8e,0xde,0xf7,0xef,0xbe,0xed,0xce,0x99,0xe9,0xaa,0x78, - 0xe3,0x8e,0x38,0xe3,0xc0,0x87,0x2a,0x88,0x82,0x12,0x00,0xc0,0x04,0x00,0x03,0x00, - 0x00,0x00,0x00,0x01,0xa2,0x80,0x10,0x00,0x10,0x08,0xe0,0x9c,0x8a,0x28,0xa2,0x8a, - 0x2b,0x9c,0xfb,0xef,0xbe,0x71,0xc7,0x1c,0xf2,0x27,0x1c,0x71,0xc7,0x21,0x71,0xc7, - 0x1c,0x70,0x84,0x2c,0x79,0xe7,0x9e,0x79,0xe7,0x1c,0x71,0xc7,0x1c,0x71,0xc7,0x1c, - 0x7a,0x27,0x1c,0x71,0xc7,0x0c,0x71,0xa6,0x9a,0x68,0x2f,0x02,0x03,0xe3,0x0c,0x40, - 0xc5,0x00,0x10,0x84,0x08,0x41,0x44,0x84,0x20,0x42,0x02,0x7c,0xa4,0x94,0x49,0x15, - 0x04,0x10,0x41,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x02,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x00,0x00,0x22,0x00,0x09,0x00,0x00,0x00,0x00, - 0x80,0x20,0x00,0x00,0x00,0x00,0x02,0x20,0x00,0x00,0x00,0x14,0xff,0x3c,0xef,0xce, - 0xbf,0xfb,0xde,0xfd,0xef,0xae,0xde,0xf7,0xef,0x7f,0x60,0xd6,0xda,0xed,0xba,0xbe, - 0xfb,0xef,0xbe,0xfb,0xc0,0x02,0x38,0x00,0x00,0x0c,0x00,0x00,0x02,0x00,0x00,0x00, - 0x00,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00, - 0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x02,0x28,0x22,0x00,0x04,0x92,0x40, - 0x24,0x80,0x70,0x84,0x08,0x41,0x23,0x04,0x38,0x43,0x8e,0x08,0x94,0x98,0x49,0x16, - 0x1c,0x71,0xc7,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x06,0x00,0x00,0x00,0x00, - 0x80,0x20,0x00,0x00,0x00,0x00,0x01,0xc0,0x00,0x00,0x00,0x2a,0x02,0xdb,0x6f,0xf6, - 0xdf,0xe3,0xde,0xfd,0xef,0xb7,0x3e,0xf1,0xef,0x1c,0x7d,0xda,0xd9,0xed,0xba,0x78, - 0xe3,0x8e,0x38,0xe3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc8,0x1c, - 0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0x32,0x35,0x36,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0x31,0x33,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x31,0x31, - 0x20,0x00,0x00,0x02,0x0a,0x00,0x06,0x06,0x00,0x02,0x0c,0x00,0x06,0x0c,0x00,0x04, - 0x0d,0x00,0x06,0x12,0x00,0x04,0x0d,0x00,0x06,0x18,0x00,0x04,0x0d,0x00,0x06,0x1e, - 0x00,0x03,0x0d,0x00,0x06,0x24,0x00,0x03,0x0d,0x00,0x06,0x2a,0x00,0x04,0x0a,0x00, - 0x06,0x30,0x00,0x03,0x0d,0x00,0x06,0x36,0x00,0x04,0x0d,0x00,0x06,0x3c,0x00,0x04, - 0x0d,0x00,0x06,0x42,0x00,0x04,0x0d,0x00,0x06,0x48,0x00,0x03,0x0d,0x00,0x06,0x4e, - 0x00,0x04,0x0d,0x00,0x06,0x54,0x00,0x03,0x0d,0x00,0x06,0x5a,0x00,0x03,0x0d,0x00, - 0x06,0x60,0x00,0x03,0x0d,0x00,0x06,0x66,0x00,0x03,0x0d,0x00,0x06,0x6c,0x00,0x03, - 0x0d,0x00,0x06,0x72,0x00,0x03,0x0d,0x00,0x06,0x78,0x00,0x03,0x0d,0x00,0x06,0x7e, - 0x00,0x03,0x0d,0x00,0x06,0x84,0x00,0x03,0x0d,0x00,0x06,0x8a,0x00,0x03,0x0d,0x00, - 0x06,0x90,0x00,0x03,0x0d,0x00,0x06,0x96,0x00,0x03,0x0d,0x00,0x06,0x9c,0x00,0x03, - 0x0d,0x00,0x06,0xa2,0x00,0x03,0x0d,0x00,0x06,0xa8,0x00,0x03,0x0d,0x00,0x06,0xae, - 0x00,0x03,0x0d,0x00,0x06,0xb4,0x00,0x03,0x0d,0x00,0x06,0xba,0x00,0x03,0x0d,0x00, - 0x06,0xc0,0x00,0x00,0x00,0x00,0x06,0xc6,0x00,0x02,0x0b,0x00,0x06,0xcc,0x00,0x02, - 0x05,0x00,0x06,0xd2,0x00,0x03,0x0a,0x00,0x06,0xd8,0x00,0x01,0x0a,0x00,0x06,0xde, - 0x00,0x02,0x0b,0x00,0x06,0xe4,0x00,0x02,0x0a,0x00,0x06,0xea,0x00,0x02,0x05,0x00, - 0x06,0xf0,0x00,0x02,0x0b,0x00,0x06,0xf6,0x00,0x02,0x0b,0x00,0x06,0xfc,0x00,0x03, - 0x0a,0x00,0x06,0x02,0x01,0x04,0x09,0x00,0x06,0x08,0x01,0x09,0x0c,0x00,0x06,0x0e, - 0x01,0x06,0x07,0x00,0x06,0x14,0x01,0x09,0x0c,0x00,0x06,0x1a,0x01,0x02,0x0b,0x00, - 0x06,0x20,0x01,0x02,0x0b,0x00,0x06,0x26,0x01,0x02,0x0b,0x00,0x06,0x2c,0x01,0x02, - 0x0b,0x00,0x06,0x32,0x01,0x02,0x0b,0x00,0x06,0x38,0x01,0x02,0x0b,0x00,0x06,0x3e, - 0x01,0x02,0x0b,0x00,0x06,0x44,0x01,0x02,0x0b,0x00,0x06,0x4a,0x01,0x02,0x0b,0x00, - 0x06,0x50,0x01,0x02,0x0b,0x00,0x06,0x56,0x01,0x02,0x0b,0x00,0x06,0x5c,0x01,0x00, - 0x0d,0x00,0x06,0x62,0x01,0x00,0x0d,0x00,0x06,0x68,0x01,0x02,0x0b,0x00,0x06,0x6e, - 0x01,0x00,0x0d,0x00,0x06,0x74,0x01,0x02,0x0b,0x00,0x06,0x7a,0x01,0x02,0x0b,0x00, - 0x06,0x80,0x01,0x02,0x0b,0x00,0x06,0x86,0x01,0x02,0x0b,0x00,0x06,0x8c,0x01,0x02, - 0x0b,0x00,0x06,0x92,0x01,0x02,0x0b,0x00,0x06,0x98,0x01,0x02,0x0b,0x00,0x06,0x9e, - 0x01,0x02,0x0b,0x00,0x06,0xa4,0x01,0x02,0x0b,0x00,0x06,0xaa,0x01,0x02,0x0b,0x00, - 0x06,0xb0,0x01,0x02,0x0b,0x00,0x06,0xb6,0x01,0x02,0x0b,0x00,0x06,0xbc,0x01,0x02, - 0x0b,0x00,0x06,0xc2,0x01,0x02,0x0b,0x00,0x06,0xc8,0x01,0x02,0x0b,0x00,0x06,0xce, - 0x01,0x02,0x0b,0x00,0x06,0xd4,0x01,0x02,0x0b,0x00,0x06,0xda,0x01,0x02,0x0b,0x00, - 0x06,0xe0,0x01,0x02,0x0b,0x00,0x06,0xe6,0x01,0x02,0x0c,0x00,0x06,0xec,0x01,0x02, - 0x0b,0x00,0x06,0xf2,0x01,0x02,0x0b,0x00,0x06,0xf8,0x01,0x02,0x0b,0x00,0x06,0xfe, - 0x01,0x02,0x0b,0x00,0x06,0x04,0x02,0x02,0x0b,0x00,0x06,0x0a,0x02,0x02,0x0b,0x00, - 0x06,0x10,0x02,0x02,0x0b,0x00,0x06,0x16,0x02,0x02,0x0b,0x00,0x06,0x1c,0x02,0x02, - 0x0b,0x00,0x06,0x22,0x02,0x02,0x0b,0x00,0x06,0x28,0x02,0x02,0x0b,0x00,0x06,0x2e, - 0x02,0x02,0x0b,0x00,0x06,0x34,0x02,0x02,0x05,0x00,0x06,0x3a,0x02,0x0b,0x0c,0x00, - 0x06,0x40,0x02,0x02,0x05,0x00,0x06,0x46,0x02,0x05,0x0b,0x00,0x06,0x4c,0x02,0x02, - 0x0b,0x00,0x06,0x52,0x02,0x05,0x0b,0x00,0x06,0x58,0x02,0x02,0x0b,0x00,0x06,0x5e, - 0x02,0x05,0x0b,0x00,0x06,0x64,0x02,0x02,0x0b,0x00,0x06,0x6a,0x02,0x05,0x0d,0x00, - 0x06,0x70,0x02,0x02,0x0b,0x00,0x06,0x76,0x02,0x03,0x0b,0x00,0x06,0x7c,0x02,0x03, - 0x0d,0x00,0x06,0x82,0x02,0x02,0x0b,0x00,0x06,0x88,0x02,0x02,0x0b,0x00,0x06,0x8e, - 0x02,0x05,0x0b,0x00,0x06,0x94,0x02,0x05,0x0b,0x00,0x06,0x9a,0x02,0x05,0x0b,0x00, - 0x06,0xa0,0x02,0x05,0x0d,0x00,0x06,0xa6,0x02,0x05,0x0d,0x00,0x06,0xac,0x02,0x05, - 0x0b,0x00,0x06,0xb2,0x02,0x05,0x0b,0x00,0x06,0xb8,0x02,0x03,0x0b,0x00,0x06,0xbe, - 0x02,0x05,0x0b,0x00,0x06,0xc4,0x02,0x05,0x0b,0x00,0x06,0xca,0x02,0x05,0x0b,0x00, - 0x06,0xd0,0x02,0x05,0x0b,0x00,0x06,0xd6,0x02,0x05,0x0d,0x00,0x06,0xdc,0x02,0x05, - 0x0b,0x00,0x06,0xe2,0x02,0x02,0x0b,0x00,0x06,0xe8,0x02,0x02,0x0b,0x00,0x06,0xee, - 0x02,0x02,0x0b,0x00,0x06,0xf4,0x02,0x02,0x05,0x00,0x06,0xfa,0x02,0x00,0x0d,0x00, - 0x06,0x00,0x03,0x00,0x0c,0x00,0x06,0x06,0x03,0x00,0x0d,0x00,0x06,0x0c,0x03,0x00, - 0x0d,0x00,0x06,0x12,0x03,0x00,0x0d,0x00,0x06,0x18,0x03,0x00,0x0d,0x00,0x06,0x1e, - 0x03,0x00,0x0d,0x00,0x06,0x24,0x03,0x00,0x0d,0x00,0x06,0x2a,0x03,0x00,0x0d,0x00, - 0x06,0x30,0x03,0x00,0x0d,0x00,0x06,0x36,0x03,0x00,0x0d,0x00,0x06,0x3c,0x03,0x00, - 0x0d,0x00,0x06,0x42,0x03,0x00,0x0d,0x00,0x06,0x48,0x03,0x00,0x0d,0x00,0x06,0x4e, - 0x03,0x00,0x0d,0x00,0x06,0x54,0x03,0x00,0x0d,0x00,0x06,0x5a,0x03,0x00,0x0d,0x00, - 0x06,0x60,0x03,0x00,0x0d,0x00,0x06,0x66,0x03,0x00,0x0d,0x00,0x06,0x6c,0x03,0x00, - 0x0d,0x00,0x06,0x72,0x03,0x00,0x0d,0x00,0x06,0x78,0x03,0x00,0x0d,0x00,0x06,0x7e, - 0x03,0x00,0x0d,0x00,0x06,0x84,0x03,0x00,0x0d,0x00,0x06,0x8a,0x03,0x00,0x0d,0x00, - 0x06,0x90,0x03,0x00,0x0d,0x00,0x06,0x96,0x03,0x00,0x0d,0x00,0x06,0x9c,0x03,0x00, - 0x0d,0x00,0x06,0xa2,0x03,0x00,0x0d,0x00,0x06,0xa8,0x03,0x00,0x0d,0x00,0x00,0xae, - 0x03,0x00,0x0d,0x00,0x00,0xb4,0x03,0x00,0x0d,0x00,0x00,0xba,0x03,0x00,0x0d,0x00, - 0x00,0xc0,0x03,0x01,0x0c,0x00,0x06,0xc6,0x03,0x02,0x0b,0x00,0x06,0xcc,0x03,0x03, - 0x0c,0x00,0x06,0xd2,0x03,0x04,0x0c,0x00,0x06,0xd8,0x03,0x03,0x0b,0x00,0x06,0xde, - 0x03,0x02,0x0b,0x00,0x06,0xe4,0x03,0x02,0x0b,0x00,0x06,0xea,0x03,0x01,0x0c,0x00, - 0x06,0xf0,0x03,0x03,0x04,0x00,0x06,0xf6,0x03,0x02,0x0b,0x00,0x06,0xfc,0x03,0x01, - 0x09,0x00,0x06,0x02,0x04,0x03,0x0c,0x00,0x06,0x08,0x04,0x05,0x09,0x00,0x06,0x0e, - 0x04,0x06,0x08,0x00,0x06,0x14,0x04,0x02,0x0b,0x00,0x06,0x1a,0x04,0x01,0x02,0x00, - 0x06,0x20,0x04,0x01,0x06,0x00,0x06,0x26,0x04,0x04,0x0a,0x00,0x06,0x2c,0x04,0x01, - 0x06,0x00,0x06,0x32,0x04,0x01,0x06,0x00,0x06,0x38,0x04,0x00,0x03,0x00,0x06,0x3e, - 0x04,0x05,0x0c,0x00,0x06,0x44,0x04,0x02,0x0b,0x00,0x06,0x4a,0x04,0x06,0x08,0x00, - 0x06,0x50,0x04,0x0a,0x0d,0x00,0x06,0x56,0x04,0x01,0x06,0x00,0x06,0x5c,0x04,0x01, - 0x07,0x00,0x06,0x62,0x04,0x03,0x0c,0x00,0x06,0x68,0x04,0x00,0x0b,0x00,0x06,0x6e, - 0x04,0x00,0x0b,0x00,0x06,0x74,0x04,0x00,0x0b,0x00,0x06,0x7a,0x04,0x02,0x0b,0x00, - 0x06,0x80,0x04,0x00,0x0b,0x00,0x06,0x86,0x04,0x00,0x0b,0x00,0x06,0x8c,0x04,0x00, - 0x0b,0x00,0x06,0x92,0x04,0x00,0x0b,0x00,0x06,0x98,0x04,0x01,0x0b,0x00,0x06,0x9e, - 0x04,0x01,0x0b,0x00,0x06,0xa4,0x04,0x03,0x0b,0x00,0x06,0xaa,0x04,0x02,0x0d,0x00, - 0x06,0xb0,0x04,0x00,0x0b,0x00,0x06,0xb6,0x04,0x00,0x0b,0x00,0x06,0xbc,0x04,0x00, - 0x0b,0x00,0x06,0xc2,0x04,0x01,0x0b,0x00,0x06,0xc8,0x04,0x00,0x0b,0x00,0x06,0xce, - 0x04,0x00,0x0b,0x00,0x06,0xd4,0x04,0x00,0x0b,0x00,0x06,0xda,0x04,0x01,0x0b,0x00, - 0x06,0xe0,0x04,0x02,0x0b,0x00,0x06,0xe6,0x04,0x00,0x0b,0x00,0x06,0xec,0x04,0x00, - 0x0b,0x00,0x06,0xf2,0x04,0x00,0x0b,0x00,0x06,0xf8,0x04,0x00,0x0b,0x00,0x06,0xfe, - 0x04,0x00,0x0b,0x00,0x06,0x04,0x05,0x01,0x0b,0x00,0x06,0x0a,0x05,0x05,0x0b,0x00, - 0x06,0x10,0x05,0x01,0x0c,0x00,0x06,0x16,0x05,0x00,0x0b,0x00,0x06,0x1c,0x05,0x00, - 0x0b,0x00,0x06,0x22,0x05,0x00,0x0b,0x00,0x06,0x28,0x05,0x01,0x0b,0x00,0x06,0x2e, - 0x05,0x00,0x0b,0x00,0x06,0x34,0x05,0x01,0x0b,0x00,0x06,0x3a,0x05,0x01,0x0c,0x00, - 0x06,0x40,0x05,0x02,0x0b,0x00,0x06,0x46,0x05,0x02,0x0b,0x00,0x06,0x4c,0x05,0x01, - 0x0b,0x00,0x06,0x52,0x05,0x02,0x0b,0x00,0x06,0x58,0x05,0x03,0x0b,0x00,0x06,0x5e, - 0x05,0x03,0x0b,0x00,0x06,0x64,0x05,0x05,0x0b,0x00,0x06,0x6a,0x05,0x05,0x0d,0x00, - 0x06,0x70,0x05,0x02,0x0b,0x00,0x06,0x76,0x05,0x02,0x0b,0x00,0x06,0x7c,0x05,0x01, - 0x0b,0x00,0x06,0x82,0x05,0x03,0x0b,0x00,0x06,0x88,0x05,0x02,0x0b,0x00,0x06,0x8e, - 0x05,0x02,0x0b,0x00,0x06,0x94,0x05,0x01,0x0b,0x00,0x06,0x9a,0x05,0x03,0x0b,0x00, - 0x06,0xa0,0x05,0x02,0x0b,0x00,0x06,0xa6,0x05,0x02,0x0b,0x00,0x06,0xac,0x05,0x02, - 0x0b,0x00,0x06,0xb2,0x05,0x02,0x0b,0x00,0x06,0xb8,0x05,0x01,0x0b,0x00,0x06,0xbe, - 0x05,0x02,0x0b,0x00,0x06,0xc4,0x05,0x03,0x0b,0x00,0x06,0xca,0x05,0x03,0x0b,0x00, - 0x06,0xd0,0x05,0x04,0x0c,0x00,0x06,0xd6,0x05,0x02,0x0b,0x00,0x06,0xdc,0x05,0x02, - 0x0b,0x00,0x06,0xe2,0x05,0x01,0x0b,0x00,0x06,0xe8,0x05,0x03,0x0b,0x00,0x06,0xee, - 0x05,0x02,0x0d,0x00,0x06,0xf4,0x05,0x01,0x0d,0x00,0x06,0xfa,0x05,0x03,0x0d,0x00, - 0x06,0x00,0x06,0x00,0x00,0x00,0x00, - - -}; - -int sizeofdefont = sizeof defontdata; - -void -_unpackinfo(Fontchar *fc, uchar *p, int n) -{ - int j; - - for(j=0; j<=n; j++){ - fc->x = p[0]|(p[1]<<8); - fc->top = p[2]; - fc->bottom = p[3]; - fc->left = p[4]; - fc->width = p[5]; - fc++; - p += 6; - } -} diff --git a/sys/src/9/bitsy/devether.c b/sys/src/9/bitsy/devether.c deleted file mode 100644 index 6a090330b..000000000 --- a/sys/src/9/bitsy/devether.c +++ /dev/null @@ -1,594 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "../port/error.h" -#include "../port/netif.h" - -#include "etherif.h" - -static volatile Ether *etherxx[MaxEther]; - -static struct { - char* type; - int (*reset)(Ether*); -} cards[MaxEther+1]; - -void -addethercard(char* t, int (*r)(Ether*)) -{ - static int ncard; - - if(ncard == MaxEther) - panic("too many ether cards"); - cards[ncard].type = t; - cards[ncard].reset = r; - ncard++; -} - -void -etherpower(int on) -{ - int i; - Ether *ether; - /* Power all ether cards on or off */ - -iprint("etherpower %d\n", on); - for (i = 0; i < MaxEther; i++){ - if ((ether = etherxx[i]) == nil) - continue; - if(on){ - if (ether->writer == 0){ - print("etherpower: already powered up\n"); - continue; - } - if (ether->power) - ether->power(ether, on); - wunlock(ether); - /* Unlock when power restored */ - }else{ - if (ether->writer != 0){ - print("etherpower: already powered down\n"); - continue; - } - /* Keep locked until power goes back on */ - wlock(ether); - if (ether->power) - ether->power(ether, on); - } - } -} - -int -etherconfig(int on, char *spec, DevConf *cf) -{ - Ether *ether; - int n, ctlrno; - char name[32], buf[128]; - char *p, *e; - - ctlrno = atoi(spec); - sprint(name, "ether%d", ctlrno); - - if(on == 0) - return -1; - - if(etherxx[ctlrno] != nil) - return -1; - - ether = malloc(sizeof(Ether)); - if(ether == nil) - panic("etherconfig"); - ether->DevConf = *cf; - - for(n = 0; cards[n].type; n++){ - if(strcmp(cards[n].type, ether->type) != 0) - continue; - if(cards[n].reset(ether)) - break; - - if(ether->mbps >= 100){ - netifinit(ether, name, Ntypes, 256*1024); - if(ether->oq == 0) - ether->oq = qopen(256*1024, Qmsg, 0, 0); - } - else{ - netifinit(ether, name, Ntypes, 65*1024); - if(ether->oq == 0) - ether->oq = qopen(65*1024, Qmsg, 0, 0); - } - if(ether->oq == 0) - panic("etherreset %s", name); - ether->alen = Eaddrlen; - memmove(ether->addr, ether->ea, Eaddrlen); - memset(ether->bcast, 0xFF, Eaddrlen); - ether->mbps = 10; - ether->minmtu = ETHERMINTU; - ether->maxmtu = ETHERMAXTU; - - if(ether->interrupt != nil) - intrenable(cf->itype, cf->intnum, ether->interrupt, ether, name); - - p = buf; - e = buf+sizeof(buf); - p = seprint(p, e, "#l%d: %s: %dMbps port 0x%luX", - ctlrno, ether->type, ether->mbps, ether->ports[0].port); - if(ether->mem) - p = seprint(p, e, " addr 0x%luX", PADDR(ether->mem)); - if(ether->ports[0].size) - p = seprint(p, e, " size 0x%X", ether->ports[0].size); - p = seprint(p, e, ": %2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux", - ether->ea[0], ether->ea[1], ether->ea[2], - ether->ea[3], ether->ea[4], ether->ea[5]); - seprint(p, e, "\n"); - print("%s", buf); - - etherxx[ctlrno] = ether; - return 0; - } - - if (ether->type) - free(ether->type); - free(ether); - return -1; -} - -Chan* -etherattach(char* spec) -{ - ulong ctlrno; - char *p; - Chan *chan; - Ether *ether; - - ctlrno = 0; - if(spec && *spec){ - ctlrno = strtoul(spec, &p, 0); - if((ctlrno == 0 && p == spec) || *p || (ctlrno >= MaxEther)) - error(Ebadarg); - } - if((ether = etherxx[ctlrno]) == 0) - error(Enodev); - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - chan = devattach('l', spec); - chan->dev = ctlrno; - if(ether->attach) - ether->attach(ether); - poperror(); - runlock(ether); - return chan; -} - -static Walkqid* -etherwalk(Chan* chan, Chan* nchan, char** name, int nname) -{ - Walkqid *q; - Ether *ether; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - q = netifwalk(ether, chan, nchan, name, nname); - poperror(); - runlock(ether); - return q; -} - -static int -etherstat(Chan* chan, uchar* dp, int n) -{ - int s; - Ether *ether; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - s = netifstat(ether, chan, dp, n); - poperror(); - runlock(ether); - return s; -} - -static Chan* -etheropen(Chan* chan, int omode) -{ - Chan *c; - Ether *ether; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - c = netifopen(ether, chan, omode); - poperror(); - runlock(ether); - return c; -} - -static void -ethercreate(Chan*, char*, int, ulong) -{ -} - -static void -etherclose(Chan* chan) -{ - Ether *ether; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - netifclose(ether, chan); - poperror(); - runlock(ether); -} - -static long -etherread(Chan* chan, void* buf, long n, vlong off) -{ - Ether *ether; - ulong offset = off; - long r; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - if((chan->qid.type & QTDIR) == 0 && ether->ifstat){ - /* - * With some controllers it is necessary to reach - * into the chip to extract statistics. - */ - if(NETTYPE(chan->qid.path) == Nifstatqid){ - r = ether->ifstat(ether, buf, n, offset); - goto out; - } - if(NETTYPE(chan->qid.path) == Nstatqid) - ether->ifstat(ether, buf, 0, offset); - } - r = netifread(ether, chan, buf, n, offset); -out: - poperror(); - runlock(ether); - return r; -} - -static Block* -etherbread(Chan* chan, long n, ulong offset) -{ - Block *b; - Ether *ether; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - b = netifbread(ether, chan, n, offset); - poperror(); - runlock(ether); - return b; -} - -static int -etherwstat(Chan* chan, uchar* dp, int n) -{ - Ether *ether; - int r; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - r = netifwstat(ether, chan, dp, n); - poperror(); - runlock(ether); - return r; -} - -static void -etherrtrace(Netfile* f, Etherpkt* pkt, int len) -{ - int i, n; - Block *bp; - - if(qwindow(f->in) <= 0) - return; - if(len > 58) - n = 58; - else - n = len; - bp = iallocb(64); - if(bp == nil) - return; - memmove(bp->wp, pkt->d, n); - i = TK2MS(MACHP(0)->ticks); - bp->wp[58] = len>>8; - bp->wp[59] = len; - bp->wp[60] = i>>24; - bp->wp[61] = i>>16; - bp->wp[62] = i>>8; - bp->wp[63] = i; - bp->wp += 64; - qpass(f->in, bp); -} - -Block* -etheriq(Ether* ether, Block* bp, int fromwire) -{ - Etherpkt *pkt; - ushort type; - int len, multi, tome, fromme; - Netfile **ep, *f, **fp, *fx; - Block *xbp; - - ether->inpackets++; - - pkt = (Etherpkt*)bp->rp; - len = BLEN(bp); - type = (pkt->type[0]<<8)|pkt->type[1]; - fx = 0; - ep = ðer->f[Ntypes]; - - multi = pkt->d[0] & 1; - /* check for valid multicast addresses */ - if(multi && memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) && ether->prom == 0){ - if(!activemulti(ether, pkt->d, sizeof(pkt->d))){ - if(fromwire){ - freeb(bp); - bp = 0; - } - return bp; - } - } - - /* is it for me? */ - tome = memcmp(pkt->d, ether->ea, sizeof(pkt->d)) == 0; - fromme = memcmp(pkt->s, ether->ea, sizeof(pkt->s)) == 0; - - /* - * Multiplex the packet to all the connections which want it. - * If the packet is not to be used subsequently (fromwire != 0), - * attempt to simply pass it into one of the connections, thereby - * saving a copy of the data (usual case hopefully). - */ - for(fp = ether->f; fp < ep; fp++){ - if(f = *fp) - if(f->type == type || f->type < 0) - if(tome || multi || f->prom){ - /* Don't want to hear bridged packets */ - if(f->bridge && !fromwire && !fromme) - continue; - if(!f->headersonly){ - if(fromwire && fx == 0) - fx = f; - else if(xbp = iallocb(len)){ - memmove(xbp->wp, pkt, len); - xbp->wp += len; - qpass(f->in, xbp); - } - else - ether->soverflows++; - } - else - etherrtrace(f, pkt, len); - } - } - - if(fx){ - if(qpass(fx->in, bp) < 0) - ether->soverflows++; - return 0; - } - if(fromwire){ - freeb(bp); - return 0; - } - - return bp; -} - -static int -etheroq(Ether* ether, Block* bp) -{ - int len, loopback; - Etherpkt *pkt; - - ether->outpackets++; - - /* - * Check if the packet has to be placed back onto the input queue, - * i.e. if it's a loopback or broadcast packet or the interface is - * in promiscuous mode. - * If it's a loopback packet indicate to etheriq that the data isn't - * needed and return, etheriq will pass-on or free the block. - * To enable bridging to work, only packets that were originated - * by this interface are fed back. - */ - pkt = (Etherpkt*)bp->rp; - len = BLEN(bp); - loopback = memcmp(pkt->d, ether->ea, sizeof(pkt->d)) == 0; - if(loopback || memcmp(pkt->d, ether->bcast, sizeof(pkt->d)) == 0 || ether->prom) - if(etheriq(ether, bp, loopback) == 0) - return len; - - qbwrite(ether->oq, bp); - if(ether->transmit != nil) - ether->transmit(ether); - return len; -} - -static long -etherwrite(Chan* chan, void* buf, long n, vlong) -{ - Ether *ether; - Block *bp; - long l; - - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - if(NETTYPE(chan->qid.path) != Ndataqid) { - l = netifwrite(ether, chan, buf, n); - if(l >= 0) - goto out; - if(n == sizeof("nonblocking")-1 && strncmp((char*)buf, "nonblocking", n) == 0){ - qnoblock(ether->oq, 1); - goto out; - } - if(ether->ctl!=nil){ - l = ether->ctl(ether,buf,n); - goto out; - } - error(Ebadctl); - } - - if(n > ether->maxmtu) - error(Etoobig); - if(n < ether->minmtu) - error(Etoosmall); - bp = allocb(n); - memmove(bp->rp, buf, n); - memmove(bp->rp+Eaddrlen, ether->ea, Eaddrlen); - bp->wp += n; - - l = etheroq(ether, bp); -out: - poperror(); - runlock(ether); - return l; -} - -static long -etherbwrite(Chan* chan, Block* bp, ulong) -{ - Ether *ether; - long n; - - n = BLEN(bp); - if(NETTYPE(chan->qid.path) != Ndataqid){ - if(waserror()) { - freeb(bp); - nexterror(); - } - n = etherwrite(chan, bp->rp, n, 0); - poperror(); - freeb(bp); - return n; - } - ether = etherxx[chan->dev]; - rlock(ether); - if(waserror()) { - runlock(ether); - nexterror(); - } - if(n > ether->maxmtu){ - freeb(bp); - error(Etoobig); - } - if(n < ether->minmtu){ - freeb(bp); - error(Etoosmall); - } - n = etheroq(ether, bp); - poperror(); - runlock(ether); - return n; -} - -int -parseether(uchar *to, char *from) -{ - char nip[4]; - char *p; - int i; - - p = from; - for(i = 0; i < 6; i++){ - if(*p == 0) - return -1; - nip[0] = *p++; - if(*p == 0) - return -1; - nip[1] = *p++; - nip[2] = 0; - to[i] = strtoul(nip, 0, 16); - if(*p == ':') - p++; - } - return 0; -} - -static void -etherreset(void) -{ -} - -#define POLY 0xedb88320 - -/* really slow 32 bit crc for ethers */ -ulong -ethercrc(uchar *p, int len) -{ - int i, j; - ulong crc, b; - - crc = 0xffffffff; - for(i = 0; i < len; i++){ - b = *p++; - for(j = 0; j < 8; j++){ - crc = (crc>>1) ^ (((crc^b) & 1) ? POLY : 0); - b >>= 1; - } - } - return crc; -} - -Dev etherdevtab = { - 'l', - "ether", - - etherreset, - devinit, - devshutdown, - etherattach, - etherwalk, - etherstat, - etheropen, - ethercreate, - etherclose, - etherread, - etherbread, - etherwrite, - etherbwrite, - devremove, - etherwstat, - etherpower, - etherconfig, -}; diff --git a/sys/src/9/bitsy/devflash.c b/sys/src/9/bitsy/devflash.c deleted file mode 100644 index 34c49c1df..000000000 --- a/sys/src/9/bitsy/devflash.c +++ /dev/null @@ -1,876 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" - -/* - * on the bitsy, all 32 bit accesses to flash are mapped to two 16 bit - * accesses, one to the low half of the chip and the other to the high - * half. Therefore for all command accesses, ushort indices in the - * manuals turn into ulong indices in our code. Also, by copying all - * 16 bit commands to both halves of a 32 bit command, we erase 2 - * sectors for each request erase request. - */ - -#define mirror(x) (((x)<<16)|(x)) - -/* this defines a contiguous set of erase blocks of one size */ -typedef struct FlashRegion FlashRegion; -struct FlashRegion -{ - ulong addr; /* start of region */ - ulong end; /* end of region + 1 */ - ulong n; /* number of blocks */ - ulong size; /* size of each block */ -}; - -/* this defines a particular access algorithm */ -typedef struct FlashAlg FlashAlg; -struct FlashAlg -{ - int id; - char *name; - void (*identify)(void); /* identify device */ - void (*erase)(ulong); /* erase a region */ - void (*write)(void*, long, ulong); /* write a region */ -}; - -static void ise_id(void); -static void ise_erase(ulong); -static void ise_write(void*, long, ulong); - -static void afs_id(void); -static void afs_erase(ulong); -static void afs_write(void*, long, ulong); - -static ulong blockstart(ulong); -static ulong blockend(ulong); - -FlashAlg falg[] = -{ - { 1, "Intel/Sharp Extended", ise_id, ise_erase, ise_write }, - { 2, "AMD/Fujitsu Standard", afs_id, afs_erase, afs_write }, -}; - -struct -{ - RWlock; - ulong *p; - ushort algid; /* access algorithm */ - FlashAlg *alg; - ushort manid; /* manufacturer id */ - ushort devid; /* device id */ - ulong size; /* size in bytes */ - int wbsize; /* size of write buffer */ - ulong nr; /* number of regions */ - uchar bootprotect; - FlashRegion r[32]; -} flash; - -enum -{ - Maxwchunk= 1024, /* maximum chunk written by one call to falg->write */ -}; - -/* - * common flash interface - */ -static uchar -cfigetc(int off) -{ - uchar rv; - - flash.p[0x55] = mirror(0x98); - rv = flash.p[off]; - flash.p[0x55] = mirror(0xFF); - return rv; -} - -static ushort -cfigets(int off) -{ - return (cfigetc(off+1)<<8)|cfigetc(off); -} - -static ulong -cfigetl(int off) -{ - return (cfigetc(off+3)<<24)|(cfigetc(off+2)<<16)| - (cfigetc(off+1)<<8)|cfigetc(off); -} - -static void -cfiquery(void) -{ - uchar q, r, y; - ulong x, addr; - - q = cfigetc(0x10); - r = cfigetc(0x11); - y = cfigetc(0x12); - if(q != 'Q' || r != 'R' || y != 'Y'){ - print("cfi query failed: %ux %ux %ux\n", q, r, y); - return; - } - flash.algid = cfigetc(0x13); - flash.size = 1<<(cfigetc(0x27)+1); - flash.wbsize = 1<<(cfigetc(0x2a)+1); - flash.nr = cfigetc(0x2c); - if(flash.nr > nelem(flash.r)){ - print("cfi reports > %d regions\n", nelem(flash.r)); - flash.nr = nelem(flash.r); - } - addr = 0; - for(q = 0; q < flash.nr; q++){ - x = cfigetl(q+0x2d); - flash.r[q].size = 2*256*(x>>16); - flash.r[q].n = (x&0xffff)+1; - flash.r[q].addr = addr; - addr += flash.r[q].size*flash.r[q].n; - flash.r[q].end = addr; - } -} - -/* - * flash device interface - */ - -enum -{ - Qtopdir, - Q2nddir, - Qfctl, - Qfdata, - - Maxpart= 8, -}; - - -typedef struct FPart FPart; -struct FPart -{ - char *name; - char *ctlname; - ulong start; - ulong end; -}; -static FPart part[Maxpart]; - -#define FQID(p,q) ((p)<<8|(q)) -#define FTYPE(q) ((q) & 0xff) -#define FPART(q) (&part[(q) >>8]) - -static int -gen(Chan *c, char*, Dirtab*, int, int i, Dir *dp) -{ - Qid q; - FPart *fp; - - q.vers = 0; - - /* top level directory contains the name of the network */ - if(c->qid.path == Qtopdir){ - switch(i){ - case DEVDOTDOT: - q.path = Qtopdir; - q.type = QTDIR; - devdir(c, q, "#F", 0, eve, DMDIR|0555, dp); - break; - case 0: - q.path = Q2nddir; - q.type = QTDIR; - devdir(c, q, "flash", 0, eve, DMDIR|0555, dp); - break; - default: - return -1; - } - return 1; - } - - /* second level contains all partitions and their control files */ - switch(i) { - case DEVDOTDOT: - q.path = Qtopdir; - q.type = QTDIR; - devdir(c, q, "#F", 0, eve, DMDIR|0555, dp); - break; - default: - if(i >= 2*Maxpart) - return -1; - fp = &part[i>>1]; - if(fp->name == nil) - return 0; - if(i & 1){ - q.path = FQID(i>>1, Qfdata); - q.type = QTFILE; - devdir(c, q, fp->name, fp->end-fp->start, eve, 0660, dp); - } else { - q.path = FQID(i>>1, Qfctl); - q.type = QTFILE; - devdir(c, q, fp->ctlname, 0, eve, 0660, dp); - } - break; - } - return 1; -} - -static FPart* -findpart(char *name) -{ - int i; - - for(i = 0; i < Maxpart; i++) - if(part[i].name != nil && strcmp(name, part[i].name) == 0) - break; - if(i >= Maxpart) - return nil; - return &part[i]; -} - -static void -addpart(FPart *fp, char *name, ulong start, ulong end) -{ - int i; - char ctlname[64]; - - if(fp == nil){ - if(start >= flash.size || end > flash.size) - error(Ebadarg); - } else { - start += fp->start; - end += fp->start; - if(start >= fp->end || end > fp->end) - error(Ebadarg); - } - if(blockstart(start) != start) - error("must start on erase boundary"); - if(blockstart(end) != end && end != flash.size) - error("must end on erase boundary"); - - fp = findpart(name); - if(fp != nil) - error(Eexist); - for(i = 0; i < Maxpart; i++) - if(part[i].name == nil) - break; - if(i == Maxpart) - error("no more partitions"); - fp = &part[i]; - kstrdup(&fp->name, name); - snprint(ctlname, sizeof ctlname, "%sctl", name); - kstrdup(&fp->ctlname, ctlname); - fp->start = start; - fp->end = end; -} - -static void -rempart(FPart *fp) -{ - char *p, *cp; - - p = fp->name; - fp->name = nil; - cp = fp->ctlname; - fp->ctlname = nil; - free(p); - free(cp); -} - -void -flashinit(void) -{ - int i; - - flash.p = (ulong*)FLASHZERO; - cfiquery(); - for(i = 0; i < nelem(falg); i++) - if(flash.algid == falg[i].id){ - flash.alg = &falg[i]; - (*flash.alg->identify)(); - break; - } - flash.bootprotect = 1; - - addpart(nil, "flash", 0, flash.size); -} - -static Chan* -flashattach(char* spec) -{ - return devattach('F', spec); -} - -static Walkqid* -flashwalk(Chan *c, Chan *nc, char **name, int nname) -{ - return devwalk(c, nc, name, nname, nil, 0, gen); -} - -static int -flashstat(Chan *c, uchar *db, int n) -{ - return devstat(c, db, n, nil, 0, gen); -} - -static Chan* -flashopen(Chan* c, int omode) -{ - omode = openmode(omode); - if(strcmp(up->user, eve)!=0) - error(Eperm); - return devopen(c, omode, nil, 0, gen); -} - -static void -flashclose(Chan*) -{ -} - -static long -flashctlread(FPart *fp, void* a, long n, vlong off) -{ - char *buf, *p, *e; - int i; - ulong addr, end; - - buf = smalloc(1024); - e = buf + 1024; - p = seprint(buf, e, "0x%-9lux 0x%-9x 0x%-9ux 0x%-9ux\n", fp->end-fp->start, - flash.wbsize, flash.manid, flash.devid); - addr = fp->start; - for(i = 0; i < flash.nr && addr < fp->end; i++) - if(flash.r[i].addr <= addr && flash.r[i].end > addr){ - if(fp->end <= flash.r[i].end) - end = fp->end; - else - end = flash.r[i].end; - p = seprint(p, e, "0x%-9lux 0x%-9lux 0x%-9lux\n", addr, - (end-addr)/flash.r[i].size, flash.r[i].size); - addr = end; - } - n = readstr(off, a, n, buf); - free(buf); - return n; -} - -static long -flashdataread(FPart *fp, void* a, long n, vlong off) -{ - rlock(&flash); - if(waserror()){ - runlock(&flash); - nexterror(); - } - if(fp->name == nil) - error("partition vanished"); - if(!iseve()) - error(Eperm); - off += fp->start; - if(off >= fp->end) - n = 0; - if(off+n >= fp->end) - n = fp->end - off; - if(n > 0) - memmove(a, ((uchar*)FLASHZERO)+off, n); - runlock(&flash); - poperror(); - - return n; -} - -static long -flashread(Chan* c, void* a, long n, vlong off) -{ - int t; - - if(c->qid.type == QTDIR) - return devdirread(c, a, n, nil, 0, gen); - t = FTYPE(c->qid.path); - switch(t){ - default: - error(Eperm); - case Qfctl: - n = flashctlread(FPART(c->qid.path), a, n, off); - break; - case Qfdata: - n = flashdataread(FPART(c->qid.path), a, n, off); - break; - } - return n; -} - -static void -bootprotect(ulong addr) -{ - FlashRegion *r; - - if(flash.bootprotect == 0) - return; - if(flash.nr == 0) - error("writing over boot loader disallowed"); - r = flash.r; - if(addr >= r->addr && addr < r->addr + r->size) - error("writing over boot loader disallowed"); -} - -static ulong -blockstart(ulong addr) -{ - FlashRegion *r, *e; - ulong x; - - r = flash.r; - for(e = &flash.r[flash.nr]; r < e; r++) - if(addr >= r->addr && addr < r->end){ - x = addr - r->addr; - x /= r->size; - return r->addr + x*r->size; - } - - return (ulong)-1; -} - -static ulong -blockend(ulong addr) -{ - FlashRegion *r, *e; - ulong x; - - r = flash.r; - for(e = &flash.r[flash.nr]; r < e; r++) - if(addr >= r->addr && addr < r->end){ - x = addr - r->addr; - x /= r->size; - return r->addr + (x+1)*r->size; - } - - return (ulong)-1; -} - -static long -flashctlwrite(FPart *fp, char *p, long n) -{ - Cmdbuf *cmd; - ulong off; - - if(fp == nil) - panic("flashctlwrite"); - - cmd = parsecmd(p, n); - wlock(&flash); - if(waserror()){ - wunlock(&flash); - nexterror(); - } - if(strcmp(cmd->f[0], "erase") == 0){ - switch(cmd->nf){ - case 2: - /* erase a single block in the partition */ - off = atoi(cmd->f[1]); - off += fp->start; - if(off >= fp->end) - error("region not in partition"); - if(off != blockstart(off)) - error("erase must be a block boundary"); - bootprotect(off); - (*flash.alg->erase)(off); - break; - case 1: - /* erase the whole partition */ - bootprotect(fp->start); - for(off = fp->start; off < fp->end; off = blockend(off)) - (*flash.alg->erase)(off); - break; - default: - error(Ebadarg); - } - } else if(strcmp(cmd->f[0], "add") == 0){ - if(cmd->nf != 4) - error(Ebadarg); - addpart(fp, cmd->f[1], strtoul(cmd->f[2], nil, 0), strtoul(cmd->f[3], nil, 0)); - } else if(strcmp(cmd->f[0], "remove") == 0){ - rempart(fp); - } else if(strcmp(cmd->f[0], "protectboot") == 0){ - if(cmd->nf == 0 || strcmp(cmd->f[1], "off") != 0) - flash.bootprotect = 1; - else - flash.bootprotect = 0; - } else - error(Ebadarg); - poperror(); - wunlock(&flash); - free(cmd); - - return n; -} - -static long -flashdatawrite(FPart *fp, uchar *p, long n, long off) -{ - uchar *end; - int m; - int on; - long ooff; - uchar *buf; - - if(fp == nil) - panic("flashctlwrite"); - - buf = nil; - wlock(&flash); - if(waserror()){ - wunlock(&flash); - if(buf != nil) - free(buf); - nexterror(); - } - - if(fp->name == nil) - error("partition vanished"); - if(!iseve()) - error(Eperm); - - /* can't cross partition boundaries */ - off += fp->start; - if(off >= fp->end || off+n > fp->end || n <= 0) - error(Ebadarg); - - /* make sure we're not writing the boot sector */ - bootprotect(off); - - on = n; - - /* - * get the data into kernel memory to avoid faults during writing. - * if write is not on a quad boundary or not a multiple of 4 bytes, - * extend with data already in flash. - */ - buf = smalloc(n+8); - m = off & 3; - if(m){ - *(ulong*)buf = flash.p[(off)>>2]; - n += m; - off -= m; - } - if(n & 3){ - n -= n & 3; - *(ulong*)(&buf[n]) = flash.p[(off+n)>>2]; - n += 4; - } - memmove(&buf[m], p, on); - - /* (*flash.alg->write) can't cross blocks */ - ooff = off; - p = buf; - for(end = p + n; p < end; p += m){ - m = blockend(off) - off; - if(m > end - p) - m = end - p; - if(m > Maxwchunk) - m = Maxwchunk; - (*flash.alg->write)(p, m, off); - off += m; - } - - /* make sure write succeeded */ - if(memcmp(buf, &flash.p[ooff>>2], n) != 0) - error("written bytes don't match"); - - wunlock(&flash); - free(buf); - poperror(); - - return on; -} - -static long -flashwrite(Chan* c, void* a, long n, vlong off) -{ - int t; - - if(c->qid.type == QTDIR) - error(Eperm); - - if(!iseve()) - error(Eperm); - - t = FTYPE(c->qid.path); - switch(t){ - default: - panic("flashwrite"); - case Qfctl: - n = flashctlwrite(FPART(c->qid.path), a, n); - break; - case Qfdata: - n = flashdatawrite(FPART(c->qid.path), a, n, off); - break; - } - return n; -} - -Dev flashdevtab = { - 'F', - "flash", - - devreset, - flashinit, - devshutdown, - flashattach, - flashwalk, - flashstat, - flashopen, - devcreate, - flashclose, - flashread, - devbread, - flashwrite, - devbwrite, - devremove, - devwstat, -}; - -enum -{ - /* status register */ - ISEs_lockerr= 1<<1, - ISEs_powererr= 1<<3, - ISEs_progerr= 1<<4, - ISEs_eraseerr= 1<<5, - ISEs_ready= 1<<7, - ISEs_err= (ISEs_lockerr|ISEs_powererr|ISEs_progerr|ISEs_eraseerr), - - /* extended status register */ - ISExs_bufavail= 1<<7, -}; - - - -/* intel/sharp extended command set */ -static void -ise_reset(void) -{ - flash.p[0x55] = mirror(0xff); /* reset */ -} -static void -ise_id(void) -{ - ise_reset(); - flash.p[0x555] = mirror(0x90); /* uncover vendor info */ - flash.manid = flash.p[00]; - flash.devid = flash.p[01]; - ise_reset(); -} -static void -ise_clearerror(void) -{ - flash.p[0x100] = mirror(0x50); - -} -static void -ise_error(int bank, ulong status) -{ - char err[64]; - - if(status & (ISEs_lockerr)){ - sprint(err, "flash%d: block locked %lux", bank, status); - error(err); - } - if(status & (ISEs_powererr)){ - sprint(err, "flash%d: low prog voltage %lux", bank, status); - error(err); - } - if(status & (ISEs_progerr|ISEs_eraseerr)){ - sprint(err, "flash%d: i/o error %lux", bank, status); - error(err); - } -} -static void -ise_erase(ulong addr) -{ - ulong start; - ulong x; - - addr >>= 2; /* convert to ulong offset */ - - flashprogpower(1); - flash.p[addr] = mirror(0x20); - flash.p[addr] = mirror(0xd0); - start = m->ticks; - do { - x = flash.p[addr]; - if((x & mirror(ISEs_ready)) == mirror(ISEs_ready)) - break; - } while(TK2MS(m->ticks-start) < 1500); - flashprogpower(0); - - ise_clearerror(); - ise_error(0, x); - ise_error(1, x>>16); - - ise_reset(); -} -/* - * the flash spec claimes writing goes faster if we use - * the write buffer. We fill the write buffer and then - * issue the write request. After the write request, - * subsequent reads will yield the status register. - * - * returns the status, even on timeouts. - * - * NOTE: I tried starting back to back buffered writes - * without reading the status in between, as the - * flowchart in the intel data sheet suggests. - * However, it always responded with an illegal - * command sequence, so I must be missing something. - * If someone learns better, please email me, though - * I doubt it will be much faster. - presotto@bell-labs.com - */ -static int -ise_wbwrite(ulong *p, int n, ulong off, ulong baddr, ulong *status) -{ - ulong x, start; - int i; - int s; - - /* put flash into write buffer mode */ - start = m->ticks; - for(;;) { - s = splhi(); - /* request write buffer mode */ - flash.p[baddr] = mirror(0xe8); - - /* look at extended status reg for status */ - if((flash.p[baddr] & mirror(1<<7)) == mirror(1<<7)) - break; - splx(s); - - /* didn't work, keep trying for 2 secs */ - if(TK2MS(m->ticks-start) > 2000){ - /* set up to read status */ - flash.p[baddr] = mirror(0x70); - *status = flash.p[baddr]; - pprint("write buffered cmd timed out\n"); - return -1; - } - } - - /* fill write buffer */ - flash.p[baddr] = mirror(n-1); - for(i = 0; i < n; i++) - flash.p[off+i] = *p++; - - /* program from buffer */ - flash.p[baddr] = mirror(0xd0); - splx(s); - - /* wait till the programming is done */ - start = m->ticks; - for(;;) { - x = *status = flash.p[baddr]; /* read status register */ - if((x & mirror(ISEs_ready)) == mirror(ISEs_ready)) - break; - if(TK2MS(m->ticks-start) > 2000){ - pprint("read status timed out\n"); - return -1; - } - } - if(x & mirror(ISEs_err)) - return -1; - - return n; -} -static void -ise_write(void *a, long n, ulong off) -{ - ulong *p, *end; - int i, wbsize; - ulong x, baddr; - - /* everything in terms of ulongs */ - wbsize = flash.wbsize>>2; - baddr = blockstart(off); - off >>= 2; - n >>= 2; - p = a; - baddr >>= 2; - - /* first see if write will succeed */ - for(i = 0; i < n; i++) - if((p[i] & flash.p[off+i]) != p[i]) - error("flash needs erase"); - - if(waserror()){ - ise_reset(); - flashprogpower(0); - nexterror(); - } - flashprogpower(1); - - /* - * use the first write to reach - * a write buffer boundary. the intel maunal - * says writes startng at wb boundaries - * maximize speed. - */ - i = wbsize - (off & (wbsize-1)); - for(end = p + n; p < end;){ - if(i > end - p) - i = end - p; - - if(ise_wbwrite(p, i, off, baddr, &x) < 0) - break; - - off += i; - p += i; - i = wbsize; - } - - ise_clearerror(); - ise_error(0, x); - ise_error(1, x>>16); - - ise_reset(); - flashprogpower(0); - poperror(); -} - -/* amd/fujitsu standard command set - * I don't have an amd chipset to work with - * so I'm loathe to write this yet. If someone - * else does, please send it to me and I'll - * incorporate it -- presotto@bell-labs.com - */ -static void -afs_reset(void) -{ - flash.p[0x55] = mirror(0xf0); /* reset */ -} -static void -afs_id(void) -{ - afs_reset(); - flash.p[0x55] = mirror(0xf0); /* reset */ - flash.p[0x555] = mirror(0xaa); /* query vendor block */ - flash.p[0x2aa] = mirror(0x55); - flash.p[0x555] = mirror(0x90); - flash.manid = flash.p[00]; - afs_reset(); - flash.p[0x555] = mirror(0xaa); /* query vendor block */ - flash.p[0x2aa] = mirror(0x55); - flash.p[0x555] = mirror(0x90); - flash.devid = flash.p[01]; - afs_reset(); -} -static void -afs_erase(ulong) -{ - error("amd/fujistsu erase not implemented"); -} -static void -afs_write(void*, long, ulong) -{ - error("amd/fujistsu write not implemented"); -} diff --git a/sys/src/9/bitsy/devpcmcia.c b/sys/src/9/bitsy/devpcmcia.c deleted file mode 100644 index c6a0e29c5..000000000 --- a/sys/src/9/bitsy/devpcmcia.c +++ /dev/null @@ -1,713 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" -#include "io.h" - -/* - * BUG: insertion events are detected by polling. - * Should look into the compaq docs to see if - * there's an interrupt for card insertion - * there's probably one. - */ - -static PCMslot slot[2]; -int nslot = 2; - -struct { - Ref; - Rendez event; // where to wait for card events - int evreader; // there's a reader for events -} pcmcia; - -enum -{ - Qdir, - Qmem, - Qattr, - Qctl, - Qevs, - - Nents = 3, -}; - -enum -{ - /* - * configuration registers - they start at an offset in attribute - * memory found in the CIS. - */ - Rconfig= 0, - Creset= (1<<7), /* reset device */ - Clevel= (1<<6), /* level sensitive interrupt line */ -}; - -static void increfp(PCMslot*); -static void decrefp(PCMslot*); -static void slotmap(int, ulong, ulong, ulong); -static void slottiming(int, int, int, int, int); -static void slotinfo(Ureg*, void*); - -#define TYPE(c) (((ulong)c->qid.path)&0xff) -#define PATH(s,t) (((s)<<8)|(t)) - -static PCMslot* -slotof(Chan *c) -{ - ulong x; - - x = c->qid.path; - return slot + ((x>>8)&0xff); -} - -static int -pcmgen(Chan *c, char *, Dirtab * , int, int i, Dir *dp) -{ - int slotno; - Qid qid; - long len; - PCMslot *sp; - - if(i == DEVDOTDOT){ - mkqid(&qid, Qdir, 0, QTDIR); - devdir(c, qid, "#y", 0, eve, 0555, dp); - return 1; - } - - if(i >= Nents*nslot + 1) - return -1; - if(i == Nents*nslot){ - len = 0; - qid.path = PATH(0, Qevs); - snprint(up->genbuf, sizeof up->genbuf, "pcmevs"); - goto found; - } - - slotno = i/Nents; - sp = slot + slotno; - len = 0; - switch(i%Nents){ - case 0: - qid.path = PATH(slotno, Qmem); - snprint(up->genbuf, sizeof up->genbuf, "pcm%dmem", slotno); - len = sp->memlen; - break; - case 1: - qid.path = PATH(slotno, Qattr); - snprint(up->genbuf, sizeof up->genbuf, "pcm%dattr", slotno); - len = sp->memlen; - break; - case 2: - qid.path = PATH(slotno, Qctl); - snprint(up->genbuf, sizeof up->genbuf, "pcm%dctl", slotno); - break; - } -found: - qid.vers = 0; - qid.type = QTFILE; - devdir(c, qid, up->genbuf, len, eve, 0660, dp); - return 1; -} - -static int -bitno(ulong x) -{ - int i; - - for(i = 0; i < 8*sizeof(x); i++) - if((1<level & GPIO_OPT_IND_i) - return; - - /* sleave there, interrupt on card removal */ - intrenable(GPIOrising, bitno(GPIO_CARD_IND1_i), slotinfo, nil, "pcmcia slot1 status"); - intrenable(GPIOrising, bitno(GPIO_CARD_IND0_i), slotinfo, nil, "pcmcia slot0 status"); -} - -static Chan* -pcmciaattach(char *spec) -{ - return devattach('y', spec); -} - -static Walkqid* -pcmciawalk(Chan *c, Chan *nc, char **name, int nname) -{ - return devwalk(c, nc, name, nname, 0, 0, pcmgen); -} - -static int -pcmciastat(Chan *c, uchar *db, int n) -{ - return devstat(c, db, n, 0, 0, pcmgen); -} - -static Chan* -pcmciaopen(Chan *c, int omode) -{ - PCMslot *slotp; - - if(c->qid.type & QTDIR){ - if(omode != OREAD) - error(Eperm); - } else { - slotp = slotof(c); - increfp(slotp); - } - c->mode = openmode(omode); - c->flag |= COPEN; - c->offset = 0; - return c; -} - -static void -pcmciaclose(Chan *c) -{ - if(c->flag & COPEN) - if((c->qid.type & QTDIR) == 0) - decrefp(slotof(c)); -} - -/* a memmove using only bytes */ -static void -memmoveb(uchar *to, uchar *from, int n) -{ - while(n-- > 0) - *to++ = *from++; -} - -/* a memmove using only shorts & bytes */ -static void -memmoves(uchar *to, uchar *from, int n) -{ - ushort *t, *f; - - if((((ulong)to) & 1) || (((ulong)from) & 1) || (n & 1)){ - while(n-- > 0) - *to++ = *from++; - } else { - n = n/2; - t = (ushort*)to; - f = (ushort*)from; - while(n-- > 0) - *t++ = *f++; - } -} - -static long -pcmread(void *a, long n, ulong off, PCMslot *sp, uchar *start, ulong len) -{ - rlock(sp); - if(waserror()){ - runlock(sp); - nexterror(); - } - if(off > len) - return 0; - if(off + n > len) - n = len - off; - memmoveb(a, start+off, n); - runlock(sp); - poperror(); - return n; -} - -static long -pcmctlread(void *a, long n, ulong off, PCMslot *sp) -{ - char *p, *buf, *e; - - buf = p = malloc(READSTR); - if(waserror()){ - free(buf); - nexterror(); - } - e = p + READSTR; - - buf[0] = 0; - if(sp->occupied){ - p = seprint(p, e, "occupied\n"); - if(sp->verstr[0]) - p = seprint(p, e, "version %s\n", sp->verstr); - } - USED(p); - - n = readstr(off, a, n, buf); - free(buf); - poperror(); - return n; -} - -static int -inserted(void *) -{ - if (slot[0].inserted) - return 1; - if (slot[1].inserted) - return 2; - return 0; -} - -static long -pcmevsread(void *a, long n, ulong off) -{ - int i; - char *buf = nil; - char *e; - - if (pcmcia.evreader) - error("At most one reader"); - off = 0; - pcmcia.evreader++; - if (waserror()){ - free(buf); - pcmcia.evreader--; - nexterror(); - } - while((i = inserted(nil)) == 0){ - slotinfo(nil, nil); - tsleep(&pcmcia.event, inserted, nil, 500); - } - pcmcia.evreader--; - slot[i-1].inserted = 0; - buf = malloc(READSTR); - e = buf + READSTR; - buf[0] = 0; - seprint(buf, e, "#y/pcm%dctl\n", i-1); - n = readstr(off, a, n, buf); - free(buf); - poperror(); - return n; -} - -static long -pcmciaread(Chan *c, void *a, long n, vlong off) -{ - PCMslot *sp; - ulong offset = off; - - sp = slotof(c); - - switch(TYPE(c)){ - case Qdir: - return devdirread(c, a, n, 0, 0, pcmgen); - case Qmem: - if(!sp->occupied) - error(Eio); - return pcmread(a, n, offset, sp, sp->mem, 64*OneMeg); - case Qattr: - if(!sp->occupied) - error(Eio); - return pcmread(a, n, offset, sp, sp->attr, OneMeg); - case Qevs: - return pcmevsread(a, n, offset); - case Qctl: - return pcmctlread(a, n, offset, sp); - } - error(Ebadarg); - return -1; /* not reached */ -} - -static long -pcmwrite(void *a, long n, ulong off, PCMslot *sp, uchar *start, ulong len) -{ - rlock(sp); - if(waserror()){ - runlock(sp); - nexterror(); - } - if(off > len) - error(Eio); - if(off + n > len) - error(Eio); - memmoveb(start+off, a, n); - poperror(); - runlock(sp); - return n; -} - -static long -pcmctlwrite(char *p, long n, ulong, PCMslot *sp) -{ - Cmdbuf *cmd; - uchar *cp; - int index, i, dtx; - Rune r; - DevConf cf; - Devport port; - - cmd = parsecmd(p, n); - if(strcmp(cmd->f[0], "configure") == 0){ - wlock(sp); - if(waserror()){ - wunlock(sp); - nexterror(); - } - - /* see if driver exists and is configurable */ - if(cmd->nf < 3) - error(Ebadarg); - p = cmd->f[1]; - if(*p++ != '#') - error(Ebadarg); - p += chartorune(&r, p); - dtx = devno(r, 1); - if(dtx < 0) - error("no such device type"); - if(devtab[dtx]->config == nil) - error("not a dynamicly configurable device"); - - /* set pcmcia card configuration */ - index = 0; - if(sp->def != nil) - index = sp->def->index; - if(cmd->nf > 3){ - i = atoi(cmd->f[3]); - if(i < 0 || i >= sp->nctab) - error("bad configuration index"); - index = i; - } - if(sp->cfg[0].cpresent & (1<attr; - cp += sp->cfg[0].caddr + Rconfig; - *cp = index; - } - - /* configure device */ - memset(&cf, 0, sizeof cf); - kstrdup(&cf.type, cmd->f[2]); - cf.mem = (ulong)sp->mem; - cf.ports = &port; - cf.ports[0].port = (ulong)sp->regs; - cf.ports[0].size = 0; - cf.nports = 1; - cf.itype = GPIOfalling; - cf.intnum = bitno(sp == slot ? GPIO_CARD_IRQ0_i : GPIO_CARD_IRQ1_i); - if(devtab[dtx]->config(1, p, &cf) < 0) - error("couldn't configure device"); - sp->dev = devtab[dtx]; - free(cf.type); - wunlock(sp); - poperror(); - - /* don't let the power turn off */ - increfp(sp); - }else if(strcmp(cmd->f[0], "remove") == 0){ - /* see if driver exists and is configurable */ - if(cmd->nf != 2) - error(Ebadarg); - p = cmd->f[1]; - if(*p++ != '#') - error(Ebadarg); - p += chartorune(&r, p); - dtx = devno(r, 1); - if(dtx < 0) - error("no such device type"); - if(devtab[dtx]->config == nil) - error("not a dynamicly configurable device"); - if(devtab[dtx]->config(0, p, nil) < 0) - error("couldn't unconfigure device"); - - /* let the power turn off */ - decrefp(sp); - } - free(cmd); - - return 0; -} - -static long -pcmciawrite(Chan *c, void *a, long n, vlong off) -{ - PCMslot *sp; - ulong offset = off; - - sp = slotof(c); - - switch(TYPE(c)){ - case Qmem: - if(!sp->occupied) - error(Eio); - return pcmwrite(a, n, offset, sp, sp->mem, 64*OneMeg); - case Qattr: - if(!sp->occupied) - error(Eio); - return pcmwrite(a, n, offset, sp, sp->attr, OneMeg); - case Qevs: - break; - case Qctl: - if(!sp->occupied) - error(Eio); - return pcmctlwrite(a, n, offset, sp); - } - error(Ebadarg); - return -1; /* not reached */ -} - -/* - * power up/down pcmcia - */ -void -pcmciapower(int on) -{ - PCMslot *sp; - - /* if there's no pcmcia sleave, no interrupts */ -iprint("pcmciapower %d\n", on); - - if (on){ - /* set timing to the default, 300 */ - slottiming(0, 300, 300, 300, 0); - slottiming(1, 300, 300, 300, 0); - - /* if there's no pcmcia sleave, no interrupts */ - if(gpioregs->level & GPIO_OPT_IND_i){ - iprint("pcmciapower: no sleeve\n"); - return; - } - - for (sp = slot; sp < slot + nslot; sp++){ - if (sp->dev){ - increfp(sp); - iprint("pcmciapower: %s\n", sp->verstr); - delay(10000); - if (sp->dev->power) - sp->dev->power(on); - } - } - }else{ - if(gpioregs->level & GPIO_OPT_IND_i){ - iprint("pcmciapower: no sleeve\n"); - return; - } - - for (sp = slot; sp < slot + nslot; sp++){ - if (sp->dev){ - if (sp->dev->power) - sp->dev->power(on); - decrefp(sp); - } - sp->occupied = 0; - sp->cisread = 0; - } - egpiobits(EGPIO_exp_nvram_power|EGPIO_exp_full_power, 0); - } -} - -Dev pcmciadevtab = { - 'y', - "pcmcia", - - pcmciareset, - devinit, - devshutdown, - pcmciaattach, - pcmciawalk, - pcmciastat, - pcmciaopen, - devcreate, - pcmciaclose, - pcmciaread, - devbread, - pcmciawrite, - devbwrite, - devremove, - devwstat, - pcmciapower, -}; - -/* see what's there */ -static void -slotinfo(Ureg*, void*) -{ - ulong x = gpioregs->level; - - if(x & GPIO_OPT_IND_i){ - /* no expansion pack */ - slot[0].occupied = slot[0].inserted = 0; - slot[1].occupied = slot[1].inserted = 0; - } else { - if(x & GPIO_CARD_IND0_i){ - slot[0].occupied = slot[0].inserted = 0; - slot[0].cisread = 0; - } else { - if(slot[0].occupied == 0){ - slot[0].inserted = 1; - slot[0].cisread = 0; - } - slot[0].occupied = 1; - } - if(x & GPIO_CARD_IND1_i){ - slot[1].occupied = slot[1].inserted = 0; - slot[1].cisread = 0; - } else { - if(slot[1].occupied == 0){ - slot[1].inserted = 1; - slot[1].cisread = 0; - } - slot[1].occupied = 1; - } - if (inserted(nil)) - wakeup(&pcmcia.event); - } -} - -/* use reference card to turn cards on and off */ -static void -increfp(PCMslot *sp) -{ - wlock(sp); - if(waserror()){ - wunlock(sp); - nexterror(); - } - -iprint("increfp %ld\n", sp - slot); - if(incref(&pcmcia) == 1){ -iprint("increfp full power\n"); - egpiobits(EGPIO_exp_nvram_power|EGPIO_exp_full_power, 1); - delay(200); - egpiobits(EGPIO_pcmcia_reset, 1); - delay(100); - egpiobits(EGPIO_pcmcia_reset, 0); - delay(500); - } - incref(&sp->ref); - slotinfo(nil, nil); - if(sp->occupied && sp->cisread == 0) { - pcmcisread(sp); - } - - wunlock(sp); - poperror(); -} - -static void -decrefp(PCMslot *sp) -{ -iprint("decrefp %ld\n", sp - slot); - decref(&sp->ref); - if(decref(&pcmcia) == 0){ -iprint("increfp power down\n"); - egpiobits(EGPIO_exp_nvram_power|EGPIO_exp_full_power, 0); - } -} - -/* - * the regions are staticly mapped - */ -static void -slotmap(int slotno, ulong regs, ulong attr, ulong mem) -{ - PCMslot *sp; - - sp = &slot[slotno]; - sp->slotno = slotno; - sp->memlen = 64*OneMeg; - sp->verstr[0] = 0; - - sp->mem = mapmem(mem, 64*OneMeg, 0); - sp->memmap.ca = 0; - sp->memmap.cea = 64*MB; - sp->memmap.isa = (ulong)mem; - sp->memmap.len = 64*OneMeg; - sp->memmap.attr = 0; - - sp->attr = mapmem(attr, OneMeg, 0); - sp->attrmap.ca = 0; - sp->attrmap.cea = MB; - sp->attrmap.isa = (ulong)attr; - sp->attrmap.len = OneMeg; - sp->attrmap.attr = 1; - - sp->regs = mapspecial(regs, 32*1024); -} - -PCMmap* -pcmmap(int slotno, ulong, int, int attr) -{ - if(slotno > nslot) - panic("pcmmap"); - if(attr) - return &slot[slotno].attrmap; - else - return &slot[slotno].memmap; -} - -void -pcmunmap(int, PCMmap*) -{ -} - -/* - * setup card timings - * times are in ns - * count = ceiling[access-time/(2*3*T)] - 1, where T is a processor cycle - * - */ -static int -ns2count(int ns) -{ - ulong y; - - /* get 100 times cycle time */ - y = 100000000/(conf.hz/1000); - - /* get 10 times ns/(cycle*6) */ - y = (1000*ns)/(6*y); - - /* round up */ - y += 9; - y /= 10; - - /* subtract 1 */ - return y-1; -} -static void -slottiming(int slotno, int tio, int tattr, int tmem, int fast) -{ - ulong x; - - x = 0; - if(fast) - x |= 1<mecr & 0xffff0000; - } else { - x <<= 16; - x |= memconfregs->mecr & 0xffff; - } - memconfregs->mecr = x; -} - -/* For compat with ../pc devices. Don't use it for the bitsy - */ -int -pcmspecial(char*, ISAConf*) -{ - return -1; -} diff --git a/sys/src/9/bitsy/devpenmouse.c b/sys/src/9/bitsy/devpenmouse.c deleted file mode 100644 index b26c27711..000000000 --- a/sys/src/9/bitsy/devpenmouse.c +++ /dev/null @@ -1,510 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" - -#define Image IMAGE -#include -#include -#include -#include "screen.h" -#include - -typedef struct Mouseinfo Mouseinfo; -typedef struct Mousestate Mousestate; -typedef struct Calibration Calibration; - -struct Calibration -{ - long scalex; - long scaley; - long transx; - long transy; -} calibration = { - -16435, - 23275, - 253, - -23 -}; - -/* The pen goes down, tracks some and goes up again. The pen alone can - * only simulate a one-button mouse. - * To simulate a more-button (five, in this case) mouse, we use the four - * keys along the the bottom of the iPaq as modifiers. - * When one (or more) of the modifier keys is (are) down, a pen-down event - * causes the corresponding bottons to go down. If no modifier key is - * depressed, a pen-down event is translated into a button-one down event. - * Releasing the modifier keys has no direct effect. The pen-up event is - * the one that triggers mouse-up events. - */ -struct Mousestate -{ - Point xy; /* mouse.xy */ - int buttons; /* mouse.buttons */ - int modifiers; /* state of physical buttons 2, 3, 4, 5 */ - ulong counter; /* increments every update */ - ulong msec; /* time of last event */ -}; - -struct Mouseinfo -{ - Lock; - Mousestate; - ulong lastcounter; /* value when /dev/mouse read */ - ulong resize; - ulong lastresize; - Rendez r; - Ref; - QLock; - int open; - int inopen; - Mousestate queue[16]; /* circular buffer of click events */ - int ri; /* read index into queue */ - int wi; /* write index into queue */ - uchar qfull; /* queue is full */ -}; - -Mouseinfo mouse; -int mouseshifted; - -int penmousechanged(void*); -static void penmousetrack(int b, int x, int y); - -enum{ - Qdir, - Qmouse, - Qmousein, - Qmousectl, -}; - -static Dirtab mousedir[]={ - ".", {Qdir, 0, QTDIR}, 0, DMDIR|0555, - "mouse", {Qmouse}, 0, 0666, - "mousein", {Qmousein}, 0, 0220, - "mousectl", {Qmousectl}, 0, 0660, -}; - -enum -{ - CMcalibrate, - CMswap, -}; - -static Cmdtab penmousecmd[] = -{ - CMcalibrate, "calibrate", 0, - CMswap, "swap", 1, -}; - -static uchar buttonmap[8] = { - 0, 1, 2, 3, 4, 5, 6, 7, -}; -static int mouseswap; - -extern Memimage* gscreen; - -void -penbutton(int up, int b) { - // button 5 (side button) immediately causes an event - // when the pen is down (button 1), other buttons also - // cause events, allowing chording with button 1 - if ((b & 0x20) || (mouse.buttons & 0x1)) { - if (up) - mouse.buttons &= ~b; - else - mouse.buttons |= b; - penmousetrack(mouse.buttons, -1, -1); - } else { - if (up) - mouse.modifiers &= ~b; - else - mouse.modifiers |= b; - } -} - -void -pentrackxy(int x, int y) { - - if (x == -1) { - /* pen up. associate with button 1 through 5 up */ - mouse.buttons &= ~0x1f; - } else { - x = ((x*calibration.scalex)>>16) + calibration.transx; - y = ((y*calibration.scaley)>>16) + calibration.transy; - if ((mouse.buttons & 0x1f) == 0) { - if (mouse.modifiers) - mouse.buttons |= mouse.modifiers; - else - mouse.buttons |= 0x1; - } - } - penmousetrack(mouse.buttons, x, y); -} - -static void -penmousereset(void) -{ - if(!conf.monitor) - return; -} - -static void -penmouseinit(void) -{ - if(!conf.monitor) - return; -} - -static Chan* -penmouseattach(char *spec) -{ - if(!conf.monitor) - error(Egreg); - return devattach('m', spec); -} - -static Walkqid* -penmousewalk(Chan *c, Chan *nc, char **name, int nname) -{ - return devwalk(c, nc, name, nname, mousedir, nelem(mousedir), devgen); -} - -static int -penmousestat(Chan *c, uchar *db, int n) -{ - return devstat(c, db, n, mousedir, nelem(mousedir), devgen); -} - -static Chan* -penmouseopen(Chan *c, int omode) -{ - switch((ulong)c->qid.path){ - case Qdir: - if(omode != OREAD) - error(Eperm); - break; - case Qmouse: - lock(&mouse); - if(mouse.open){ - unlock(&mouse); - error(Einuse); - } - mouse.open = 1; - mouse.ref++; - unlock(&mouse); - break; - case Qmousein: - /* error("disabled"); */ - lock(&mouse); - if(mouse.inopen){ - unlock(&mouse); - error(Einuse); - } - mouse.inopen = 1; - unlock(&mouse); - break; - default: - incref(&mouse); - } - c->mode = openmode(omode); - c->flag |= COPEN; - c->offset = 0; - return c; -} - -static Chan* -penmousecreate(Chan*, char*, int, ulong) -{ - if(!conf.monitor) - error(Egreg); - error(Eperm); - return 0; -} - -static void -penmouseclose(Chan *c) -{ - if(c->qid.path != Qdir && (c->flag&COPEN)){ - lock(&mouse); - if(c->qid.path == Qmouse) - mouse.open = 0; - else if(c->qid.path == Qmousein){ - mouse.inopen = 0; - unlock(&mouse); - return; - } - --mouse.ref; - unlock(&mouse); - } -} - -static long -penmouseread(Chan *c, void *va, long n, vlong) -{ - char buf[4*12+1]; - static int map[8] = {0, 4, 2, 6, 1, 5, 3, 7 }; - Mousestate m; - - switch((ulong)c->qid.path){ - case Qdir: - return devdirread(c, va, n, mousedir, nelem(mousedir), devgen); - - case Qmousectl: - sprint(buf, "c%11ld %11ld %11ld %11ld", - calibration.scalex, calibration.scaley, - calibration.transx, calibration.transy); - if(n > 1+4*12) - n = 1+4*12; - memmove(va, buf, n); - return n; - - case Qmouse: - while(penmousechanged(0) == 0) - sleep(&mouse.r, penmousechanged, 0); - - mouse.qfull = 0; - - /* - * No lock of the indices is necessary here, because ri is only - * updated by us, and there is only one mouse reader - * at a time. I suppose that more than one process - * could try to read the fd at one time, but such behavior - * is degenerate and already violates the calling - * conventions for sleep above. - */ - if(mouse.ri != mouse.wi) { - m = mouse.queue[mouse.ri]; - if(++mouse.ri == nelem(mouse.queue)) - mouse.ri = 0; - } else { - m = mouse.Mousestate; - } - sprint(buf, "m%11d %11d %11d %11lud", - m.xy.x, m.xy.y, - m.buttons, - m.msec); - mouse.lastcounter = m.counter; - if(n > 1+4*12) - n = 1+4*12; - if(mouse.lastresize != mouse.resize){ - mouse.lastresize = mouse.resize; - buf[0] = 'r'; - } - memmove(va, buf, n); - return n; - } - return 0; -} - -static void -setbuttonmap(char* map) -{ - int i, x, one, two, three; - - one = two = three = 0; - for(i = 0; i < 3; i++){ - if(map[i] == 0) - error(Ebadarg); - if(map[i] == '1'){ - if(one) - error(Ebadarg); - one = 1<qid.path){ - case Qdir: - error(Eisdir); - - case Qmousectl: - cb = parsecmd(va, n); - if(waserror()){ - free(cb); - nexterror(); - } - ct = lookupcmd(cb, penmousecmd, nelem(penmousecmd)); - switch(ct->index){ - case CMswap: - if(mouseswap) - setbuttonmap("123"); - else - setbuttonmap("321"); - mouseswap ^= 1; - break; - case CMcalibrate: - if (cb->nf == 1) { - calibration.scalex = 1<<16; - calibration.scaley = 1<<16; - calibration.transx = 0; - calibration.transy = 0; - } else if (cb->nf == 5) { - if ((!isdigit(*cb->f[1]) && *cb->f[1] != '-') - || (!isdigit(*cb->f[2]) && *cb->f[2] != '-') - || (!isdigit(*cb->f[3]) && *cb->f[3] != '-') - || (!isdigit(*cb->f[4]) && *cb->f[4] != '-')) - error("bad syntax in control file message"); - calibration.scalex = strtol(cb->f[1], nil, 0); - calibration.scaley = strtol(cb->f[2], nil, 0); - calibration.transx = strtol(cb->f[3], nil, 0); - calibration.transy = strtol(cb->f[4], nil, 0); - } else - cmderror(cb, Ecmdargs); - break; - } - free(cb); - poperror(); - return n; - - case Qmousein: - if(n > sizeof buf-1) - n = sizeof buf -1; - memmove(buf, va, n); - buf[n] = 0; - p = 0; - pt.x = strtol(buf+1, &p, 0); - if(p == 0) - error(Eshort); - pt.y = strtol(p, &p, 0); - if(p == 0) - error(Eshort); - b = strtol(p, &p, 0); - penmousetrack(b, pt.x, pt.y); - return n; - - case Qmouse: - if(n > sizeof buf-1) - n = sizeof buf -1; - memmove(buf, va, n); - buf[n] = 0; - p = 0; - pt.x = strtoul(buf+1, &p, 0); - if(p == 0) - error(Eshort); - pt.y = strtoul(p, 0, 0); - qlock(&mouse); - if(ptinrect(pt, gscreen->r)) - penmousetrack(mouse.buttons, pt.x, pt.y); - qunlock(&mouse); - return n; - } - - error(Egreg); - return -1; -} - -Dev penmousedevtab = { - 'm', - "penmouse", - - penmousereset, - penmouseinit, - devshutdown, - penmouseattach, - penmousewalk, - penmousestat, - penmouseopen, - penmousecreate, - penmouseclose, - penmouseread, - devbread, - penmousewrite, - devbwrite, - devremove, - devwstat, -}; - -/* - * called at interrupt level to update the structure and - * awaken any waiting procs. - */ -static void -penmousetrack(int b, int x, int y) -{ - int lastb; - - if (x >= 0) - mouse.xy = Pt(x, y); - lastb = mouse.buttons; - mouse.buttons = b; - mouse.counter++; - mouse.msec = TK2MS(MACHP(0)->ticks); - - /* - * if the queue fills, we discard the entire queue and don't - * queue any more events until a reader polls the mouse. - */ - if(!mouse.qfull && lastb != b) { /* add to ring */ - mouse.queue[mouse.wi] = mouse.Mousestate; - if(++mouse.wi == nelem(mouse.queue)) - mouse.wi = 0; - if(mouse.wi == mouse.ri) - mouse.qfull = 1; - } - wakeup(&mouse.r); - drawactive(1); - resetsuspendtimer(); -} - -int -penmousechanged(void*) -{ - return mouse.lastcounter != mouse.counter || - mouse.lastresize != mouse.resize; -} - -Point -penmousexy(void) -{ - return mouse.xy; -} - -/* - * notify reader that screen has been resized (ha!) - */ -void -mouseresize(void) -{ - mouse.resize++; - wakeup(&mouse.r); -} - diff --git a/sys/src/9/bitsy/devuda1341.c b/sys/src/9/bitsy/devuda1341.c deleted file mode 100644 index fc19d9e36..000000000 --- a/sys/src/9/bitsy/devuda1341.c +++ /dev/null @@ -1,1401 +0,0 @@ -/* - * SAC/UDA 1341 Audio driver for the Bitsy - * - * The Philips UDA 1341 sound chip is accessed through the Serial Audio - * Controller (SAC) of the StrongARM SA-1110. This is much more a SAC - * controller than a UDA controller, but we have a devsac.c already. - * - * The code morphs Nicolas Pitre's Linux controller - * and Ken's Soundblaster controller. - * - * The interface should be identical to that of devaudio.c - */ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" -#include "io.h" -#include "sa1110dma.h" - -static int debug = 0; - -/* - * GPIO based L3 bus support. - * - * This provides control of Philips L3 type devices. - * GPIO lines are used for clock, data and mode pins. - * - * Note: The L3 pins are shared with I2C devices. This should not present - * any problems as long as an I2C start sequence is not generated. This is - * defined as a 1->0 transition on the data lines when the clock is high. - * It is critical this code only allow data transitions when the clock - * is low. This is always legal in L3. - * - * The IIC interface requires the clock and data pin to be LOW when idle. We - * must make sure we leave them in this state. - * - * It appears the read data is generated on the falling edge of the clock - * and should be held stable during the clock high time. - */ - -/* - * L3 setup and hold times (expressed in µs) - */ -enum { - L3_AcquireTime = 1, - L3_ReleaseTime = 1, - L3_DataSetupTime = (190+999)/1000, /* 190 ns */ - L3_DataHoldTime = ( 30+999)/1000, - L3_ModeSetupTime = (190+999)/1000, - L3_ModeHoldTime = (190+999)/1000, - L3_ClockHighTime = (100+999)/1000, - L3_ClockLowTime = (100+999)/1000, - L3_HaltTime = (190+999)/1000, -}; - -/* UDA 1341 Registers */ -enum { - /* Status0 register */ - UdaStatusDC = 0, /* 1 bit */ - UdaStatusIF = 1, /* 3 bits */ - UdaStatusSC = 4, /* 2 bits */ - UdaStatusRST = 6, /* 1 bit */ -}; - -enum { - /* Status1 register */ - UdaStatusPC = 0, /* 2 bits */ - UdaStatusDS = 2, /* 1 bit */ - UdaStatusPDA = 3, /* 1 bit */ - UdaStatusPAD = 4, /* 1 bit */ - UdaStatusIGS = 5, /* 1 bit */ - UdaStatusOGS = 6, /* 1 bit */ -}; - -/* - * UDA1341 L3 address and command types - */ - -enum { - UDA1341_DATA0 = 0, - UDA1341_DATA1, - UDA1341_STATUS, - UDA1341_L3Addr = 0x14, -}; - -typedef struct AQueue AQueue; -typedef struct Buf Buf; -typedef struct IOstate IOstate; - -enum -{ - Qdir = 0, - Qaudio, - Qvolume, - Qstatus, - Qstats, - - Fmono = 1, - Fin = 2, - Fout = 4, - - Aclosed = 0, - Aread, - Awrite, - - Vaudio = 0, - Vmic, - Vtreb, - Vbass, - Vspeed, - Vbufsize, - Vfilter, - Vinvert, - Nvol, - - Bufsize = 4* 1024, /* 46 ms each */ - Nbuf = 10, /* 1.5 seconds total */ - - Speed = 44100, - Ncmd = 50, /* max volume command words */ -}; - -enum { - Flushbuf = 0xe0000000, -}; - -/* System Clock -- according to the manual, it seems that when the UDA is - configured in non MSB/I2S mode, it uses a divisor of 256 to the 12.288MHz - clock. The other rates are only supported in MSB mode, which should be - implemented at some point */ -enum { - SC512FS = 0 << 2, - SC384FS = 1 << 2, - SC256FS = 2 << 2, - CLOCKMASK = 3 << 2, -}; - -/* Format */ -enum { - LSB16 = 1 << 1, - LSB18 = 2 << 1, - LSB20 = 3 << 1, - MSB = 4 << 1, - MSB16 = 5 << 1, - MSB18 = 6 << 1, - MSB20 = 7 << 1, -}; - -Dirtab -audiodir[] = -{ - ".", {Qdir, 0, QTDIR}, 0, DMDIR|0555, - "audio", {Qaudio}, 0, 0666, - "volume", {Qvolume}, 0, 0666, - "audiostatus", {Qstatus}, 0, 0444, - "audiostats", {Qstats}, 0, 0444, -}; - -struct Buf -{ - uchar* virt; - ulong phys; - uint nbytes; -}; - -struct IOstate -{ - QLock; - Lock ilock; - Rendez vous; - Chan *chan; /* chan of open */ - int dma; /* dma chan, alloc on open, free on close */ - int bufinit; /* boolean, if buffers allocated */ - Buf buf[Nbuf]; /* buffers and queues */ - volatile Buf *current; /* next dma to finish */ - volatile Buf *next; /* next candidate for dma */ - volatile Buf *filling; /* buffer being filled */ -/* to have defines just like linux — there's a real operating system */ -#define emptying filling -}; - -static struct -{ - QLock; - int amode; /* Aclosed/Aread/Awrite for /audio */ - int intr; /* boolean an interrupt has happened */ - int rivol[Nvol]; /* right/left input/output volumes */ - int livol[Nvol]; - int rovol[Nvol]; - int lovol[Nvol]; - ulong totcount; /* how many bytes processed since open */ - vlong tottime; /* time at which totcount bytes were processed */ - IOstate i; - IOstate o; -} audio; - -int zerodma; /* dma buffer used for sending zero */ - -typedef struct Iostats Iostats; -struct Iostats { - ulong totaldma; - ulong idledma; - ulong faildma; - ulong samedma; - ulong empties; -}; - -static struct -{ - ulong bytes; - Iostats rx, tx; -} iostats; - -static void setaudio(int in, int out, int left, int right, int value); -static void setspeed(int in, int out, int left, int right, int value); -static void setbufsize(int in, int out, int left, int right, int value); - -static struct -{ - char* name; - int flag; - int ilval; /* initial values */ - int irval; - void (*setval)(int, int, int, int, int); -} volumes[] = -{ -[Vaudio] {"audio", Fout|Fmono, 80, 80, setaudio }, -[Vmic] {"mic", Fin|Fmono, 0, 0, nil }, -[Vtreb] {"treb", Fout|Fmono, 50, 50, nil }, -[Vbass] {"bass", Fout|Fmono, 50, 50, nil }, -[Vspeed] {"speed", Fin|Fout|Fmono, Speed, Speed, setspeed }, -[Vbufsize] {"bufsize", Fin|Fout|Fmono, Bufsize, Bufsize, setbufsize }, -[Vfilter] {"filter", Fout|Fmono, 0, 0, nil }, -[Vinvert] {"invert", Fin|Fout|Fmono, 0, 0, nil }, -[Nvol] {0} -}; - -static void setreg(char *name, int val, int n); - -/* - * Grab control of the IIC/L3 shared pins - */ -static void -L3_acquirepins(void) -{ - gpioregs->set = (GPIO_L3_MODE_o | GPIO_L3_SCLK_o | GPIO_L3_SDA_io); - gpioregs->direction |= (GPIO_L3_MODE_o | GPIO_L3_SCLK_o | GPIO_L3_SDA_io); - microdelay(L3_AcquireTime); -} - -/* - * Release control of the IIC/L3 shared pins - */ -static void -L3_releasepins(void) -{ - gpioregs->direction &= ~(GPIO_L3_MODE_o | GPIO_L3_SCLK_o | GPIO_L3_SDA_io); - microdelay(L3_ReleaseTime); -} - -/* - * Initialize the interface - */ -static void -L3_init(void) -{ - gpioregs->altfunc &= ~(GPIO_L3_SDA_io | GPIO_L3_SCLK_o | GPIO_L3_MODE_o); - L3_releasepins(); -} - -/* - * Get a bit. The clock is high on entry and on exit. Data is read after - * the clock low time has expired. - */ -static int -L3_getbit(void) -{ - int data; - - gpioregs->clear = GPIO_L3_SCLK_o; - microdelay(L3_ClockLowTime); - - data = (gpioregs->level & GPIO_L3_SDA_io) ? 1 : 0; - - gpioregs->set = GPIO_L3_SCLK_o; - microdelay(L3_ClockHighTime); - - return data; -} - -/* - * Send a bit. The clock is high on entry and on exit. Data is sent only - * when the clock is low (I2C compatibility). - */ -static void -L3_sendbit(int bit) -{ - gpioregs->clear = GPIO_L3_SCLK_o; - - if (bit & 1) - gpioregs->set = GPIO_L3_SDA_io; - else - gpioregs->clear = GPIO_L3_SDA_io; - - /* Assumes L3_DataSetupTime < L3_ClockLowTime */ - microdelay(L3_ClockLowTime); - - gpioregs->set = GPIO_L3_SCLK_o; - microdelay(L3_ClockHighTime); -} - -/* - * Send a byte. The mode line is set or pulsed based on the mode sequence - * count. The mode line is high on entry and exit. The mod line is pulsed - * before the second data byte and before ech byte thereafter. - */ -static void -L3_sendbyte(char data, int mode) -{ - int i; - - switch(mode) { - case 0: /* Address mode */ - gpioregs->clear = GPIO_L3_MODE_o; - break; - case 1: /* First data byte */ - break; - default: /* Subsequent bytes */ - gpioregs->clear = GPIO_L3_MODE_o; - microdelay(L3_HaltTime); - gpioregs->set = GPIO_L3_MODE_o; - break; - } - - microdelay(L3_ModeSetupTime); - - for (i = 0; i < 8; i++) - L3_sendbit(data >> i); - - if (mode == 0) /* Address mode */ - gpioregs->set = GPIO_L3_MODE_o; - - microdelay(L3_ModeHoldTime); -} - -/* - * Get a byte. The mode line is set or pulsed based on the mode sequence - * count. The mode line is high on entry and exit. The mod line is pulsed - * before the second data byte and before each byte thereafter. This - * function is never valid with mode == 0 (address cycle) as the address - * is always sent on the bus, not read. - */ -static char -L3_getbyte(int mode) -{ - char data = 0; - int i; - - switch(mode) { - case 0: /* Address mode - never valid */ - break; - case 1: /* First data byte */ - break; - default: /* Subsequent bytes */ - gpioregs->clear = GPIO_L3_MODE_o; - microdelay(L3_HaltTime); - gpioregs->set = GPIO_L3_MODE_o; - break; - } - - microdelay(L3_ModeSetupTime); - - for (i = 0; i < 8; i++) - data |= (L3_getbit() << i); - - microdelay(L3_ModeHoldTime); - - return data; -} - -/* - * Write data to a device on the L3 bus. The address is passed as well as - * the data and length. The length written is returned. The register space - * is encoded in the address (low two bits are set and device address is - * in the upper 6 bits). - */ -static int -L3_write(uchar addr, uchar *data, int len) -{ - int mode = 0; - int bytes = len; - - L3_acquirepins(); - L3_sendbyte(addr, mode++); - while(len--) - L3_sendbyte(*data++, mode++); - L3_releasepins(); - return bytes; -} - -/* - * Read data from a device on the L3 bus. The address is passed as well as - * the data and length. The length read is returned. The register space - * is encoded in the address (low two bits are set and device address is - * in the upper 6 bits). - - * Commented out, not used -static int -L3_read(uchar addr, uchar *data, int len) -{ - int mode = 0; - int bytes = len; - - L3_acquirepins(); - L3_sendbyte(addr, mode++); - gpioregs->direction &= ~(GPIO_L3_SDA_io); - while(len--) - *data++ = L3_getbyte(mode++); - L3_releasepins(); - return bytes; -} - */ - -void -audiomute(int on) -{ - egpiobits(EGPIO_audio_mute, on); -} - -static char Emode[] = "illegal open mode"; -static char Evolume[] = "illegal volume specifier"; - -static void -bufinit(IOstate *b) -{ - int i; - - if (debug) print("bufinit\n"); - for (i = 0; i < Nbuf; i++) { - b->buf[i].virt = xalloc(Bufsize); - b->buf[i].phys = PADDR(b->buf[i].virt); - memset(b->buf[i].virt, 0xAA, Bufsize); - } - b->bufinit = 1; -}; - -static void -setempty(IOstate *b) -{ - int i; - - if (debug) print("setempty\n"); - for (i = 0; i < Nbuf; i++) { - b->buf[i].nbytes = 0; - } - b->filling = b->buf; - b->current = b->buf; - b->next = b->buf; -} - -static int -audioqnotempty(void *x) -{ - IOstate *s = x; - - return dmaidle(s->dma) || s->emptying != s->current; -} - -static int -audioqnotfull(void *x) -{ - IOstate *s = x; - - return dmaidle(s->dma) || s->filling != s->current; -} - -SSPregs *sspregs; -MCPregs *mcpregs; - -static void -audioinit(void) -{ - /* Turn MCP operations off */ - mcpregs = mapspecial(MCPREGS, sizeof(MCPregs)); - mcpregs->status &= ~(1<<16); - - sspregs = mapspecial(SSPREGS, sizeof(SSPregs)); - -} - -uchar status0[1] = {0x02}; -uchar status1[1] = {0x80}; -uchar data00[1] = {0x00}; /* volume control, bits 0 – 5 */ -uchar data01[1] = {0x40}; -uchar data02[1] = {0x80}; -uchar data0e0[2] = {0xc0, 0xe0}; -uchar data0e1[2] = {0xc1, 0xe0}; -uchar data0e2[2] = {0xc2, 0xf2}; -/* there is no data0e3 */ -uchar data0e4[2] = {0xc4, 0xe0}; -uchar data0e5[2] = {0xc5, 0xe0}; -uchar data0e6[2] = {0xc6, 0xe3}; - -static void -enable(void) -{ - uchar data[1]; - - L3_init(); - - /* Setup the uarts */ - ppcregs->assignment &= ~(1<<18); - - sspregs->control0 = 0; - sspregs->control0 = 0x031f; /* 16 bits, TI frames, serial clock rate 3 */ - sspregs->control1 = 0x0020; /* ext clock */ - sspregs->control0 = 0x039f; /* enable */ - - /* Enable the audio power */ - audioicpower(1); - egpiobits(EGPIO_codec_reset, 1); - - setspeed(0, 0, 0, 0, volumes[Vspeed].ilval); - - data[0] = status0[0] | 1 << UdaStatusRST; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, data, 1 ); - gpioregs->clear = EGPIO_codec_reset; - gpioregs->set = EGPIO_codec_reset; - /* write uda 1341 status[0] */ - data[0] = status0[0]; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, data, 1); - - if (debug) - print("enable: status0 = 0x%2.2ux\n", data[0]); - - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data02, 1); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data0e2, 2); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data0e6, 2 ); - - if (debug) { - print("enable: status0 = 0x%2.2ux\n", data[0]); - print("enable: status1 = 0x%2.2ux\n", status1[0]); - print("enable: data02 = 0x%2.2ux\n", data02[0]); - print("enable: data0e2 = 0x%4.4ux\n", data0e2[0] | data0e2[1]<<8); - print("enable: data0e4 = 0x%4.4ux\n", data0e4[0] | data0e4[1]<<8); - print("enable: data0e6 = 0x%4.4ux\n", data0e6[0] | data0e6[1]<<8); - print("enable: sspregs->control0 = 0x%lux\n", sspregs->control0); - print("enable: sspregs->control1 = 0x%lux\n", sspregs->control1); - } -} - -static void -resetlevel(void) -{ - int i; - - for(i=0; volumes[i].name; i++) { - audio.lovol[i] = volumes[i].ilval; - audio.rovol[i] = volumes[i].irval; - audio.livol[i] = volumes[i].ilval; - audio.rivol[i] = volumes[i].irval; - } -} - -static void -mxvolume(void) { - int *left, *right; - - setspeed(0, 0, 0, 0, volumes[Vspeed].ilval); - if (!dmaidle(audio.i.dma) || !dmaidle(audio.o.dma)) - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status0, 1); - - if(audio.amode & Aread){ - left = audio.livol; - right = audio.rivol; - if (left[Vmic]+right[Vmic] == 0) { - /* Turn on automatic gain control (AGC) */ - data0e4[1] |= 0x10; - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data0e4, 2 ); - } else { - int v; - /* Turn on manual gain control */ - v = ((left[Vmic]+right[Vmic])*0x7f/200)&0x7f; - data0e4[1] &= ~0x13; - data0e5[1] &= ~0x1f; - data0e4[1] |= v & 0x3; - data0e5[0] |= (v & 0x7c)<<6; - data0e5[1] |= (v & 0x7c)>>2; - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data0e4, 2 ); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data0e5, 2 ); - } - if (left[Vinvert]+right[Vinvert] == 0) - status1[0] &= ~0x04; - else - status1[0] |= 0x04; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - if (debug) { - print("mxvolume: status1 = 0x%2.2ux\n", status1[0]); - print("mxvolume: data0e4 = 0x%4.4ux\n", data0e4[0]|data0e4[0]<<8); - print("mxvolume: data0e5 = 0x%4.4ux\n", data0e5[0]|data0e5[0]<<8); - } - } - if(audio.amode & Awrite){ - left = audio.lovol; - right = audio.rovol; - data00[0] &= ~0x3f; - data00[0] |= ((200-left[Vaudio]-right[Vaudio])*0x3f/200)&0x3f; - if (left[Vtreb]+right[Vtreb] <= 100 - && left[Vbass]+right[Vbass] <= 100) - /* settings neutral */ - data02[0] &= ~0x03; - else { - data02[0] |= 0x03; - data01[0] &= ~0x3f; - data01[0] |= ((left[Vtreb]+right[Vtreb]-100)*0x3/100)&0x03; - data01[0] |= (((left[Vbass]+right[Vbass]-100)*0xf/100)&0xf)<<2; - } - if (left[Vfilter]+right[Vfilter] == 0) - data02[0] &= ~0x10; - else - data02[0]|= 0x10; - if (left[Vinvert]+right[Vinvert] == 0) - status1[0] &= ~0x10; - else - status1[0] |= 0x10; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data00, 1); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data01, 1); - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data02, 1); - if (debug) { - print("mxvolume: status1 = 0x%2.2ux\n", status1[0]); - print("mxvolume: data00 = 0x%2.2ux\n", data00[0]); - print("mxvolume: data01 = 0x%2.2ux\n", data01[0]); - print("mxvolume: data02 = 0x%2.2ux\n", data02[0]); - } - } -} - -static void -setreg(char *name, int val, int n) -{ - uchar x[2]; - int i; - - x[0] = val; - x[1] = val>>8; - - if(strcmp(name, "pause") == 0){ - for(i = 0; i < n; i++) - microdelay(val); - return; - } - - switch(n){ - case 1: - case 2: - break; - default: - error("setreg"); - } - - if(strcmp(name, "status") == 0){ - L3_write(UDA1341_L3Addr | UDA1341_STATUS, x, n); - } else if(strcmp(name, "data0") == 0){ - L3_write(UDA1341_L3Addr | UDA1341_DATA0, x, n); - } else if(strcmp(name, "data1") == 0){ - L3_write(UDA1341_L3Addr | UDA1341_DATA1, x, n); - } else - error("setreg"); -} - -static void -outenable(void) { - /* turn on DAC, set output gain switch */ - audioamppower(1); - audiomute(0); - status1[0] |= 0x41; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - /* set volume */ - data00[0] |= 0xf; - L3_write(UDA1341_L3Addr | UDA1341_DATA0, data00, 1); - if (debug) { - print("outenable: status1 = 0x%2.2ux\n", status1[0]); - print("outenable: data00 = 0x%2.2ux\n", data00[0]); - } -} - -static void -outdisable(void) { - dmastop(audio.o.dma); - /* turn off DAC, clear output gain switch */ - audiomute(1); - status1[0] &= ~0x41; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - if (debug) { - print("outdisable: status1 = 0x%2.2ux\n", status1[0]); - } - audioamppower(0); -} - -static void -inenable(void) { - /* turn on ADC, set input gain switch */ - status1[0] |= 0x22; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - if (debug) { - print("inenable: status1 = 0x%2.2ux\n", status1[0]); - } -} - -static void -indisable(void) { - dmastop(audio.i.dma); - /* turn off ADC, clear input gain switch */ - status1[0] &= ~0x22; - L3_write(UDA1341_L3Addr | UDA1341_STATUS, status1, 1); - if (debug) { - print("indisable: status1 = 0x%2.2ux\n", status1[0]); - } -} - -static void -sendaudio(IOstate *s) { - /* interrupt routine calls this too */ - int n; - - if (debug > 1) print("#A: sendaudio\n"); - ilock(&s->ilock); - if ((audio.amode & Aread) && s->next == s->filling && dmaidle(s->dma)) { - // send an empty buffer to provide an input clock - zerodma |= dmastart(s->dma, Flushbuf, volumes[Vbufsize].ilval) & 0xff; - if (zerodma == 0) - if (debug) print("emptyfail\n"); - iostats.tx.empties++; - iunlock(&s->ilock); - return; - } - while (s->next != s->filling) { - s->next->nbytes &= ~0x3; /* must be a multiple of 4 */ - if(s->next->nbytes) { - if ((n = dmastart(s->dma, s->next->phys, s->next->nbytes)) == 0) { - iostats.tx.faildma++; - break; - } - iostats.tx.totaldma++; - switch (n >> 8) { - case 1: - iostats.tx.idledma++; - break; - case 3: - iostats.tx.faildma++; - break; - } - if (debug) { - if (debug > 1) - print("dmastart @%p\n", s->next); - else - iprint("+"); - } - s->next->nbytes = 0; - } - s->next++; - if (s->next == &s->buf[Nbuf]) - s->next = &s->buf[0]; - } - iunlock(&s->ilock); -} - -static void -recvaudio(IOstate *s) { - /* interrupt routine calls this too */ - int n; - - if (debug > 1) print("#A: recvaudio\n"); - ilock(&s->ilock); - while (s->next != s->emptying) { - assert(s->next->nbytes == 0); - if ((n = dmastart(s->dma, s->next->phys, volumes[Vbufsize].ilval)) == 0) { - iostats.rx.faildma++; - break; - } - iostats.rx.totaldma++; - switch (n >> 8) { - case 1: - iostats.rx.idledma++; - break; - case 3: - iostats.rx.faildma++; - break; - } - if (debug) { - if (debug > 1) - print("dmastart @%p\n", s->next); - else - iprint("+"); - } - s->next++; - if (s->next == &s->buf[Nbuf]) - s->next = &s->buf[0]; - } - iunlock(&s->ilock); -} - -void -audiopower(int flag) { - IOstate *s; - - if (debug) { - iprint("audiopower %d\n", flag); - } - if (flag) { - /* power on only when necessary */ - if (audio.amode) { - audioamppower(1); - audioicpower(1); - egpiobits(EGPIO_codec_reset, 1); - enable(); - if (audio.amode & Aread) { - inenable(); - s = &audio.i; - dmareset(s->dma, 1, 0, 4, 2, SSPRecvDMA, Port4SSP); - recvaudio(s); - } - if (audio.amode & Awrite) { - outenable(); - s = &audio.o; - dmareset(s->dma, 0, 0, 4, 2, SSPXmitDMA, Port4SSP); - sendaudio(s); - } - mxvolume(); - } - } else { - /* power off */ - if (audio.amode & Aread) - indisable(); - if (audio.amode & Awrite) - outdisable(); - egpiobits(EGPIO_codec_reset, 0); - audioamppower(0); - audioicpower(0); - } -} - -static void -audiointr(void *x, ulong ndma) { - IOstate *s = x; - - if (debug) { - if (debug > 1) - iprint("#A: audio interrupt @%p\n", s->current); - else - iprint("-"); - } - if (s == &audio.i || (ndma & ~zerodma)) { - /* A dma, not of a zero buffer completed, update current - * Only interrupt routine touches s->current - */ - s->current->nbytes = (s == &audio.i)? volumes[Vbufsize].ilval: 0; - s->current++; - if (s->current == &s->buf[Nbuf]) - s->current = &s->buf[0]; - } - if (ndma) { - if (s == &audio.o) { - zerodma &= ~ndma; - sendaudio(s); - } else if (s == &audio.i) - recvaudio(s); - } - wakeup(&s->vous); -} - -static Chan* -audioattach(char *param) -{ - return devattach('A', param); -} - -static Walkqid* -audiowalk(Chan *c, Chan *nc, char **name, int nname) -{ - return devwalk(c, nc, name, nname, audiodir, nelem(audiodir), devgen); -} - -static int -audiostat(Chan *c, uchar *db, int n) -{ - return devstat(c, db, n, audiodir, nelem(audiodir), devgen); -} - -static Chan* -audioopen(Chan *c, int mode) -{ - IOstate *s; - int omode = mode; - - switch((ulong)c->qid.path) { - default: - error(Eperm); - break; - - case Qstatus: - case Qstats: - if((omode&7) != OREAD) - error(Eperm); - case Qvolume: - case Qdir: - break; - - case Qaudio: - omode = (omode & 0x7) + 1; - if (omode & ~(Aread | Awrite)) - error(Ebadarg); - qlock(&audio); - if(audio.amode & omode){ - qunlock(&audio); - error(Einuse); - } - enable(); - memset(&iostats, 0, sizeof(iostats)); - if (omode & Aread) { - inenable(); - s = &audio.i; - if(s->bufinit == 0) - bufinit(s); - setempty(s); - s->emptying = &s->buf[Nbuf-1]; - s->chan = c; - s->dma = dmaalloc(1, 0, 4, 2, SSPRecvDMA, Port4SSP, audiointr, (void*)s); - audio.amode |= Aread; - } - if (omode & (Aread|Awrite) && (audio.amode & Awrite) == 0) { - s = &audio.o; - if(s->bufinit == 0) - bufinit(s); - setempty(s); - s->chan = c; - s->dma = dmaalloc(0, 0, 4, 2, SSPXmitDMA, Port4SSP, audiointr, (void*)s); - } - if (omode & Awrite) { - audio.amode |= Awrite; - outenable(); - } - mxvolume(); - if (audio.amode & Aread) - sendaudio(&audio.o); - qunlock(&audio); - - if (debug) print("open done\n"); - break; - } - c = devopen(c, mode, audiodir, nelem(audiodir), devgen); - c->mode = openmode(mode); - c->flag |= COPEN; - c->offset = 0; - - return c; -} - -static void -audioclose(Chan *c) -{ - IOstate *s; - - switch((ulong)c->qid.path) { - default: - error(Eperm); - break; - - case Qdir: - case Qvolume: - case Qstatus: - case Qstats: - break; - - case Qaudio: - if (debug > 1) print("#A: close\n"); - if(c->flag & COPEN) { - qlock(&audio); - if (audio.i.chan == c) { - /* closing the read end */ - audio.amode &= ~Aread; - s = &audio.i; - qlock(s); - indisable(); - setempty(s); - dmafree(s->dma); - qunlock(s); - if ((audio.amode & Awrite) == 0) { - s = &audio.o; - qlock(s); - while(waserror()) - ; - dmawait(s->dma); - poperror(); - outdisable(); - setempty(s); - dmafree(s->dma); - qunlock(s); - } - } - if (audio.o.chan == c) { - /* closing the write end */ - audio.amode &= ~Awrite; - s = &audio.o; - qlock(s); - if (s->filling->nbytes) { - /* send remaining partial buffer */ - s->filling++; - if (s->filling == &s->buf[Nbuf]) - s->filling = &s->buf[0]; - sendaudio(s); - } - while(waserror()) - ; - dmawait(s->dma); - poperror(); - outdisable(); - setempty(s); - if ((audio.amode & Aread) == 0) - dmafree(s->dma); - qunlock(s); - } - if (audio.amode == 0) { - /* turn audio off */ - egpiobits(EGPIO_codec_reset, 0); - audioicpower(0); - } - qunlock(&audio); - } - break; - } -} - -static long -audioread(Chan *c, void *v, long n, vlong off) -{ - int liv, riv, lov, rov; - long m, n0; - char buf[300]; - int j; - ulong offset = off; - char *p; - IOstate *s; - - n0 = n; - p = v; - switch((ulong)c->qid.path) { - default: - error(Eperm); - break; - - case Qdir: - return devdirread(c, p, n, audiodir, nelem(audiodir), devgen); - - case Qaudio: - if (debug > 1) print("#A: read %ld\n", n); - if((audio.amode & Aread) == 0) - error(Emode); - s = &audio.i; - qlock(s); - if(waserror()){ - qunlock(s); - nexterror(); - } - while(n > 0) { - if(s->emptying->nbytes == 0) { - if (debug > 1) print("#A: emptied @%p\n", s->emptying); - recvaudio(s); - s->emptying++; - if (s->emptying == &s->buf[Nbuf]) - s->emptying = s->buf; - } - /* wait if dma in progress */ - while (!dmaidle(s->dma) && s->emptying == s->current) { - if (debug > 1) print("#A: sleep\n"); - sleep(&s->vous, audioqnotempty, s); - } - - m = (s->emptying->nbytes > n)? n: s->emptying->nbytes; - memmove(p, s->emptying->virt + volumes[Vbufsize].ilval - - s->emptying->nbytes, m); - - s->emptying->nbytes -= m; - n -= m; - p += m; - } - poperror(); - qunlock(s); - break; - - case Qstatus: - buf[0] = 0; - snprint(buf, sizeof(buf), "bytes %lud\ntime %lld\n", - audio.totcount, audio.tottime); - return readstr(offset, p, n, buf); - - case Qstats: - buf[0] = 0; - snprint(buf, sizeof(buf), - "bytes %lud\nRX dmas %lud, while idle %lud, while busy %lud, " - "out-of-order %lud, empty dmas %lud\n" - "TX dmas %lud, while idle %lud, while busy %lud, " - "out-of-order %lud, empty dmas %lud\n", - iostats.bytes, iostats.rx.totaldma, iostats.rx.idledma, - iostats.rx.faildma, iostats.rx.samedma, iostats.rx.empties, - iostats.tx.totaldma, iostats.tx.idledma, - iostats.tx.faildma, iostats.tx.samedma, iostats.tx.empties); - - return readstr(offset, p, n, buf); - - case Qvolume: - j = 0; - buf[0] = 0; - for(m=0; volumes[m].name; m++){ - if (m == Vaudio) { - liv = audio.livol[m]; - riv = audio.rivol[m]; - lov = audio.lovol[m]; - rov = audio.rovol[m]; - } - else { - lov = liv = volumes[m].ilval; - rov = riv = volumes[m].irval; - } - - j += snprint(buf+j, sizeof(buf)-j, "%s", volumes[m].name); - if((volumes[m].flag & Fmono) || liv==riv && lov==rov){ - if((volumes[m].flag&(Fin|Fout))==(Fin|Fout) && liv==lov) - j += snprint(buf+j, sizeof(buf)-j, " %d", liv); - else{ - if(volumes[m].flag & Fin) - j += snprint(buf+j, sizeof(buf)-j, - " in %d", liv); - if(volumes[m].flag & Fout) - j += snprint(buf+j, sizeof(buf)-j, - " out %d", lov); - } - }else{ - if((volumes[m].flag&(Fin|Fout))==(Fin|Fout) && - liv==lov && riv==rov) - j += snprint(buf+j, sizeof(buf)-j, - " left %d right %d", - liv, riv); - else{ - if(volumes[m].flag & Fin) - j += snprint(buf+j, sizeof(buf)-j, - " in left %d right %d", - liv, riv); - if(volumes[m].flag & Fout) - j += snprint(buf+j, sizeof(buf)-j, - " out left %d right %d", - lov, rov); - } - } - j += snprint(buf+j, sizeof(buf)-j, "\n"); - } - return readstr(offset, p, n, buf); - } - return n0-n; -} - -static void -setaudio(int in, int out, int left, int right, int value) -{ - if (value < 0 || value > 100) - error(Evolume); - if(left && out) - audio.lovol[Vaudio] = value; - if(left && in) - audio.livol[Vaudio] = value; - if(right && out) - audio.rovol[Vaudio] = value; - if(right && in) - audio.rivol[Vaudio] = value; -} - -static void -setspeed(int, int, int, int, int speed) -{ - uchar clock; - - /* external clock configured for 44100 samples/sec */ - switch (speed) { - case 32000: - /* 00 */ - gpioregs->clear = GPIO_CLK_SET0_o|GPIO_CLK_SET1_o; - clock = SC384FS; /* Only works in MSB mode! */ - break; - case 48000: - /* 00 */ - gpioregs->clear = GPIO_CLK_SET0_o|GPIO_CLK_SET1_o; - clock = SC256FS; - break; - default: - speed = 44100; - case 44100: - /* 01 */ - gpioregs->set = GPIO_CLK_SET0_o; - gpioregs->clear = GPIO_CLK_SET1_o; - clock = SC256FS; - break; - case 8000: - /* 10 */ - gpioregs->set = GPIO_CLK_SET1_o; - gpioregs->clear = GPIO_CLK_SET0_o; - clock = SC512FS; /* Only works in MSB mode! */ - break; - case 16000: - /* 10 */ - gpioregs->set = GPIO_CLK_SET1_o; - gpioregs->clear = GPIO_CLK_SET0_o; - clock = SC256FS; - break; - case 11025: - /* 11 */ - gpioregs->set = GPIO_CLK_SET0_o|GPIO_CLK_SET1_o; - clock = SC512FS; /* Only works in MSB mode! */ - break; - case 22050: - /* 11 */ - gpioregs->set = GPIO_CLK_SET0_o|GPIO_CLK_SET1_o; - clock = SC256FS; - break; - } - - /* Wait for the UDA1341 to wake up */ - delay(100); - - /* Reset the chip */ - status0[0] &= ~CLOCKMASK; - - status0[0] |=clock; - volumes[Vspeed].ilval = speed; -} - -static void -setbufsize(int, int, int, int, int value) -{ - if ((value % 8) != 0 || value < 8 || value >= Bufsize) - error(Ebadarg); - volumes[Vbufsize].ilval = value; -} - -static long -audiowrite(Chan *c, void *vp, long n, vlong) -{ - long m, n0; - int i, v, left, right, in, out; - char *p; - IOstate *a; - Cmdbuf *cb; - - p = vp; - n0 = n; - switch((ulong)c->qid.path) { - default: - error(Eperm); - break; - - case Qvolume: - v = Vaudio; - left = 1; - right = 1; - in = 1; - out = 1; - cb = parsecmd(p, n); - if(waserror()){ - free(cb); - nexterror(); - } - - for(i = 0; i < cb->nf; i++){ - /* - * a number is volume - */ - if(cb->f[i][0] >= '0' && cb->f[i][0] <= '9') { - m = strtoul(cb->f[i], 0, 10); - if (volumes[v].setval) - volumes[v].setval(in, out, left, right, m); - goto cont0; - } - - for(m=0; volumes[m].name; m++) { - if(strcmp(cb->f[i], volumes[m].name) == 0) { - v = m; - in = 1; - out = 1; - left = 1; - right = 1; - goto cont0; - } - } - - if(strcmp(cb->f[i], "reset") == 0) { - resetlevel(); - goto cont0; - } - if(strcmp(cb->f[i], "debug") == 0) { - debug = debug?0:1; - goto cont0; - } - if(strcmp(cb->f[i], "in") == 0) { - in = 1; - out = 0; - goto cont0; - } - if(strcmp(cb->f[i], "out") == 0) { - in = 0; - out = 1; - goto cont0; - } - if(strcmp(cb->f[i], "left") == 0) { - left = 1; - right = 0; - goto cont0; - } - if(strcmp(cb->f[i], "right") == 0) { - left = 0; - right = 1; - goto cont0; - } - if(strcmp(cb->f[i], "reg") == 0) { - if(cb->nf < 3) - error(Evolume); - setreg(cb->f[1], strtol(cb->f[2], 0, 0), - cb->nf == 4 ? strtol(cb->f[3], 0, 0):1); - return n0; - } - error(Evolume); - break; - cont0:; - } - mxvolume(); - poperror(); - free(cb); - break; - - case Qaudio: - if (debug > 1) print("#A: write %ld\n", n); - if((audio.amode & Awrite) == 0) - error(Emode); - a = &audio.o; - qlock(a); - if(waserror()){ - qunlock(a); - nexterror(); - } - while(n > 0) { - /* wait if dma in progress */ - while (!dmaidle(a->dma) && !zerodma && a->filling == a->current) { - if (debug > 1) print("#A: sleep\n"); - sleep(&a->vous, audioqnotfull, a); - } - m = volumes[Vbufsize].ilval - a->filling->nbytes; - if(m > n) - m = n; - memmove(a->filling->virt + a->filling->nbytes, p, m); - - a->filling->nbytes += m; - n -= m; - p += m; - if(a->filling->nbytes >= volumes[Vbufsize].ilval) { - if (debug > 1) print("#A: filled @%p\n", a->filling); - a->filling++; - if (a->filling == &a->buf[Nbuf]) - a->filling = a->buf; - sendaudio(a); - } - } - poperror(); - qunlock(a); - break; - } - return n0 - n; -} - -Dev uda1341devtab = { - 'A', - "audio", - - devreset, - audioinit, - devshutdown, - audioattach, - audiowalk, - audiostat, - audioopen, - devcreate, - audioclose, - audioread, - devbread, - audiowrite, - devbwrite, - devremove, - devwstat, - audiopower, -}; diff --git a/sys/src/9/bitsy/devµc.c b/sys/src/9/bitsy/devµc.c deleted file mode 100644 index 36ddb90f6..000000000 --- a/sys/src/9/bitsy/devµc.c +++ /dev/null @@ -1,407 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" - -enum{ - Qdir, - Qbacklight, - Qbattery, - Qbuttons, - Qcruft, - Qled, - Qversion, - Qpower, - - /* command types */ - BLversion= 0, - BLbuttons= 2, /* button events */ - BLtouch= 3, /* read touch screen events */ - BLled= 8, /* turn LED on/off */ - BLbattery= 9, /* read battery status */ - BLbacklight= 0xd, /* backlight control */ - - SOF= 0x2, /* start of frame */ -}; - -Dirtab µcdir[]={ - ".", { Qdir, 0, QTDIR }, 0, DMDIR|0755, - "backlight", { Qbacklight, 0 }, 0, 0664, - "battery", { Qbattery, 0 }, 0, 0664, - "buttons", { Qbuttons, 0 }, 0, 0664, - "cruft", { Qcruft, 0 }, 0, 0664, - "led", { Qled, 0 }, 0, 0664, - "version", { Qversion, 0 }, 0, 0664, - "power", { Qpower, 0 }, 0, 0600, -}; - -static struct µcontroller -{ - /* message being rcvd */ - int state; - uchar buf[16+4]; - uchar n; - - /* for messages that require acks */ - QLock; - Rendez r; - - /* battery */ - uchar acstatus; - uchar voltage; - ushort batstatus; - uchar batchem; - - /* version string */ - char version[16+2]; -} ctlr; - -extern int landscape; - -int -µcputc(Queue*, int ch) -{ - int i, len, b, up; - uchar cksum; - uchar *p; - static int samseq; - static int touching; /* guard against something we call going spllo() */ - static int buttoning; /* guard against something we call going spllo() */ - - if(ctlr.n > sizeof(ctlr.buf)) - panic("µcputc"); - - ctlr.buf[ctlr.n++] = (uchar)ch; - - for(;;){ - /* message hasn't started yet? */ - if(ctlr.buf[0] != SOF){ - p = memchr(ctlr.buf, SOF, ctlr.n); - if(p == nil){ - ctlr.n = 0; - break; - } else { - ctlr.n -= p-ctlr.buf; - memmove(ctlr.buf, p, ctlr.n); - } - } - - /* whole msg? */ - len = ctlr.buf[1] & 0xf; - if(ctlr.n < 3 || ctlr.n < len+3) - break; - - /* check the sum */ - ctlr.buf[0] = ~SOF; /* make sure we process this msg exactly once */ - cksum = 0; - for(i = 1; i < len+2; i++) - cksum += ctlr.buf[i]; - if(ctlr.buf[len+2] != cksum) - continue; - - /* parse resulting message */ - p = ctlr.buf+2; - switch(ctlr.buf[1] >> 4){ - case BLversion: - strncpy(ctlr.version, (char*)p, len); - ctlr.version[len] = '0'; - strcat(ctlr.version, "\n"); - wakeup(&ctlr.r); - break; - case BLbuttons: - if(len < 1 || buttoning) - break; - buttoning = 1; - b = p[0] & 0x7f; - up = p[0] & 0x80; - - if(b <= 5){ - /* like mouse buttons */ - if(--b == 0) - b = 5; - penbutton(up, 1< 10){ - if (landscape) - pentrackxy((p[0]<<8)|p[1], (p[2]<<8)|p[3]); - else - pentrackxy((p[2]<<8)|p[3], (p[0]<<8)|p[1]); - } - } else { - samseq = 0; - pentrackxy(-1, -1); - } - touching = 0; - break; - case BLled: - wakeup(&ctlr.r); - break; - case BLbattery: - if(len >= 5){ - ctlr.acstatus = p[0]; - ctlr.voltage = (p[3]<<8)|p[2]; - ctlr.batstatus = p[4]; - ctlr.batchem = p[1]; - } - wakeup(&ctlr.r); - break; - case BLbacklight: - wakeup(&ctlr.r); - break; - default: - print("unknown µc message: %ux", ctlr.buf[1] >> 4); - for(i = 0; i < len; i++) - print(" %ux", p[i]); - print("\n"); - break; - } - - /* remove the message */ - ctlr.n -= len+3; - memmove(ctlr.buf, &ctlr.buf[len+3], ctlr.n); - } - return 0; -} - -static void -_sendmsg(uchar id, uchar *data, int len) -{ - uchar buf[20]; - uchar cksum; - uchar c; - uchar *p = buf; - int i; - - /* create the message */ - if(sizeof(buf) < len+4) - return; - cksum = (id<<4) | len; - *p++ = SOF; - *p++ = cksum; - for(i = 0; i < len; i++){ - c = data[i]; - cksum += c; - *p++ = c; - } - *p++ = cksum; - - /* send the message - there should be a more generic way to do this */ - serialµcputs(buf, p-buf); -} - -/* the tsleep takes care of lost acks */ -static void -sendmsgwithack(uchar id, uchar *data, int len) -{ - if(waserror()){ - qunlock(&ctlr); - nexterror(); - } - qlock(&ctlr); - _sendmsg(id, data, len); - tsleep(&ctlr.r, return0, 0, 100); - qunlock(&ctlr); - poperror(); -} - -static void -sendmsg(uchar id, uchar *data, int len) -{ - if(waserror()){ - qunlock(&ctlr); - nexterror(); - } - qlock(&ctlr); - _sendmsg(id, data, len); - qunlock(&ctlr); - poperror(); -} - -void -µcinit(void) -{ -} - -static Chan* -µcattach(char* spec) -{ - return devattach('r', spec); -} - -static Walkqid* -µcwalk(Chan *c, Chan *nc, char **name, int nname) -{ - return devwalk(c, nc, name, nname, µcdir, nelem(µcdir), devgen); -} - -static int -µcstat(Chan *c, uchar *dp, int n) -{ - return devstat(c, dp, n, µcdir, nelem(µcdir), devgen); -} - -static Chan* -µcopen(Chan* c, int omode) -{ - omode = openmode(omode); - if(!iseve()) - error(Eperm); - return devopen(c, omode, µcdir, nelem(µcdir), devgen); -} - -static void -µcclose(Chan*) -{ -} - -char* -acstatus(int x) -{ - if(x) - return "attached"; - else - return "detached"; -} - -char* -batstatus(int x) -{ - switch(x){ - case 1: return "high"; - case 2: return "low"; - case 4: return "critical"; - case 8: return "charging"; - case 0x80: return "none"; - } - return "ok"; -} - -static long -µcread(Chan* c, void* a, long n, vlong off) -{ - char buf[64]; - - if(c->qid.path == Qdir) - return devdirread(c, a, n, µcdir, nelem(µcdir), devgen); - - switch((ulong)c->qid.path){ - case Qbattery: - sendmsgwithack(BLbattery, nil, 0); /* send a battery request */ - sprint(buf, "voltage: %d\nac: %s\nstatus: %s\n", ctlr.voltage, - acstatus(ctlr.acstatus), - batstatus(ctlr.batstatus)); - return readstr(off, a, n, buf); - case Qversion: - sendmsgwithack(BLversion, nil, 0); /* send a battery request */ - return readstr(off, a, n, ctlr.version); - } - error(Ebadarg); - return 0; -} - -#define PUTBCD(n,o) bcdclock[o] = (n % 10) | (((n / 10) % 10)<<4) - -static uchar lightdata[16]; - -static long -µcwrite(Chan* c, void* a, long n, vlong) -{ - Cmdbuf *cmd; - uchar data[16]; - char str[64]; - int i, j; - ulong l; - Rune r; - extern ulong resumeaddr[]; - extern void power_resume(void); - - if(c->qid.path == Qpower){ - if(!iseve()) - error(Eperm); - if(strncmp(a, "suspend", 7) == 0) - *resumeaddr = (ulong)power_resume; - else if(strncmp(a, "halt", 4) == 0) - *resumeaddr = 0; - else if(strncmp(a, "wakeup", 6) == 0){ - cmd = parsecmd(a, n); - if (cmd->nf != 2) - error(Ebadarg); - l = strtoul(cmd->f[1], 0, 0); - rtcalarm(l); - return n; - } else - error(Ebadarg); - deepsleep(); - return n; - } - - cmd = parsecmd(a, n); - if(cmd->nf > 15) - error(Ebadarg); - for(i = 0; i < cmd->nf; i++) - data[i] = strtol(cmd->f[i], 0, 0); - - switch((ulong)c->qid.path){ - case Qled: - sendmsgwithack(BLled, data, cmd->nf); - break; - case Qbacklight: - memmove(lightdata, data, 16); - sendmsgwithack(BLbacklight, data, cmd->nf); - break; - case Qcruft: -// lcdtweak(cmd); - break; - default: - error(Ebadarg); - } - return n; -} - -void -µcpower(int on) -{ - uchar data[16]; - if (on == 0) - return; - /* maybe dangerous, not holding the lock */ - if (lightdata[0] == 0){ - data[0]= 2; - data[1]= 1; - data[2]= 0; - } else - memmove(data, lightdata, 16); - _sendmsg(0xd, data, 3); - wakeup(&ctlr.r); -} - -Dev µcdevtab = { - 'r', - "µc", - - devreset, - µcinit, - devshutdown, - µcattach, - µcwalk, - µcstat, - µcopen, - devcreate, - µcclose, - µcread, - devbread, - µcwrite, - devbwrite, - devremove, - devwstat, -}; diff --git a/sys/src/9/bitsy/etherif.h b/sys/src/9/bitsy/etherif.h deleted file mode 100644 index f51294ffb..000000000 --- a/sys/src/9/bitsy/etherif.h +++ /dev/null @@ -1,39 +0,0 @@ -enum { - MaxEther = 24, - Ntypes = 8, -}; - -typedef struct Ether Ether; -struct Ether { - DevConf; - - int ctlrno; - int tbdf; /* type+busno+devno+funcno */ - int minmtu; - int maxmtu; - uchar ea[Eaddrlen]; - int encry; - - void (*attach)(Ether*); /* filled in by reset routine */ - void (*detach)(Ether*); - void (*transmit)(Ether*); - void (*interrupt)(Ureg*, void*); - long (*ifstat)(Ether*, void*, long, ulong); - long (*ctl)(Ether*, void*, long); /* custom ctl messages */ - void (*power)(Ether*, int); /* power on/off */ - void (*shutdown)(Ether*); /* shutdown hardware before reboot */ - void *ctlr; - - Queue* oq; - - Netif; -}; - -extern Block* etheriq(Ether*, Block*, int); -extern void addethercard(char*, int(*)(Ether*)); -extern ulong ethercrc(uchar*, int); - -#define NEXT(x, l) (((x)+1)%(l)) -#define PREV(x, l) (((x) == 0) ? (l)-1: (x)-1) -#define HOWMANY(x, y) (((x)+((y)-1))/(y)) -#define ROUNDUP(x, y) (HOWMANY((x), (y))*(y)) diff --git a/sys/src/9/bitsy/etherwavelan.c b/sys/src/9/bitsy/etherwavelan.c deleted file mode 100644 index bc45ad066..000000000 --- a/sys/src/9/bitsy/etherwavelan.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Bitsy pcmcia code for wavelan.c */ - -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" -#include "../port/netif.h" -#include "etherif.h" -#include "../pc/wavelan.h" - -static int -wavelanpcmciareset(Ether *ether) -{ - Ctlr *ctlr; - - if((ctlr = malloc(sizeof(Ctlr))) == nil) - return -1; - - ilock(ctlr); - ctlr->ctlrno = ether->ctlrno; - - if (ether->ports == nil){ - ether->ports = malloc(sizeof(Devport)); - ether->ports[0].port = 0; - ether->ports[0].size = 0; - ether->nports= 1; - } - if (ether->ports[0].port==0) - ether->ports[0].port=WDfltIOB; - ctlr->iob = ether->ports[0].port; - - if(wavelanreset(ether, ctlr) < 0){ - iunlock(ctlr); - free(ctlr); - ether->ctlr = nil; - return -1; - } - iunlock(ctlr); - return 0; -} - -void -etherwavelanlink(void) -{ - addethercard("wavelan", wavelanpcmciareset); -} diff --git a/sys/src/9/bitsy/fns.h b/sys/src/9/bitsy/fns.h deleted file mode 100644 index f7bece5c3..000000000 --- a/sys/src/9/bitsy/fns.h +++ /dev/null @@ -1,121 +0,0 @@ -#include "../port/portfns.h" - -void audiopower(int); -void audioamppower(int); -void audioicpower(int); -void cacheflush(void); -void cachewb(void); -void cachewbaddr(void*); -void cachewbregion(ulong, int); -ulong cankaddr(ulong); -void dcacheinvalidate(void); -int cistrcmp(char*, char*); -int cistrncmp(char*, char*, int); -void clockinit(void); -ulong clockpower(int); -int cmpswap(long*, long, long); -#define coherence() -#define cycles(x) do{}while(0) -#define dcflush(a, b) -void delay(int); -void µcpower(int); -void deepsleep(void); -void dmainit(void); -void doze(void); -void egpiobits(ulong, int); -void evenaddr(ulong); -ulong findva(ulong, ulong, ulong); -void flashprogpower(int); -void flushmmu(void); -int fpiarm(Ureg *ur); -char* getconf(char*); -ulong getcpuid(void); -ulong getfar(void); -ulong getfsr(void); -ulong getcontrol(void); -ulong getdac(void); -ulong getttb(void); -void* getlink(void); -#define getpgcolor(a) 0 -ulong getsp(void); -void icacheinvalidate(void); -void idle(void); -void idlehands(void); -uchar inb(ulong); -ushort ins(ulong); -void inss(ulong, void*, int); -ulong inl(ulong); -void intrdisable(int, int, void (*)(Ureg*, void*), void*, char*); -void intrenable(int, int, void (*)(Ureg*, void*), void*, char*); -void irpower(int); -#define kexit(a) -#define kmapinval() -void lcdpower(int); -void links(void); -void* mapmem(ulong, int, int); -void mappedIvecEnable(void); -void mappedIvecDisable(void); -void* mapspecial(ulong, int); -void meminit(void); -void mmuinit(void); -void mmuenable(void); -void mmudisable(void); -void mmuinvalidate(void); -void mmuinvalidateaddr(ulong); -void mmurestart(void); -ulong mmu_kaddr(ulong); -ulong mmu_paddr(ulong); -int µcputc(Queue*, int); -void noted(Ureg*, ulong); -int notify(Ureg*); -void outb(ulong, uchar); -void outs(ulong, ushort); -void outss(ulong, void*, int); -void outl(ulong, ulong); -void pcmciapower(int); -void pcmcisread(PCMslot*); -int pcmcistuple(int, int, int, void*, int); -PCMmap* pcmmap(int, ulong, int, int); -void pcmunmap(int, PCMmap*); -void penbutton(int, int); -void pentrackxy(int x, int y); -void power_down(void); -void powerinit(void); -void powerkproc(void*); -#define procrestore(p) -void procsave(Proc*); -void procsetup(Proc*); -void procfork(Proc*); -void putdac(ulong); -void putttb(ulong); -void putpid(ulong); -void resetsuspendtimer(void); -void rs232power(int); -void rtcalarm(ulong); -void sa1110_uartsetup(int); -void screeninit(void); -void screenpower(int); -void serialµcputs(uchar *str, int n); -void setr13(int, ulong*); -uchar* tarlookup(uchar*, char*, int*); -void timersinit(void); -void timeradd(Timer*); -void timerdel(Timer*); -void timerset(Tval); -void touser(void*); -void trapdump(char *tag); -void trapinit(void); -void trapresume(void); -int tas(void*); -void uartpower(int); -int uartstageoutput(Uart*); -void uartkick(void*); -void uartrecv(Uart*, char); -#define userureg(ur) (((ur)->psr & PsrMask) == PsrMusr) -void vectors(void); -void vtable(void); -void wbflush(void); -#define KADDR(a) (void*)mmu_kaddr((ulong)(a)) -#define PADDR(a) mmu_paddr((ulong)(a)) - -#define waserror() (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1])) diff --git a/sys/src/9/bitsy/fpi.c b/sys/src/9/bitsy/fpi.c deleted file mode 100644 index f341f2e4a..000000000 --- a/sys/src/9/bitsy/fpi.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Floating Point Interpreter. - * shamelessly stolen from an original by ark. - */ -#include "fpi.h" - -void -fpiround(Internal *i) -{ - unsigned long guard; - - guard = i->l & GuardMask; - i->l &= ~GuardMask; - if(guard > (LsBit>>1) || (guard == (LsBit>>1) && (i->l & LsBit))){ - i->l += LsBit; - if(i->l & CarryBit){ - i->l &= ~CarryBit; - i->h++; - if(i->h & CarryBit){ - if (i->h & 0x01) - i->l |= CarryBit; - i->l >>= 1; - i->h >>= 1; - i->e++; - } - } - } -} - -static void -matchexponents(Internal *x, Internal *y) -{ - int count; - - count = y->e - x->e; - x->e = y->e; - if(count >= 2*FractBits){ - x->l = x->l || x->h; - x->h = 0; - return; - } - if(count >= FractBits){ - count -= FractBits; - x->l = x->h|(x->l != 0); - x->h = 0; - } - while(count > 0){ - count--; - if(x->h & 0x01) - x->l |= CarryBit; - if(x->l & 0x01) - x->l |= 2; - x->l >>= 1; - x->h >>= 1; - } -} - -static void -shift(Internal *i) -{ - i->e--; - i->h <<= 1; - i->l <<= 1; - if(i->l & CarryBit){ - i->l &= ~CarryBit; - i->h |= 0x01; - } -} - -static void -normalise(Internal *i) -{ - while((i->h & HiddenBit) == 0) - shift(i); -} - -static void -renormalise(Internal *i) -{ - if(i->e < -2 * FractBits) - i->e = -2 * FractBits; - while(i->e < 1){ - i->e++; - if(i->h & 0x01) - i->l |= CarryBit; - i->h >>= 1; - i->l = (i->l>>1)|(i->l & 0x01); - } - if(i->e >= ExpInfinity) - SetInfinity(i); -} - -void -fpinormalise(Internal *x) -{ - if(!IsWeird(x) && !IsZero(x)) - normalise(x); -} - -void -fpiadd(Internal *x, Internal *y, Internal *i) -{ - Internal *t; - - i->s = x->s; - if(IsWeird(x) || IsWeird(y)){ - if(IsNaN(x) || IsNaN(y)) - SetQNaN(i); - else - SetInfinity(i); - return; - } - if(x->e > y->e){ - t = x; - x = y; - y = t; - } - matchexponents(x, y); - i->e = x->e; - i->h = x->h + y->h; - i->l = x->l + y->l; - if(i->l & CarryBit){ - i->h++; - i->l &= ~CarryBit; - } - if(i->h & (HiddenBit<<1)){ - if(i->h & 0x01) - i->l |= CarryBit; - i->l = (i->l>>1)|(i->l & 0x01); - i->h >>= 1; - i->e++; - } - if(IsWeird(i)) - SetInfinity(i); -} - -void -fpisub(Internal *x, Internal *y, Internal *i) -{ - Internal *t; - - if(y->e < x->e - || (y->e == x->e && (y->h < x->h || (y->h == x->h && y->l < x->l)))){ - t = x; - x = y; - y = t; - } - i->s = y->s; - if(IsNaN(y)){ - SetQNaN(i); - return; - } - if(IsInfinity(y)){ - if(IsInfinity(x)) - SetQNaN(i); - else - SetInfinity(i); - return; - } - matchexponents(x, y); - i->e = y->e; - i->h = y->h - x->h; - i->l = y->l - x->l; - if(i->l < 0){ - i->l += CarryBit; - i->h--; - } - if(i->h == 0 && i->l == 0) - SetZero(i); - else while(i->e > 1 && (i->h & HiddenBit) == 0) - shift(i); -} - -#define CHUNK (FractBits/2) -#define CMASK ((1<>CHUNK) & CMASK) -#define LO(x) ((short)(x) & CMASK) -#define SPILL(x) ((x)>>CHUNK) -#define M(x, y) ((long)a[x]*(long)b[y]) -#define C(h, l) (((long)((h) & CMASK)<s = x->s^y->s; - if(IsWeird(x) || IsWeird(y)){ - if(IsNaN(x) || IsNaN(y) || IsZero(x) || IsZero(y)) - SetQNaN(i); - else - SetInfinity(i); - return; - } - else if(IsZero(x) || IsZero(y)){ - SetZero(i); - return; - } - normalise(x); - normalise(y); - i->e = x->e + y->e - (ExpBias - 1); - - a[0] = HI(x->h); b[0] = HI(y->h); - a[1] = LO(x->h); b[1] = LO(y->h); - a[2] = HI(x->l); b[2] = HI(y->l); - a[3] = LO(x->l); b[3] = LO(y->l); - - c[6] = M(3, 3); - c[5] = M(2, 3) + M(3, 2) + SPILL(c[6]); - c[4] = M(1, 3) + M(2, 2) + M(3, 1) + SPILL(c[5]); - c[3] = M(0, 3) + M(1, 2) + M(2, 1) + M(3, 0) + SPILL(c[4]); - c[2] = M(0, 2) + M(1, 1) + M(2, 0) + SPILL(c[3]); - c[1] = M(0, 1) + M(1, 0) + SPILL(c[2]); - c[0] = M(0, 0) + SPILL(c[1]); - - f[0] = c[0]; - f[1] = C(c[1], c[2]); - f[2] = C(c[3], c[4]); - f[3] = C(c[5], c[6]); - - if((f[0] & HiddenBit) == 0){ - f[0] <<= 1; - f[1] <<= 1; - f[2] <<= 1; - f[3] <<= 1; - if(f[1] & CarryBit){ - f[0] |= 1; - f[1] &= ~CarryBit; - } - if(f[2] & CarryBit){ - f[1] |= 1; - f[2] &= ~CarryBit; - } - if(f[3] & CarryBit){ - f[2] |= 1; - f[3] &= ~CarryBit; - } - i->e--; - } - i->h = f[0]; - i->l = f[1]; - if(f[2] || f[3]) - i->l |= 1; - renormalise(i); -} - -void -fpidiv(Internal *x, Internal *y, Internal *i) -{ - i->s = x->s^y->s; - if(IsNaN(x) || IsNaN(y) - || (IsInfinity(x) && IsInfinity(y)) || (IsZero(x) && IsZero(y))){ - SetQNaN(i); - return; - } - else if(IsZero(x) || IsInfinity(y)){ - SetInfinity(i); - return; - } - else if(IsInfinity(x) || IsZero(y)){ - SetZero(i); - return; - } - normalise(x); - normalise(y); - i->h = 0; - i->l = 0; - i->e = y->e - x->e + (ExpBias + 2*FractBits - 1); - do{ - if(y->h > x->h || (y->h == x->h && y->l >= x->l)){ - i->l |= 0x01; - y->h -= x->h; - y->l -= x->l; - if(y->l < 0){ - y->l += CarryBit; - y->h--; - } - } - shift(y); - shift(i); - }while ((i->h & HiddenBit) == 0); - if(y->h || y->l) - i->l |= 0x01; - renormalise(i); -} - -int -fpicmp(Internal *x, Internal *y) -{ - if(IsNaN(x) && IsNaN(y)) - return 0; - if(IsInfinity(x) && IsInfinity(y)) - return y->s - x->s; - if(x->e == y->e && x->h == y->h && x->l == y->l) - return y->s - x->s; - if(x->e < y->e - || (x->e == y->e && (x->h < y->h || (x->h == y->h && x->l < y->l)))) - return y->s ? 1: -1; - return x->s ? -1: 1; -} diff --git a/sys/src/9/bitsy/fpi.h b/sys/src/9/bitsy/fpi.h deleted file mode 100644 index abaa7c120..000000000 --- a/sys/src/9/bitsy/fpi.h +++ /dev/null @@ -1,61 +0,0 @@ -typedef long Word; -typedef unsigned long Single; -typedef struct { - unsigned long l; - unsigned long h; -} Double; - -enum { - FractBits = 28, - CarryBit = 0x10000000, - HiddenBit = 0x08000000, - MsBit = HiddenBit, - NGuardBits = 3, - GuardMask = 0x07, - LsBit = (1<e >= ExpInfinity) -#define IsInfinity(n) (IsWeird(n) && (n)->h == HiddenBit && (n)->l == 0) -#define SetInfinity(n) ((n)->e = ExpInfinity, (n)->h = HiddenBit, (n)->l = 0) -#define IsNaN(n) (IsWeird(n) && (((n)->h & ~HiddenBit) || (n)->l)) -#define SetQNaN(n) ((n)->s = 0, (n)->e = ExpInfinity, \ - (n)->h = HiddenBit|(LsBit<<1), (n)->l = 0) -#define IsZero(n) ((n)->e == 1 && (n)->h == 0 && (n)->l == 0) -#define SetZero(n) ((n)->e = 1, (n)->h = 0, (n)->l = 0) - -/* - * fpi.c - */ -extern void fpiround(Internal *); -extern void fpiadd(Internal *, Internal *, Internal *); -extern void fpisub(Internal *, Internal *, Internal *); -extern void fpimul(Internal *, Internal *, Internal *); -extern void fpidiv(Internal *, Internal *, Internal *); -extern int fpicmp(Internal *, Internal *); -extern void fpinormalise(Internal*); - -/* - * fpimem.c - */ -extern void fpis2i(Internal *, void *); -extern void fpid2i(Internal *, void *); -extern void fpiw2i(Internal *, void *); -extern void fpii2s(void *, Internal *); -extern void fpii2d(void *, Internal *); -extern void fpii2w(Word *, Internal *); diff --git a/sys/src/9/bitsy/fpiarm.c b/sys/src/9/bitsy/fpiarm.c deleted file mode 100644 index 332b596b9..000000000 --- a/sys/src/9/bitsy/fpiarm.c +++ /dev/null @@ -1,570 +0,0 @@ -/* - * this doesn't attempt to implement ARM floating-point properties - * that aren't visible in the Inferno environment. - * all arithmetic is done in double precision. - * the FP trap status isn't updated. - */ -#include -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" - -#include - -#include "fpi.h" - -/* undef this if correct kernel r13 isn't in Ureg; - * check calculation in fpiarm below - */ - - -#define REG(ur, x) (*(long*)(((char*)(ur))+roff[(x)])) -#define FR(ufp, x) (*(Internal*)(ufp)->regs[(x)&7]) - -typedef struct FP2 FP2; -typedef struct FP1 FP1; - -struct FP2 { - char* name; - void (*f)(Internal, Internal, Internal*); -}; - -struct FP1 { - char* name; - void (*f)(Internal*, Internal*); -}; - -enum { - N = 1<<31, - Z = 1<<30, - C = 1<<29, - V = 1<<28, - REGPC = 15, -}; - -int fpemudebug = 0; - -#undef OFR -#define OFR(X) ((ulong)&((Ureg*)0)->X) - -static int roff[] = { - OFR(r0), OFR(r1), OFR(r2), OFR(r3), - OFR(r4), OFR(r5), OFR(r6), OFR(r7), - OFR(r8), OFR(r9), OFR(r10), OFR(r11), - OFR(r12), OFR(r13), OFR(r14), OFR(pc), -}; - -static Internal fpconst[8] = { /* indexed by op&7 */ - /* s, e, l, h */ - {0, 0x1, 0x00000000, 0x00000000}, /* 0.0 */ - {0, 0x3FF, 0x00000000, 0x08000000}, /* 1.0 */ - {0, 0x400, 0x00000000, 0x08000000}, /* 2.0 */ - {0, 0x400, 0x00000000, 0x0C000000}, /* 3.0 */ - {0, 0x401, 0x00000000, 0x08000000}, /* 4.0 */ - {0, 0x401, 0x00000000, 0x0A000000}, /* 5.0 */ - {0, 0x3FE, 0x00000000, 0x08000000}, /* 0.5 */ - {0, 0x402, 0x00000000, 0x0A000000}, /* 10.0 */ -}; - -/* - * arm binary operations - */ - -static void -fadd(Internal m, Internal n, Internal *d) -{ - (m.s == n.s? fpiadd: fpisub)(&m, &n, d); -} - -static void -fsub(Internal m, Internal n, Internal *d) -{ - m.s ^= 1; - (m.s == n.s? fpiadd: fpisub)(&m, &n, d); -} - -static void -fsubr(Internal m, Internal n, Internal *d) -{ - n.s ^= 1; - (n.s == m.s? fpiadd: fpisub)(&n, &m, d); -} - -static void -fmul(Internal m, Internal n, Internal *d) -{ - fpimul(&m, &n, d); -} - -static void -fdiv(Internal m, Internal n, Internal *d) -{ - fpidiv(&m, &n, d); -} - -static void -fdivr(Internal m, Internal n, Internal *d) -{ - fpidiv(&n, &m, d); -} - -/* - * arm unary operations - */ - -static void -fmov(Internal *m, Internal *d) -{ - *d = *m; -} - -static void -fmovn(Internal *m, Internal *d) -{ - *d = *m; - d->s ^= 1; -} - -static void -fabsf(Internal *m, Internal *d) -{ - *d = *m; - d->s = 0; -} - -static void -frnd(Internal *m, Internal *d) -{ - short e; - - (m->s? fsub: fadd)(fpconst[6], *m, d); - if(IsWeird(d)) - return; - fpiround(d); - e = (d->e - ExpBias) + 1; - if(e <= 0) - SetZero(d); - else if(e > FractBits){ - if(e < 2*FractBits) - d->l &= ~((1<<(2*FractBits - e))-1); - }else{ - d->l = 0; - if(e < FractBits) - d->h &= ~((1<<(FractBits-e))-1); - } -} - -static FP1 optab1[16] = { /* Fd := OP Fm */ -[0] {"MOVF", fmov}, -[1] {"NEGF", fmovn}, -[2] {"ABSF", fabsf}, -[3] {"RNDF", frnd}, -[4] {"SQTF", /*fsqt*/0}, -/* LOG, LGN, EXP, SIN, COS, TAN, ASN, ACS, ATN all `deprecated' */ -/* URD and NRM aren't implemented */ -}; - -static FP2 optab2[16] = { /* Fd := Fn OP Fm */ -[0] {"ADDF", fadd}, -[1] {"MULF", fmul}, -[2] {"SUBF", fsub}, -[3] {"RSUBF", fsubr}, -[4] {"DIVF", fdiv}, -[5] {"RDIVF", fdivr}, -/* POW, RPW deprecated */ -[8] {"REMF", /*frem*/0}, -[9] {"FMF", fmul}, /* fast multiply */ -[10] {"FDV", fdiv}, /* fast divide */ -[11] {"FRD", fdivr}, /* fast reverse divide */ -/* POL deprecated */ -}; - -static ulong -fcmp(Internal *n, Internal *m) -{ - int i; - Internal rm, rn; - - if(IsWeird(m) || IsWeird(n)){ - /* BUG: should trap if not masked */ - return V|C; - } - rn = *n; - rm = *m; - fpiround(&rn); - fpiround(&rm); - i = fpicmp(&rn, &rm); - if(i > 0) - return C; - else if(i == 0) - return C|Z; - else - return N; -} - -static void -fld(void (*f)(Internal*, void*), int d, ulong ea, int n, FPsave *ufp) -{ - void *mem; - - mem = (void*)ea; - (*f)(&FR(ufp, d), mem); - if(fpemudebug) - print("MOV%c #%lux, F%d\n", n==8? 'D': 'F', ea, d); -} - -static void -fst(void (*f)(void*, Internal*), ulong ea, int s, int n, FPsave *ufp) -{ - Internal tmp; - void *mem; - - mem = (void*)ea; - tmp = FR(ufp, s); - if(fpemudebug) - print("MOV%c F%d,#%lux\n", n==8? 'D': 'F', s, ea); - (*f)(mem, &tmp); -} - -static int -condok(int cc, int c) -{ - switch(c){ - case 0: /* Z set */ - return cc&Z; - case 1: /* Z clear */ - return (cc&Z) == 0; - case 2: /* C set */ - return cc&C; - case 3: /* C clear */ - return (cc&C) == 0; - case 4: /* N set */ - return cc&N; - case 5: /* N clear */ - return (cc&N) == 0; - case 6: /* V set */ - return cc&V; - case 7: /* V clear */ - return (cc&V) == 0; - case 8: /* C set and Z clear */ - return cc&C && (cc&Z) == 0; - case 9: /* C clear or Z set */ - return (cc&C) == 0 || cc&Z; - case 10: /* N set and V set, or N clear and V clear */ - return (~cc&(N|V))==0 || (cc&(N|V)) == 0; - case 11: /* N set and V clear, or N clear and V set */ - return (cc&(N|V))==N || (cc&(N|V))==V; - case 12: /* Z clear, and either N set and V set or N clear and V clear */ - return (cc&Z) == 0 && ((~cc&(N|V))==0 || (cc&(N|V))==0); - case 13: /* Z set, or N set and V clear or N clear and V set */ - return (cc&Z) || (cc&(N|V))==N || (cc&(N|V))==V; - case 14: /* always */ - return 1; - case 15: /* never (reserved) */ - return 0; - } - return 0; /* not reached */ -} - -static void -unimp(ulong pc, ulong op) -{ - char buf[60]; - - snprint(buf, sizeof(buf), "sys: fp: pc=%lux unimp fp 0x%.8lux", pc, op); - if(fpemudebug) - print("FPE: %s\n", buf); - error(buf); - /* no return */ -} - -static void -fpemu(ulong pc, ulong op, Ureg *ur, FPsave *ufp) -{ - int rn, rd, tag, o; - long off; - ulong ea; - Internal tmp, *fm, *fn; - - /* note: would update fault status here if we noted numeric exceptions */ - - /* - * LDF, STF; 10.1.1 - */ - if(((op>>25)&7) == 6){ - if(op & (1<<22)) - unimp(pc, op); /* packed or extended */ - rn = (op>>16)&0xF; - off = (op&0xFF)<<2; - if((op & (1<<23)) == 0) - off = -off; - ea = REG(ur, rn); - if(rn == REGPC) - ea += 8; - if(op & (1<<24)) - ea += off; - rd = (op>>12)&7; - if(op & (1<<20)){ - if(op & (1<<15)) - fld(fpid2i, rd, ea, 8, ufp); - else - fld(fpis2i, rd, ea, 4, ufp); - }else{ - if(op & (1<<15)) - fst(fpii2d, ea, rd, 8, ufp); - else - fst(fpii2s, ea, rd, 4, ufp); - } - if((op & (1<<24)) == 0) - ea += off; - if(op & (1<<21)) - REG(ur, rn) = ea; - return; - } - - /* - * CPRT/transfer, 10.3 - */ - if(op & (1<<4)){ - rd = (op>>12) & 0xF; - - /* - * compare, 10.3.1 - */ - if(rd == 15 && op & (1<<20)){ - rn = (op>>16)&7; - fn = &FR(ufp, rn); - if(op & (1<<3)){ - fm = &fpconst[op&7]; - tag = 'C'; - }else{ - fm = &FR(ufp, op&7); - tag = 'F'; - } - switch((op>>21)&7){ - default: - unimp(pc, op); - case 4: /* CMF: Fn :: Fm */ - case 6: /* CMFE: Fn :: Fm (with exception) */ - ur->psr &= ~(N|C|Z|V); - ur->psr |= fcmp(fn, fm); - break; - case 5: /* CNF: Fn :: -Fm */ - case 7: /* CNFE: Fn :: -Fm (with exception) */ - tmp = *fm; - tmp.s ^= 1; - ur->psr &= ~(N|C|Z|V); - ur->psr |= fcmp(fn, &tmp); - break; - } - if(fpemudebug) - print("CMPF %c%d,F%ld =%lux\n", tag, rn, op&7, ur->psr>>28); - return; - } - - /* - * other transfer, 10.3 - */ - switch((op>>20)&0xF){ - default: - unimp(pc, op); - case 0: /* FLT */ - rn = (op>>16) & 7; - fpiw2i(&FR(ufp, rn), ®(ur, rd)); - if(fpemudebug) - print("MOVW[FD] R%d, F%d\n", rd, rn); - break; - case 1: /* FIX */ - if(op & (1<<3)) - unimp(pc, op); - rn = op & 7; - tmp = FR(ufp, rn); - fpii2w(®(ur, rd), &tmp); - if(fpemudebug) - print("MOV[FD]W F%d, R%d =%ld\n", rn, rd, REG(ur, rd)); - break; - case 2: /* FPSR := Rd */ - ufp->status = REG(ur, rd); - if(fpemudebug) - print("MOVW R%d, FPSR\n", rd); - break; - case 3: /* Rd := FPSR */ - REG(ur, rd) = ufp->status; - if(fpemudebug) - print("MOVW FPSR, R%d\n", rd); - break; - case 4: /* FPCR := Rd */ - ufp->control = REG(ur, rd); - if(fpemudebug) - print("MOVW R%d, FPCR\n", rd); - break; - case 5: /* Rd := FPCR */ - REG(ur, rd) = ufp->control; - if(fpemudebug) - print("MOVW FPCR, R%d\n", rd); - break; - } - return; - } - - /* - * arithmetic - */ - - if(op & (1<<3)){ /* constant */ - fm = &fpconst[op&7]; - tag = 'C'; - }else{ - fm = &FR(ufp, op&7); - tag = 'F'; - } - rd = (op>>12)&7; - o = (op>>20)&0xF; - if(op & (1<<15)){ /* monadic */ - FP1 *fp; - fp = &optab1[o]; - if(fp->f == nil) - unimp(pc, op); - if(fpemudebug) - print("%s %c%ld,F%d\n", fp->name, tag, op&7, rd); - (*fp->f)(fm, &FR(ufp, rd)); - } else { - FP2 *fp; - fp = &optab2[o]; - if(fp->f == nil) - unimp(pc, op); - rn = (op>>16)&7; - if(fpemudebug) - print("%s %c%ld,F%d,F%d\n", fp->name, tag, op&7, rn, rd); - (*fp->f)(*fm, FR(ufp, rn), &FR(ufp, rd)); - } -} - -void -casemu(ulong pc, ulong op, Ureg *ur) -{ - ulong *rp, ro, rn, *rd; - - USED(pc); - - rp = (ulong*)ur; - ro = rp[op>>16 & 0x7]; - rn = rp[op>>0 & 0x7]; - rd = rp + (op>>12 & 0x7); - rp = (ulong*)*rd; - validaddr((ulong)rp, 4, 1); - splhi(); - if(*rd = (*rp == ro)) - *rp = rn; - spllo(); -} - -int ldrexvalid; - -void -ldrex(ulong pc, ulong op, Ureg *ur) -{ - ulong *rp, *rd, *addr; - - USED(pc); - - rp = (ulong*)ur; - rd = rp + (op>>16 & 0x7); - addr = (ulong*)*rd; - validaddr((ulong)addr, 4, 0); - ldrexvalid = 1; - rp[op>>12 & 0x7] = *addr; - if(fpemudebug) - print("ldrex, r%ld = [r%ld]@0x%8.8p = 0x%8.8lux", - op>>12 & 0x7, op>>16 & 0x7, addr, rp[op>>12 & 0x7]); -} - -void -strex(ulong pc, ulong op, Ureg *ur) -{ - ulong *rp, rn, *rd, *addr; - - USED(pc); - - rp = (ulong*)ur; - rd = rp + (op>>16 & 0x7); - rn = rp[op>>0 & 0x7]; - addr = (ulong*)*rd; - validaddr((ulong)addr, 4, 1); - splhi(); - if(ldrexvalid){ - if(fpemudebug) - print("strex valid, [r%ld]@0x%8.8p = r%ld = 0x%8.8lux", - op>>16 & 0x7, addr, op>>0 & 0x7, rn); - *addr = rn; - ldrexvalid = 0; - rp[op>>12 & 0x7] = 0; - }else{ - if(fpemudebug) - print("strex invalid, r%ld = 1", op>>16 & 0x7); - rp[op>>12 & 0x7] = 1; - } - spllo(); -} - -struct { - ulong opc; - ulong mask; - void (*f)(ulong, ulong, Ureg*); -} specialopc[] = { - { 0x01900f9f, 0x0ff00fff, ldrex }, - { 0x01800f90, 0x0ff00ff0, strex }, - { 0x0ed00100, 0x0ef08100, casemu }, - { 0x00000000, 0x00000000, nil } -}; - - -/* - * returns the number of FP instructions emulated - */ -int -fpiarm(Ureg *ur) -{ - ulong op, o; - FPsave *ufp; - int i, n; - - if (up == nil) - panic("fpiarm not in a process"); - ufp = &up->fpsave; - /* because all the state is in the proc structure, - * it need not be saved/restored - */ - if(up->fpstate != FPactive) { -// assert(sizeof(Internal) == sizeof(ufp->regs[0])); - up->fpstate = FPactive; - ufp->control = 0; - ufp->status = (0x01<<28)|(1<<12); /* software emulation, alternative C flag */ - for(n = 0; n < 8; n++) - FR(ufp, n) = fpconst[0]; - } - for(n=0; ;n++){ - if(fpemudebug) - print("0x%8.8lux ", ur->pc); - validaddr(ur->pc, 4, 0); - op = *(ulong*)(ur->pc); - o = (op>>24) & 0xF; - if(condok(ur->psr, op>>28)){ - for(i = 0; specialopc[i].f; i++) - if((op & specialopc[i].mask) == specialopc[i].opc) - break; - if(specialopc[i].f) - specialopc[i].f(ur->pc, op, ur); - else if((op & 0xF00) != 0x100 || o != 0xE && (o&~1) != 0xC) - break; - else - fpemu(ur->pc, op, ur, ufp); - }else if((op & 0xF00) != 0x100 || o != 0xE && (o&~1) != 0xC) - break; - ur->pc += 4; - } - if(fpemudebug) print("\n"); - return n; -} diff --git a/sys/src/9/bitsy/fpimem.c b/sys/src/9/bitsy/fpimem.c deleted file mode 100644 index 627ab6355..000000000 --- a/sys/src/9/bitsy/fpimem.c +++ /dev/null @@ -1,136 +0,0 @@ -#include "fpi.h" - -/* - * the following routines depend on memory format, not the machine - */ - -void -fpis2i(Internal *i, void *v) -{ - Single *s = v; - - i->s = (*s & 0x80000000) ? 1: 0; - if((*s & ~0x80000000) == 0){ - SetZero(i); - return; - } - i->e = ((*s>>23) & 0x00FF) - SingleExpBias + ExpBias; - i->h = (*s & 0x007FFFFF)<<(1+NGuardBits); - i->l = 0; - if(i->e) - i->h |= HiddenBit; - else - i->e++; -} - -void -fpid2i(Internal *i, void *v) -{ - Double *d = v; - - i->s = (d->h & 0x80000000) ? 1: 0; - i->e = (d->h>>20) & 0x07FF; - i->h = ((d->h & 0x000FFFFF)<<(4+NGuardBits))|((d->l>>25) & 0x7F); - i->l = (d->l & 0x01FFFFFF)<e) - i->h |= HiddenBit; - else - i->e++; -} - -void -fpiw2i(Internal *i, void *v) -{ - Word w, word = *(Word*)v; - short e; - - if(word < 0){ - i->s = 1; - word = -word; - } - else - i->s = 0; - if(word == 0){ - SetZero(i); - return; - } - if(word > 0){ - for (e = 0, w = word; w; w >>= 1, e++) - ; - } else - e = 32; - if(e > FractBits){ - i->h = word>>(e - FractBits); - i->l = (word & ((1<<(e - FractBits)) - 1))<<(2*FractBits - e); - } - else { - i->h = word<<(FractBits - e); - i->l = 0; - } - i->e = (e - 1) + ExpBias; -} - -void -fpii2s(void *v, Internal *i) -{ - short e; - Single *s = (Single*)v; - - fpiround(i); - if(i->h & HiddenBit) - i->h &= ~HiddenBit; - else - i->e--; - *s = i->s ? 0x80000000: 0; - e = i->e; - if(e < ExpBias){ - if(e <= (ExpBias - SingleExpBias)) - return; - e = SingleExpBias - (ExpBias - e); - } - else if(e >= (ExpBias + (SingleExpMax-SingleExpBias))){ - *s |= SingleExpMax<<23; - return; - } - else - e = SingleExpBias + (e - ExpBias); - *s |= (e<<23)|(i->h>>(1+NGuardBits)); -} - -void -fpii2d(void *v, Internal *i) -{ - Double *d = (Double*)v; - - fpiround(i); - if(i->h & HiddenBit) - i->h &= ~HiddenBit; - else - i->e--; - i->l = ((i->h & GuardMask)<<25)|(i->l>>NGuardBits); - i->h >>= NGuardBits; - d->h = i->s ? 0x80000000: 0; - d->h |= (i->e<<20)|((i->h & 0x00FFFFFF)>>4); - d->l = (i->h<<28)|i->l; -} - -void -fpii2w(Word *word, Internal *i) -{ - Word w; - short e; - - fpiround(i); - e = (i->e - ExpBias) + 1; - if(e <= 0) - w = 0; - else if(e > 31) - w = 0x7FFFFFFF; - else if(e > FractBits) - w = (i->h<<(e - FractBits))|(i->l>>(2*FractBits - e)); - else - w = i->h>>(FractBits-e); - if(i->s) - w = -w; - *word = w; -} diff --git a/sys/src/9/bitsy/gamma.c b/sys/src/9/bitsy/gamma.c deleted file mode 100644 index 489c39bfa..000000000 --- a/sys/src/9/bitsy/gamma.c +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include -#include - -double gamma = 1.6; - -int -remap5(int i) -{ - double v; - - v = (double)i/31.0; - return 31.0*pow(v, gamma); -} - -int -remap6(int i) -{ - double v; - - v = (double)i/63.0; - return 63.0*pow(v, gamma); -} - -int -remap(int i) -{ - int r, g, b; - - b = i & 0x1F; - g = (i>>5) & 0x3F; - r = (i>>11) & 0x1F; - return (remap5(r)<<11) | (remap6(g)<<5) | (remap5(b)<<0); -} - -void -main(void) -{ - int i; - - printf("/* gamma = %.2f */\n", gamma); - printf("ushort gamma[65536] = {\n"); - for(i=0; i<65536; i++){ - if((i%8) == 0) - printf("\t"); - printf("0x%.4x, ", remap(i)); - if((i%8) == 7) - printf("\n"); - } - printf("};\n"); -} diff --git a/sys/src/9/bitsy/gamma.h b/sys/src/9/bitsy/gamma.h deleted file mode 100644 index ef20ff993..000000000 --- a/sys/src/9/bitsy/gamma.h +++ /dev/null @@ -1,8195 +0,0 @@ -/* gamma = 1.60 */ -ushort gamma[65536] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0081, 0x0081, 0x0082, 0x0082, - 0x0083, 0x0084, 0x0085, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, - 0x008a, 0x008b, 0x008c, 0x008e, 0x008f, 0x0090, 0x0091, 0x0093, - 0x0094, 0x0095, 0x0097, 0x0098, 0x009a, 0x009b, 0x009d, 0x009f, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c1, 0x00c1, 0x00c2, 0x00c2, - 0x00c3, 0x00c4, 0x00c5, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, - 0x00ca, 0x00cb, 0x00cc, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d3, - 0x00d4, 0x00d5, 0x00d7, 0x00d8, 0x00da, 0x00db, 0x00dd, 0x00df, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0101, 0x0101, 0x0102, 0x0102, - 0x0103, 0x0104, 0x0105, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, - 0x010a, 0x010b, 0x010c, 0x010e, 0x010f, 0x0110, 0x0111, 0x0113, - 0x0114, 0x0115, 0x0117, 0x0118, 0x011a, 0x011b, 0x011d, 0x011f, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0121, 0x0121, 0x0122, 0x0122, - 0x0123, 0x0124, 0x0125, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, - 0x012a, 0x012b, 0x012c, 0x012e, 0x012f, 0x0130, 0x0131, 0x0133, - 0x0134, 0x0135, 0x0137, 0x0138, 0x013a, 0x013b, 0x013d, 0x013f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0160, 0x0160, 0x0160, 0x0160, 0x0161, 0x0161, 0x0162, 0x0162, - 0x0163, 0x0164, 0x0165, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, - 0x016a, 0x016b, 0x016c, 0x016e, 0x016f, 0x0170, 0x0171, 0x0173, - 0x0174, 0x0175, 0x0177, 0x0178, 0x017a, 0x017b, 0x017d, 0x017f, - 0x0180, 0x0180, 0x0180, 0x0180, 0x0181, 0x0181, 0x0182, 0x0182, - 0x0183, 0x0184, 0x0185, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, - 0x018a, 0x018b, 0x018c, 0x018e, 0x018f, 0x0190, 0x0191, 0x0193, - 0x0194, 0x0195, 0x0197, 0x0198, 0x019a, 0x019b, 0x019d, 0x019f, - 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a1, 0x01a1, 0x01a2, 0x01a2, - 0x01a3, 0x01a4, 0x01a5, 0x01a5, 0x01a6, 0x01a7, 0x01a8, 0x01a9, - 0x01aa, 0x01ab, 0x01ac, 0x01ae, 0x01af, 0x01b0, 0x01b1, 0x01b3, - 0x01b4, 0x01b5, 0x01b7, 0x01b8, 0x01ba, 0x01bb, 0x01bd, 0x01bf, - 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c1, 0x01c1, 0x01c2, 0x01c2, - 0x01c3, 0x01c4, 0x01c5, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, - 0x01ca, 0x01cb, 0x01cc, 0x01ce, 0x01cf, 0x01d0, 0x01d1, 0x01d3, - 0x01d4, 0x01d5, 0x01d7, 0x01d8, 0x01da, 0x01db, 0x01dd, 0x01df, - 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e1, 0x01e1, 0x01e2, 0x01e2, - 0x01e3, 0x01e4, 0x01e5, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, - 0x01ea, 0x01eb, 0x01ec, 0x01ee, 0x01ef, 0x01f0, 0x01f1, 0x01f3, - 0x01f4, 0x01f5, 0x01f7, 0x01f8, 0x01fa, 0x01fb, 0x01fd, 0x01ff, - 0x0200, 0x0200, 0x0200, 0x0200, 0x0201, 0x0201, 0x0202, 0x0202, - 0x0203, 0x0204, 0x0205, 0x0205, 0x0206, 0x0207, 0x0208, 0x0209, - 0x020a, 0x020b, 0x020c, 0x020e, 0x020f, 0x0210, 0x0211, 0x0213, - 0x0214, 0x0215, 0x0217, 0x0218, 0x021a, 0x021b, 0x021d, 0x021f, - 0x0220, 0x0220, 0x0220, 0x0220, 0x0221, 0x0221, 0x0222, 0x0222, - 0x0223, 0x0224, 0x0225, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, - 0x022a, 0x022b, 0x022c, 0x022e, 0x022f, 0x0230, 0x0231, 0x0233, - 0x0234, 0x0235, 0x0237, 0x0238, 0x023a, 0x023b, 0x023d, 0x023f, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0241, 0x0241, 0x0242, 0x0242, - 0x0243, 0x0244, 0x0245, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, - 0x024a, 0x024b, 0x024c, 0x024e, 0x024f, 0x0250, 0x0251, 0x0253, - 0x0254, 0x0255, 0x0257, 0x0258, 0x025a, 0x025b, 0x025d, 0x025f, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0261, 0x0261, 0x0262, 0x0262, - 0x0263, 0x0264, 0x0265, 0x0265, 0x0266, 0x0267, 0x0268, 0x0269, - 0x026a, 0x026b, 0x026c, 0x026e, 0x026f, 0x0270, 0x0271, 0x0273, - 0x0274, 0x0275, 0x0277, 0x0278, 0x027a, 0x027b, 0x027d, 0x027f, - 0x0280, 0x0280, 0x0280, 0x0280, 0x0281, 0x0281, 0x0282, 0x0282, - 0x0283, 0x0284, 0x0285, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, - 0x028a, 0x028b, 0x028c, 0x028e, 0x028f, 0x0290, 0x0291, 0x0293, - 0x0294, 0x0295, 0x0297, 0x0298, 0x029a, 0x029b, 0x029d, 0x029f, - 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a1, 0x02a1, 0x02a2, 0x02a2, - 0x02a3, 0x02a4, 0x02a5, 0x02a5, 0x02a6, 0x02a7, 0x02a8, 0x02a9, - 0x02aa, 0x02ab, 0x02ac, 0x02ae, 0x02af, 0x02b0, 0x02b1, 0x02b3, - 0x02b4, 0x02b5, 0x02b7, 0x02b8, 0x02ba, 0x02bb, 0x02bd, 0x02bf, - 0x02c0, 0x02c0, 0x02c0, 0x02c0, 0x02c1, 0x02c1, 0x02c2, 0x02c2, - 0x02c3, 0x02c4, 0x02c5, 0x02c5, 0x02c6, 0x02c7, 0x02c8, 0x02c9, - 0x02ca, 0x02cb, 0x02cc, 0x02ce, 0x02cf, 0x02d0, 0x02d1, 0x02d3, - 0x02d4, 0x02d5, 0x02d7, 0x02d8, 0x02da, 0x02db, 0x02dd, 0x02df, - 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e1, 0x02e1, 0x02e2, 0x02e2, - 0x02e3, 0x02e4, 0x02e5, 0x02e5, 0x02e6, 0x02e7, 0x02e8, 0x02e9, - 0x02ea, 0x02eb, 0x02ec, 0x02ee, 0x02ef, 0x02f0, 0x02f1, 0x02f3, - 0x02f4, 0x02f5, 0x02f7, 0x02f8, 0x02fa, 0x02fb, 0x02fd, 0x02ff, - 0x0300, 0x0300, 0x0300, 0x0300, 0x0301, 0x0301, 0x0302, 0x0302, - 0x0303, 0x0304, 0x0305, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, - 0x030a, 0x030b, 0x030c, 0x030e, 0x030f, 0x0310, 0x0311, 0x0313, - 0x0314, 0x0315, 0x0317, 0x0318, 0x031a, 0x031b, 0x031d, 0x031f, - 0x0320, 0x0320, 0x0320, 0x0320, 0x0321, 0x0321, 0x0322, 0x0322, - 0x0323, 0x0324, 0x0325, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, - 0x032a, 0x032b, 0x032c, 0x032e, 0x032f, 0x0330, 0x0331, 0x0333, - 0x0334, 0x0335, 0x0337, 0x0338, 0x033a, 0x033b, 0x033d, 0x033f, - 0x0340, 0x0340, 0x0340, 0x0340, 0x0341, 0x0341, 0x0342, 0x0342, - 0x0343, 0x0344, 0x0345, 0x0345, 0x0346, 0x0347, 0x0348, 0x0349, - 0x034a, 0x034b, 0x034c, 0x034e, 0x034f, 0x0350, 0x0351, 0x0353, - 0x0354, 0x0355, 0x0357, 0x0358, 0x035a, 0x035b, 0x035d, 0x035f, - 0x0380, 0x0380, 0x0380, 0x0380, 0x0381, 0x0381, 0x0382, 0x0382, - 0x0383, 0x0384, 0x0385, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, - 0x038a, 0x038b, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, 0x0393, - 0x0394, 0x0395, 0x0397, 0x0398, 0x039a, 0x039b, 0x039d, 0x039f, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a1, 0x03a1, 0x03a2, 0x03a2, - 0x03a3, 0x03a4, 0x03a5, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, - 0x03aa, 0x03ab, 0x03ac, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b3, - 0x03b4, 0x03b5, 0x03b7, 0x03b8, 0x03ba, 0x03bb, 0x03bd, 0x03bf, - 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x03c1, 0x03c1, 0x03c2, 0x03c2, - 0x03c3, 0x03c4, 0x03c5, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, - 0x03ca, 0x03cb, 0x03cc, 0x03ce, 0x03cf, 0x03d0, 0x03d1, 0x03d3, - 0x03d4, 0x03d5, 0x03d7, 0x03d8, 0x03da, 0x03db, 0x03dd, 0x03df, - 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e1, 0x03e1, 0x03e2, 0x03e2, - 0x03e3, 0x03e4, 0x03e5, 0x03e5, 0x03e6, 0x03e7, 0x03e8, 0x03e9, - 0x03ea, 0x03eb, 0x03ec, 0x03ee, 0x03ef, 0x03f0, 0x03f1, 0x03f3, - 0x03f4, 0x03f5, 0x03f7, 0x03f8, 0x03fa, 0x03fb, 0x03fd, 0x03ff, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0401, 0x0401, 0x0402, 0x0402, - 0x0403, 0x0404, 0x0405, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0x0410, 0x0411, 0x0413, - 0x0414, 0x0415, 0x0417, 0x0418, 0x041a, 0x041b, 0x041d, 0x041f, - 0x0440, 0x0440, 0x0440, 0x0440, 0x0441, 0x0441, 0x0442, 0x0442, - 0x0443, 0x0444, 0x0445, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, - 0x044a, 0x044b, 0x044c, 0x044e, 0x044f, 0x0450, 0x0451, 0x0453, - 0x0454, 0x0455, 0x0457, 0x0458, 0x045a, 0x045b, 0x045d, 0x045f, - 0x0460, 0x0460, 0x0460, 0x0460, 0x0461, 0x0461, 0x0462, 0x0462, - 0x0463, 0x0464, 0x0465, 0x0465, 0x0466, 0x0467, 0x0468, 0x0469, - 0x046a, 0x046b, 0x046c, 0x046e, 0x046f, 0x0470, 0x0471, 0x0473, - 0x0474, 0x0475, 0x0477, 0x0478, 0x047a, 0x047b, 0x047d, 0x047f, - 0x0480, 0x0480, 0x0480, 0x0480, 0x0481, 0x0481, 0x0482, 0x0482, - 0x0483, 0x0484, 0x0485, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, - 0x048a, 0x048b, 0x048c, 0x048e, 0x048f, 0x0490, 0x0491, 0x0493, - 0x0494, 0x0495, 0x0497, 0x0498, 0x049a, 0x049b, 0x049d, 0x049f, - 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c1, 0x04c1, 0x04c2, 0x04c2, - 0x04c3, 0x04c4, 0x04c5, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, - 0x04ca, 0x04cb, 0x04cc, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d3, - 0x04d4, 0x04d5, 0x04d7, 0x04d8, 0x04da, 0x04db, 0x04dd, 0x04df, - 0x04e0, 0x04e0, 0x04e0, 0x04e0, 0x04e1, 0x04e1, 0x04e2, 0x04e2, - 0x04e3, 0x04e4, 0x04e5, 0x04e5, 0x04e6, 0x04e7, 0x04e8, 0x04e9, - 0x04ea, 0x04eb, 0x04ec, 0x04ee, 0x04ef, 0x04f0, 0x04f1, 0x04f3, - 0x04f4, 0x04f5, 0x04f7, 0x04f8, 0x04fa, 0x04fb, 0x04fd, 0x04ff, - 0x0500, 0x0500, 0x0500, 0x0500, 0x0501, 0x0501, 0x0502, 0x0502, - 0x0503, 0x0504, 0x0505, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, - 0x050a, 0x050b, 0x050c, 0x050e, 0x050f, 0x0510, 0x0511, 0x0513, - 0x0514, 0x0515, 0x0517, 0x0518, 0x051a, 0x051b, 0x051d, 0x051f, - 0x0540, 0x0540, 0x0540, 0x0540, 0x0541, 0x0541, 0x0542, 0x0542, - 0x0543, 0x0544, 0x0545, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, - 0x054a, 0x054b, 0x054c, 0x054e, 0x054f, 0x0550, 0x0551, 0x0553, - 0x0554, 0x0555, 0x0557, 0x0558, 0x055a, 0x055b, 0x055d, 0x055f, - 0x0560, 0x0560, 0x0560, 0x0560, 0x0561, 0x0561, 0x0562, 0x0562, - 0x0563, 0x0564, 0x0565, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, - 0x056a, 0x056b, 0x056c, 0x056e, 0x056f, 0x0570, 0x0571, 0x0573, - 0x0574, 0x0575, 0x0577, 0x0578, 0x057a, 0x057b, 0x057d, 0x057f, - 0x0580, 0x0580, 0x0580, 0x0580, 0x0581, 0x0581, 0x0582, 0x0582, - 0x0583, 0x0584, 0x0585, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, - 0x058a, 0x058b, 0x058c, 0x058e, 0x058f, 0x0590, 0x0591, 0x0593, - 0x0594, 0x0595, 0x0597, 0x0598, 0x059a, 0x059b, 0x059d, 0x059f, - 0x05c0, 0x05c0, 0x05c0, 0x05c0, 0x05c1, 0x05c1, 0x05c2, 0x05c2, - 0x05c3, 0x05c4, 0x05c5, 0x05c5, 0x05c6, 0x05c7, 0x05c8, 0x05c9, - 0x05ca, 0x05cb, 0x05cc, 0x05ce, 0x05cf, 0x05d0, 0x05d1, 0x05d3, - 0x05d4, 0x05d5, 0x05d7, 0x05d8, 0x05da, 0x05db, 0x05dd, 0x05df, - 0x05e0, 0x05e0, 0x05e0, 0x05e0, 0x05e1, 0x05e1, 0x05e2, 0x05e2, - 0x05e3, 0x05e4, 0x05e5, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, - 0x05ea, 0x05eb, 0x05ec, 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f3, - 0x05f4, 0x05f5, 0x05f7, 0x05f8, 0x05fa, 0x05fb, 0x05fd, 0x05ff, - 0x0620, 0x0620, 0x0620, 0x0620, 0x0621, 0x0621, 0x0622, 0x0622, - 0x0623, 0x0624, 0x0625, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, - 0x062a, 0x062b, 0x062c, 0x062e, 0x062f, 0x0630, 0x0631, 0x0633, - 0x0634, 0x0635, 0x0637, 0x0638, 0x063a, 0x063b, 0x063d, 0x063f, - 0x0640, 0x0640, 0x0640, 0x0640, 0x0641, 0x0641, 0x0642, 0x0642, - 0x0643, 0x0644, 0x0645, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, - 0x064a, 0x064b, 0x064c, 0x064e, 0x064f, 0x0650, 0x0651, 0x0653, - 0x0654, 0x0655, 0x0657, 0x0658, 0x065a, 0x065b, 0x065d, 0x065f, - 0x0680, 0x0680, 0x0680, 0x0680, 0x0681, 0x0681, 0x0682, 0x0682, - 0x0683, 0x0684, 0x0685, 0x0685, 0x0686, 0x0687, 0x0688, 0x0689, - 0x068a, 0x068b, 0x068c, 0x068e, 0x068f, 0x0690, 0x0691, 0x0693, - 0x0694, 0x0695, 0x0697, 0x0698, 0x069a, 0x069b, 0x069d, 0x069f, - 0x06a0, 0x06a0, 0x06a0, 0x06a0, 0x06a1, 0x06a1, 0x06a2, 0x06a2, - 0x06a3, 0x06a4, 0x06a5, 0x06a5, 0x06a6, 0x06a7, 0x06a8, 0x06a9, - 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, 0x06b0, 0x06b1, 0x06b3, - 0x06b4, 0x06b5, 0x06b7, 0x06b8, 0x06ba, 0x06bb, 0x06bd, 0x06bf, - 0x06e0, 0x06e0, 0x06e0, 0x06e0, 0x06e1, 0x06e1, 0x06e2, 0x06e2, - 0x06e3, 0x06e4, 0x06e5, 0x06e5, 0x06e6, 0x06e7, 0x06e8, 0x06e9, - 0x06ea, 0x06eb, 0x06ec, 0x06ee, 0x06ef, 0x06f0, 0x06f1, 0x06f3, - 0x06f4, 0x06f5, 0x06f7, 0x06f8, 0x06fa, 0x06fb, 0x06fd, 0x06ff, - 0x0700, 0x0700, 0x0700, 0x0700, 0x0701, 0x0701, 0x0702, 0x0702, - 0x0703, 0x0704, 0x0705, 0x0705, 0x0706, 0x0707, 0x0708, 0x0709, - 0x070a, 0x070b, 0x070c, 0x070e, 0x070f, 0x0710, 0x0711, 0x0713, - 0x0714, 0x0715, 0x0717, 0x0718, 0x071a, 0x071b, 0x071d, 0x071f, - 0x0740, 0x0740, 0x0740, 0x0740, 0x0741, 0x0741, 0x0742, 0x0742, - 0x0743, 0x0744, 0x0745, 0x0745, 0x0746, 0x0747, 0x0748, 0x0749, - 0x074a, 0x074b, 0x074c, 0x074e, 0x074f, 0x0750, 0x0751, 0x0753, - 0x0754, 0x0755, 0x0757, 0x0758, 0x075a, 0x075b, 0x075d, 0x075f, - 0x0760, 0x0760, 0x0760, 0x0760, 0x0761, 0x0761, 0x0762, 0x0762, - 0x0763, 0x0764, 0x0765, 0x0765, 0x0766, 0x0767, 0x0768, 0x0769, - 0x076a, 0x076b, 0x076c, 0x076e, 0x076f, 0x0770, 0x0771, 0x0773, - 0x0774, 0x0775, 0x0777, 0x0778, 0x077a, 0x077b, 0x077d, 0x077f, - 0x07a0, 0x07a0, 0x07a0, 0x07a0, 0x07a1, 0x07a1, 0x07a2, 0x07a2, - 0x07a3, 0x07a4, 0x07a5, 0x07a5, 0x07a6, 0x07a7, 0x07a8, 0x07a9, - 0x07aa, 0x07ab, 0x07ac, 0x07ae, 0x07af, 0x07b0, 0x07b1, 0x07b3, - 0x07b4, 0x07b5, 0x07b7, 0x07b8, 0x07ba, 0x07bb, 0x07bd, 0x07bf, - 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07e1, 0x07e1, 0x07e2, 0x07e2, - 0x07e3, 0x07e4, 0x07e5, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, - 0x07ea, 0x07eb, 0x07ec, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, - 0x07f4, 0x07f5, 0x07f7, 0x07f8, 0x07fa, 0x07fb, 0x07fd, 0x07ff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0081, 0x0081, 0x0082, 0x0082, - 0x0083, 0x0084, 0x0085, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, - 0x008a, 0x008b, 0x008c, 0x008e, 0x008f, 0x0090, 0x0091, 0x0093, - 0x0094, 0x0095, 0x0097, 0x0098, 0x009a, 0x009b, 0x009d, 0x009f, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c1, 0x00c1, 0x00c2, 0x00c2, - 0x00c3, 0x00c4, 0x00c5, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, - 0x00ca, 0x00cb, 0x00cc, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d3, - 0x00d4, 0x00d5, 0x00d7, 0x00d8, 0x00da, 0x00db, 0x00dd, 0x00df, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0101, 0x0101, 0x0102, 0x0102, - 0x0103, 0x0104, 0x0105, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, - 0x010a, 0x010b, 0x010c, 0x010e, 0x010f, 0x0110, 0x0111, 0x0113, - 0x0114, 0x0115, 0x0117, 0x0118, 0x011a, 0x011b, 0x011d, 0x011f, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0121, 0x0121, 0x0122, 0x0122, - 0x0123, 0x0124, 0x0125, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, - 0x012a, 0x012b, 0x012c, 0x012e, 0x012f, 0x0130, 0x0131, 0x0133, - 0x0134, 0x0135, 0x0137, 0x0138, 0x013a, 0x013b, 0x013d, 0x013f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0160, 0x0160, 0x0160, 0x0160, 0x0161, 0x0161, 0x0162, 0x0162, - 0x0163, 0x0164, 0x0165, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, - 0x016a, 0x016b, 0x016c, 0x016e, 0x016f, 0x0170, 0x0171, 0x0173, - 0x0174, 0x0175, 0x0177, 0x0178, 0x017a, 0x017b, 0x017d, 0x017f, - 0x0180, 0x0180, 0x0180, 0x0180, 0x0181, 0x0181, 0x0182, 0x0182, - 0x0183, 0x0184, 0x0185, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, - 0x018a, 0x018b, 0x018c, 0x018e, 0x018f, 0x0190, 0x0191, 0x0193, - 0x0194, 0x0195, 0x0197, 0x0198, 0x019a, 0x019b, 0x019d, 0x019f, - 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a1, 0x01a1, 0x01a2, 0x01a2, - 0x01a3, 0x01a4, 0x01a5, 0x01a5, 0x01a6, 0x01a7, 0x01a8, 0x01a9, - 0x01aa, 0x01ab, 0x01ac, 0x01ae, 0x01af, 0x01b0, 0x01b1, 0x01b3, - 0x01b4, 0x01b5, 0x01b7, 0x01b8, 0x01ba, 0x01bb, 0x01bd, 0x01bf, - 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c1, 0x01c1, 0x01c2, 0x01c2, - 0x01c3, 0x01c4, 0x01c5, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, - 0x01ca, 0x01cb, 0x01cc, 0x01ce, 0x01cf, 0x01d0, 0x01d1, 0x01d3, - 0x01d4, 0x01d5, 0x01d7, 0x01d8, 0x01da, 0x01db, 0x01dd, 0x01df, - 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e1, 0x01e1, 0x01e2, 0x01e2, - 0x01e3, 0x01e4, 0x01e5, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, - 0x01ea, 0x01eb, 0x01ec, 0x01ee, 0x01ef, 0x01f0, 0x01f1, 0x01f3, - 0x01f4, 0x01f5, 0x01f7, 0x01f8, 0x01fa, 0x01fb, 0x01fd, 0x01ff, - 0x0200, 0x0200, 0x0200, 0x0200, 0x0201, 0x0201, 0x0202, 0x0202, - 0x0203, 0x0204, 0x0205, 0x0205, 0x0206, 0x0207, 0x0208, 0x0209, - 0x020a, 0x020b, 0x020c, 0x020e, 0x020f, 0x0210, 0x0211, 0x0213, - 0x0214, 0x0215, 0x0217, 0x0218, 0x021a, 0x021b, 0x021d, 0x021f, - 0x0220, 0x0220, 0x0220, 0x0220, 0x0221, 0x0221, 0x0222, 0x0222, - 0x0223, 0x0224, 0x0225, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, - 0x022a, 0x022b, 0x022c, 0x022e, 0x022f, 0x0230, 0x0231, 0x0233, - 0x0234, 0x0235, 0x0237, 0x0238, 0x023a, 0x023b, 0x023d, 0x023f, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0241, 0x0241, 0x0242, 0x0242, - 0x0243, 0x0244, 0x0245, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, - 0x024a, 0x024b, 0x024c, 0x024e, 0x024f, 0x0250, 0x0251, 0x0253, - 0x0254, 0x0255, 0x0257, 0x0258, 0x025a, 0x025b, 0x025d, 0x025f, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0261, 0x0261, 0x0262, 0x0262, - 0x0263, 0x0264, 0x0265, 0x0265, 0x0266, 0x0267, 0x0268, 0x0269, - 0x026a, 0x026b, 0x026c, 0x026e, 0x026f, 0x0270, 0x0271, 0x0273, - 0x0274, 0x0275, 0x0277, 0x0278, 0x027a, 0x027b, 0x027d, 0x027f, - 0x0280, 0x0280, 0x0280, 0x0280, 0x0281, 0x0281, 0x0282, 0x0282, - 0x0283, 0x0284, 0x0285, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, - 0x028a, 0x028b, 0x028c, 0x028e, 0x028f, 0x0290, 0x0291, 0x0293, - 0x0294, 0x0295, 0x0297, 0x0298, 0x029a, 0x029b, 0x029d, 0x029f, - 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a1, 0x02a1, 0x02a2, 0x02a2, - 0x02a3, 0x02a4, 0x02a5, 0x02a5, 0x02a6, 0x02a7, 0x02a8, 0x02a9, - 0x02aa, 0x02ab, 0x02ac, 0x02ae, 0x02af, 0x02b0, 0x02b1, 0x02b3, - 0x02b4, 0x02b5, 0x02b7, 0x02b8, 0x02ba, 0x02bb, 0x02bd, 0x02bf, - 0x02c0, 0x02c0, 0x02c0, 0x02c0, 0x02c1, 0x02c1, 0x02c2, 0x02c2, - 0x02c3, 0x02c4, 0x02c5, 0x02c5, 0x02c6, 0x02c7, 0x02c8, 0x02c9, - 0x02ca, 0x02cb, 0x02cc, 0x02ce, 0x02cf, 0x02d0, 0x02d1, 0x02d3, - 0x02d4, 0x02d5, 0x02d7, 0x02d8, 0x02da, 0x02db, 0x02dd, 0x02df, - 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e1, 0x02e1, 0x02e2, 0x02e2, - 0x02e3, 0x02e4, 0x02e5, 0x02e5, 0x02e6, 0x02e7, 0x02e8, 0x02e9, - 0x02ea, 0x02eb, 0x02ec, 0x02ee, 0x02ef, 0x02f0, 0x02f1, 0x02f3, - 0x02f4, 0x02f5, 0x02f7, 0x02f8, 0x02fa, 0x02fb, 0x02fd, 0x02ff, - 0x0300, 0x0300, 0x0300, 0x0300, 0x0301, 0x0301, 0x0302, 0x0302, - 0x0303, 0x0304, 0x0305, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, - 0x030a, 0x030b, 0x030c, 0x030e, 0x030f, 0x0310, 0x0311, 0x0313, - 0x0314, 0x0315, 0x0317, 0x0318, 0x031a, 0x031b, 0x031d, 0x031f, - 0x0320, 0x0320, 0x0320, 0x0320, 0x0321, 0x0321, 0x0322, 0x0322, - 0x0323, 0x0324, 0x0325, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, - 0x032a, 0x032b, 0x032c, 0x032e, 0x032f, 0x0330, 0x0331, 0x0333, - 0x0334, 0x0335, 0x0337, 0x0338, 0x033a, 0x033b, 0x033d, 0x033f, - 0x0340, 0x0340, 0x0340, 0x0340, 0x0341, 0x0341, 0x0342, 0x0342, - 0x0343, 0x0344, 0x0345, 0x0345, 0x0346, 0x0347, 0x0348, 0x0349, - 0x034a, 0x034b, 0x034c, 0x034e, 0x034f, 0x0350, 0x0351, 0x0353, - 0x0354, 0x0355, 0x0357, 0x0358, 0x035a, 0x035b, 0x035d, 0x035f, - 0x0380, 0x0380, 0x0380, 0x0380, 0x0381, 0x0381, 0x0382, 0x0382, - 0x0383, 0x0384, 0x0385, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, - 0x038a, 0x038b, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, 0x0393, - 0x0394, 0x0395, 0x0397, 0x0398, 0x039a, 0x039b, 0x039d, 0x039f, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a1, 0x03a1, 0x03a2, 0x03a2, - 0x03a3, 0x03a4, 0x03a5, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, - 0x03aa, 0x03ab, 0x03ac, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b3, - 0x03b4, 0x03b5, 0x03b7, 0x03b8, 0x03ba, 0x03bb, 0x03bd, 0x03bf, - 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x03c1, 0x03c1, 0x03c2, 0x03c2, - 0x03c3, 0x03c4, 0x03c5, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, - 0x03ca, 0x03cb, 0x03cc, 0x03ce, 0x03cf, 0x03d0, 0x03d1, 0x03d3, - 0x03d4, 0x03d5, 0x03d7, 0x03d8, 0x03da, 0x03db, 0x03dd, 0x03df, - 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e1, 0x03e1, 0x03e2, 0x03e2, - 0x03e3, 0x03e4, 0x03e5, 0x03e5, 0x03e6, 0x03e7, 0x03e8, 0x03e9, - 0x03ea, 0x03eb, 0x03ec, 0x03ee, 0x03ef, 0x03f0, 0x03f1, 0x03f3, - 0x03f4, 0x03f5, 0x03f7, 0x03f8, 0x03fa, 0x03fb, 0x03fd, 0x03ff, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0401, 0x0401, 0x0402, 0x0402, - 0x0403, 0x0404, 0x0405, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0x0410, 0x0411, 0x0413, - 0x0414, 0x0415, 0x0417, 0x0418, 0x041a, 0x041b, 0x041d, 0x041f, - 0x0440, 0x0440, 0x0440, 0x0440, 0x0441, 0x0441, 0x0442, 0x0442, - 0x0443, 0x0444, 0x0445, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, - 0x044a, 0x044b, 0x044c, 0x044e, 0x044f, 0x0450, 0x0451, 0x0453, - 0x0454, 0x0455, 0x0457, 0x0458, 0x045a, 0x045b, 0x045d, 0x045f, - 0x0460, 0x0460, 0x0460, 0x0460, 0x0461, 0x0461, 0x0462, 0x0462, - 0x0463, 0x0464, 0x0465, 0x0465, 0x0466, 0x0467, 0x0468, 0x0469, - 0x046a, 0x046b, 0x046c, 0x046e, 0x046f, 0x0470, 0x0471, 0x0473, - 0x0474, 0x0475, 0x0477, 0x0478, 0x047a, 0x047b, 0x047d, 0x047f, - 0x0480, 0x0480, 0x0480, 0x0480, 0x0481, 0x0481, 0x0482, 0x0482, - 0x0483, 0x0484, 0x0485, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, - 0x048a, 0x048b, 0x048c, 0x048e, 0x048f, 0x0490, 0x0491, 0x0493, - 0x0494, 0x0495, 0x0497, 0x0498, 0x049a, 0x049b, 0x049d, 0x049f, - 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c1, 0x04c1, 0x04c2, 0x04c2, - 0x04c3, 0x04c4, 0x04c5, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, - 0x04ca, 0x04cb, 0x04cc, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d3, - 0x04d4, 0x04d5, 0x04d7, 0x04d8, 0x04da, 0x04db, 0x04dd, 0x04df, - 0x04e0, 0x04e0, 0x04e0, 0x04e0, 0x04e1, 0x04e1, 0x04e2, 0x04e2, - 0x04e3, 0x04e4, 0x04e5, 0x04e5, 0x04e6, 0x04e7, 0x04e8, 0x04e9, - 0x04ea, 0x04eb, 0x04ec, 0x04ee, 0x04ef, 0x04f0, 0x04f1, 0x04f3, - 0x04f4, 0x04f5, 0x04f7, 0x04f8, 0x04fa, 0x04fb, 0x04fd, 0x04ff, - 0x0500, 0x0500, 0x0500, 0x0500, 0x0501, 0x0501, 0x0502, 0x0502, - 0x0503, 0x0504, 0x0505, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, - 0x050a, 0x050b, 0x050c, 0x050e, 0x050f, 0x0510, 0x0511, 0x0513, - 0x0514, 0x0515, 0x0517, 0x0518, 0x051a, 0x051b, 0x051d, 0x051f, - 0x0540, 0x0540, 0x0540, 0x0540, 0x0541, 0x0541, 0x0542, 0x0542, - 0x0543, 0x0544, 0x0545, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, - 0x054a, 0x054b, 0x054c, 0x054e, 0x054f, 0x0550, 0x0551, 0x0553, - 0x0554, 0x0555, 0x0557, 0x0558, 0x055a, 0x055b, 0x055d, 0x055f, - 0x0560, 0x0560, 0x0560, 0x0560, 0x0561, 0x0561, 0x0562, 0x0562, - 0x0563, 0x0564, 0x0565, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, - 0x056a, 0x056b, 0x056c, 0x056e, 0x056f, 0x0570, 0x0571, 0x0573, - 0x0574, 0x0575, 0x0577, 0x0578, 0x057a, 0x057b, 0x057d, 0x057f, - 0x0580, 0x0580, 0x0580, 0x0580, 0x0581, 0x0581, 0x0582, 0x0582, - 0x0583, 0x0584, 0x0585, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, - 0x058a, 0x058b, 0x058c, 0x058e, 0x058f, 0x0590, 0x0591, 0x0593, - 0x0594, 0x0595, 0x0597, 0x0598, 0x059a, 0x059b, 0x059d, 0x059f, - 0x05c0, 0x05c0, 0x05c0, 0x05c0, 0x05c1, 0x05c1, 0x05c2, 0x05c2, - 0x05c3, 0x05c4, 0x05c5, 0x05c5, 0x05c6, 0x05c7, 0x05c8, 0x05c9, - 0x05ca, 0x05cb, 0x05cc, 0x05ce, 0x05cf, 0x05d0, 0x05d1, 0x05d3, - 0x05d4, 0x05d5, 0x05d7, 0x05d8, 0x05da, 0x05db, 0x05dd, 0x05df, - 0x05e0, 0x05e0, 0x05e0, 0x05e0, 0x05e1, 0x05e1, 0x05e2, 0x05e2, - 0x05e3, 0x05e4, 0x05e5, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, - 0x05ea, 0x05eb, 0x05ec, 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f3, - 0x05f4, 0x05f5, 0x05f7, 0x05f8, 0x05fa, 0x05fb, 0x05fd, 0x05ff, - 0x0620, 0x0620, 0x0620, 0x0620, 0x0621, 0x0621, 0x0622, 0x0622, - 0x0623, 0x0624, 0x0625, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, - 0x062a, 0x062b, 0x062c, 0x062e, 0x062f, 0x0630, 0x0631, 0x0633, - 0x0634, 0x0635, 0x0637, 0x0638, 0x063a, 0x063b, 0x063d, 0x063f, - 0x0640, 0x0640, 0x0640, 0x0640, 0x0641, 0x0641, 0x0642, 0x0642, - 0x0643, 0x0644, 0x0645, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, - 0x064a, 0x064b, 0x064c, 0x064e, 0x064f, 0x0650, 0x0651, 0x0653, - 0x0654, 0x0655, 0x0657, 0x0658, 0x065a, 0x065b, 0x065d, 0x065f, - 0x0680, 0x0680, 0x0680, 0x0680, 0x0681, 0x0681, 0x0682, 0x0682, - 0x0683, 0x0684, 0x0685, 0x0685, 0x0686, 0x0687, 0x0688, 0x0689, - 0x068a, 0x068b, 0x068c, 0x068e, 0x068f, 0x0690, 0x0691, 0x0693, - 0x0694, 0x0695, 0x0697, 0x0698, 0x069a, 0x069b, 0x069d, 0x069f, - 0x06a0, 0x06a0, 0x06a0, 0x06a0, 0x06a1, 0x06a1, 0x06a2, 0x06a2, - 0x06a3, 0x06a4, 0x06a5, 0x06a5, 0x06a6, 0x06a7, 0x06a8, 0x06a9, - 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, 0x06b0, 0x06b1, 0x06b3, - 0x06b4, 0x06b5, 0x06b7, 0x06b8, 0x06ba, 0x06bb, 0x06bd, 0x06bf, - 0x06e0, 0x06e0, 0x06e0, 0x06e0, 0x06e1, 0x06e1, 0x06e2, 0x06e2, - 0x06e3, 0x06e4, 0x06e5, 0x06e5, 0x06e6, 0x06e7, 0x06e8, 0x06e9, - 0x06ea, 0x06eb, 0x06ec, 0x06ee, 0x06ef, 0x06f0, 0x06f1, 0x06f3, - 0x06f4, 0x06f5, 0x06f7, 0x06f8, 0x06fa, 0x06fb, 0x06fd, 0x06ff, - 0x0700, 0x0700, 0x0700, 0x0700, 0x0701, 0x0701, 0x0702, 0x0702, - 0x0703, 0x0704, 0x0705, 0x0705, 0x0706, 0x0707, 0x0708, 0x0709, - 0x070a, 0x070b, 0x070c, 0x070e, 0x070f, 0x0710, 0x0711, 0x0713, - 0x0714, 0x0715, 0x0717, 0x0718, 0x071a, 0x071b, 0x071d, 0x071f, - 0x0740, 0x0740, 0x0740, 0x0740, 0x0741, 0x0741, 0x0742, 0x0742, - 0x0743, 0x0744, 0x0745, 0x0745, 0x0746, 0x0747, 0x0748, 0x0749, - 0x074a, 0x074b, 0x074c, 0x074e, 0x074f, 0x0750, 0x0751, 0x0753, - 0x0754, 0x0755, 0x0757, 0x0758, 0x075a, 0x075b, 0x075d, 0x075f, - 0x0760, 0x0760, 0x0760, 0x0760, 0x0761, 0x0761, 0x0762, 0x0762, - 0x0763, 0x0764, 0x0765, 0x0765, 0x0766, 0x0767, 0x0768, 0x0769, - 0x076a, 0x076b, 0x076c, 0x076e, 0x076f, 0x0770, 0x0771, 0x0773, - 0x0774, 0x0775, 0x0777, 0x0778, 0x077a, 0x077b, 0x077d, 0x077f, - 0x07a0, 0x07a0, 0x07a0, 0x07a0, 0x07a1, 0x07a1, 0x07a2, 0x07a2, - 0x07a3, 0x07a4, 0x07a5, 0x07a5, 0x07a6, 0x07a7, 0x07a8, 0x07a9, - 0x07aa, 0x07ab, 0x07ac, 0x07ae, 0x07af, 0x07b0, 0x07b1, 0x07b3, - 0x07b4, 0x07b5, 0x07b7, 0x07b8, 0x07ba, 0x07bb, 0x07bd, 0x07bf, - 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07e1, 0x07e1, 0x07e2, 0x07e2, - 0x07e3, 0x07e4, 0x07e5, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, - 0x07ea, 0x07eb, 0x07ec, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, - 0x07f4, 0x07f5, 0x07f7, 0x07f8, 0x07fa, 0x07fb, 0x07fd, 0x07ff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0081, 0x0081, 0x0082, 0x0082, - 0x0083, 0x0084, 0x0085, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, - 0x008a, 0x008b, 0x008c, 0x008e, 0x008f, 0x0090, 0x0091, 0x0093, - 0x0094, 0x0095, 0x0097, 0x0098, 0x009a, 0x009b, 0x009d, 0x009f, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c1, 0x00c1, 0x00c2, 0x00c2, - 0x00c3, 0x00c4, 0x00c5, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, - 0x00ca, 0x00cb, 0x00cc, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d3, - 0x00d4, 0x00d5, 0x00d7, 0x00d8, 0x00da, 0x00db, 0x00dd, 0x00df, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0101, 0x0101, 0x0102, 0x0102, - 0x0103, 0x0104, 0x0105, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, - 0x010a, 0x010b, 0x010c, 0x010e, 0x010f, 0x0110, 0x0111, 0x0113, - 0x0114, 0x0115, 0x0117, 0x0118, 0x011a, 0x011b, 0x011d, 0x011f, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0121, 0x0121, 0x0122, 0x0122, - 0x0123, 0x0124, 0x0125, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, - 0x012a, 0x012b, 0x012c, 0x012e, 0x012f, 0x0130, 0x0131, 0x0133, - 0x0134, 0x0135, 0x0137, 0x0138, 0x013a, 0x013b, 0x013d, 0x013f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0160, 0x0160, 0x0160, 0x0160, 0x0161, 0x0161, 0x0162, 0x0162, - 0x0163, 0x0164, 0x0165, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, - 0x016a, 0x016b, 0x016c, 0x016e, 0x016f, 0x0170, 0x0171, 0x0173, - 0x0174, 0x0175, 0x0177, 0x0178, 0x017a, 0x017b, 0x017d, 0x017f, - 0x0180, 0x0180, 0x0180, 0x0180, 0x0181, 0x0181, 0x0182, 0x0182, - 0x0183, 0x0184, 0x0185, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, - 0x018a, 0x018b, 0x018c, 0x018e, 0x018f, 0x0190, 0x0191, 0x0193, - 0x0194, 0x0195, 0x0197, 0x0198, 0x019a, 0x019b, 0x019d, 0x019f, - 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a1, 0x01a1, 0x01a2, 0x01a2, - 0x01a3, 0x01a4, 0x01a5, 0x01a5, 0x01a6, 0x01a7, 0x01a8, 0x01a9, - 0x01aa, 0x01ab, 0x01ac, 0x01ae, 0x01af, 0x01b0, 0x01b1, 0x01b3, - 0x01b4, 0x01b5, 0x01b7, 0x01b8, 0x01ba, 0x01bb, 0x01bd, 0x01bf, - 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c1, 0x01c1, 0x01c2, 0x01c2, - 0x01c3, 0x01c4, 0x01c5, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, - 0x01ca, 0x01cb, 0x01cc, 0x01ce, 0x01cf, 0x01d0, 0x01d1, 0x01d3, - 0x01d4, 0x01d5, 0x01d7, 0x01d8, 0x01da, 0x01db, 0x01dd, 0x01df, - 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e1, 0x01e1, 0x01e2, 0x01e2, - 0x01e3, 0x01e4, 0x01e5, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, - 0x01ea, 0x01eb, 0x01ec, 0x01ee, 0x01ef, 0x01f0, 0x01f1, 0x01f3, - 0x01f4, 0x01f5, 0x01f7, 0x01f8, 0x01fa, 0x01fb, 0x01fd, 0x01ff, - 0x0200, 0x0200, 0x0200, 0x0200, 0x0201, 0x0201, 0x0202, 0x0202, - 0x0203, 0x0204, 0x0205, 0x0205, 0x0206, 0x0207, 0x0208, 0x0209, - 0x020a, 0x020b, 0x020c, 0x020e, 0x020f, 0x0210, 0x0211, 0x0213, - 0x0214, 0x0215, 0x0217, 0x0218, 0x021a, 0x021b, 0x021d, 0x021f, - 0x0220, 0x0220, 0x0220, 0x0220, 0x0221, 0x0221, 0x0222, 0x0222, - 0x0223, 0x0224, 0x0225, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, - 0x022a, 0x022b, 0x022c, 0x022e, 0x022f, 0x0230, 0x0231, 0x0233, - 0x0234, 0x0235, 0x0237, 0x0238, 0x023a, 0x023b, 0x023d, 0x023f, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0241, 0x0241, 0x0242, 0x0242, - 0x0243, 0x0244, 0x0245, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, - 0x024a, 0x024b, 0x024c, 0x024e, 0x024f, 0x0250, 0x0251, 0x0253, - 0x0254, 0x0255, 0x0257, 0x0258, 0x025a, 0x025b, 0x025d, 0x025f, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0261, 0x0261, 0x0262, 0x0262, - 0x0263, 0x0264, 0x0265, 0x0265, 0x0266, 0x0267, 0x0268, 0x0269, - 0x026a, 0x026b, 0x026c, 0x026e, 0x026f, 0x0270, 0x0271, 0x0273, - 0x0274, 0x0275, 0x0277, 0x0278, 0x027a, 0x027b, 0x027d, 0x027f, - 0x0280, 0x0280, 0x0280, 0x0280, 0x0281, 0x0281, 0x0282, 0x0282, - 0x0283, 0x0284, 0x0285, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, - 0x028a, 0x028b, 0x028c, 0x028e, 0x028f, 0x0290, 0x0291, 0x0293, - 0x0294, 0x0295, 0x0297, 0x0298, 0x029a, 0x029b, 0x029d, 0x029f, - 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a1, 0x02a1, 0x02a2, 0x02a2, - 0x02a3, 0x02a4, 0x02a5, 0x02a5, 0x02a6, 0x02a7, 0x02a8, 0x02a9, - 0x02aa, 0x02ab, 0x02ac, 0x02ae, 0x02af, 0x02b0, 0x02b1, 0x02b3, - 0x02b4, 0x02b5, 0x02b7, 0x02b8, 0x02ba, 0x02bb, 0x02bd, 0x02bf, - 0x02c0, 0x02c0, 0x02c0, 0x02c0, 0x02c1, 0x02c1, 0x02c2, 0x02c2, - 0x02c3, 0x02c4, 0x02c5, 0x02c5, 0x02c6, 0x02c7, 0x02c8, 0x02c9, - 0x02ca, 0x02cb, 0x02cc, 0x02ce, 0x02cf, 0x02d0, 0x02d1, 0x02d3, - 0x02d4, 0x02d5, 0x02d7, 0x02d8, 0x02da, 0x02db, 0x02dd, 0x02df, - 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e1, 0x02e1, 0x02e2, 0x02e2, - 0x02e3, 0x02e4, 0x02e5, 0x02e5, 0x02e6, 0x02e7, 0x02e8, 0x02e9, - 0x02ea, 0x02eb, 0x02ec, 0x02ee, 0x02ef, 0x02f0, 0x02f1, 0x02f3, - 0x02f4, 0x02f5, 0x02f7, 0x02f8, 0x02fa, 0x02fb, 0x02fd, 0x02ff, - 0x0300, 0x0300, 0x0300, 0x0300, 0x0301, 0x0301, 0x0302, 0x0302, - 0x0303, 0x0304, 0x0305, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, - 0x030a, 0x030b, 0x030c, 0x030e, 0x030f, 0x0310, 0x0311, 0x0313, - 0x0314, 0x0315, 0x0317, 0x0318, 0x031a, 0x031b, 0x031d, 0x031f, - 0x0320, 0x0320, 0x0320, 0x0320, 0x0321, 0x0321, 0x0322, 0x0322, - 0x0323, 0x0324, 0x0325, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, - 0x032a, 0x032b, 0x032c, 0x032e, 0x032f, 0x0330, 0x0331, 0x0333, - 0x0334, 0x0335, 0x0337, 0x0338, 0x033a, 0x033b, 0x033d, 0x033f, - 0x0340, 0x0340, 0x0340, 0x0340, 0x0341, 0x0341, 0x0342, 0x0342, - 0x0343, 0x0344, 0x0345, 0x0345, 0x0346, 0x0347, 0x0348, 0x0349, - 0x034a, 0x034b, 0x034c, 0x034e, 0x034f, 0x0350, 0x0351, 0x0353, - 0x0354, 0x0355, 0x0357, 0x0358, 0x035a, 0x035b, 0x035d, 0x035f, - 0x0380, 0x0380, 0x0380, 0x0380, 0x0381, 0x0381, 0x0382, 0x0382, - 0x0383, 0x0384, 0x0385, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, - 0x038a, 0x038b, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, 0x0393, - 0x0394, 0x0395, 0x0397, 0x0398, 0x039a, 0x039b, 0x039d, 0x039f, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a1, 0x03a1, 0x03a2, 0x03a2, - 0x03a3, 0x03a4, 0x03a5, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, - 0x03aa, 0x03ab, 0x03ac, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b3, - 0x03b4, 0x03b5, 0x03b7, 0x03b8, 0x03ba, 0x03bb, 0x03bd, 0x03bf, - 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x03c1, 0x03c1, 0x03c2, 0x03c2, - 0x03c3, 0x03c4, 0x03c5, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, - 0x03ca, 0x03cb, 0x03cc, 0x03ce, 0x03cf, 0x03d0, 0x03d1, 0x03d3, - 0x03d4, 0x03d5, 0x03d7, 0x03d8, 0x03da, 0x03db, 0x03dd, 0x03df, - 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e1, 0x03e1, 0x03e2, 0x03e2, - 0x03e3, 0x03e4, 0x03e5, 0x03e5, 0x03e6, 0x03e7, 0x03e8, 0x03e9, - 0x03ea, 0x03eb, 0x03ec, 0x03ee, 0x03ef, 0x03f0, 0x03f1, 0x03f3, - 0x03f4, 0x03f5, 0x03f7, 0x03f8, 0x03fa, 0x03fb, 0x03fd, 0x03ff, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0401, 0x0401, 0x0402, 0x0402, - 0x0403, 0x0404, 0x0405, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0x0410, 0x0411, 0x0413, - 0x0414, 0x0415, 0x0417, 0x0418, 0x041a, 0x041b, 0x041d, 0x041f, - 0x0440, 0x0440, 0x0440, 0x0440, 0x0441, 0x0441, 0x0442, 0x0442, - 0x0443, 0x0444, 0x0445, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, - 0x044a, 0x044b, 0x044c, 0x044e, 0x044f, 0x0450, 0x0451, 0x0453, - 0x0454, 0x0455, 0x0457, 0x0458, 0x045a, 0x045b, 0x045d, 0x045f, - 0x0460, 0x0460, 0x0460, 0x0460, 0x0461, 0x0461, 0x0462, 0x0462, - 0x0463, 0x0464, 0x0465, 0x0465, 0x0466, 0x0467, 0x0468, 0x0469, - 0x046a, 0x046b, 0x046c, 0x046e, 0x046f, 0x0470, 0x0471, 0x0473, - 0x0474, 0x0475, 0x0477, 0x0478, 0x047a, 0x047b, 0x047d, 0x047f, - 0x0480, 0x0480, 0x0480, 0x0480, 0x0481, 0x0481, 0x0482, 0x0482, - 0x0483, 0x0484, 0x0485, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, - 0x048a, 0x048b, 0x048c, 0x048e, 0x048f, 0x0490, 0x0491, 0x0493, - 0x0494, 0x0495, 0x0497, 0x0498, 0x049a, 0x049b, 0x049d, 0x049f, - 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c1, 0x04c1, 0x04c2, 0x04c2, - 0x04c3, 0x04c4, 0x04c5, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, - 0x04ca, 0x04cb, 0x04cc, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d3, - 0x04d4, 0x04d5, 0x04d7, 0x04d8, 0x04da, 0x04db, 0x04dd, 0x04df, - 0x04e0, 0x04e0, 0x04e0, 0x04e0, 0x04e1, 0x04e1, 0x04e2, 0x04e2, - 0x04e3, 0x04e4, 0x04e5, 0x04e5, 0x04e6, 0x04e7, 0x04e8, 0x04e9, - 0x04ea, 0x04eb, 0x04ec, 0x04ee, 0x04ef, 0x04f0, 0x04f1, 0x04f3, - 0x04f4, 0x04f5, 0x04f7, 0x04f8, 0x04fa, 0x04fb, 0x04fd, 0x04ff, - 0x0500, 0x0500, 0x0500, 0x0500, 0x0501, 0x0501, 0x0502, 0x0502, - 0x0503, 0x0504, 0x0505, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, - 0x050a, 0x050b, 0x050c, 0x050e, 0x050f, 0x0510, 0x0511, 0x0513, - 0x0514, 0x0515, 0x0517, 0x0518, 0x051a, 0x051b, 0x051d, 0x051f, - 0x0540, 0x0540, 0x0540, 0x0540, 0x0541, 0x0541, 0x0542, 0x0542, - 0x0543, 0x0544, 0x0545, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, - 0x054a, 0x054b, 0x054c, 0x054e, 0x054f, 0x0550, 0x0551, 0x0553, - 0x0554, 0x0555, 0x0557, 0x0558, 0x055a, 0x055b, 0x055d, 0x055f, - 0x0560, 0x0560, 0x0560, 0x0560, 0x0561, 0x0561, 0x0562, 0x0562, - 0x0563, 0x0564, 0x0565, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, - 0x056a, 0x056b, 0x056c, 0x056e, 0x056f, 0x0570, 0x0571, 0x0573, - 0x0574, 0x0575, 0x0577, 0x0578, 0x057a, 0x057b, 0x057d, 0x057f, - 0x0580, 0x0580, 0x0580, 0x0580, 0x0581, 0x0581, 0x0582, 0x0582, - 0x0583, 0x0584, 0x0585, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, - 0x058a, 0x058b, 0x058c, 0x058e, 0x058f, 0x0590, 0x0591, 0x0593, - 0x0594, 0x0595, 0x0597, 0x0598, 0x059a, 0x059b, 0x059d, 0x059f, - 0x05c0, 0x05c0, 0x05c0, 0x05c0, 0x05c1, 0x05c1, 0x05c2, 0x05c2, - 0x05c3, 0x05c4, 0x05c5, 0x05c5, 0x05c6, 0x05c7, 0x05c8, 0x05c9, - 0x05ca, 0x05cb, 0x05cc, 0x05ce, 0x05cf, 0x05d0, 0x05d1, 0x05d3, - 0x05d4, 0x05d5, 0x05d7, 0x05d8, 0x05da, 0x05db, 0x05dd, 0x05df, - 0x05e0, 0x05e0, 0x05e0, 0x05e0, 0x05e1, 0x05e1, 0x05e2, 0x05e2, - 0x05e3, 0x05e4, 0x05e5, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, - 0x05ea, 0x05eb, 0x05ec, 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f3, - 0x05f4, 0x05f5, 0x05f7, 0x05f8, 0x05fa, 0x05fb, 0x05fd, 0x05ff, - 0x0620, 0x0620, 0x0620, 0x0620, 0x0621, 0x0621, 0x0622, 0x0622, - 0x0623, 0x0624, 0x0625, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, - 0x062a, 0x062b, 0x062c, 0x062e, 0x062f, 0x0630, 0x0631, 0x0633, - 0x0634, 0x0635, 0x0637, 0x0638, 0x063a, 0x063b, 0x063d, 0x063f, - 0x0640, 0x0640, 0x0640, 0x0640, 0x0641, 0x0641, 0x0642, 0x0642, - 0x0643, 0x0644, 0x0645, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, - 0x064a, 0x064b, 0x064c, 0x064e, 0x064f, 0x0650, 0x0651, 0x0653, - 0x0654, 0x0655, 0x0657, 0x0658, 0x065a, 0x065b, 0x065d, 0x065f, - 0x0680, 0x0680, 0x0680, 0x0680, 0x0681, 0x0681, 0x0682, 0x0682, - 0x0683, 0x0684, 0x0685, 0x0685, 0x0686, 0x0687, 0x0688, 0x0689, - 0x068a, 0x068b, 0x068c, 0x068e, 0x068f, 0x0690, 0x0691, 0x0693, - 0x0694, 0x0695, 0x0697, 0x0698, 0x069a, 0x069b, 0x069d, 0x069f, - 0x06a0, 0x06a0, 0x06a0, 0x06a0, 0x06a1, 0x06a1, 0x06a2, 0x06a2, - 0x06a3, 0x06a4, 0x06a5, 0x06a5, 0x06a6, 0x06a7, 0x06a8, 0x06a9, - 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, 0x06b0, 0x06b1, 0x06b3, - 0x06b4, 0x06b5, 0x06b7, 0x06b8, 0x06ba, 0x06bb, 0x06bd, 0x06bf, - 0x06e0, 0x06e0, 0x06e0, 0x06e0, 0x06e1, 0x06e1, 0x06e2, 0x06e2, - 0x06e3, 0x06e4, 0x06e5, 0x06e5, 0x06e6, 0x06e7, 0x06e8, 0x06e9, - 0x06ea, 0x06eb, 0x06ec, 0x06ee, 0x06ef, 0x06f0, 0x06f1, 0x06f3, - 0x06f4, 0x06f5, 0x06f7, 0x06f8, 0x06fa, 0x06fb, 0x06fd, 0x06ff, - 0x0700, 0x0700, 0x0700, 0x0700, 0x0701, 0x0701, 0x0702, 0x0702, - 0x0703, 0x0704, 0x0705, 0x0705, 0x0706, 0x0707, 0x0708, 0x0709, - 0x070a, 0x070b, 0x070c, 0x070e, 0x070f, 0x0710, 0x0711, 0x0713, - 0x0714, 0x0715, 0x0717, 0x0718, 0x071a, 0x071b, 0x071d, 0x071f, - 0x0740, 0x0740, 0x0740, 0x0740, 0x0741, 0x0741, 0x0742, 0x0742, - 0x0743, 0x0744, 0x0745, 0x0745, 0x0746, 0x0747, 0x0748, 0x0749, - 0x074a, 0x074b, 0x074c, 0x074e, 0x074f, 0x0750, 0x0751, 0x0753, - 0x0754, 0x0755, 0x0757, 0x0758, 0x075a, 0x075b, 0x075d, 0x075f, - 0x0760, 0x0760, 0x0760, 0x0760, 0x0761, 0x0761, 0x0762, 0x0762, - 0x0763, 0x0764, 0x0765, 0x0765, 0x0766, 0x0767, 0x0768, 0x0769, - 0x076a, 0x076b, 0x076c, 0x076e, 0x076f, 0x0770, 0x0771, 0x0773, - 0x0774, 0x0775, 0x0777, 0x0778, 0x077a, 0x077b, 0x077d, 0x077f, - 0x07a0, 0x07a0, 0x07a0, 0x07a0, 0x07a1, 0x07a1, 0x07a2, 0x07a2, - 0x07a3, 0x07a4, 0x07a5, 0x07a5, 0x07a6, 0x07a7, 0x07a8, 0x07a9, - 0x07aa, 0x07ab, 0x07ac, 0x07ae, 0x07af, 0x07b0, 0x07b1, 0x07b3, - 0x07b4, 0x07b5, 0x07b7, 0x07b8, 0x07ba, 0x07bb, 0x07bd, 0x07bf, - 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07e1, 0x07e1, 0x07e2, 0x07e2, - 0x07e3, 0x07e4, 0x07e5, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, - 0x07ea, 0x07eb, 0x07ec, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, - 0x07f4, 0x07f5, 0x07f7, 0x07f8, 0x07fa, 0x07fb, 0x07fd, 0x07ff, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0002, 0x0002, - 0x0003, 0x0004, 0x0005, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, - 0x000a, 0x000b, 0x000c, 0x000e, 0x000f, 0x0010, 0x0011, 0x0013, - 0x0014, 0x0015, 0x0017, 0x0018, 0x001a, 0x001b, 0x001d, 0x001f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0020, 0x0020, 0x0020, 0x0020, 0x0021, 0x0021, 0x0022, 0x0022, - 0x0023, 0x0024, 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, - 0x002a, 0x002b, 0x002c, 0x002e, 0x002f, 0x0030, 0x0031, 0x0033, - 0x0034, 0x0035, 0x0037, 0x0038, 0x003a, 0x003b, 0x003d, 0x003f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0040, 0x0040, 0x0040, 0x0040, 0x0041, 0x0041, 0x0042, 0x0042, - 0x0043, 0x0044, 0x0045, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, - 0x004a, 0x004b, 0x004c, 0x004e, 0x004f, 0x0050, 0x0051, 0x0053, - 0x0054, 0x0055, 0x0057, 0x0058, 0x005a, 0x005b, 0x005d, 0x005f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0060, 0x0060, 0x0060, 0x0060, 0x0061, 0x0061, 0x0062, 0x0062, - 0x0063, 0x0064, 0x0065, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, - 0x006a, 0x006b, 0x006c, 0x006e, 0x006f, 0x0070, 0x0071, 0x0073, - 0x0074, 0x0075, 0x0077, 0x0078, 0x007a, 0x007b, 0x007d, 0x007f, - 0x0080, 0x0080, 0x0080, 0x0080, 0x0081, 0x0081, 0x0082, 0x0082, - 0x0083, 0x0084, 0x0085, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, - 0x008a, 0x008b, 0x008c, 0x008e, 0x008f, 0x0090, 0x0091, 0x0093, - 0x0094, 0x0095, 0x0097, 0x0098, 0x009a, 0x009b, 0x009d, 0x009f, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a1, 0x00a1, 0x00a2, 0x00a2, - 0x00a3, 0x00a4, 0x00a5, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, - 0x00aa, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b3, - 0x00b4, 0x00b5, 0x00b7, 0x00b8, 0x00ba, 0x00bb, 0x00bd, 0x00bf, - 0x00c0, 0x00c0, 0x00c0, 0x00c0, 0x00c1, 0x00c1, 0x00c2, 0x00c2, - 0x00c3, 0x00c4, 0x00c5, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, - 0x00ca, 0x00cb, 0x00cc, 0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d3, - 0x00d4, 0x00d5, 0x00d7, 0x00d8, 0x00da, 0x00db, 0x00dd, 0x00df, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x00e0, 0x00e0, 0x00e0, 0x00e0, 0x00e1, 0x00e1, 0x00e2, 0x00e2, - 0x00e3, 0x00e4, 0x00e5, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, - 0x00ea, 0x00eb, 0x00ec, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f3, - 0x00f4, 0x00f5, 0x00f7, 0x00f8, 0x00fa, 0x00fb, 0x00fd, 0x00ff, - 0x0100, 0x0100, 0x0100, 0x0100, 0x0101, 0x0101, 0x0102, 0x0102, - 0x0103, 0x0104, 0x0105, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, - 0x010a, 0x010b, 0x010c, 0x010e, 0x010f, 0x0110, 0x0111, 0x0113, - 0x0114, 0x0115, 0x0117, 0x0118, 0x011a, 0x011b, 0x011d, 0x011f, - 0x0120, 0x0120, 0x0120, 0x0120, 0x0121, 0x0121, 0x0122, 0x0122, - 0x0123, 0x0124, 0x0125, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, - 0x012a, 0x012b, 0x012c, 0x012e, 0x012f, 0x0130, 0x0131, 0x0133, - 0x0134, 0x0135, 0x0137, 0x0138, 0x013a, 0x013b, 0x013d, 0x013f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0140, 0x0140, 0x0140, 0x0140, 0x0141, 0x0141, 0x0142, 0x0142, - 0x0143, 0x0144, 0x0145, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, - 0x014a, 0x014b, 0x014c, 0x014e, 0x014f, 0x0150, 0x0151, 0x0153, - 0x0154, 0x0155, 0x0157, 0x0158, 0x015a, 0x015b, 0x015d, 0x015f, - 0x0160, 0x0160, 0x0160, 0x0160, 0x0161, 0x0161, 0x0162, 0x0162, - 0x0163, 0x0164, 0x0165, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, - 0x016a, 0x016b, 0x016c, 0x016e, 0x016f, 0x0170, 0x0171, 0x0173, - 0x0174, 0x0175, 0x0177, 0x0178, 0x017a, 0x017b, 0x017d, 0x017f, - 0x0180, 0x0180, 0x0180, 0x0180, 0x0181, 0x0181, 0x0182, 0x0182, - 0x0183, 0x0184, 0x0185, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, - 0x018a, 0x018b, 0x018c, 0x018e, 0x018f, 0x0190, 0x0191, 0x0193, - 0x0194, 0x0195, 0x0197, 0x0198, 0x019a, 0x019b, 0x019d, 0x019f, - 0x01a0, 0x01a0, 0x01a0, 0x01a0, 0x01a1, 0x01a1, 0x01a2, 0x01a2, - 0x01a3, 0x01a4, 0x01a5, 0x01a5, 0x01a6, 0x01a7, 0x01a8, 0x01a9, - 0x01aa, 0x01ab, 0x01ac, 0x01ae, 0x01af, 0x01b0, 0x01b1, 0x01b3, - 0x01b4, 0x01b5, 0x01b7, 0x01b8, 0x01ba, 0x01bb, 0x01bd, 0x01bf, - 0x01c0, 0x01c0, 0x01c0, 0x01c0, 0x01c1, 0x01c1, 0x01c2, 0x01c2, - 0x01c3, 0x01c4, 0x01c5, 0x01c5, 0x01c6, 0x01c7, 0x01c8, 0x01c9, - 0x01ca, 0x01cb, 0x01cc, 0x01ce, 0x01cf, 0x01d0, 0x01d1, 0x01d3, - 0x01d4, 0x01d5, 0x01d7, 0x01d8, 0x01da, 0x01db, 0x01dd, 0x01df, - 0x01e0, 0x01e0, 0x01e0, 0x01e0, 0x01e1, 0x01e1, 0x01e2, 0x01e2, - 0x01e3, 0x01e4, 0x01e5, 0x01e5, 0x01e6, 0x01e7, 0x01e8, 0x01e9, - 0x01ea, 0x01eb, 0x01ec, 0x01ee, 0x01ef, 0x01f0, 0x01f1, 0x01f3, - 0x01f4, 0x01f5, 0x01f7, 0x01f8, 0x01fa, 0x01fb, 0x01fd, 0x01ff, - 0x0200, 0x0200, 0x0200, 0x0200, 0x0201, 0x0201, 0x0202, 0x0202, - 0x0203, 0x0204, 0x0205, 0x0205, 0x0206, 0x0207, 0x0208, 0x0209, - 0x020a, 0x020b, 0x020c, 0x020e, 0x020f, 0x0210, 0x0211, 0x0213, - 0x0214, 0x0215, 0x0217, 0x0218, 0x021a, 0x021b, 0x021d, 0x021f, - 0x0220, 0x0220, 0x0220, 0x0220, 0x0221, 0x0221, 0x0222, 0x0222, - 0x0223, 0x0224, 0x0225, 0x0225, 0x0226, 0x0227, 0x0228, 0x0229, - 0x022a, 0x022b, 0x022c, 0x022e, 0x022f, 0x0230, 0x0231, 0x0233, - 0x0234, 0x0235, 0x0237, 0x0238, 0x023a, 0x023b, 0x023d, 0x023f, - 0x0240, 0x0240, 0x0240, 0x0240, 0x0241, 0x0241, 0x0242, 0x0242, - 0x0243, 0x0244, 0x0245, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, - 0x024a, 0x024b, 0x024c, 0x024e, 0x024f, 0x0250, 0x0251, 0x0253, - 0x0254, 0x0255, 0x0257, 0x0258, 0x025a, 0x025b, 0x025d, 0x025f, - 0x0260, 0x0260, 0x0260, 0x0260, 0x0261, 0x0261, 0x0262, 0x0262, - 0x0263, 0x0264, 0x0265, 0x0265, 0x0266, 0x0267, 0x0268, 0x0269, - 0x026a, 0x026b, 0x026c, 0x026e, 0x026f, 0x0270, 0x0271, 0x0273, - 0x0274, 0x0275, 0x0277, 0x0278, 0x027a, 0x027b, 0x027d, 0x027f, - 0x0280, 0x0280, 0x0280, 0x0280, 0x0281, 0x0281, 0x0282, 0x0282, - 0x0283, 0x0284, 0x0285, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, - 0x028a, 0x028b, 0x028c, 0x028e, 0x028f, 0x0290, 0x0291, 0x0293, - 0x0294, 0x0295, 0x0297, 0x0298, 0x029a, 0x029b, 0x029d, 0x029f, - 0x02a0, 0x02a0, 0x02a0, 0x02a0, 0x02a1, 0x02a1, 0x02a2, 0x02a2, - 0x02a3, 0x02a4, 0x02a5, 0x02a5, 0x02a6, 0x02a7, 0x02a8, 0x02a9, - 0x02aa, 0x02ab, 0x02ac, 0x02ae, 0x02af, 0x02b0, 0x02b1, 0x02b3, - 0x02b4, 0x02b5, 0x02b7, 0x02b8, 0x02ba, 0x02bb, 0x02bd, 0x02bf, - 0x02c0, 0x02c0, 0x02c0, 0x02c0, 0x02c1, 0x02c1, 0x02c2, 0x02c2, - 0x02c3, 0x02c4, 0x02c5, 0x02c5, 0x02c6, 0x02c7, 0x02c8, 0x02c9, - 0x02ca, 0x02cb, 0x02cc, 0x02ce, 0x02cf, 0x02d0, 0x02d1, 0x02d3, - 0x02d4, 0x02d5, 0x02d7, 0x02d8, 0x02da, 0x02db, 0x02dd, 0x02df, - 0x02e0, 0x02e0, 0x02e0, 0x02e0, 0x02e1, 0x02e1, 0x02e2, 0x02e2, - 0x02e3, 0x02e4, 0x02e5, 0x02e5, 0x02e6, 0x02e7, 0x02e8, 0x02e9, - 0x02ea, 0x02eb, 0x02ec, 0x02ee, 0x02ef, 0x02f0, 0x02f1, 0x02f3, - 0x02f4, 0x02f5, 0x02f7, 0x02f8, 0x02fa, 0x02fb, 0x02fd, 0x02ff, - 0x0300, 0x0300, 0x0300, 0x0300, 0x0301, 0x0301, 0x0302, 0x0302, - 0x0303, 0x0304, 0x0305, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, - 0x030a, 0x030b, 0x030c, 0x030e, 0x030f, 0x0310, 0x0311, 0x0313, - 0x0314, 0x0315, 0x0317, 0x0318, 0x031a, 0x031b, 0x031d, 0x031f, - 0x0320, 0x0320, 0x0320, 0x0320, 0x0321, 0x0321, 0x0322, 0x0322, - 0x0323, 0x0324, 0x0325, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, - 0x032a, 0x032b, 0x032c, 0x032e, 0x032f, 0x0330, 0x0331, 0x0333, - 0x0334, 0x0335, 0x0337, 0x0338, 0x033a, 0x033b, 0x033d, 0x033f, - 0x0340, 0x0340, 0x0340, 0x0340, 0x0341, 0x0341, 0x0342, 0x0342, - 0x0343, 0x0344, 0x0345, 0x0345, 0x0346, 0x0347, 0x0348, 0x0349, - 0x034a, 0x034b, 0x034c, 0x034e, 0x034f, 0x0350, 0x0351, 0x0353, - 0x0354, 0x0355, 0x0357, 0x0358, 0x035a, 0x035b, 0x035d, 0x035f, - 0x0380, 0x0380, 0x0380, 0x0380, 0x0381, 0x0381, 0x0382, 0x0382, - 0x0383, 0x0384, 0x0385, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, - 0x038a, 0x038b, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, 0x0393, - 0x0394, 0x0395, 0x0397, 0x0398, 0x039a, 0x039b, 0x039d, 0x039f, - 0x03a0, 0x03a0, 0x03a0, 0x03a0, 0x03a1, 0x03a1, 0x03a2, 0x03a2, - 0x03a3, 0x03a4, 0x03a5, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, - 0x03aa, 0x03ab, 0x03ac, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b3, - 0x03b4, 0x03b5, 0x03b7, 0x03b8, 0x03ba, 0x03bb, 0x03bd, 0x03bf, - 0x03c0, 0x03c0, 0x03c0, 0x03c0, 0x03c1, 0x03c1, 0x03c2, 0x03c2, - 0x03c3, 0x03c4, 0x03c5, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, - 0x03ca, 0x03cb, 0x03cc, 0x03ce, 0x03cf, 0x03d0, 0x03d1, 0x03d3, - 0x03d4, 0x03d5, 0x03d7, 0x03d8, 0x03da, 0x03db, 0x03dd, 0x03df, - 0x03e0, 0x03e0, 0x03e0, 0x03e0, 0x03e1, 0x03e1, 0x03e2, 0x03e2, - 0x03e3, 0x03e4, 0x03e5, 0x03e5, 0x03e6, 0x03e7, 0x03e8, 0x03e9, - 0x03ea, 0x03eb, 0x03ec, 0x03ee, 0x03ef, 0x03f0, 0x03f1, 0x03f3, - 0x03f4, 0x03f5, 0x03f7, 0x03f8, 0x03fa, 0x03fb, 0x03fd, 0x03ff, - 0x0400, 0x0400, 0x0400, 0x0400, 0x0401, 0x0401, 0x0402, 0x0402, - 0x0403, 0x0404, 0x0405, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, - 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0x0410, 0x0411, 0x0413, - 0x0414, 0x0415, 0x0417, 0x0418, 0x041a, 0x041b, 0x041d, 0x041f, - 0x0440, 0x0440, 0x0440, 0x0440, 0x0441, 0x0441, 0x0442, 0x0442, - 0x0443, 0x0444, 0x0445, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, - 0x044a, 0x044b, 0x044c, 0x044e, 0x044f, 0x0450, 0x0451, 0x0453, - 0x0454, 0x0455, 0x0457, 0x0458, 0x045a, 0x045b, 0x045d, 0x045f, - 0x0460, 0x0460, 0x0460, 0x0460, 0x0461, 0x0461, 0x0462, 0x0462, - 0x0463, 0x0464, 0x0465, 0x0465, 0x0466, 0x0467, 0x0468, 0x0469, - 0x046a, 0x046b, 0x046c, 0x046e, 0x046f, 0x0470, 0x0471, 0x0473, - 0x0474, 0x0475, 0x0477, 0x0478, 0x047a, 0x047b, 0x047d, 0x047f, - 0x0480, 0x0480, 0x0480, 0x0480, 0x0481, 0x0481, 0x0482, 0x0482, - 0x0483, 0x0484, 0x0485, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, - 0x048a, 0x048b, 0x048c, 0x048e, 0x048f, 0x0490, 0x0491, 0x0493, - 0x0494, 0x0495, 0x0497, 0x0498, 0x049a, 0x049b, 0x049d, 0x049f, - 0x04c0, 0x04c0, 0x04c0, 0x04c0, 0x04c1, 0x04c1, 0x04c2, 0x04c2, - 0x04c3, 0x04c4, 0x04c5, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, - 0x04ca, 0x04cb, 0x04cc, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d3, - 0x04d4, 0x04d5, 0x04d7, 0x04d8, 0x04da, 0x04db, 0x04dd, 0x04df, - 0x04e0, 0x04e0, 0x04e0, 0x04e0, 0x04e1, 0x04e1, 0x04e2, 0x04e2, - 0x04e3, 0x04e4, 0x04e5, 0x04e5, 0x04e6, 0x04e7, 0x04e8, 0x04e9, - 0x04ea, 0x04eb, 0x04ec, 0x04ee, 0x04ef, 0x04f0, 0x04f1, 0x04f3, - 0x04f4, 0x04f5, 0x04f7, 0x04f8, 0x04fa, 0x04fb, 0x04fd, 0x04ff, - 0x0500, 0x0500, 0x0500, 0x0500, 0x0501, 0x0501, 0x0502, 0x0502, - 0x0503, 0x0504, 0x0505, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, - 0x050a, 0x050b, 0x050c, 0x050e, 0x050f, 0x0510, 0x0511, 0x0513, - 0x0514, 0x0515, 0x0517, 0x0518, 0x051a, 0x051b, 0x051d, 0x051f, - 0x0540, 0x0540, 0x0540, 0x0540, 0x0541, 0x0541, 0x0542, 0x0542, - 0x0543, 0x0544, 0x0545, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, - 0x054a, 0x054b, 0x054c, 0x054e, 0x054f, 0x0550, 0x0551, 0x0553, - 0x0554, 0x0555, 0x0557, 0x0558, 0x055a, 0x055b, 0x055d, 0x055f, - 0x0560, 0x0560, 0x0560, 0x0560, 0x0561, 0x0561, 0x0562, 0x0562, - 0x0563, 0x0564, 0x0565, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, - 0x056a, 0x056b, 0x056c, 0x056e, 0x056f, 0x0570, 0x0571, 0x0573, - 0x0574, 0x0575, 0x0577, 0x0578, 0x057a, 0x057b, 0x057d, 0x057f, - 0x0580, 0x0580, 0x0580, 0x0580, 0x0581, 0x0581, 0x0582, 0x0582, - 0x0583, 0x0584, 0x0585, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, - 0x058a, 0x058b, 0x058c, 0x058e, 0x058f, 0x0590, 0x0591, 0x0593, - 0x0594, 0x0595, 0x0597, 0x0598, 0x059a, 0x059b, 0x059d, 0x059f, - 0x05c0, 0x05c0, 0x05c0, 0x05c0, 0x05c1, 0x05c1, 0x05c2, 0x05c2, - 0x05c3, 0x05c4, 0x05c5, 0x05c5, 0x05c6, 0x05c7, 0x05c8, 0x05c9, - 0x05ca, 0x05cb, 0x05cc, 0x05ce, 0x05cf, 0x05d0, 0x05d1, 0x05d3, - 0x05d4, 0x05d5, 0x05d7, 0x05d8, 0x05da, 0x05db, 0x05dd, 0x05df, - 0x05e0, 0x05e0, 0x05e0, 0x05e0, 0x05e1, 0x05e1, 0x05e2, 0x05e2, - 0x05e3, 0x05e4, 0x05e5, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, - 0x05ea, 0x05eb, 0x05ec, 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f3, - 0x05f4, 0x05f5, 0x05f7, 0x05f8, 0x05fa, 0x05fb, 0x05fd, 0x05ff, - 0x0620, 0x0620, 0x0620, 0x0620, 0x0621, 0x0621, 0x0622, 0x0622, - 0x0623, 0x0624, 0x0625, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, - 0x062a, 0x062b, 0x062c, 0x062e, 0x062f, 0x0630, 0x0631, 0x0633, - 0x0634, 0x0635, 0x0637, 0x0638, 0x063a, 0x063b, 0x063d, 0x063f, - 0x0640, 0x0640, 0x0640, 0x0640, 0x0641, 0x0641, 0x0642, 0x0642, - 0x0643, 0x0644, 0x0645, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, - 0x064a, 0x064b, 0x064c, 0x064e, 0x064f, 0x0650, 0x0651, 0x0653, - 0x0654, 0x0655, 0x0657, 0x0658, 0x065a, 0x065b, 0x065d, 0x065f, - 0x0680, 0x0680, 0x0680, 0x0680, 0x0681, 0x0681, 0x0682, 0x0682, - 0x0683, 0x0684, 0x0685, 0x0685, 0x0686, 0x0687, 0x0688, 0x0689, - 0x068a, 0x068b, 0x068c, 0x068e, 0x068f, 0x0690, 0x0691, 0x0693, - 0x0694, 0x0695, 0x0697, 0x0698, 0x069a, 0x069b, 0x069d, 0x069f, - 0x06a0, 0x06a0, 0x06a0, 0x06a0, 0x06a1, 0x06a1, 0x06a2, 0x06a2, - 0x06a3, 0x06a4, 0x06a5, 0x06a5, 0x06a6, 0x06a7, 0x06a8, 0x06a9, - 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, 0x06b0, 0x06b1, 0x06b3, - 0x06b4, 0x06b5, 0x06b7, 0x06b8, 0x06ba, 0x06bb, 0x06bd, 0x06bf, - 0x06e0, 0x06e0, 0x06e0, 0x06e0, 0x06e1, 0x06e1, 0x06e2, 0x06e2, - 0x06e3, 0x06e4, 0x06e5, 0x06e5, 0x06e6, 0x06e7, 0x06e8, 0x06e9, - 0x06ea, 0x06eb, 0x06ec, 0x06ee, 0x06ef, 0x06f0, 0x06f1, 0x06f3, - 0x06f4, 0x06f5, 0x06f7, 0x06f8, 0x06fa, 0x06fb, 0x06fd, 0x06ff, - 0x0700, 0x0700, 0x0700, 0x0700, 0x0701, 0x0701, 0x0702, 0x0702, - 0x0703, 0x0704, 0x0705, 0x0705, 0x0706, 0x0707, 0x0708, 0x0709, - 0x070a, 0x070b, 0x070c, 0x070e, 0x070f, 0x0710, 0x0711, 0x0713, - 0x0714, 0x0715, 0x0717, 0x0718, 0x071a, 0x071b, 0x071d, 0x071f, - 0x0740, 0x0740, 0x0740, 0x0740, 0x0741, 0x0741, 0x0742, 0x0742, - 0x0743, 0x0744, 0x0745, 0x0745, 0x0746, 0x0747, 0x0748, 0x0749, - 0x074a, 0x074b, 0x074c, 0x074e, 0x074f, 0x0750, 0x0751, 0x0753, - 0x0754, 0x0755, 0x0757, 0x0758, 0x075a, 0x075b, 0x075d, 0x075f, - 0x0760, 0x0760, 0x0760, 0x0760, 0x0761, 0x0761, 0x0762, 0x0762, - 0x0763, 0x0764, 0x0765, 0x0765, 0x0766, 0x0767, 0x0768, 0x0769, - 0x076a, 0x076b, 0x076c, 0x076e, 0x076f, 0x0770, 0x0771, 0x0773, - 0x0774, 0x0775, 0x0777, 0x0778, 0x077a, 0x077b, 0x077d, 0x077f, - 0x07a0, 0x07a0, 0x07a0, 0x07a0, 0x07a1, 0x07a1, 0x07a2, 0x07a2, - 0x07a3, 0x07a4, 0x07a5, 0x07a5, 0x07a6, 0x07a7, 0x07a8, 0x07a9, - 0x07aa, 0x07ab, 0x07ac, 0x07ae, 0x07af, 0x07b0, 0x07b1, 0x07b3, - 0x07b4, 0x07b5, 0x07b7, 0x07b8, 0x07ba, 0x07bb, 0x07bd, 0x07bf, - 0x07e0, 0x07e0, 0x07e0, 0x07e0, 0x07e1, 0x07e1, 0x07e2, 0x07e2, - 0x07e3, 0x07e4, 0x07e5, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, - 0x07ea, 0x07eb, 0x07ec, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, - 0x07f4, 0x07f5, 0x07f7, 0x07f8, 0x07fa, 0x07fb, 0x07fd, 0x07ff, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0820, 0x0820, 0x0820, 0x0820, 0x0821, 0x0821, 0x0822, 0x0822, - 0x0823, 0x0824, 0x0825, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, - 0x082a, 0x082b, 0x082c, 0x082e, 0x082f, 0x0830, 0x0831, 0x0833, - 0x0834, 0x0835, 0x0837, 0x0838, 0x083a, 0x083b, 0x083d, 0x083f, - 0x0820, 0x0820, 0x0820, 0x0820, 0x0821, 0x0821, 0x0822, 0x0822, - 0x0823, 0x0824, 0x0825, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, - 0x082a, 0x082b, 0x082c, 0x082e, 0x082f, 0x0830, 0x0831, 0x0833, - 0x0834, 0x0835, 0x0837, 0x0838, 0x083a, 0x083b, 0x083d, 0x083f, - 0x0820, 0x0820, 0x0820, 0x0820, 0x0821, 0x0821, 0x0822, 0x0822, - 0x0823, 0x0824, 0x0825, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, - 0x082a, 0x082b, 0x082c, 0x082e, 0x082f, 0x0830, 0x0831, 0x0833, - 0x0834, 0x0835, 0x0837, 0x0838, 0x083a, 0x083b, 0x083d, 0x083f, - 0x0840, 0x0840, 0x0840, 0x0840, 0x0841, 0x0841, 0x0842, 0x0842, - 0x0843, 0x0844, 0x0845, 0x0845, 0x0846, 0x0847, 0x0848, 0x0849, - 0x084a, 0x084b, 0x084c, 0x084e, 0x084f, 0x0850, 0x0851, 0x0853, - 0x0854, 0x0855, 0x0857, 0x0858, 0x085a, 0x085b, 0x085d, 0x085f, - 0x0840, 0x0840, 0x0840, 0x0840, 0x0841, 0x0841, 0x0842, 0x0842, - 0x0843, 0x0844, 0x0845, 0x0845, 0x0846, 0x0847, 0x0848, 0x0849, - 0x084a, 0x084b, 0x084c, 0x084e, 0x084f, 0x0850, 0x0851, 0x0853, - 0x0854, 0x0855, 0x0857, 0x0858, 0x085a, 0x085b, 0x085d, 0x085f, - 0x0860, 0x0860, 0x0860, 0x0860, 0x0861, 0x0861, 0x0862, 0x0862, - 0x0863, 0x0864, 0x0865, 0x0865, 0x0866, 0x0867, 0x0868, 0x0869, - 0x086a, 0x086b, 0x086c, 0x086e, 0x086f, 0x0870, 0x0871, 0x0873, - 0x0874, 0x0875, 0x0877, 0x0878, 0x087a, 0x087b, 0x087d, 0x087f, - 0x0860, 0x0860, 0x0860, 0x0860, 0x0861, 0x0861, 0x0862, 0x0862, - 0x0863, 0x0864, 0x0865, 0x0865, 0x0866, 0x0867, 0x0868, 0x0869, - 0x086a, 0x086b, 0x086c, 0x086e, 0x086f, 0x0870, 0x0871, 0x0873, - 0x0874, 0x0875, 0x0877, 0x0878, 0x087a, 0x087b, 0x087d, 0x087f, - 0x0880, 0x0880, 0x0880, 0x0880, 0x0881, 0x0881, 0x0882, 0x0882, - 0x0883, 0x0884, 0x0885, 0x0885, 0x0886, 0x0887, 0x0888, 0x0889, - 0x088a, 0x088b, 0x088c, 0x088e, 0x088f, 0x0890, 0x0891, 0x0893, - 0x0894, 0x0895, 0x0897, 0x0898, 0x089a, 0x089b, 0x089d, 0x089f, - 0x08a0, 0x08a0, 0x08a0, 0x08a0, 0x08a1, 0x08a1, 0x08a2, 0x08a2, - 0x08a3, 0x08a4, 0x08a5, 0x08a5, 0x08a6, 0x08a7, 0x08a8, 0x08a9, - 0x08aa, 0x08ab, 0x08ac, 0x08ae, 0x08af, 0x08b0, 0x08b1, 0x08b3, - 0x08b4, 0x08b5, 0x08b7, 0x08b8, 0x08ba, 0x08bb, 0x08bd, 0x08bf, - 0x08a0, 0x08a0, 0x08a0, 0x08a0, 0x08a1, 0x08a1, 0x08a2, 0x08a2, - 0x08a3, 0x08a4, 0x08a5, 0x08a5, 0x08a6, 0x08a7, 0x08a8, 0x08a9, - 0x08aa, 0x08ab, 0x08ac, 0x08ae, 0x08af, 0x08b0, 0x08b1, 0x08b3, - 0x08b4, 0x08b5, 0x08b7, 0x08b8, 0x08ba, 0x08bb, 0x08bd, 0x08bf, - 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c1, 0x08c1, 0x08c2, 0x08c2, - 0x08c3, 0x08c4, 0x08c5, 0x08c5, 0x08c6, 0x08c7, 0x08c8, 0x08c9, - 0x08ca, 0x08cb, 0x08cc, 0x08ce, 0x08cf, 0x08d0, 0x08d1, 0x08d3, - 0x08d4, 0x08d5, 0x08d7, 0x08d8, 0x08da, 0x08db, 0x08dd, 0x08df, - 0x08e0, 0x08e0, 0x08e0, 0x08e0, 0x08e1, 0x08e1, 0x08e2, 0x08e2, - 0x08e3, 0x08e4, 0x08e5, 0x08e5, 0x08e6, 0x08e7, 0x08e8, 0x08e9, - 0x08ea, 0x08eb, 0x08ec, 0x08ee, 0x08ef, 0x08f0, 0x08f1, 0x08f3, - 0x08f4, 0x08f5, 0x08f7, 0x08f8, 0x08fa, 0x08fb, 0x08fd, 0x08ff, - 0x08e0, 0x08e0, 0x08e0, 0x08e0, 0x08e1, 0x08e1, 0x08e2, 0x08e2, - 0x08e3, 0x08e4, 0x08e5, 0x08e5, 0x08e6, 0x08e7, 0x08e8, 0x08e9, - 0x08ea, 0x08eb, 0x08ec, 0x08ee, 0x08ef, 0x08f0, 0x08f1, 0x08f3, - 0x08f4, 0x08f5, 0x08f7, 0x08f8, 0x08fa, 0x08fb, 0x08fd, 0x08ff, - 0x0900, 0x0900, 0x0900, 0x0900, 0x0901, 0x0901, 0x0902, 0x0902, - 0x0903, 0x0904, 0x0905, 0x0905, 0x0906, 0x0907, 0x0908, 0x0909, - 0x090a, 0x090b, 0x090c, 0x090e, 0x090f, 0x0910, 0x0911, 0x0913, - 0x0914, 0x0915, 0x0917, 0x0918, 0x091a, 0x091b, 0x091d, 0x091f, - 0x0920, 0x0920, 0x0920, 0x0920, 0x0921, 0x0921, 0x0922, 0x0922, - 0x0923, 0x0924, 0x0925, 0x0925, 0x0926, 0x0927, 0x0928, 0x0929, - 0x092a, 0x092b, 0x092c, 0x092e, 0x092f, 0x0930, 0x0931, 0x0933, - 0x0934, 0x0935, 0x0937, 0x0938, 0x093a, 0x093b, 0x093d, 0x093f, - 0x0940, 0x0940, 0x0940, 0x0940, 0x0941, 0x0941, 0x0942, 0x0942, - 0x0943, 0x0944, 0x0945, 0x0945, 0x0946, 0x0947, 0x0948, 0x0949, - 0x094a, 0x094b, 0x094c, 0x094e, 0x094f, 0x0950, 0x0951, 0x0953, - 0x0954, 0x0955, 0x0957, 0x0958, 0x095a, 0x095b, 0x095d, 0x095f, - 0x0940, 0x0940, 0x0940, 0x0940, 0x0941, 0x0941, 0x0942, 0x0942, - 0x0943, 0x0944, 0x0945, 0x0945, 0x0946, 0x0947, 0x0948, 0x0949, - 0x094a, 0x094b, 0x094c, 0x094e, 0x094f, 0x0950, 0x0951, 0x0953, - 0x0954, 0x0955, 0x0957, 0x0958, 0x095a, 0x095b, 0x095d, 0x095f, - 0x0960, 0x0960, 0x0960, 0x0960, 0x0961, 0x0961, 0x0962, 0x0962, - 0x0963, 0x0964, 0x0965, 0x0965, 0x0966, 0x0967, 0x0968, 0x0969, - 0x096a, 0x096b, 0x096c, 0x096e, 0x096f, 0x0970, 0x0971, 0x0973, - 0x0974, 0x0975, 0x0977, 0x0978, 0x097a, 0x097b, 0x097d, 0x097f, - 0x0980, 0x0980, 0x0980, 0x0980, 0x0981, 0x0981, 0x0982, 0x0982, - 0x0983, 0x0984, 0x0985, 0x0985, 0x0986, 0x0987, 0x0988, 0x0989, - 0x098a, 0x098b, 0x098c, 0x098e, 0x098f, 0x0990, 0x0991, 0x0993, - 0x0994, 0x0995, 0x0997, 0x0998, 0x099a, 0x099b, 0x099d, 0x099f, - 0x09a0, 0x09a0, 0x09a0, 0x09a0, 0x09a1, 0x09a1, 0x09a2, 0x09a2, - 0x09a3, 0x09a4, 0x09a5, 0x09a5, 0x09a6, 0x09a7, 0x09a8, 0x09a9, - 0x09aa, 0x09ab, 0x09ac, 0x09ae, 0x09af, 0x09b0, 0x09b1, 0x09b3, - 0x09b4, 0x09b5, 0x09b7, 0x09b8, 0x09ba, 0x09bb, 0x09bd, 0x09bf, - 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c1, 0x09c1, 0x09c2, 0x09c2, - 0x09c3, 0x09c4, 0x09c5, 0x09c5, 0x09c6, 0x09c7, 0x09c8, 0x09c9, - 0x09ca, 0x09cb, 0x09cc, 0x09ce, 0x09cf, 0x09d0, 0x09d1, 0x09d3, - 0x09d4, 0x09d5, 0x09d7, 0x09d8, 0x09da, 0x09db, 0x09dd, 0x09df, - 0x09e0, 0x09e0, 0x09e0, 0x09e0, 0x09e1, 0x09e1, 0x09e2, 0x09e2, - 0x09e3, 0x09e4, 0x09e5, 0x09e5, 0x09e6, 0x09e7, 0x09e8, 0x09e9, - 0x09ea, 0x09eb, 0x09ec, 0x09ee, 0x09ef, 0x09f0, 0x09f1, 0x09f3, - 0x09f4, 0x09f5, 0x09f7, 0x09f8, 0x09fa, 0x09fb, 0x09fd, 0x09ff, - 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a01, 0x0a01, 0x0a02, 0x0a02, - 0x0a03, 0x0a04, 0x0a05, 0x0a05, 0x0a06, 0x0a07, 0x0a08, 0x0a09, - 0x0a0a, 0x0a0b, 0x0a0c, 0x0a0e, 0x0a0f, 0x0a10, 0x0a11, 0x0a13, - 0x0a14, 0x0a15, 0x0a17, 0x0a18, 0x0a1a, 0x0a1b, 0x0a1d, 0x0a1f, - 0x0a20, 0x0a20, 0x0a20, 0x0a20, 0x0a21, 0x0a21, 0x0a22, 0x0a22, - 0x0a23, 0x0a24, 0x0a25, 0x0a25, 0x0a26, 0x0a27, 0x0a28, 0x0a29, - 0x0a2a, 0x0a2b, 0x0a2c, 0x0a2e, 0x0a2f, 0x0a30, 0x0a31, 0x0a33, - 0x0a34, 0x0a35, 0x0a37, 0x0a38, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3f, - 0x0a40, 0x0a40, 0x0a40, 0x0a40, 0x0a41, 0x0a41, 0x0a42, 0x0a42, - 0x0a43, 0x0a44, 0x0a45, 0x0a45, 0x0a46, 0x0a47, 0x0a48, 0x0a49, - 0x0a4a, 0x0a4b, 0x0a4c, 0x0a4e, 0x0a4f, 0x0a50, 0x0a51, 0x0a53, - 0x0a54, 0x0a55, 0x0a57, 0x0a58, 0x0a5a, 0x0a5b, 0x0a5d, 0x0a5f, - 0x0a60, 0x0a60, 0x0a60, 0x0a60, 0x0a61, 0x0a61, 0x0a62, 0x0a62, - 0x0a63, 0x0a64, 0x0a65, 0x0a65, 0x0a66, 0x0a67, 0x0a68, 0x0a69, - 0x0a6a, 0x0a6b, 0x0a6c, 0x0a6e, 0x0a6f, 0x0a70, 0x0a71, 0x0a73, - 0x0a74, 0x0a75, 0x0a77, 0x0a78, 0x0a7a, 0x0a7b, 0x0a7d, 0x0a7f, - 0x0a80, 0x0a80, 0x0a80, 0x0a80, 0x0a81, 0x0a81, 0x0a82, 0x0a82, - 0x0a83, 0x0a84, 0x0a85, 0x0a85, 0x0a86, 0x0a87, 0x0a88, 0x0a89, - 0x0a8a, 0x0a8b, 0x0a8c, 0x0a8e, 0x0a8f, 0x0a90, 0x0a91, 0x0a93, - 0x0a94, 0x0a95, 0x0a97, 0x0a98, 0x0a9a, 0x0a9b, 0x0a9d, 0x0a9f, - 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa1, 0x0aa1, 0x0aa2, 0x0aa2, - 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8, 0x0aa9, - 0x0aaa, 0x0aab, 0x0aac, 0x0aae, 0x0aaf, 0x0ab0, 0x0ab1, 0x0ab3, - 0x0ab4, 0x0ab5, 0x0ab7, 0x0ab8, 0x0aba, 0x0abb, 0x0abd, 0x0abf, - 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac1, 0x0ac1, 0x0ac2, 0x0ac2, - 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac5, 0x0ac6, 0x0ac7, 0x0ac8, 0x0ac9, - 0x0aca, 0x0acb, 0x0acc, 0x0ace, 0x0acf, 0x0ad0, 0x0ad1, 0x0ad3, - 0x0ad4, 0x0ad5, 0x0ad7, 0x0ad8, 0x0ada, 0x0adb, 0x0add, 0x0adf, - 0x0ae0, 0x0ae0, 0x0ae0, 0x0ae0, 0x0ae1, 0x0ae1, 0x0ae2, 0x0ae2, - 0x0ae3, 0x0ae4, 0x0ae5, 0x0ae5, 0x0ae6, 0x0ae7, 0x0ae8, 0x0ae9, - 0x0aea, 0x0aeb, 0x0aec, 0x0aee, 0x0aef, 0x0af0, 0x0af1, 0x0af3, - 0x0af4, 0x0af5, 0x0af7, 0x0af8, 0x0afa, 0x0afb, 0x0afd, 0x0aff, - 0x0b00, 0x0b00, 0x0b00, 0x0b00, 0x0b01, 0x0b01, 0x0b02, 0x0b02, - 0x0b03, 0x0b04, 0x0b05, 0x0b05, 0x0b06, 0x0b07, 0x0b08, 0x0b09, - 0x0b0a, 0x0b0b, 0x0b0c, 0x0b0e, 0x0b0f, 0x0b10, 0x0b11, 0x0b13, - 0x0b14, 0x0b15, 0x0b17, 0x0b18, 0x0b1a, 0x0b1b, 0x0b1d, 0x0b1f, - 0x0b20, 0x0b20, 0x0b20, 0x0b20, 0x0b21, 0x0b21, 0x0b22, 0x0b22, - 0x0b23, 0x0b24, 0x0b25, 0x0b25, 0x0b26, 0x0b27, 0x0b28, 0x0b29, - 0x0b2a, 0x0b2b, 0x0b2c, 0x0b2e, 0x0b2f, 0x0b30, 0x0b31, 0x0b33, - 0x0b34, 0x0b35, 0x0b37, 0x0b38, 0x0b3a, 0x0b3b, 0x0b3d, 0x0b3f, - 0x0b40, 0x0b40, 0x0b40, 0x0b40, 0x0b41, 0x0b41, 0x0b42, 0x0b42, - 0x0b43, 0x0b44, 0x0b45, 0x0b45, 0x0b46, 0x0b47, 0x0b48, 0x0b49, - 0x0b4a, 0x0b4b, 0x0b4c, 0x0b4e, 0x0b4f, 0x0b50, 0x0b51, 0x0b53, - 0x0b54, 0x0b55, 0x0b57, 0x0b58, 0x0b5a, 0x0b5b, 0x0b5d, 0x0b5f, - 0x0b80, 0x0b80, 0x0b80, 0x0b80, 0x0b81, 0x0b81, 0x0b82, 0x0b82, - 0x0b83, 0x0b84, 0x0b85, 0x0b85, 0x0b86, 0x0b87, 0x0b88, 0x0b89, - 0x0b8a, 0x0b8b, 0x0b8c, 0x0b8e, 0x0b8f, 0x0b90, 0x0b91, 0x0b93, - 0x0b94, 0x0b95, 0x0b97, 0x0b98, 0x0b9a, 0x0b9b, 0x0b9d, 0x0b9f, - 0x0ba0, 0x0ba0, 0x0ba0, 0x0ba0, 0x0ba1, 0x0ba1, 0x0ba2, 0x0ba2, - 0x0ba3, 0x0ba4, 0x0ba5, 0x0ba5, 0x0ba6, 0x0ba7, 0x0ba8, 0x0ba9, - 0x0baa, 0x0bab, 0x0bac, 0x0bae, 0x0baf, 0x0bb0, 0x0bb1, 0x0bb3, - 0x0bb4, 0x0bb5, 0x0bb7, 0x0bb8, 0x0bba, 0x0bbb, 0x0bbd, 0x0bbf, - 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc1, 0x0bc1, 0x0bc2, 0x0bc2, - 0x0bc3, 0x0bc4, 0x0bc5, 0x0bc5, 0x0bc6, 0x0bc7, 0x0bc8, 0x0bc9, - 0x0bca, 0x0bcb, 0x0bcc, 0x0bce, 0x0bcf, 0x0bd0, 0x0bd1, 0x0bd3, - 0x0bd4, 0x0bd5, 0x0bd7, 0x0bd8, 0x0bda, 0x0bdb, 0x0bdd, 0x0bdf, - 0x0be0, 0x0be0, 0x0be0, 0x0be0, 0x0be1, 0x0be1, 0x0be2, 0x0be2, - 0x0be3, 0x0be4, 0x0be5, 0x0be5, 0x0be6, 0x0be7, 0x0be8, 0x0be9, - 0x0bea, 0x0beb, 0x0bec, 0x0bee, 0x0bef, 0x0bf0, 0x0bf1, 0x0bf3, - 0x0bf4, 0x0bf5, 0x0bf7, 0x0bf8, 0x0bfa, 0x0bfb, 0x0bfd, 0x0bff, - 0x0c00, 0x0c00, 0x0c00, 0x0c00, 0x0c01, 0x0c01, 0x0c02, 0x0c02, - 0x0c03, 0x0c04, 0x0c05, 0x0c05, 0x0c06, 0x0c07, 0x0c08, 0x0c09, - 0x0c0a, 0x0c0b, 0x0c0c, 0x0c0e, 0x0c0f, 0x0c10, 0x0c11, 0x0c13, - 0x0c14, 0x0c15, 0x0c17, 0x0c18, 0x0c1a, 0x0c1b, 0x0c1d, 0x0c1f, - 0x0c40, 0x0c40, 0x0c40, 0x0c40, 0x0c41, 0x0c41, 0x0c42, 0x0c42, - 0x0c43, 0x0c44, 0x0c45, 0x0c45, 0x0c46, 0x0c47, 0x0c48, 0x0c49, - 0x0c4a, 0x0c4b, 0x0c4c, 0x0c4e, 0x0c4f, 0x0c50, 0x0c51, 0x0c53, - 0x0c54, 0x0c55, 0x0c57, 0x0c58, 0x0c5a, 0x0c5b, 0x0c5d, 0x0c5f, - 0x0c60, 0x0c60, 0x0c60, 0x0c60, 0x0c61, 0x0c61, 0x0c62, 0x0c62, - 0x0c63, 0x0c64, 0x0c65, 0x0c65, 0x0c66, 0x0c67, 0x0c68, 0x0c69, - 0x0c6a, 0x0c6b, 0x0c6c, 0x0c6e, 0x0c6f, 0x0c70, 0x0c71, 0x0c73, - 0x0c74, 0x0c75, 0x0c77, 0x0c78, 0x0c7a, 0x0c7b, 0x0c7d, 0x0c7f, - 0x0c80, 0x0c80, 0x0c80, 0x0c80, 0x0c81, 0x0c81, 0x0c82, 0x0c82, - 0x0c83, 0x0c84, 0x0c85, 0x0c85, 0x0c86, 0x0c87, 0x0c88, 0x0c89, - 0x0c8a, 0x0c8b, 0x0c8c, 0x0c8e, 0x0c8f, 0x0c90, 0x0c91, 0x0c93, - 0x0c94, 0x0c95, 0x0c97, 0x0c98, 0x0c9a, 0x0c9b, 0x0c9d, 0x0c9f, - 0x0cc0, 0x0cc0, 0x0cc0, 0x0cc0, 0x0cc1, 0x0cc1, 0x0cc2, 0x0cc2, - 0x0cc3, 0x0cc4, 0x0cc5, 0x0cc5, 0x0cc6, 0x0cc7, 0x0cc8, 0x0cc9, - 0x0cca, 0x0ccb, 0x0ccc, 0x0cce, 0x0ccf, 0x0cd0, 0x0cd1, 0x0cd3, - 0x0cd4, 0x0cd5, 0x0cd7, 0x0cd8, 0x0cda, 0x0cdb, 0x0cdd, 0x0cdf, - 0x0ce0, 0x0ce0, 0x0ce0, 0x0ce0, 0x0ce1, 0x0ce1, 0x0ce2, 0x0ce2, - 0x0ce3, 0x0ce4, 0x0ce5, 0x0ce5, 0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, - 0x0cea, 0x0ceb, 0x0cec, 0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf3, - 0x0cf4, 0x0cf5, 0x0cf7, 0x0cf8, 0x0cfa, 0x0cfb, 0x0cfd, 0x0cff, - 0x0d00, 0x0d00, 0x0d00, 0x0d00, 0x0d01, 0x0d01, 0x0d02, 0x0d02, - 0x0d03, 0x0d04, 0x0d05, 0x0d05, 0x0d06, 0x0d07, 0x0d08, 0x0d09, - 0x0d0a, 0x0d0b, 0x0d0c, 0x0d0e, 0x0d0f, 0x0d10, 0x0d11, 0x0d13, - 0x0d14, 0x0d15, 0x0d17, 0x0d18, 0x0d1a, 0x0d1b, 0x0d1d, 0x0d1f, - 0x0d40, 0x0d40, 0x0d40, 0x0d40, 0x0d41, 0x0d41, 0x0d42, 0x0d42, - 0x0d43, 0x0d44, 0x0d45, 0x0d45, 0x0d46, 0x0d47, 0x0d48, 0x0d49, - 0x0d4a, 0x0d4b, 0x0d4c, 0x0d4e, 0x0d4f, 0x0d50, 0x0d51, 0x0d53, - 0x0d54, 0x0d55, 0x0d57, 0x0d58, 0x0d5a, 0x0d5b, 0x0d5d, 0x0d5f, - 0x0d60, 0x0d60, 0x0d60, 0x0d60, 0x0d61, 0x0d61, 0x0d62, 0x0d62, - 0x0d63, 0x0d64, 0x0d65, 0x0d65, 0x0d66, 0x0d67, 0x0d68, 0x0d69, - 0x0d6a, 0x0d6b, 0x0d6c, 0x0d6e, 0x0d6f, 0x0d70, 0x0d71, 0x0d73, - 0x0d74, 0x0d75, 0x0d77, 0x0d78, 0x0d7a, 0x0d7b, 0x0d7d, 0x0d7f, - 0x0d80, 0x0d80, 0x0d80, 0x0d80, 0x0d81, 0x0d81, 0x0d82, 0x0d82, - 0x0d83, 0x0d84, 0x0d85, 0x0d85, 0x0d86, 0x0d87, 0x0d88, 0x0d89, - 0x0d8a, 0x0d8b, 0x0d8c, 0x0d8e, 0x0d8f, 0x0d90, 0x0d91, 0x0d93, - 0x0d94, 0x0d95, 0x0d97, 0x0d98, 0x0d9a, 0x0d9b, 0x0d9d, 0x0d9f, - 0x0dc0, 0x0dc0, 0x0dc0, 0x0dc0, 0x0dc1, 0x0dc1, 0x0dc2, 0x0dc2, - 0x0dc3, 0x0dc4, 0x0dc5, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, - 0x0dca, 0x0dcb, 0x0dcc, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd3, - 0x0dd4, 0x0dd5, 0x0dd7, 0x0dd8, 0x0dda, 0x0ddb, 0x0ddd, 0x0ddf, - 0x0de0, 0x0de0, 0x0de0, 0x0de0, 0x0de1, 0x0de1, 0x0de2, 0x0de2, - 0x0de3, 0x0de4, 0x0de5, 0x0de5, 0x0de6, 0x0de7, 0x0de8, 0x0de9, - 0x0dea, 0x0deb, 0x0dec, 0x0dee, 0x0def, 0x0df0, 0x0df1, 0x0df3, - 0x0df4, 0x0df5, 0x0df7, 0x0df8, 0x0dfa, 0x0dfb, 0x0dfd, 0x0dff, - 0x0e20, 0x0e20, 0x0e20, 0x0e20, 0x0e21, 0x0e21, 0x0e22, 0x0e22, - 0x0e23, 0x0e24, 0x0e25, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, - 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e33, - 0x0e34, 0x0e35, 0x0e37, 0x0e38, 0x0e3a, 0x0e3b, 0x0e3d, 0x0e3f, - 0x0e40, 0x0e40, 0x0e40, 0x0e40, 0x0e41, 0x0e41, 0x0e42, 0x0e42, - 0x0e43, 0x0e44, 0x0e45, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, - 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4e, 0x0e4f, 0x0e50, 0x0e51, 0x0e53, - 0x0e54, 0x0e55, 0x0e57, 0x0e58, 0x0e5a, 0x0e5b, 0x0e5d, 0x0e5f, - 0x0e80, 0x0e80, 0x0e80, 0x0e80, 0x0e81, 0x0e81, 0x0e82, 0x0e82, - 0x0e83, 0x0e84, 0x0e85, 0x0e85, 0x0e86, 0x0e87, 0x0e88, 0x0e89, - 0x0e8a, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e8f, 0x0e90, 0x0e91, 0x0e93, - 0x0e94, 0x0e95, 0x0e97, 0x0e98, 0x0e9a, 0x0e9b, 0x0e9d, 0x0e9f, - 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea1, 0x0ea1, 0x0ea2, 0x0ea2, - 0x0ea3, 0x0ea4, 0x0ea5, 0x0ea5, 0x0ea6, 0x0ea7, 0x0ea8, 0x0ea9, - 0x0eaa, 0x0eab, 0x0eac, 0x0eae, 0x0eaf, 0x0eb0, 0x0eb1, 0x0eb3, - 0x0eb4, 0x0eb5, 0x0eb7, 0x0eb8, 0x0eba, 0x0ebb, 0x0ebd, 0x0ebf, - 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee1, 0x0ee1, 0x0ee2, 0x0ee2, - 0x0ee3, 0x0ee4, 0x0ee5, 0x0ee5, 0x0ee6, 0x0ee7, 0x0ee8, 0x0ee9, - 0x0eea, 0x0eeb, 0x0eec, 0x0eee, 0x0eef, 0x0ef0, 0x0ef1, 0x0ef3, - 0x0ef4, 0x0ef5, 0x0ef7, 0x0ef8, 0x0efa, 0x0efb, 0x0efd, 0x0eff, - 0x0f00, 0x0f00, 0x0f00, 0x0f00, 0x0f01, 0x0f01, 0x0f02, 0x0f02, - 0x0f03, 0x0f04, 0x0f05, 0x0f05, 0x0f06, 0x0f07, 0x0f08, 0x0f09, - 0x0f0a, 0x0f0b, 0x0f0c, 0x0f0e, 0x0f0f, 0x0f10, 0x0f11, 0x0f13, - 0x0f14, 0x0f15, 0x0f17, 0x0f18, 0x0f1a, 0x0f1b, 0x0f1d, 0x0f1f, - 0x0f40, 0x0f40, 0x0f40, 0x0f40, 0x0f41, 0x0f41, 0x0f42, 0x0f42, - 0x0f43, 0x0f44, 0x0f45, 0x0f45, 0x0f46, 0x0f47, 0x0f48, 0x0f49, - 0x0f4a, 0x0f4b, 0x0f4c, 0x0f4e, 0x0f4f, 0x0f50, 0x0f51, 0x0f53, - 0x0f54, 0x0f55, 0x0f57, 0x0f58, 0x0f5a, 0x0f5b, 0x0f5d, 0x0f5f, - 0x0f60, 0x0f60, 0x0f60, 0x0f60, 0x0f61, 0x0f61, 0x0f62, 0x0f62, - 0x0f63, 0x0f64, 0x0f65, 0x0f65, 0x0f66, 0x0f67, 0x0f68, 0x0f69, - 0x0f6a, 0x0f6b, 0x0f6c, 0x0f6e, 0x0f6f, 0x0f70, 0x0f71, 0x0f73, - 0x0f74, 0x0f75, 0x0f77, 0x0f78, 0x0f7a, 0x0f7b, 0x0f7d, 0x0f7f, - 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa1, 0x0fa1, 0x0fa2, 0x0fa2, - 0x0fa3, 0x0fa4, 0x0fa5, 0x0fa5, 0x0fa6, 0x0fa7, 0x0fa8, 0x0fa9, - 0x0faa, 0x0fab, 0x0fac, 0x0fae, 0x0faf, 0x0fb0, 0x0fb1, 0x0fb3, - 0x0fb4, 0x0fb5, 0x0fb7, 0x0fb8, 0x0fba, 0x0fbb, 0x0fbd, 0x0fbf, - 0x0fe0, 0x0fe0, 0x0fe0, 0x0fe0, 0x0fe1, 0x0fe1, 0x0fe2, 0x0fe2, - 0x0fe3, 0x0fe4, 0x0fe5, 0x0fe5, 0x0fe6, 0x0fe7, 0x0fe8, 0x0fe9, - 0x0fea, 0x0feb, 0x0fec, 0x0fee, 0x0fef, 0x0ff0, 0x0ff1, 0x0ff3, - 0x0ff4, 0x0ff5, 0x0ff7, 0x0ff8, 0x0ffa, 0x0ffb, 0x0ffd, 0x0fff, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0800, 0x0800, 0x0800, 0x0800, 0x0801, 0x0801, 0x0802, 0x0802, - 0x0803, 0x0804, 0x0805, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, - 0x080a, 0x080b, 0x080c, 0x080e, 0x080f, 0x0810, 0x0811, 0x0813, - 0x0814, 0x0815, 0x0817, 0x0818, 0x081a, 0x081b, 0x081d, 0x081f, - 0x0820, 0x0820, 0x0820, 0x0820, 0x0821, 0x0821, 0x0822, 0x0822, - 0x0823, 0x0824, 0x0825, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, - 0x082a, 0x082b, 0x082c, 0x082e, 0x082f, 0x0830, 0x0831, 0x0833, - 0x0834, 0x0835, 0x0837, 0x0838, 0x083a, 0x083b, 0x083d, 0x083f, - 0x0820, 0x0820, 0x0820, 0x0820, 0x0821, 0x0821, 0x0822, 0x0822, - 0x0823, 0x0824, 0x0825, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, - 0x082a, 0x082b, 0x082c, 0x082e, 0x082f, 0x0830, 0x0831, 0x0833, - 0x0834, 0x0835, 0x0837, 0x0838, 0x083a, 0x083b, 0x083d, 0x083f, - 0x0820, 0x0820, 0x0820, 0x0820, 0x0821, 0x0821, 0x0822, 0x0822, - 0x0823, 0x0824, 0x0825, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, - 0x082a, 0x082b, 0x082c, 0x082e, 0x082f, 0x0830, 0x0831, 0x0833, - 0x0834, 0x0835, 0x0837, 0x0838, 0x083a, 0x083b, 0x083d, 0x083f, - 0x0840, 0x0840, 0x0840, 0x0840, 0x0841, 0x0841, 0x0842, 0x0842, - 0x0843, 0x0844, 0x0845, 0x0845, 0x0846, 0x0847, 0x0848, 0x0849, - 0x084a, 0x084b, 0x084c, 0x084e, 0x084f, 0x0850, 0x0851, 0x0853, - 0x0854, 0x0855, 0x0857, 0x0858, 0x085a, 0x085b, 0x085d, 0x085f, - 0x0840, 0x0840, 0x0840, 0x0840, 0x0841, 0x0841, 0x0842, 0x0842, - 0x0843, 0x0844, 0x0845, 0x0845, 0x0846, 0x0847, 0x0848, 0x0849, - 0x084a, 0x084b, 0x084c, 0x084e, 0x084f, 0x0850, 0x0851, 0x0853, - 0x0854, 0x0855, 0x0857, 0x0858, 0x085a, 0x085b, 0x085d, 0x085f, - 0x0860, 0x0860, 0x0860, 0x0860, 0x0861, 0x0861, 0x0862, 0x0862, - 0x0863, 0x0864, 0x0865, 0x0865, 0x0866, 0x0867, 0x0868, 0x0869, - 0x086a, 0x086b, 0x086c, 0x086e, 0x086f, 0x0870, 0x0871, 0x0873, - 0x0874, 0x0875, 0x0877, 0x0878, 0x087a, 0x087b, 0x087d, 0x087f, - 0x0860, 0x0860, 0x0860, 0x0860, 0x0861, 0x0861, 0x0862, 0x0862, - 0x0863, 0x0864, 0x0865, 0x0865, 0x0866, 0x0867, 0x0868, 0x0869, - 0x086a, 0x086b, 0x086c, 0x086e, 0x086f, 0x0870, 0x0871, 0x0873, - 0x0874, 0x0875, 0x0877, 0x0878, 0x087a, 0x087b, 0x087d, 0x087f, - 0x0880, 0x0880, 0x0880, 0x0880, 0x0881, 0x0881, 0x0882, 0x0882, - 0x0883, 0x0884, 0x0885, 0x0885, 0x0886, 0x0887, 0x0888, 0x0889, - 0x088a, 0x088b, 0x088c, 0x088e, 0x088f, 0x0890, 0x0891, 0x0893, - 0x0894, 0x0895, 0x0897, 0x0898, 0x089a, 0x089b, 0x089d, 0x089f, - 0x08a0, 0x08a0, 0x08a0, 0x08a0, 0x08a1, 0x08a1, 0x08a2, 0x08a2, - 0x08a3, 0x08a4, 0x08a5, 0x08a5, 0x08a6, 0x08a7, 0x08a8, 0x08a9, - 0x08aa, 0x08ab, 0x08ac, 0x08ae, 0x08af, 0x08b0, 0x08b1, 0x08b3, - 0x08b4, 0x08b5, 0x08b7, 0x08b8, 0x08ba, 0x08bb, 0x08bd, 0x08bf, - 0x08a0, 0x08a0, 0x08a0, 0x08a0, 0x08a1, 0x08a1, 0x08a2, 0x08a2, - 0x08a3, 0x08a4, 0x08a5, 0x08a5, 0x08a6, 0x08a7, 0x08a8, 0x08a9, - 0x08aa, 0x08ab, 0x08ac, 0x08ae, 0x08af, 0x08b0, 0x08b1, 0x08b3, - 0x08b4, 0x08b5, 0x08b7, 0x08b8, 0x08ba, 0x08bb, 0x08bd, 0x08bf, - 0x08c0, 0x08c0, 0x08c0, 0x08c0, 0x08c1, 0x08c1, 0x08c2, 0x08c2, - 0x08c3, 0x08c4, 0x08c5, 0x08c5, 0x08c6, 0x08c7, 0x08c8, 0x08c9, - 0x08ca, 0x08cb, 0x08cc, 0x08ce, 0x08cf, 0x08d0, 0x08d1, 0x08d3, - 0x08d4, 0x08d5, 0x08d7, 0x08d8, 0x08da, 0x08db, 0x08dd, 0x08df, - 0x08e0, 0x08e0, 0x08e0, 0x08e0, 0x08e1, 0x08e1, 0x08e2, 0x08e2, - 0x08e3, 0x08e4, 0x08e5, 0x08e5, 0x08e6, 0x08e7, 0x08e8, 0x08e9, - 0x08ea, 0x08eb, 0x08ec, 0x08ee, 0x08ef, 0x08f0, 0x08f1, 0x08f3, - 0x08f4, 0x08f5, 0x08f7, 0x08f8, 0x08fa, 0x08fb, 0x08fd, 0x08ff, - 0x08e0, 0x08e0, 0x08e0, 0x08e0, 0x08e1, 0x08e1, 0x08e2, 0x08e2, - 0x08e3, 0x08e4, 0x08e5, 0x08e5, 0x08e6, 0x08e7, 0x08e8, 0x08e9, - 0x08ea, 0x08eb, 0x08ec, 0x08ee, 0x08ef, 0x08f0, 0x08f1, 0x08f3, - 0x08f4, 0x08f5, 0x08f7, 0x08f8, 0x08fa, 0x08fb, 0x08fd, 0x08ff, - 0x0900, 0x0900, 0x0900, 0x0900, 0x0901, 0x0901, 0x0902, 0x0902, - 0x0903, 0x0904, 0x0905, 0x0905, 0x0906, 0x0907, 0x0908, 0x0909, - 0x090a, 0x090b, 0x090c, 0x090e, 0x090f, 0x0910, 0x0911, 0x0913, - 0x0914, 0x0915, 0x0917, 0x0918, 0x091a, 0x091b, 0x091d, 0x091f, - 0x0920, 0x0920, 0x0920, 0x0920, 0x0921, 0x0921, 0x0922, 0x0922, - 0x0923, 0x0924, 0x0925, 0x0925, 0x0926, 0x0927, 0x0928, 0x0929, - 0x092a, 0x092b, 0x092c, 0x092e, 0x092f, 0x0930, 0x0931, 0x0933, - 0x0934, 0x0935, 0x0937, 0x0938, 0x093a, 0x093b, 0x093d, 0x093f, - 0x0940, 0x0940, 0x0940, 0x0940, 0x0941, 0x0941, 0x0942, 0x0942, - 0x0943, 0x0944, 0x0945, 0x0945, 0x0946, 0x0947, 0x0948, 0x0949, - 0x094a, 0x094b, 0x094c, 0x094e, 0x094f, 0x0950, 0x0951, 0x0953, - 0x0954, 0x0955, 0x0957, 0x0958, 0x095a, 0x095b, 0x095d, 0x095f, - 0x0940, 0x0940, 0x0940, 0x0940, 0x0941, 0x0941, 0x0942, 0x0942, - 0x0943, 0x0944, 0x0945, 0x0945, 0x0946, 0x0947, 0x0948, 0x0949, - 0x094a, 0x094b, 0x094c, 0x094e, 0x094f, 0x0950, 0x0951, 0x0953, - 0x0954, 0x0955, 0x0957, 0x0958, 0x095a, 0x095b, 0x095d, 0x095f, - 0x0960, 0x0960, 0x0960, 0x0960, 0x0961, 0x0961, 0x0962, 0x0962, - 0x0963, 0x0964, 0x0965, 0x0965, 0x0966, 0x0967, 0x0968, 0x0969, - 0x096a, 0x096b, 0x096c, 0x096e, 0x096f, 0x0970, 0x0971, 0x0973, - 0x0974, 0x0975, 0x0977, 0x0978, 0x097a, 0x097b, 0x097d, 0x097f, - 0x0980, 0x0980, 0x0980, 0x0980, 0x0981, 0x0981, 0x0982, 0x0982, - 0x0983, 0x0984, 0x0985, 0x0985, 0x0986, 0x0987, 0x0988, 0x0989, - 0x098a, 0x098b, 0x098c, 0x098e, 0x098f, 0x0990, 0x0991, 0x0993, - 0x0994, 0x0995, 0x0997, 0x0998, 0x099a, 0x099b, 0x099d, 0x099f, - 0x09a0, 0x09a0, 0x09a0, 0x09a0, 0x09a1, 0x09a1, 0x09a2, 0x09a2, - 0x09a3, 0x09a4, 0x09a5, 0x09a5, 0x09a6, 0x09a7, 0x09a8, 0x09a9, - 0x09aa, 0x09ab, 0x09ac, 0x09ae, 0x09af, 0x09b0, 0x09b1, 0x09b3, - 0x09b4, 0x09b5, 0x09b7, 0x09b8, 0x09ba, 0x09bb, 0x09bd, 0x09bf, - 0x09c0, 0x09c0, 0x09c0, 0x09c0, 0x09c1, 0x09c1, 0x09c2, 0x09c2, - 0x09c3, 0x09c4, 0x09c5, 0x09c5, 0x09c6, 0x09c7, 0x09c8, 0x09c9, - 0x09ca, 0x09cb, 0x09cc, 0x09ce, 0x09cf, 0x09d0, 0x09d1, 0x09d3, - 0x09d4, 0x09d5, 0x09d7, 0x09d8, 0x09da, 0x09db, 0x09dd, 0x09df, - 0x09e0, 0x09e0, 0x09e0, 0x09e0, 0x09e1, 0x09e1, 0x09e2, 0x09e2, - 0x09e3, 0x09e4, 0x09e5, 0x09e5, 0x09e6, 0x09e7, 0x09e8, 0x09e9, - 0x09ea, 0x09eb, 0x09ec, 0x09ee, 0x09ef, 0x09f0, 0x09f1, 0x09f3, - 0x09f4, 0x09f5, 0x09f7, 0x09f8, 0x09fa, 0x09fb, 0x09fd, 0x09ff, - 0x0a00, 0x0a00, 0x0a00, 0x0a00, 0x0a01, 0x0a01, 0x0a02, 0x0a02, - 0x0a03, 0x0a04, 0x0a05, 0x0a05, 0x0a06, 0x0a07, 0x0a08, 0x0a09, - 0x0a0a, 0x0a0b, 0x0a0c, 0x0a0e, 0x0a0f, 0x0a10, 0x0a11, 0x0a13, - 0x0a14, 0x0a15, 0x0a17, 0x0a18, 0x0a1a, 0x0a1b, 0x0a1d, 0x0a1f, - 0x0a20, 0x0a20, 0x0a20, 0x0a20, 0x0a21, 0x0a21, 0x0a22, 0x0a22, - 0x0a23, 0x0a24, 0x0a25, 0x0a25, 0x0a26, 0x0a27, 0x0a28, 0x0a29, - 0x0a2a, 0x0a2b, 0x0a2c, 0x0a2e, 0x0a2f, 0x0a30, 0x0a31, 0x0a33, - 0x0a34, 0x0a35, 0x0a37, 0x0a38, 0x0a3a, 0x0a3b, 0x0a3d, 0x0a3f, - 0x0a40, 0x0a40, 0x0a40, 0x0a40, 0x0a41, 0x0a41, 0x0a42, 0x0a42, - 0x0a43, 0x0a44, 0x0a45, 0x0a45, 0x0a46, 0x0a47, 0x0a48, 0x0a49, - 0x0a4a, 0x0a4b, 0x0a4c, 0x0a4e, 0x0a4f, 0x0a50, 0x0a51, 0x0a53, - 0x0a54, 0x0a55, 0x0a57, 0x0a58, 0x0a5a, 0x0a5b, 0x0a5d, 0x0a5f, - 0x0a60, 0x0a60, 0x0a60, 0x0a60, 0x0a61, 0x0a61, 0x0a62, 0x0a62, - 0x0a63, 0x0a64, 0x0a65, 0x0a65, 0x0a66, 0x0a67, 0x0a68, 0x0a69, - 0x0a6a, 0x0a6b, 0x0a6c, 0x0a6e, 0x0a6f, 0x0a70, 0x0a71, 0x0a73, - 0x0a74, 0x0a75, 0x0a77, 0x0a78, 0x0a7a, 0x0a7b, 0x0a7d, 0x0a7f, - 0x0a80, 0x0a80, 0x0a80, 0x0a80, 0x0a81, 0x0a81, 0x0a82, 0x0a82, - 0x0a83, 0x0a84, 0x0a85, 0x0a85, 0x0a86, 0x0a87, 0x0a88, 0x0a89, - 0x0a8a, 0x0a8b, 0x0a8c, 0x0a8e, 0x0a8f, 0x0a90, 0x0a91, 0x0a93, - 0x0a94, 0x0a95, 0x0a97, 0x0a98, 0x0a9a, 0x0a9b, 0x0a9d, 0x0a9f, - 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa0, 0x0aa1, 0x0aa1, 0x0aa2, 0x0aa2, - 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8, 0x0aa9, - 0x0aaa, 0x0aab, 0x0aac, 0x0aae, 0x0aaf, 0x0ab0, 0x0ab1, 0x0ab3, - 0x0ab4, 0x0ab5, 0x0ab7, 0x0ab8, 0x0aba, 0x0abb, 0x0abd, 0x0abf, - 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac0, 0x0ac1, 0x0ac1, 0x0ac2, 0x0ac2, - 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac5, 0x0ac6, 0x0ac7, 0x0ac8, 0x0ac9, - 0x0aca, 0x0acb, 0x0acc, 0x0ace, 0x0acf, 0x0ad0, 0x0ad1, 0x0ad3, - 0x0ad4, 0x0ad5, 0x0ad7, 0x0ad8, 0x0ada, 0x0adb, 0x0add, 0x0adf, - 0x0ae0, 0x0ae0, 0x0ae0, 0x0ae0, 0x0ae1, 0x0ae1, 0x0ae2, 0x0ae2, - 0x0ae3, 0x0ae4, 0x0ae5, 0x0ae5, 0x0ae6, 0x0ae7, 0x0ae8, 0x0ae9, - 0x0aea, 0x0aeb, 0x0aec, 0x0aee, 0x0aef, 0x0af0, 0x0af1, 0x0af3, - 0x0af4, 0x0af5, 0x0af7, 0x0af8, 0x0afa, 0x0afb, 0x0afd, 0x0aff, - 0x0b00, 0x0b00, 0x0b00, 0x0b00, 0x0b01, 0x0b01, 0x0b02, 0x0b02, - 0x0b03, 0x0b04, 0x0b05, 0x0b05, 0x0b06, 0x0b07, 0x0b08, 0x0b09, - 0x0b0a, 0x0b0b, 0x0b0c, 0x0b0e, 0x0b0f, 0x0b10, 0x0b11, 0x0b13, - 0x0b14, 0x0b15, 0x0b17, 0x0b18, 0x0b1a, 0x0b1b, 0x0b1d, 0x0b1f, - 0x0b20, 0x0b20, 0x0b20, 0x0b20, 0x0b21, 0x0b21, 0x0b22, 0x0b22, - 0x0b23, 0x0b24, 0x0b25, 0x0b25, 0x0b26, 0x0b27, 0x0b28, 0x0b29, - 0x0b2a, 0x0b2b, 0x0b2c, 0x0b2e, 0x0b2f, 0x0b30, 0x0b31, 0x0b33, - 0x0b34, 0x0b35, 0x0b37, 0x0b38, 0x0b3a, 0x0b3b, 0x0b3d, 0x0b3f, - 0x0b40, 0x0b40, 0x0b40, 0x0b40, 0x0b41, 0x0b41, 0x0b42, 0x0b42, - 0x0b43, 0x0b44, 0x0b45, 0x0b45, 0x0b46, 0x0b47, 0x0b48, 0x0b49, - 0x0b4a, 0x0b4b, 0x0b4c, 0x0b4e, 0x0b4f, 0x0b50, 0x0b51, 0x0b53, - 0x0b54, 0x0b55, 0x0b57, 0x0b58, 0x0b5a, 0x0b5b, 0x0b5d, 0x0b5f, - 0x0b80, 0x0b80, 0x0b80, 0x0b80, 0x0b81, 0x0b81, 0x0b82, 0x0b82, - 0x0b83, 0x0b84, 0x0b85, 0x0b85, 0x0b86, 0x0b87, 0x0b88, 0x0b89, - 0x0b8a, 0x0b8b, 0x0b8c, 0x0b8e, 0x0b8f, 0x0b90, 0x0b91, 0x0b93, - 0x0b94, 0x0b95, 0x0b97, 0x0b98, 0x0b9a, 0x0b9b, 0x0b9d, 0x0b9f, - 0x0ba0, 0x0ba0, 0x0ba0, 0x0ba0, 0x0ba1, 0x0ba1, 0x0ba2, 0x0ba2, - 0x0ba3, 0x0ba4, 0x0ba5, 0x0ba5, 0x0ba6, 0x0ba7, 0x0ba8, 0x0ba9, - 0x0baa, 0x0bab, 0x0bac, 0x0bae, 0x0baf, 0x0bb0, 0x0bb1, 0x0bb3, - 0x0bb4, 0x0bb5, 0x0bb7, 0x0bb8, 0x0bba, 0x0bbb, 0x0bbd, 0x0bbf, - 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc0, 0x0bc1, 0x0bc1, 0x0bc2, 0x0bc2, - 0x0bc3, 0x0bc4, 0x0bc5, 0x0bc5, 0x0bc6, 0x0bc7, 0x0bc8, 0x0bc9, - 0x0bca, 0x0bcb, 0x0bcc, 0x0bce, 0x0bcf, 0x0bd0, 0x0bd1, 0x0bd3, - 0x0bd4, 0x0bd5, 0x0bd7, 0x0bd8, 0x0bda, 0x0bdb, 0x0bdd, 0x0bdf, - 0x0be0, 0x0be0, 0x0be0, 0x0be0, 0x0be1, 0x0be1, 0x0be2, 0x0be2, - 0x0be3, 0x0be4, 0x0be5, 0x0be5, 0x0be6, 0x0be7, 0x0be8, 0x0be9, - 0x0bea, 0x0beb, 0x0bec, 0x0bee, 0x0bef, 0x0bf0, 0x0bf1, 0x0bf3, - 0x0bf4, 0x0bf5, 0x0bf7, 0x0bf8, 0x0bfa, 0x0bfb, 0x0bfd, 0x0bff, - 0x0c00, 0x0c00, 0x0c00, 0x0c00, 0x0c01, 0x0c01, 0x0c02, 0x0c02, - 0x0c03, 0x0c04, 0x0c05, 0x0c05, 0x0c06, 0x0c07, 0x0c08, 0x0c09, - 0x0c0a, 0x0c0b, 0x0c0c, 0x0c0e, 0x0c0f, 0x0c10, 0x0c11, 0x0c13, - 0x0c14, 0x0c15, 0x0c17, 0x0c18, 0x0c1a, 0x0c1b, 0x0c1d, 0x0c1f, - 0x0c40, 0x0c40, 0x0c40, 0x0c40, 0x0c41, 0x0c41, 0x0c42, 0x0c42, - 0x0c43, 0x0c44, 0x0c45, 0x0c45, 0x0c46, 0x0c47, 0x0c48, 0x0c49, - 0x0c4a, 0x0c4b, 0x0c4c, 0x0c4e, 0x0c4f, 0x0c50, 0x0c51, 0x0c53, - 0x0c54, 0x0c55, 0x0c57, 0x0c58, 0x0c5a, 0x0c5b, 0x0c5d, 0x0c5f, - 0x0c60, 0x0c60, 0x0c60, 0x0c60, 0x0c61, 0x0c61, 0x0c62, 0x0c62, - 0x0c63, 0x0c64, 0x0c65, 0x0c65, 0x0c66, 0x0c67, 0x0c68, 0x0c69, - 0x0c6a, 0x0c6b, 0x0c6c, 0x0c6e, 0x0c6f, 0x0c70, 0x0c71, 0x0c73, - 0x0c74, 0x0c75, 0x0c77, 0x0c78, 0x0c7a, 0x0c7b, 0x0c7d, 0x0c7f, - 0x0c80, 0x0c80, 0x0c80, 0x0c80, 0x0c81, 0x0c81, 0x0c82, 0x0c82, - 0x0c83, 0x0c84, 0x0c85, 0x0c85, 0x0c86, 0x0c87, 0x0c88, 0x0c89, - 0x0c8a, 0x0c8b, 0x0c8c, 0x0c8e, 0x0c8f, 0x0c90, 0x0c91, 0x0c93, - 0x0c94, 0x0c95, 0x0c97, 0x0c98, 0x0c9a, 0x0c9b, 0x0c9d, 0x0c9f, - 0x0cc0, 0x0cc0, 0x0cc0, 0x0cc0, 0x0cc1, 0x0cc1, 0x0cc2, 0x0cc2, - 0x0cc3, 0x0cc4, 0x0cc5, 0x0cc5, 0x0cc6, 0x0cc7, 0x0cc8, 0x0cc9, - 0x0cca, 0x0ccb, 0x0ccc, 0x0cce, 0x0ccf, 0x0cd0, 0x0cd1, 0x0cd3, - 0x0cd4, 0x0cd5, 0x0cd7, 0x0cd8, 0x0cda, 0x0cdb, 0x0cdd, 0x0cdf, - 0x0ce0, 0x0ce0, 0x0ce0, 0x0ce0, 0x0ce1, 0x0ce1, 0x0ce2, 0x0ce2, - 0x0ce3, 0x0ce4, 0x0ce5, 0x0ce5, 0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, - 0x0cea, 0x0ceb, 0x0cec, 0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf3, - 0x0cf4, 0x0cf5, 0x0cf7, 0x0cf8, 0x0cfa, 0x0cfb, 0x0cfd, 0x0cff, - 0x0d00, 0x0d00, 0x0d00, 0x0d00, 0x0d01, 0x0d01, 0x0d02, 0x0d02, - 0x0d03, 0x0d04, 0x0d05, 0x0d05, 0x0d06, 0x0d07, 0x0d08, 0x0d09, - 0x0d0a, 0x0d0b, 0x0d0c, 0x0d0e, 0x0d0f, 0x0d10, 0x0d11, 0x0d13, - 0x0d14, 0x0d15, 0x0d17, 0x0d18, 0x0d1a, 0x0d1b, 0x0d1d, 0x0d1f, - 0x0d40, 0x0d40, 0x0d40, 0x0d40, 0x0d41, 0x0d41, 0x0d42, 0x0d42, - 0x0d43, 0x0d44, 0x0d45, 0x0d45, 0x0d46, 0x0d47, 0x0d48, 0x0d49, - 0x0d4a, 0x0d4b, 0x0d4c, 0x0d4e, 0x0d4f, 0x0d50, 0x0d51, 0x0d53, - 0x0d54, 0x0d55, 0x0d57, 0x0d58, 0x0d5a, 0x0d5b, 0x0d5d, 0x0d5f, - 0x0d60, 0x0d60, 0x0d60, 0x0d60, 0x0d61, 0x0d61, 0x0d62, 0x0d62, - 0x0d63, 0x0d64, 0x0d65, 0x0d65, 0x0d66, 0x0d67, 0x0d68, 0x0d69, - 0x0d6a, 0x0d6b, 0x0d6c, 0x0d6e, 0x0d6f, 0x0d70, 0x0d71, 0x0d73, - 0x0d74, 0x0d75, 0x0d77, 0x0d78, 0x0d7a, 0x0d7b, 0x0d7d, 0x0d7f, - 0x0d80, 0x0d80, 0x0d80, 0x0d80, 0x0d81, 0x0d81, 0x0d82, 0x0d82, - 0x0d83, 0x0d84, 0x0d85, 0x0d85, 0x0d86, 0x0d87, 0x0d88, 0x0d89, - 0x0d8a, 0x0d8b, 0x0d8c, 0x0d8e, 0x0d8f, 0x0d90, 0x0d91, 0x0d93, - 0x0d94, 0x0d95, 0x0d97, 0x0d98, 0x0d9a, 0x0d9b, 0x0d9d, 0x0d9f, - 0x0dc0, 0x0dc0, 0x0dc0, 0x0dc0, 0x0dc1, 0x0dc1, 0x0dc2, 0x0dc2, - 0x0dc3, 0x0dc4, 0x0dc5, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, - 0x0dca, 0x0dcb, 0x0dcc, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd3, - 0x0dd4, 0x0dd5, 0x0dd7, 0x0dd8, 0x0dda, 0x0ddb, 0x0ddd, 0x0ddf, - 0x0de0, 0x0de0, 0x0de0, 0x0de0, 0x0de1, 0x0de1, 0x0de2, 0x0de2, - 0x0de3, 0x0de4, 0x0de5, 0x0de5, 0x0de6, 0x0de7, 0x0de8, 0x0de9, - 0x0dea, 0x0deb, 0x0dec, 0x0dee, 0x0def, 0x0df0, 0x0df1, 0x0df3, - 0x0df4, 0x0df5, 0x0df7, 0x0df8, 0x0dfa, 0x0dfb, 0x0dfd, 0x0dff, - 0x0e20, 0x0e20, 0x0e20, 0x0e20, 0x0e21, 0x0e21, 0x0e22, 0x0e22, - 0x0e23, 0x0e24, 0x0e25, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, - 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e33, - 0x0e34, 0x0e35, 0x0e37, 0x0e38, 0x0e3a, 0x0e3b, 0x0e3d, 0x0e3f, - 0x0e40, 0x0e40, 0x0e40, 0x0e40, 0x0e41, 0x0e41, 0x0e42, 0x0e42, - 0x0e43, 0x0e44, 0x0e45, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, - 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4e, 0x0e4f, 0x0e50, 0x0e51, 0x0e53, - 0x0e54, 0x0e55, 0x0e57, 0x0e58, 0x0e5a, 0x0e5b, 0x0e5d, 0x0e5f, - 0x0e80, 0x0e80, 0x0e80, 0x0e80, 0x0e81, 0x0e81, 0x0e82, 0x0e82, - 0x0e83, 0x0e84, 0x0e85, 0x0e85, 0x0e86, 0x0e87, 0x0e88, 0x0e89, - 0x0e8a, 0x0e8b, 0x0e8c, 0x0e8e, 0x0e8f, 0x0e90, 0x0e91, 0x0e93, - 0x0e94, 0x0e95, 0x0e97, 0x0e98, 0x0e9a, 0x0e9b, 0x0e9d, 0x0e9f, - 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea0, 0x0ea1, 0x0ea1, 0x0ea2, 0x0ea2, - 0x0ea3, 0x0ea4, 0x0ea5, 0x0ea5, 0x0ea6, 0x0ea7, 0x0ea8, 0x0ea9, - 0x0eaa, 0x0eab, 0x0eac, 0x0eae, 0x0eaf, 0x0eb0, 0x0eb1, 0x0eb3, - 0x0eb4, 0x0eb5, 0x0eb7, 0x0eb8, 0x0eba, 0x0ebb, 0x0ebd, 0x0ebf, - 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee0, 0x0ee1, 0x0ee1, 0x0ee2, 0x0ee2, - 0x0ee3, 0x0ee4, 0x0ee5, 0x0ee5, 0x0ee6, 0x0ee7, 0x0ee8, 0x0ee9, - 0x0eea, 0x0eeb, 0x0eec, 0x0eee, 0x0eef, 0x0ef0, 0x0ef1, 0x0ef3, - 0x0ef4, 0x0ef5, 0x0ef7, 0x0ef8, 0x0efa, 0x0efb, 0x0efd, 0x0eff, - 0x0f00, 0x0f00, 0x0f00, 0x0f00, 0x0f01, 0x0f01, 0x0f02, 0x0f02, - 0x0f03, 0x0f04, 0x0f05, 0x0f05, 0x0f06, 0x0f07, 0x0f08, 0x0f09, - 0x0f0a, 0x0f0b, 0x0f0c, 0x0f0e, 0x0f0f, 0x0f10, 0x0f11, 0x0f13, - 0x0f14, 0x0f15, 0x0f17, 0x0f18, 0x0f1a, 0x0f1b, 0x0f1d, 0x0f1f, - 0x0f40, 0x0f40, 0x0f40, 0x0f40, 0x0f41, 0x0f41, 0x0f42, 0x0f42, - 0x0f43, 0x0f44, 0x0f45, 0x0f45, 0x0f46, 0x0f47, 0x0f48, 0x0f49, - 0x0f4a, 0x0f4b, 0x0f4c, 0x0f4e, 0x0f4f, 0x0f50, 0x0f51, 0x0f53, - 0x0f54, 0x0f55, 0x0f57, 0x0f58, 0x0f5a, 0x0f5b, 0x0f5d, 0x0f5f, - 0x0f60, 0x0f60, 0x0f60, 0x0f60, 0x0f61, 0x0f61, 0x0f62, 0x0f62, - 0x0f63, 0x0f64, 0x0f65, 0x0f65, 0x0f66, 0x0f67, 0x0f68, 0x0f69, - 0x0f6a, 0x0f6b, 0x0f6c, 0x0f6e, 0x0f6f, 0x0f70, 0x0f71, 0x0f73, - 0x0f74, 0x0f75, 0x0f77, 0x0f78, 0x0f7a, 0x0f7b, 0x0f7d, 0x0f7f, - 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa0, 0x0fa1, 0x0fa1, 0x0fa2, 0x0fa2, - 0x0fa3, 0x0fa4, 0x0fa5, 0x0fa5, 0x0fa6, 0x0fa7, 0x0fa8, 0x0fa9, - 0x0faa, 0x0fab, 0x0fac, 0x0fae, 0x0faf, 0x0fb0, 0x0fb1, 0x0fb3, - 0x0fb4, 0x0fb5, 0x0fb7, 0x0fb8, 0x0fba, 0x0fbb, 0x0fbd, 0x0fbf, - 0x0fe0, 0x0fe0, 0x0fe0, 0x0fe0, 0x0fe1, 0x0fe1, 0x0fe2, 0x0fe2, - 0x0fe3, 0x0fe4, 0x0fe5, 0x0fe5, 0x0fe6, 0x0fe7, 0x0fe8, 0x0fe9, - 0x0fea, 0x0feb, 0x0fec, 0x0fee, 0x0fef, 0x0ff0, 0x0ff1, 0x0ff3, - 0x0ff4, 0x0ff5, 0x0ff7, 0x0ff8, 0x0ffa, 0x0ffb, 0x0ffd, 0x0fff, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1020, 0x1020, 0x1020, 0x1020, 0x1021, 0x1021, 0x1022, 0x1022, - 0x1023, 0x1024, 0x1025, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, - 0x102a, 0x102b, 0x102c, 0x102e, 0x102f, 0x1030, 0x1031, 0x1033, - 0x1034, 0x1035, 0x1037, 0x1038, 0x103a, 0x103b, 0x103d, 0x103f, - 0x1020, 0x1020, 0x1020, 0x1020, 0x1021, 0x1021, 0x1022, 0x1022, - 0x1023, 0x1024, 0x1025, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, - 0x102a, 0x102b, 0x102c, 0x102e, 0x102f, 0x1030, 0x1031, 0x1033, - 0x1034, 0x1035, 0x1037, 0x1038, 0x103a, 0x103b, 0x103d, 0x103f, - 0x1020, 0x1020, 0x1020, 0x1020, 0x1021, 0x1021, 0x1022, 0x1022, - 0x1023, 0x1024, 0x1025, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, - 0x102a, 0x102b, 0x102c, 0x102e, 0x102f, 0x1030, 0x1031, 0x1033, - 0x1034, 0x1035, 0x1037, 0x1038, 0x103a, 0x103b, 0x103d, 0x103f, - 0x1040, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1042, 0x1042, - 0x1043, 0x1044, 0x1045, 0x1045, 0x1046, 0x1047, 0x1048, 0x1049, - 0x104a, 0x104b, 0x104c, 0x104e, 0x104f, 0x1050, 0x1051, 0x1053, - 0x1054, 0x1055, 0x1057, 0x1058, 0x105a, 0x105b, 0x105d, 0x105f, - 0x1040, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1042, 0x1042, - 0x1043, 0x1044, 0x1045, 0x1045, 0x1046, 0x1047, 0x1048, 0x1049, - 0x104a, 0x104b, 0x104c, 0x104e, 0x104f, 0x1050, 0x1051, 0x1053, - 0x1054, 0x1055, 0x1057, 0x1058, 0x105a, 0x105b, 0x105d, 0x105f, - 0x1060, 0x1060, 0x1060, 0x1060, 0x1061, 0x1061, 0x1062, 0x1062, - 0x1063, 0x1064, 0x1065, 0x1065, 0x1066, 0x1067, 0x1068, 0x1069, - 0x106a, 0x106b, 0x106c, 0x106e, 0x106f, 0x1070, 0x1071, 0x1073, - 0x1074, 0x1075, 0x1077, 0x1078, 0x107a, 0x107b, 0x107d, 0x107f, - 0x1060, 0x1060, 0x1060, 0x1060, 0x1061, 0x1061, 0x1062, 0x1062, - 0x1063, 0x1064, 0x1065, 0x1065, 0x1066, 0x1067, 0x1068, 0x1069, - 0x106a, 0x106b, 0x106c, 0x106e, 0x106f, 0x1070, 0x1071, 0x1073, - 0x1074, 0x1075, 0x1077, 0x1078, 0x107a, 0x107b, 0x107d, 0x107f, - 0x1080, 0x1080, 0x1080, 0x1080, 0x1081, 0x1081, 0x1082, 0x1082, - 0x1083, 0x1084, 0x1085, 0x1085, 0x1086, 0x1087, 0x1088, 0x1089, - 0x108a, 0x108b, 0x108c, 0x108e, 0x108f, 0x1090, 0x1091, 0x1093, - 0x1094, 0x1095, 0x1097, 0x1098, 0x109a, 0x109b, 0x109d, 0x109f, - 0x10a0, 0x10a0, 0x10a0, 0x10a0, 0x10a1, 0x10a1, 0x10a2, 0x10a2, - 0x10a3, 0x10a4, 0x10a5, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, - 0x10aa, 0x10ab, 0x10ac, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b3, - 0x10b4, 0x10b5, 0x10b7, 0x10b8, 0x10ba, 0x10bb, 0x10bd, 0x10bf, - 0x10a0, 0x10a0, 0x10a0, 0x10a0, 0x10a1, 0x10a1, 0x10a2, 0x10a2, - 0x10a3, 0x10a4, 0x10a5, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, - 0x10aa, 0x10ab, 0x10ac, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b3, - 0x10b4, 0x10b5, 0x10b7, 0x10b8, 0x10ba, 0x10bb, 0x10bd, 0x10bf, - 0x10c0, 0x10c0, 0x10c0, 0x10c0, 0x10c1, 0x10c1, 0x10c2, 0x10c2, - 0x10c3, 0x10c4, 0x10c5, 0x10c5, 0x10c6, 0x10c7, 0x10c8, 0x10c9, - 0x10ca, 0x10cb, 0x10cc, 0x10ce, 0x10cf, 0x10d0, 0x10d1, 0x10d3, - 0x10d4, 0x10d5, 0x10d7, 0x10d8, 0x10da, 0x10db, 0x10dd, 0x10df, - 0x10e0, 0x10e0, 0x10e0, 0x10e0, 0x10e1, 0x10e1, 0x10e2, 0x10e2, - 0x10e3, 0x10e4, 0x10e5, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, - 0x10ea, 0x10eb, 0x10ec, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f3, - 0x10f4, 0x10f5, 0x10f7, 0x10f8, 0x10fa, 0x10fb, 0x10fd, 0x10ff, - 0x10e0, 0x10e0, 0x10e0, 0x10e0, 0x10e1, 0x10e1, 0x10e2, 0x10e2, - 0x10e3, 0x10e4, 0x10e5, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, - 0x10ea, 0x10eb, 0x10ec, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f3, - 0x10f4, 0x10f5, 0x10f7, 0x10f8, 0x10fa, 0x10fb, 0x10fd, 0x10ff, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1101, 0x1101, 0x1102, 0x1102, - 0x1103, 0x1104, 0x1105, 0x1105, 0x1106, 0x1107, 0x1108, 0x1109, - 0x110a, 0x110b, 0x110c, 0x110e, 0x110f, 0x1110, 0x1111, 0x1113, - 0x1114, 0x1115, 0x1117, 0x1118, 0x111a, 0x111b, 0x111d, 0x111f, - 0x1120, 0x1120, 0x1120, 0x1120, 0x1121, 0x1121, 0x1122, 0x1122, - 0x1123, 0x1124, 0x1125, 0x1125, 0x1126, 0x1127, 0x1128, 0x1129, - 0x112a, 0x112b, 0x112c, 0x112e, 0x112f, 0x1130, 0x1131, 0x1133, - 0x1134, 0x1135, 0x1137, 0x1138, 0x113a, 0x113b, 0x113d, 0x113f, - 0x1140, 0x1140, 0x1140, 0x1140, 0x1141, 0x1141, 0x1142, 0x1142, - 0x1143, 0x1144, 0x1145, 0x1145, 0x1146, 0x1147, 0x1148, 0x1149, - 0x114a, 0x114b, 0x114c, 0x114e, 0x114f, 0x1150, 0x1151, 0x1153, - 0x1154, 0x1155, 0x1157, 0x1158, 0x115a, 0x115b, 0x115d, 0x115f, - 0x1140, 0x1140, 0x1140, 0x1140, 0x1141, 0x1141, 0x1142, 0x1142, - 0x1143, 0x1144, 0x1145, 0x1145, 0x1146, 0x1147, 0x1148, 0x1149, - 0x114a, 0x114b, 0x114c, 0x114e, 0x114f, 0x1150, 0x1151, 0x1153, - 0x1154, 0x1155, 0x1157, 0x1158, 0x115a, 0x115b, 0x115d, 0x115f, - 0x1160, 0x1160, 0x1160, 0x1160, 0x1161, 0x1161, 0x1162, 0x1162, - 0x1163, 0x1164, 0x1165, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, - 0x116a, 0x116b, 0x116c, 0x116e, 0x116f, 0x1170, 0x1171, 0x1173, - 0x1174, 0x1175, 0x1177, 0x1178, 0x117a, 0x117b, 0x117d, 0x117f, - 0x1180, 0x1180, 0x1180, 0x1180, 0x1181, 0x1181, 0x1182, 0x1182, - 0x1183, 0x1184, 0x1185, 0x1185, 0x1186, 0x1187, 0x1188, 0x1189, - 0x118a, 0x118b, 0x118c, 0x118e, 0x118f, 0x1190, 0x1191, 0x1193, - 0x1194, 0x1195, 0x1197, 0x1198, 0x119a, 0x119b, 0x119d, 0x119f, - 0x11a0, 0x11a0, 0x11a0, 0x11a0, 0x11a1, 0x11a1, 0x11a2, 0x11a2, - 0x11a3, 0x11a4, 0x11a5, 0x11a5, 0x11a6, 0x11a7, 0x11a8, 0x11a9, - 0x11aa, 0x11ab, 0x11ac, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b3, - 0x11b4, 0x11b5, 0x11b7, 0x11b8, 0x11ba, 0x11bb, 0x11bd, 0x11bf, - 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c1, 0x11c1, 0x11c2, 0x11c2, - 0x11c3, 0x11c4, 0x11c5, 0x11c5, 0x11c6, 0x11c7, 0x11c8, 0x11c9, - 0x11ca, 0x11cb, 0x11cc, 0x11ce, 0x11cf, 0x11d0, 0x11d1, 0x11d3, - 0x11d4, 0x11d5, 0x11d7, 0x11d8, 0x11da, 0x11db, 0x11dd, 0x11df, - 0x11e0, 0x11e0, 0x11e0, 0x11e0, 0x11e1, 0x11e1, 0x11e2, 0x11e2, - 0x11e3, 0x11e4, 0x11e5, 0x11e5, 0x11e6, 0x11e7, 0x11e8, 0x11e9, - 0x11ea, 0x11eb, 0x11ec, 0x11ee, 0x11ef, 0x11f0, 0x11f1, 0x11f3, - 0x11f4, 0x11f5, 0x11f7, 0x11f8, 0x11fa, 0x11fb, 0x11fd, 0x11ff, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1201, 0x1201, 0x1202, 0x1202, - 0x1203, 0x1204, 0x1205, 0x1205, 0x1206, 0x1207, 0x1208, 0x1209, - 0x120a, 0x120b, 0x120c, 0x120e, 0x120f, 0x1210, 0x1211, 0x1213, - 0x1214, 0x1215, 0x1217, 0x1218, 0x121a, 0x121b, 0x121d, 0x121f, - 0x1220, 0x1220, 0x1220, 0x1220, 0x1221, 0x1221, 0x1222, 0x1222, - 0x1223, 0x1224, 0x1225, 0x1225, 0x1226, 0x1227, 0x1228, 0x1229, - 0x122a, 0x122b, 0x122c, 0x122e, 0x122f, 0x1230, 0x1231, 0x1233, - 0x1234, 0x1235, 0x1237, 0x1238, 0x123a, 0x123b, 0x123d, 0x123f, - 0x1240, 0x1240, 0x1240, 0x1240, 0x1241, 0x1241, 0x1242, 0x1242, - 0x1243, 0x1244, 0x1245, 0x1245, 0x1246, 0x1247, 0x1248, 0x1249, - 0x124a, 0x124b, 0x124c, 0x124e, 0x124f, 0x1250, 0x1251, 0x1253, - 0x1254, 0x1255, 0x1257, 0x1258, 0x125a, 0x125b, 0x125d, 0x125f, - 0x1260, 0x1260, 0x1260, 0x1260, 0x1261, 0x1261, 0x1262, 0x1262, - 0x1263, 0x1264, 0x1265, 0x1265, 0x1266, 0x1267, 0x1268, 0x1269, - 0x126a, 0x126b, 0x126c, 0x126e, 0x126f, 0x1270, 0x1271, 0x1273, - 0x1274, 0x1275, 0x1277, 0x1278, 0x127a, 0x127b, 0x127d, 0x127f, - 0x1280, 0x1280, 0x1280, 0x1280, 0x1281, 0x1281, 0x1282, 0x1282, - 0x1283, 0x1284, 0x1285, 0x1285, 0x1286, 0x1287, 0x1288, 0x1289, - 0x128a, 0x128b, 0x128c, 0x128e, 0x128f, 0x1290, 0x1291, 0x1293, - 0x1294, 0x1295, 0x1297, 0x1298, 0x129a, 0x129b, 0x129d, 0x129f, - 0x12a0, 0x12a0, 0x12a0, 0x12a0, 0x12a1, 0x12a1, 0x12a2, 0x12a2, - 0x12a3, 0x12a4, 0x12a5, 0x12a5, 0x12a6, 0x12a7, 0x12a8, 0x12a9, - 0x12aa, 0x12ab, 0x12ac, 0x12ae, 0x12af, 0x12b0, 0x12b1, 0x12b3, - 0x12b4, 0x12b5, 0x12b7, 0x12b8, 0x12ba, 0x12bb, 0x12bd, 0x12bf, - 0x12c0, 0x12c0, 0x12c0, 0x12c0, 0x12c1, 0x12c1, 0x12c2, 0x12c2, - 0x12c3, 0x12c4, 0x12c5, 0x12c5, 0x12c6, 0x12c7, 0x12c8, 0x12c9, - 0x12ca, 0x12cb, 0x12cc, 0x12ce, 0x12cf, 0x12d0, 0x12d1, 0x12d3, - 0x12d4, 0x12d5, 0x12d7, 0x12d8, 0x12da, 0x12db, 0x12dd, 0x12df, - 0x12e0, 0x12e0, 0x12e0, 0x12e0, 0x12e1, 0x12e1, 0x12e2, 0x12e2, - 0x12e3, 0x12e4, 0x12e5, 0x12e5, 0x12e6, 0x12e7, 0x12e8, 0x12e9, - 0x12ea, 0x12eb, 0x12ec, 0x12ee, 0x12ef, 0x12f0, 0x12f1, 0x12f3, - 0x12f4, 0x12f5, 0x12f7, 0x12f8, 0x12fa, 0x12fb, 0x12fd, 0x12ff, - 0x1300, 0x1300, 0x1300, 0x1300, 0x1301, 0x1301, 0x1302, 0x1302, - 0x1303, 0x1304, 0x1305, 0x1305, 0x1306, 0x1307, 0x1308, 0x1309, - 0x130a, 0x130b, 0x130c, 0x130e, 0x130f, 0x1310, 0x1311, 0x1313, - 0x1314, 0x1315, 0x1317, 0x1318, 0x131a, 0x131b, 0x131d, 0x131f, - 0x1320, 0x1320, 0x1320, 0x1320, 0x1321, 0x1321, 0x1322, 0x1322, - 0x1323, 0x1324, 0x1325, 0x1325, 0x1326, 0x1327, 0x1328, 0x1329, - 0x132a, 0x132b, 0x132c, 0x132e, 0x132f, 0x1330, 0x1331, 0x1333, - 0x1334, 0x1335, 0x1337, 0x1338, 0x133a, 0x133b, 0x133d, 0x133f, - 0x1340, 0x1340, 0x1340, 0x1340, 0x1341, 0x1341, 0x1342, 0x1342, - 0x1343, 0x1344, 0x1345, 0x1345, 0x1346, 0x1347, 0x1348, 0x1349, - 0x134a, 0x134b, 0x134c, 0x134e, 0x134f, 0x1350, 0x1351, 0x1353, - 0x1354, 0x1355, 0x1357, 0x1358, 0x135a, 0x135b, 0x135d, 0x135f, - 0x1380, 0x1380, 0x1380, 0x1380, 0x1381, 0x1381, 0x1382, 0x1382, - 0x1383, 0x1384, 0x1385, 0x1385, 0x1386, 0x1387, 0x1388, 0x1389, - 0x138a, 0x138b, 0x138c, 0x138e, 0x138f, 0x1390, 0x1391, 0x1393, - 0x1394, 0x1395, 0x1397, 0x1398, 0x139a, 0x139b, 0x139d, 0x139f, - 0x13a0, 0x13a0, 0x13a0, 0x13a0, 0x13a1, 0x13a1, 0x13a2, 0x13a2, - 0x13a3, 0x13a4, 0x13a5, 0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, - 0x13aa, 0x13ab, 0x13ac, 0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b3, - 0x13b4, 0x13b5, 0x13b7, 0x13b8, 0x13ba, 0x13bb, 0x13bd, 0x13bf, - 0x13c0, 0x13c0, 0x13c0, 0x13c0, 0x13c1, 0x13c1, 0x13c2, 0x13c2, - 0x13c3, 0x13c4, 0x13c5, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, - 0x13ca, 0x13cb, 0x13cc, 0x13ce, 0x13cf, 0x13d0, 0x13d1, 0x13d3, - 0x13d4, 0x13d5, 0x13d7, 0x13d8, 0x13da, 0x13db, 0x13dd, 0x13df, - 0x13e0, 0x13e0, 0x13e0, 0x13e0, 0x13e1, 0x13e1, 0x13e2, 0x13e2, - 0x13e3, 0x13e4, 0x13e5, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, - 0x13ea, 0x13eb, 0x13ec, 0x13ee, 0x13ef, 0x13f0, 0x13f1, 0x13f3, - 0x13f4, 0x13f5, 0x13f7, 0x13f8, 0x13fa, 0x13fb, 0x13fd, 0x13ff, - 0x1400, 0x1400, 0x1400, 0x1400, 0x1401, 0x1401, 0x1402, 0x1402, - 0x1403, 0x1404, 0x1405, 0x1405, 0x1406, 0x1407, 0x1408, 0x1409, - 0x140a, 0x140b, 0x140c, 0x140e, 0x140f, 0x1410, 0x1411, 0x1413, - 0x1414, 0x1415, 0x1417, 0x1418, 0x141a, 0x141b, 0x141d, 0x141f, - 0x1440, 0x1440, 0x1440, 0x1440, 0x1441, 0x1441, 0x1442, 0x1442, - 0x1443, 0x1444, 0x1445, 0x1445, 0x1446, 0x1447, 0x1448, 0x1449, - 0x144a, 0x144b, 0x144c, 0x144e, 0x144f, 0x1450, 0x1451, 0x1453, - 0x1454, 0x1455, 0x1457, 0x1458, 0x145a, 0x145b, 0x145d, 0x145f, - 0x1460, 0x1460, 0x1460, 0x1460, 0x1461, 0x1461, 0x1462, 0x1462, - 0x1463, 0x1464, 0x1465, 0x1465, 0x1466, 0x1467, 0x1468, 0x1469, - 0x146a, 0x146b, 0x146c, 0x146e, 0x146f, 0x1470, 0x1471, 0x1473, - 0x1474, 0x1475, 0x1477, 0x1478, 0x147a, 0x147b, 0x147d, 0x147f, - 0x1480, 0x1480, 0x1480, 0x1480, 0x1481, 0x1481, 0x1482, 0x1482, - 0x1483, 0x1484, 0x1485, 0x1485, 0x1486, 0x1487, 0x1488, 0x1489, - 0x148a, 0x148b, 0x148c, 0x148e, 0x148f, 0x1490, 0x1491, 0x1493, - 0x1494, 0x1495, 0x1497, 0x1498, 0x149a, 0x149b, 0x149d, 0x149f, - 0x14c0, 0x14c0, 0x14c0, 0x14c0, 0x14c1, 0x14c1, 0x14c2, 0x14c2, - 0x14c3, 0x14c4, 0x14c5, 0x14c5, 0x14c6, 0x14c7, 0x14c8, 0x14c9, - 0x14ca, 0x14cb, 0x14cc, 0x14ce, 0x14cf, 0x14d0, 0x14d1, 0x14d3, - 0x14d4, 0x14d5, 0x14d7, 0x14d8, 0x14da, 0x14db, 0x14dd, 0x14df, - 0x14e0, 0x14e0, 0x14e0, 0x14e0, 0x14e1, 0x14e1, 0x14e2, 0x14e2, - 0x14e3, 0x14e4, 0x14e5, 0x14e5, 0x14e6, 0x14e7, 0x14e8, 0x14e9, - 0x14ea, 0x14eb, 0x14ec, 0x14ee, 0x14ef, 0x14f0, 0x14f1, 0x14f3, - 0x14f4, 0x14f5, 0x14f7, 0x14f8, 0x14fa, 0x14fb, 0x14fd, 0x14ff, - 0x1500, 0x1500, 0x1500, 0x1500, 0x1501, 0x1501, 0x1502, 0x1502, - 0x1503, 0x1504, 0x1505, 0x1505, 0x1506, 0x1507, 0x1508, 0x1509, - 0x150a, 0x150b, 0x150c, 0x150e, 0x150f, 0x1510, 0x1511, 0x1513, - 0x1514, 0x1515, 0x1517, 0x1518, 0x151a, 0x151b, 0x151d, 0x151f, - 0x1540, 0x1540, 0x1540, 0x1540, 0x1541, 0x1541, 0x1542, 0x1542, - 0x1543, 0x1544, 0x1545, 0x1545, 0x1546, 0x1547, 0x1548, 0x1549, - 0x154a, 0x154b, 0x154c, 0x154e, 0x154f, 0x1550, 0x1551, 0x1553, - 0x1554, 0x1555, 0x1557, 0x1558, 0x155a, 0x155b, 0x155d, 0x155f, - 0x1560, 0x1560, 0x1560, 0x1560, 0x1561, 0x1561, 0x1562, 0x1562, - 0x1563, 0x1564, 0x1565, 0x1565, 0x1566, 0x1567, 0x1568, 0x1569, - 0x156a, 0x156b, 0x156c, 0x156e, 0x156f, 0x1570, 0x1571, 0x1573, - 0x1574, 0x1575, 0x1577, 0x1578, 0x157a, 0x157b, 0x157d, 0x157f, - 0x1580, 0x1580, 0x1580, 0x1580, 0x1581, 0x1581, 0x1582, 0x1582, - 0x1583, 0x1584, 0x1585, 0x1585, 0x1586, 0x1587, 0x1588, 0x1589, - 0x158a, 0x158b, 0x158c, 0x158e, 0x158f, 0x1590, 0x1591, 0x1593, - 0x1594, 0x1595, 0x1597, 0x1598, 0x159a, 0x159b, 0x159d, 0x159f, - 0x15c0, 0x15c0, 0x15c0, 0x15c0, 0x15c1, 0x15c1, 0x15c2, 0x15c2, - 0x15c3, 0x15c4, 0x15c5, 0x15c5, 0x15c6, 0x15c7, 0x15c8, 0x15c9, - 0x15ca, 0x15cb, 0x15cc, 0x15ce, 0x15cf, 0x15d0, 0x15d1, 0x15d3, - 0x15d4, 0x15d5, 0x15d7, 0x15d8, 0x15da, 0x15db, 0x15dd, 0x15df, - 0x15e0, 0x15e0, 0x15e0, 0x15e0, 0x15e1, 0x15e1, 0x15e2, 0x15e2, - 0x15e3, 0x15e4, 0x15e5, 0x15e5, 0x15e6, 0x15e7, 0x15e8, 0x15e9, - 0x15ea, 0x15eb, 0x15ec, 0x15ee, 0x15ef, 0x15f0, 0x15f1, 0x15f3, - 0x15f4, 0x15f5, 0x15f7, 0x15f8, 0x15fa, 0x15fb, 0x15fd, 0x15ff, - 0x1620, 0x1620, 0x1620, 0x1620, 0x1621, 0x1621, 0x1622, 0x1622, - 0x1623, 0x1624, 0x1625, 0x1625, 0x1626, 0x1627, 0x1628, 0x1629, - 0x162a, 0x162b, 0x162c, 0x162e, 0x162f, 0x1630, 0x1631, 0x1633, - 0x1634, 0x1635, 0x1637, 0x1638, 0x163a, 0x163b, 0x163d, 0x163f, - 0x1640, 0x1640, 0x1640, 0x1640, 0x1641, 0x1641, 0x1642, 0x1642, - 0x1643, 0x1644, 0x1645, 0x1645, 0x1646, 0x1647, 0x1648, 0x1649, - 0x164a, 0x164b, 0x164c, 0x164e, 0x164f, 0x1650, 0x1651, 0x1653, - 0x1654, 0x1655, 0x1657, 0x1658, 0x165a, 0x165b, 0x165d, 0x165f, - 0x1680, 0x1680, 0x1680, 0x1680, 0x1681, 0x1681, 0x1682, 0x1682, - 0x1683, 0x1684, 0x1685, 0x1685, 0x1686, 0x1687, 0x1688, 0x1689, - 0x168a, 0x168b, 0x168c, 0x168e, 0x168f, 0x1690, 0x1691, 0x1693, - 0x1694, 0x1695, 0x1697, 0x1698, 0x169a, 0x169b, 0x169d, 0x169f, - 0x16a0, 0x16a0, 0x16a0, 0x16a0, 0x16a1, 0x16a1, 0x16a2, 0x16a2, - 0x16a3, 0x16a4, 0x16a5, 0x16a5, 0x16a6, 0x16a7, 0x16a8, 0x16a9, - 0x16aa, 0x16ab, 0x16ac, 0x16ae, 0x16af, 0x16b0, 0x16b1, 0x16b3, - 0x16b4, 0x16b5, 0x16b7, 0x16b8, 0x16ba, 0x16bb, 0x16bd, 0x16bf, - 0x16e0, 0x16e0, 0x16e0, 0x16e0, 0x16e1, 0x16e1, 0x16e2, 0x16e2, - 0x16e3, 0x16e4, 0x16e5, 0x16e5, 0x16e6, 0x16e7, 0x16e8, 0x16e9, - 0x16ea, 0x16eb, 0x16ec, 0x16ee, 0x16ef, 0x16f0, 0x16f1, 0x16f3, - 0x16f4, 0x16f5, 0x16f7, 0x16f8, 0x16fa, 0x16fb, 0x16fd, 0x16ff, - 0x1700, 0x1700, 0x1700, 0x1700, 0x1701, 0x1701, 0x1702, 0x1702, - 0x1703, 0x1704, 0x1705, 0x1705, 0x1706, 0x1707, 0x1708, 0x1709, - 0x170a, 0x170b, 0x170c, 0x170e, 0x170f, 0x1710, 0x1711, 0x1713, - 0x1714, 0x1715, 0x1717, 0x1718, 0x171a, 0x171b, 0x171d, 0x171f, - 0x1740, 0x1740, 0x1740, 0x1740, 0x1741, 0x1741, 0x1742, 0x1742, - 0x1743, 0x1744, 0x1745, 0x1745, 0x1746, 0x1747, 0x1748, 0x1749, - 0x174a, 0x174b, 0x174c, 0x174e, 0x174f, 0x1750, 0x1751, 0x1753, - 0x1754, 0x1755, 0x1757, 0x1758, 0x175a, 0x175b, 0x175d, 0x175f, - 0x1760, 0x1760, 0x1760, 0x1760, 0x1761, 0x1761, 0x1762, 0x1762, - 0x1763, 0x1764, 0x1765, 0x1765, 0x1766, 0x1767, 0x1768, 0x1769, - 0x176a, 0x176b, 0x176c, 0x176e, 0x176f, 0x1770, 0x1771, 0x1773, - 0x1774, 0x1775, 0x1777, 0x1778, 0x177a, 0x177b, 0x177d, 0x177f, - 0x17a0, 0x17a0, 0x17a0, 0x17a0, 0x17a1, 0x17a1, 0x17a2, 0x17a2, - 0x17a3, 0x17a4, 0x17a5, 0x17a5, 0x17a6, 0x17a7, 0x17a8, 0x17a9, - 0x17aa, 0x17ab, 0x17ac, 0x17ae, 0x17af, 0x17b0, 0x17b1, 0x17b3, - 0x17b4, 0x17b5, 0x17b7, 0x17b8, 0x17ba, 0x17bb, 0x17bd, 0x17bf, - 0x17e0, 0x17e0, 0x17e0, 0x17e0, 0x17e1, 0x17e1, 0x17e2, 0x17e2, - 0x17e3, 0x17e4, 0x17e5, 0x17e5, 0x17e6, 0x17e7, 0x17e8, 0x17e9, - 0x17ea, 0x17eb, 0x17ec, 0x17ee, 0x17ef, 0x17f0, 0x17f1, 0x17f3, - 0x17f4, 0x17f5, 0x17f7, 0x17f8, 0x17fa, 0x17fb, 0x17fd, 0x17ff, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1000, 0x1000, 0x1000, 0x1000, 0x1001, 0x1001, 0x1002, 0x1002, - 0x1003, 0x1004, 0x1005, 0x1005, 0x1006, 0x1007, 0x1008, 0x1009, - 0x100a, 0x100b, 0x100c, 0x100e, 0x100f, 0x1010, 0x1011, 0x1013, - 0x1014, 0x1015, 0x1017, 0x1018, 0x101a, 0x101b, 0x101d, 0x101f, - 0x1020, 0x1020, 0x1020, 0x1020, 0x1021, 0x1021, 0x1022, 0x1022, - 0x1023, 0x1024, 0x1025, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, - 0x102a, 0x102b, 0x102c, 0x102e, 0x102f, 0x1030, 0x1031, 0x1033, - 0x1034, 0x1035, 0x1037, 0x1038, 0x103a, 0x103b, 0x103d, 0x103f, - 0x1020, 0x1020, 0x1020, 0x1020, 0x1021, 0x1021, 0x1022, 0x1022, - 0x1023, 0x1024, 0x1025, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, - 0x102a, 0x102b, 0x102c, 0x102e, 0x102f, 0x1030, 0x1031, 0x1033, - 0x1034, 0x1035, 0x1037, 0x1038, 0x103a, 0x103b, 0x103d, 0x103f, - 0x1020, 0x1020, 0x1020, 0x1020, 0x1021, 0x1021, 0x1022, 0x1022, - 0x1023, 0x1024, 0x1025, 0x1025, 0x1026, 0x1027, 0x1028, 0x1029, - 0x102a, 0x102b, 0x102c, 0x102e, 0x102f, 0x1030, 0x1031, 0x1033, - 0x1034, 0x1035, 0x1037, 0x1038, 0x103a, 0x103b, 0x103d, 0x103f, - 0x1040, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1042, 0x1042, - 0x1043, 0x1044, 0x1045, 0x1045, 0x1046, 0x1047, 0x1048, 0x1049, - 0x104a, 0x104b, 0x104c, 0x104e, 0x104f, 0x1050, 0x1051, 0x1053, - 0x1054, 0x1055, 0x1057, 0x1058, 0x105a, 0x105b, 0x105d, 0x105f, - 0x1040, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1042, 0x1042, - 0x1043, 0x1044, 0x1045, 0x1045, 0x1046, 0x1047, 0x1048, 0x1049, - 0x104a, 0x104b, 0x104c, 0x104e, 0x104f, 0x1050, 0x1051, 0x1053, - 0x1054, 0x1055, 0x1057, 0x1058, 0x105a, 0x105b, 0x105d, 0x105f, - 0x1060, 0x1060, 0x1060, 0x1060, 0x1061, 0x1061, 0x1062, 0x1062, - 0x1063, 0x1064, 0x1065, 0x1065, 0x1066, 0x1067, 0x1068, 0x1069, - 0x106a, 0x106b, 0x106c, 0x106e, 0x106f, 0x1070, 0x1071, 0x1073, - 0x1074, 0x1075, 0x1077, 0x1078, 0x107a, 0x107b, 0x107d, 0x107f, - 0x1060, 0x1060, 0x1060, 0x1060, 0x1061, 0x1061, 0x1062, 0x1062, - 0x1063, 0x1064, 0x1065, 0x1065, 0x1066, 0x1067, 0x1068, 0x1069, - 0x106a, 0x106b, 0x106c, 0x106e, 0x106f, 0x1070, 0x1071, 0x1073, - 0x1074, 0x1075, 0x1077, 0x1078, 0x107a, 0x107b, 0x107d, 0x107f, - 0x1080, 0x1080, 0x1080, 0x1080, 0x1081, 0x1081, 0x1082, 0x1082, - 0x1083, 0x1084, 0x1085, 0x1085, 0x1086, 0x1087, 0x1088, 0x1089, - 0x108a, 0x108b, 0x108c, 0x108e, 0x108f, 0x1090, 0x1091, 0x1093, - 0x1094, 0x1095, 0x1097, 0x1098, 0x109a, 0x109b, 0x109d, 0x109f, - 0x10a0, 0x10a0, 0x10a0, 0x10a0, 0x10a1, 0x10a1, 0x10a2, 0x10a2, - 0x10a3, 0x10a4, 0x10a5, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, - 0x10aa, 0x10ab, 0x10ac, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b3, - 0x10b4, 0x10b5, 0x10b7, 0x10b8, 0x10ba, 0x10bb, 0x10bd, 0x10bf, - 0x10a0, 0x10a0, 0x10a0, 0x10a0, 0x10a1, 0x10a1, 0x10a2, 0x10a2, - 0x10a3, 0x10a4, 0x10a5, 0x10a5, 0x10a6, 0x10a7, 0x10a8, 0x10a9, - 0x10aa, 0x10ab, 0x10ac, 0x10ae, 0x10af, 0x10b0, 0x10b1, 0x10b3, - 0x10b4, 0x10b5, 0x10b7, 0x10b8, 0x10ba, 0x10bb, 0x10bd, 0x10bf, - 0x10c0, 0x10c0, 0x10c0, 0x10c0, 0x10c1, 0x10c1, 0x10c2, 0x10c2, - 0x10c3, 0x10c4, 0x10c5, 0x10c5, 0x10c6, 0x10c7, 0x10c8, 0x10c9, - 0x10ca, 0x10cb, 0x10cc, 0x10ce, 0x10cf, 0x10d0, 0x10d1, 0x10d3, - 0x10d4, 0x10d5, 0x10d7, 0x10d8, 0x10da, 0x10db, 0x10dd, 0x10df, - 0x10e0, 0x10e0, 0x10e0, 0x10e0, 0x10e1, 0x10e1, 0x10e2, 0x10e2, - 0x10e3, 0x10e4, 0x10e5, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, - 0x10ea, 0x10eb, 0x10ec, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f3, - 0x10f4, 0x10f5, 0x10f7, 0x10f8, 0x10fa, 0x10fb, 0x10fd, 0x10ff, - 0x10e0, 0x10e0, 0x10e0, 0x10e0, 0x10e1, 0x10e1, 0x10e2, 0x10e2, - 0x10e3, 0x10e4, 0x10e5, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, - 0x10ea, 0x10eb, 0x10ec, 0x10ee, 0x10ef, 0x10f0, 0x10f1, 0x10f3, - 0x10f4, 0x10f5, 0x10f7, 0x10f8, 0x10fa, 0x10fb, 0x10fd, 0x10ff, - 0x1100, 0x1100, 0x1100, 0x1100, 0x1101, 0x1101, 0x1102, 0x1102, - 0x1103, 0x1104, 0x1105, 0x1105, 0x1106, 0x1107, 0x1108, 0x1109, - 0x110a, 0x110b, 0x110c, 0x110e, 0x110f, 0x1110, 0x1111, 0x1113, - 0x1114, 0x1115, 0x1117, 0x1118, 0x111a, 0x111b, 0x111d, 0x111f, - 0x1120, 0x1120, 0x1120, 0x1120, 0x1121, 0x1121, 0x1122, 0x1122, - 0x1123, 0x1124, 0x1125, 0x1125, 0x1126, 0x1127, 0x1128, 0x1129, - 0x112a, 0x112b, 0x112c, 0x112e, 0x112f, 0x1130, 0x1131, 0x1133, - 0x1134, 0x1135, 0x1137, 0x1138, 0x113a, 0x113b, 0x113d, 0x113f, - 0x1140, 0x1140, 0x1140, 0x1140, 0x1141, 0x1141, 0x1142, 0x1142, - 0x1143, 0x1144, 0x1145, 0x1145, 0x1146, 0x1147, 0x1148, 0x1149, - 0x114a, 0x114b, 0x114c, 0x114e, 0x114f, 0x1150, 0x1151, 0x1153, - 0x1154, 0x1155, 0x1157, 0x1158, 0x115a, 0x115b, 0x115d, 0x115f, - 0x1140, 0x1140, 0x1140, 0x1140, 0x1141, 0x1141, 0x1142, 0x1142, - 0x1143, 0x1144, 0x1145, 0x1145, 0x1146, 0x1147, 0x1148, 0x1149, - 0x114a, 0x114b, 0x114c, 0x114e, 0x114f, 0x1150, 0x1151, 0x1153, - 0x1154, 0x1155, 0x1157, 0x1158, 0x115a, 0x115b, 0x115d, 0x115f, - 0x1160, 0x1160, 0x1160, 0x1160, 0x1161, 0x1161, 0x1162, 0x1162, - 0x1163, 0x1164, 0x1165, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, - 0x116a, 0x116b, 0x116c, 0x116e, 0x116f, 0x1170, 0x1171, 0x1173, - 0x1174, 0x1175, 0x1177, 0x1178, 0x117a, 0x117b, 0x117d, 0x117f, - 0x1180, 0x1180, 0x1180, 0x1180, 0x1181, 0x1181, 0x1182, 0x1182, - 0x1183, 0x1184, 0x1185, 0x1185, 0x1186, 0x1187, 0x1188, 0x1189, - 0x118a, 0x118b, 0x118c, 0x118e, 0x118f, 0x1190, 0x1191, 0x1193, - 0x1194, 0x1195, 0x1197, 0x1198, 0x119a, 0x119b, 0x119d, 0x119f, - 0x11a0, 0x11a0, 0x11a0, 0x11a0, 0x11a1, 0x11a1, 0x11a2, 0x11a2, - 0x11a3, 0x11a4, 0x11a5, 0x11a5, 0x11a6, 0x11a7, 0x11a8, 0x11a9, - 0x11aa, 0x11ab, 0x11ac, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b3, - 0x11b4, 0x11b5, 0x11b7, 0x11b8, 0x11ba, 0x11bb, 0x11bd, 0x11bf, - 0x11c0, 0x11c0, 0x11c0, 0x11c0, 0x11c1, 0x11c1, 0x11c2, 0x11c2, - 0x11c3, 0x11c4, 0x11c5, 0x11c5, 0x11c6, 0x11c7, 0x11c8, 0x11c9, - 0x11ca, 0x11cb, 0x11cc, 0x11ce, 0x11cf, 0x11d0, 0x11d1, 0x11d3, - 0x11d4, 0x11d5, 0x11d7, 0x11d8, 0x11da, 0x11db, 0x11dd, 0x11df, - 0x11e0, 0x11e0, 0x11e0, 0x11e0, 0x11e1, 0x11e1, 0x11e2, 0x11e2, - 0x11e3, 0x11e4, 0x11e5, 0x11e5, 0x11e6, 0x11e7, 0x11e8, 0x11e9, - 0x11ea, 0x11eb, 0x11ec, 0x11ee, 0x11ef, 0x11f0, 0x11f1, 0x11f3, - 0x11f4, 0x11f5, 0x11f7, 0x11f8, 0x11fa, 0x11fb, 0x11fd, 0x11ff, - 0x1200, 0x1200, 0x1200, 0x1200, 0x1201, 0x1201, 0x1202, 0x1202, - 0x1203, 0x1204, 0x1205, 0x1205, 0x1206, 0x1207, 0x1208, 0x1209, - 0x120a, 0x120b, 0x120c, 0x120e, 0x120f, 0x1210, 0x1211, 0x1213, - 0x1214, 0x1215, 0x1217, 0x1218, 0x121a, 0x121b, 0x121d, 0x121f, - 0x1220, 0x1220, 0x1220, 0x1220, 0x1221, 0x1221, 0x1222, 0x1222, - 0x1223, 0x1224, 0x1225, 0x1225, 0x1226, 0x1227, 0x1228, 0x1229, - 0x122a, 0x122b, 0x122c, 0x122e, 0x122f, 0x1230, 0x1231, 0x1233, - 0x1234, 0x1235, 0x1237, 0x1238, 0x123a, 0x123b, 0x123d, 0x123f, - 0x1240, 0x1240, 0x1240, 0x1240, 0x1241, 0x1241, 0x1242, 0x1242, - 0x1243, 0x1244, 0x1245, 0x1245, 0x1246, 0x1247, 0x1248, 0x1249, - 0x124a, 0x124b, 0x124c, 0x124e, 0x124f, 0x1250, 0x1251, 0x1253, - 0x1254, 0x1255, 0x1257, 0x1258, 0x125a, 0x125b, 0x125d, 0x125f, - 0x1260, 0x1260, 0x1260, 0x1260, 0x1261, 0x1261, 0x1262, 0x1262, - 0x1263, 0x1264, 0x1265, 0x1265, 0x1266, 0x1267, 0x1268, 0x1269, - 0x126a, 0x126b, 0x126c, 0x126e, 0x126f, 0x1270, 0x1271, 0x1273, - 0x1274, 0x1275, 0x1277, 0x1278, 0x127a, 0x127b, 0x127d, 0x127f, - 0x1280, 0x1280, 0x1280, 0x1280, 0x1281, 0x1281, 0x1282, 0x1282, - 0x1283, 0x1284, 0x1285, 0x1285, 0x1286, 0x1287, 0x1288, 0x1289, - 0x128a, 0x128b, 0x128c, 0x128e, 0x128f, 0x1290, 0x1291, 0x1293, - 0x1294, 0x1295, 0x1297, 0x1298, 0x129a, 0x129b, 0x129d, 0x129f, - 0x12a0, 0x12a0, 0x12a0, 0x12a0, 0x12a1, 0x12a1, 0x12a2, 0x12a2, - 0x12a3, 0x12a4, 0x12a5, 0x12a5, 0x12a6, 0x12a7, 0x12a8, 0x12a9, - 0x12aa, 0x12ab, 0x12ac, 0x12ae, 0x12af, 0x12b0, 0x12b1, 0x12b3, - 0x12b4, 0x12b5, 0x12b7, 0x12b8, 0x12ba, 0x12bb, 0x12bd, 0x12bf, - 0x12c0, 0x12c0, 0x12c0, 0x12c0, 0x12c1, 0x12c1, 0x12c2, 0x12c2, - 0x12c3, 0x12c4, 0x12c5, 0x12c5, 0x12c6, 0x12c7, 0x12c8, 0x12c9, - 0x12ca, 0x12cb, 0x12cc, 0x12ce, 0x12cf, 0x12d0, 0x12d1, 0x12d3, - 0x12d4, 0x12d5, 0x12d7, 0x12d8, 0x12da, 0x12db, 0x12dd, 0x12df, - 0x12e0, 0x12e0, 0x12e0, 0x12e0, 0x12e1, 0x12e1, 0x12e2, 0x12e2, - 0x12e3, 0x12e4, 0x12e5, 0x12e5, 0x12e6, 0x12e7, 0x12e8, 0x12e9, - 0x12ea, 0x12eb, 0x12ec, 0x12ee, 0x12ef, 0x12f0, 0x12f1, 0x12f3, - 0x12f4, 0x12f5, 0x12f7, 0x12f8, 0x12fa, 0x12fb, 0x12fd, 0x12ff, - 0x1300, 0x1300, 0x1300, 0x1300, 0x1301, 0x1301, 0x1302, 0x1302, - 0x1303, 0x1304, 0x1305, 0x1305, 0x1306, 0x1307, 0x1308, 0x1309, - 0x130a, 0x130b, 0x130c, 0x130e, 0x130f, 0x1310, 0x1311, 0x1313, - 0x1314, 0x1315, 0x1317, 0x1318, 0x131a, 0x131b, 0x131d, 0x131f, - 0x1320, 0x1320, 0x1320, 0x1320, 0x1321, 0x1321, 0x1322, 0x1322, - 0x1323, 0x1324, 0x1325, 0x1325, 0x1326, 0x1327, 0x1328, 0x1329, - 0x132a, 0x132b, 0x132c, 0x132e, 0x132f, 0x1330, 0x1331, 0x1333, - 0x1334, 0x1335, 0x1337, 0x1338, 0x133a, 0x133b, 0x133d, 0x133f, - 0x1340, 0x1340, 0x1340, 0x1340, 0x1341, 0x1341, 0x1342, 0x1342, - 0x1343, 0x1344, 0x1345, 0x1345, 0x1346, 0x1347, 0x1348, 0x1349, - 0x134a, 0x134b, 0x134c, 0x134e, 0x134f, 0x1350, 0x1351, 0x1353, - 0x1354, 0x1355, 0x1357, 0x1358, 0x135a, 0x135b, 0x135d, 0x135f, - 0x1380, 0x1380, 0x1380, 0x1380, 0x1381, 0x1381, 0x1382, 0x1382, - 0x1383, 0x1384, 0x1385, 0x1385, 0x1386, 0x1387, 0x1388, 0x1389, - 0x138a, 0x138b, 0x138c, 0x138e, 0x138f, 0x1390, 0x1391, 0x1393, - 0x1394, 0x1395, 0x1397, 0x1398, 0x139a, 0x139b, 0x139d, 0x139f, - 0x13a0, 0x13a0, 0x13a0, 0x13a0, 0x13a1, 0x13a1, 0x13a2, 0x13a2, - 0x13a3, 0x13a4, 0x13a5, 0x13a5, 0x13a6, 0x13a7, 0x13a8, 0x13a9, - 0x13aa, 0x13ab, 0x13ac, 0x13ae, 0x13af, 0x13b0, 0x13b1, 0x13b3, - 0x13b4, 0x13b5, 0x13b7, 0x13b8, 0x13ba, 0x13bb, 0x13bd, 0x13bf, - 0x13c0, 0x13c0, 0x13c0, 0x13c0, 0x13c1, 0x13c1, 0x13c2, 0x13c2, - 0x13c3, 0x13c4, 0x13c5, 0x13c5, 0x13c6, 0x13c7, 0x13c8, 0x13c9, - 0x13ca, 0x13cb, 0x13cc, 0x13ce, 0x13cf, 0x13d0, 0x13d1, 0x13d3, - 0x13d4, 0x13d5, 0x13d7, 0x13d8, 0x13da, 0x13db, 0x13dd, 0x13df, - 0x13e0, 0x13e0, 0x13e0, 0x13e0, 0x13e1, 0x13e1, 0x13e2, 0x13e2, - 0x13e3, 0x13e4, 0x13e5, 0x13e5, 0x13e6, 0x13e7, 0x13e8, 0x13e9, - 0x13ea, 0x13eb, 0x13ec, 0x13ee, 0x13ef, 0x13f0, 0x13f1, 0x13f3, - 0x13f4, 0x13f5, 0x13f7, 0x13f8, 0x13fa, 0x13fb, 0x13fd, 0x13ff, - 0x1400, 0x1400, 0x1400, 0x1400, 0x1401, 0x1401, 0x1402, 0x1402, - 0x1403, 0x1404, 0x1405, 0x1405, 0x1406, 0x1407, 0x1408, 0x1409, - 0x140a, 0x140b, 0x140c, 0x140e, 0x140f, 0x1410, 0x1411, 0x1413, - 0x1414, 0x1415, 0x1417, 0x1418, 0x141a, 0x141b, 0x141d, 0x141f, - 0x1440, 0x1440, 0x1440, 0x1440, 0x1441, 0x1441, 0x1442, 0x1442, - 0x1443, 0x1444, 0x1445, 0x1445, 0x1446, 0x1447, 0x1448, 0x1449, - 0x144a, 0x144b, 0x144c, 0x144e, 0x144f, 0x1450, 0x1451, 0x1453, - 0x1454, 0x1455, 0x1457, 0x1458, 0x145a, 0x145b, 0x145d, 0x145f, - 0x1460, 0x1460, 0x1460, 0x1460, 0x1461, 0x1461, 0x1462, 0x1462, - 0x1463, 0x1464, 0x1465, 0x1465, 0x1466, 0x1467, 0x1468, 0x1469, - 0x146a, 0x146b, 0x146c, 0x146e, 0x146f, 0x1470, 0x1471, 0x1473, - 0x1474, 0x1475, 0x1477, 0x1478, 0x147a, 0x147b, 0x147d, 0x147f, - 0x1480, 0x1480, 0x1480, 0x1480, 0x1481, 0x1481, 0x1482, 0x1482, - 0x1483, 0x1484, 0x1485, 0x1485, 0x1486, 0x1487, 0x1488, 0x1489, - 0x148a, 0x148b, 0x148c, 0x148e, 0x148f, 0x1490, 0x1491, 0x1493, - 0x1494, 0x1495, 0x1497, 0x1498, 0x149a, 0x149b, 0x149d, 0x149f, - 0x14c0, 0x14c0, 0x14c0, 0x14c0, 0x14c1, 0x14c1, 0x14c2, 0x14c2, - 0x14c3, 0x14c4, 0x14c5, 0x14c5, 0x14c6, 0x14c7, 0x14c8, 0x14c9, - 0x14ca, 0x14cb, 0x14cc, 0x14ce, 0x14cf, 0x14d0, 0x14d1, 0x14d3, - 0x14d4, 0x14d5, 0x14d7, 0x14d8, 0x14da, 0x14db, 0x14dd, 0x14df, - 0x14e0, 0x14e0, 0x14e0, 0x14e0, 0x14e1, 0x14e1, 0x14e2, 0x14e2, - 0x14e3, 0x14e4, 0x14e5, 0x14e5, 0x14e6, 0x14e7, 0x14e8, 0x14e9, - 0x14ea, 0x14eb, 0x14ec, 0x14ee, 0x14ef, 0x14f0, 0x14f1, 0x14f3, - 0x14f4, 0x14f5, 0x14f7, 0x14f8, 0x14fa, 0x14fb, 0x14fd, 0x14ff, - 0x1500, 0x1500, 0x1500, 0x1500, 0x1501, 0x1501, 0x1502, 0x1502, - 0x1503, 0x1504, 0x1505, 0x1505, 0x1506, 0x1507, 0x1508, 0x1509, - 0x150a, 0x150b, 0x150c, 0x150e, 0x150f, 0x1510, 0x1511, 0x1513, - 0x1514, 0x1515, 0x1517, 0x1518, 0x151a, 0x151b, 0x151d, 0x151f, - 0x1540, 0x1540, 0x1540, 0x1540, 0x1541, 0x1541, 0x1542, 0x1542, - 0x1543, 0x1544, 0x1545, 0x1545, 0x1546, 0x1547, 0x1548, 0x1549, - 0x154a, 0x154b, 0x154c, 0x154e, 0x154f, 0x1550, 0x1551, 0x1553, - 0x1554, 0x1555, 0x1557, 0x1558, 0x155a, 0x155b, 0x155d, 0x155f, - 0x1560, 0x1560, 0x1560, 0x1560, 0x1561, 0x1561, 0x1562, 0x1562, - 0x1563, 0x1564, 0x1565, 0x1565, 0x1566, 0x1567, 0x1568, 0x1569, - 0x156a, 0x156b, 0x156c, 0x156e, 0x156f, 0x1570, 0x1571, 0x1573, - 0x1574, 0x1575, 0x1577, 0x1578, 0x157a, 0x157b, 0x157d, 0x157f, - 0x1580, 0x1580, 0x1580, 0x1580, 0x1581, 0x1581, 0x1582, 0x1582, - 0x1583, 0x1584, 0x1585, 0x1585, 0x1586, 0x1587, 0x1588, 0x1589, - 0x158a, 0x158b, 0x158c, 0x158e, 0x158f, 0x1590, 0x1591, 0x1593, - 0x1594, 0x1595, 0x1597, 0x1598, 0x159a, 0x159b, 0x159d, 0x159f, - 0x15c0, 0x15c0, 0x15c0, 0x15c0, 0x15c1, 0x15c1, 0x15c2, 0x15c2, - 0x15c3, 0x15c4, 0x15c5, 0x15c5, 0x15c6, 0x15c7, 0x15c8, 0x15c9, - 0x15ca, 0x15cb, 0x15cc, 0x15ce, 0x15cf, 0x15d0, 0x15d1, 0x15d3, - 0x15d4, 0x15d5, 0x15d7, 0x15d8, 0x15da, 0x15db, 0x15dd, 0x15df, - 0x15e0, 0x15e0, 0x15e0, 0x15e0, 0x15e1, 0x15e1, 0x15e2, 0x15e2, - 0x15e3, 0x15e4, 0x15e5, 0x15e5, 0x15e6, 0x15e7, 0x15e8, 0x15e9, - 0x15ea, 0x15eb, 0x15ec, 0x15ee, 0x15ef, 0x15f0, 0x15f1, 0x15f3, - 0x15f4, 0x15f5, 0x15f7, 0x15f8, 0x15fa, 0x15fb, 0x15fd, 0x15ff, - 0x1620, 0x1620, 0x1620, 0x1620, 0x1621, 0x1621, 0x1622, 0x1622, - 0x1623, 0x1624, 0x1625, 0x1625, 0x1626, 0x1627, 0x1628, 0x1629, - 0x162a, 0x162b, 0x162c, 0x162e, 0x162f, 0x1630, 0x1631, 0x1633, - 0x1634, 0x1635, 0x1637, 0x1638, 0x163a, 0x163b, 0x163d, 0x163f, - 0x1640, 0x1640, 0x1640, 0x1640, 0x1641, 0x1641, 0x1642, 0x1642, - 0x1643, 0x1644, 0x1645, 0x1645, 0x1646, 0x1647, 0x1648, 0x1649, - 0x164a, 0x164b, 0x164c, 0x164e, 0x164f, 0x1650, 0x1651, 0x1653, - 0x1654, 0x1655, 0x1657, 0x1658, 0x165a, 0x165b, 0x165d, 0x165f, - 0x1680, 0x1680, 0x1680, 0x1680, 0x1681, 0x1681, 0x1682, 0x1682, - 0x1683, 0x1684, 0x1685, 0x1685, 0x1686, 0x1687, 0x1688, 0x1689, - 0x168a, 0x168b, 0x168c, 0x168e, 0x168f, 0x1690, 0x1691, 0x1693, - 0x1694, 0x1695, 0x1697, 0x1698, 0x169a, 0x169b, 0x169d, 0x169f, - 0x16a0, 0x16a0, 0x16a0, 0x16a0, 0x16a1, 0x16a1, 0x16a2, 0x16a2, - 0x16a3, 0x16a4, 0x16a5, 0x16a5, 0x16a6, 0x16a7, 0x16a8, 0x16a9, - 0x16aa, 0x16ab, 0x16ac, 0x16ae, 0x16af, 0x16b0, 0x16b1, 0x16b3, - 0x16b4, 0x16b5, 0x16b7, 0x16b8, 0x16ba, 0x16bb, 0x16bd, 0x16bf, - 0x16e0, 0x16e0, 0x16e0, 0x16e0, 0x16e1, 0x16e1, 0x16e2, 0x16e2, - 0x16e3, 0x16e4, 0x16e5, 0x16e5, 0x16e6, 0x16e7, 0x16e8, 0x16e9, - 0x16ea, 0x16eb, 0x16ec, 0x16ee, 0x16ef, 0x16f0, 0x16f1, 0x16f3, - 0x16f4, 0x16f5, 0x16f7, 0x16f8, 0x16fa, 0x16fb, 0x16fd, 0x16ff, - 0x1700, 0x1700, 0x1700, 0x1700, 0x1701, 0x1701, 0x1702, 0x1702, - 0x1703, 0x1704, 0x1705, 0x1705, 0x1706, 0x1707, 0x1708, 0x1709, - 0x170a, 0x170b, 0x170c, 0x170e, 0x170f, 0x1710, 0x1711, 0x1713, - 0x1714, 0x1715, 0x1717, 0x1718, 0x171a, 0x171b, 0x171d, 0x171f, - 0x1740, 0x1740, 0x1740, 0x1740, 0x1741, 0x1741, 0x1742, 0x1742, - 0x1743, 0x1744, 0x1745, 0x1745, 0x1746, 0x1747, 0x1748, 0x1749, - 0x174a, 0x174b, 0x174c, 0x174e, 0x174f, 0x1750, 0x1751, 0x1753, - 0x1754, 0x1755, 0x1757, 0x1758, 0x175a, 0x175b, 0x175d, 0x175f, - 0x1760, 0x1760, 0x1760, 0x1760, 0x1761, 0x1761, 0x1762, 0x1762, - 0x1763, 0x1764, 0x1765, 0x1765, 0x1766, 0x1767, 0x1768, 0x1769, - 0x176a, 0x176b, 0x176c, 0x176e, 0x176f, 0x1770, 0x1771, 0x1773, - 0x1774, 0x1775, 0x1777, 0x1778, 0x177a, 0x177b, 0x177d, 0x177f, - 0x17a0, 0x17a0, 0x17a0, 0x17a0, 0x17a1, 0x17a1, 0x17a2, 0x17a2, - 0x17a3, 0x17a4, 0x17a5, 0x17a5, 0x17a6, 0x17a7, 0x17a8, 0x17a9, - 0x17aa, 0x17ab, 0x17ac, 0x17ae, 0x17af, 0x17b0, 0x17b1, 0x17b3, - 0x17b4, 0x17b5, 0x17b7, 0x17b8, 0x17ba, 0x17bb, 0x17bd, 0x17bf, - 0x17e0, 0x17e0, 0x17e0, 0x17e0, 0x17e1, 0x17e1, 0x17e2, 0x17e2, - 0x17e3, 0x17e4, 0x17e5, 0x17e5, 0x17e6, 0x17e7, 0x17e8, 0x17e9, - 0x17ea, 0x17eb, 0x17ec, 0x17ee, 0x17ef, 0x17f0, 0x17f1, 0x17f3, - 0x17f4, 0x17f5, 0x17f7, 0x17f8, 0x17fa, 0x17fb, 0x17fd, 0x17ff, - 0x1800, 0x1800, 0x1800, 0x1800, 0x1801, 0x1801, 0x1802, 0x1802, - 0x1803, 0x1804, 0x1805, 0x1805, 0x1806, 0x1807, 0x1808, 0x1809, - 0x180a, 0x180b, 0x180c, 0x180e, 0x180f, 0x1810, 0x1811, 0x1813, - 0x1814, 0x1815, 0x1817, 0x1818, 0x181a, 0x181b, 0x181d, 0x181f, - 0x1800, 0x1800, 0x1800, 0x1800, 0x1801, 0x1801, 0x1802, 0x1802, - 0x1803, 0x1804, 0x1805, 0x1805, 0x1806, 0x1807, 0x1808, 0x1809, - 0x180a, 0x180b, 0x180c, 0x180e, 0x180f, 0x1810, 0x1811, 0x1813, - 0x1814, 0x1815, 0x1817, 0x1818, 0x181a, 0x181b, 0x181d, 0x181f, - 0x1800, 0x1800, 0x1800, 0x1800, 0x1801, 0x1801, 0x1802, 0x1802, - 0x1803, 0x1804, 0x1805, 0x1805, 0x1806, 0x1807, 0x1808, 0x1809, - 0x180a, 0x180b, 0x180c, 0x180e, 0x180f, 0x1810, 0x1811, 0x1813, - 0x1814, 0x1815, 0x1817, 0x1818, 0x181a, 0x181b, 0x181d, 0x181f, - 0x1800, 0x1800, 0x1800, 0x1800, 0x1801, 0x1801, 0x1802, 0x1802, - 0x1803, 0x1804, 0x1805, 0x1805, 0x1806, 0x1807, 0x1808, 0x1809, - 0x180a, 0x180b, 0x180c, 0x180e, 0x180f, 0x1810, 0x1811, 0x1813, - 0x1814, 0x1815, 0x1817, 0x1818, 0x181a, 0x181b, 0x181d, 0x181f, - 0x1800, 0x1800, 0x1800, 0x1800, 0x1801, 0x1801, 0x1802, 0x1802, - 0x1803, 0x1804, 0x1805, 0x1805, 0x1806, 0x1807, 0x1808, 0x1809, - 0x180a, 0x180b, 0x180c, 0x180e, 0x180f, 0x1810, 0x1811, 0x1813, - 0x1814, 0x1815, 0x1817, 0x1818, 0x181a, 0x181b, 0x181d, 0x181f, - 0x1820, 0x1820, 0x1820, 0x1820, 0x1821, 0x1821, 0x1822, 0x1822, - 0x1823, 0x1824, 0x1825, 0x1825, 0x1826, 0x1827, 0x1828, 0x1829, - 0x182a, 0x182b, 0x182c, 0x182e, 0x182f, 0x1830, 0x1831, 0x1833, - 0x1834, 0x1835, 0x1837, 0x1838, 0x183a, 0x183b, 0x183d, 0x183f, - 0x1820, 0x1820, 0x1820, 0x1820, 0x1821, 0x1821, 0x1822, 0x1822, - 0x1823, 0x1824, 0x1825, 0x1825, 0x1826, 0x1827, 0x1828, 0x1829, - 0x182a, 0x182b, 0x182c, 0x182e, 0x182f, 0x1830, 0x1831, 0x1833, - 0x1834, 0x1835, 0x1837, 0x1838, 0x183a, 0x183b, 0x183d, 0x183f, - 0x1820, 0x1820, 0x1820, 0x1820, 0x1821, 0x1821, 0x1822, 0x1822, - 0x1823, 0x1824, 0x1825, 0x1825, 0x1826, 0x1827, 0x1828, 0x1829, - 0x182a, 0x182b, 0x182c, 0x182e, 0x182f, 0x1830, 0x1831, 0x1833, - 0x1834, 0x1835, 0x1837, 0x1838, 0x183a, 0x183b, 0x183d, 0x183f, - 0x1840, 0x1840, 0x1840, 0x1840, 0x1841, 0x1841, 0x1842, 0x1842, - 0x1843, 0x1844, 0x1845, 0x1845, 0x1846, 0x1847, 0x1848, 0x1849, - 0x184a, 0x184b, 0x184c, 0x184e, 0x184f, 0x1850, 0x1851, 0x1853, - 0x1854, 0x1855, 0x1857, 0x1858, 0x185a, 0x185b, 0x185d, 0x185f, - 0x1840, 0x1840, 0x1840, 0x1840, 0x1841, 0x1841, 0x1842, 0x1842, - 0x1843, 0x1844, 0x1845, 0x1845, 0x1846, 0x1847, 0x1848, 0x1849, - 0x184a, 0x184b, 0x184c, 0x184e, 0x184f, 0x1850, 0x1851, 0x1853, - 0x1854, 0x1855, 0x1857, 0x1858, 0x185a, 0x185b, 0x185d, 0x185f, - 0x1860, 0x1860, 0x1860, 0x1860, 0x1861, 0x1861, 0x1862, 0x1862, - 0x1863, 0x1864, 0x1865, 0x1865, 0x1866, 0x1867, 0x1868, 0x1869, - 0x186a, 0x186b, 0x186c, 0x186e, 0x186f, 0x1870, 0x1871, 0x1873, - 0x1874, 0x1875, 0x1877, 0x1878, 0x187a, 0x187b, 0x187d, 0x187f, - 0x1860, 0x1860, 0x1860, 0x1860, 0x1861, 0x1861, 0x1862, 0x1862, - 0x1863, 0x1864, 0x1865, 0x1865, 0x1866, 0x1867, 0x1868, 0x1869, - 0x186a, 0x186b, 0x186c, 0x186e, 0x186f, 0x1870, 0x1871, 0x1873, - 0x1874, 0x1875, 0x1877, 0x1878, 0x187a, 0x187b, 0x187d, 0x187f, - 0x1880, 0x1880, 0x1880, 0x1880, 0x1881, 0x1881, 0x1882, 0x1882, - 0x1883, 0x1884, 0x1885, 0x1885, 0x1886, 0x1887, 0x1888, 0x1889, - 0x188a, 0x188b, 0x188c, 0x188e, 0x188f, 0x1890, 0x1891, 0x1893, - 0x1894, 0x1895, 0x1897, 0x1898, 0x189a, 0x189b, 0x189d, 0x189f, - 0x18a0, 0x18a0, 0x18a0, 0x18a0, 0x18a1, 0x18a1, 0x18a2, 0x18a2, - 0x18a3, 0x18a4, 0x18a5, 0x18a5, 0x18a6, 0x18a7, 0x18a8, 0x18a9, - 0x18aa, 0x18ab, 0x18ac, 0x18ae, 0x18af, 0x18b0, 0x18b1, 0x18b3, - 0x18b4, 0x18b5, 0x18b7, 0x18b8, 0x18ba, 0x18bb, 0x18bd, 0x18bf, - 0x18a0, 0x18a0, 0x18a0, 0x18a0, 0x18a1, 0x18a1, 0x18a2, 0x18a2, - 0x18a3, 0x18a4, 0x18a5, 0x18a5, 0x18a6, 0x18a7, 0x18a8, 0x18a9, - 0x18aa, 0x18ab, 0x18ac, 0x18ae, 0x18af, 0x18b0, 0x18b1, 0x18b3, - 0x18b4, 0x18b5, 0x18b7, 0x18b8, 0x18ba, 0x18bb, 0x18bd, 0x18bf, - 0x18c0, 0x18c0, 0x18c0, 0x18c0, 0x18c1, 0x18c1, 0x18c2, 0x18c2, - 0x18c3, 0x18c4, 0x18c5, 0x18c5, 0x18c6, 0x18c7, 0x18c8, 0x18c9, - 0x18ca, 0x18cb, 0x18cc, 0x18ce, 0x18cf, 0x18d0, 0x18d1, 0x18d3, - 0x18d4, 0x18d5, 0x18d7, 0x18d8, 0x18da, 0x18db, 0x18dd, 0x18df, - 0x18e0, 0x18e0, 0x18e0, 0x18e0, 0x18e1, 0x18e1, 0x18e2, 0x18e2, - 0x18e3, 0x18e4, 0x18e5, 0x18e5, 0x18e6, 0x18e7, 0x18e8, 0x18e9, - 0x18ea, 0x18eb, 0x18ec, 0x18ee, 0x18ef, 0x18f0, 0x18f1, 0x18f3, - 0x18f4, 0x18f5, 0x18f7, 0x18f8, 0x18fa, 0x18fb, 0x18fd, 0x18ff, - 0x18e0, 0x18e0, 0x18e0, 0x18e0, 0x18e1, 0x18e1, 0x18e2, 0x18e2, - 0x18e3, 0x18e4, 0x18e5, 0x18e5, 0x18e6, 0x18e7, 0x18e8, 0x18e9, - 0x18ea, 0x18eb, 0x18ec, 0x18ee, 0x18ef, 0x18f0, 0x18f1, 0x18f3, - 0x18f4, 0x18f5, 0x18f7, 0x18f8, 0x18fa, 0x18fb, 0x18fd, 0x18ff, - 0x1900, 0x1900, 0x1900, 0x1900, 0x1901, 0x1901, 0x1902, 0x1902, - 0x1903, 0x1904, 0x1905, 0x1905, 0x1906, 0x1907, 0x1908, 0x1909, - 0x190a, 0x190b, 0x190c, 0x190e, 0x190f, 0x1910, 0x1911, 0x1913, - 0x1914, 0x1915, 0x1917, 0x1918, 0x191a, 0x191b, 0x191d, 0x191f, - 0x1920, 0x1920, 0x1920, 0x1920, 0x1921, 0x1921, 0x1922, 0x1922, - 0x1923, 0x1924, 0x1925, 0x1925, 0x1926, 0x1927, 0x1928, 0x1929, - 0x192a, 0x192b, 0x192c, 0x192e, 0x192f, 0x1930, 0x1931, 0x1933, - 0x1934, 0x1935, 0x1937, 0x1938, 0x193a, 0x193b, 0x193d, 0x193f, - 0x1940, 0x1940, 0x1940, 0x1940, 0x1941, 0x1941, 0x1942, 0x1942, - 0x1943, 0x1944, 0x1945, 0x1945, 0x1946, 0x1947, 0x1948, 0x1949, - 0x194a, 0x194b, 0x194c, 0x194e, 0x194f, 0x1950, 0x1951, 0x1953, - 0x1954, 0x1955, 0x1957, 0x1958, 0x195a, 0x195b, 0x195d, 0x195f, - 0x1940, 0x1940, 0x1940, 0x1940, 0x1941, 0x1941, 0x1942, 0x1942, - 0x1943, 0x1944, 0x1945, 0x1945, 0x1946, 0x1947, 0x1948, 0x1949, - 0x194a, 0x194b, 0x194c, 0x194e, 0x194f, 0x1950, 0x1951, 0x1953, - 0x1954, 0x1955, 0x1957, 0x1958, 0x195a, 0x195b, 0x195d, 0x195f, - 0x1960, 0x1960, 0x1960, 0x1960, 0x1961, 0x1961, 0x1962, 0x1962, - 0x1963, 0x1964, 0x1965, 0x1965, 0x1966, 0x1967, 0x1968, 0x1969, - 0x196a, 0x196b, 0x196c, 0x196e, 0x196f, 0x1970, 0x1971, 0x1973, - 0x1974, 0x1975, 0x1977, 0x1978, 0x197a, 0x197b, 0x197d, 0x197f, - 0x1980, 0x1980, 0x1980, 0x1980, 0x1981, 0x1981, 0x1982, 0x1982, - 0x1983, 0x1984, 0x1985, 0x1985, 0x1986, 0x1987, 0x1988, 0x1989, - 0x198a, 0x198b, 0x198c, 0x198e, 0x198f, 0x1990, 0x1991, 0x1993, - 0x1994, 0x1995, 0x1997, 0x1998, 0x199a, 0x199b, 0x199d, 0x199f, - 0x19a0, 0x19a0, 0x19a0, 0x19a0, 0x19a1, 0x19a1, 0x19a2, 0x19a2, - 0x19a3, 0x19a4, 0x19a5, 0x19a5, 0x19a6, 0x19a7, 0x19a8, 0x19a9, - 0x19aa, 0x19ab, 0x19ac, 0x19ae, 0x19af, 0x19b0, 0x19b1, 0x19b3, - 0x19b4, 0x19b5, 0x19b7, 0x19b8, 0x19ba, 0x19bb, 0x19bd, 0x19bf, - 0x19c0, 0x19c0, 0x19c0, 0x19c0, 0x19c1, 0x19c1, 0x19c2, 0x19c2, - 0x19c3, 0x19c4, 0x19c5, 0x19c5, 0x19c6, 0x19c7, 0x19c8, 0x19c9, - 0x19ca, 0x19cb, 0x19cc, 0x19ce, 0x19cf, 0x19d0, 0x19d1, 0x19d3, - 0x19d4, 0x19d5, 0x19d7, 0x19d8, 0x19da, 0x19db, 0x19dd, 0x19df, - 0x19e0, 0x19e0, 0x19e0, 0x19e0, 0x19e1, 0x19e1, 0x19e2, 0x19e2, - 0x19e3, 0x19e4, 0x19e5, 0x19e5, 0x19e6, 0x19e7, 0x19e8, 0x19e9, - 0x19ea, 0x19eb, 0x19ec, 0x19ee, 0x19ef, 0x19f0, 0x19f1, 0x19f3, - 0x19f4, 0x19f5, 0x19f7, 0x19f8, 0x19fa, 0x19fb, 0x19fd, 0x19ff, - 0x1a00, 0x1a00, 0x1a00, 0x1a00, 0x1a01, 0x1a01, 0x1a02, 0x1a02, - 0x1a03, 0x1a04, 0x1a05, 0x1a05, 0x1a06, 0x1a07, 0x1a08, 0x1a09, - 0x1a0a, 0x1a0b, 0x1a0c, 0x1a0e, 0x1a0f, 0x1a10, 0x1a11, 0x1a13, - 0x1a14, 0x1a15, 0x1a17, 0x1a18, 0x1a1a, 0x1a1b, 0x1a1d, 0x1a1f, - 0x1a20, 0x1a20, 0x1a20, 0x1a20, 0x1a21, 0x1a21, 0x1a22, 0x1a22, - 0x1a23, 0x1a24, 0x1a25, 0x1a25, 0x1a26, 0x1a27, 0x1a28, 0x1a29, - 0x1a2a, 0x1a2b, 0x1a2c, 0x1a2e, 0x1a2f, 0x1a30, 0x1a31, 0x1a33, - 0x1a34, 0x1a35, 0x1a37, 0x1a38, 0x1a3a, 0x1a3b, 0x1a3d, 0x1a3f, - 0x1a40, 0x1a40, 0x1a40, 0x1a40, 0x1a41, 0x1a41, 0x1a42, 0x1a42, - 0x1a43, 0x1a44, 0x1a45, 0x1a45, 0x1a46, 0x1a47, 0x1a48, 0x1a49, - 0x1a4a, 0x1a4b, 0x1a4c, 0x1a4e, 0x1a4f, 0x1a50, 0x1a51, 0x1a53, - 0x1a54, 0x1a55, 0x1a57, 0x1a58, 0x1a5a, 0x1a5b, 0x1a5d, 0x1a5f, - 0x1a60, 0x1a60, 0x1a60, 0x1a60, 0x1a61, 0x1a61, 0x1a62, 0x1a62, - 0x1a63, 0x1a64, 0x1a65, 0x1a65, 0x1a66, 0x1a67, 0x1a68, 0x1a69, - 0x1a6a, 0x1a6b, 0x1a6c, 0x1a6e, 0x1a6f, 0x1a70, 0x1a71, 0x1a73, - 0x1a74, 0x1a75, 0x1a77, 0x1a78, 0x1a7a, 0x1a7b, 0x1a7d, 0x1a7f, - 0x1a80, 0x1a80, 0x1a80, 0x1a80, 0x1a81, 0x1a81, 0x1a82, 0x1a82, - 0x1a83, 0x1a84, 0x1a85, 0x1a85, 0x1a86, 0x1a87, 0x1a88, 0x1a89, - 0x1a8a, 0x1a8b, 0x1a8c, 0x1a8e, 0x1a8f, 0x1a90, 0x1a91, 0x1a93, - 0x1a94, 0x1a95, 0x1a97, 0x1a98, 0x1a9a, 0x1a9b, 0x1a9d, 0x1a9f, - 0x1aa0, 0x1aa0, 0x1aa0, 0x1aa0, 0x1aa1, 0x1aa1, 0x1aa2, 0x1aa2, - 0x1aa3, 0x1aa4, 0x1aa5, 0x1aa5, 0x1aa6, 0x1aa7, 0x1aa8, 0x1aa9, - 0x1aaa, 0x1aab, 0x1aac, 0x1aae, 0x1aaf, 0x1ab0, 0x1ab1, 0x1ab3, - 0x1ab4, 0x1ab5, 0x1ab7, 0x1ab8, 0x1aba, 0x1abb, 0x1abd, 0x1abf, - 0x1ac0, 0x1ac0, 0x1ac0, 0x1ac0, 0x1ac1, 0x1ac1, 0x1ac2, 0x1ac2, - 0x1ac3, 0x1ac4, 0x1ac5, 0x1ac5, 0x1ac6, 0x1ac7, 0x1ac8, 0x1ac9, - 0x1aca, 0x1acb, 0x1acc, 0x1ace, 0x1acf, 0x1ad0, 0x1ad1, 0x1ad3, - 0x1ad4, 0x1ad5, 0x1ad7, 0x1ad8, 0x1ada, 0x1adb, 0x1add, 0x1adf, - 0x1ae0, 0x1ae0, 0x1ae0, 0x1ae0, 0x1ae1, 0x1ae1, 0x1ae2, 0x1ae2, - 0x1ae3, 0x1ae4, 0x1ae5, 0x1ae5, 0x1ae6, 0x1ae7, 0x1ae8, 0x1ae9, - 0x1aea, 0x1aeb, 0x1aec, 0x1aee, 0x1aef, 0x1af0, 0x1af1, 0x1af3, - 0x1af4, 0x1af5, 0x1af7, 0x1af8, 0x1afa, 0x1afb, 0x1afd, 0x1aff, - 0x1b00, 0x1b00, 0x1b00, 0x1b00, 0x1b01, 0x1b01, 0x1b02, 0x1b02, - 0x1b03, 0x1b04, 0x1b05, 0x1b05, 0x1b06, 0x1b07, 0x1b08, 0x1b09, - 0x1b0a, 0x1b0b, 0x1b0c, 0x1b0e, 0x1b0f, 0x1b10, 0x1b11, 0x1b13, - 0x1b14, 0x1b15, 0x1b17, 0x1b18, 0x1b1a, 0x1b1b, 0x1b1d, 0x1b1f, - 0x1b20, 0x1b20, 0x1b20, 0x1b20, 0x1b21, 0x1b21, 0x1b22, 0x1b22, - 0x1b23, 0x1b24, 0x1b25, 0x1b25, 0x1b26, 0x1b27, 0x1b28, 0x1b29, - 0x1b2a, 0x1b2b, 0x1b2c, 0x1b2e, 0x1b2f, 0x1b30, 0x1b31, 0x1b33, - 0x1b34, 0x1b35, 0x1b37, 0x1b38, 0x1b3a, 0x1b3b, 0x1b3d, 0x1b3f, - 0x1b40, 0x1b40, 0x1b40, 0x1b40, 0x1b41, 0x1b41, 0x1b42, 0x1b42, - 0x1b43, 0x1b44, 0x1b45, 0x1b45, 0x1b46, 0x1b47, 0x1b48, 0x1b49, - 0x1b4a, 0x1b4b, 0x1b4c, 0x1b4e, 0x1b4f, 0x1b50, 0x1b51, 0x1b53, - 0x1b54, 0x1b55, 0x1b57, 0x1b58, 0x1b5a, 0x1b5b, 0x1b5d, 0x1b5f, - 0x1b80, 0x1b80, 0x1b80, 0x1b80, 0x1b81, 0x1b81, 0x1b82, 0x1b82, - 0x1b83, 0x1b84, 0x1b85, 0x1b85, 0x1b86, 0x1b87, 0x1b88, 0x1b89, - 0x1b8a, 0x1b8b, 0x1b8c, 0x1b8e, 0x1b8f, 0x1b90, 0x1b91, 0x1b93, - 0x1b94, 0x1b95, 0x1b97, 0x1b98, 0x1b9a, 0x1b9b, 0x1b9d, 0x1b9f, - 0x1ba0, 0x1ba0, 0x1ba0, 0x1ba0, 0x1ba1, 0x1ba1, 0x1ba2, 0x1ba2, - 0x1ba3, 0x1ba4, 0x1ba5, 0x1ba5, 0x1ba6, 0x1ba7, 0x1ba8, 0x1ba9, - 0x1baa, 0x1bab, 0x1bac, 0x1bae, 0x1baf, 0x1bb0, 0x1bb1, 0x1bb3, - 0x1bb4, 0x1bb5, 0x1bb7, 0x1bb8, 0x1bba, 0x1bbb, 0x1bbd, 0x1bbf, - 0x1bc0, 0x1bc0, 0x1bc0, 0x1bc0, 0x1bc1, 0x1bc1, 0x1bc2, 0x1bc2, - 0x1bc3, 0x1bc4, 0x1bc5, 0x1bc5, 0x1bc6, 0x1bc7, 0x1bc8, 0x1bc9, - 0x1bca, 0x1bcb, 0x1bcc, 0x1bce, 0x1bcf, 0x1bd0, 0x1bd1, 0x1bd3, - 0x1bd4, 0x1bd5, 0x1bd7, 0x1bd8, 0x1bda, 0x1bdb, 0x1bdd, 0x1bdf, - 0x1be0, 0x1be0, 0x1be0, 0x1be0, 0x1be1, 0x1be1, 0x1be2, 0x1be2, - 0x1be3, 0x1be4, 0x1be5, 0x1be5, 0x1be6, 0x1be7, 0x1be8, 0x1be9, - 0x1bea, 0x1beb, 0x1bec, 0x1bee, 0x1bef, 0x1bf0, 0x1bf1, 0x1bf3, - 0x1bf4, 0x1bf5, 0x1bf7, 0x1bf8, 0x1bfa, 0x1bfb, 0x1bfd, 0x1bff, - 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c01, 0x1c01, 0x1c02, 0x1c02, - 0x1c03, 0x1c04, 0x1c05, 0x1c05, 0x1c06, 0x1c07, 0x1c08, 0x1c09, - 0x1c0a, 0x1c0b, 0x1c0c, 0x1c0e, 0x1c0f, 0x1c10, 0x1c11, 0x1c13, - 0x1c14, 0x1c15, 0x1c17, 0x1c18, 0x1c1a, 0x1c1b, 0x1c1d, 0x1c1f, - 0x1c40, 0x1c40, 0x1c40, 0x1c40, 0x1c41, 0x1c41, 0x1c42, 0x1c42, - 0x1c43, 0x1c44, 0x1c45, 0x1c45, 0x1c46, 0x1c47, 0x1c48, 0x1c49, - 0x1c4a, 0x1c4b, 0x1c4c, 0x1c4e, 0x1c4f, 0x1c50, 0x1c51, 0x1c53, - 0x1c54, 0x1c55, 0x1c57, 0x1c58, 0x1c5a, 0x1c5b, 0x1c5d, 0x1c5f, - 0x1c60, 0x1c60, 0x1c60, 0x1c60, 0x1c61, 0x1c61, 0x1c62, 0x1c62, - 0x1c63, 0x1c64, 0x1c65, 0x1c65, 0x1c66, 0x1c67, 0x1c68, 0x1c69, - 0x1c6a, 0x1c6b, 0x1c6c, 0x1c6e, 0x1c6f, 0x1c70, 0x1c71, 0x1c73, - 0x1c74, 0x1c75, 0x1c77, 0x1c78, 0x1c7a, 0x1c7b, 0x1c7d, 0x1c7f, - 0x1c80, 0x1c80, 0x1c80, 0x1c80, 0x1c81, 0x1c81, 0x1c82, 0x1c82, - 0x1c83, 0x1c84, 0x1c85, 0x1c85, 0x1c86, 0x1c87, 0x1c88, 0x1c89, - 0x1c8a, 0x1c8b, 0x1c8c, 0x1c8e, 0x1c8f, 0x1c90, 0x1c91, 0x1c93, - 0x1c94, 0x1c95, 0x1c97, 0x1c98, 0x1c9a, 0x1c9b, 0x1c9d, 0x1c9f, - 0x1cc0, 0x1cc0, 0x1cc0, 0x1cc0, 0x1cc1, 0x1cc1, 0x1cc2, 0x1cc2, - 0x1cc3, 0x1cc4, 0x1cc5, 0x1cc5, 0x1cc6, 0x1cc7, 0x1cc8, 0x1cc9, - 0x1cca, 0x1ccb, 0x1ccc, 0x1cce, 0x1ccf, 0x1cd0, 0x1cd1, 0x1cd3, - 0x1cd4, 0x1cd5, 0x1cd7, 0x1cd8, 0x1cda, 0x1cdb, 0x1cdd, 0x1cdf, - 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce0, 0x1ce1, 0x1ce1, 0x1ce2, 0x1ce2, - 0x1ce3, 0x1ce4, 0x1ce5, 0x1ce5, 0x1ce6, 0x1ce7, 0x1ce8, 0x1ce9, - 0x1cea, 0x1ceb, 0x1cec, 0x1cee, 0x1cef, 0x1cf0, 0x1cf1, 0x1cf3, - 0x1cf4, 0x1cf5, 0x1cf7, 0x1cf8, 0x1cfa, 0x1cfb, 0x1cfd, 0x1cff, - 0x1d00, 0x1d00, 0x1d00, 0x1d00, 0x1d01, 0x1d01, 0x1d02, 0x1d02, - 0x1d03, 0x1d04, 0x1d05, 0x1d05, 0x1d06, 0x1d07, 0x1d08, 0x1d09, - 0x1d0a, 0x1d0b, 0x1d0c, 0x1d0e, 0x1d0f, 0x1d10, 0x1d11, 0x1d13, - 0x1d14, 0x1d15, 0x1d17, 0x1d18, 0x1d1a, 0x1d1b, 0x1d1d, 0x1d1f, - 0x1d40, 0x1d40, 0x1d40, 0x1d40, 0x1d41, 0x1d41, 0x1d42, 0x1d42, - 0x1d43, 0x1d44, 0x1d45, 0x1d45, 0x1d46, 0x1d47, 0x1d48, 0x1d49, - 0x1d4a, 0x1d4b, 0x1d4c, 0x1d4e, 0x1d4f, 0x1d50, 0x1d51, 0x1d53, - 0x1d54, 0x1d55, 0x1d57, 0x1d58, 0x1d5a, 0x1d5b, 0x1d5d, 0x1d5f, - 0x1d60, 0x1d60, 0x1d60, 0x1d60, 0x1d61, 0x1d61, 0x1d62, 0x1d62, - 0x1d63, 0x1d64, 0x1d65, 0x1d65, 0x1d66, 0x1d67, 0x1d68, 0x1d69, - 0x1d6a, 0x1d6b, 0x1d6c, 0x1d6e, 0x1d6f, 0x1d70, 0x1d71, 0x1d73, - 0x1d74, 0x1d75, 0x1d77, 0x1d78, 0x1d7a, 0x1d7b, 0x1d7d, 0x1d7f, - 0x1d80, 0x1d80, 0x1d80, 0x1d80, 0x1d81, 0x1d81, 0x1d82, 0x1d82, - 0x1d83, 0x1d84, 0x1d85, 0x1d85, 0x1d86, 0x1d87, 0x1d88, 0x1d89, - 0x1d8a, 0x1d8b, 0x1d8c, 0x1d8e, 0x1d8f, 0x1d90, 0x1d91, 0x1d93, - 0x1d94, 0x1d95, 0x1d97, 0x1d98, 0x1d9a, 0x1d9b, 0x1d9d, 0x1d9f, - 0x1dc0, 0x1dc0, 0x1dc0, 0x1dc0, 0x1dc1, 0x1dc1, 0x1dc2, 0x1dc2, - 0x1dc3, 0x1dc4, 0x1dc5, 0x1dc5, 0x1dc6, 0x1dc7, 0x1dc8, 0x1dc9, - 0x1dca, 0x1dcb, 0x1dcc, 0x1dce, 0x1dcf, 0x1dd0, 0x1dd1, 0x1dd3, - 0x1dd4, 0x1dd5, 0x1dd7, 0x1dd8, 0x1dda, 0x1ddb, 0x1ddd, 0x1ddf, - 0x1de0, 0x1de0, 0x1de0, 0x1de0, 0x1de1, 0x1de1, 0x1de2, 0x1de2, - 0x1de3, 0x1de4, 0x1de5, 0x1de5, 0x1de6, 0x1de7, 0x1de8, 0x1de9, - 0x1dea, 0x1deb, 0x1dec, 0x1dee, 0x1def, 0x1df0, 0x1df1, 0x1df3, - 0x1df4, 0x1df5, 0x1df7, 0x1df8, 0x1dfa, 0x1dfb, 0x1dfd, 0x1dff, - 0x1e20, 0x1e20, 0x1e20, 0x1e20, 0x1e21, 0x1e21, 0x1e22, 0x1e22, - 0x1e23, 0x1e24, 0x1e25, 0x1e25, 0x1e26, 0x1e27, 0x1e28, 0x1e29, - 0x1e2a, 0x1e2b, 0x1e2c, 0x1e2e, 0x1e2f, 0x1e30, 0x1e31, 0x1e33, - 0x1e34, 0x1e35, 0x1e37, 0x1e38, 0x1e3a, 0x1e3b, 0x1e3d, 0x1e3f, - 0x1e40, 0x1e40, 0x1e40, 0x1e40, 0x1e41, 0x1e41, 0x1e42, 0x1e42, - 0x1e43, 0x1e44, 0x1e45, 0x1e45, 0x1e46, 0x1e47, 0x1e48, 0x1e49, - 0x1e4a, 0x1e4b, 0x1e4c, 0x1e4e, 0x1e4f, 0x1e50, 0x1e51, 0x1e53, - 0x1e54, 0x1e55, 0x1e57, 0x1e58, 0x1e5a, 0x1e5b, 0x1e5d, 0x1e5f, - 0x1e80, 0x1e80, 0x1e80, 0x1e80, 0x1e81, 0x1e81, 0x1e82, 0x1e82, - 0x1e83, 0x1e84, 0x1e85, 0x1e85, 0x1e86, 0x1e87, 0x1e88, 0x1e89, - 0x1e8a, 0x1e8b, 0x1e8c, 0x1e8e, 0x1e8f, 0x1e90, 0x1e91, 0x1e93, - 0x1e94, 0x1e95, 0x1e97, 0x1e98, 0x1e9a, 0x1e9b, 0x1e9d, 0x1e9f, - 0x1ea0, 0x1ea0, 0x1ea0, 0x1ea0, 0x1ea1, 0x1ea1, 0x1ea2, 0x1ea2, - 0x1ea3, 0x1ea4, 0x1ea5, 0x1ea5, 0x1ea6, 0x1ea7, 0x1ea8, 0x1ea9, - 0x1eaa, 0x1eab, 0x1eac, 0x1eae, 0x1eaf, 0x1eb0, 0x1eb1, 0x1eb3, - 0x1eb4, 0x1eb5, 0x1eb7, 0x1eb8, 0x1eba, 0x1ebb, 0x1ebd, 0x1ebf, - 0x1ee0, 0x1ee0, 0x1ee0, 0x1ee0, 0x1ee1, 0x1ee1, 0x1ee2, 0x1ee2, - 0x1ee3, 0x1ee4, 0x1ee5, 0x1ee5, 0x1ee6, 0x1ee7, 0x1ee8, 0x1ee9, - 0x1eea, 0x1eeb, 0x1eec, 0x1eee, 0x1eef, 0x1ef0, 0x1ef1, 0x1ef3, - 0x1ef4, 0x1ef5, 0x1ef7, 0x1ef8, 0x1efa, 0x1efb, 0x1efd, 0x1eff, - 0x1f00, 0x1f00, 0x1f00, 0x1f00, 0x1f01, 0x1f01, 0x1f02, 0x1f02, - 0x1f03, 0x1f04, 0x1f05, 0x1f05, 0x1f06, 0x1f07, 0x1f08, 0x1f09, - 0x1f0a, 0x1f0b, 0x1f0c, 0x1f0e, 0x1f0f, 0x1f10, 0x1f11, 0x1f13, - 0x1f14, 0x1f15, 0x1f17, 0x1f18, 0x1f1a, 0x1f1b, 0x1f1d, 0x1f1f, - 0x1f40, 0x1f40, 0x1f40, 0x1f40, 0x1f41, 0x1f41, 0x1f42, 0x1f42, - 0x1f43, 0x1f44, 0x1f45, 0x1f45, 0x1f46, 0x1f47, 0x1f48, 0x1f49, - 0x1f4a, 0x1f4b, 0x1f4c, 0x1f4e, 0x1f4f, 0x1f50, 0x1f51, 0x1f53, - 0x1f54, 0x1f55, 0x1f57, 0x1f58, 0x1f5a, 0x1f5b, 0x1f5d, 0x1f5f, - 0x1f60, 0x1f60, 0x1f60, 0x1f60, 0x1f61, 0x1f61, 0x1f62, 0x1f62, - 0x1f63, 0x1f64, 0x1f65, 0x1f65, 0x1f66, 0x1f67, 0x1f68, 0x1f69, - 0x1f6a, 0x1f6b, 0x1f6c, 0x1f6e, 0x1f6f, 0x1f70, 0x1f71, 0x1f73, - 0x1f74, 0x1f75, 0x1f77, 0x1f78, 0x1f7a, 0x1f7b, 0x1f7d, 0x1f7f, - 0x1fa0, 0x1fa0, 0x1fa0, 0x1fa0, 0x1fa1, 0x1fa1, 0x1fa2, 0x1fa2, - 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fa8, 0x1fa9, - 0x1faa, 0x1fab, 0x1fac, 0x1fae, 0x1faf, 0x1fb0, 0x1fb1, 0x1fb3, - 0x1fb4, 0x1fb5, 0x1fb7, 0x1fb8, 0x1fba, 0x1fbb, 0x1fbd, 0x1fbf, - 0x1fe0, 0x1fe0, 0x1fe0, 0x1fe0, 0x1fe1, 0x1fe1, 0x1fe2, 0x1fe2, - 0x1fe3, 0x1fe4, 0x1fe5, 0x1fe5, 0x1fe6, 0x1fe7, 0x1fe8, 0x1fe9, - 0x1fea, 0x1feb, 0x1fec, 0x1fee, 0x1fef, 0x1ff0, 0x1ff1, 0x1ff3, - 0x1ff4, 0x1ff5, 0x1ff7, 0x1ff8, 0x1ffa, 0x1ffb, 0x1ffd, 0x1fff, - 0x2000, 0x2000, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, - 0x2003, 0x2004, 0x2005, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, - 0x200a, 0x200b, 0x200c, 0x200e, 0x200f, 0x2010, 0x2011, 0x2013, - 0x2014, 0x2015, 0x2017, 0x2018, 0x201a, 0x201b, 0x201d, 0x201f, - 0x2000, 0x2000, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, - 0x2003, 0x2004, 0x2005, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, - 0x200a, 0x200b, 0x200c, 0x200e, 0x200f, 0x2010, 0x2011, 0x2013, - 0x2014, 0x2015, 0x2017, 0x2018, 0x201a, 0x201b, 0x201d, 0x201f, - 0x2000, 0x2000, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, - 0x2003, 0x2004, 0x2005, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, - 0x200a, 0x200b, 0x200c, 0x200e, 0x200f, 0x2010, 0x2011, 0x2013, - 0x2014, 0x2015, 0x2017, 0x2018, 0x201a, 0x201b, 0x201d, 0x201f, - 0x2000, 0x2000, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, - 0x2003, 0x2004, 0x2005, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, - 0x200a, 0x200b, 0x200c, 0x200e, 0x200f, 0x2010, 0x2011, 0x2013, - 0x2014, 0x2015, 0x2017, 0x2018, 0x201a, 0x201b, 0x201d, 0x201f, - 0x2000, 0x2000, 0x2000, 0x2000, 0x2001, 0x2001, 0x2002, 0x2002, - 0x2003, 0x2004, 0x2005, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, - 0x200a, 0x200b, 0x200c, 0x200e, 0x200f, 0x2010, 0x2011, 0x2013, - 0x2014, 0x2015, 0x2017, 0x2018, 0x201a, 0x201b, 0x201d, 0x201f, - 0x2020, 0x2020, 0x2020, 0x2020, 0x2021, 0x2021, 0x2022, 0x2022, - 0x2023, 0x2024, 0x2025, 0x2025, 0x2026, 0x2027, 0x2028, 0x2029, - 0x202a, 0x202b, 0x202c, 0x202e, 0x202f, 0x2030, 0x2031, 0x2033, - 0x2034, 0x2035, 0x2037, 0x2038, 0x203a, 0x203b, 0x203d, 0x203f, - 0x2020, 0x2020, 0x2020, 0x2020, 0x2021, 0x2021, 0x2022, 0x2022, - 0x2023, 0x2024, 0x2025, 0x2025, 0x2026, 0x2027, 0x2028, 0x2029, - 0x202a, 0x202b, 0x202c, 0x202e, 0x202f, 0x2030, 0x2031, 0x2033, - 0x2034, 0x2035, 0x2037, 0x2038, 0x203a, 0x203b, 0x203d, 0x203f, - 0x2020, 0x2020, 0x2020, 0x2020, 0x2021, 0x2021, 0x2022, 0x2022, - 0x2023, 0x2024, 0x2025, 0x2025, 0x2026, 0x2027, 0x2028, 0x2029, - 0x202a, 0x202b, 0x202c, 0x202e, 0x202f, 0x2030, 0x2031, 0x2033, - 0x2034, 0x2035, 0x2037, 0x2038, 0x203a, 0x203b, 0x203d, 0x203f, - 0x2040, 0x2040, 0x2040, 0x2040, 0x2041, 0x2041, 0x2042, 0x2042, - 0x2043, 0x2044, 0x2045, 0x2045, 0x2046, 0x2047, 0x2048, 0x2049, - 0x204a, 0x204b, 0x204c, 0x204e, 0x204f, 0x2050, 0x2051, 0x2053, - 0x2054, 0x2055, 0x2057, 0x2058, 0x205a, 0x205b, 0x205d, 0x205f, - 0x2040, 0x2040, 0x2040, 0x2040, 0x2041, 0x2041, 0x2042, 0x2042, - 0x2043, 0x2044, 0x2045, 0x2045, 0x2046, 0x2047, 0x2048, 0x2049, - 0x204a, 0x204b, 0x204c, 0x204e, 0x204f, 0x2050, 0x2051, 0x2053, - 0x2054, 0x2055, 0x2057, 0x2058, 0x205a, 0x205b, 0x205d, 0x205f, - 0x2060, 0x2060, 0x2060, 0x2060, 0x2061, 0x2061, 0x2062, 0x2062, - 0x2063, 0x2064, 0x2065, 0x2065, 0x2066, 0x2067, 0x2068, 0x2069, - 0x206a, 0x206b, 0x206c, 0x206e, 0x206f, 0x2070, 0x2071, 0x2073, - 0x2074, 0x2075, 0x2077, 0x2078, 0x207a, 0x207b, 0x207d, 0x207f, - 0x2060, 0x2060, 0x2060, 0x2060, 0x2061, 0x2061, 0x2062, 0x2062, - 0x2063, 0x2064, 0x2065, 0x2065, 0x2066, 0x2067, 0x2068, 0x2069, - 0x206a, 0x206b, 0x206c, 0x206e, 0x206f, 0x2070, 0x2071, 0x2073, - 0x2074, 0x2075, 0x2077, 0x2078, 0x207a, 0x207b, 0x207d, 0x207f, - 0x2080, 0x2080, 0x2080, 0x2080, 0x2081, 0x2081, 0x2082, 0x2082, - 0x2083, 0x2084, 0x2085, 0x2085, 0x2086, 0x2087, 0x2088, 0x2089, - 0x208a, 0x208b, 0x208c, 0x208e, 0x208f, 0x2090, 0x2091, 0x2093, - 0x2094, 0x2095, 0x2097, 0x2098, 0x209a, 0x209b, 0x209d, 0x209f, - 0x20a0, 0x20a0, 0x20a0, 0x20a0, 0x20a1, 0x20a1, 0x20a2, 0x20a2, - 0x20a3, 0x20a4, 0x20a5, 0x20a5, 0x20a6, 0x20a7, 0x20a8, 0x20a9, - 0x20aa, 0x20ab, 0x20ac, 0x20ae, 0x20af, 0x20b0, 0x20b1, 0x20b3, - 0x20b4, 0x20b5, 0x20b7, 0x20b8, 0x20ba, 0x20bb, 0x20bd, 0x20bf, - 0x20a0, 0x20a0, 0x20a0, 0x20a0, 0x20a1, 0x20a1, 0x20a2, 0x20a2, - 0x20a3, 0x20a4, 0x20a5, 0x20a5, 0x20a6, 0x20a7, 0x20a8, 0x20a9, - 0x20aa, 0x20ab, 0x20ac, 0x20ae, 0x20af, 0x20b0, 0x20b1, 0x20b3, - 0x20b4, 0x20b5, 0x20b7, 0x20b8, 0x20ba, 0x20bb, 0x20bd, 0x20bf, - 0x20c0, 0x20c0, 0x20c0, 0x20c0, 0x20c1, 0x20c1, 0x20c2, 0x20c2, - 0x20c3, 0x20c4, 0x20c5, 0x20c5, 0x20c6, 0x20c7, 0x20c8, 0x20c9, - 0x20ca, 0x20cb, 0x20cc, 0x20ce, 0x20cf, 0x20d0, 0x20d1, 0x20d3, - 0x20d4, 0x20d5, 0x20d7, 0x20d8, 0x20da, 0x20db, 0x20dd, 0x20df, - 0x20e0, 0x20e0, 0x20e0, 0x20e0, 0x20e1, 0x20e1, 0x20e2, 0x20e2, - 0x20e3, 0x20e4, 0x20e5, 0x20e5, 0x20e6, 0x20e7, 0x20e8, 0x20e9, - 0x20ea, 0x20eb, 0x20ec, 0x20ee, 0x20ef, 0x20f0, 0x20f1, 0x20f3, - 0x20f4, 0x20f5, 0x20f7, 0x20f8, 0x20fa, 0x20fb, 0x20fd, 0x20ff, - 0x20e0, 0x20e0, 0x20e0, 0x20e0, 0x20e1, 0x20e1, 0x20e2, 0x20e2, - 0x20e3, 0x20e4, 0x20e5, 0x20e5, 0x20e6, 0x20e7, 0x20e8, 0x20e9, - 0x20ea, 0x20eb, 0x20ec, 0x20ee, 0x20ef, 0x20f0, 0x20f1, 0x20f3, - 0x20f4, 0x20f5, 0x20f7, 0x20f8, 0x20fa, 0x20fb, 0x20fd, 0x20ff, - 0x2100, 0x2100, 0x2100, 0x2100, 0x2101, 0x2101, 0x2102, 0x2102, - 0x2103, 0x2104, 0x2105, 0x2105, 0x2106, 0x2107, 0x2108, 0x2109, - 0x210a, 0x210b, 0x210c, 0x210e, 0x210f, 0x2110, 0x2111, 0x2113, - 0x2114, 0x2115, 0x2117, 0x2118, 0x211a, 0x211b, 0x211d, 0x211f, - 0x2120, 0x2120, 0x2120, 0x2120, 0x2121, 0x2121, 0x2122, 0x2122, - 0x2123, 0x2124, 0x2125, 0x2125, 0x2126, 0x2127, 0x2128, 0x2129, - 0x212a, 0x212b, 0x212c, 0x212e, 0x212f, 0x2130, 0x2131, 0x2133, - 0x2134, 0x2135, 0x2137, 0x2138, 0x213a, 0x213b, 0x213d, 0x213f, - 0x2140, 0x2140, 0x2140, 0x2140, 0x2141, 0x2141, 0x2142, 0x2142, - 0x2143, 0x2144, 0x2145, 0x2145, 0x2146, 0x2147, 0x2148, 0x2149, - 0x214a, 0x214b, 0x214c, 0x214e, 0x214f, 0x2150, 0x2151, 0x2153, - 0x2154, 0x2155, 0x2157, 0x2158, 0x215a, 0x215b, 0x215d, 0x215f, - 0x2140, 0x2140, 0x2140, 0x2140, 0x2141, 0x2141, 0x2142, 0x2142, - 0x2143, 0x2144, 0x2145, 0x2145, 0x2146, 0x2147, 0x2148, 0x2149, - 0x214a, 0x214b, 0x214c, 0x214e, 0x214f, 0x2150, 0x2151, 0x2153, - 0x2154, 0x2155, 0x2157, 0x2158, 0x215a, 0x215b, 0x215d, 0x215f, - 0x2160, 0x2160, 0x2160, 0x2160, 0x2161, 0x2161, 0x2162, 0x2162, - 0x2163, 0x2164, 0x2165, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, - 0x216a, 0x216b, 0x216c, 0x216e, 0x216f, 0x2170, 0x2171, 0x2173, - 0x2174, 0x2175, 0x2177, 0x2178, 0x217a, 0x217b, 0x217d, 0x217f, - 0x2180, 0x2180, 0x2180, 0x2180, 0x2181, 0x2181, 0x2182, 0x2182, - 0x2183, 0x2184, 0x2185, 0x2185, 0x2186, 0x2187, 0x2188, 0x2189, - 0x218a, 0x218b, 0x218c, 0x218e, 0x218f, 0x2190, 0x2191, 0x2193, - 0x2194, 0x2195, 0x2197, 0x2198, 0x219a, 0x219b, 0x219d, 0x219f, - 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a1, 0x21a1, 0x21a2, 0x21a2, - 0x21a3, 0x21a4, 0x21a5, 0x21a5, 0x21a6, 0x21a7, 0x21a8, 0x21a9, - 0x21aa, 0x21ab, 0x21ac, 0x21ae, 0x21af, 0x21b0, 0x21b1, 0x21b3, - 0x21b4, 0x21b5, 0x21b7, 0x21b8, 0x21ba, 0x21bb, 0x21bd, 0x21bf, - 0x21c0, 0x21c0, 0x21c0, 0x21c0, 0x21c1, 0x21c1, 0x21c2, 0x21c2, - 0x21c3, 0x21c4, 0x21c5, 0x21c5, 0x21c6, 0x21c7, 0x21c8, 0x21c9, - 0x21ca, 0x21cb, 0x21cc, 0x21ce, 0x21cf, 0x21d0, 0x21d1, 0x21d3, - 0x21d4, 0x21d5, 0x21d7, 0x21d8, 0x21da, 0x21db, 0x21dd, 0x21df, - 0x21e0, 0x21e0, 0x21e0, 0x21e0, 0x21e1, 0x21e1, 0x21e2, 0x21e2, - 0x21e3, 0x21e4, 0x21e5, 0x21e5, 0x21e6, 0x21e7, 0x21e8, 0x21e9, - 0x21ea, 0x21eb, 0x21ec, 0x21ee, 0x21ef, 0x21f0, 0x21f1, 0x21f3, - 0x21f4, 0x21f5, 0x21f7, 0x21f8, 0x21fa, 0x21fb, 0x21fd, 0x21ff, - 0x2200, 0x2200, 0x2200, 0x2200, 0x2201, 0x2201, 0x2202, 0x2202, - 0x2203, 0x2204, 0x2205, 0x2205, 0x2206, 0x2207, 0x2208, 0x2209, - 0x220a, 0x220b, 0x220c, 0x220e, 0x220f, 0x2210, 0x2211, 0x2213, - 0x2214, 0x2215, 0x2217, 0x2218, 0x221a, 0x221b, 0x221d, 0x221f, - 0x2220, 0x2220, 0x2220, 0x2220, 0x2221, 0x2221, 0x2222, 0x2222, - 0x2223, 0x2224, 0x2225, 0x2225, 0x2226, 0x2227, 0x2228, 0x2229, - 0x222a, 0x222b, 0x222c, 0x222e, 0x222f, 0x2230, 0x2231, 0x2233, - 0x2234, 0x2235, 0x2237, 0x2238, 0x223a, 0x223b, 0x223d, 0x223f, - 0x2240, 0x2240, 0x2240, 0x2240, 0x2241, 0x2241, 0x2242, 0x2242, - 0x2243, 0x2244, 0x2245, 0x2245, 0x2246, 0x2247, 0x2248, 0x2249, - 0x224a, 0x224b, 0x224c, 0x224e, 0x224f, 0x2250, 0x2251, 0x2253, - 0x2254, 0x2255, 0x2257, 0x2258, 0x225a, 0x225b, 0x225d, 0x225f, - 0x2260, 0x2260, 0x2260, 0x2260, 0x2261, 0x2261, 0x2262, 0x2262, - 0x2263, 0x2264, 0x2265, 0x2265, 0x2266, 0x2267, 0x2268, 0x2269, - 0x226a, 0x226b, 0x226c, 0x226e, 0x226f, 0x2270, 0x2271, 0x2273, - 0x2274, 0x2275, 0x2277, 0x2278, 0x227a, 0x227b, 0x227d, 0x227f, - 0x2280, 0x2280, 0x2280, 0x2280, 0x2281, 0x2281, 0x2282, 0x2282, - 0x2283, 0x2284, 0x2285, 0x2285, 0x2286, 0x2287, 0x2288, 0x2289, - 0x228a, 0x228b, 0x228c, 0x228e, 0x228f, 0x2290, 0x2291, 0x2293, - 0x2294, 0x2295, 0x2297, 0x2298, 0x229a, 0x229b, 0x229d, 0x229f, - 0x22a0, 0x22a0, 0x22a0, 0x22a0, 0x22a1, 0x22a1, 0x22a2, 0x22a2, - 0x22a3, 0x22a4, 0x22a5, 0x22a5, 0x22a6, 0x22a7, 0x22a8, 0x22a9, - 0x22aa, 0x22ab, 0x22ac, 0x22ae, 0x22af, 0x22b0, 0x22b1, 0x22b3, - 0x22b4, 0x22b5, 0x22b7, 0x22b8, 0x22ba, 0x22bb, 0x22bd, 0x22bf, - 0x22c0, 0x22c0, 0x22c0, 0x22c0, 0x22c1, 0x22c1, 0x22c2, 0x22c2, - 0x22c3, 0x22c4, 0x22c5, 0x22c5, 0x22c6, 0x22c7, 0x22c8, 0x22c9, - 0x22ca, 0x22cb, 0x22cc, 0x22ce, 0x22cf, 0x22d0, 0x22d1, 0x22d3, - 0x22d4, 0x22d5, 0x22d7, 0x22d8, 0x22da, 0x22db, 0x22dd, 0x22df, - 0x22e0, 0x22e0, 0x22e0, 0x22e0, 0x22e1, 0x22e1, 0x22e2, 0x22e2, - 0x22e3, 0x22e4, 0x22e5, 0x22e5, 0x22e6, 0x22e7, 0x22e8, 0x22e9, - 0x22ea, 0x22eb, 0x22ec, 0x22ee, 0x22ef, 0x22f0, 0x22f1, 0x22f3, - 0x22f4, 0x22f5, 0x22f7, 0x22f8, 0x22fa, 0x22fb, 0x22fd, 0x22ff, - 0x2300, 0x2300, 0x2300, 0x2300, 0x2301, 0x2301, 0x2302, 0x2302, - 0x2303, 0x2304, 0x2305, 0x2305, 0x2306, 0x2307, 0x2308, 0x2309, - 0x230a, 0x230b, 0x230c, 0x230e, 0x230f, 0x2310, 0x2311, 0x2313, - 0x2314, 0x2315, 0x2317, 0x2318, 0x231a, 0x231b, 0x231d, 0x231f, - 0x2320, 0x2320, 0x2320, 0x2320, 0x2321, 0x2321, 0x2322, 0x2322, - 0x2323, 0x2324, 0x2325, 0x2325, 0x2326, 0x2327, 0x2328, 0x2329, - 0x232a, 0x232b, 0x232c, 0x232e, 0x232f, 0x2330, 0x2331, 0x2333, - 0x2334, 0x2335, 0x2337, 0x2338, 0x233a, 0x233b, 0x233d, 0x233f, - 0x2340, 0x2340, 0x2340, 0x2340, 0x2341, 0x2341, 0x2342, 0x2342, - 0x2343, 0x2344, 0x2345, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, - 0x234a, 0x234b, 0x234c, 0x234e, 0x234f, 0x2350, 0x2351, 0x2353, - 0x2354, 0x2355, 0x2357, 0x2358, 0x235a, 0x235b, 0x235d, 0x235f, - 0x2380, 0x2380, 0x2380, 0x2380, 0x2381, 0x2381, 0x2382, 0x2382, - 0x2383, 0x2384, 0x2385, 0x2385, 0x2386, 0x2387, 0x2388, 0x2389, - 0x238a, 0x238b, 0x238c, 0x238e, 0x238f, 0x2390, 0x2391, 0x2393, - 0x2394, 0x2395, 0x2397, 0x2398, 0x239a, 0x239b, 0x239d, 0x239f, - 0x23a0, 0x23a0, 0x23a0, 0x23a0, 0x23a1, 0x23a1, 0x23a2, 0x23a2, - 0x23a3, 0x23a4, 0x23a5, 0x23a5, 0x23a6, 0x23a7, 0x23a8, 0x23a9, - 0x23aa, 0x23ab, 0x23ac, 0x23ae, 0x23af, 0x23b0, 0x23b1, 0x23b3, - 0x23b4, 0x23b5, 0x23b7, 0x23b8, 0x23ba, 0x23bb, 0x23bd, 0x23bf, - 0x23c0, 0x23c0, 0x23c0, 0x23c0, 0x23c1, 0x23c1, 0x23c2, 0x23c2, - 0x23c3, 0x23c4, 0x23c5, 0x23c5, 0x23c6, 0x23c7, 0x23c8, 0x23c9, - 0x23ca, 0x23cb, 0x23cc, 0x23ce, 0x23cf, 0x23d0, 0x23d1, 0x23d3, - 0x23d4, 0x23d5, 0x23d7, 0x23d8, 0x23da, 0x23db, 0x23dd, 0x23df, - 0x23e0, 0x23e0, 0x23e0, 0x23e0, 0x23e1, 0x23e1, 0x23e2, 0x23e2, - 0x23e3, 0x23e4, 0x23e5, 0x23e5, 0x23e6, 0x23e7, 0x23e8, 0x23e9, - 0x23ea, 0x23eb, 0x23ec, 0x23ee, 0x23ef, 0x23f0, 0x23f1, 0x23f3, - 0x23f4, 0x23f5, 0x23f7, 0x23f8, 0x23fa, 0x23fb, 0x23fd, 0x23ff, - 0x2400, 0x2400, 0x2400, 0x2400, 0x2401, 0x2401, 0x2402, 0x2402, - 0x2403, 0x2404, 0x2405, 0x2405, 0x2406, 0x2407, 0x2408, 0x2409, - 0x240a, 0x240b, 0x240c, 0x240e, 0x240f, 0x2410, 0x2411, 0x2413, - 0x2414, 0x2415, 0x2417, 0x2418, 0x241a, 0x241b, 0x241d, 0x241f, - 0x2440, 0x2440, 0x2440, 0x2440, 0x2441, 0x2441, 0x2442, 0x2442, - 0x2443, 0x2444, 0x2445, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, - 0x244a, 0x244b, 0x244c, 0x244e, 0x244f, 0x2450, 0x2451, 0x2453, - 0x2454, 0x2455, 0x2457, 0x2458, 0x245a, 0x245b, 0x245d, 0x245f, - 0x2460, 0x2460, 0x2460, 0x2460, 0x2461, 0x2461, 0x2462, 0x2462, - 0x2463, 0x2464, 0x2465, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, - 0x246a, 0x246b, 0x246c, 0x246e, 0x246f, 0x2470, 0x2471, 0x2473, - 0x2474, 0x2475, 0x2477, 0x2478, 0x247a, 0x247b, 0x247d, 0x247f, - 0x2480, 0x2480, 0x2480, 0x2480, 0x2481, 0x2481, 0x2482, 0x2482, - 0x2483, 0x2484, 0x2485, 0x2485, 0x2486, 0x2487, 0x2488, 0x2489, - 0x248a, 0x248b, 0x248c, 0x248e, 0x248f, 0x2490, 0x2491, 0x2493, - 0x2494, 0x2495, 0x2497, 0x2498, 0x249a, 0x249b, 0x249d, 0x249f, - 0x24c0, 0x24c0, 0x24c0, 0x24c0, 0x24c1, 0x24c1, 0x24c2, 0x24c2, - 0x24c3, 0x24c4, 0x24c5, 0x24c5, 0x24c6, 0x24c7, 0x24c8, 0x24c9, - 0x24ca, 0x24cb, 0x24cc, 0x24ce, 0x24cf, 0x24d0, 0x24d1, 0x24d3, - 0x24d4, 0x24d5, 0x24d7, 0x24d8, 0x24da, 0x24db, 0x24dd, 0x24df, - 0x24e0, 0x24e0, 0x24e0, 0x24e0, 0x24e1, 0x24e1, 0x24e2, 0x24e2, - 0x24e3, 0x24e4, 0x24e5, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, - 0x24ea, 0x24eb, 0x24ec, 0x24ee, 0x24ef, 0x24f0, 0x24f1, 0x24f3, - 0x24f4, 0x24f5, 0x24f7, 0x24f8, 0x24fa, 0x24fb, 0x24fd, 0x24ff, - 0x2500, 0x2500, 0x2500, 0x2500, 0x2501, 0x2501, 0x2502, 0x2502, - 0x2503, 0x2504, 0x2505, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, - 0x250a, 0x250b, 0x250c, 0x250e, 0x250f, 0x2510, 0x2511, 0x2513, - 0x2514, 0x2515, 0x2517, 0x2518, 0x251a, 0x251b, 0x251d, 0x251f, - 0x2540, 0x2540, 0x2540, 0x2540, 0x2541, 0x2541, 0x2542, 0x2542, - 0x2543, 0x2544, 0x2545, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, - 0x254a, 0x254b, 0x254c, 0x254e, 0x254f, 0x2550, 0x2551, 0x2553, - 0x2554, 0x2555, 0x2557, 0x2558, 0x255a, 0x255b, 0x255d, 0x255f, - 0x2560, 0x2560, 0x2560, 0x2560, 0x2561, 0x2561, 0x2562, 0x2562, - 0x2563, 0x2564, 0x2565, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, - 0x256a, 0x256b, 0x256c, 0x256e, 0x256f, 0x2570, 0x2571, 0x2573, - 0x2574, 0x2575, 0x2577, 0x2578, 0x257a, 0x257b, 0x257d, 0x257f, - 0x2580, 0x2580, 0x2580, 0x2580, 0x2581, 0x2581, 0x2582, 0x2582, - 0x2583, 0x2584, 0x2585, 0x2585, 0x2586, 0x2587, 0x2588, 0x2589, - 0x258a, 0x258b, 0x258c, 0x258e, 0x258f, 0x2590, 0x2591, 0x2593, - 0x2594, 0x2595, 0x2597, 0x2598, 0x259a, 0x259b, 0x259d, 0x259f, - 0x25c0, 0x25c0, 0x25c0, 0x25c0, 0x25c1, 0x25c1, 0x25c2, 0x25c2, - 0x25c3, 0x25c4, 0x25c5, 0x25c5, 0x25c6, 0x25c7, 0x25c8, 0x25c9, - 0x25ca, 0x25cb, 0x25cc, 0x25ce, 0x25cf, 0x25d0, 0x25d1, 0x25d3, - 0x25d4, 0x25d5, 0x25d7, 0x25d8, 0x25da, 0x25db, 0x25dd, 0x25df, - 0x25e0, 0x25e0, 0x25e0, 0x25e0, 0x25e1, 0x25e1, 0x25e2, 0x25e2, - 0x25e3, 0x25e4, 0x25e5, 0x25e5, 0x25e6, 0x25e7, 0x25e8, 0x25e9, - 0x25ea, 0x25eb, 0x25ec, 0x25ee, 0x25ef, 0x25f0, 0x25f1, 0x25f3, - 0x25f4, 0x25f5, 0x25f7, 0x25f8, 0x25fa, 0x25fb, 0x25fd, 0x25ff, - 0x2620, 0x2620, 0x2620, 0x2620, 0x2621, 0x2621, 0x2622, 0x2622, - 0x2623, 0x2624, 0x2625, 0x2625, 0x2626, 0x2627, 0x2628, 0x2629, - 0x262a, 0x262b, 0x262c, 0x262e, 0x262f, 0x2630, 0x2631, 0x2633, - 0x2634, 0x2635, 0x2637, 0x2638, 0x263a, 0x263b, 0x263d, 0x263f, - 0x2640, 0x2640, 0x2640, 0x2640, 0x2641, 0x2641, 0x2642, 0x2642, - 0x2643, 0x2644, 0x2645, 0x2645, 0x2646, 0x2647, 0x2648, 0x2649, - 0x264a, 0x264b, 0x264c, 0x264e, 0x264f, 0x2650, 0x2651, 0x2653, - 0x2654, 0x2655, 0x2657, 0x2658, 0x265a, 0x265b, 0x265d, 0x265f, - 0x2680, 0x2680, 0x2680, 0x2680, 0x2681, 0x2681, 0x2682, 0x2682, - 0x2683, 0x2684, 0x2685, 0x2685, 0x2686, 0x2687, 0x2688, 0x2689, - 0x268a, 0x268b, 0x268c, 0x268e, 0x268f, 0x2690, 0x2691, 0x2693, - 0x2694, 0x2695, 0x2697, 0x2698, 0x269a, 0x269b, 0x269d, 0x269f, - 0x26a0, 0x26a0, 0x26a0, 0x26a0, 0x26a1, 0x26a1, 0x26a2, 0x26a2, - 0x26a3, 0x26a4, 0x26a5, 0x26a5, 0x26a6, 0x26a7, 0x26a8, 0x26a9, - 0x26aa, 0x26ab, 0x26ac, 0x26ae, 0x26af, 0x26b0, 0x26b1, 0x26b3, - 0x26b4, 0x26b5, 0x26b7, 0x26b8, 0x26ba, 0x26bb, 0x26bd, 0x26bf, - 0x26e0, 0x26e0, 0x26e0, 0x26e0, 0x26e1, 0x26e1, 0x26e2, 0x26e2, - 0x26e3, 0x26e4, 0x26e5, 0x26e5, 0x26e6, 0x26e7, 0x26e8, 0x26e9, - 0x26ea, 0x26eb, 0x26ec, 0x26ee, 0x26ef, 0x26f0, 0x26f1, 0x26f3, - 0x26f4, 0x26f5, 0x26f7, 0x26f8, 0x26fa, 0x26fb, 0x26fd, 0x26ff, - 0x2700, 0x2700, 0x2700, 0x2700, 0x2701, 0x2701, 0x2702, 0x2702, - 0x2703, 0x2704, 0x2705, 0x2705, 0x2706, 0x2707, 0x2708, 0x2709, - 0x270a, 0x270b, 0x270c, 0x270e, 0x270f, 0x2710, 0x2711, 0x2713, - 0x2714, 0x2715, 0x2717, 0x2718, 0x271a, 0x271b, 0x271d, 0x271f, - 0x2740, 0x2740, 0x2740, 0x2740, 0x2741, 0x2741, 0x2742, 0x2742, - 0x2743, 0x2744, 0x2745, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, - 0x274a, 0x274b, 0x274c, 0x274e, 0x274f, 0x2750, 0x2751, 0x2753, - 0x2754, 0x2755, 0x2757, 0x2758, 0x275a, 0x275b, 0x275d, 0x275f, - 0x2760, 0x2760, 0x2760, 0x2760, 0x2761, 0x2761, 0x2762, 0x2762, - 0x2763, 0x2764, 0x2765, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, - 0x276a, 0x276b, 0x276c, 0x276e, 0x276f, 0x2770, 0x2771, 0x2773, - 0x2774, 0x2775, 0x2777, 0x2778, 0x277a, 0x277b, 0x277d, 0x277f, - 0x27a0, 0x27a0, 0x27a0, 0x27a0, 0x27a1, 0x27a1, 0x27a2, 0x27a2, - 0x27a3, 0x27a4, 0x27a5, 0x27a5, 0x27a6, 0x27a7, 0x27a8, 0x27a9, - 0x27aa, 0x27ab, 0x27ac, 0x27ae, 0x27af, 0x27b0, 0x27b1, 0x27b3, - 0x27b4, 0x27b5, 0x27b7, 0x27b8, 0x27ba, 0x27bb, 0x27bd, 0x27bf, - 0x27e0, 0x27e0, 0x27e0, 0x27e0, 0x27e1, 0x27e1, 0x27e2, 0x27e2, - 0x27e3, 0x27e4, 0x27e5, 0x27e5, 0x27e6, 0x27e7, 0x27e8, 0x27e9, - 0x27ea, 0x27eb, 0x27ec, 0x27ee, 0x27ef, 0x27f0, 0x27f1, 0x27f3, - 0x27f4, 0x27f5, 0x27f7, 0x27f8, 0x27fa, 0x27fb, 0x27fd, 0x27ff, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2820, 0x2820, 0x2820, 0x2820, 0x2821, 0x2821, 0x2822, 0x2822, - 0x2823, 0x2824, 0x2825, 0x2825, 0x2826, 0x2827, 0x2828, 0x2829, - 0x282a, 0x282b, 0x282c, 0x282e, 0x282f, 0x2830, 0x2831, 0x2833, - 0x2834, 0x2835, 0x2837, 0x2838, 0x283a, 0x283b, 0x283d, 0x283f, - 0x2820, 0x2820, 0x2820, 0x2820, 0x2821, 0x2821, 0x2822, 0x2822, - 0x2823, 0x2824, 0x2825, 0x2825, 0x2826, 0x2827, 0x2828, 0x2829, - 0x282a, 0x282b, 0x282c, 0x282e, 0x282f, 0x2830, 0x2831, 0x2833, - 0x2834, 0x2835, 0x2837, 0x2838, 0x283a, 0x283b, 0x283d, 0x283f, - 0x2820, 0x2820, 0x2820, 0x2820, 0x2821, 0x2821, 0x2822, 0x2822, - 0x2823, 0x2824, 0x2825, 0x2825, 0x2826, 0x2827, 0x2828, 0x2829, - 0x282a, 0x282b, 0x282c, 0x282e, 0x282f, 0x2830, 0x2831, 0x2833, - 0x2834, 0x2835, 0x2837, 0x2838, 0x283a, 0x283b, 0x283d, 0x283f, - 0x2840, 0x2840, 0x2840, 0x2840, 0x2841, 0x2841, 0x2842, 0x2842, - 0x2843, 0x2844, 0x2845, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, - 0x284a, 0x284b, 0x284c, 0x284e, 0x284f, 0x2850, 0x2851, 0x2853, - 0x2854, 0x2855, 0x2857, 0x2858, 0x285a, 0x285b, 0x285d, 0x285f, - 0x2840, 0x2840, 0x2840, 0x2840, 0x2841, 0x2841, 0x2842, 0x2842, - 0x2843, 0x2844, 0x2845, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, - 0x284a, 0x284b, 0x284c, 0x284e, 0x284f, 0x2850, 0x2851, 0x2853, - 0x2854, 0x2855, 0x2857, 0x2858, 0x285a, 0x285b, 0x285d, 0x285f, - 0x2860, 0x2860, 0x2860, 0x2860, 0x2861, 0x2861, 0x2862, 0x2862, - 0x2863, 0x2864, 0x2865, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, - 0x286a, 0x286b, 0x286c, 0x286e, 0x286f, 0x2870, 0x2871, 0x2873, - 0x2874, 0x2875, 0x2877, 0x2878, 0x287a, 0x287b, 0x287d, 0x287f, - 0x2860, 0x2860, 0x2860, 0x2860, 0x2861, 0x2861, 0x2862, 0x2862, - 0x2863, 0x2864, 0x2865, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, - 0x286a, 0x286b, 0x286c, 0x286e, 0x286f, 0x2870, 0x2871, 0x2873, - 0x2874, 0x2875, 0x2877, 0x2878, 0x287a, 0x287b, 0x287d, 0x287f, - 0x2880, 0x2880, 0x2880, 0x2880, 0x2881, 0x2881, 0x2882, 0x2882, - 0x2883, 0x2884, 0x2885, 0x2885, 0x2886, 0x2887, 0x2888, 0x2889, - 0x288a, 0x288b, 0x288c, 0x288e, 0x288f, 0x2890, 0x2891, 0x2893, - 0x2894, 0x2895, 0x2897, 0x2898, 0x289a, 0x289b, 0x289d, 0x289f, - 0x28a0, 0x28a0, 0x28a0, 0x28a0, 0x28a1, 0x28a1, 0x28a2, 0x28a2, - 0x28a3, 0x28a4, 0x28a5, 0x28a5, 0x28a6, 0x28a7, 0x28a8, 0x28a9, - 0x28aa, 0x28ab, 0x28ac, 0x28ae, 0x28af, 0x28b0, 0x28b1, 0x28b3, - 0x28b4, 0x28b5, 0x28b7, 0x28b8, 0x28ba, 0x28bb, 0x28bd, 0x28bf, - 0x28a0, 0x28a0, 0x28a0, 0x28a0, 0x28a1, 0x28a1, 0x28a2, 0x28a2, - 0x28a3, 0x28a4, 0x28a5, 0x28a5, 0x28a6, 0x28a7, 0x28a8, 0x28a9, - 0x28aa, 0x28ab, 0x28ac, 0x28ae, 0x28af, 0x28b0, 0x28b1, 0x28b3, - 0x28b4, 0x28b5, 0x28b7, 0x28b8, 0x28ba, 0x28bb, 0x28bd, 0x28bf, - 0x28c0, 0x28c0, 0x28c0, 0x28c0, 0x28c1, 0x28c1, 0x28c2, 0x28c2, - 0x28c3, 0x28c4, 0x28c5, 0x28c5, 0x28c6, 0x28c7, 0x28c8, 0x28c9, - 0x28ca, 0x28cb, 0x28cc, 0x28ce, 0x28cf, 0x28d0, 0x28d1, 0x28d3, - 0x28d4, 0x28d5, 0x28d7, 0x28d8, 0x28da, 0x28db, 0x28dd, 0x28df, - 0x28e0, 0x28e0, 0x28e0, 0x28e0, 0x28e1, 0x28e1, 0x28e2, 0x28e2, - 0x28e3, 0x28e4, 0x28e5, 0x28e5, 0x28e6, 0x28e7, 0x28e8, 0x28e9, - 0x28ea, 0x28eb, 0x28ec, 0x28ee, 0x28ef, 0x28f0, 0x28f1, 0x28f3, - 0x28f4, 0x28f5, 0x28f7, 0x28f8, 0x28fa, 0x28fb, 0x28fd, 0x28ff, - 0x28e0, 0x28e0, 0x28e0, 0x28e0, 0x28e1, 0x28e1, 0x28e2, 0x28e2, - 0x28e3, 0x28e4, 0x28e5, 0x28e5, 0x28e6, 0x28e7, 0x28e8, 0x28e9, - 0x28ea, 0x28eb, 0x28ec, 0x28ee, 0x28ef, 0x28f0, 0x28f1, 0x28f3, - 0x28f4, 0x28f5, 0x28f7, 0x28f8, 0x28fa, 0x28fb, 0x28fd, 0x28ff, - 0x2900, 0x2900, 0x2900, 0x2900, 0x2901, 0x2901, 0x2902, 0x2902, - 0x2903, 0x2904, 0x2905, 0x2905, 0x2906, 0x2907, 0x2908, 0x2909, - 0x290a, 0x290b, 0x290c, 0x290e, 0x290f, 0x2910, 0x2911, 0x2913, - 0x2914, 0x2915, 0x2917, 0x2918, 0x291a, 0x291b, 0x291d, 0x291f, - 0x2920, 0x2920, 0x2920, 0x2920, 0x2921, 0x2921, 0x2922, 0x2922, - 0x2923, 0x2924, 0x2925, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929, - 0x292a, 0x292b, 0x292c, 0x292e, 0x292f, 0x2930, 0x2931, 0x2933, - 0x2934, 0x2935, 0x2937, 0x2938, 0x293a, 0x293b, 0x293d, 0x293f, - 0x2940, 0x2940, 0x2940, 0x2940, 0x2941, 0x2941, 0x2942, 0x2942, - 0x2943, 0x2944, 0x2945, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, - 0x294a, 0x294b, 0x294c, 0x294e, 0x294f, 0x2950, 0x2951, 0x2953, - 0x2954, 0x2955, 0x2957, 0x2958, 0x295a, 0x295b, 0x295d, 0x295f, - 0x2940, 0x2940, 0x2940, 0x2940, 0x2941, 0x2941, 0x2942, 0x2942, - 0x2943, 0x2944, 0x2945, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, - 0x294a, 0x294b, 0x294c, 0x294e, 0x294f, 0x2950, 0x2951, 0x2953, - 0x2954, 0x2955, 0x2957, 0x2958, 0x295a, 0x295b, 0x295d, 0x295f, - 0x2960, 0x2960, 0x2960, 0x2960, 0x2961, 0x2961, 0x2962, 0x2962, - 0x2963, 0x2964, 0x2965, 0x2965, 0x2966, 0x2967, 0x2968, 0x2969, - 0x296a, 0x296b, 0x296c, 0x296e, 0x296f, 0x2970, 0x2971, 0x2973, - 0x2974, 0x2975, 0x2977, 0x2978, 0x297a, 0x297b, 0x297d, 0x297f, - 0x2980, 0x2980, 0x2980, 0x2980, 0x2981, 0x2981, 0x2982, 0x2982, - 0x2983, 0x2984, 0x2985, 0x2985, 0x2986, 0x2987, 0x2988, 0x2989, - 0x298a, 0x298b, 0x298c, 0x298e, 0x298f, 0x2990, 0x2991, 0x2993, - 0x2994, 0x2995, 0x2997, 0x2998, 0x299a, 0x299b, 0x299d, 0x299f, - 0x29a0, 0x29a0, 0x29a0, 0x29a0, 0x29a1, 0x29a1, 0x29a2, 0x29a2, - 0x29a3, 0x29a4, 0x29a5, 0x29a5, 0x29a6, 0x29a7, 0x29a8, 0x29a9, - 0x29aa, 0x29ab, 0x29ac, 0x29ae, 0x29af, 0x29b0, 0x29b1, 0x29b3, - 0x29b4, 0x29b5, 0x29b7, 0x29b8, 0x29ba, 0x29bb, 0x29bd, 0x29bf, - 0x29c0, 0x29c0, 0x29c0, 0x29c0, 0x29c1, 0x29c1, 0x29c2, 0x29c2, - 0x29c3, 0x29c4, 0x29c5, 0x29c5, 0x29c6, 0x29c7, 0x29c8, 0x29c9, - 0x29ca, 0x29cb, 0x29cc, 0x29ce, 0x29cf, 0x29d0, 0x29d1, 0x29d3, - 0x29d4, 0x29d5, 0x29d7, 0x29d8, 0x29da, 0x29db, 0x29dd, 0x29df, - 0x29e0, 0x29e0, 0x29e0, 0x29e0, 0x29e1, 0x29e1, 0x29e2, 0x29e2, - 0x29e3, 0x29e4, 0x29e5, 0x29e5, 0x29e6, 0x29e7, 0x29e8, 0x29e9, - 0x29ea, 0x29eb, 0x29ec, 0x29ee, 0x29ef, 0x29f0, 0x29f1, 0x29f3, - 0x29f4, 0x29f5, 0x29f7, 0x29f8, 0x29fa, 0x29fb, 0x29fd, 0x29ff, - 0x2a00, 0x2a00, 0x2a00, 0x2a00, 0x2a01, 0x2a01, 0x2a02, 0x2a02, - 0x2a03, 0x2a04, 0x2a05, 0x2a05, 0x2a06, 0x2a07, 0x2a08, 0x2a09, - 0x2a0a, 0x2a0b, 0x2a0c, 0x2a0e, 0x2a0f, 0x2a10, 0x2a11, 0x2a13, - 0x2a14, 0x2a15, 0x2a17, 0x2a18, 0x2a1a, 0x2a1b, 0x2a1d, 0x2a1f, - 0x2a20, 0x2a20, 0x2a20, 0x2a20, 0x2a21, 0x2a21, 0x2a22, 0x2a22, - 0x2a23, 0x2a24, 0x2a25, 0x2a25, 0x2a26, 0x2a27, 0x2a28, 0x2a29, - 0x2a2a, 0x2a2b, 0x2a2c, 0x2a2e, 0x2a2f, 0x2a30, 0x2a31, 0x2a33, - 0x2a34, 0x2a35, 0x2a37, 0x2a38, 0x2a3a, 0x2a3b, 0x2a3d, 0x2a3f, - 0x2a40, 0x2a40, 0x2a40, 0x2a40, 0x2a41, 0x2a41, 0x2a42, 0x2a42, - 0x2a43, 0x2a44, 0x2a45, 0x2a45, 0x2a46, 0x2a47, 0x2a48, 0x2a49, - 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4e, 0x2a4f, 0x2a50, 0x2a51, 0x2a53, - 0x2a54, 0x2a55, 0x2a57, 0x2a58, 0x2a5a, 0x2a5b, 0x2a5d, 0x2a5f, - 0x2a60, 0x2a60, 0x2a60, 0x2a60, 0x2a61, 0x2a61, 0x2a62, 0x2a62, - 0x2a63, 0x2a64, 0x2a65, 0x2a65, 0x2a66, 0x2a67, 0x2a68, 0x2a69, - 0x2a6a, 0x2a6b, 0x2a6c, 0x2a6e, 0x2a6f, 0x2a70, 0x2a71, 0x2a73, - 0x2a74, 0x2a75, 0x2a77, 0x2a78, 0x2a7a, 0x2a7b, 0x2a7d, 0x2a7f, - 0x2a80, 0x2a80, 0x2a80, 0x2a80, 0x2a81, 0x2a81, 0x2a82, 0x2a82, - 0x2a83, 0x2a84, 0x2a85, 0x2a85, 0x2a86, 0x2a87, 0x2a88, 0x2a89, - 0x2a8a, 0x2a8b, 0x2a8c, 0x2a8e, 0x2a8f, 0x2a90, 0x2a91, 0x2a93, - 0x2a94, 0x2a95, 0x2a97, 0x2a98, 0x2a9a, 0x2a9b, 0x2a9d, 0x2a9f, - 0x2aa0, 0x2aa0, 0x2aa0, 0x2aa0, 0x2aa1, 0x2aa1, 0x2aa2, 0x2aa2, - 0x2aa3, 0x2aa4, 0x2aa5, 0x2aa5, 0x2aa6, 0x2aa7, 0x2aa8, 0x2aa9, - 0x2aaa, 0x2aab, 0x2aac, 0x2aae, 0x2aaf, 0x2ab0, 0x2ab1, 0x2ab3, - 0x2ab4, 0x2ab5, 0x2ab7, 0x2ab8, 0x2aba, 0x2abb, 0x2abd, 0x2abf, - 0x2ac0, 0x2ac0, 0x2ac0, 0x2ac0, 0x2ac1, 0x2ac1, 0x2ac2, 0x2ac2, - 0x2ac3, 0x2ac4, 0x2ac5, 0x2ac5, 0x2ac6, 0x2ac7, 0x2ac8, 0x2ac9, - 0x2aca, 0x2acb, 0x2acc, 0x2ace, 0x2acf, 0x2ad0, 0x2ad1, 0x2ad3, - 0x2ad4, 0x2ad5, 0x2ad7, 0x2ad8, 0x2ada, 0x2adb, 0x2add, 0x2adf, - 0x2ae0, 0x2ae0, 0x2ae0, 0x2ae0, 0x2ae1, 0x2ae1, 0x2ae2, 0x2ae2, - 0x2ae3, 0x2ae4, 0x2ae5, 0x2ae5, 0x2ae6, 0x2ae7, 0x2ae8, 0x2ae9, - 0x2aea, 0x2aeb, 0x2aec, 0x2aee, 0x2aef, 0x2af0, 0x2af1, 0x2af3, - 0x2af4, 0x2af5, 0x2af7, 0x2af8, 0x2afa, 0x2afb, 0x2afd, 0x2aff, - 0x2b00, 0x2b00, 0x2b00, 0x2b00, 0x2b01, 0x2b01, 0x2b02, 0x2b02, - 0x2b03, 0x2b04, 0x2b05, 0x2b05, 0x2b06, 0x2b07, 0x2b08, 0x2b09, - 0x2b0a, 0x2b0b, 0x2b0c, 0x2b0e, 0x2b0f, 0x2b10, 0x2b11, 0x2b13, - 0x2b14, 0x2b15, 0x2b17, 0x2b18, 0x2b1a, 0x2b1b, 0x2b1d, 0x2b1f, - 0x2b20, 0x2b20, 0x2b20, 0x2b20, 0x2b21, 0x2b21, 0x2b22, 0x2b22, - 0x2b23, 0x2b24, 0x2b25, 0x2b25, 0x2b26, 0x2b27, 0x2b28, 0x2b29, - 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2e, 0x2b2f, 0x2b30, 0x2b31, 0x2b33, - 0x2b34, 0x2b35, 0x2b37, 0x2b38, 0x2b3a, 0x2b3b, 0x2b3d, 0x2b3f, - 0x2b40, 0x2b40, 0x2b40, 0x2b40, 0x2b41, 0x2b41, 0x2b42, 0x2b42, - 0x2b43, 0x2b44, 0x2b45, 0x2b45, 0x2b46, 0x2b47, 0x2b48, 0x2b49, - 0x2b4a, 0x2b4b, 0x2b4c, 0x2b4e, 0x2b4f, 0x2b50, 0x2b51, 0x2b53, - 0x2b54, 0x2b55, 0x2b57, 0x2b58, 0x2b5a, 0x2b5b, 0x2b5d, 0x2b5f, - 0x2b80, 0x2b80, 0x2b80, 0x2b80, 0x2b81, 0x2b81, 0x2b82, 0x2b82, - 0x2b83, 0x2b84, 0x2b85, 0x2b85, 0x2b86, 0x2b87, 0x2b88, 0x2b89, - 0x2b8a, 0x2b8b, 0x2b8c, 0x2b8e, 0x2b8f, 0x2b90, 0x2b91, 0x2b93, - 0x2b94, 0x2b95, 0x2b97, 0x2b98, 0x2b9a, 0x2b9b, 0x2b9d, 0x2b9f, - 0x2ba0, 0x2ba0, 0x2ba0, 0x2ba0, 0x2ba1, 0x2ba1, 0x2ba2, 0x2ba2, - 0x2ba3, 0x2ba4, 0x2ba5, 0x2ba5, 0x2ba6, 0x2ba7, 0x2ba8, 0x2ba9, - 0x2baa, 0x2bab, 0x2bac, 0x2bae, 0x2baf, 0x2bb0, 0x2bb1, 0x2bb3, - 0x2bb4, 0x2bb5, 0x2bb7, 0x2bb8, 0x2bba, 0x2bbb, 0x2bbd, 0x2bbf, - 0x2bc0, 0x2bc0, 0x2bc0, 0x2bc0, 0x2bc1, 0x2bc1, 0x2bc2, 0x2bc2, - 0x2bc3, 0x2bc4, 0x2bc5, 0x2bc5, 0x2bc6, 0x2bc7, 0x2bc8, 0x2bc9, - 0x2bca, 0x2bcb, 0x2bcc, 0x2bce, 0x2bcf, 0x2bd0, 0x2bd1, 0x2bd3, - 0x2bd4, 0x2bd5, 0x2bd7, 0x2bd8, 0x2bda, 0x2bdb, 0x2bdd, 0x2bdf, - 0x2be0, 0x2be0, 0x2be0, 0x2be0, 0x2be1, 0x2be1, 0x2be2, 0x2be2, - 0x2be3, 0x2be4, 0x2be5, 0x2be5, 0x2be6, 0x2be7, 0x2be8, 0x2be9, - 0x2bea, 0x2beb, 0x2bec, 0x2bee, 0x2bef, 0x2bf0, 0x2bf1, 0x2bf3, - 0x2bf4, 0x2bf5, 0x2bf7, 0x2bf8, 0x2bfa, 0x2bfb, 0x2bfd, 0x2bff, - 0x2c00, 0x2c00, 0x2c00, 0x2c00, 0x2c01, 0x2c01, 0x2c02, 0x2c02, - 0x2c03, 0x2c04, 0x2c05, 0x2c05, 0x2c06, 0x2c07, 0x2c08, 0x2c09, - 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0e, 0x2c0f, 0x2c10, 0x2c11, 0x2c13, - 0x2c14, 0x2c15, 0x2c17, 0x2c18, 0x2c1a, 0x2c1b, 0x2c1d, 0x2c1f, - 0x2c40, 0x2c40, 0x2c40, 0x2c40, 0x2c41, 0x2c41, 0x2c42, 0x2c42, - 0x2c43, 0x2c44, 0x2c45, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, - 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c53, - 0x2c54, 0x2c55, 0x2c57, 0x2c58, 0x2c5a, 0x2c5b, 0x2c5d, 0x2c5f, - 0x2c60, 0x2c60, 0x2c60, 0x2c60, 0x2c61, 0x2c61, 0x2c62, 0x2c62, - 0x2c63, 0x2c64, 0x2c65, 0x2c65, 0x2c66, 0x2c67, 0x2c68, 0x2c69, - 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6e, 0x2c6f, 0x2c70, 0x2c71, 0x2c73, - 0x2c74, 0x2c75, 0x2c77, 0x2c78, 0x2c7a, 0x2c7b, 0x2c7d, 0x2c7f, - 0x2c80, 0x2c80, 0x2c80, 0x2c80, 0x2c81, 0x2c81, 0x2c82, 0x2c82, - 0x2c83, 0x2c84, 0x2c85, 0x2c85, 0x2c86, 0x2c87, 0x2c88, 0x2c89, - 0x2c8a, 0x2c8b, 0x2c8c, 0x2c8e, 0x2c8f, 0x2c90, 0x2c91, 0x2c93, - 0x2c94, 0x2c95, 0x2c97, 0x2c98, 0x2c9a, 0x2c9b, 0x2c9d, 0x2c9f, - 0x2cc0, 0x2cc0, 0x2cc0, 0x2cc0, 0x2cc1, 0x2cc1, 0x2cc2, 0x2cc2, - 0x2cc3, 0x2cc4, 0x2cc5, 0x2cc5, 0x2cc6, 0x2cc7, 0x2cc8, 0x2cc9, - 0x2cca, 0x2ccb, 0x2ccc, 0x2cce, 0x2ccf, 0x2cd0, 0x2cd1, 0x2cd3, - 0x2cd4, 0x2cd5, 0x2cd7, 0x2cd8, 0x2cda, 0x2cdb, 0x2cdd, 0x2cdf, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce1, 0x2ce1, 0x2ce2, 0x2ce2, - 0x2ce3, 0x2ce4, 0x2ce5, 0x2ce5, 0x2ce6, 0x2ce7, 0x2ce8, 0x2ce9, - 0x2cea, 0x2ceb, 0x2cec, 0x2cee, 0x2cef, 0x2cf0, 0x2cf1, 0x2cf3, - 0x2cf4, 0x2cf5, 0x2cf7, 0x2cf8, 0x2cfa, 0x2cfb, 0x2cfd, 0x2cff, - 0x2d00, 0x2d00, 0x2d00, 0x2d00, 0x2d01, 0x2d01, 0x2d02, 0x2d02, - 0x2d03, 0x2d04, 0x2d05, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, - 0x2d0a, 0x2d0b, 0x2d0c, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d13, - 0x2d14, 0x2d15, 0x2d17, 0x2d18, 0x2d1a, 0x2d1b, 0x2d1d, 0x2d1f, - 0x2d40, 0x2d40, 0x2d40, 0x2d40, 0x2d41, 0x2d41, 0x2d42, 0x2d42, - 0x2d43, 0x2d44, 0x2d45, 0x2d45, 0x2d46, 0x2d47, 0x2d48, 0x2d49, - 0x2d4a, 0x2d4b, 0x2d4c, 0x2d4e, 0x2d4f, 0x2d50, 0x2d51, 0x2d53, - 0x2d54, 0x2d55, 0x2d57, 0x2d58, 0x2d5a, 0x2d5b, 0x2d5d, 0x2d5f, - 0x2d60, 0x2d60, 0x2d60, 0x2d60, 0x2d61, 0x2d61, 0x2d62, 0x2d62, - 0x2d63, 0x2d64, 0x2d65, 0x2d65, 0x2d66, 0x2d67, 0x2d68, 0x2d69, - 0x2d6a, 0x2d6b, 0x2d6c, 0x2d6e, 0x2d6f, 0x2d70, 0x2d71, 0x2d73, - 0x2d74, 0x2d75, 0x2d77, 0x2d78, 0x2d7a, 0x2d7b, 0x2d7d, 0x2d7f, - 0x2d80, 0x2d80, 0x2d80, 0x2d80, 0x2d81, 0x2d81, 0x2d82, 0x2d82, - 0x2d83, 0x2d84, 0x2d85, 0x2d85, 0x2d86, 0x2d87, 0x2d88, 0x2d89, - 0x2d8a, 0x2d8b, 0x2d8c, 0x2d8e, 0x2d8f, 0x2d90, 0x2d91, 0x2d93, - 0x2d94, 0x2d95, 0x2d97, 0x2d98, 0x2d9a, 0x2d9b, 0x2d9d, 0x2d9f, - 0x2dc0, 0x2dc0, 0x2dc0, 0x2dc0, 0x2dc1, 0x2dc1, 0x2dc2, 0x2dc2, - 0x2dc3, 0x2dc4, 0x2dc5, 0x2dc5, 0x2dc6, 0x2dc7, 0x2dc8, 0x2dc9, - 0x2dca, 0x2dcb, 0x2dcc, 0x2dce, 0x2dcf, 0x2dd0, 0x2dd1, 0x2dd3, - 0x2dd4, 0x2dd5, 0x2dd7, 0x2dd8, 0x2dda, 0x2ddb, 0x2ddd, 0x2ddf, - 0x2de0, 0x2de0, 0x2de0, 0x2de0, 0x2de1, 0x2de1, 0x2de2, 0x2de2, - 0x2de3, 0x2de4, 0x2de5, 0x2de5, 0x2de6, 0x2de7, 0x2de8, 0x2de9, - 0x2dea, 0x2deb, 0x2dec, 0x2dee, 0x2def, 0x2df0, 0x2df1, 0x2df3, - 0x2df4, 0x2df5, 0x2df7, 0x2df8, 0x2dfa, 0x2dfb, 0x2dfd, 0x2dff, - 0x2e20, 0x2e20, 0x2e20, 0x2e20, 0x2e21, 0x2e21, 0x2e22, 0x2e22, - 0x2e23, 0x2e24, 0x2e25, 0x2e25, 0x2e26, 0x2e27, 0x2e28, 0x2e29, - 0x2e2a, 0x2e2b, 0x2e2c, 0x2e2e, 0x2e2f, 0x2e30, 0x2e31, 0x2e33, - 0x2e34, 0x2e35, 0x2e37, 0x2e38, 0x2e3a, 0x2e3b, 0x2e3d, 0x2e3f, - 0x2e40, 0x2e40, 0x2e40, 0x2e40, 0x2e41, 0x2e41, 0x2e42, 0x2e42, - 0x2e43, 0x2e44, 0x2e45, 0x2e45, 0x2e46, 0x2e47, 0x2e48, 0x2e49, - 0x2e4a, 0x2e4b, 0x2e4c, 0x2e4e, 0x2e4f, 0x2e50, 0x2e51, 0x2e53, - 0x2e54, 0x2e55, 0x2e57, 0x2e58, 0x2e5a, 0x2e5b, 0x2e5d, 0x2e5f, - 0x2e80, 0x2e80, 0x2e80, 0x2e80, 0x2e81, 0x2e81, 0x2e82, 0x2e82, - 0x2e83, 0x2e84, 0x2e85, 0x2e85, 0x2e86, 0x2e87, 0x2e88, 0x2e89, - 0x2e8a, 0x2e8b, 0x2e8c, 0x2e8e, 0x2e8f, 0x2e90, 0x2e91, 0x2e93, - 0x2e94, 0x2e95, 0x2e97, 0x2e98, 0x2e9a, 0x2e9b, 0x2e9d, 0x2e9f, - 0x2ea0, 0x2ea0, 0x2ea0, 0x2ea0, 0x2ea1, 0x2ea1, 0x2ea2, 0x2ea2, - 0x2ea3, 0x2ea4, 0x2ea5, 0x2ea5, 0x2ea6, 0x2ea7, 0x2ea8, 0x2ea9, - 0x2eaa, 0x2eab, 0x2eac, 0x2eae, 0x2eaf, 0x2eb0, 0x2eb1, 0x2eb3, - 0x2eb4, 0x2eb5, 0x2eb7, 0x2eb8, 0x2eba, 0x2ebb, 0x2ebd, 0x2ebf, - 0x2ee0, 0x2ee0, 0x2ee0, 0x2ee0, 0x2ee1, 0x2ee1, 0x2ee2, 0x2ee2, - 0x2ee3, 0x2ee4, 0x2ee5, 0x2ee5, 0x2ee6, 0x2ee7, 0x2ee8, 0x2ee9, - 0x2eea, 0x2eeb, 0x2eec, 0x2eee, 0x2eef, 0x2ef0, 0x2ef1, 0x2ef3, - 0x2ef4, 0x2ef5, 0x2ef7, 0x2ef8, 0x2efa, 0x2efb, 0x2efd, 0x2eff, - 0x2f00, 0x2f00, 0x2f00, 0x2f00, 0x2f01, 0x2f01, 0x2f02, 0x2f02, - 0x2f03, 0x2f04, 0x2f05, 0x2f05, 0x2f06, 0x2f07, 0x2f08, 0x2f09, - 0x2f0a, 0x2f0b, 0x2f0c, 0x2f0e, 0x2f0f, 0x2f10, 0x2f11, 0x2f13, - 0x2f14, 0x2f15, 0x2f17, 0x2f18, 0x2f1a, 0x2f1b, 0x2f1d, 0x2f1f, - 0x2f40, 0x2f40, 0x2f40, 0x2f40, 0x2f41, 0x2f41, 0x2f42, 0x2f42, - 0x2f43, 0x2f44, 0x2f45, 0x2f45, 0x2f46, 0x2f47, 0x2f48, 0x2f49, - 0x2f4a, 0x2f4b, 0x2f4c, 0x2f4e, 0x2f4f, 0x2f50, 0x2f51, 0x2f53, - 0x2f54, 0x2f55, 0x2f57, 0x2f58, 0x2f5a, 0x2f5b, 0x2f5d, 0x2f5f, - 0x2f60, 0x2f60, 0x2f60, 0x2f60, 0x2f61, 0x2f61, 0x2f62, 0x2f62, - 0x2f63, 0x2f64, 0x2f65, 0x2f65, 0x2f66, 0x2f67, 0x2f68, 0x2f69, - 0x2f6a, 0x2f6b, 0x2f6c, 0x2f6e, 0x2f6f, 0x2f70, 0x2f71, 0x2f73, - 0x2f74, 0x2f75, 0x2f77, 0x2f78, 0x2f7a, 0x2f7b, 0x2f7d, 0x2f7f, - 0x2fa0, 0x2fa0, 0x2fa0, 0x2fa0, 0x2fa1, 0x2fa1, 0x2fa2, 0x2fa2, - 0x2fa3, 0x2fa4, 0x2fa5, 0x2fa5, 0x2fa6, 0x2fa7, 0x2fa8, 0x2fa9, - 0x2faa, 0x2fab, 0x2fac, 0x2fae, 0x2faf, 0x2fb0, 0x2fb1, 0x2fb3, - 0x2fb4, 0x2fb5, 0x2fb7, 0x2fb8, 0x2fba, 0x2fbb, 0x2fbd, 0x2fbf, - 0x2fe0, 0x2fe0, 0x2fe0, 0x2fe0, 0x2fe1, 0x2fe1, 0x2fe2, 0x2fe2, - 0x2fe3, 0x2fe4, 0x2fe5, 0x2fe5, 0x2fe6, 0x2fe7, 0x2fe8, 0x2fe9, - 0x2fea, 0x2feb, 0x2fec, 0x2fee, 0x2fef, 0x2ff0, 0x2ff1, 0x2ff3, - 0x2ff4, 0x2ff5, 0x2ff7, 0x2ff8, 0x2ffa, 0x2ffb, 0x2ffd, 0x2fff, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2800, 0x2800, 0x2800, 0x2800, 0x2801, 0x2801, 0x2802, 0x2802, - 0x2803, 0x2804, 0x2805, 0x2805, 0x2806, 0x2807, 0x2808, 0x2809, - 0x280a, 0x280b, 0x280c, 0x280e, 0x280f, 0x2810, 0x2811, 0x2813, - 0x2814, 0x2815, 0x2817, 0x2818, 0x281a, 0x281b, 0x281d, 0x281f, - 0x2820, 0x2820, 0x2820, 0x2820, 0x2821, 0x2821, 0x2822, 0x2822, - 0x2823, 0x2824, 0x2825, 0x2825, 0x2826, 0x2827, 0x2828, 0x2829, - 0x282a, 0x282b, 0x282c, 0x282e, 0x282f, 0x2830, 0x2831, 0x2833, - 0x2834, 0x2835, 0x2837, 0x2838, 0x283a, 0x283b, 0x283d, 0x283f, - 0x2820, 0x2820, 0x2820, 0x2820, 0x2821, 0x2821, 0x2822, 0x2822, - 0x2823, 0x2824, 0x2825, 0x2825, 0x2826, 0x2827, 0x2828, 0x2829, - 0x282a, 0x282b, 0x282c, 0x282e, 0x282f, 0x2830, 0x2831, 0x2833, - 0x2834, 0x2835, 0x2837, 0x2838, 0x283a, 0x283b, 0x283d, 0x283f, - 0x2820, 0x2820, 0x2820, 0x2820, 0x2821, 0x2821, 0x2822, 0x2822, - 0x2823, 0x2824, 0x2825, 0x2825, 0x2826, 0x2827, 0x2828, 0x2829, - 0x282a, 0x282b, 0x282c, 0x282e, 0x282f, 0x2830, 0x2831, 0x2833, - 0x2834, 0x2835, 0x2837, 0x2838, 0x283a, 0x283b, 0x283d, 0x283f, - 0x2840, 0x2840, 0x2840, 0x2840, 0x2841, 0x2841, 0x2842, 0x2842, - 0x2843, 0x2844, 0x2845, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, - 0x284a, 0x284b, 0x284c, 0x284e, 0x284f, 0x2850, 0x2851, 0x2853, - 0x2854, 0x2855, 0x2857, 0x2858, 0x285a, 0x285b, 0x285d, 0x285f, - 0x2840, 0x2840, 0x2840, 0x2840, 0x2841, 0x2841, 0x2842, 0x2842, - 0x2843, 0x2844, 0x2845, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, - 0x284a, 0x284b, 0x284c, 0x284e, 0x284f, 0x2850, 0x2851, 0x2853, - 0x2854, 0x2855, 0x2857, 0x2858, 0x285a, 0x285b, 0x285d, 0x285f, - 0x2860, 0x2860, 0x2860, 0x2860, 0x2861, 0x2861, 0x2862, 0x2862, - 0x2863, 0x2864, 0x2865, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, - 0x286a, 0x286b, 0x286c, 0x286e, 0x286f, 0x2870, 0x2871, 0x2873, - 0x2874, 0x2875, 0x2877, 0x2878, 0x287a, 0x287b, 0x287d, 0x287f, - 0x2860, 0x2860, 0x2860, 0x2860, 0x2861, 0x2861, 0x2862, 0x2862, - 0x2863, 0x2864, 0x2865, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, - 0x286a, 0x286b, 0x286c, 0x286e, 0x286f, 0x2870, 0x2871, 0x2873, - 0x2874, 0x2875, 0x2877, 0x2878, 0x287a, 0x287b, 0x287d, 0x287f, - 0x2880, 0x2880, 0x2880, 0x2880, 0x2881, 0x2881, 0x2882, 0x2882, - 0x2883, 0x2884, 0x2885, 0x2885, 0x2886, 0x2887, 0x2888, 0x2889, - 0x288a, 0x288b, 0x288c, 0x288e, 0x288f, 0x2890, 0x2891, 0x2893, - 0x2894, 0x2895, 0x2897, 0x2898, 0x289a, 0x289b, 0x289d, 0x289f, - 0x28a0, 0x28a0, 0x28a0, 0x28a0, 0x28a1, 0x28a1, 0x28a2, 0x28a2, - 0x28a3, 0x28a4, 0x28a5, 0x28a5, 0x28a6, 0x28a7, 0x28a8, 0x28a9, - 0x28aa, 0x28ab, 0x28ac, 0x28ae, 0x28af, 0x28b0, 0x28b1, 0x28b3, - 0x28b4, 0x28b5, 0x28b7, 0x28b8, 0x28ba, 0x28bb, 0x28bd, 0x28bf, - 0x28a0, 0x28a0, 0x28a0, 0x28a0, 0x28a1, 0x28a1, 0x28a2, 0x28a2, - 0x28a3, 0x28a4, 0x28a5, 0x28a5, 0x28a6, 0x28a7, 0x28a8, 0x28a9, - 0x28aa, 0x28ab, 0x28ac, 0x28ae, 0x28af, 0x28b0, 0x28b1, 0x28b3, - 0x28b4, 0x28b5, 0x28b7, 0x28b8, 0x28ba, 0x28bb, 0x28bd, 0x28bf, - 0x28c0, 0x28c0, 0x28c0, 0x28c0, 0x28c1, 0x28c1, 0x28c2, 0x28c2, - 0x28c3, 0x28c4, 0x28c5, 0x28c5, 0x28c6, 0x28c7, 0x28c8, 0x28c9, - 0x28ca, 0x28cb, 0x28cc, 0x28ce, 0x28cf, 0x28d0, 0x28d1, 0x28d3, - 0x28d4, 0x28d5, 0x28d7, 0x28d8, 0x28da, 0x28db, 0x28dd, 0x28df, - 0x28e0, 0x28e0, 0x28e0, 0x28e0, 0x28e1, 0x28e1, 0x28e2, 0x28e2, - 0x28e3, 0x28e4, 0x28e5, 0x28e5, 0x28e6, 0x28e7, 0x28e8, 0x28e9, - 0x28ea, 0x28eb, 0x28ec, 0x28ee, 0x28ef, 0x28f0, 0x28f1, 0x28f3, - 0x28f4, 0x28f5, 0x28f7, 0x28f8, 0x28fa, 0x28fb, 0x28fd, 0x28ff, - 0x28e0, 0x28e0, 0x28e0, 0x28e0, 0x28e1, 0x28e1, 0x28e2, 0x28e2, - 0x28e3, 0x28e4, 0x28e5, 0x28e5, 0x28e6, 0x28e7, 0x28e8, 0x28e9, - 0x28ea, 0x28eb, 0x28ec, 0x28ee, 0x28ef, 0x28f0, 0x28f1, 0x28f3, - 0x28f4, 0x28f5, 0x28f7, 0x28f8, 0x28fa, 0x28fb, 0x28fd, 0x28ff, - 0x2900, 0x2900, 0x2900, 0x2900, 0x2901, 0x2901, 0x2902, 0x2902, - 0x2903, 0x2904, 0x2905, 0x2905, 0x2906, 0x2907, 0x2908, 0x2909, - 0x290a, 0x290b, 0x290c, 0x290e, 0x290f, 0x2910, 0x2911, 0x2913, - 0x2914, 0x2915, 0x2917, 0x2918, 0x291a, 0x291b, 0x291d, 0x291f, - 0x2920, 0x2920, 0x2920, 0x2920, 0x2921, 0x2921, 0x2922, 0x2922, - 0x2923, 0x2924, 0x2925, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929, - 0x292a, 0x292b, 0x292c, 0x292e, 0x292f, 0x2930, 0x2931, 0x2933, - 0x2934, 0x2935, 0x2937, 0x2938, 0x293a, 0x293b, 0x293d, 0x293f, - 0x2940, 0x2940, 0x2940, 0x2940, 0x2941, 0x2941, 0x2942, 0x2942, - 0x2943, 0x2944, 0x2945, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, - 0x294a, 0x294b, 0x294c, 0x294e, 0x294f, 0x2950, 0x2951, 0x2953, - 0x2954, 0x2955, 0x2957, 0x2958, 0x295a, 0x295b, 0x295d, 0x295f, - 0x2940, 0x2940, 0x2940, 0x2940, 0x2941, 0x2941, 0x2942, 0x2942, - 0x2943, 0x2944, 0x2945, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, - 0x294a, 0x294b, 0x294c, 0x294e, 0x294f, 0x2950, 0x2951, 0x2953, - 0x2954, 0x2955, 0x2957, 0x2958, 0x295a, 0x295b, 0x295d, 0x295f, - 0x2960, 0x2960, 0x2960, 0x2960, 0x2961, 0x2961, 0x2962, 0x2962, - 0x2963, 0x2964, 0x2965, 0x2965, 0x2966, 0x2967, 0x2968, 0x2969, - 0x296a, 0x296b, 0x296c, 0x296e, 0x296f, 0x2970, 0x2971, 0x2973, - 0x2974, 0x2975, 0x2977, 0x2978, 0x297a, 0x297b, 0x297d, 0x297f, - 0x2980, 0x2980, 0x2980, 0x2980, 0x2981, 0x2981, 0x2982, 0x2982, - 0x2983, 0x2984, 0x2985, 0x2985, 0x2986, 0x2987, 0x2988, 0x2989, - 0x298a, 0x298b, 0x298c, 0x298e, 0x298f, 0x2990, 0x2991, 0x2993, - 0x2994, 0x2995, 0x2997, 0x2998, 0x299a, 0x299b, 0x299d, 0x299f, - 0x29a0, 0x29a0, 0x29a0, 0x29a0, 0x29a1, 0x29a1, 0x29a2, 0x29a2, - 0x29a3, 0x29a4, 0x29a5, 0x29a5, 0x29a6, 0x29a7, 0x29a8, 0x29a9, - 0x29aa, 0x29ab, 0x29ac, 0x29ae, 0x29af, 0x29b0, 0x29b1, 0x29b3, - 0x29b4, 0x29b5, 0x29b7, 0x29b8, 0x29ba, 0x29bb, 0x29bd, 0x29bf, - 0x29c0, 0x29c0, 0x29c0, 0x29c0, 0x29c1, 0x29c1, 0x29c2, 0x29c2, - 0x29c3, 0x29c4, 0x29c5, 0x29c5, 0x29c6, 0x29c7, 0x29c8, 0x29c9, - 0x29ca, 0x29cb, 0x29cc, 0x29ce, 0x29cf, 0x29d0, 0x29d1, 0x29d3, - 0x29d4, 0x29d5, 0x29d7, 0x29d8, 0x29da, 0x29db, 0x29dd, 0x29df, - 0x29e0, 0x29e0, 0x29e0, 0x29e0, 0x29e1, 0x29e1, 0x29e2, 0x29e2, - 0x29e3, 0x29e4, 0x29e5, 0x29e5, 0x29e6, 0x29e7, 0x29e8, 0x29e9, - 0x29ea, 0x29eb, 0x29ec, 0x29ee, 0x29ef, 0x29f0, 0x29f1, 0x29f3, - 0x29f4, 0x29f5, 0x29f7, 0x29f8, 0x29fa, 0x29fb, 0x29fd, 0x29ff, - 0x2a00, 0x2a00, 0x2a00, 0x2a00, 0x2a01, 0x2a01, 0x2a02, 0x2a02, - 0x2a03, 0x2a04, 0x2a05, 0x2a05, 0x2a06, 0x2a07, 0x2a08, 0x2a09, - 0x2a0a, 0x2a0b, 0x2a0c, 0x2a0e, 0x2a0f, 0x2a10, 0x2a11, 0x2a13, - 0x2a14, 0x2a15, 0x2a17, 0x2a18, 0x2a1a, 0x2a1b, 0x2a1d, 0x2a1f, - 0x2a20, 0x2a20, 0x2a20, 0x2a20, 0x2a21, 0x2a21, 0x2a22, 0x2a22, - 0x2a23, 0x2a24, 0x2a25, 0x2a25, 0x2a26, 0x2a27, 0x2a28, 0x2a29, - 0x2a2a, 0x2a2b, 0x2a2c, 0x2a2e, 0x2a2f, 0x2a30, 0x2a31, 0x2a33, - 0x2a34, 0x2a35, 0x2a37, 0x2a38, 0x2a3a, 0x2a3b, 0x2a3d, 0x2a3f, - 0x2a40, 0x2a40, 0x2a40, 0x2a40, 0x2a41, 0x2a41, 0x2a42, 0x2a42, - 0x2a43, 0x2a44, 0x2a45, 0x2a45, 0x2a46, 0x2a47, 0x2a48, 0x2a49, - 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4e, 0x2a4f, 0x2a50, 0x2a51, 0x2a53, - 0x2a54, 0x2a55, 0x2a57, 0x2a58, 0x2a5a, 0x2a5b, 0x2a5d, 0x2a5f, - 0x2a60, 0x2a60, 0x2a60, 0x2a60, 0x2a61, 0x2a61, 0x2a62, 0x2a62, - 0x2a63, 0x2a64, 0x2a65, 0x2a65, 0x2a66, 0x2a67, 0x2a68, 0x2a69, - 0x2a6a, 0x2a6b, 0x2a6c, 0x2a6e, 0x2a6f, 0x2a70, 0x2a71, 0x2a73, - 0x2a74, 0x2a75, 0x2a77, 0x2a78, 0x2a7a, 0x2a7b, 0x2a7d, 0x2a7f, - 0x2a80, 0x2a80, 0x2a80, 0x2a80, 0x2a81, 0x2a81, 0x2a82, 0x2a82, - 0x2a83, 0x2a84, 0x2a85, 0x2a85, 0x2a86, 0x2a87, 0x2a88, 0x2a89, - 0x2a8a, 0x2a8b, 0x2a8c, 0x2a8e, 0x2a8f, 0x2a90, 0x2a91, 0x2a93, - 0x2a94, 0x2a95, 0x2a97, 0x2a98, 0x2a9a, 0x2a9b, 0x2a9d, 0x2a9f, - 0x2aa0, 0x2aa0, 0x2aa0, 0x2aa0, 0x2aa1, 0x2aa1, 0x2aa2, 0x2aa2, - 0x2aa3, 0x2aa4, 0x2aa5, 0x2aa5, 0x2aa6, 0x2aa7, 0x2aa8, 0x2aa9, - 0x2aaa, 0x2aab, 0x2aac, 0x2aae, 0x2aaf, 0x2ab0, 0x2ab1, 0x2ab3, - 0x2ab4, 0x2ab5, 0x2ab7, 0x2ab8, 0x2aba, 0x2abb, 0x2abd, 0x2abf, - 0x2ac0, 0x2ac0, 0x2ac0, 0x2ac0, 0x2ac1, 0x2ac1, 0x2ac2, 0x2ac2, - 0x2ac3, 0x2ac4, 0x2ac5, 0x2ac5, 0x2ac6, 0x2ac7, 0x2ac8, 0x2ac9, - 0x2aca, 0x2acb, 0x2acc, 0x2ace, 0x2acf, 0x2ad0, 0x2ad1, 0x2ad3, - 0x2ad4, 0x2ad5, 0x2ad7, 0x2ad8, 0x2ada, 0x2adb, 0x2add, 0x2adf, - 0x2ae0, 0x2ae0, 0x2ae0, 0x2ae0, 0x2ae1, 0x2ae1, 0x2ae2, 0x2ae2, - 0x2ae3, 0x2ae4, 0x2ae5, 0x2ae5, 0x2ae6, 0x2ae7, 0x2ae8, 0x2ae9, - 0x2aea, 0x2aeb, 0x2aec, 0x2aee, 0x2aef, 0x2af0, 0x2af1, 0x2af3, - 0x2af4, 0x2af5, 0x2af7, 0x2af8, 0x2afa, 0x2afb, 0x2afd, 0x2aff, - 0x2b00, 0x2b00, 0x2b00, 0x2b00, 0x2b01, 0x2b01, 0x2b02, 0x2b02, - 0x2b03, 0x2b04, 0x2b05, 0x2b05, 0x2b06, 0x2b07, 0x2b08, 0x2b09, - 0x2b0a, 0x2b0b, 0x2b0c, 0x2b0e, 0x2b0f, 0x2b10, 0x2b11, 0x2b13, - 0x2b14, 0x2b15, 0x2b17, 0x2b18, 0x2b1a, 0x2b1b, 0x2b1d, 0x2b1f, - 0x2b20, 0x2b20, 0x2b20, 0x2b20, 0x2b21, 0x2b21, 0x2b22, 0x2b22, - 0x2b23, 0x2b24, 0x2b25, 0x2b25, 0x2b26, 0x2b27, 0x2b28, 0x2b29, - 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2e, 0x2b2f, 0x2b30, 0x2b31, 0x2b33, - 0x2b34, 0x2b35, 0x2b37, 0x2b38, 0x2b3a, 0x2b3b, 0x2b3d, 0x2b3f, - 0x2b40, 0x2b40, 0x2b40, 0x2b40, 0x2b41, 0x2b41, 0x2b42, 0x2b42, - 0x2b43, 0x2b44, 0x2b45, 0x2b45, 0x2b46, 0x2b47, 0x2b48, 0x2b49, - 0x2b4a, 0x2b4b, 0x2b4c, 0x2b4e, 0x2b4f, 0x2b50, 0x2b51, 0x2b53, - 0x2b54, 0x2b55, 0x2b57, 0x2b58, 0x2b5a, 0x2b5b, 0x2b5d, 0x2b5f, - 0x2b80, 0x2b80, 0x2b80, 0x2b80, 0x2b81, 0x2b81, 0x2b82, 0x2b82, - 0x2b83, 0x2b84, 0x2b85, 0x2b85, 0x2b86, 0x2b87, 0x2b88, 0x2b89, - 0x2b8a, 0x2b8b, 0x2b8c, 0x2b8e, 0x2b8f, 0x2b90, 0x2b91, 0x2b93, - 0x2b94, 0x2b95, 0x2b97, 0x2b98, 0x2b9a, 0x2b9b, 0x2b9d, 0x2b9f, - 0x2ba0, 0x2ba0, 0x2ba0, 0x2ba0, 0x2ba1, 0x2ba1, 0x2ba2, 0x2ba2, - 0x2ba3, 0x2ba4, 0x2ba5, 0x2ba5, 0x2ba6, 0x2ba7, 0x2ba8, 0x2ba9, - 0x2baa, 0x2bab, 0x2bac, 0x2bae, 0x2baf, 0x2bb0, 0x2bb1, 0x2bb3, - 0x2bb4, 0x2bb5, 0x2bb7, 0x2bb8, 0x2bba, 0x2bbb, 0x2bbd, 0x2bbf, - 0x2bc0, 0x2bc0, 0x2bc0, 0x2bc0, 0x2bc1, 0x2bc1, 0x2bc2, 0x2bc2, - 0x2bc3, 0x2bc4, 0x2bc5, 0x2bc5, 0x2bc6, 0x2bc7, 0x2bc8, 0x2bc9, - 0x2bca, 0x2bcb, 0x2bcc, 0x2bce, 0x2bcf, 0x2bd0, 0x2bd1, 0x2bd3, - 0x2bd4, 0x2bd5, 0x2bd7, 0x2bd8, 0x2bda, 0x2bdb, 0x2bdd, 0x2bdf, - 0x2be0, 0x2be0, 0x2be0, 0x2be0, 0x2be1, 0x2be1, 0x2be2, 0x2be2, - 0x2be3, 0x2be4, 0x2be5, 0x2be5, 0x2be6, 0x2be7, 0x2be8, 0x2be9, - 0x2bea, 0x2beb, 0x2bec, 0x2bee, 0x2bef, 0x2bf0, 0x2bf1, 0x2bf3, - 0x2bf4, 0x2bf5, 0x2bf7, 0x2bf8, 0x2bfa, 0x2bfb, 0x2bfd, 0x2bff, - 0x2c00, 0x2c00, 0x2c00, 0x2c00, 0x2c01, 0x2c01, 0x2c02, 0x2c02, - 0x2c03, 0x2c04, 0x2c05, 0x2c05, 0x2c06, 0x2c07, 0x2c08, 0x2c09, - 0x2c0a, 0x2c0b, 0x2c0c, 0x2c0e, 0x2c0f, 0x2c10, 0x2c11, 0x2c13, - 0x2c14, 0x2c15, 0x2c17, 0x2c18, 0x2c1a, 0x2c1b, 0x2c1d, 0x2c1f, - 0x2c40, 0x2c40, 0x2c40, 0x2c40, 0x2c41, 0x2c41, 0x2c42, 0x2c42, - 0x2c43, 0x2c44, 0x2c45, 0x2c45, 0x2c46, 0x2c47, 0x2c48, 0x2c49, - 0x2c4a, 0x2c4b, 0x2c4c, 0x2c4e, 0x2c4f, 0x2c50, 0x2c51, 0x2c53, - 0x2c54, 0x2c55, 0x2c57, 0x2c58, 0x2c5a, 0x2c5b, 0x2c5d, 0x2c5f, - 0x2c60, 0x2c60, 0x2c60, 0x2c60, 0x2c61, 0x2c61, 0x2c62, 0x2c62, - 0x2c63, 0x2c64, 0x2c65, 0x2c65, 0x2c66, 0x2c67, 0x2c68, 0x2c69, - 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6e, 0x2c6f, 0x2c70, 0x2c71, 0x2c73, - 0x2c74, 0x2c75, 0x2c77, 0x2c78, 0x2c7a, 0x2c7b, 0x2c7d, 0x2c7f, - 0x2c80, 0x2c80, 0x2c80, 0x2c80, 0x2c81, 0x2c81, 0x2c82, 0x2c82, - 0x2c83, 0x2c84, 0x2c85, 0x2c85, 0x2c86, 0x2c87, 0x2c88, 0x2c89, - 0x2c8a, 0x2c8b, 0x2c8c, 0x2c8e, 0x2c8f, 0x2c90, 0x2c91, 0x2c93, - 0x2c94, 0x2c95, 0x2c97, 0x2c98, 0x2c9a, 0x2c9b, 0x2c9d, 0x2c9f, - 0x2cc0, 0x2cc0, 0x2cc0, 0x2cc0, 0x2cc1, 0x2cc1, 0x2cc2, 0x2cc2, - 0x2cc3, 0x2cc4, 0x2cc5, 0x2cc5, 0x2cc6, 0x2cc7, 0x2cc8, 0x2cc9, - 0x2cca, 0x2ccb, 0x2ccc, 0x2cce, 0x2ccf, 0x2cd0, 0x2cd1, 0x2cd3, - 0x2cd4, 0x2cd5, 0x2cd7, 0x2cd8, 0x2cda, 0x2cdb, 0x2cdd, 0x2cdf, - 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce1, 0x2ce1, 0x2ce2, 0x2ce2, - 0x2ce3, 0x2ce4, 0x2ce5, 0x2ce5, 0x2ce6, 0x2ce7, 0x2ce8, 0x2ce9, - 0x2cea, 0x2ceb, 0x2cec, 0x2cee, 0x2cef, 0x2cf0, 0x2cf1, 0x2cf3, - 0x2cf4, 0x2cf5, 0x2cf7, 0x2cf8, 0x2cfa, 0x2cfb, 0x2cfd, 0x2cff, - 0x2d00, 0x2d00, 0x2d00, 0x2d00, 0x2d01, 0x2d01, 0x2d02, 0x2d02, - 0x2d03, 0x2d04, 0x2d05, 0x2d05, 0x2d06, 0x2d07, 0x2d08, 0x2d09, - 0x2d0a, 0x2d0b, 0x2d0c, 0x2d0e, 0x2d0f, 0x2d10, 0x2d11, 0x2d13, - 0x2d14, 0x2d15, 0x2d17, 0x2d18, 0x2d1a, 0x2d1b, 0x2d1d, 0x2d1f, - 0x2d40, 0x2d40, 0x2d40, 0x2d40, 0x2d41, 0x2d41, 0x2d42, 0x2d42, - 0x2d43, 0x2d44, 0x2d45, 0x2d45, 0x2d46, 0x2d47, 0x2d48, 0x2d49, - 0x2d4a, 0x2d4b, 0x2d4c, 0x2d4e, 0x2d4f, 0x2d50, 0x2d51, 0x2d53, - 0x2d54, 0x2d55, 0x2d57, 0x2d58, 0x2d5a, 0x2d5b, 0x2d5d, 0x2d5f, - 0x2d60, 0x2d60, 0x2d60, 0x2d60, 0x2d61, 0x2d61, 0x2d62, 0x2d62, - 0x2d63, 0x2d64, 0x2d65, 0x2d65, 0x2d66, 0x2d67, 0x2d68, 0x2d69, - 0x2d6a, 0x2d6b, 0x2d6c, 0x2d6e, 0x2d6f, 0x2d70, 0x2d71, 0x2d73, - 0x2d74, 0x2d75, 0x2d77, 0x2d78, 0x2d7a, 0x2d7b, 0x2d7d, 0x2d7f, - 0x2d80, 0x2d80, 0x2d80, 0x2d80, 0x2d81, 0x2d81, 0x2d82, 0x2d82, - 0x2d83, 0x2d84, 0x2d85, 0x2d85, 0x2d86, 0x2d87, 0x2d88, 0x2d89, - 0x2d8a, 0x2d8b, 0x2d8c, 0x2d8e, 0x2d8f, 0x2d90, 0x2d91, 0x2d93, - 0x2d94, 0x2d95, 0x2d97, 0x2d98, 0x2d9a, 0x2d9b, 0x2d9d, 0x2d9f, - 0x2dc0, 0x2dc0, 0x2dc0, 0x2dc0, 0x2dc1, 0x2dc1, 0x2dc2, 0x2dc2, - 0x2dc3, 0x2dc4, 0x2dc5, 0x2dc5, 0x2dc6, 0x2dc7, 0x2dc8, 0x2dc9, - 0x2dca, 0x2dcb, 0x2dcc, 0x2dce, 0x2dcf, 0x2dd0, 0x2dd1, 0x2dd3, - 0x2dd4, 0x2dd5, 0x2dd7, 0x2dd8, 0x2dda, 0x2ddb, 0x2ddd, 0x2ddf, - 0x2de0, 0x2de0, 0x2de0, 0x2de0, 0x2de1, 0x2de1, 0x2de2, 0x2de2, - 0x2de3, 0x2de4, 0x2de5, 0x2de5, 0x2de6, 0x2de7, 0x2de8, 0x2de9, - 0x2dea, 0x2deb, 0x2dec, 0x2dee, 0x2def, 0x2df0, 0x2df1, 0x2df3, - 0x2df4, 0x2df5, 0x2df7, 0x2df8, 0x2dfa, 0x2dfb, 0x2dfd, 0x2dff, - 0x2e20, 0x2e20, 0x2e20, 0x2e20, 0x2e21, 0x2e21, 0x2e22, 0x2e22, - 0x2e23, 0x2e24, 0x2e25, 0x2e25, 0x2e26, 0x2e27, 0x2e28, 0x2e29, - 0x2e2a, 0x2e2b, 0x2e2c, 0x2e2e, 0x2e2f, 0x2e30, 0x2e31, 0x2e33, - 0x2e34, 0x2e35, 0x2e37, 0x2e38, 0x2e3a, 0x2e3b, 0x2e3d, 0x2e3f, - 0x2e40, 0x2e40, 0x2e40, 0x2e40, 0x2e41, 0x2e41, 0x2e42, 0x2e42, - 0x2e43, 0x2e44, 0x2e45, 0x2e45, 0x2e46, 0x2e47, 0x2e48, 0x2e49, - 0x2e4a, 0x2e4b, 0x2e4c, 0x2e4e, 0x2e4f, 0x2e50, 0x2e51, 0x2e53, - 0x2e54, 0x2e55, 0x2e57, 0x2e58, 0x2e5a, 0x2e5b, 0x2e5d, 0x2e5f, - 0x2e80, 0x2e80, 0x2e80, 0x2e80, 0x2e81, 0x2e81, 0x2e82, 0x2e82, - 0x2e83, 0x2e84, 0x2e85, 0x2e85, 0x2e86, 0x2e87, 0x2e88, 0x2e89, - 0x2e8a, 0x2e8b, 0x2e8c, 0x2e8e, 0x2e8f, 0x2e90, 0x2e91, 0x2e93, - 0x2e94, 0x2e95, 0x2e97, 0x2e98, 0x2e9a, 0x2e9b, 0x2e9d, 0x2e9f, - 0x2ea0, 0x2ea0, 0x2ea0, 0x2ea0, 0x2ea1, 0x2ea1, 0x2ea2, 0x2ea2, - 0x2ea3, 0x2ea4, 0x2ea5, 0x2ea5, 0x2ea6, 0x2ea7, 0x2ea8, 0x2ea9, - 0x2eaa, 0x2eab, 0x2eac, 0x2eae, 0x2eaf, 0x2eb0, 0x2eb1, 0x2eb3, - 0x2eb4, 0x2eb5, 0x2eb7, 0x2eb8, 0x2eba, 0x2ebb, 0x2ebd, 0x2ebf, - 0x2ee0, 0x2ee0, 0x2ee0, 0x2ee0, 0x2ee1, 0x2ee1, 0x2ee2, 0x2ee2, - 0x2ee3, 0x2ee4, 0x2ee5, 0x2ee5, 0x2ee6, 0x2ee7, 0x2ee8, 0x2ee9, - 0x2eea, 0x2eeb, 0x2eec, 0x2eee, 0x2eef, 0x2ef0, 0x2ef1, 0x2ef3, - 0x2ef4, 0x2ef5, 0x2ef7, 0x2ef8, 0x2efa, 0x2efb, 0x2efd, 0x2eff, - 0x2f00, 0x2f00, 0x2f00, 0x2f00, 0x2f01, 0x2f01, 0x2f02, 0x2f02, - 0x2f03, 0x2f04, 0x2f05, 0x2f05, 0x2f06, 0x2f07, 0x2f08, 0x2f09, - 0x2f0a, 0x2f0b, 0x2f0c, 0x2f0e, 0x2f0f, 0x2f10, 0x2f11, 0x2f13, - 0x2f14, 0x2f15, 0x2f17, 0x2f18, 0x2f1a, 0x2f1b, 0x2f1d, 0x2f1f, - 0x2f40, 0x2f40, 0x2f40, 0x2f40, 0x2f41, 0x2f41, 0x2f42, 0x2f42, - 0x2f43, 0x2f44, 0x2f45, 0x2f45, 0x2f46, 0x2f47, 0x2f48, 0x2f49, - 0x2f4a, 0x2f4b, 0x2f4c, 0x2f4e, 0x2f4f, 0x2f50, 0x2f51, 0x2f53, - 0x2f54, 0x2f55, 0x2f57, 0x2f58, 0x2f5a, 0x2f5b, 0x2f5d, 0x2f5f, - 0x2f60, 0x2f60, 0x2f60, 0x2f60, 0x2f61, 0x2f61, 0x2f62, 0x2f62, - 0x2f63, 0x2f64, 0x2f65, 0x2f65, 0x2f66, 0x2f67, 0x2f68, 0x2f69, - 0x2f6a, 0x2f6b, 0x2f6c, 0x2f6e, 0x2f6f, 0x2f70, 0x2f71, 0x2f73, - 0x2f74, 0x2f75, 0x2f77, 0x2f78, 0x2f7a, 0x2f7b, 0x2f7d, 0x2f7f, - 0x2fa0, 0x2fa0, 0x2fa0, 0x2fa0, 0x2fa1, 0x2fa1, 0x2fa2, 0x2fa2, - 0x2fa3, 0x2fa4, 0x2fa5, 0x2fa5, 0x2fa6, 0x2fa7, 0x2fa8, 0x2fa9, - 0x2faa, 0x2fab, 0x2fac, 0x2fae, 0x2faf, 0x2fb0, 0x2fb1, 0x2fb3, - 0x2fb4, 0x2fb5, 0x2fb7, 0x2fb8, 0x2fba, 0x2fbb, 0x2fbd, 0x2fbf, - 0x2fe0, 0x2fe0, 0x2fe0, 0x2fe0, 0x2fe1, 0x2fe1, 0x2fe2, 0x2fe2, - 0x2fe3, 0x2fe4, 0x2fe5, 0x2fe5, 0x2fe6, 0x2fe7, 0x2fe8, 0x2fe9, - 0x2fea, 0x2feb, 0x2fec, 0x2fee, 0x2fef, 0x2ff0, 0x2ff1, 0x2ff3, - 0x2ff4, 0x2ff5, 0x2ff7, 0x2ff8, 0x2ffa, 0x2ffb, 0x2ffd, 0x2fff, - 0x3000, 0x3000, 0x3000, 0x3000, 0x3001, 0x3001, 0x3002, 0x3002, - 0x3003, 0x3004, 0x3005, 0x3005, 0x3006, 0x3007, 0x3008, 0x3009, - 0x300a, 0x300b, 0x300c, 0x300e, 0x300f, 0x3010, 0x3011, 0x3013, - 0x3014, 0x3015, 0x3017, 0x3018, 0x301a, 0x301b, 0x301d, 0x301f, - 0x3000, 0x3000, 0x3000, 0x3000, 0x3001, 0x3001, 0x3002, 0x3002, - 0x3003, 0x3004, 0x3005, 0x3005, 0x3006, 0x3007, 0x3008, 0x3009, - 0x300a, 0x300b, 0x300c, 0x300e, 0x300f, 0x3010, 0x3011, 0x3013, - 0x3014, 0x3015, 0x3017, 0x3018, 0x301a, 0x301b, 0x301d, 0x301f, - 0x3000, 0x3000, 0x3000, 0x3000, 0x3001, 0x3001, 0x3002, 0x3002, - 0x3003, 0x3004, 0x3005, 0x3005, 0x3006, 0x3007, 0x3008, 0x3009, - 0x300a, 0x300b, 0x300c, 0x300e, 0x300f, 0x3010, 0x3011, 0x3013, - 0x3014, 0x3015, 0x3017, 0x3018, 0x301a, 0x301b, 0x301d, 0x301f, - 0x3000, 0x3000, 0x3000, 0x3000, 0x3001, 0x3001, 0x3002, 0x3002, - 0x3003, 0x3004, 0x3005, 0x3005, 0x3006, 0x3007, 0x3008, 0x3009, - 0x300a, 0x300b, 0x300c, 0x300e, 0x300f, 0x3010, 0x3011, 0x3013, - 0x3014, 0x3015, 0x3017, 0x3018, 0x301a, 0x301b, 0x301d, 0x301f, - 0x3000, 0x3000, 0x3000, 0x3000, 0x3001, 0x3001, 0x3002, 0x3002, - 0x3003, 0x3004, 0x3005, 0x3005, 0x3006, 0x3007, 0x3008, 0x3009, - 0x300a, 0x300b, 0x300c, 0x300e, 0x300f, 0x3010, 0x3011, 0x3013, - 0x3014, 0x3015, 0x3017, 0x3018, 0x301a, 0x301b, 0x301d, 0x301f, - 0x3020, 0x3020, 0x3020, 0x3020, 0x3021, 0x3021, 0x3022, 0x3022, - 0x3023, 0x3024, 0x3025, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, - 0x302a, 0x302b, 0x302c, 0x302e, 0x302f, 0x3030, 0x3031, 0x3033, - 0x3034, 0x3035, 0x3037, 0x3038, 0x303a, 0x303b, 0x303d, 0x303f, - 0x3020, 0x3020, 0x3020, 0x3020, 0x3021, 0x3021, 0x3022, 0x3022, - 0x3023, 0x3024, 0x3025, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, - 0x302a, 0x302b, 0x302c, 0x302e, 0x302f, 0x3030, 0x3031, 0x3033, - 0x3034, 0x3035, 0x3037, 0x3038, 0x303a, 0x303b, 0x303d, 0x303f, - 0x3020, 0x3020, 0x3020, 0x3020, 0x3021, 0x3021, 0x3022, 0x3022, - 0x3023, 0x3024, 0x3025, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, - 0x302a, 0x302b, 0x302c, 0x302e, 0x302f, 0x3030, 0x3031, 0x3033, - 0x3034, 0x3035, 0x3037, 0x3038, 0x303a, 0x303b, 0x303d, 0x303f, - 0x3040, 0x3040, 0x3040, 0x3040, 0x3041, 0x3041, 0x3042, 0x3042, - 0x3043, 0x3044, 0x3045, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, - 0x304a, 0x304b, 0x304c, 0x304e, 0x304f, 0x3050, 0x3051, 0x3053, - 0x3054, 0x3055, 0x3057, 0x3058, 0x305a, 0x305b, 0x305d, 0x305f, - 0x3040, 0x3040, 0x3040, 0x3040, 0x3041, 0x3041, 0x3042, 0x3042, - 0x3043, 0x3044, 0x3045, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, - 0x304a, 0x304b, 0x304c, 0x304e, 0x304f, 0x3050, 0x3051, 0x3053, - 0x3054, 0x3055, 0x3057, 0x3058, 0x305a, 0x305b, 0x305d, 0x305f, - 0x3060, 0x3060, 0x3060, 0x3060, 0x3061, 0x3061, 0x3062, 0x3062, - 0x3063, 0x3064, 0x3065, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, - 0x306a, 0x306b, 0x306c, 0x306e, 0x306f, 0x3070, 0x3071, 0x3073, - 0x3074, 0x3075, 0x3077, 0x3078, 0x307a, 0x307b, 0x307d, 0x307f, - 0x3060, 0x3060, 0x3060, 0x3060, 0x3061, 0x3061, 0x3062, 0x3062, - 0x3063, 0x3064, 0x3065, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, - 0x306a, 0x306b, 0x306c, 0x306e, 0x306f, 0x3070, 0x3071, 0x3073, - 0x3074, 0x3075, 0x3077, 0x3078, 0x307a, 0x307b, 0x307d, 0x307f, - 0x3080, 0x3080, 0x3080, 0x3080, 0x3081, 0x3081, 0x3082, 0x3082, - 0x3083, 0x3084, 0x3085, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, - 0x308a, 0x308b, 0x308c, 0x308e, 0x308f, 0x3090, 0x3091, 0x3093, - 0x3094, 0x3095, 0x3097, 0x3098, 0x309a, 0x309b, 0x309d, 0x309f, - 0x30a0, 0x30a0, 0x30a0, 0x30a0, 0x30a1, 0x30a1, 0x30a2, 0x30a2, - 0x30a3, 0x30a4, 0x30a5, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, - 0x30aa, 0x30ab, 0x30ac, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b3, - 0x30b4, 0x30b5, 0x30b7, 0x30b8, 0x30ba, 0x30bb, 0x30bd, 0x30bf, - 0x30a0, 0x30a0, 0x30a0, 0x30a0, 0x30a1, 0x30a1, 0x30a2, 0x30a2, - 0x30a3, 0x30a4, 0x30a5, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, - 0x30aa, 0x30ab, 0x30ac, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b3, - 0x30b4, 0x30b5, 0x30b7, 0x30b8, 0x30ba, 0x30bb, 0x30bd, 0x30bf, - 0x30c0, 0x30c0, 0x30c0, 0x30c0, 0x30c1, 0x30c1, 0x30c2, 0x30c2, - 0x30c3, 0x30c4, 0x30c5, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, - 0x30ca, 0x30cb, 0x30cc, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d3, - 0x30d4, 0x30d5, 0x30d7, 0x30d8, 0x30da, 0x30db, 0x30dd, 0x30df, - 0x30e0, 0x30e0, 0x30e0, 0x30e0, 0x30e1, 0x30e1, 0x30e2, 0x30e2, - 0x30e3, 0x30e4, 0x30e5, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, - 0x30ea, 0x30eb, 0x30ec, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f3, - 0x30f4, 0x30f5, 0x30f7, 0x30f8, 0x30fa, 0x30fb, 0x30fd, 0x30ff, - 0x30e0, 0x30e0, 0x30e0, 0x30e0, 0x30e1, 0x30e1, 0x30e2, 0x30e2, - 0x30e3, 0x30e4, 0x30e5, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, - 0x30ea, 0x30eb, 0x30ec, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f3, - 0x30f4, 0x30f5, 0x30f7, 0x30f8, 0x30fa, 0x30fb, 0x30fd, 0x30ff, - 0x3100, 0x3100, 0x3100, 0x3100, 0x3101, 0x3101, 0x3102, 0x3102, - 0x3103, 0x3104, 0x3105, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, - 0x310a, 0x310b, 0x310c, 0x310e, 0x310f, 0x3110, 0x3111, 0x3113, - 0x3114, 0x3115, 0x3117, 0x3118, 0x311a, 0x311b, 0x311d, 0x311f, - 0x3120, 0x3120, 0x3120, 0x3120, 0x3121, 0x3121, 0x3122, 0x3122, - 0x3123, 0x3124, 0x3125, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, - 0x312a, 0x312b, 0x312c, 0x312e, 0x312f, 0x3130, 0x3131, 0x3133, - 0x3134, 0x3135, 0x3137, 0x3138, 0x313a, 0x313b, 0x313d, 0x313f, - 0x3140, 0x3140, 0x3140, 0x3140, 0x3141, 0x3141, 0x3142, 0x3142, - 0x3143, 0x3144, 0x3145, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, - 0x314a, 0x314b, 0x314c, 0x314e, 0x314f, 0x3150, 0x3151, 0x3153, - 0x3154, 0x3155, 0x3157, 0x3158, 0x315a, 0x315b, 0x315d, 0x315f, - 0x3140, 0x3140, 0x3140, 0x3140, 0x3141, 0x3141, 0x3142, 0x3142, - 0x3143, 0x3144, 0x3145, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, - 0x314a, 0x314b, 0x314c, 0x314e, 0x314f, 0x3150, 0x3151, 0x3153, - 0x3154, 0x3155, 0x3157, 0x3158, 0x315a, 0x315b, 0x315d, 0x315f, - 0x3160, 0x3160, 0x3160, 0x3160, 0x3161, 0x3161, 0x3162, 0x3162, - 0x3163, 0x3164, 0x3165, 0x3165, 0x3166, 0x3167, 0x3168, 0x3169, - 0x316a, 0x316b, 0x316c, 0x316e, 0x316f, 0x3170, 0x3171, 0x3173, - 0x3174, 0x3175, 0x3177, 0x3178, 0x317a, 0x317b, 0x317d, 0x317f, - 0x3180, 0x3180, 0x3180, 0x3180, 0x3181, 0x3181, 0x3182, 0x3182, - 0x3183, 0x3184, 0x3185, 0x3185, 0x3186, 0x3187, 0x3188, 0x3189, - 0x318a, 0x318b, 0x318c, 0x318e, 0x318f, 0x3190, 0x3191, 0x3193, - 0x3194, 0x3195, 0x3197, 0x3198, 0x319a, 0x319b, 0x319d, 0x319f, - 0x31a0, 0x31a0, 0x31a0, 0x31a0, 0x31a1, 0x31a1, 0x31a2, 0x31a2, - 0x31a3, 0x31a4, 0x31a5, 0x31a5, 0x31a6, 0x31a7, 0x31a8, 0x31a9, - 0x31aa, 0x31ab, 0x31ac, 0x31ae, 0x31af, 0x31b0, 0x31b1, 0x31b3, - 0x31b4, 0x31b5, 0x31b7, 0x31b8, 0x31ba, 0x31bb, 0x31bd, 0x31bf, - 0x31c0, 0x31c0, 0x31c0, 0x31c0, 0x31c1, 0x31c1, 0x31c2, 0x31c2, - 0x31c3, 0x31c4, 0x31c5, 0x31c5, 0x31c6, 0x31c7, 0x31c8, 0x31c9, - 0x31ca, 0x31cb, 0x31cc, 0x31ce, 0x31cf, 0x31d0, 0x31d1, 0x31d3, - 0x31d4, 0x31d5, 0x31d7, 0x31d8, 0x31da, 0x31db, 0x31dd, 0x31df, - 0x31e0, 0x31e0, 0x31e0, 0x31e0, 0x31e1, 0x31e1, 0x31e2, 0x31e2, - 0x31e3, 0x31e4, 0x31e5, 0x31e5, 0x31e6, 0x31e7, 0x31e8, 0x31e9, - 0x31ea, 0x31eb, 0x31ec, 0x31ee, 0x31ef, 0x31f0, 0x31f1, 0x31f3, - 0x31f4, 0x31f5, 0x31f7, 0x31f8, 0x31fa, 0x31fb, 0x31fd, 0x31ff, - 0x3200, 0x3200, 0x3200, 0x3200, 0x3201, 0x3201, 0x3202, 0x3202, - 0x3203, 0x3204, 0x3205, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209, - 0x320a, 0x320b, 0x320c, 0x320e, 0x320f, 0x3210, 0x3211, 0x3213, - 0x3214, 0x3215, 0x3217, 0x3218, 0x321a, 0x321b, 0x321d, 0x321f, - 0x3220, 0x3220, 0x3220, 0x3220, 0x3221, 0x3221, 0x3222, 0x3222, - 0x3223, 0x3224, 0x3225, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, - 0x322a, 0x322b, 0x322c, 0x322e, 0x322f, 0x3230, 0x3231, 0x3233, - 0x3234, 0x3235, 0x3237, 0x3238, 0x323a, 0x323b, 0x323d, 0x323f, - 0x3240, 0x3240, 0x3240, 0x3240, 0x3241, 0x3241, 0x3242, 0x3242, - 0x3243, 0x3244, 0x3245, 0x3245, 0x3246, 0x3247, 0x3248, 0x3249, - 0x324a, 0x324b, 0x324c, 0x324e, 0x324f, 0x3250, 0x3251, 0x3253, - 0x3254, 0x3255, 0x3257, 0x3258, 0x325a, 0x325b, 0x325d, 0x325f, - 0x3260, 0x3260, 0x3260, 0x3260, 0x3261, 0x3261, 0x3262, 0x3262, - 0x3263, 0x3264, 0x3265, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, - 0x326a, 0x326b, 0x326c, 0x326e, 0x326f, 0x3270, 0x3271, 0x3273, - 0x3274, 0x3275, 0x3277, 0x3278, 0x327a, 0x327b, 0x327d, 0x327f, - 0x3280, 0x3280, 0x3280, 0x3280, 0x3281, 0x3281, 0x3282, 0x3282, - 0x3283, 0x3284, 0x3285, 0x3285, 0x3286, 0x3287, 0x3288, 0x3289, - 0x328a, 0x328b, 0x328c, 0x328e, 0x328f, 0x3290, 0x3291, 0x3293, - 0x3294, 0x3295, 0x3297, 0x3298, 0x329a, 0x329b, 0x329d, 0x329f, - 0x32a0, 0x32a0, 0x32a0, 0x32a0, 0x32a1, 0x32a1, 0x32a2, 0x32a2, - 0x32a3, 0x32a4, 0x32a5, 0x32a5, 0x32a6, 0x32a7, 0x32a8, 0x32a9, - 0x32aa, 0x32ab, 0x32ac, 0x32ae, 0x32af, 0x32b0, 0x32b1, 0x32b3, - 0x32b4, 0x32b5, 0x32b7, 0x32b8, 0x32ba, 0x32bb, 0x32bd, 0x32bf, - 0x32c0, 0x32c0, 0x32c0, 0x32c0, 0x32c1, 0x32c1, 0x32c2, 0x32c2, - 0x32c3, 0x32c4, 0x32c5, 0x32c5, 0x32c6, 0x32c7, 0x32c8, 0x32c9, - 0x32ca, 0x32cb, 0x32cc, 0x32ce, 0x32cf, 0x32d0, 0x32d1, 0x32d3, - 0x32d4, 0x32d5, 0x32d7, 0x32d8, 0x32da, 0x32db, 0x32dd, 0x32df, - 0x32e0, 0x32e0, 0x32e0, 0x32e0, 0x32e1, 0x32e1, 0x32e2, 0x32e2, - 0x32e3, 0x32e4, 0x32e5, 0x32e5, 0x32e6, 0x32e7, 0x32e8, 0x32e9, - 0x32ea, 0x32eb, 0x32ec, 0x32ee, 0x32ef, 0x32f0, 0x32f1, 0x32f3, - 0x32f4, 0x32f5, 0x32f7, 0x32f8, 0x32fa, 0x32fb, 0x32fd, 0x32ff, - 0x3300, 0x3300, 0x3300, 0x3300, 0x3301, 0x3301, 0x3302, 0x3302, - 0x3303, 0x3304, 0x3305, 0x3305, 0x3306, 0x3307, 0x3308, 0x3309, - 0x330a, 0x330b, 0x330c, 0x330e, 0x330f, 0x3310, 0x3311, 0x3313, - 0x3314, 0x3315, 0x3317, 0x3318, 0x331a, 0x331b, 0x331d, 0x331f, - 0x3320, 0x3320, 0x3320, 0x3320, 0x3321, 0x3321, 0x3322, 0x3322, - 0x3323, 0x3324, 0x3325, 0x3325, 0x3326, 0x3327, 0x3328, 0x3329, - 0x332a, 0x332b, 0x332c, 0x332e, 0x332f, 0x3330, 0x3331, 0x3333, - 0x3334, 0x3335, 0x3337, 0x3338, 0x333a, 0x333b, 0x333d, 0x333f, - 0x3340, 0x3340, 0x3340, 0x3340, 0x3341, 0x3341, 0x3342, 0x3342, - 0x3343, 0x3344, 0x3345, 0x3345, 0x3346, 0x3347, 0x3348, 0x3349, - 0x334a, 0x334b, 0x334c, 0x334e, 0x334f, 0x3350, 0x3351, 0x3353, - 0x3354, 0x3355, 0x3357, 0x3358, 0x335a, 0x335b, 0x335d, 0x335f, - 0x3380, 0x3380, 0x3380, 0x3380, 0x3381, 0x3381, 0x3382, 0x3382, - 0x3383, 0x3384, 0x3385, 0x3385, 0x3386, 0x3387, 0x3388, 0x3389, - 0x338a, 0x338b, 0x338c, 0x338e, 0x338f, 0x3390, 0x3391, 0x3393, - 0x3394, 0x3395, 0x3397, 0x3398, 0x339a, 0x339b, 0x339d, 0x339f, - 0x33a0, 0x33a0, 0x33a0, 0x33a0, 0x33a1, 0x33a1, 0x33a2, 0x33a2, - 0x33a3, 0x33a4, 0x33a5, 0x33a5, 0x33a6, 0x33a7, 0x33a8, 0x33a9, - 0x33aa, 0x33ab, 0x33ac, 0x33ae, 0x33af, 0x33b0, 0x33b1, 0x33b3, - 0x33b4, 0x33b5, 0x33b7, 0x33b8, 0x33ba, 0x33bb, 0x33bd, 0x33bf, - 0x33c0, 0x33c0, 0x33c0, 0x33c0, 0x33c1, 0x33c1, 0x33c2, 0x33c2, - 0x33c3, 0x33c4, 0x33c5, 0x33c5, 0x33c6, 0x33c7, 0x33c8, 0x33c9, - 0x33ca, 0x33cb, 0x33cc, 0x33ce, 0x33cf, 0x33d0, 0x33d1, 0x33d3, - 0x33d4, 0x33d5, 0x33d7, 0x33d8, 0x33da, 0x33db, 0x33dd, 0x33df, - 0x33e0, 0x33e0, 0x33e0, 0x33e0, 0x33e1, 0x33e1, 0x33e2, 0x33e2, - 0x33e3, 0x33e4, 0x33e5, 0x33e5, 0x33e6, 0x33e7, 0x33e8, 0x33e9, - 0x33ea, 0x33eb, 0x33ec, 0x33ee, 0x33ef, 0x33f0, 0x33f1, 0x33f3, - 0x33f4, 0x33f5, 0x33f7, 0x33f8, 0x33fa, 0x33fb, 0x33fd, 0x33ff, - 0x3400, 0x3400, 0x3400, 0x3400, 0x3401, 0x3401, 0x3402, 0x3402, - 0x3403, 0x3404, 0x3405, 0x3405, 0x3406, 0x3407, 0x3408, 0x3409, - 0x340a, 0x340b, 0x340c, 0x340e, 0x340f, 0x3410, 0x3411, 0x3413, - 0x3414, 0x3415, 0x3417, 0x3418, 0x341a, 0x341b, 0x341d, 0x341f, - 0x3440, 0x3440, 0x3440, 0x3440, 0x3441, 0x3441, 0x3442, 0x3442, - 0x3443, 0x3444, 0x3445, 0x3445, 0x3446, 0x3447, 0x3448, 0x3449, - 0x344a, 0x344b, 0x344c, 0x344e, 0x344f, 0x3450, 0x3451, 0x3453, - 0x3454, 0x3455, 0x3457, 0x3458, 0x345a, 0x345b, 0x345d, 0x345f, - 0x3460, 0x3460, 0x3460, 0x3460, 0x3461, 0x3461, 0x3462, 0x3462, - 0x3463, 0x3464, 0x3465, 0x3465, 0x3466, 0x3467, 0x3468, 0x3469, - 0x346a, 0x346b, 0x346c, 0x346e, 0x346f, 0x3470, 0x3471, 0x3473, - 0x3474, 0x3475, 0x3477, 0x3478, 0x347a, 0x347b, 0x347d, 0x347f, - 0x3480, 0x3480, 0x3480, 0x3480, 0x3481, 0x3481, 0x3482, 0x3482, - 0x3483, 0x3484, 0x3485, 0x3485, 0x3486, 0x3487, 0x3488, 0x3489, - 0x348a, 0x348b, 0x348c, 0x348e, 0x348f, 0x3490, 0x3491, 0x3493, - 0x3494, 0x3495, 0x3497, 0x3498, 0x349a, 0x349b, 0x349d, 0x349f, - 0x34c0, 0x34c0, 0x34c0, 0x34c0, 0x34c1, 0x34c1, 0x34c2, 0x34c2, - 0x34c3, 0x34c4, 0x34c5, 0x34c5, 0x34c6, 0x34c7, 0x34c8, 0x34c9, - 0x34ca, 0x34cb, 0x34cc, 0x34ce, 0x34cf, 0x34d0, 0x34d1, 0x34d3, - 0x34d4, 0x34d5, 0x34d7, 0x34d8, 0x34da, 0x34db, 0x34dd, 0x34df, - 0x34e0, 0x34e0, 0x34e0, 0x34e0, 0x34e1, 0x34e1, 0x34e2, 0x34e2, - 0x34e3, 0x34e4, 0x34e5, 0x34e5, 0x34e6, 0x34e7, 0x34e8, 0x34e9, - 0x34ea, 0x34eb, 0x34ec, 0x34ee, 0x34ef, 0x34f0, 0x34f1, 0x34f3, - 0x34f4, 0x34f5, 0x34f7, 0x34f8, 0x34fa, 0x34fb, 0x34fd, 0x34ff, - 0x3500, 0x3500, 0x3500, 0x3500, 0x3501, 0x3501, 0x3502, 0x3502, - 0x3503, 0x3504, 0x3505, 0x3505, 0x3506, 0x3507, 0x3508, 0x3509, - 0x350a, 0x350b, 0x350c, 0x350e, 0x350f, 0x3510, 0x3511, 0x3513, - 0x3514, 0x3515, 0x3517, 0x3518, 0x351a, 0x351b, 0x351d, 0x351f, - 0x3540, 0x3540, 0x3540, 0x3540, 0x3541, 0x3541, 0x3542, 0x3542, - 0x3543, 0x3544, 0x3545, 0x3545, 0x3546, 0x3547, 0x3548, 0x3549, - 0x354a, 0x354b, 0x354c, 0x354e, 0x354f, 0x3550, 0x3551, 0x3553, - 0x3554, 0x3555, 0x3557, 0x3558, 0x355a, 0x355b, 0x355d, 0x355f, - 0x3560, 0x3560, 0x3560, 0x3560, 0x3561, 0x3561, 0x3562, 0x3562, - 0x3563, 0x3564, 0x3565, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569, - 0x356a, 0x356b, 0x356c, 0x356e, 0x356f, 0x3570, 0x3571, 0x3573, - 0x3574, 0x3575, 0x3577, 0x3578, 0x357a, 0x357b, 0x357d, 0x357f, - 0x3580, 0x3580, 0x3580, 0x3580, 0x3581, 0x3581, 0x3582, 0x3582, - 0x3583, 0x3584, 0x3585, 0x3585, 0x3586, 0x3587, 0x3588, 0x3589, - 0x358a, 0x358b, 0x358c, 0x358e, 0x358f, 0x3590, 0x3591, 0x3593, - 0x3594, 0x3595, 0x3597, 0x3598, 0x359a, 0x359b, 0x359d, 0x359f, - 0x35c0, 0x35c0, 0x35c0, 0x35c0, 0x35c1, 0x35c1, 0x35c2, 0x35c2, - 0x35c3, 0x35c4, 0x35c5, 0x35c5, 0x35c6, 0x35c7, 0x35c8, 0x35c9, - 0x35ca, 0x35cb, 0x35cc, 0x35ce, 0x35cf, 0x35d0, 0x35d1, 0x35d3, - 0x35d4, 0x35d5, 0x35d7, 0x35d8, 0x35da, 0x35db, 0x35dd, 0x35df, - 0x35e0, 0x35e0, 0x35e0, 0x35e0, 0x35e1, 0x35e1, 0x35e2, 0x35e2, - 0x35e3, 0x35e4, 0x35e5, 0x35e5, 0x35e6, 0x35e7, 0x35e8, 0x35e9, - 0x35ea, 0x35eb, 0x35ec, 0x35ee, 0x35ef, 0x35f0, 0x35f1, 0x35f3, - 0x35f4, 0x35f5, 0x35f7, 0x35f8, 0x35fa, 0x35fb, 0x35fd, 0x35ff, - 0x3620, 0x3620, 0x3620, 0x3620, 0x3621, 0x3621, 0x3622, 0x3622, - 0x3623, 0x3624, 0x3625, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, - 0x362a, 0x362b, 0x362c, 0x362e, 0x362f, 0x3630, 0x3631, 0x3633, - 0x3634, 0x3635, 0x3637, 0x3638, 0x363a, 0x363b, 0x363d, 0x363f, - 0x3640, 0x3640, 0x3640, 0x3640, 0x3641, 0x3641, 0x3642, 0x3642, - 0x3643, 0x3644, 0x3645, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, - 0x364a, 0x364b, 0x364c, 0x364e, 0x364f, 0x3650, 0x3651, 0x3653, - 0x3654, 0x3655, 0x3657, 0x3658, 0x365a, 0x365b, 0x365d, 0x365f, - 0x3680, 0x3680, 0x3680, 0x3680, 0x3681, 0x3681, 0x3682, 0x3682, - 0x3683, 0x3684, 0x3685, 0x3685, 0x3686, 0x3687, 0x3688, 0x3689, - 0x368a, 0x368b, 0x368c, 0x368e, 0x368f, 0x3690, 0x3691, 0x3693, - 0x3694, 0x3695, 0x3697, 0x3698, 0x369a, 0x369b, 0x369d, 0x369f, - 0x36a0, 0x36a0, 0x36a0, 0x36a0, 0x36a1, 0x36a1, 0x36a2, 0x36a2, - 0x36a3, 0x36a4, 0x36a5, 0x36a5, 0x36a6, 0x36a7, 0x36a8, 0x36a9, - 0x36aa, 0x36ab, 0x36ac, 0x36ae, 0x36af, 0x36b0, 0x36b1, 0x36b3, - 0x36b4, 0x36b5, 0x36b7, 0x36b8, 0x36ba, 0x36bb, 0x36bd, 0x36bf, - 0x36e0, 0x36e0, 0x36e0, 0x36e0, 0x36e1, 0x36e1, 0x36e2, 0x36e2, - 0x36e3, 0x36e4, 0x36e5, 0x36e5, 0x36e6, 0x36e7, 0x36e8, 0x36e9, - 0x36ea, 0x36eb, 0x36ec, 0x36ee, 0x36ef, 0x36f0, 0x36f1, 0x36f3, - 0x36f4, 0x36f5, 0x36f7, 0x36f8, 0x36fa, 0x36fb, 0x36fd, 0x36ff, - 0x3700, 0x3700, 0x3700, 0x3700, 0x3701, 0x3701, 0x3702, 0x3702, - 0x3703, 0x3704, 0x3705, 0x3705, 0x3706, 0x3707, 0x3708, 0x3709, - 0x370a, 0x370b, 0x370c, 0x370e, 0x370f, 0x3710, 0x3711, 0x3713, - 0x3714, 0x3715, 0x3717, 0x3718, 0x371a, 0x371b, 0x371d, 0x371f, - 0x3740, 0x3740, 0x3740, 0x3740, 0x3741, 0x3741, 0x3742, 0x3742, - 0x3743, 0x3744, 0x3745, 0x3745, 0x3746, 0x3747, 0x3748, 0x3749, - 0x374a, 0x374b, 0x374c, 0x374e, 0x374f, 0x3750, 0x3751, 0x3753, - 0x3754, 0x3755, 0x3757, 0x3758, 0x375a, 0x375b, 0x375d, 0x375f, - 0x3760, 0x3760, 0x3760, 0x3760, 0x3761, 0x3761, 0x3762, 0x3762, - 0x3763, 0x3764, 0x3765, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, - 0x376a, 0x376b, 0x376c, 0x376e, 0x376f, 0x3770, 0x3771, 0x3773, - 0x3774, 0x3775, 0x3777, 0x3778, 0x377a, 0x377b, 0x377d, 0x377f, - 0x37a0, 0x37a0, 0x37a0, 0x37a0, 0x37a1, 0x37a1, 0x37a2, 0x37a2, - 0x37a3, 0x37a4, 0x37a5, 0x37a5, 0x37a6, 0x37a7, 0x37a8, 0x37a9, - 0x37aa, 0x37ab, 0x37ac, 0x37ae, 0x37af, 0x37b0, 0x37b1, 0x37b3, - 0x37b4, 0x37b5, 0x37b7, 0x37b8, 0x37ba, 0x37bb, 0x37bd, 0x37bf, - 0x37e0, 0x37e0, 0x37e0, 0x37e0, 0x37e1, 0x37e1, 0x37e2, 0x37e2, - 0x37e3, 0x37e4, 0x37e5, 0x37e5, 0x37e6, 0x37e7, 0x37e8, 0x37e9, - 0x37ea, 0x37eb, 0x37ec, 0x37ee, 0x37ef, 0x37f0, 0x37f1, 0x37f3, - 0x37f4, 0x37f5, 0x37f7, 0x37f8, 0x37fa, 0x37fb, 0x37fd, 0x37ff, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3801, 0x3801, 0x3802, 0x3802, - 0x3803, 0x3804, 0x3805, 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, - 0x380a, 0x380b, 0x380c, 0x380e, 0x380f, 0x3810, 0x3811, 0x3813, - 0x3814, 0x3815, 0x3817, 0x3818, 0x381a, 0x381b, 0x381d, 0x381f, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3801, 0x3801, 0x3802, 0x3802, - 0x3803, 0x3804, 0x3805, 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, - 0x380a, 0x380b, 0x380c, 0x380e, 0x380f, 0x3810, 0x3811, 0x3813, - 0x3814, 0x3815, 0x3817, 0x3818, 0x381a, 0x381b, 0x381d, 0x381f, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3801, 0x3801, 0x3802, 0x3802, - 0x3803, 0x3804, 0x3805, 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, - 0x380a, 0x380b, 0x380c, 0x380e, 0x380f, 0x3810, 0x3811, 0x3813, - 0x3814, 0x3815, 0x3817, 0x3818, 0x381a, 0x381b, 0x381d, 0x381f, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3801, 0x3801, 0x3802, 0x3802, - 0x3803, 0x3804, 0x3805, 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, - 0x380a, 0x380b, 0x380c, 0x380e, 0x380f, 0x3810, 0x3811, 0x3813, - 0x3814, 0x3815, 0x3817, 0x3818, 0x381a, 0x381b, 0x381d, 0x381f, - 0x3800, 0x3800, 0x3800, 0x3800, 0x3801, 0x3801, 0x3802, 0x3802, - 0x3803, 0x3804, 0x3805, 0x3805, 0x3806, 0x3807, 0x3808, 0x3809, - 0x380a, 0x380b, 0x380c, 0x380e, 0x380f, 0x3810, 0x3811, 0x3813, - 0x3814, 0x3815, 0x3817, 0x3818, 0x381a, 0x381b, 0x381d, 0x381f, - 0x3820, 0x3820, 0x3820, 0x3820, 0x3821, 0x3821, 0x3822, 0x3822, - 0x3823, 0x3824, 0x3825, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, - 0x382a, 0x382b, 0x382c, 0x382e, 0x382f, 0x3830, 0x3831, 0x3833, - 0x3834, 0x3835, 0x3837, 0x3838, 0x383a, 0x383b, 0x383d, 0x383f, - 0x3820, 0x3820, 0x3820, 0x3820, 0x3821, 0x3821, 0x3822, 0x3822, - 0x3823, 0x3824, 0x3825, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, - 0x382a, 0x382b, 0x382c, 0x382e, 0x382f, 0x3830, 0x3831, 0x3833, - 0x3834, 0x3835, 0x3837, 0x3838, 0x383a, 0x383b, 0x383d, 0x383f, - 0x3820, 0x3820, 0x3820, 0x3820, 0x3821, 0x3821, 0x3822, 0x3822, - 0x3823, 0x3824, 0x3825, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, - 0x382a, 0x382b, 0x382c, 0x382e, 0x382f, 0x3830, 0x3831, 0x3833, - 0x3834, 0x3835, 0x3837, 0x3838, 0x383a, 0x383b, 0x383d, 0x383f, - 0x3840, 0x3840, 0x3840, 0x3840, 0x3841, 0x3841, 0x3842, 0x3842, - 0x3843, 0x3844, 0x3845, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, - 0x384a, 0x384b, 0x384c, 0x384e, 0x384f, 0x3850, 0x3851, 0x3853, - 0x3854, 0x3855, 0x3857, 0x3858, 0x385a, 0x385b, 0x385d, 0x385f, - 0x3840, 0x3840, 0x3840, 0x3840, 0x3841, 0x3841, 0x3842, 0x3842, - 0x3843, 0x3844, 0x3845, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, - 0x384a, 0x384b, 0x384c, 0x384e, 0x384f, 0x3850, 0x3851, 0x3853, - 0x3854, 0x3855, 0x3857, 0x3858, 0x385a, 0x385b, 0x385d, 0x385f, - 0x3860, 0x3860, 0x3860, 0x3860, 0x3861, 0x3861, 0x3862, 0x3862, - 0x3863, 0x3864, 0x3865, 0x3865, 0x3866, 0x3867, 0x3868, 0x3869, - 0x386a, 0x386b, 0x386c, 0x386e, 0x386f, 0x3870, 0x3871, 0x3873, - 0x3874, 0x3875, 0x3877, 0x3878, 0x387a, 0x387b, 0x387d, 0x387f, - 0x3860, 0x3860, 0x3860, 0x3860, 0x3861, 0x3861, 0x3862, 0x3862, - 0x3863, 0x3864, 0x3865, 0x3865, 0x3866, 0x3867, 0x3868, 0x3869, - 0x386a, 0x386b, 0x386c, 0x386e, 0x386f, 0x3870, 0x3871, 0x3873, - 0x3874, 0x3875, 0x3877, 0x3878, 0x387a, 0x387b, 0x387d, 0x387f, - 0x3880, 0x3880, 0x3880, 0x3880, 0x3881, 0x3881, 0x3882, 0x3882, - 0x3883, 0x3884, 0x3885, 0x3885, 0x3886, 0x3887, 0x3888, 0x3889, - 0x388a, 0x388b, 0x388c, 0x388e, 0x388f, 0x3890, 0x3891, 0x3893, - 0x3894, 0x3895, 0x3897, 0x3898, 0x389a, 0x389b, 0x389d, 0x389f, - 0x38a0, 0x38a0, 0x38a0, 0x38a0, 0x38a1, 0x38a1, 0x38a2, 0x38a2, - 0x38a3, 0x38a4, 0x38a5, 0x38a5, 0x38a6, 0x38a7, 0x38a8, 0x38a9, - 0x38aa, 0x38ab, 0x38ac, 0x38ae, 0x38af, 0x38b0, 0x38b1, 0x38b3, - 0x38b4, 0x38b5, 0x38b7, 0x38b8, 0x38ba, 0x38bb, 0x38bd, 0x38bf, - 0x38a0, 0x38a0, 0x38a0, 0x38a0, 0x38a1, 0x38a1, 0x38a2, 0x38a2, - 0x38a3, 0x38a4, 0x38a5, 0x38a5, 0x38a6, 0x38a7, 0x38a8, 0x38a9, - 0x38aa, 0x38ab, 0x38ac, 0x38ae, 0x38af, 0x38b0, 0x38b1, 0x38b3, - 0x38b4, 0x38b5, 0x38b7, 0x38b8, 0x38ba, 0x38bb, 0x38bd, 0x38bf, - 0x38c0, 0x38c0, 0x38c0, 0x38c0, 0x38c1, 0x38c1, 0x38c2, 0x38c2, - 0x38c3, 0x38c4, 0x38c5, 0x38c5, 0x38c6, 0x38c7, 0x38c8, 0x38c9, - 0x38ca, 0x38cb, 0x38cc, 0x38ce, 0x38cf, 0x38d0, 0x38d1, 0x38d3, - 0x38d4, 0x38d5, 0x38d7, 0x38d8, 0x38da, 0x38db, 0x38dd, 0x38df, - 0x38e0, 0x38e0, 0x38e0, 0x38e0, 0x38e1, 0x38e1, 0x38e2, 0x38e2, - 0x38e3, 0x38e4, 0x38e5, 0x38e5, 0x38e6, 0x38e7, 0x38e8, 0x38e9, - 0x38ea, 0x38eb, 0x38ec, 0x38ee, 0x38ef, 0x38f0, 0x38f1, 0x38f3, - 0x38f4, 0x38f5, 0x38f7, 0x38f8, 0x38fa, 0x38fb, 0x38fd, 0x38ff, - 0x38e0, 0x38e0, 0x38e0, 0x38e0, 0x38e1, 0x38e1, 0x38e2, 0x38e2, - 0x38e3, 0x38e4, 0x38e5, 0x38e5, 0x38e6, 0x38e7, 0x38e8, 0x38e9, - 0x38ea, 0x38eb, 0x38ec, 0x38ee, 0x38ef, 0x38f0, 0x38f1, 0x38f3, - 0x38f4, 0x38f5, 0x38f7, 0x38f8, 0x38fa, 0x38fb, 0x38fd, 0x38ff, - 0x3900, 0x3900, 0x3900, 0x3900, 0x3901, 0x3901, 0x3902, 0x3902, - 0x3903, 0x3904, 0x3905, 0x3905, 0x3906, 0x3907, 0x3908, 0x3909, - 0x390a, 0x390b, 0x390c, 0x390e, 0x390f, 0x3910, 0x3911, 0x3913, - 0x3914, 0x3915, 0x3917, 0x3918, 0x391a, 0x391b, 0x391d, 0x391f, - 0x3920, 0x3920, 0x3920, 0x3920, 0x3921, 0x3921, 0x3922, 0x3922, - 0x3923, 0x3924, 0x3925, 0x3925, 0x3926, 0x3927, 0x3928, 0x3929, - 0x392a, 0x392b, 0x392c, 0x392e, 0x392f, 0x3930, 0x3931, 0x3933, - 0x3934, 0x3935, 0x3937, 0x3938, 0x393a, 0x393b, 0x393d, 0x393f, - 0x3940, 0x3940, 0x3940, 0x3940, 0x3941, 0x3941, 0x3942, 0x3942, - 0x3943, 0x3944, 0x3945, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949, - 0x394a, 0x394b, 0x394c, 0x394e, 0x394f, 0x3950, 0x3951, 0x3953, - 0x3954, 0x3955, 0x3957, 0x3958, 0x395a, 0x395b, 0x395d, 0x395f, - 0x3940, 0x3940, 0x3940, 0x3940, 0x3941, 0x3941, 0x3942, 0x3942, - 0x3943, 0x3944, 0x3945, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949, - 0x394a, 0x394b, 0x394c, 0x394e, 0x394f, 0x3950, 0x3951, 0x3953, - 0x3954, 0x3955, 0x3957, 0x3958, 0x395a, 0x395b, 0x395d, 0x395f, - 0x3960, 0x3960, 0x3960, 0x3960, 0x3961, 0x3961, 0x3962, 0x3962, - 0x3963, 0x3964, 0x3965, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969, - 0x396a, 0x396b, 0x396c, 0x396e, 0x396f, 0x3970, 0x3971, 0x3973, - 0x3974, 0x3975, 0x3977, 0x3978, 0x397a, 0x397b, 0x397d, 0x397f, - 0x3980, 0x3980, 0x3980, 0x3980, 0x3981, 0x3981, 0x3982, 0x3982, - 0x3983, 0x3984, 0x3985, 0x3985, 0x3986, 0x3987, 0x3988, 0x3989, - 0x398a, 0x398b, 0x398c, 0x398e, 0x398f, 0x3990, 0x3991, 0x3993, - 0x3994, 0x3995, 0x3997, 0x3998, 0x399a, 0x399b, 0x399d, 0x399f, - 0x39a0, 0x39a0, 0x39a0, 0x39a0, 0x39a1, 0x39a1, 0x39a2, 0x39a2, - 0x39a3, 0x39a4, 0x39a5, 0x39a5, 0x39a6, 0x39a7, 0x39a8, 0x39a9, - 0x39aa, 0x39ab, 0x39ac, 0x39ae, 0x39af, 0x39b0, 0x39b1, 0x39b3, - 0x39b4, 0x39b5, 0x39b7, 0x39b8, 0x39ba, 0x39bb, 0x39bd, 0x39bf, - 0x39c0, 0x39c0, 0x39c0, 0x39c0, 0x39c1, 0x39c1, 0x39c2, 0x39c2, - 0x39c3, 0x39c4, 0x39c5, 0x39c5, 0x39c6, 0x39c7, 0x39c8, 0x39c9, - 0x39ca, 0x39cb, 0x39cc, 0x39ce, 0x39cf, 0x39d0, 0x39d1, 0x39d3, - 0x39d4, 0x39d5, 0x39d7, 0x39d8, 0x39da, 0x39db, 0x39dd, 0x39df, - 0x39e0, 0x39e0, 0x39e0, 0x39e0, 0x39e1, 0x39e1, 0x39e2, 0x39e2, - 0x39e3, 0x39e4, 0x39e5, 0x39e5, 0x39e6, 0x39e7, 0x39e8, 0x39e9, - 0x39ea, 0x39eb, 0x39ec, 0x39ee, 0x39ef, 0x39f0, 0x39f1, 0x39f3, - 0x39f4, 0x39f5, 0x39f7, 0x39f8, 0x39fa, 0x39fb, 0x39fd, 0x39ff, - 0x3a00, 0x3a00, 0x3a00, 0x3a00, 0x3a01, 0x3a01, 0x3a02, 0x3a02, - 0x3a03, 0x3a04, 0x3a05, 0x3a05, 0x3a06, 0x3a07, 0x3a08, 0x3a09, - 0x3a0a, 0x3a0b, 0x3a0c, 0x3a0e, 0x3a0f, 0x3a10, 0x3a11, 0x3a13, - 0x3a14, 0x3a15, 0x3a17, 0x3a18, 0x3a1a, 0x3a1b, 0x3a1d, 0x3a1f, - 0x3a20, 0x3a20, 0x3a20, 0x3a20, 0x3a21, 0x3a21, 0x3a22, 0x3a22, - 0x3a23, 0x3a24, 0x3a25, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, - 0x3a2a, 0x3a2b, 0x3a2c, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a33, - 0x3a34, 0x3a35, 0x3a37, 0x3a38, 0x3a3a, 0x3a3b, 0x3a3d, 0x3a3f, - 0x3a40, 0x3a40, 0x3a40, 0x3a40, 0x3a41, 0x3a41, 0x3a42, 0x3a42, - 0x3a43, 0x3a44, 0x3a45, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, - 0x3a4a, 0x3a4b, 0x3a4c, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a53, - 0x3a54, 0x3a55, 0x3a57, 0x3a58, 0x3a5a, 0x3a5b, 0x3a5d, 0x3a5f, - 0x3a60, 0x3a60, 0x3a60, 0x3a60, 0x3a61, 0x3a61, 0x3a62, 0x3a62, - 0x3a63, 0x3a64, 0x3a65, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, - 0x3a6a, 0x3a6b, 0x3a6c, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a73, - 0x3a74, 0x3a75, 0x3a77, 0x3a78, 0x3a7a, 0x3a7b, 0x3a7d, 0x3a7f, - 0x3a80, 0x3a80, 0x3a80, 0x3a80, 0x3a81, 0x3a81, 0x3a82, 0x3a82, - 0x3a83, 0x3a84, 0x3a85, 0x3a85, 0x3a86, 0x3a87, 0x3a88, 0x3a89, - 0x3a8a, 0x3a8b, 0x3a8c, 0x3a8e, 0x3a8f, 0x3a90, 0x3a91, 0x3a93, - 0x3a94, 0x3a95, 0x3a97, 0x3a98, 0x3a9a, 0x3a9b, 0x3a9d, 0x3a9f, - 0x3aa0, 0x3aa0, 0x3aa0, 0x3aa0, 0x3aa1, 0x3aa1, 0x3aa2, 0x3aa2, - 0x3aa3, 0x3aa4, 0x3aa5, 0x3aa5, 0x3aa6, 0x3aa7, 0x3aa8, 0x3aa9, - 0x3aaa, 0x3aab, 0x3aac, 0x3aae, 0x3aaf, 0x3ab0, 0x3ab1, 0x3ab3, - 0x3ab4, 0x3ab5, 0x3ab7, 0x3ab8, 0x3aba, 0x3abb, 0x3abd, 0x3abf, - 0x3ac0, 0x3ac0, 0x3ac0, 0x3ac0, 0x3ac1, 0x3ac1, 0x3ac2, 0x3ac2, - 0x3ac3, 0x3ac4, 0x3ac5, 0x3ac5, 0x3ac6, 0x3ac7, 0x3ac8, 0x3ac9, - 0x3aca, 0x3acb, 0x3acc, 0x3ace, 0x3acf, 0x3ad0, 0x3ad1, 0x3ad3, - 0x3ad4, 0x3ad5, 0x3ad7, 0x3ad8, 0x3ada, 0x3adb, 0x3add, 0x3adf, - 0x3ae0, 0x3ae0, 0x3ae0, 0x3ae0, 0x3ae1, 0x3ae1, 0x3ae2, 0x3ae2, - 0x3ae3, 0x3ae4, 0x3ae5, 0x3ae5, 0x3ae6, 0x3ae7, 0x3ae8, 0x3ae9, - 0x3aea, 0x3aeb, 0x3aec, 0x3aee, 0x3aef, 0x3af0, 0x3af1, 0x3af3, - 0x3af4, 0x3af5, 0x3af7, 0x3af8, 0x3afa, 0x3afb, 0x3afd, 0x3aff, - 0x3b00, 0x3b00, 0x3b00, 0x3b00, 0x3b01, 0x3b01, 0x3b02, 0x3b02, - 0x3b03, 0x3b04, 0x3b05, 0x3b05, 0x3b06, 0x3b07, 0x3b08, 0x3b09, - 0x3b0a, 0x3b0b, 0x3b0c, 0x3b0e, 0x3b0f, 0x3b10, 0x3b11, 0x3b13, - 0x3b14, 0x3b15, 0x3b17, 0x3b18, 0x3b1a, 0x3b1b, 0x3b1d, 0x3b1f, - 0x3b20, 0x3b20, 0x3b20, 0x3b20, 0x3b21, 0x3b21, 0x3b22, 0x3b22, - 0x3b23, 0x3b24, 0x3b25, 0x3b25, 0x3b26, 0x3b27, 0x3b28, 0x3b29, - 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b33, - 0x3b34, 0x3b35, 0x3b37, 0x3b38, 0x3b3a, 0x3b3b, 0x3b3d, 0x3b3f, - 0x3b40, 0x3b40, 0x3b40, 0x3b40, 0x3b41, 0x3b41, 0x3b42, 0x3b42, - 0x3b43, 0x3b44, 0x3b45, 0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49, - 0x3b4a, 0x3b4b, 0x3b4c, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b53, - 0x3b54, 0x3b55, 0x3b57, 0x3b58, 0x3b5a, 0x3b5b, 0x3b5d, 0x3b5f, - 0x3b80, 0x3b80, 0x3b80, 0x3b80, 0x3b81, 0x3b81, 0x3b82, 0x3b82, - 0x3b83, 0x3b84, 0x3b85, 0x3b85, 0x3b86, 0x3b87, 0x3b88, 0x3b89, - 0x3b8a, 0x3b8b, 0x3b8c, 0x3b8e, 0x3b8f, 0x3b90, 0x3b91, 0x3b93, - 0x3b94, 0x3b95, 0x3b97, 0x3b98, 0x3b9a, 0x3b9b, 0x3b9d, 0x3b9f, - 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba0, 0x3ba1, 0x3ba1, 0x3ba2, 0x3ba2, - 0x3ba3, 0x3ba4, 0x3ba5, 0x3ba5, 0x3ba6, 0x3ba7, 0x3ba8, 0x3ba9, - 0x3baa, 0x3bab, 0x3bac, 0x3bae, 0x3baf, 0x3bb0, 0x3bb1, 0x3bb3, - 0x3bb4, 0x3bb5, 0x3bb7, 0x3bb8, 0x3bba, 0x3bbb, 0x3bbd, 0x3bbf, - 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc0, 0x3bc1, 0x3bc1, 0x3bc2, 0x3bc2, - 0x3bc3, 0x3bc4, 0x3bc5, 0x3bc5, 0x3bc6, 0x3bc7, 0x3bc8, 0x3bc9, - 0x3bca, 0x3bcb, 0x3bcc, 0x3bce, 0x3bcf, 0x3bd0, 0x3bd1, 0x3bd3, - 0x3bd4, 0x3bd5, 0x3bd7, 0x3bd8, 0x3bda, 0x3bdb, 0x3bdd, 0x3bdf, - 0x3be0, 0x3be0, 0x3be0, 0x3be0, 0x3be1, 0x3be1, 0x3be2, 0x3be2, - 0x3be3, 0x3be4, 0x3be5, 0x3be5, 0x3be6, 0x3be7, 0x3be8, 0x3be9, - 0x3bea, 0x3beb, 0x3bec, 0x3bee, 0x3bef, 0x3bf0, 0x3bf1, 0x3bf3, - 0x3bf4, 0x3bf5, 0x3bf7, 0x3bf8, 0x3bfa, 0x3bfb, 0x3bfd, 0x3bff, - 0x3c00, 0x3c00, 0x3c00, 0x3c00, 0x3c01, 0x3c01, 0x3c02, 0x3c02, - 0x3c03, 0x3c04, 0x3c05, 0x3c05, 0x3c06, 0x3c07, 0x3c08, 0x3c09, - 0x3c0a, 0x3c0b, 0x3c0c, 0x3c0e, 0x3c0f, 0x3c10, 0x3c11, 0x3c13, - 0x3c14, 0x3c15, 0x3c17, 0x3c18, 0x3c1a, 0x3c1b, 0x3c1d, 0x3c1f, - 0x3c40, 0x3c40, 0x3c40, 0x3c40, 0x3c41, 0x3c41, 0x3c42, 0x3c42, - 0x3c43, 0x3c44, 0x3c45, 0x3c45, 0x3c46, 0x3c47, 0x3c48, 0x3c49, - 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4e, 0x3c4f, 0x3c50, 0x3c51, 0x3c53, - 0x3c54, 0x3c55, 0x3c57, 0x3c58, 0x3c5a, 0x3c5b, 0x3c5d, 0x3c5f, - 0x3c60, 0x3c60, 0x3c60, 0x3c60, 0x3c61, 0x3c61, 0x3c62, 0x3c62, - 0x3c63, 0x3c64, 0x3c65, 0x3c65, 0x3c66, 0x3c67, 0x3c68, 0x3c69, - 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6e, 0x3c6f, 0x3c70, 0x3c71, 0x3c73, - 0x3c74, 0x3c75, 0x3c77, 0x3c78, 0x3c7a, 0x3c7b, 0x3c7d, 0x3c7f, - 0x3c80, 0x3c80, 0x3c80, 0x3c80, 0x3c81, 0x3c81, 0x3c82, 0x3c82, - 0x3c83, 0x3c84, 0x3c85, 0x3c85, 0x3c86, 0x3c87, 0x3c88, 0x3c89, - 0x3c8a, 0x3c8b, 0x3c8c, 0x3c8e, 0x3c8f, 0x3c90, 0x3c91, 0x3c93, - 0x3c94, 0x3c95, 0x3c97, 0x3c98, 0x3c9a, 0x3c9b, 0x3c9d, 0x3c9f, - 0x3cc0, 0x3cc0, 0x3cc0, 0x3cc0, 0x3cc1, 0x3cc1, 0x3cc2, 0x3cc2, - 0x3cc3, 0x3cc4, 0x3cc5, 0x3cc5, 0x3cc6, 0x3cc7, 0x3cc8, 0x3cc9, - 0x3cca, 0x3ccb, 0x3ccc, 0x3cce, 0x3ccf, 0x3cd0, 0x3cd1, 0x3cd3, - 0x3cd4, 0x3cd5, 0x3cd7, 0x3cd8, 0x3cda, 0x3cdb, 0x3cdd, 0x3cdf, - 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce0, 0x3ce1, 0x3ce1, 0x3ce2, 0x3ce2, - 0x3ce3, 0x3ce4, 0x3ce5, 0x3ce5, 0x3ce6, 0x3ce7, 0x3ce8, 0x3ce9, - 0x3cea, 0x3ceb, 0x3cec, 0x3cee, 0x3cef, 0x3cf0, 0x3cf1, 0x3cf3, - 0x3cf4, 0x3cf5, 0x3cf7, 0x3cf8, 0x3cfa, 0x3cfb, 0x3cfd, 0x3cff, - 0x3d00, 0x3d00, 0x3d00, 0x3d00, 0x3d01, 0x3d01, 0x3d02, 0x3d02, - 0x3d03, 0x3d04, 0x3d05, 0x3d05, 0x3d06, 0x3d07, 0x3d08, 0x3d09, - 0x3d0a, 0x3d0b, 0x3d0c, 0x3d0e, 0x3d0f, 0x3d10, 0x3d11, 0x3d13, - 0x3d14, 0x3d15, 0x3d17, 0x3d18, 0x3d1a, 0x3d1b, 0x3d1d, 0x3d1f, - 0x3d40, 0x3d40, 0x3d40, 0x3d40, 0x3d41, 0x3d41, 0x3d42, 0x3d42, - 0x3d43, 0x3d44, 0x3d45, 0x3d45, 0x3d46, 0x3d47, 0x3d48, 0x3d49, - 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4e, 0x3d4f, 0x3d50, 0x3d51, 0x3d53, - 0x3d54, 0x3d55, 0x3d57, 0x3d58, 0x3d5a, 0x3d5b, 0x3d5d, 0x3d5f, - 0x3d60, 0x3d60, 0x3d60, 0x3d60, 0x3d61, 0x3d61, 0x3d62, 0x3d62, - 0x3d63, 0x3d64, 0x3d65, 0x3d65, 0x3d66, 0x3d67, 0x3d68, 0x3d69, - 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6e, 0x3d6f, 0x3d70, 0x3d71, 0x3d73, - 0x3d74, 0x3d75, 0x3d77, 0x3d78, 0x3d7a, 0x3d7b, 0x3d7d, 0x3d7f, - 0x3d80, 0x3d80, 0x3d80, 0x3d80, 0x3d81, 0x3d81, 0x3d82, 0x3d82, - 0x3d83, 0x3d84, 0x3d85, 0x3d85, 0x3d86, 0x3d87, 0x3d88, 0x3d89, - 0x3d8a, 0x3d8b, 0x3d8c, 0x3d8e, 0x3d8f, 0x3d90, 0x3d91, 0x3d93, - 0x3d94, 0x3d95, 0x3d97, 0x3d98, 0x3d9a, 0x3d9b, 0x3d9d, 0x3d9f, - 0x3dc0, 0x3dc0, 0x3dc0, 0x3dc0, 0x3dc1, 0x3dc1, 0x3dc2, 0x3dc2, - 0x3dc3, 0x3dc4, 0x3dc5, 0x3dc5, 0x3dc6, 0x3dc7, 0x3dc8, 0x3dc9, - 0x3dca, 0x3dcb, 0x3dcc, 0x3dce, 0x3dcf, 0x3dd0, 0x3dd1, 0x3dd3, - 0x3dd4, 0x3dd5, 0x3dd7, 0x3dd8, 0x3dda, 0x3ddb, 0x3ddd, 0x3ddf, - 0x3de0, 0x3de0, 0x3de0, 0x3de0, 0x3de1, 0x3de1, 0x3de2, 0x3de2, - 0x3de3, 0x3de4, 0x3de5, 0x3de5, 0x3de6, 0x3de7, 0x3de8, 0x3de9, - 0x3dea, 0x3deb, 0x3dec, 0x3dee, 0x3def, 0x3df0, 0x3df1, 0x3df3, - 0x3df4, 0x3df5, 0x3df7, 0x3df8, 0x3dfa, 0x3dfb, 0x3dfd, 0x3dff, - 0x3e20, 0x3e20, 0x3e20, 0x3e20, 0x3e21, 0x3e21, 0x3e22, 0x3e22, - 0x3e23, 0x3e24, 0x3e25, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, - 0x3e2a, 0x3e2b, 0x3e2c, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e33, - 0x3e34, 0x3e35, 0x3e37, 0x3e38, 0x3e3a, 0x3e3b, 0x3e3d, 0x3e3f, - 0x3e40, 0x3e40, 0x3e40, 0x3e40, 0x3e41, 0x3e41, 0x3e42, 0x3e42, - 0x3e43, 0x3e44, 0x3e45, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, - 0x3e4a, 0x3e4b, 0x3e4c, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e53, - 0x3e54, 0x3e55, 0x3e57, 0x3e58, 0x3e5a, 0x3e5b, 0x3e5d, 0x3e5f, - 0x3e80, 0x3e80, 0x3e80, 0x3e80, 0x3e81, 0x3e81, 0x3e82, 0x3e82, - 0x3e83, 0x3e84, 0x3e85, 0x3e85, 0x3e86, 0x3e87, 0x3e88, 0x3e89, - 0x3e8a, 0x3e8b, 0x3e8c, 0x3e8e, 0x3e8f, 0x3e90, 0x3e91, 0x3e93, - 0x3e94, 0x3e95, 0x3e97, 0x3e98, 0x3e9a, 0x3e9b, 0x3e9d, 0x3e9f, - 0x3ea0, 0x3ea0, 0x3ea0, 0x3ea0, 0x3ea1, 0x3ea1, 0x3ea2, 0x3ea2, - 0x3ea3, 0x3ea4, 0x3ea5, 0x3ea5, 0x3ea6, 0x3ea7, 0x3ea8, 0x3ea9, - 0x3eaa, 0x3eab, 0x3eac, 0x3eae, 0x3eaf, 0x3eb0, 0x3eb1, 0x3eb3, - 0x3eb4, 0x3eb5, 0x3eb7, 0x3eb8, 0x3eba, 0x3ebb, 0x3ebd, 0x3ebf, - 0x3ee0, 0x3ee0, 0x3ee0, 0x3ee0, 0x3ee1, 0x3ee1, 0x3ee2, 0x3ee2, - 0x3ee3, 0x3ee4, 0x3ee5, 0x3ee5, 0x3ee6, 0x3ee7, 0x3ee8, 0x3ee9, - 0x3eea, 0x3eeb, 0x3eec, 0x3eee, 0x3eef, 0x3ef0, 0x3ef1, 0x3ef3, - 0x3ef4, 0x3ef5, 0x3ef7, 0x3ef8, 0x3efa, 0x3efb, 0x3efd, 0x3eff, - 0x3f00, 0x3f00, 0x3f00, 0x3f00, 0x3f01, 0x3f01, 0x3f02, 0x3f02, - 0x3f03, 0x3f04, 0x3f05, 0x3f05, 0x3f06, 0x3f07, 0x3f08, 0x3f09, - 0x3f0a, 0x3f0b, 0x3f0c, 0x3f0e, 0x3f0f, 0x3f10, 0x3f11, 0x3f13, - 0x3f14, 0x3f15, 0x3f17, 0x3f18, 0x3f1a, 0x3f1b, 0x3f1d, 0x3f1f, - 0x3f40, 0x3f40, 0x3f40, 0x3f40, 0x3f41, 0x3f41, 0x3f42, 0x3f42, - 0x3f43, 0x3f44, 0x3f45, 0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, - 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f53, - 0x3f54, 0x3f55, 0x3f57, 0x3f58, 0x3f5a, 0x3f5b, 0x3f5d, 0x3f5f, - 0x3f60, 0x3f60, 0x3f60, 0x3f60, 0x3f61, 0x3f61, 0x3f62, 0x3f62, - 0x3f63, 0x3f64, 0x3f65, 0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, - 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f73, - 0x3f74, 0x3f75, 0x3f77, 0x3f78, 0x3f7a, 0x3f7b, 0x3f7d, 0x3f7f, - 0x3fa0, 0x3fa0, 0x3fa0, 0x3fa0, 0x3fa1, 0x3fa1, 0x3fa2, 0x3fa2, - 0x3fa3, 0x3fa4, 0x3fa5, 0x3fa5, 0x3fa6, 0x3fa7, 0x3fa8, 0x3fa9, - 0x3faa, 0x3fab, 0x3fac, 0x3fae, 0x3faf, 0x3fb0, 0x3fb1, 0x3fb3, - 0x3fb4, 0x3fb5, 0x3fb7, 0x3fb8, 0x3fba, 0x3fbb, 0x3fbd, 0x3fbf, - 0x3fe0, 0x3fe0, 0x3fe0, 0x3fe0, 0x3fe1, 0x3fe1, 0x3fe2, 0x3fe2, - 0x3fe3, 0x3fe4, 0x3fe5, 0x3fe5, 0x3fe6, 0x3fe7, 0x3fe8, 0x3fe9, - 0x3fea, 0x3feb, 0x3fec, 0x3fee, 0x3fef, 0x3ff0, 0x3ff1, 0x3ff3, - 0x3ff4, 0x3ff5, 0x3ff7, 0x3ff8, 0x3ffa, 0x3ffb, 0x3ffd, 0x3fff, - 0x4000, 0x4000, 0x4000, 0x4000, 0x4001, 0x4001, 0x4002, 0x4002, - 0x4003, 0x4004, 0x4005, 0x4005, 0x4006, 0x4007, 0x4008, 0x4009, - 0x400a, 0x400b, 0x400c, 0x400e, 0x400f, 0x4010, 0x4011, 0x4013, - 0x4014, 0x4015, 0x4017, 0x4018, 0x401a, 0x401b, 0x401d, 0x401f, - 0x4000, 0x4000, 0x4000, 0x4000, 0x4001, 0x4001, 0x4002, 0x4002, - 0x4003, 0x4004, 0x4005, 0x4005, 0x4006, 0x4007, 0x4008, 0x4009, - 0x400a, 0x400b, 0x400c, 0x400e, 0x400f, 0x4010, 0x4011, 0x4013, - 0x4014, 0x4015, 0x4017, 0x4018, 0x401a, 0x401b, 0x401d, 0x401f, - 0x4000, 0x4000, 0x4000, 0x4000, 0x4001, 0x4001, 0x4002, 0x4002, - 0x4003, 0x4004, 0x4005, 0x4005, 0x4006, 0x4007, 0x4008, 0x4009, - 0x400a, 0x400b, 0x400c, 0x400e, 0x400f, 0x4010, 0x4011, 0x4013, - 0x4014, 0x4015, 0x4017, 0x4018, 0x401a, 0x401b, 0x401d, 0x401f, - 0x4000, 0x4000, 0x4000, 0x4000, 0x4001, 0x4001, 0x4002, 0x4002, - 0x4003, 0x4004, 0x4005, 0x4005, 0x4006, 0x4007, 0x4008, 0x4009, - 0x400a, 0x400b, 0x400c, 0x400e, 0x400f, 0x4010, 0x4011, 0x4013, - 0x4014, 0x4015, 0x4017, 0x4018, 0x401a, 0x401b, 0x401d, 0x401f, - 0x4000, 0x4000, 0x4000, 0x4000, 0x4001, 0x4001, 0x4002, 0x4002, - 0x4003, 0x4004, 0x4005, 0x4005, 0x4006, 0x4007, 0x4008, 0x4009, - 0x400a, 0x400b, 0x400c, 0x400e, 0x400f, 0x4010, 0x4011, 0x4013, - 0x4014, 0x4015, 0x4017, 0x4018, 0x401a, 0x401b, 0x401d, 0x401f, - 0x4020, 0x4020, 0x4020, 0x4020, 0x4021, 0x4021, 0x4022, 0x4022, - 0x4023, 0x4024, 0x4025, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, - 0x402a, 0x402b, 0x402c, 0x402e, 0x402f, 0x4030, 0x4031, 0x4033, - 0x4034, 0x4035, 0x4037, 0x4038, 0x403a, 0x403b, 0x403d, 0x403f, - 0x4020, 0x4020, 0x4020, 0x4020, 0x4021, 0x4021, 0x4022, 0x4022, - 0x4023, 0x4024, 0x4025, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, - 0x402a, 0x402b, 0x402c, 0x402e, 0x402f, 0x4030, 0x4031, 0x4033, - 0x4034, 0x4035, 0x4037, 0x4038, 0x403a, 0x403b, 0x403d, 0x403f, - 0x4020, 0x4020, 0x4020, 0x4020, 0x4021, 0x4021, 0x4022, 0x4022, - 0x4023, 0x4024, 0x4025, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, - 0x402a, 0x402b, 0x402c, 0x402e, 0x402f, 0x4030, 0x4031, 0x4033, - 0x4034, 0x4035, 0x4037, 0x4038, 0x403a, 0x403b, 0x403d, 0x403f, - 0x4040, 0x4040, 0x4040, 0x4040, 0x4041, 0x4041, 0x4042, 0x4042, - 0x4043, 0x4044, 0x4045, 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, - 0x404a, 0x404b, 0x404c, 0x404e, 0x404f, 0x4050, 0x4051, 0x4053, - 0x4054, 0x4055, 0x4057, 0x4058, 0x405a, 0x405b, 0x405d, 0x405f, - 0x4040, 0x4040, 0x4040, 0x4040, 0x4041, 0x4041, 0x4042, 0x4042, - 0x4043, 0x4044, 0x4045, 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, - 0x404a, 0x404b, 0x404c, 0x404e, 0x404f, 0x4050, 0x4051, 0x4053, - 0x4054, 0x4055, 0x4057, 0x4058, 0x405a, 0x405b, 0x405d, 0x405f, - 0x4060, 0x4060, 0x4060, 0x4060, 0x4061, 0x4061, 0x4062, 0x4062, - 0x4063, 0x4064, 0x4065, 0x4065, 0x4066, 0x4067, 0x4068, 0x4069, - 0x406a, 0x406b, 0x406c, 0x406e, 0x406f, 0x4070, 0x4071, 0x4073, - 0x4074, 0x4075, 0x4077, 0x4078, 0x407a, 0x407b, 0x407d, 0x407f, - 0x4060, 0x4060, 0x4060, 0x4060, 0x4061, 0x4061, 0x4062, 0x4062, - 0x4063, 0x4064, 0x4065, 0x4065, 0x4066, 0x4067, 0x4068, 0x4069, - 0x406a, 0x406b, 0x406c, 0x406e, 0x406f, 0x4070, 0x4071, 0x4073, - 0x4074, 0x4075, 0x4077, 0x4078, 0x407a, 0x407b, 0x407d, 0x407f, - 0x4080, 0x4080, 0x4080, 0x4080, 0x4081, 0x4081, 0x4082, 0x4082, - 0x4083, 0x4084, 0x4085, 0x4085, 0x4086, 0x4087, 0x4088, 0x4089, - 0x408a, 0x408b, 0x408c, 0x408e, 0x408f, 0x4090, 0x4091, 0x4093, - 0x4094, 0x4095, 0x4097, 0x4098, 0x409a, 0x409b, 0x409d, 0x409f, - 0x40a0, 0x40a0, 0x40a0, 0x40a0, 0x40a1, 0x40a1, 0x40a2, 0x40a2, - 0x40a3, 0x40a4, 0x40a5, 0x40a5, 0x40a6, 0x40a7, 0x40a8, 0x40a9, - 0x40aa, 0x40ab, 0x40ac, 0x40ae, 0x40af, 0x40b0, 0x40b1, 0x40b3, - 0x40b4, 0x40b5, 0x40b7, 0x40b8, 0x40ba, 0x40bb, 0x40bd, 0x40bf, - 0x40a0, 0x40a0, 0x40a0, 0x40a0, 0x40a1, 0x40a1, 0x40a2, 0x40a2, - 0x40a3, 0x40a4, 0x40a5, 0x40a5, 0x40a6, 0x40a7, 0x40a8, 0x40a9, - 0x40aa, 0x40ab, 0x40ac, 0x40ae, 0x40af, 0x40b0, 0x40b1, 0x40b3, - 0x40b4, 0x40b5, 0x40b7, 0x40b8, 0x40ba, 0x40bb, 0x40bd, 0x40bf, - 0x40c0, 0x40c0, 0x40c0, 0x40c0, 0x40c1, 0x40c1, 0x40c2, 0x40c2, - 0x40c3, 0x40c4, 0x40c5, 0x40c5, 0x40c6, 0x40c7, 0x40c8, 0x40c9, - 0x40ca, 0x40cb, 0x40cc, 0x40ce, 0x40cf, 0x40d0, 0x40d1, 0x40d3, - 0x40d4, 0x40d5, 0x40d7, 0x40d8, 0x40da, 0x40db, 0x40dd, 0x40df, - 0x40e0, 0x40e0, 0x40e0, 0x40e0, 0x40e1, 0x40e1, 0x40e2, 0x40e2, - 0x40e3, 0x40e4, 0x40e5, 0x40e5, 0x40e6, 0x40e7, 0x40e8, 0x40e9, - 0x40ea, 0x40eb, 0x40ec, 0x40ee, 0x40ef, 0x40f0, 0x40f1, 0x40f3, - 0x40f4, 0x40f5, 0x40f7, 0x40f8, 0x40fa, 0x40fb, 0x40fd, 0x40ff, - 0x40e0, 0x40e0, 0x40e0, 0x40e0, 0x40e1, 0x40e1, 0x40e2, 0x40e2, - 0x40e3, 0x40e4, 0x40e5, 0x40e5, 0x40e6, 0x40e7, 0x40e8, 0x40e9, - 0x40ea, 0x40eb, 0x40ec, 0x40ee, 0x40ef, 0x40f0, 0x40f1, 0x40f3, - 0x40f4, 0x40f5, 0x40f7, 0x40f8, 0x40fa, 0x40fb, 0x40fd, 0x40ff, - 0x4100, 0x4100, 0x4100, 0x4100, 0x4101, 0x4101, 0x4102, 0x4102, - 0x4103, 0x4104, 0x4105, 0x4105, 0x4106, 0x4107, 0x4108, 0x4109, - 0x410a, 0x410b, 0x410c, 0x410e, 0x410f, 0x4110, 0x4111, 0x4113, - 0x4114, 0x4115, 0x4117, 0x4118, 0x411a, 0x411b, 0x411d, 0x411f, - 0x4120, 0x4120, 0x4120, 0x4120, 0x4121, 0x4121, 0x4122, 0x4122, - 0x4123, 0x4124, 0x4125, 0x4125, 0x4126, 0x4127, 0x4128, 0x4129, - 0x412a, 0x412b, 0x412c, 0x412e, 0x412f, 0x4130, 0x4131, 0x4133, - 0x4134, 0x4135, 0x4137, 0x4138, 0x413a, 0x413b, 0x413d, 0x413f, - 0x4140, 0x4140, 0x4140, 0x4140, 0x4141, 0x4141, 0x4142, 0x4142, - 0x4143, 0x4144, 0x4145, 0x4145, 0x4146, 0x4147, 0x4148, 0x4149, - 0x414a, 0x414b, 0x414c, 0x414e, 0x414f, 0x4150, 0x4151, 0x4153, - 0x4154, 0x4155, 0x4157, 0x4158, 0x415a, 0x415b, 0x415d, 0x415f, - 0x4140, 0x4140, 0x4140, 0x4140, 0x4141, 0x4141, 0x4142, 0x4142, - 0x4143, 0x4144, 0x4145, 0x4145, 0x4146, 0x4147, 0x4148, 0x4149, - 0x414a, 0x414b, 0x414c, 0x414e, 0x414f, 0x4150, 0x4151, 0x4153, - 0x4154, 0x4155, 0x4157, 0x4158, 0x415a, 0x415b, 0x415d, 0x415f, - 0x4160, 0x4160, 0x4160, 0x4160, 0x4161, 0x4161, 0x4162, 0x4162, - 0x4163, 0x4164, 0x4165, 0x4165, 0x4166, 0x4167, 0x4168, 0x4169, - 0x416a, 0x416b, 0x416c, 0x416e, 0x416f, 0x4170, 0x4171, 0x4173, - 0x4174, 0x4175, 0x4177, 0x4178, 0x417a, 0x417b, 0x417d, 0x417f, - 0x4180, 0x4180, 0x4180, 0x4180, 0x4181, 0x4181, 0x4182, 0x4182, - 0x4183, 0x4184, 0x4185, 0x4185, 0x4186, 0x4187, 0x4188, 0x4189, - 0x418a, 0x418b, 0x418c, 0x418e, 0x418f, 0x4190, 0x4191, 0x4193, - 0x4194, 0x4195, 0x4197, 0x4198, 0x419a, 0x419b, 0x419d, 0x419f, - 0x41a0, 0x41a0, 0x41a0, 0x41a0, 0x41a1, 0x41a1, 0x41a2, 0x41a2, - 0x41a3, 0x41a4, 0x41a5, 0x41a5, 0x41a6, 0x41a7, 0x41a8, 0x41a9, - 0x41aa, 0x41ab, 0x41ac, 0x41ae, 0x41af, 0x41b0, 0x41b1, 0x41b3, - 0x41b4, 0x41b5, 0x41b7, 0x41b8, 0x41ba, 0x41bb, 0x41bd, 0x41bf, - 0x41c0, 0x41c0, 0x41c0, 0x41c0, 0x41c1, 0x41c1, 0x41c2, 0x41c2, - 0x41c3, 0x41c4, 0x41c5, 0x41c5, 0x41c6, 0x41c7, 0x41c8, 0x41c9, - 0x41ca, 0x41cb, 0x41cc, 0x41ce, 0x41cf, 0x41d0, 0x41d1, 0x41d3, - 0x41d4, 0x41d5, 0x41d7, 0x41d8, 0x41da, 0x41db, 0x41dd, 0x41df, - 0x41e0, 0x41e0, 0x41e0, 0x41e0, 0x41e1, 0x41e1, 0x41e2, 0x41e2, - 0x41e3, 0x41e4, 0x41e5, 0x41e5, 0x41e6, 0x41e7, 0x41e8, 0x41e9, - 0x41ea, 0x41eb, 0x41ec, 0x41ee, 0x41ef, 0x41f0, 0x41f1, 0x41f3, - 0x41f4, 0x41f5, 0x41f7, 0x41f8, 0x41fa, 0x41fb, 0x41fd, 0x41ff, - 0x4200, 0x4200, 0x4200, 0x4200, 0x4201, 0x4201, 0x4202, 0x4202, - 0x4203, 0x4204, 0x4205, 0x4205, 0x4206, 0x4207, 0x4208, 0x4209, - 0x420a, 0x420b, 0x420c, 0x420e, 0x420f, 0x4210, 0x4211, 0x4213, - 0x4214, 0x4215, 0x4217, 0x4218, 0x421a, 0x421b, 0x421d, 0x421f, - 0x4220, 0x4220, 0x4220, 0x4220, 0x4221, 0x4221, 0x4222, 0x4222, - 0x4223, 0x4224, 0x4225, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, - 0x422a, 0x422b, 0x422c, 0x422e, 0x422f, 0x4230, 0x4231, 0x4233, - 0x4234, 0x4235, 0x4237, 0x4238, 0x423a, 0x423b, 0x423d, 0x423f, - 0x4240, 0x4240, 0x4240, 0x4240, 0x4241, 0x4241, 0x4242, 0x4242, - 0x4243, 0x4244, 0x4245, 0x4245, 0x4246, 0x4247, 0x4248, 0x4249, - 0x424a, 0x424b, 0x424c, 0x424e, 0x424f, 0x4250, 0x4251, 0x4253, - 0x4254, 0x4255, 0x4257, 0x4258, 0x425a, 0x425b, 0x425d, 0x425f, - 0x4260, 0x4260, 0x4260, 0x4260, 0x4261, 0x4261, 0x4262, 0x4262, - 0x4263, 0x4264, 0x4265, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, - 0x426a, 0x426b, 0x426c, 0x426e, 0x426f, 0x4270, 0x4271, 0x4273, - 0x4274, 0x4275, 0x4277, 0x4278, 0x427a, 0x427b, 0x427d, 0x427f, - 0x4280, 0x4280, 0x4280, 0x4280, 0x4281, 0x4281, 0x4282, 0x4282, - 0x4283, 0x4284, 0x4285, 0x4285, 0x4286, 0x4287, 0x4288, 0x4289, - 0x428a, 0x428b, 0x428c, 0x428e, 0x428f, 0x4290, 0x4291, 0x4293, - 0x4294, 0x4295, 0x4297, 0x4298, 0x429a, 0x429b, 0x429d, 0x429f, - 0x42a0, 0x42a0, 0x42a0, 0x42a0, 0x42a1, 0x42a1, 0x42a2, 0x42a2, - 0x42a3, 0x42a4, 0x42a5, 0x42a5, 0x42a6, 0x42a7, 0x42a8, 0x42a9, - 0x42aa, 0x42ab, 0x42ac, 0x42ae, 0x42af, 0x42b0, 0x42b1, 0x42b3, - 0x42b4, 0x42b5, 0x42b7, 0x42b8, 0x42ba, 0x42bb, 0x42bd, 0x42bf, - 0x42c0, 0x42c0, 0x42c0, 0x42c0, 0x42c1, 0x42c1, 0x42c2, 0x42c2, - 0x42c3, 0x42c4, 0x42c5, 0x42c5, 0x42c6, 0x42c7, 0x42c8, 0x42c9, - 0x42ca, 0x42cb, 0x42cc, 0x42ce, 0x42cf, 0x42d0, 0x42d1, 0x42d3, - 0x42d4, 0x42d5, 0x42d7, 0x42d8, 0x42da, 0x42db, 0x42dd, 0x42df, - 0x42e0, 0x42e0, 0x42e0, 0x42e0, 0x42e1, 0x42e1, 0x42e2, 0x42e2, - 0x42e3, 0x42e4, 0x42e5, 0x42e5, 0x42e6, 0x42e7, 0x42e8, 0x42e9, - 0x42ea, 0x42eb, 0x42ec, 0x42ee, 0x42ef, 0x42f0, 0x42f1, 0x42f3, - 0x42f4, 0x42f5, 0x42f7, 0x42f8, 0x42fa, 0x42fb, 0x42fd, 0x42ff, - 0x4300, 0x4300, 0x4300, 0x4300, 0x4301, 0x4301, 0x4302, 0x4302, - 0x4303, 0x4304, 0x4305, 0x4305, 0x4306, 0x4307, 0x4308, 0x4309, - 0x430a, 0x430b, 0x430c, 0x430e, 0x430f, 0x4310, 0x4311, 0x4313, - 0x4314, 0x4315, 0x4317, 0x4318, 0x431a, 0x431b, 0x431d, 0x431f, - 0x4320, 0x4320, 0x4320, 0x4320, 0x4321, 0x4321, 0x4322, 0x4322, - 0x4323, 0x4324, 0x4325, 0x4325, 0x4326, 0x4327, 0x4328, 0x4329, - 0x432a, 0x432b, 0x432c, 0x432e, 0x432f, 0x4330, 0x4331, 0x4333, - 0x4334, 0x4335, 0x4337, 0x4338, 0x433a, 0x433b, 0x433d, 0x433f, - 0x4340, 0x4340, 0x4340, 0x4340, 0x4341, 0x4341, 0x4342, 0x4342, - 0x4343, 0x4344, 0x4345, 0x4345, 0x4346, 0x4347, 0x4348, 0x4349, - 0x434a, 0x434b, 0x434c, 0x434e, 0x434f, 0x4350, 0x4351, 0x4353, - 0x4354, 0x4355, 0x4357, 0x4358, 0x435a, 0x435b, 0x435d, 0x435f, - 0x4380, 0x4380, 0x4380, 0x4380, 0x4381, 0x4381, 0x4382, 0x4382, - 0x4383, 0x4384, 0x4385, 0x4385, 0x4386, 0x4387, 0x4388, 0x4389, - 0x438a, 0x438b, 0x438c, 0x438e, 0x438f, 0x4390, 0x4391, 0x4393, - 0x4394, 0x4395, 0x4397, 0x4398, 0x439a, 0x439b, 0x439d, 0x439f, - 0x43a0, 0x43a0, 0x43a0, 0x43a0, 0x43a1, 0x43a1, 0x43a2, 0x43a2, - 0x43a3, 0x43a4, 0x43a5, 0x43a5, 0x43a6, 0x43a7, 0x43a8, 0x43a9, - 0x43aa, 0x43ab, 0x43ac, 0x43ae, 0x43af, 0x43b0, 0x43b1, 0x43b3, - 0x43b4, 0x43b5, 0x43b7, 0x43b8, 0x43ba, 0x43bb, 0x43bd, 0x43bf, - 0x43c0, 0x43c0, 0x43c0, 0x43c0, 0x43c1, 0x43c1, 0x43c2, 0x43c2, - 0x43c3, 0x43c4, 0x43c5, 0x43c5, 0x43c6, 0x43c7, 0x43c8, 0x43c9, - 0x43ca, 0x43cb, 0x43cc, 0x43ce, 0x43cf, 0x43d0, 0x43d1, 0x43d3, - 0x43d4, 0x43d5, 0x43d7, 0x43d8, 0x43da, 0x43db, 0x43dd, 0x43df, - 0x43e0, 0x43e0, 0x43e0, 0x43e0, 0x43e1, 0x43e1, 0x43e2, 0x43e2, - 0x43e3, 0x43e4, 0x43e5, 0x43e5, 0x43e6, 0x43e7, 0x43e8, 0x43e9, - 0x43ea, 0x43eb, 0x43ec, 0x43ee, 0x43ef, 0x43f0, 0x43f1, 0x43f3, - 0x43f4, 0x43f5, 0x43f7, 0x43f8, 0x43fa, 0x43fb, 0x43fd, 0x43ff, - 0x4400, 0x4400, 0x4400, 0x4400, 0x4401, 0x4401, 0x4402, 0x4402, - 0x4403, 0x4404, 0x4405, 0x4405, 0x4406, 0x4407, 0x4408, 0x4409, - 0x440a, 0x440b, 0x440c, 0x440e, 0x440f, 0x4410, 0x4411, 0x4413, - 0x4414, 0x4415, 0x4417, 0x4418, 0x441a, 0x441b, 0x441d, 0x441f, - 0x4440, 0x4440, 0x4440, 0x4440, 0x4441, 0x4441, 0x4442, 0x4442, - 0x4443, 0x4444, 0x4445, 0x4445, 0x4446, 0x4447, 0x4448, 0x4449, - 0x444a, 0x444b, 0x444c, 0x444e, 0x444f, 0x4450, 0x4451, 0x4453, - 0x4454, 0x4455, 0x4457, 0x4458, 0x445a, 0x445b, 0x445d, 0x445f, - 0x4460, 0x4460, 0x4460, 0x4460, 0x4461, 0x4461, 0x4462, 0x4462, - 0x4463, 0x4464, 0x4465, 0x4465, 0x4466, 0x4467, 0x4468, 0x4469, - 0x446a, 0x446b, 0x446c, 0x446e, 0x446f, 0x4470, 0x4471, 0x4473, - 0x4474, 0x4475, 0x4477, 0x4478, 0x447a, 0x447b, 0x447d, 0x447f, - 0x4480, 0x4480, 0x4480, 0x4480, 0x4481, 0x4481, 0x4482, 0x4482, - 0x4483, 0x4484, 0x4485, 0x4485, 0x4486, 0x4487, 0x4488, 0x4489, - 0x448a, 0x448b, 0x448c, 0x448e, 0x448f, 0x4490, 0x4491, 0x4493, - 0x4494, 0x4495, 0x4497, 0x4498, 0x449a, 0x449b, 0x449d, 0x449f, - 0x44c0, 0x44c0, 0x44c0, 0x44c0, 0x44c1, 0x44c1, 0x44c2, 0x44c2, - 0x44c3, 0x44c4, 0x44c5, 0x44c5, 0x44c6, 0x44c7, 0x44c8, 0x44c9, - 0x44ca, 0x44cb, 0x44cc, 0x44ce, 0x44cf, 0x44d0, 0x44d1, 0x44d3, - 0x44d4, 0x44d5, 0x44d7, 0x44d8, 0x44da, 0x44db, 0x44dd, 0x44df, - 0x44e0, 0x44e0, 0x44e0, 0x44e0, 0x44e1, 0x44e1, 0x44e2, 0x44e2, - 0x44e3, 0x44e4, 0x44e5, 0x44e5, 0x44e6, 0x44e7, 0x44e8, 0x44e9, - 0x44ea, 0x44eb, 0x44ec, 0x44ee, 0x44ef, 0x44f0, 0x44f1, 0x44f3, - 0x44f4, 0x44f5, 0x44f7, 0x44f8, 0x44fa, 0x44fb, 0x44fd, 0x44ff, - 0x4500, 0x4500, 0x4500, 0x4500, 0x4501, 0x4501, 0x4502, 0x4502, - 0x4503, 0x4504, 0x4505, 0x4505, 0x4506, 0x4507, 0x4508, 0x4509, - 0x450a, 0x450b, 0x450c, 0x450e, 0x450f, 0x4510, 0x4511, 0x4513, - 0x4514, 0x4515, 0x4517, 0x4518, 0x451a, 0x451b, 0x451d, 0x451f, - 0x4540, 0x4540, 0x4540, 0x4540, 0x4541, 0x4541, 0x4542, 0x4542, - 0x4543, 0x4544, 0x4545, 0x4545, 0x4546, 0x4547, 0x4548, 0x4549, - 0x454a, 0x454b, 0x454c, 0x454e, 0x454f, 0x4550, 0x4551, 0x4553, - 0x4554, 0x4555, 0x4557, 0x4558, 0x455a, 0x455b, 0x455d, 0x455f, - 0x4560, 0x4560, 0x4560, 0x4560, 0x4561, 0x4561, 0x4562, 0x4562, - 0x4563, 0x4564, 0x4565, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, - 0x456a, 0x456b, 0x456c, 0x456e, 0x456f, 0x4570, 0x4571, 0x4573, - 0x4574, 0x4575, 0x4577, 0x4578, 0x457a, 0x457b, 0x457d, 0x457f, - 0x4580, 0x4580, 0x4580, 0x4580, 0x4581, 0x4581, 0x4582, 0x4582, - 0x4583, 0x4584, 0x4585, 0x4585, 0x4586, 0x4587, 0x4588, 0x4589, - 0x458a, 0x458b, 0x458c, 0x458e, 0x458f, 0x4590, 0x4591, 0x4593, - 0x4594, 0x4595, 0x4597, 0x4598, 0x459a, 0x459b, 0x459d, 0x459f, - 0x45c0, 0x45c0, 0x45c0, 0x45c0, 0x45c1, 0x45c1, 0x45c2, 0x45c2, - 0x45c3, 0x45c4, 0x45c5, 0x45c5, 0x45c6, 0x45c7, 0x45c8, 0x45c9, - 0x45ca, 0x45cb, 0x45cc, 0x45ce, 0x45cf, 0x45d0, 0x45d1, 0x45d3, - 0x45d4, 0x45d5, 0x45d7, 0x45d8, 0x45da, 0x45db, 0x45dd, 0x45df, - 0x45e0, 0x45e0, 0x45e0, 0x45e0, 0x45e1, 0x45e1, 0x45e2, 0x45e2, - 0x45e3, 0x45e4, 0x45e5, 0x45e5, 0x45e6, 0x45e7, 0x45e8, 0x45e9, - 0x45ea, 0x45eb, 0x45ec, 0x45ee, 0x45ef, 0x45f0, 0x45f1, 0x45f3, - 0x45f4, 0x45f5, 0x45f7, 0x45f8, 0x45fa, 0x45fb, 0x45fd, 0x45ff, - 0x4620, 0x4620, 0x4620, 0x4620, 0x4621, 0x4621, 0x4622, 0x4622, - 0x4623, 0x4624, 0x4625, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, - 0x462a, 0x462b, 0x462c, 0x462e, 0x462f, 0x4630, 0x4631, 0x4633, - 0x4634, 0x4635, 0x4637, 0x4638, 0x463a, 0x463b, 0x463d, 0x463f, - 0x4640, 0x4640, 0x4640, 0x4640, 0x4641, 0x4641, 0x4642, 0x4642, - 0x4643, 0x4644, 0x4645, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, - 0x464a, 0x464b, 0x464c, 0x464e, 0x464f, 0x4650, 0x4651, 0x4653, - 0x4654, 0x4655, 0x4657, 0x4658, 0x465a, 0x465b, 0x465d, 0x465f, - 0x4680, 0x4680, 0x4680, 0x4680, 0x4681, 0x4681, 0x4682, 0x4682, - 0x4683, 0x4684, 0x4685, 0x4685, 0x4686, 0x4687, 0x4688, 0x4689, - 0x468a, 0x468b, 0x468c, 0x468e, 0x468f, 0x4690, 0x4691, 0x4693, - 0x4694, 0x4695, 0x4697, 0x4698, 0x469a, 0x469b, 0x469d, 0x469f, - 0x46a0, 0x46a0, 0x46a0, 0x46a0, 0x46a1, 0x46a1, 0x46a2, 0x46a2, - 0x46a3, 0x46a4, 0x46a5, 0x46a5, 0x46a6, 0x46a7, 0x46a8, 0x46a9, - 0x46aa, 0x46ab, 0x46ac, 0x46ae, 0x46af, 0x46b0, 0x46b1, 0x46b3, - 0x46b4, 0x46b5, 0x46b7, 0x46b8, 0x46ba, 0x46bb, 0x46bd, 0x46bf, - 0x46e0, 0x46e0, 0x46e0, 0x46e0, 0x46e1, 0x46e1, 0x46e2, 0x46e2, - 0x46e3, 0x46e4, 0x46e5, 0x46e5, 0x46e6, 0x46e7, 0x46e8, 0x46e9, - 0x46ea, 0x46eb, 0x46ec, 0x46ee, 0x46ef, 0x46f0, 0x46f1, 0x46f3, - 0x46f4, 0x46f5, 0x46f7, 0x46f8, 0x46fa, 0x46fb, 0x46fd, 0x46ff, - 0x4700, 0x4700, 0x4700, 0x4700, 0x4701, 0x4701, 0x4702, 0x4702, - 0x4703, 0x4704, 0x4705, 0x4705, 0x4706, 0x4707, 0x4708, 0x4709, - 0x470a, 0x470b, 0x470c, 0x470e, 0x470f, 0x4710, 0x4711, 0x4713, - 0x4714, 0x4715, 0x4717, 0x4718, 0x471a, 0x471b, 0x471d, 0x471f, - 0x4740, 0x4740, 0x4740, 0x4740, 0x4741, 0x4741, 0x4742, 0x4742, - 0x4743, 0x4744, 0x4745, 0x4745, 0x4746, 0x4747, 0x4748, 0x4749, - 0x474a, 0x474b, 0x474c, 0x474e, 0x474f, 0x4750, 0x4751, 0x4753, - 0x4754, 0x4755, 0x4757, 0x4758, 0x475a, 0x475b, 0x475d, 0x475f, - 0x4760, 0x4760, 0x4760, 0x4760, 0x4761, 0x4761, 0x4762, 0x4762, - 0x4763, 0x4764, 0x4765, 0x4765, 0x4766, 0x4767, 0x4768, 0x4769, - 0x476a, 0x476b, 0x476c, 0x476e, 0x476f, 0x4770, 0x4771, 0x4773, - 0x4774, 0x4775, 0x4777, 0x4778, 0x477a, 0x477b, 0x477d, 0x477f, - 0x47a0, 0x47a0, 0x47a0, 0x47a0, 0x47a1, 0x47a1, 0x47a2, 0x47a2, - 0x47a3, 0x47a4, 0x47a5, 0x47a5, 0x47a6, 0x47a7, 0x47a8, 0x47a9, - 0x47aa, 0x47ab, 0x47ac, 0x47ae, 0x47af, 0x47b0, 0x47b1, 0x47b3, - 0x47b4, 0x47b5, 0x47b7, 0x47b8, 0x47ba, 0x47bb, 0x47bd, 0x47bf, - 0x47e0, 0x47e0, 0x47e0, 0x47e0, 0x47e1, 0x47e1, 0x47e2, 0x47e2, - 0x47e3, 0x47e4, 0x47e5, 0x47e5, 0x47e6, 0x47e7, 0x47e8, 0x47e9, - 0x47ea, 0x47eb, 0x47ec, 0x47ee, 0x47ef, 0x47f0, 0x47f1, 0x47f3, - 0x47f4, 0x47f5, 0x47f7, 0x47f8, 0x47fa, 0x47fb, 0x47fd, 0x47ff, - 0x4800, 0x4800, 0x4800, 0x4800, 0x4801, 0x4801, 0x4802, 0x4802, - 0x4803, 0x4804, 0x4805, 0x4805, 0x4806, 0x4807, 0x4808, 0x4809, - 0x480a, 0x480b, 0x480c, 0x480e, 0x480f, 0x4810, 0x4811, 0x4813, - 0x4814, 0x4815, 0x4817, 0x4818, 0x481a, 0x481b, 0x481d, 0x481f, - 0x4800, 0x4800, 0x4800, 0x4800, 0x4801, 0x4801, 0x4802, 0x4802, - 0x4803, 0x4804, 0x4805, 0x4805, 0x4806, 0x4807, 0x4808, 0x4809, - 0x480a, 0x480b, 0x480c, 0x480e, 0x480f, 0x4810, 0x4811, 0x4813, - 0x4814, 0x4815, 0x4817, 0x4818, 0x481a, 0x481b, 0x481d, 0x481f, - 0x4800, 0x4800, 0x4800, 0x4800, 0x4801, 0x4801, 0x4802, 0x4802, - 0x4803, 0x4804, 0x4805, 0x4805, 0x4806, 0x4807, 0x4808, 0x4809, - 0x480a, 0x480b, 0x480c, 0x480e, 0x480f, 0x4810, 0x4811, 0x4813, - 0x4814, 0x4815, 0x4817, 0x4818, 0x481a, 0x481b, 0x481d, 0x481f, - 0x4800, 0x4800, 0x4800, 0x4800, 0x4801, 0x4801, 0x4802, 0x4802, - 0x4803, 0x4804, 0x4805, 0x4805, 0x4806, 0x4807, 0x4808, 0x4809, - 0x480a, 0x480b, 0x480c, 0x480e, 0x480f, 0x4810, 0x4811, 0x4813, - 0x4814, 0x4815, 0x4817, 0x4818, 0x481a, 0x481b, 0x481d, 0x481f, - 0x4800, 0x4800, 0x4800, 0x4800, 0x4801, 0x4801, 0x4802, 0x4802, - 0x4803, 0x4804, 0x4805, 0x4805, 0x4806, 0x4807, 0x4808, 0x4809, - 0x480a, 0x480b, 0x480c, 0x480e, 0x480f, 0x4810, 0x4811, 0x4813, - 0x4814, 0x4815, 0x4817, 0x4818, 0x481a, 0x481b, 0x481d, 0x481f, - 0x4820, 0x4820, 0x4820, 0x4820, 0x4821, 0x4821, 0x4822, 0x4822, - 0x4823, 0x4824, 0x4825, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, - 0x482a, 0x482b, 0x482c, 0x482e, 0x482f, 0x4830, 0x4831, 0x4833, - 0x4834, 0x4835, 0x4837, 0x4838, 0x483a, 0x483b, 0x483d, 0x483f, - 0x4820, 0x4820, 0x4820, 0x4820, 0x4821, 0x4821, 0x4822, 0x4822, - 0x4823, 0x4824, 0x4825, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, - 0x482a, 0x482b, 0x482c, 0x482e, 0x482f, 0x4830, 0x4831, 0x4833, - 0x4834, 0x4835, 0x4837, 0x4838, 0x483a, 0x483b, 0x483d, 0x483f, - 0x4820, 0x4820, 0x4820, 0x4820, 0x4821, 0x4821, 0x4822, 0x4822, - 0x4823, 0x4824, 0x4825, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, - 0x482a, 0x482b, 0x482c, 0x482e, 0x482f, 0x4830, 0x4831, 0x4833, - 0x4834, 0x4835, 0x4837, 0x4838, 0x483a, 0x483b, 0x483d, 0x483f, - 0x4840, 0x4840, 0x4840, 0x4840, 0x4841, 0x4841, 0x4842, 0x4842, - 0x4843, 0x4844, 0x4845, 0x4845, 0x4846, 0x4847, 0x4848, 0x4849, - 0x484a, 0x484b, 0x484c, 0x484e, 0x484f, 0x4850, 0x4851, 0x4853, - 0x4854, 0x4855, 0x4857, 0x4858, 0x485a, 0x485b, 0x485d, 0x485f, - 0x4840, 0x4840, 0x4840, 0x4840, 0x4841, 0x4841, 0x4842, 0x4842, - 0x4843, 0x4844, 0x4845, 0x4845, 0x4846, 0x4847, 0x4848, 0x4849, - 0x484a, 0x484b, 0x484c, 0x484e, 0x484f, 0x4850, 0x4851, 0x4853, - 0x4854, 0x4855, 0x4857, 0x4858, 0x485a, 0x485b, 0x485d, 0x485f, - 0x4860, 0x4860, 0x4860, 0x4860, 0x4861, 0x4861, 0x4862, 0x4862, - 0x4863, 0x4864, 0x4865, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869, - 0x486a, 0x486b, 0x486c, 0x486e, 0x486f, 0x4870, 0x4871, 0x4873, - 0x4874, 0x4875, 0x4877, 0x4878, 0x487a, 0x487b, 0x487d, 0x487f, - 0x4860, 0x4860, 0x4860, 0x4860, 0x4861, 0x4861, 0x4862, 0x4862, - 0x4863, 0x4864, 0x4865, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869, - 0x486a, 0x486b, 0x486c, 0x486e, 0x486f, 0x4870, 0x4871, 0x4873, - 0x4874, 0x4875, 0x4877, 0x4878, 0x487a, 0x487b, 0x487d, 0x487f, - 0x4880, 0x4880, 0x4880, 0x4880, 0x4881, 0x4881, 0x4882, 0x4882, - 0x4883, 0x4884, 0x4885, 0x4885, 0x4886, 0x4887, 0x4888, 0x4889, - 0x488a, 0x488b, 0x488c, 0x488e, 0x488f, 0x4890, 0x4891, 0x4893, - 0x4894, 0x4895, 0x4897, 0x4898, 0x489a, 0x489b, 0x489d, 0x489f, - 0x48a0, 0x48a0, 0x48a0, 0x48a0, 0x48a1, 0x48a1, 0x48a2, 0x48a2, - 0x48a3, 0x48a4, 0x48a5, 0x48a5, 0x48a6, 0x48a7, 0x48a8, 0x48a9, - 0x48aa, 0x48ab, 0x48ac, 0x48ae, 0x48af, 0x48b0, 0x48b1, 0x48b3, - 0x48b4, 0x48b5, 0x48b7, 0x48b8, 0x48ba, 0x48bb, 0x48bd, 0x48bf, - 0x48a0, 0x48a0, 0x48a0, 0x48a0, 0x48a1, 0x48a1, 0x48a2, 0x48a2, - 0x48a3, 0x48a4, 0x48a5, 0x48a5, 0x48a6, 0x48a7, 0x48a8, 0x48a9, - 0x48aa, 0x48ab, 0x48ac, 0x48ae, 0x48af, 0x48b0, 0x48b1, 0x48b3, - 0x48b4, 0x48b5, 0x48b7, 0x48b8, 0x48ba, 0x48bb, 0x48bd, 0x48bf, - 0x48c0, 0x48c0, 0x48c0, 0x48c0, 0x48c1, 0x48c1, 0x48c2, 0x48c2, - 0x48c3, 0x48c4, 0x48c5, 0x48c5, 0x48c6, 0x48c7, 0x48c8, 0x48c9, - 0x48ca, 0x48cb, 0x48cc, 0x48ce, 0x48cf, 0x48d0, 0x48d1, 0x48d3, - 0x48d4, 0x48d5, 0x48d7, 0x48d8, 0x48da, 0x48db, 0x48dd, 0x48df, - 0x48e0, 0x48e0, 0x48e0, 0x48e0, 0x48e1, 0x48e1, 0x48e2, 0x48e2, - 0x48e3, 0x48e4, 0x48e5, 0x48e5, 0x48e6, 0x48e7, 0x48e8, 0x48e9, - 0x48ea, 0x48eb, 0x48ec, 0x48ee, 0x48ef, 0x48f0, 0x48f1, 0x48f3, - 0x48f4, 0x48f5, 0x48f7, 0x48f8, 0x48fa, 0x48fb, 0x48fd, 0x48ff, - 0x48e0, 0x48e0, 0x48e0, 0x48e0, 0x48e1, 0x48e1, 0x48e2, 0x48e2, - 0x48e3, 0x48e4, 0x48e5, 0x48e5, 0x48e6, 0x48e7, 0x48e8, 0x48e9, - 0x48ea, 0x48eb, 0x48ec, 0x48ee, 0x48ef, 0x48f0, 0x48f1, 0x48f3, - 0x48f4, 0x48f5, 0x48f7, 0x48f8, 0x48fa, 0x48fb, 0x48fd, 0x48ff, - 0x4900, 0x4900, 0x4900, 0x4900, 0x4901, 0x4901, 0x4902, 0x4902, - 0x4903, 0x4904, 0x4905, 0x4905, 0x4906, 0x4907, 0x4908, 0x4909, - 0x490a, 0x490b, 0x490c, 0x490e, 0x490f, 0x4910, 0x4911, 0x4913, - 0x4914, 0x4915, 0x4917, 0x4918, 0x491a, 0x491b, 0x491d, 0x491f, - 0x4920, 0x4920, 0x4920, 0x4920, 0x4921, 0x4921, 0x4922, 0x4922, - 0x4923, 0x4924, 0x4925, 0x4925, 0x4926, 0x4927, 0x4928, 0x4929, - 0x492a, 0x492b, 0x492c, 0x492e, 0x492f, 0x4930, 0x4931, 0x4933, - 0x4934, 0x4935, 0x4937, 0x4938, 0x493a, 0x493b, 0x493d, 0x493f, - 0x4940, 0x4940, 0x4940, 0x4940, 0x4941, 0x4941, 0x4942, 0x4942, - 0x4943, 0x4944, 0x4945, 0x4945, 0x4946, 0x4947, 0x4948, 0x4949, - 0x494a, 0x494b, 0x494c, 0x494e, 0x494f, 0x4950, 0x4951, 0x4953, - 0x4954, 0x4955, 0x4957, 0x4958, 0x495a, 0x495b, 0x495d, 0x495f, - 0x4940, 0x4940, 0x4940, 0x4940, 0x4941, 0x4941, 0x4942, 0x4942, - 0x4943, 0x4944, 0x4945, 0x4945, 0x4946, 0x4947, 0x4948, 0x4949, - 0x494a, 0x494b, 0x494c, 0x494e, 0x494f, 0x4950, 0x4951, 0x4953, - 0x4954, 0x4955, 0x4957, 0x4958, 0x495a, 0x495b, 0x495d, 0x495f, - 0x4960, 0x4960, 0x4960, 0x4960, 0x4961, 0x4961, 0x4962, 0x4962, - 0x4963, 0x4964, 0x4965, 0x4965, 0x4966, 0x4967, 0x4968, 0x4969, - 0x496a, 0x496b, 0x496c, 0x496e, 0x496f, 0x4970, 0x4971, 0x4973, - 0x4974, 0x4975, 0x4977, 0x4978, 0x497a, 0x497b, 0x497d, 0x497f, - 0x4980, 0x4980, 0x4980, 0x4980, 0x4981, 0x4981, 0x4982, 0x4982, - 0x4983, 0x4984, 0x4985, 0x4985, 0x4986, 0x4987, 0x4988, 0x4989, - 0x498a, 0x498b, 0x498c, 0x498e, 0x498f, 0x4990, 0x4991, 0x4993, - 0x4994, 0x4995, 0x4997, 0x4998, 0x499a, 0x499b, 0x499d, 0x499f, - 0x49a0, 0x49a0, 0x49a0, 0x49a0, 0x49a1, 0x49a1, 0x49a2, 0x49a2, - 0x49a3, 0x49a4, 0x49a5, 0x49a5, 0x49a6, 0x49a7, 0x49a8, 0x49a9, - 0x49aa, 0x49ab, 0x49ac, 0x49ae, 0x49af, 0x49b0, 0x49b1, 0x49b3, - 0x49b4, 0x49b5, 0x49b7, 0x49b8, 0x49ba, 0x49bb, 0x49bd, 0x49bf, - 0x49c0, 0x49c0, 0x49c0, 0x49c0, 0x49c1, 0x49c1, 0x49c2, 0x49c2, - 0x49c3, 0x49c4, 0x49c5, 0x49c5, 0x49c6, 0x49c7, 0x49c8, 0x49c9, - 0x49ca, 0x49cb, 0x49cc, 0x49ce, 0x49cf, 0x49d0, 0x49d1, 0x49d3, - 0x49d4, 0x49d5, 0x49d7, 0x49d8, 0x49da, 0x49db, 0x49dd, 0x49df, - 0x49e0, 0x49e0, 0x49e0, 0x49e0, 0x49e1, 0x49e1, 0x49e2, 0x49e2, - 0x49e3, 0x49e4, 0x49e5, 0x49e5, 0x49e6, 0x49e7, 0x49e8, 0x49e9, - 0x49ea, 0x49eb, 0x49ec, 0x49ee, 0x49ef, 0x49f0, 0x49f1, 0x49f3, - 0x49f4, 0x49f5, 0x49f7, 0x49f8, 0x49fa, 0x49fb, 0x49fd, 0x49ff, - 0x4a00, 0x4a00, 0x4a00, 0x4a00, 0x4a01, 0x4a01, 0x4a02, 0x4a02, - 0x4a03, 0x4a04, 0x4a05, 0x4a05, 0x4a06, 0x4a07, 0x4a08, 0x4a09, - 0x4a0a, 0x4a0b, 0x4a0c, 0x4a0e, 0x4a0f, 0x4a10, 0x4a11, 0x4a13, - 0x4a14, 0x4a15, 0x4a17, 0x4a18, 0x4a1a, 0x4a1b, 0x4a1d, 0x4a1f, - 0x4a20, 0x4a20, 0x4a20, 0x4a20, 0x4a21, 0x4a21, 0x4a22, 0x4a22, - 0x4a23, 0x4a24, 0x4a25, 0x4a25, 0x4a26, 0x4a27, 0x4a28, 0x4a29, - 0x4a2a, 0x4a2b, 0x4a2c, 0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a33, - 0x4a34, 0x4a35, 0x4a37, 0x4a38, 0x4a3a, 0x4a3b, 0x4a3d, 0x4a3f, - 0x4a40, 0x4a40, 0x4a40, 0x4a40, 0x4a41, 0x4a41, 0x4a42, 0x4a42, - 0x4a43, 0x4a44, 0x4a45, 0x4a45, 0x4a46, 0x4a47, 0x4a48, 0x4a49, - 0x4a4a, 0x4a4b, 0x4a4c, 0x4a4e, 0x4a4f, 0x4a50, 0x4a51, 0x4a53, - 0x4a54, 0x4a55, 0x4a57, 0x4a58, 0x4a5a, 0x4a5b, 0x4a5d, 0x4a5f, - 0x4a60, 0x4a60, 0x4a60, 0x4a60, 0x4a61, 0x4a61, 0x4a62, 0x4a62, - 0x4a63, 0x4a64, 0x4a65, 0x4a65, 0x4a66, 0x4a67, 0x4a68, 0x4a69, - 0x4a6a, 0x4a6b, 0x4a6c, 0x4a6e, 0x4a6f, 0x4a70, 0x4a71, 0x4a73, - 0x4a74, 0x4a75, 0x4a77, 0x4a78, 0x4a7a, 0x4a7b, 0x4a7d, 0x4a7f, - 0x4a80, 0x4a80, 0x4a80, 0x4a80, 0x4a81, 0x4a81, 0x4a82, 0x4a82, - 0x4a83, 0x4a84, 0x4a85, 0x4a85, 0x4a86, 0x4a87, 0x4a88, 0x4a89, - 0x4a8a, 0x4a8b, 0x4a8c, 0x4a8e, 0x4a8f, 0x4a90, 0x4a91, 0x4a93, - 0x4a94, 0x4a95, 0x4a97, 0x4a98, 0x4a9a, 0x4a9b, 0x4a9d, 0x4a9f, - 0x4aa0, 0x4aa0, 0x4aa0, 0x4aa0, 0x4aa1, 0x4aa1, 0x4aa2, 0x4aa2, - 0x4aa3, 0x4aa4, 0x4aa5, 0x4aa5, 0x4aa6, 0x4aa7, 0x4aa8, 0x4aa9, - 0x4aaa, 0x4aab, 0x4aac, 0x4aae, 0x4aaf, 0x4ab0, 0x4ab1, 0x4ab3, - 0x4ab4, 0x4ab5, 0x4ab7, 0x4ab8, 0x4aba, 0x4abb, 0x4abd, 0x4abf, - 0x4ac0, 0x4ac0, 0x4ac0, 0x4ac0, 0x4ac1, 0x4ac1, 0x4ac2, 0x4ac2, - 0x4ac3, 0x4ac4, 0x4ac5, 0x4ac5, 0x4ac6, 0x4ac7, 0x4ac8, 0x4ac9, - 0x4aca, 0x4acb, 0x4acc, 0x4ace, 0x4acf, 0x4ad0, 0x4ad1, 0x4ad3, - 0x4ad4, 0x4ad5, 0x4ad7, 0x4ad8, 0x4ada, 0x4adb, 0x4add, 0x4adf, - 0x4ae0, 0x4ae0, 0x4ae0, 0x4ae0, 0x4ae1, 0x4ae1, 0x4ae2, 0x4ae2, - 0x4ae3, 0x4ae4, 0x4ae5, 0x4ae5, 0x4ae6, 0x4ae7, 0x4ae8, 0x4ae9, - 0x4aea, 0x4aeb, 0x4aec, 0x4aee, 0x4aef, 0x4af0, 0x4af1, 0x4af3, - 0x4af4, 0x4af5, 0x4af7, 0x4af8, 0x4afa, 0x4afb, 0x4afd, 0x4aff, - 0x4b00, 0x4b00, 0x4b00, 0x4b00, 0x4b01, 0x4b01, 0x4b02, 0x4b02, - 0x4b03, 0x4b04, 0x4b05, 0x4b05, 0x4b06, 0x4b07, 0x4b08, 0x4b09, - 0x4b0a, 0x4b0b, 0x4b0c, 0x4b0e, 0x4b0f, 0x4b10, 0x4b11, 0x4b13, - 0x4b14, 0x4b15, 0x4b17, 0x4b18, 0x4b1a, 0x4b1b, 0x4b1d, 0x4b1f, - 0x4b20, 0x4b20, 0x4b20, 0x4b20, 0x4b21, 0x4b21, 0x4b22, 0x4b22, - 0x4b23, 0x4b24, 0x4b25, 0x4b25, 0x4b26, 0x4b27, 0x4b28, 0x4b29, - 0x4b2a, 0x4b2b, 0x4b2c, 0x4b2e, 0x4b2f, 0x4b30, 0x4b31, 0x4b33, - 0x4b34, 0x4b35, 0x4b37, 0x4b38, 0x4b3a, 0x4b3b, 0x4b3d, 0x4b3f, - 0x4b40, 0x4b40, 0x4b40, 0x4b40, 0x4b41, 0x4b41, 0x4b42, 0x4b42, - 0x4b43, 0x4b44, 0x4b45, 0x4b45, 0x4b46, 0x4b47, 0x4b48, 0x4b49, - 0x4b4a, 0x4b4b, 0x4b4c, 0x4b4e, 0x4b4f, 0x4b50, 0x4b51, 0x4b53, - 0x4b54, 0x4b55, 0x4b57, 0x4b58, 0x4b5a, 0x4b5b, 0x4b5d, 0x4b5f, - 0x4b80, 0x4b80, 0x4b80, 0x4b80, 0x4b81, 0x4b81, 0x4b82, 0x4b82, - 0x4b83, 0x4b84, 0x4b85, 0x4b85, 0x4b86, 0x4b87, 0x4b88, 0x4b89, - 0x4b8a, 0x4b8b, 0x4b8c, 0x4b8e, 0x4b8f, 0x4b90, 0x4b91, 0x4b93, - 0x4b94, 0x4b95, 0x4b97, 0x4b98, 0x4b9a, 0x4b9b, 0x4b9d, 0x4b9f, - 0x4ba0, 0x4ba0, 0x4ba0, 0x4ba0, 0x4ba1, 0x4ba1, 0x4ba2, 0x4ba2, - 0x4ba3, 0x4ba4, 0x4ba5, 0x4ba5, 0x4ba6, 0x4ba7, 0x4ba8, 0x4ba9, - 0x4baa, 0x4bab, 0x4bac, 0x4bae, 0x4baf, 0x4bb0, 0x4bb1, 0x4bb3, - 0x4bb4, 0x4bb5, 0x4bb7, 0x4bb8, 0x4bba, 0x4bbb, 0x4bbd, 0x4bbf, - 0x4bc0, 0x4bc0, 0x4bc0, 0x4bc0, 0x4bc1, 0x4bc1, 0x4bc2, 0x4bc2, - 0x4bc3, 0x4bc4, 0x4bc5, 0x4bc5, 0x4bc6, 0x4bc7, 0x4bc8, 0x4bc9, - 0x4bca, 0x4bcb, 0x4bcc, 0x4bce, 0x4bcf, 0x4bd0, 0x4bd1, 0x4bd3, - 0x4bd4, 0x4bd5, 0x4bd7, 0x4bd8, 0x4bda, 0x4bdb, 0x4bdd, 0x4bdf, - 0x4be0, 0x4be0, 0x4be0, 0x4be0, 0x4be1, 0x4be1, 0x4be2, 0x4be2, - 0x4be3, 0x4be4, 0x4be5, 0x4be5, 0x4be6, 0x4be7, 0x4be8, 0x4be9, - 0x4bea, 0x4beb, 0x4bec, 0x4bee, 0x4bef, 0x4bf0, 0x4bf1, 0x4bf3, - 0x4bf4, 0x4bf5, 0x4bf7, 0x4bf8, 0x4bfa, 0x4bfb, 0x4bfd, 0x4bff, - 0x4c00, 0x4c00, 0x4c00, 0x4c00, 0x4c01, 0x4c01, 0x4c02, 0x4c02, - 0x4c03, 0x4c04, 0x4c05, 0x4c05, 0x4c06, 0x4c07, 0x4c08, 0x4c09, - 0x4c0a, 0x4c0b, 0x4c0c, 0x4c0e, 0x4c0f, 0x4c10, 0x4c11, 0x4c13, - 0x4c14, 0x4c15, 0x4c17, 0x4c18, 0x4c1a, 0x4c1b, 0x4c1d, 0x4c1f, - 0x4c40, 0x4c40, 0x4c40, 0x4c40, 0x4c41, 0x4c41, 0x4c42, 0x4c42, - 0x4c43, 0x4c44, 0x4c45, 0x4c45, 0x4c46, 0x4c47, 0x4c48, 0x4c49, - 0x4c4a, 0x4c4b, 0x4c4c, 0x4c4e, 0x4c4f, 0x4c50, 0x4c51, 0x4c53, - 0x4c54, 0x4c55, 0x4c57, 0x4c58, 0x4c5a, 0x4c5b, 0x4c5d, 0x4c5f, - 0x4c60, 0x4c60, 0x4c60, 0x4c60, 0x4c61, 0x4c61, 0x4c62, 0x4c62, - 0x4c63, 0x4c64, 0x4c65, 0x4c65, 0x4c66, 0x4c67, 0x4c68, 0x4c69, - 0x4c6a, 0x4c6b, 0x4c6c, 0x4c6e, 0x4c6f, 0x4c70, 0x4c71, 0x4c73, - 0x4c74, 0x4c75, 0x4c77, 0x4c78, 0x4c7a, 0x4c7b, 0x4c7d, 0x4c7f, - 0x4c80, 0x4c80, 0x4c80, 0x4c80, 0x4c81, 0x4c81, 0x4c82, 0x4c82, - 0x4c83, 0x4c84, 0x4c85, 0x4c85, 0x4c86, 0x4c87, 0x4c88, 0x4c89, - 0x4c8a, 0x4c8b, 0x4c8c, 0x4c8e, 0x4c8f, 0x4c90, 0x4c91, 0x4c93, - 0x4c94, 0x4c95, 0x4c97, 0x4c98, 0x4c9a, 0x4c9b, 0x4c9d, 0x4c9f, - 0x4cc0, 0x4cc0, 0x4cc0, 0x4cc0, 0x4cc1, 0x4cc1, 0x4cc2, 0x4cc2, - 0x4cc3, 0x4cc4, 0x4cc5, 0x4cc5, 0x4cc6, 0x4cc7, 0x4cc8, 0x4cc9, - 0x4cca, 0x4ccb, 0x4ccc, 0x4cce, 0x4ccf, 0x4cd0, 0x4cd1, 0x4cd3, - 0x4cd4, 0x4cd5, 0x4cd7, 0x4cd8, 0x4cda, 0x4cdb, 0x4cdd, 0x4cdf, - 0x4ce0, 0x4ce0, 0x4ce0, 0x4ce0, 0x4ce1, 0x4ce1, 0x4ce2, 0x4ce2, - 0x4ce3, 0x4ce4, 0x4ce5, 0x4ce5, 0x4ce6, 0x4ce7, 0x4ce8, 0x4ce9, - 0x4cea, 0x4ceb, 0x4cec, 0x4cee, 0x4cef, 0x4cf0, 0x4cf1, 0x4cf3, - 0x4cf4, 0x4cf5, 0x4cf7, 0x4cf8, 0x4cfa, 0x4cfb, 0x4cfd, 0x4cff, - 0x4d00, 0x4d00, 0x4d00, 0x4d00, 0x4d01, 0x4d01, 0x4d02, 0x4d02, - 0x4d03, 0x4d04, 0x4d05, 0x4d05, 0x4d06, 0x4d07, 0x4d08, 0x4d09, - 0x4d0a, 0x4d0b, 0x4d0c, 0x4d0e, 0x4d0f, 0x4d10, 0x4d11, 0x4d13, - 0x4d14, 0x4d15, 0x4d17, 0x4d18, 0x4d1a, 0x4d1b, 0x4d1d, 0x4d1f, - 0x4d40, 0x4d40, 0x4d40, 0x4d40, 0x4d41, 0x4d41, 0x4d42, 0x4d42, - 0x4d43, 0x4d44, 0x4d45, 0x4d45, 0x4d46, 0x4d47, 0x4d48, 0x4d49, - 0x4d4a, 0x4d4b, 0x4d4c, 0x4d4e, 0x4d4f, 0x4d50, 0x4d51, 0x4d53, - 0x4d54, 0x4d55, 0x4d57, 0x4d58, 0x4d5a, 0x4d5b, 0x4d5d, 0x4d5f, - 0x4d60, 0x4d60, 0x4d60, 0x4d60, 0x4d61, 0x4d61, 0x4d62, 0x4d62, - 0x4d63, 0x4d64, 0x4d65, 0x4d65, 0x4d66, 0x4d67, 0x4d68, 0x4d69, - 0x4d6a, 0x4d6b, 0x4d6c, 0x4d6e, 0x4d6f, 0x4d70, 0x4d71, 0x4d73, - 0x4d74, 0x4d75, 0x4d77, 0x4d78, 0x4d7a, 0x4d7b, 0x4d7d, 0x4d7f, - 0x4d80, 0x4d80, 0x4d80, 0x4d80, 0x4d81, 0x4d81, 0x4d82, 0x4d82, - 0x4d83, 0x4d84, 0x4d85, 0x4d85, 0x4d86, 0x4d87, 0x4d88, 0x4d89, - 0x4d8a, 0x4d8b, 0x4d8c, 0x4d8e, 0x4d8f, 0x4d90, 0x4d91, 0x4d93, - 0x4d94, 0x4d95, 0x4d97, 0x4d98, 0x4d9a, 0x4d9b, 0x4d9d, 0x4d9f, - 0x4dc0, 0x4dc0, 0x4dc0, 0x4dc0, 0x4dc1, 0x4dc1, 0x4dc2, 0x4dc2, - 0x4dc3, 0x4dc4, 0x4dc5, 0x4dc5, 0x4dc6, 0x4dc7, 0x4dc8, 0x4dc9, - 0x4dca, 0x4dcb, 0x4dcc, 0x4dce, 0x4dcf, 0x4dd0, 0x4dd1, 0x4dd3, - 0x4dd4, 0x4dd5, 0x4dd7, 0x4dd8, 0x4dda, 0x4ddb, 0x4ddd, 0x4ddf, - 0x4de0, 0x4de0, 0x4de0, 0x4de0, 0x4de1, 0x4de1, 0x4de2, 0x4de2, - 0x4de3, 0x4de4, 0x4de5, 0x4de5, 0x4de6, 0x4de7, 0x4de8, 0x4de9, - 0x4dea, 0x4deb, 0x4dec, 0x4dee, 0x4def, 0x4df0, 0x4df1, 0x4df3, - 0x4df4, 0x4df5, 0x4df7, 0x4df8, 0x4dfa, 0x4dfb, 0x4dfd, 0x4dff, - 0x4e20, 0x4e20, 0x4e20, 0x4e20, 0x4e21, 0x4e21, 0x4e22, 0x4e22, - 0x4e23, 0x4e24, 0x4e25, 0x4e25, 0x4e26, 0x4e27, 0x4e28, 0x4e29, - 0x4e2a, 0x4e2b, 0x4e2c, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e33, - 0x4e34, 0x4e35, 0x4e37, 0x4e38, 0x4e3a, 0x4e3b, 0x4e3d, 0x4e3f, - 0x4e40, 0x4e40, 0x4e40, 0x4e40, 0x4e41, 0x4e41, 0x4e42, 0x4e42, - 0x4e43, 0x4e44, 0x4e45, 0x4e45, 0x4e46, 0x4e47, 0x4e48, 0x4e49, - 0x4e4a, 0x4e4b, 0x4e4c, 0x4e4e, 0x4e4f, 0x4e50, 0x4e51, 0x4e53, - 0x4e54, 0x4e55, 0x4e57, 0x4e58, 0x4e5a, 0x4e5b, 0x4e5d, 0x4e5f, - 0x4e80, 0x4e80, 0x4e80, 0x4e80, 0x4e81, 0x4e81, 0x4e82, 0x4e82, - 0x4e83, 0x4e84, 0x4e85, 0x4e85, 0x4e86, 0x4e87, 0x4e88, 0x4e89, - 0x4e8a, 0x4e8b, 0x4e8c, 0x4e8e, 0x4e8f, 0x4e90, 0x4e91, 0x4e93, - 0x4e94, 0x4e95, 0x4e97, 0x4e98, 0x4e9a, 0x4e9b, 0x4e9d, 0x4e9f, - 0x4ea0, 0x4ea0, 0x4ea0, 0x4ea0, 0x4ea1, 0x4ea1, 0x4ea2, 0x4ea2, - 0x4ea3, 0x4ea4, 0x4ea5, 0x4ea5, 0x4ea6, 0x4ea7, 0x4ea8, 0x4ea9, - 0x4eaa, 0x4eab, 0x4eac, 0x4eae, 0x4eaf, 0x4eb0, 0x4eb1, 0x4eb3, - 0x4eb4, 0x4eb5, 0x4eb7, 0x4eb8, 0x4eba, 0x4ebb, 0x4ebd, 0x4ebf, - 0x4ee0, 0x4ee0, 0x4ee0, 0x4ee0, 0x4ee1, 0x4ee1, 0x4ee2, 0x4ee2, - 0x4ee3, 0x4ee4, 0x4ee5, 0x4ee5, 0x4ee6, 0x4ee7, 0x4ee8, 0x4ee9, - 0x4eea, 0x4eeb, 0x4eec, 0x4eee, 0x4eef, 0x4ef0, 0x4ef1, 0x4ef3, - 0x4ef4, 0x4ef5, 0x4ef7, 0x4ef8, 0x4efa, 0x4efb, 0x4efd, 0x4eff, - 0x4f00, 0x4f00, 0x4f00, 0x4f00, 0x4f01, 0x4f01, 0x4f02, 0x4f02, - 0x4f03, 0x4f04, 0x4f05, 0x4f05, 0x4f06, 0x4f07, 0x4f08, 0x4f09, - 0x4f0a, 0x4f0b, 0x4f0c, 0x4f0e, 0x4f0f, 0x4f10, 0x4f11, 0x4f13, - 0x4f14, 0x4f15, 0x4f17, 0x4f18, 0x4f1a, 0x4f1b, 0x4f1d, 0x4f1f, - 0x4f40, 0x4f40, 0x4f40, 0x4f40, 0x4f41, 0x4f41, 0x4f42, 0x4f42, - 0x4f43, 0x4f44, 0x4f45, 0x4f45, 0x4f46, 0x4f47, 0x4f48, 0x4f49, - 0x4f4a, 0x4f4b, 0x4f4c, 0x4f4e, 0x4f4f, 0x4f50, 0x4f51, 0x4f53, - 0x4f54, 0x4f55, 0x4f57, 0x4f58, 0x4f5a, 0x4f5b, 0x4f5d, 0x4f5f, - 0x4f60, 0x4f60, 0x4f60, 0x4f60, 0x4f61, 0x4f61, 0x4f62, 0x4f62, - 0x4f63, 0x4f64, 0x4f65, 0x4f65, 0x4f66, 0x4f67, 0x4f68, 0x4f69, - 0x4f6a, 0x4f6b, 0x4f6c, 0x4f6e, 0x4f6f, 0x4f70, 0x4f71, 0x4f73, - 0x4f74, 0x4f75, 0x4f77, 0x4f78, 0x4f7a, 0x4f7b, 0x4f7d, 0x4f7f, - 0x4fa0, 0x4fa0, 0x4fa0, 0x4fa0, 0x4fa1, 0x4fa1, 0x4fa2, 0x4fa2, - 0x4fa3, 0x4fa4, 0x4fa5, 0x4fa5, 0x4fa6, 0x4fa7, 0x4fa8, 0x4fa9, - 0x4faa, 0x4fab, 0x4fac, 0x4fae, 0x4faf, 0x4fb0, 0x4fb1, 0x4fb3, - 0x4fb4, 0x4fb5, 0x4fb7, 0x4fb8, 0x4fba, 0x4fbb, 0x4fbd, 0x4fbf, - 0x4fe0, 0x4fe0, 0x4fe0, 0x4fe0, 0x4fe1, 0x4fe1, 0x4fe2, 0x4fe2, - 0x4fe3, 0x4fe4, 0x4fe5, 0x4fe5, 0x4fe6, 0x4fe7, 0x4fe8, 0x4fe9, - 0x4fea, 0x4feb, 0x4fec, 0x4fee, 0x4fef, 0x4ff0, 0x4ff1, 0x4ff3, - 0x4ff4, 0x4ff5, 0x4ff7, 0x4ff8, 0x4ffa, 0x4ffb, 0x4ffd, 0x4fff, - 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, 0x5001, 0x5002, 0x5002, - 0x5003, 0x5004, 0x5005, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, - 0x500a, 0x500b, 0x500c, 0x500e, 0x500f, 0x5010, 0x5011, 0x5013, - 0x5014, 0x5015, 0x5017, 0x5018, 0x501a, 0x501b, 0x501d, 0x501f, - 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, 0x5001, 0x5002, 0x5002, - 0x5003, 0x5004, 0x5005, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, - 0x500a, 0x500b, 0x500c, 0x500e, 0x500f, 0x5010, 0x5011, 0x5013, - 0x5014, 0x5015, 0x5017, 0x5018, 0x501a, 0x501b, 0x501d, 0x501f, - 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, 0x5001, 0x5002, 0x5002, - 0x5003, 0x5004, 0x5005, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, - 0x500a, 0x500b, 0x500c, 0x500e, 0x500f, 0x5010, 0x5011, 0x5013, - 0x5014, 0x5015, 0x5017, 0x5018, 0x501a, 0x501b, 0x501d, 0x501f, - 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, 0x5001, 0x5002, 0x5002, - 0x5003, 0x5004, 0x5005, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, - 0x500a, 0x500b, 0x500c, 0x500e, 0x500f, 0x5010, 0x5011, 0x5013, - 0x5014, 0x5015, 0x5017, 0x5018, 0x501a, 0x501b, 0x501d, 0x501f, - 0x5000, 0x5000, 0x5000, 0x5000, 0x5001, 0x5001, 0x5002, 0x5002, - 0x5003, 0x5004, 0x5005, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, - 0x500a, 0x500b, 0x500c, 0x500e, 0x500f, 0x5010, 0x5011, 0x5013, - 0x5014, 0x5015, 0x5017, 0x5018, 0x501a, 0x501b, 0x501d, 0x501f, - 0x5020, 0x5020, 0x5020, 0x5020, 0x5021, 0x5021, 0x5022, 0x5022, - 0x5023, 0x5024, 0x5025, 0x5025, 0x5026, 0x5027, 0x5028, 0x5029, - 0x502a, 0x502b, 0x502c, 0x502e, 0x502f, 0x5030, 0x5031, 0x5033, - 0x5034, 0x5035, 0x5037, 0x5038, 0x503a, 0x503b, 0x503d, 0x503f, - 0x5020, 0x5020, 0x5020, 0x5020, 0x5021, 0x5021, 0x5022, 0x5022, - 0x5023, 0x5024, 0x5025, 0x5025, 0x5026, 0x5027, 0x5028, 0x5029, - 0x502a, 0x502b, 0x502c, 0x502e, 0x502f, 0x5030, 0x5031, 0x5033, - 0x5034, 0x5035, 0x5037, 0x5038, 0x503a, 0x503b, 0x503d, 0x503f, - 0x5020, 0x5020, 0x5020, 0x5020, 0x5021, 0x5021, 0x5022, 0x5022, - 0x5023, 0x5024, 0x5025, 0x5025, 0x5026, 0x5027, 0x5028, 0x5029, - 0x502a, 0x502b, 0x502c, 0x502e, 0x502f, 0x5030, 0x5031, 0x5033, - 0x5034, 0x5035, 0x5037, 0x5038, 0x503a, 0x503b, 0x503d, 0x503f, - 0x5040, 0x5040, 0x5040, 0x5040, 0x5041, 0x5041, 0x5042, 0x5042, - 0x5043, 0x5044, 0x5045, 0x5045, 0x5046, 0x5047, 0x5048, 0x5049, - 0x504a, 0x504b, 0x504c, 0x504e, 0x504f, 0x5050, 0x5051, 0x5053, - 0x5054, 0x5055, 0x5057, 0x5058, 0x505a, 0x505b, 0x505d, 0x505f, - 0x5040, 0x5040, 0x5040, 0x5040, 0x5041, 0x5041, 0x5042, 0x5042, - 0x5043, 0x5044, 0x5045, 0x5045, 0x5046, 0x5047, 0x5048, 0x5049, - 0x504a, 0x504b, 0x504c, 0x504e, 0x504f, 0x5050, 0x5051, 0x5053, - 0x5054, 0x5055, 0x5057, 0x5058, 0x505a, 0x505b, 0x505d, 0x505f, - 0x5060, 0x5060, 0x5060, 0x5060, 0x5061, 0x5061, 0x5062, 0x5062, - 0x5063, 0x5064, 0x5065, 0x5065, 0x5066, 0x5067, 0x5068, 0x5069, - 0x506a, 0x506b, 0x506c, 0x506e, 0x506f, 0x5070, 0x5071, 0x5073, - 0x5074, 0x5075, 0x5077, 0x5078, 0x507a, 0x507b, 0x507d, 0x507f, - 0x5060, 0x5060, 0x5060, 0x5060, 0x5061, 0x5061, 0x5062, 0x5062, - 0x5063, 0x5064, 0x5065, 0x5065, 0x5066, 0x5067, 0x5068, 0x5069, - 0x506a, 0x506b, 0x506c, 0x506e, 0x506f, 0x5070, 0x5071, 0x5073, - 0x5074, 0x5075, 0x5077, 0x5078, 0x507a, 0x507b, 0x507d, 0x507f, - 0x5080, 0x5080, 0x5080, 0x5080, 0x5081, 0x5081, 0x5082, 0x5082, - 0x5083, 0x5084, 0x5085, 0x5085, 0x5086, 0x5087, 0x5088, 0x5089, - 0x508a, 0x508b, 0x508c, 0x508e, 0x508f, 0x5090, 0x5091, 0x5093, - 0x5094, 0x5095, 0x5097, 0x5098, 0x509a, 0x509b, 0x509d, 0x509f, - 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a1, 0x50a1, 0x50a2, 0x50a2, - 0x50a3, 0x50a4, 0x50a5, 0x50a5, 0x50a6, 0x50a7, 0x50a8, 0x50a9, - 0x50aa, 0x50ab, 0x50ac, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, - 0x50b4, 0x50b5, 0x50b7, 0x50b8, 0x50ba, 0x50bb, 0x50bd, 0x50bf, - 0x50a0, 0x50a0, 0x50a0, 0x50a0, 0x50a1, 0x50a1, 0x50a2, 0x50a2, - 0x50a3, 0x50a4, 0x50a5, 0x50a5, 0x50a6, 0x50a7, 0x50a8, 0x50a9, - 0x50aa, 0x50ab, 0x50ac, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, - 0x50b4, 0x50b5, 0x50b7, 0x50b8, 0x50ba, 0x50bb, 0x50bd, 0x50bf, - 0x50c0, 0x50c0, 0x50c0, 0x50c0, 0x50c1, 0x50c1, 0x50c2, 0x50c2, - 0x50c3, 0x50c4, 0x50c5, 0x50c5, 0x50c6, 0x50c7, 0x50c8, 0x50c9, - 0x50ca, 0x50cb, 0x50cc, 0x50ce, 0x50cf, 0x50d0, 0x50d1, 0x50d3, - 0x50d4, 0x50d5, 0x50d7, 0x50d8, 0x50da, 0x50db, 0x50dd, 0x50df, - 0x50e0, 0x50e0, 0x50e0, 0x50e0, 0x50e1, 0x50e1, 0x50e2, 0x50e2, - 0x50e3, 0x50e4, 0x50e5, 0x50e5, 0x50e6, 0x50e7, 0x50e8, 0x50e9, - 0x50ea, 0x50eb, 0x50ec, 0x50ee, 0x50ef, 0x50f0, 0x50f1, 0x50f3, - 0x50f4, 0x50f5, 0x50f7, 0x50f8, 0x50fa, 0x50fb, 0x50fd, 0x50ff, - 0x50e0, 0x50e0, 0x50e0, 0x50e0, 0x50e1, 0x50e1, 0x50e2, 0x50e2, - 0x50e3, 0x50e4, 0x50e5, 0x50e5, 0x50e6, 0x50e7, 0x50e8, 0x50e9, - 0x50ea, 0x50eb, 0x50ec, 0x50ee, 0x50ef, 0x50f0, 0x50f1, 0x50f3, - 0x50f4, 0x50f5, 0x50f7, 0x50f8, 0x50fa, 0x50fb, 0x50fd, 0x50ff, - 0x5100, 0x5100, 0x5100, 0x5100, 0x5101, 0x5101, 0x5102, 0x5102, - 0x5103, 0x5104, 0x5105, 0x5105, 0x5106, 0x5107, 0x5108, 0x5109, - 0x510a, 0x510b, 0x510c, 0x510e, 0x510f, 0x5110, 0x5111, 0x5113, - 0x5114, 0x5115, 0x5117, 0x5118, 0x511a, 0x511b, 0x511d, 0x511f, - 0x5120, 0x5120, 0x5120, 0x5120, 0x5121, 0x5121, 0x5122, 0x5122, - 0x5123, 0x5124, 0x5125, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, - 0x512a, 0x512b, 0x512c, 0x512e, 0x512f, 0x5130, 0x5131, 0x5133, - 0x5134, 0x5135, 0x5137, 0x5138, 0x513a, 0x513b, 0x513d, 0x513f, - 0x5140, 0x5140, 0x5140, 0x5140, 0x5141, 0x5141, 0x5142, 0x5142, - 0x5143, 0x5144, 0x5145, 0x5145, 0x5146, 0x5147, 0x5148, 0x5149, - 0x514a, 0x514b, 0x514c, 0x514e, 0x514f, 0x5150, 0x5151, 0x5153, - 0x5154, 0x5155, 0x5157, 0x5158, 0x515a, 0x515b, 0x515d, 0x515f, - 0x5140, 0x5140, 0x5140, 0x5140, 0x5141, 0x5141, 0x5142, 0x5142, - 0x5143, 0x5144, 0x5145, 0x5145, 0x5146, 0x5147, 0x5148, 0x5149, - 0x514a, 0x514b, 0x514c, 0x514e, 0x514f, 0x5150, 0x5151, 0x5153, - 0x5154, 0x5155, 0x5157, 0x5158, 0x515a, 0x515b, 0x515d, 0x515f, - 0x5160, 0x5160, 0x5160, 0x5160, 0x5161, 0x5161, 0x5162, 0x5162, - 0x5163, 0x5164, 0x5165, 0x5165, 0x5166, 0x5167, 0x5168, 0x5169, - 0x516a, 0x516b, 0x516c, 0x516e, 0x516f, 0x5170, 0x5171, 0x5173, - 0x5174, 0x5175, 0x5177, 0x5178, 0x517a, 0x517b, 0x517d, 0x517f, - 0x5180, 0x5180, 0x5180, 0x5180, 0x5181, 0x5181, 0x5182, 0x5182, - 0x5183, 0x5184, 0x5185, 0x5185, 0x5186, 0x5187, 0x5188, 0x5189, - 0x518a, 0x518b, 0x518c, 0x518e, 0x518f, 0x5190, 0x5191, 0x5193, - 0x5194, 0x5195, 0x5197, 0x5198, 0x519a, 0x519b, 0x519d, 0x519f, - 0x51a0, 0x51a0, 0x51a0, 0x51a0, 0x51a1, 0x51a1, 0x51a2, 0x51a2, - 0x51a3, 0x51a4, 0x51a5, 0x51a5, 0x51a6, 0x51a7, 0x51a8, 0x51a9, - 0x51aa, 0x51ab, 0x51ac, 0x51ae, 0x51af, 0x51b0, 0x51b1, 0x51b3, - 0x51b4, 0x51b5, 0x51b7, 0x51b8, 0x51ba, 0x51bb, 0x51bd, 0x51bf, - 0x51c0, 0x51c0, 0x51c0, 0x51c0, 0x51c1, 0x51c1, 0x51c2, 0x51c2, - 0x51c3, 0x51c4, 0x51c5, 0x51c5, 0x51c6, 0x51c7, 0x51c8, 0x51c9, - 0x51ca, 0x51cb, 0x51cc, 0x51ce, 0x51cf, 0x51d0, 0x51d1, 0x51d3, - 0x51d4, 0x51d5, 0x51d7, 0x51d8, 0x51da, 0x51db, 0x51dd, 0x51df, - 0x51e0, 0x51e0, 0x51e0, 0x51e0, 0x51e1, 0x51e1, 0x51e2, 0x51e2, - 0x51e3, 0x51e4, 0x51e5, 0x51e5, 0x51e6, 0x51e7, 0x51e8, 0x51e9, - 0x51ea, 0x51eb, 0x51ec, 0x51ee, 0x51ef, 0x51f0, 0x51f1, 0x51f3, - 0x51f4, 0x51f5, 0x51f7, 0x51f8, 0x51fa, 0x51fb, 0x51fd, 0x51ff, - 0x5200, 0x5200, 0x5200, 0x5200, 0x5201, 0x5201, 0x5202, 0x5202, - 0x5203, 0x5204, 0x5205, 0x5205, 0x5206, 0x5207, 0x5208, 0x5209, - 0x520a, 0x520b, 0x520c, 0x520e, 0x520f, 0x5210, 0x5211, 0x5213, - 0x5214, 0x5215, 0x5217, 0x5218, 0x521a, 0x521b, 0x521d, 0x521f, - 0x5220, 0x5220, 0x5220, 0x5220, 0x5221, 0x5221, 0x5222, 0x5222, - 0x5223, 0x5224, 0x5225, 0x5225, 0x5226, 0x5227, 0x5228, 0x5229, - 0x522a, 0x522b, 0x522c, 0x522e, 0x522f, 0x5230, 0x5231, 0x5233, - 0x5234, 0x5235, 0x5237, 0x5238, 0x523a, 0x523b, 0x523d, 0x523f, - 0x5240, 0x5240, 0x5240, 0x5240, 0x5241, 0x5241, 0x5242, 0x5242, - 0x5243, 0x5244, 0x5245, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, - 0x524a, 0x524b, 0x524c, 0x524e, 0x524f, 0x5250, 0x5251, 0x5253, - 0x5254, 0x5255, 0x5257, 0x5258, 0x525a, 0x525b, 0x525d, 0x525f, - 0x5260, 0x5260, 0x5260, 0x5260, 0x5261, 0x5261, 0x5262, 0x5262, - 0x5263, 0x5264, 0x5265, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269, - 0x526a, 0x526b, 0x526c, 0x526e, 0x526f, 0x5270, 0x5271, 0x5273, - 0x5274, 0x5275, 0x5277, 0x5278, 0x527a, 0x527b, 0x527d, 0x527f, - 0x5280, 0x5280, 0x5280, 0x5280, 0x5281, 0x5281, 0x5282, 0x5282, - 0x5283, 0x5284, 0x5285, 0x5285, 0x5286, 0x5287, 0x5288, 0x5289, - 0x528a, 0x528b, 0x528c, 0x528e, 0x528f, 0x5290, 0x5291, 0x5293, - 0x5294, 0x5295, 0x5297, 0x5298, 0x529a, 0x529b, 0x529d, 0x529f, - 0x52a0, 0x52a0, 0x52a0, 0x52a0, 0x52a1, 0x52a1, 0x52a2, 0x52a2, - 0x52a3, 0x52a4, 0x52a5, 0x52a5, 0x52a6, 0x52a7, 0x52a8, 0x52a9, - 0x52aa, 0x52ab, 0x52ac, 0x52ae, 0x52af, 0x52b0, 0x52b1, 0x52b3, - 0x52b4, 0x52b5, 0x52b7, 0x52b8, 0x52ba, 0x52bb, 0x52bd, 0x52bf, - 0x52c0, 0x52c0, 0x52c0, 0x52c0, 0x52c1, 0x52c1, 0x52c2, 0x52c2, - 0x52c3, 0x52c4, 0x52c5, 0x52c5, 0x52c6, 0x52c7, 0x52c8, 0x52c9, - 0x52ca, 0x52cb, 0x52cc, 0x52ce, 0x52cf, 0x52d0, 0x52d1, 0x52d3, - 0x52d4, 0x52d5, 0x52d7, 0x52d8, 0x52da, 0x52db, 0x52dd, 0x52df, - 0x52e0, 0x52e0, 0x52e0, 0x52e0, 0x52e1, 0x52e1, 0x52e2, 0x52e2, - 0x52e3, 0x52e4, 0x52e5, 0x52e5, 0x52e6, 0x52e7, 0x52e8, 0x52e9, - 0x52ea, 0x52eb, 0x52ec, 0x52ee, 0x52ef, 0x52f0, 0x52f1, 0x52f3, - 0x52f4, 0x52f5, 0x52f7, 0x52f8, 0x52fa, 0x52fb, 0x52fd, 0x52ff, - 0x5300, 0x5300, 0x5300, 0x5300, 0x5301, 0x5301, 0x5302, 0x5302, - 0x5303, 0x5304, 0x5305, 0x5305, 0x5306, 0x5307, 0x5308, 0x5309, - 0x530a, 0x530b, 0x530c, 0x530e, 0x530f, 0x5310, 0x5311, 0x5313, - 0x5314, 0x5315, 0x5317, 0x5318, 0x531a, 0x531b, 0x531d, 0x531f, - 0x5320, 0x5320, 0x5320, 0x5320, 0x5321, 0x5321, 0x5322, 0x5322, - 0x5323, 0x5324, 0x5325, 0x5325, 0x5326, 0x5327, 0x5328, 0x5329, - 0x532a, 0x532b, 0x532c, 0x532e, 0x532f, 0x5330, 0x5331, 0x5333, - 0x5334, 0x5335, 0x5337, 0x5338, 0x533a, 0x533b, 0x533d, 0x533f, - 0x5340, 0x5340, 0x5340, 0x5340, 0x5341, 0x5341, 0x5342, 0x5342, - 0x5343, 0x5344, 0x5345, 0x5345, 0x5346, 0x5347, 0x5348, 0x5349, - 0x534a, 0x534b, 0x534c, 0x534e, 0x534f, 0x5350, 0x5351, 0x5353, - 0x5354, 0x5355, 0x5357, 0x5358, 0x535a, 0x535b, 0x535d, 0x535f, - 0x5380, 0x5380, 0x5380, 0x5380, 0x5381, 0x5381, 0x5382, 0x5382, - 0x5383, 0x5384, 0x5385, 0x5385, 0x5386, 0x5387, 0x5388, 0x5389, - 0x538a, 0x538b, 0x538c, 0x538e, 0x538f, 0x5390, 0x5391, 0x5393, - 0x5394, 0x5395, 0x5397, 0x5398, 0x539a, 0x539b, 0x539d, 0x539f, - 0x53a0, 0x53a0, 0x53a0, 0x53a0, 0x53a1, 0x53a1, 0x53a2, 0x53a2, - 0x53a3, 0x53a4, 0x53a5, 0x53a5, 0x53a6, 0x53a7, 0x53a8, 0x53a9, - 0x53aa, 0x53ab, 0x53ac, 0x53ae, 0x53af, 0x53b0, 0x53b1, 0x53b3, - 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bb, 0x53bd, 0x53bf, - 0x53c0, 0x53c0, 0x53c0, 0x53c0, 0x53c1, 0x53c1, 0x53c2, 0x53c2, - 0x53c3, 0x53c4, 0x53c5, 0x53c5, 0x53c6, 0x53c7, 0x53c8, 0x53c9, - 0x53ca, 0x53cb, 0x53cc, 0x53ce, 0x53cf, 0x53d0, 0x53d1, 0x53d3, - 0x53d4, 0x53d5, 0x53d7, 0x53d8, 0x53da, 0x53db, 0x53dd, 0x53df, - 0x53e0, 0x53e0, 0x53e0, 0x53e0, 0x53e1, 0x53e1, 0x53e2, 0x53e2, - 0x53e3, 0x53e4, 0x53e5, 0x53e5, 0x53e6, 0x53e7, 0x53e8, 0x53e9, - 0x53ea, 0x53eb, 0x53ec, 0x53ee, 0x53ef, 0x53f0, 0x53f1, 0x53f3, - 0x53f4, 0x53f5, 0x53f7, 0x53f8, 0x53fa, 0x53fb, 0x53fd, 0x53ff, - 0x5400, 0x5400, 0x5400, 0x5400, 0x5401, 0x5401, 0x5402, 0x5402, - 0x5403, 0x5404, 0x5405, 0x5405, 0x5406, 0x5407, 0x5408, 0x5409, - 0x540a, 0x540b, 0x540c, 0x540e, 0x540f, 0x5410, 0x5411, 0x5413, - 0x5414, 0x5415, 0x5417, 0x5418, 0x541a, 0x541b, 0x541d, 0x541f, - 0x5440, 0x5440, 0x5440, 0x5440, 0x5441, 0x5441, 0x5442, 0x5442, - 0x5443, 0x5444, 0x5445, 0x5445, 0x5446, 0x5447, 0x5448, 0x5449, - 0x544a, 0x544b, 0x544c, 0x544e, 0x544f, 0x5450, 0x5451, 0x5453, - 0x5454, 0x5455, 0x5457, 0x5458, 0x545a, 0x545b, 0x545d, 0x545f, - 0x5460, 0x5460, 0x5460, 0x5460, 0x5461, 0x5461, 0x5462, 0x5462, - 0x5463, 0x5464, 0x5465, 0x5465, 0x5466, 0x5467, 0x5468, 0x5469, - 0x546a, 0x546b, 0x546c, 0x546e, 0x546f, 0x5470, 0x5471, 0x5473, - 0x5474, 0x5475, 0x5477, 0x5478, 0x547a, 0x547b, 0x547d, 0x547f, - 0x5480, 0x5480, 0x5480, 0x5480, 0x5481, 0x5481, 0x5482, 0x5482, - 0x5483, 0x5484, 0x5485, 0x5485, 0x5486, 0x5487, 0x5488, 0x5489, - 0x548a, 0x548b, 0x548c, 0x548e, 0x548f, 0x5490, 0x5491, 0x5493, - 0x5494, 0x5495, 0x5497, 0x5498, 0x549a, 0x549b, 0x549d, 0x549f, - 0x54c0, 0x54c0, 0x54c0, 0x54c0, 0x54c1, 0x54c1, 0x54c2, 0x54c2, - 0x54c3, 0x54c4, 0x54c5, 0x54c5, 0x54c6, 0x54c7, 0x54c8, 0x54c9, - 0x54ca, 0x54cb, 0x54cc, 0x54ce, 0x54cf, 0x54d0, 0x54d1, 0x54d3, - 0x54d4, 0x54d5, 0x54d7, 0x54d8, 0x54da, 0x54db, 0x54dd, 0x54df, - 0x54e0, 0x54e0, 0x54e0, 0x54e0, 0x54e1, 0x54e1, 0x54e2, 0x54e2, - 0x54e3, 0x54e4, 0x54e5, 0x54e5, 0x54e6, 0x54e7, 0x54e8, 0x54e9, - 0x54ea, 0x54eb, 0x54ec, 0x54ee, 0x54ef, 0x54f0, 0x54f1, 0x54f3, - 0x54f4, 0x54f5, 0x54f7, 0x54f8, 0x54fa, 0x54fb, 0x54fd, 0x54ff, - 0x5500, 0x5500, 0x5500, 0x5500, 0x5501, 0x5501, 0x5502, 0x5502, - 0x5503, 0x5504, 0x5505, 0x5505, 0x5506, 0x5507, 0x5508, 0x5509, - 0x550a, 0x550b, 0x550c, 0x550e, 0x550f, 0x5510, 0x5511, 0x5513, - 0x5514, 0x5515, 0x5517, 0x5518, 0x551a, 0x551b, 0x551d, 0x551f, - 0x5540, 0x5540, 0x5540, 0x5540, 0x5541, 0x5541, 0x5542, 0x5542, - 0x5543, 0x5544, 0x5545, 0x5545, 0x5546, 0x5547, 0x5548, 0x5549, - 0x554a, 0x554b, 0x554c, 0x554e, 0x554f, 0x5550, 0x5551, 0x5553, - 0x5554, 0x5555, 0x5557, 0x5558, 0x555a, 0x555b, 0x555d, 0x555f, - 0x5560, 0x5560, 0x5560, 0x5560, 0x5561, 0x5561, 0x5562, 0x5562, - 0x5563, 0x5564, 0x5565, 0x5565, 0x5566, 0x5567, 0x5568, 0x5569, - 0x556a, 0x556b, 0x556c, 0x556e, 0x556f, 0x5570, 0x5571, 0x5573, - 0x5574, 0x5575, 0x5577, 0x5578, 0x557a, 0x557b, 0x557d, 0x557f, - 0x5580, 0x5580, 0x5580, 0x5580, 0x5581, 0x5581, 0x5582, 0x5582, - 0x5583, 0x5584, 0x5585, 0x5585, 0x5586, 0x5587, 0x5588, 0x5589, - 0x558a, 0x558b, 0x558c, 0x558e, 0x558f, 0x5590, 0x5591, 0x5593, - 0x5594, 0x5595, 0x5597, 0x5598, 0x559a, 0x559b, 0x559d, 0x559f, - 0x55c0, 0x55c0, 0x55c0, 0x55c0, 0x55c1, 0x55c1, 0x55c2, 0x55c2, - 0x55c3, 0x55c4, 0x55c5, 0x55c5, 0x55c6, 0x55c7, 0x55c8, 0x55c9, - 0x55ca, 0x55cb, 0x55cc, 0x55ce, 0x55cf, 0x55d0, 0x55d1, 0x55d3, - 0x55d4, 0x55d5, 0x55d7, 0x55d8, 0x55da, 0x55db, 0x55dd, 0x55df, - 0x55e0, 0x55e0, 0x55e0, 0x55e0, 0x55e1, 0x55e1, 0x55e2, 0x55e2, - 0x55e3, 0x55e4, 0x55e5, 0x55e5, 0x55e6, 0x55e7, 0x55e8, 0x55e9, - 0x55ea, 0x55eb, 0x55ec, 0x55ee, 0x55ef, 0x55f0, 0x55f1, 0x55f3, - 0x55f4, 0x55f5, 0x55f7, 0x55f8, 0x55fa, 0x55fb, 0x55fd, 0x55ff, - 0x5620, 0x5620, 0x5620, 0x5620, 0x5621, 0x5621, 0x5622, 0x5622, - 0x5623, 0x5624, 0x5625, 0x5625, 0x5626, 0x5627, 0x5628, 0x5629, - 0x562a, 0x562b, 0x562c, 0x562e, 0x562f, 0x5630, 0x5631, 0x5633, - 0x5634, 0x5635, 0x5637, 0x5638, 0x563a, 0x563b, 0x563d, 0x563f, - 0x5640, 0x5640, 0x5640, 0x5640, 0x5641, 0x5641, 0x5642, 0x5642, - 0x5643, 0x5644, 0x5645, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, - 0x564a, 0x564b, 0x564c, 0x564e, 0x564f, 0x5650, 0x5651, 0x5653, - 0x5654, 0x5655, 0x5657, 0x5658, 0x565a, 0x565b, 0x565d, 0x565f, - 0x5680, 0x5680, 0x5680, 0x5680, 0x5681, 0x5681, 0x5682, 0x5682, - 0x5683, 0x5684, 0x5685, 0x5685, 0x5686, 0x5687, 0x5688, 0x5689, - 0x568a, 0x568b, 0x568c, 0x568e, 0x568f, 0x5690, 0x5691, 0x5693, - 0x5694, 0x5695, 0x5697, 0x5698, 0x569a, 0x569b, 0x569d, 0x569f, - 0x56a0, 0x56a0, 0x56a0, 0x56a0, 0x56a1, 0x56a1, 0x56a2, 0x56a2, - 0x56a3, 0x56a4, 0x56a5, 0x56a5, 0x56a6, 0x56a7, 0x56a8, 0x56a9, - 0x56aa, 0x56ab, 0x56ac, 0x56ae, 0x56af, 0x56b0, 0x56b1, 0x56b3, - 0x56b4, 0x56b5, 0x56b7, 0x56b8, 0x56ba, 0x56bb, 0x56bd, 0x56bf, - 0x56e0, 0x56e0, 0x56e0, 0x56e0, 0x56e1, 0x56e1, 0x56e2, 0x56e2, - 0x56e3, 0x56e4, 0x56e5, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56e9, - 0x56ea, 0x56eb, 0x56ec, 0x56ee, 0x56ef, 0x56f0, 0x56f1, 0x56f3, - 0x56f4, 0x56f5, 0x56f7, 0x56f8, 0x56fa, 0x56fb, 0x56fd, 0x56ff, - 0x5700, 0x5700, 0x5700, 0x5700, 0x5701, 0x5701, 0x5702, 0x5702, - 0x5703, 0x5704, 0x5705, 0x5705, 0x5706, 0x5707, 0x5708, 0x5709, - 0x570a, 0x570b, 0x570c, 0x570e, 0x570f, 0x5710, 0x5711, 0x5713, - 0x5714, 0x5715, 0x5717, 0x5718, 0x571a, 0x571b, 0x571d, 0x571f, - 0x5740, 0x5740, 0x5740, 0x5740, 0x5741, 0x5741, 0x5742, 0x5742, - 0x5743, 0x5744, 0x5745, 0x5745, 0x5746, 0x5747, 0x5748, 0x5749, - 0x574a, 0x574b, 0x574c, 0x574e, 0x574f, 0x5750, 0x5751, 0x5753, - 0x5754, 0x5755, 0x5757, 0x5758, 0x575a, 0x575b, 0x575d, 0x575f, - 0x5760, 0x5760, 0x5760, 0x5760, 0x5761, 0x5761, 0x5762, 0x5762, - 0x5763, 0x5764, 0x5765, 0x5765, 0x5766, 0x5767, 0x5768, 0x5769, - 0x576a, 0x576b, 0x576c, 0x576e, 0x576f, 0x5770, 0x5771, 0x5773, - 0x5774, 0x5775, 0x5777, 0x5778, 0x577a, 0x577b, 0x577d, 0x577f, - 0x57a0, 0x57a0, 0x57a0, 0x57a0, 0x57a1, 0x57a1, 0x57a2, 0x57a2, - 0x57a3, 0x57a4, 0x57a5, 0x57a5, 0x57a6, 0x57a7, 0x57a8, 0x57a9, - 0x57aa, 0x57ab, 0x57ac, 0x57ae, 0x57af, 0x57b0, 0x57b1, 0x57b3, - 0x57b4, 0x57b5, 0x57b7, 0x57b8, 0x57ba, 0x57bb, 0x57bd, 0x57bf, - 0x57e0, 0x57e0, 0x57e0, 0x57e0, 0x57e1, 0x57e1, 0x57e2, 0x57e2, - 0x57e3, 0x57e4, 0x57e5, 0x57e5, 0x57e6, 0x57e7, 0x57e8, 0x57e9, - 0x57ea, 0x57eb, 0x57ec, 0x57ee, 0x57ef, 0x57f0, 0x57f1, 0x57f3, - 0x57f4, 0x57f5, 0x57f7, 0x57f8, 0x57fa, 0x57fb, 0x57fd, 0x57ff, - 0x5800, 0x5800, 0x5800, 0x5800, 0x5801, 0x5801, 0x5802, 0x5802, - 0x5803, 0x5804, 0x5805, 0x5805, 0x5806, 0x5807, 0x5808, 0x5809, - 0x580a, 0x580b, 0x580c, 0x580e, 0x580f, 0x5810, 0x5811, 0x5813, - 0x5814, 0x5815, 0x5817, 0x5818, 0x581a, 0x581b, 0x581d, 0x581f, - 0x5800, 0x5800, 0x5800, 0x5800, 0x5801, 0x5801, 0x5802, 0x5802, - 0x5803, 0x5804, 0x5805, 0x5805, 0x5806, 0x5807, 0x5808, 0x5809, - 0x580a, 0x580b, 0x580c, 0x580e, 0x580f, 0x5810, 0x5811, 0x5813, - 0x5814, 0x5815, 0x5817, 0x5818, 0x581a, 0x581b, 0x581d, 0x581f, - 0x5800, 0x5800, 0x5800, 0x5800, 0x5801, 0x5801, 0x5802, 0x5802, - 0x5803, 0x5804, 0x5805, 0x5805, 0x5806, 0x5807, 0x5808, 0x5809, - 0x580a, 0x580b, 0x580c, 0x580e, 0x580f, 0x5810, 0x5811, 0x5813, - 0x5814, 0x5815, 0x5817, 0x5818, 0x581a, 0x581b, 0x581d, 0x581f, - 0x5800, 0x5800, 0x5800, 0x5800, 0x5801, 0x5801, 0x5802, 0x5802, - 0x5803, 0x5804, 0x5805, 0x5805, 0x5806, 0x5807, 0x5808, 0x5809, - 0x580a, 0x580b, 0x580c, 0x580e, 0x580f, 0x5810, 0x5811, 0x5813, - 0x5814, 0x5815, 0x5817, 0x5818, 0x581a, 0x581b, 0x581d, 0x581f, - 0x5800, 0x5800, 0x5800, 0x5800, 0x5801, 0x5801, 0x5802, 0x5802, - 0x5803, 0x5804, 0x5805, 0x5805, 0x5806, 0x5807, 0x5808, 0x5809, - 0x580a, 0x580b, 0x580c, 0x580e, 0x580f, 0x5810, 0x5811, 0x5813, - 0x5814, 0x5815, 0x5817, 0x5818, 0x581a, 0x581b, 0x581d, 0x581f, - 0x5820, 0x5820, 0x5820, 0x5820, 0x5821, 0x5821, 0x5822, 0x5822, - 0x5823, 0x5824, 0x5825, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, - 0x582a, 0x582b, 0x582c, 0x582e, 0x582f, 0x5830, 0x5831, 0x5833, - 0x5834, 0x5835, 0x5837, 0x5838, 0x583a, 0x583b, 0x583d, 0x583f, - 0x5820, 0x5820, 0x5820, 0x5820, 0x5821, 0x5821, 0x5822, 0x5822, - 0x5823, 0x5824, 0x5825, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, - 0x582a, 0x582b, 0x582c, 0x582e, 0x582f, 0x5830, 0x5831, 0x5833, - 0x5834, 0x5835, 0x5837, 0x5838, 0x583a, 0x583b, 0x583d, 0x583f, - 0x5820, 0x5820, 0x5820, 0x5820, 0x5821, 0x5821, 0x5822, 0x5822, - 0x5823, 0x5824, 0x5825, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, - 0x582a, 0x582b, 0x582c, 0x582e, 0x582f, 0x5830, 0x5831, 0x5833, - 0x5834, 0x5835, 0x5837, 0x5838, 0x583a, 0x583b, 0x583d, 0x583f, - 0x5840, 0x5840, 0x5840, 0x5840, 0x5841, 0x5841, 0x5842, 0x5842, - 0x5843, 0x5844, 0x5845, 0x5845, 0x5846, 0x5847, 0x5848, 0x5849, - 0x584a, 0x584b, 0x584c, 0x584e, 0x584f, 0x5850, 0x5851, 0x5853, - 0x5854, 0x5855, 0x5857, 0x5858, 0x585a, 0x585b, 0x585d, 0x585f, - 0x5840, 0x5840, 0x5840, 0x5840, 0x5841, 0x5841, 0x5842, 0x5842, - 0x5843, 0x5844, 0x5845, 0x5845, 0x5846, 0x5847, 0x5848, 0x5849, - 0x584a, 0x584b, 0x584c, 0x584e, 0x584f, 0x5850, 0x5851, 0x5853, - 0x5854, 0x5855, 0x5857, 0x5858, 0x585a, 0x585b, 0x585d, 0x585f, - 0x5860, 0x5860, 0x5860, 0x5860, 0x5861, 0x5861, 0x5862, 0x5862, - 0x5863, 0x5864, 0x5865, 0x5865, 0x5866, 0x5867, 0x5868, 0x5869, - 0x586a, 0x586b, 0x586c, 0x586e, 0x586f, 0x5870, 0x5871, 0x5873, - 0x5874, 0x5875, 0x5877, 0x5878, 0x587a, 0x587b, 0x587d, 0x587f, - 0x5860, 0x5860, 0x5860, 0x5860, 0x5861, 0x5861, 0x5862, 0x5862, - 0x5863, 0x5864, 0x5865, 0x5865, 0x5866, 0x5867, 0x5868, 0x5869, - 0x586a, 0x586b, 0x586c, 0x586e, 0x586f, 0x5870, 0x5871, 0x5873, - 0x5874, 0x5875, 0x5877, 0x5878, 0x587a, 0x587b, 0x587d, 0x587f, - 0x5880, 0x5880, 0x5880, 0x5880, 0x5881, 0x5881, 0x5882, 0x5882, - 0x5883, 0x5884, 0x5885, 0x5885, 0x5886, 0x5887, 0x5888, 0x5889, - 0x588a, 0x588b, 0x588c, 0x588e, 0x588f, 0x5890, 0x5891, 0x5893, - 0x5894, 0x5895, 0x5897, 0x5898, 0x589a, 0x589b, 0x589d, 0x589f, - 0x58a0, 0x58a0, 0x58a0, 0x58a0, 0x58a1, 0x58a1, 0x58a2, 0x58a2, - 0x58a3, 0x58a4, 0x58a5, 0x58a5, 0x58a6, 0x58a7, 0x58a8, 0x58a9, - 0x58aa, 0x58ab, 0x58ac, 0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b3, - 0x58b4, 0x58b5, 0x58b7, 0x58b8, 0x58ba, 0x58bb, 0x58bd, 0x58bf, - 0x58a0, 0x58a0, 0x58a0, 0x58a0, 0x58a1, 0x58a1, 0x58a2, 0x58a2, - 0x58a3, 0x58a4, 0x58a5, 0x58a5, 0x58a6, 0x58a7, 0x58a8, 0x58a9, - 0x58aa, 0x58ab, 0x58ac, 0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b3, - 0x58b4, 0x58b5, 0x58b7, 0x58b8, 0x58ba, 0x58bb, 0x58bd, 0x58bf, - 0x58c0, 0x58c0, 0x58c0, 0x58c0, 0x58c1, 0x58c1, 0x58c2, 0x58c2, - 0x58c3, 0x58c4, 0x58c5, 0x58c5, 0x58c6, 0x58c7, 0x58c8, 0x58c9, - 0x58ca, 0x58cb, 0x58cc, 0x58ce, 0x58cf, 0x58d0, 0x58d1, 0x58d3, - 0x58d4, 0x58d5, 0x58d7, 0x58d8, 0x58da, 0x58db, 0x58dd, 0x58df, - 0x58e0, 0x58e0, 0x58e0, 0x58e0, 0x58e1, 0x58e1, 0x58e2, 0x58e2, - 0x58e3, 0x58e4, 0x58e5, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, - 0x58ea, 0x58eb, 0x58ec, 0x58ee, 0x58ef, 0x58f0, 0x58f1, 0x58f3, - 0x58f4, 0x58f5, 0x58f7, 0x58f8, 0x58fa, 0x58fb, 0x58fd, 0x58ff, - 0x58e0, 0x58e0, 0x58e0, 0x58e0, 0x58e1, 0x58e1, 0x58e2, 0x58e2, - 0x58e3, 0x58e4, 0x58e5, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, - 0x58ea, 0x58eb, 0x58ec, 0x58ee, 0x58ef, 0x58f0, 0x58f1, 0x58f3, - 0x58f4, 0x58f5, 0x58f7, 0x58f8, 0x58fa, 0x58fb, 0x58fd, 0x58ff, - 0x5900, 0x5900, 0x5900, 0x5900, 0x5901, 0x5901, 0x5902, 0x5902, - 0x5903, 0x5904, 0x5905, 0x5905, 0x5906, 0x5907, 0x5908, 0x5909, - 0x590a, 0x590b, 0x590c, 0x590e, 0x590f, 0x5910, 0x5911, 0x5913, - 0x5914, 0x5915, 0x5917, 0x5918, 0x591a, 0x591b, 0x591d, 0x591f, - 0x5920, 0x5920, 0x5920, 0x5920, 0x5921, 0x5921, 0x5922, 0x5922, - 0x5923, 0x5924, 0x5925, 0x5925, 0x5926, 0x5927, 0x5928, 0x5929, - 0x592a, 0x592b, 0x592c, 0x592e, 0x592f, 0x5930, 0x5931, 0x5933, - 0x5934, 0x5935, 0x5937, 0x5938, 0x593a, 0x593b, 0x593d, 0x593f, - 0x5940, 0x5940, 0x5940, 0x5940, 0x5941, 0x5941, 0x5942, 0x5942, - 0x5943, 0x5944, 0x5945, 0x5945, 0x5946, 0x5947, 0x5948, 0x5949, - 0x594a, 0x594b, 0x594c, 0x594e, 0x594f, 0x5950, 0x5951, 0x5953, - 0x5954, 0x5955, 0x5957, 0x5958, 0x595a, 0x595b, 0x595d, 0x595f, - 0x5940, 0x5940, 0x5940, 0x5940, 0x5941, 0x5941, 0x5942, 0x5942, - 0x5943, 0x5944, 0x5945, 0x5945, 0x5946, 0x5947, 0x5948, 0x5949, - 0x594a, 0x594b, 0x594c, 0x594e, 0x594f, 0x5950, 0x5951, 0x5953, - 0x5954, 0x5955, 0x5957, 0x5958, 0x595a, 0x595b, 0x595d, 0x595f, - 0x5960, 0x5960, 0x5960, 0x5960, 0x5961, 0x5961, 0x5962, 0x5962, - 0x5963, 0x5964, 0x5965, 0x5965, 0x5966, 0x5967, 0x5968, 0x5969, - 0x596a, 0x596b, 0x596c, 0x596e, 0x596f, 0x5970, 0x5971, 0x5973, - 0x5974, 0x5975, 0x5977, 0x5978, 0x597a, 0x597b, 0x597d, 0x597f, - 0x5980, 0x5980, 0x5980, 0x5980, 0x5981, 0x5981, 0x5982, 0x5982, - 0x5983, 0x5984, 0x5985, 0x5985, 0x5986, 0x5987, 0x5988, 0x5989, - 0x598a, 0x598b, 0x598c, 0x598e, 0x598f, 0x5990, 0x5991, 0x5993, - 0x5994, 0x5995, 0x5997, 0x5998, 0x599a, 0x599b, 0x599d, 0x599f, - 0x59a0, 0x59a0, 0x59a0, 0x59a0, 0x59a1, 0x59a1, 0x59a2, 0x59a2, - 0x59a3, 0x59a4, 0x59a5, 0x59a5, 0x59a6, 0x59a7, 0x59a8, 0x59a9, - 0x59aa, 0x59ab, 0x59ac, 0x59ae, 0x59af, 0x59b0, 0x59b1, 0x59b3, - 0x59b4, 0x59b5, 0x59b7, 0x59b8, 0x59ba, 0x59bb, 0x59bd, 0x59bf, - 0x59c0, 0x59c0, 0x59c0, 0x59c0, 0x59c1, 0x59c1, 0x59c2, 0x59c2, - 0x59c3, 0x59c4, 0x59c5, 0x59c5, 0x59c6, 0x59c7, 0x59c8, 0x59c9, - 0x59ca, 0x59cb, 0x59cc, 0x59ce, 0x59cf, 0x59d0, 0x59d1, 0x59d3, - 0x59d4, 0x59d5, 0x59d7, 0x59d8, 0x59da, 0x59db, 0x59dd, 0x59df, - 0x59e0, 0x59e0, 0x59e0, 0x59e0, 0x59e1, 0x59e1, 0x59e2, 0x59e2, - 0x59e3, 0x59e4, 0x59e5, 0x59e5, 0x59e6, 0x59e7, 0x59e8, 0x59e9, - 0x59ea, 0x59eb, 0x59ec, 0x59ee, 0x59ef, 0x59f0, 0x59f1, 0x59f3, - 0x59f4, 0x59f5, 0x59f7, 0x59f8, 0x59fa, 0x59fb, 0x59fd, 0x59ff, - 0x5a00, 0x5a00, 0x5a00, 0x5a00, 0x5a01, 0x5a01, 0x5a02, 0x5a02, - 0x5a03, 0x5a04, 0x5a05, 0x5a05, 0x5a06, 0x5a07, 0x5a08, 0x5a09, - 0x5a0a, 0x5a0b, 0x5a0c, 0x5a0e, 0x5a0f, 0x5a10, 0x5a11, 0x5a13, - 0x5a14, 0x5a15, 0x5a17, 0x5a18, 0x5a1a, 0x5a1b, 0x5a1d, 0x5a1f, - 0x5a20, 0x5a20, 0x5a20, 0x5a20, 0x5a21, 0x5a21, 0x5a22, 0x5a22, - 0x5a23, 0x5a24, 0x5a25, 0x5a25, 0x5a26, 0x5a27, 0x5a28, 0x5a29, - 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2e, 0x5a2f, 0x5a30, 0x5a31, 0x5a33, - 0x5a34, 0x5a35, 0x5a37, 0x5a38, 0x5a3a, 0x5a3b, 0x5a3d, 0x5a3f, - 0x5a40, 0x5a40, 0x5a40, 0x5a40, 0x5a41, 0x5a41, 0x5a42, 0x5a42, - 0x5a43, 0x5a44, 0x5a45, 0x5a45, 0x5a46, 0x5a47, 0x5a48, 0x5a49, - 0x5a4a, 0x5a4b, 0x5a4c, 0x5a4e, 0x5a4f, 0x5a50, 0x5a51, 0x5a53, - 0x5a54, 0x5a55, 0x5a57, 0x5a58, 0x5a5a, 0x5a5b, 0x5a5d, 0x5a5f, - 0x5a60, 0x5a60, 0x5a60, 0x5a60, 0x5a61, 0x5a61, 0x5a62, 0x5a62, - 0x5a63, 0x5a64, 0x5a65, 0x5a65, 0x5a66, 0x5a67, 0x5a68, 0x5a69, - 0x5a6a, 0x5a6b, 0x5a6c, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a73, - 0x5a74, 0x5a75, 0x5a77, 0x5a78, 0x5a7a, 0x5a7b, 0x5a7d, 0x5a7f, - 0x5a80, 0x5a80, 0x5a80, 0x5a80, 0x5a81, 0x5a81, 0x5a82, 0x5a82, - 0x5a83, 0x5a84, 0x5a85, 0x5a85, 0x5a86, 0x5a87, 0x5a88, 0x5a89, - 0x5a8a, 0x5a8b, 0x5a8c, 0x5a8e, 0x5a8f, 0x5a90, 0x5a91, 0x5a93, - 0x5a94, 0x5a95, 0x5a97, 0x5a98, 0x5a9a, 0x5a9b, 0x5a9d, 0x5a9f, - 0x5aa0, 0x5aa0, 0x5aa0, 0x5aa0, 0x5aa1, 0x5aa1, 0x5aa2, 0x5aa2, - 0x5aa3, 0x5aa4, 0x5aa5, 0x5aa5, 0x5aa6, 0x5aa7, 0x5aa8, 0x5aa9, - 0x5aaa, 0x5aab, 0x5aac, 0x5aae, 0x5aaf, 0x5ab0, 0x5ab1, 0x5ab3, - 0x5ab4, 0x5ab5, 0x5ab7, 0x5ab8, 0x5aba, 0x5abb, 0x5abd, 0x5abf, - 0x5ac0, 0x5ac0, 0x5ac0, 0x5ac0, 0x5ac1, 0x5ac1, 0x5ac2, 0x5ac2, - 0x5ac3, 0x5ac4, 0x5ac5, 0x5ac5, 0x5ac6, 0x5ac7, 0x5ac8, 0x5ac9, - 0x5aca, 0x5acb, 0x5acc, 0x5ace, 0x5acf, 0x5ad0, 0x5ad1, 0x5ad3, - 0x5ad4, 0x5ad5, 0x5ad7, 0x5ad8, 0x5ada, 0x5adb, 0x5add, 0x5adf, - 0x5ae0, 0x5ae0, 0x5ae0, 0x5ae0, 0x5ae1, 0x5ae1, 0x5ae2, 0x5ae2, - 0x5ae3, 0x5ae4, 0x5ae5, 0x5ae5, 0x5ae6, 0x5ae7, 0x5ae8, 0x5ae9, - 0x5aea, 0x5aeb, 0x5aec, 0x5aee, 0x5aef, 0x5af0, 0x5af1, 0x5af3, - 0x5af4, 0x5af5, 0x5af7, 0x5af8, 0x5afa, 0x5afb, 0x5afd, 0x5aff, - 0x5b00, 0x5b00, 0x5b00, 0x5b00, 0x5b01, 0x5b01, 0x5b02, 0x5b02, - 0x5b03, 0x5b04, 0x5b05, 0x5b05, 0x5b06, 0x5b07, 0x5b08, 0x5b09, - 0x5b0a, 0x5b0b, 0x5b0c, 0x5b0e, 0x5b0f, 0x5b10, 0x5b11, 0x5b13, - 0x5b14, 0x5b15, 0x5b17, 0x5b18, 0x5b1a, 0x5b1b, 0x5b1d, 0x5b1f, - 0x5b20, 0x5b20, 0x5b20, 0x5b20, 0x5b21, 0x5b21, 0x5b22, 0x5b22, - 0x5b23, 0x5b24, 0x5b25, 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, - 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b33, - 0x5b34, 0x5b35, 0x5b37, 0x5b38, 0x5b3a, 0x5b3b, 0x5b3d, 0x5b3f, - 0x5b40, 0x5b40, 0x5b40, 0x5b40, 0x5b41, 0x5b41, 0x5b42, 0x5b42, - 0x5b43, 0x5b44, 0x5b45, 0x5b45, 0x5b46, 0x5b47, 0x5b48, 0x5b49, - 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4e, 0x5b4f, 0x5b50, 0x5b51, 0x5b53, - 0x5b54, 0x5b55, 0x5b57, 0x5b58, 0x5b5a, 0x5b5b, 0x5b5d, 0x5b5f, - 0x5b80, 0x5b80, 0x5b80, 0x5b80, 0x5b81, 0x5b81, 0x5b82, 0x5b82, - 0x5b83, 0x5b84, 0x5b85, 0x5b85, 0x5b86, 0x5b87, 0x5b88, 0x5b89, - 0x5b8a, 0x5b8b, 0x5b8c, 0x5b8e, 0x5b8f, 0x5b90, 0x5b91, 0x5b93, - 0x5b94, 0x5b95, 0x5b97, 0x5b98, 0x5b9a, 0x5b9b, 0x5b9d, 0x5b9f, - 0x5ba0, 0x5ba0, 0x5ba0, 0x5ba0, 0x5ba1, 0x5ba1, 0x5ba2, 0x5ba2, - 0x5ba3, 0x5ba4, 0x5ba5, 0x5ba5, 0x5ba6, 0x5ba7, 0x5ba8, 0x5ba9, - 0x5baa, 0x5bab, 0x5bac, 0x5bae, 0x5baf, 0x5bb0, 0x5bb1, 0x5bb3, - 0x5bb4, 0x5bb5, 0x5bb7, 0x5bb8, 0x5bba, 0x5bbb, 0x5bbd, 0x5bbf, - 0x5bc0, 0x5bc0, 0x5bc0, 0x5bc0, 0x5bc1, 0x5bc1, 0x5bc2, 0x5bc2, - 0x5bc3, 0x5bc4, 0x5bc5, 0x5bc5, 0x5bc6, 0x5bc7, 0x5bc8, 0x5bc9, - 0x5bca, 0x5bcb, 0x5bcc, 0x5bce, 0x5bcf, 0x5bd0, 0x5bd1, 0x5bd3, - 0x5bd4, 0x5bd5, 0x5bd7, 0x5bd8, 0x5bda, 0x5bdb, 0x5bdd, 0x5bdf, - 0x5be0, 0x5be0, 0x5be0, 0x5be0, 0x5be1, 0x5be1, 0x5be2, 0x5be2, - 0x5be3, 0x5be4, 0x5be5, 0x5be5, 0x5be6, 0x5be7, 0x5be8, 0x5be9, - 0x5bea, 0x5beb, 0x5bec, 0x5bee, 0x5bef, 0x5bf0, 0x5bf1, 0x5bf3, - 0x5bf4, 0x5bf5, 0x5bf7, 0x5bf8, 0x5bfa, 0x5bfb, 0x5bfd, 0x5bff, - 0x5c00, 0x5c00, 0x5c00, 0x5c00, 0x5c01, 0x5c01, 0x5c02, 0x5c02, - 0x5c03, 0x5c04, 0x5c05, 0x5c05, 0x5c06, 0x5c07, 0x5c08, 0x5c09, - 0x5c0a, 0x5c0b, 0x5c0c, 0x5c0e, 0x5c0f, 0x5c10, 0x5c11, 0x5c13, - 0x5c14, 0x5c15, 0x5c17, 0x5c18, 0x5c1a, 0x5c1b, 0x5c1d, 0x5c1f, - 0x5c40, 0x5c40, 0x5c40, 0x5c40, 0x5c41, 0x5c41, 0x5c42, 0x5c42, - 0x5c43, 0x5c44, 0x5c45, 0x5c45, 0x5c46, 0x5c47, 0x5c48, 0x5c49, - 0x5c4a, 0x5c4b, 0x5c4c, 0x5c4e, 0x5c4f, 0x5c50, 0x5c51, 0x5c53, - 0x5c54, 0x5c55, 0x5c57, 0x5c58, 0x5c5a, 0x5c5b, 0x5c5d, 0x5c5f, - 0x5c60, 0x5c60, 0x5c60, 0x5c60, 0x5c61, 0x5c61, 0x5c62, 0x5c62, - 0x5c63, 0x5c64, 0x5c65, 0x5c65, 0x5c66, 0x5c67, 0x5c68, 0x5c69, - 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6e, 0x5c6f, 0x5c70, 0x5c71, 0x5c73, - 0x5c74, 0x5c75, 0x5c77, 0x5c78, 0x5c7a, 0x5c7b, 0x5c7d, 0x5c7f, - 0x5c80, 0x5c80, 0x5c80, 0x5c80, 0x5c81, 0x5c81, 0x5c82, 0x5c82, - 0x5c83, 0x5c84, 0x5c85, 0x5c85, 0x5c86, 0x5c87, 0x5c88, 0x5c89, - 0x5c8a, 0x5c8b, 0x5c8c, 0x5c8e, 0x5c8f, 0x5c90, 0x5c91, 0x5c93, - 0x5c94, 0x5c95, 0x5c97, 0x5c98, 0x5c9a, 0x5c9b, 0x5c9d, 0x5c9f, - 0x5cc0, 0x5cc0, 0x5cc0, 0x5cc0, 0x5cc1, 0x5cc1, 0x5cc2, 0x5cc2, - 0x5cc3, 0x5cc4, 0x5cc5, 0x5cc5, 0x5cc6, 0x5cc7, 0x5cc8, 0x5cc9, - 0x5cca, 0x5ccb, 0x5ccc, 0x5cce, 0x5ccf, 0x5cd0, 0x5cd1, 0x5cd3, - 0x5cd4, 0x5cd5, 0x5cd7, 0x5cd8, 0x5cda, 0x5cdb, 0x5cdd, 0x5cdf, - 0x5ce0, 0x5ce0, 0x5ce0, 0x5ce0, 0x5ce1, 0x5ce1, 0x5ce2, 0x5ce2, - 0x5ce3, 0x5ce4, 0x5ce5, 0x5ce5, 0x5ce6, 0x5ce7, 0x5ce8, 0x5ce9, - 0x5cea, 0x5ceb, 0x5cec, 0x5cee, 0x5cef, 0x5cf0, 0x5cf1, 0x5cf3, - 0x5cf4, 0x5cf5, 0x5cf7, 0x5cf8, 0x5cfa, 0x5cfb, 0x5cfd, 0x5cff, - 0x5d00, 0x5d00, 0x5d00, 0x5d00, 0x5d01, 0x5d01, 0x5d02, 0x5d02, - 0x5d03, 0x5d04, 0x5d05, 0x5d05, 0x5d06, 0x5d07, 0x5d08, 0x5d09, - 0x5d0a, 0x5d0b, 0x5d0c, 0x5d0e, 0x5d0f, 0x5d10, 0x5d11, 0x5d13, - 0x5d14, 0x5d15, 0x5d17, 0x5d18, 0x5d1a, 0x5d1b, 0x5d1d, 0x5d1f, - 0x5d40, 0x5d40, 0x5d40, 0x5d40, 0x5d41, 0x5d41, 0x5d42, 0x5d42, - 0x5d43, 0x5d44, 0x5d45, 0x5d45, 0x5d46, 0x5d47, 0x5d48, 0x5d49, - 0x5d4a, 0x5d4b, 0x5d4c, 0x5d4e, 0x5d4f, 0x5d50, 0x5d51, 0x5d53, - 0x5d54, 0x5d55, 0x5d57, 0x5d58, 0x5d5a, 0x5d5b, 0x5d5d, 0x5d5f, - 0x5d60, 0x5d60, 0x5d60, 0x5d60, 0x5d61, 0x5d61, 0x5d62, 0x5d62, - 0x5d63, 0x5d64, 0x5d65, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d69, - 0x5d6a, 0x5d6b, 0x5d6c, 0x5d6e, 0x5d6f, 0x5d70, 0x5d71, 0x5d73, - 0x5d74, 0x5d75, 0x5d77, 0x5d78, 0x5d7a, 0x5d7b, 0x5d7d, 0x5d7f, - 0x5d80, 0x5d80, 0x5d80, 0x5d80, 0x5d81, 0x5d81, 0x5d82, 0x5d82, - 0x5d83, 0x5d84, 0x5d85, 0x5d85, 0x5d86, 0x5d87, 0x5d88, 0x5d89, - 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8e, 0x5d8f, 0x5d90, 0x5d91, 0x5d93, - 0x5d94, 0x5d95, 0x5d97, 0x5d98, 0x5d9a, 0x5d9b, 0x5d9d, 0x5d9f, - 0x5dc0, 0x5dc0, 0x5dc0, 0x5dc0, 0x5dc1, 0x5dc1, 0x5dc2, 0x5dc2, - 0x5dc3, 0x5dc4, 0x5dc5, 0x5dc5, 0x5dc6, 0x5dc7, 0x5dc8, 0x5dc9, - 0x5dca, 0x5dcb, 0x5dcc, 0x5dce, 0x5dcf, 0x5dd0, 0x5dd1, 0x5dd3, - 0x5dd4, 0x5dd5, 0x5dd7, 0x5dd8, 0x5dda, 0x5ddb, 0x5ddd, 0x5ddf, - 0x5de0, 0x5de0, 0x5de0, 0x5de0, 0x5de1, 0x5de1, 0x5de2, 0x5de2, - 0x5de3, 0x5de4, 0x5de5, 0x5de5, 0x5de6, 0x5de7, 0x5de8, 0x5de9, - 0x5dea, 0x5deb, 0x5dec, 0x5dee, 0x5def, 0x5df0, 0x5df1, 0x5df3, - 0x5df4, 0x5df5, 0x5df7, 0x5df8, 0x5dfa, 0x5dfb, 0x5dfd, 0x5dff, - 0x5e20, 0x5e20, 0x5e20, 0x5e20, 0x5e21, 0x5e21, 0x5e22, 0x5e22, - 0x5e23, 0x5e24, 0x5e25, 0x5e25, 0x5e26, 0x5e27, 0x5e28, 0x5e29, - 0x5e2a, 0x5e2b, 0x5e2c, 0x5e2e, 0x5e2f, 0x5e30, 0x5e31, 0x5e33, - 0x5e34, 0x5e35, 0x5e37, 0x5e38, 0x5e3a, 0x5e3b, 0x5e3d, 0x5e3f, - 0x5e40, 0x5e40, 0x5e40, 0x5e40, 0x5e41, 0x5e41, 0x5e42, 0x5e42, - 0x5e43, 0x5e44, 0x5e45, 0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49, - 0x5e4a, 0x5e4b, 0x5e4c, 0x5e4e, 0x5e4f, 0x5e50, 0x5e51, 0x5e53, - 0x5e54, 0x5e55, 0x5e57, 0x5e58, 0x5e5a, 0x5e5b, 0x5e5d, 0x5e5f, - 0x5e80, 0x5e80, 0x5e80, 0x5e80, 0x5e81, 0x5e81, 0x5e82, 0x5e82, - 0x5e83, 0x5e84, 0x5e85, 0x5e85, 0x5e86, 0x5e87, 0x5e88, 0x5e89, - 0x5e8a, 0x5e8b, 0x5e8c, 0x5e8e, 0x5e8f, 0x5e90, 0x5e91, 0x5e93, - 0x5e94, 0x5e95, 0x5e97, 0x5e98, 0x5e9a, 0x5e9b, 0x5e9d, 0x5e9f, - 0x5ea0, 0x5ea0, 0x5ea0, 0x5ea0, 0x5ea1, 0x5ea1, 0x5ea2, 0x5ea2, - 0x5ea3, 0x5ea4, 0x5ea5, 0x5ea5, 0x5ea6, 0x5ea7, 0x5ea8, 0x5ea9, - 0x5eaa, 0x5eab, 0x5eac, 0x5eae, 0x5eaf, 0x5eb0, 0x5eb1, 0x5eb3, - 0x5eb4, 0x5eb5, 0x5eb7, 0x5eb8, 0x5eba, 0x5ebb, 0x5ebd, 0x5ebf, - 0x5ee0, 0x5ee0, 0x5ee0, 0x5ee0, 0x5ee1, 0x5ee1, 0x5ee2, 0x5ee2, - 0x5ee3, 0x5ee4, 0x5ee5, 0x5ee5, 0x5ee6, 0x5ee7, 0x5ee8, 0x5ee9, - 0x5eea, 0x5eeb, 0x5eec, 0x5eee, 0x5eef, 0x5ef0, 0x5ef1, 0x5ef3, - 0x5ef4, 0x5ef5, 0x5ef7, 0x5ef8, 0x5efa, 0x5efb, 0x5efd, 0x5eff, - 0x5f00, 0x5f00, 0x5f00, 0x5f00, 0x5f01, 0x5f01, 0x5f02, 0x5f02, - 0x5f03, 0x5f04, 0x5f05, 0x5f05, 0x5f06, 0x5f07, 0x5f08, 0x5f09, - 0x5f0a, 0x5f0b, 0x5f0c, 0x5f0e, 0x5f0f, 0x5f10, 0x5f11, 0x5f13, - 0x5f14, 0x5f15, 0x5f17, 0x5f18, 0x5f1a, 0x5f1b, 0x5f1d, 0x5f1f, - 0x5f40, 0x5f40, 0x5f40, 0x5f40, 0x5f41, 0x5f41, 0x5f42, 0x5f42, - 0x5f43, 0x5f44, 0x5f45, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, - 0x5f4a, 0x5f4b, 0x5f4c, 0x5f4e, 0x5f4f, 0x5f50, 0x5f51, 0x5f53, - 0x5f54, 0x5f55, 0x5f57, 0x5f58, 0x5f5a, 0x5f5b, 0x5f5d, 0x5f5f, - 0x5f60, 0x5f60, 0x5f60, 0x5f60, 0x5f61, 0x5f61, 0x5f62, 0x5f62, - 0x5f63, 0x5f64, 0x5f65, 0x5f65, 0x5f66, 0x5f67, 0x5f68, 0x5f69, - 0x5f6a, 0x5f6b, 0x5f6c, 0x5f6e, 0x5f6f, 0x5f70, 0x5f71, 0x5f73, - 0x5f74, 0x5f75, 0x5f77, 0x5f78, 0x5f7a, 0x5f7b, 0x5f7d, 0x5f7f, - 0x5fa0, 0x5fa0, 0x5fa0, 0x5fa0, 0x5fa1, 0x5fa1, 0x5fa2, 0x5fa2, - 0x5fa3, 0x5fa4, 0x5fa5, 0x5fa5, 0x5fa6, 0x5fa7, 0x5fa8, 0x5fa9, - 0x5faa, 0x5fab, 0x5fac, 0x5fae, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb3, - 0x5fb4, 0x5fb5, 0x5fb7, 0x5fb8, 0x5fba, 0x5fbb, 0x5fbd, 0x5fbf, - 0x5fe0, 0x5fe0, 0x5fe0, 0x5fe0, 0x5fe1, 0x5fe1, 0x5fe2, 0x5fe2, - 0x5fe3, 0x5fe4, 0x5fe5, 0x5fe5, 0x5fe6, 0x5fe7, 0x5fe8, 0x5fe9, - 0x5fea, 0x5feb, 0x5fec, 0x5fee, 0x5fef, 0x5ff0, 0x5ff1, 0x5ff3, - 0x5ff4, 0x5ff5, 0x5ff7, 0x5ff8, 0x5ffa, 0x5ffb, 0x5ffd, 0x5fff, - 0x6000, 0x6000, 0x6000, 0x6000, 0x6001, 0x6001, 0x6002, 0x6002, - 0x6003, 0x6004, 0x6005, 0x6005, 0x6006, 0x6007, 0x6008, 0x6009, - 0x600a, 0x600b, 0x600c, 0x600e, 0x600f, 0x6010, 0x6011, 0x6013, - 0x6014, 0x6015, 0x6017, 0x6018, 0x601a, 0x601b, 0x601d, 0x601f, - 0x6000, 0x6000, 0x6000, 0x6000, 0x6001, 0x6001, 0x6002, 0x6002, - 0x6003, 0x6004, 0x6005, 0x6005, 0x6006, 0x6007, 0x6008, 0x6009, - 0x600a, 0x600b, 0x600c, 0x600e, 0x600f, 0x6010, 0x6011, 0x6013, - 0x6014, 0x6015, 0x6017, 0x6018, 0x601a, 0x601b, 0x601d, 0x601f, - 0x6000, 0x6000, 0x6000, 0x6000, 0x6001, 0x6001, 0x6002, 0x6002, - 0x6003, 0x6004, 0x6005, 0x6005, 0x6006, 0x6007, 0x6008, 0x6009, - 0x600a, 0x600b, 0x600c, 0x600e, 0x600f, 0x6010, 0x6011, 0x6013, - 0x6014, 0x6015, 0x6017, 0x6018, 0x601a, 0x601b, 0x601d, 0x601f, - 0x6000, 0x6000, 0x6000, 0x6000, 0x6001, 0x6001, 0x6002, 0x6002, - 0x6003, 0x6004, 0x6005, 0x6005, 0x6006, 0x6007, 0x6008, 0x6009, - 0x600a, 0x600b, 0x600c, 0x600e, 0x600f, 0x6010, 0x6011, 0x6013, - 0x6014, 0x6015, 0x6017, 0x6018, 0x601a, 0x601b, 0x601d, 0x601f, - 0x6000, 0x6000, 0x6000, 0x6000, 0x6001, 0x6001, 0x6002, 0x6002, - 0x6003, 0x6004, 0x6005, 0x6005, 0x6006, 0x6007, 0x6008, 0x6009, - 0x600a, 0x600b, 0x600c, 0x600e, 0x600f, 0x6010, 0x6011, 0x6013, - 0x6014, 0x6015, 0x6017, 0x6018, 0x601a, 0x601b, 0x601d, 0x601f, - 0x6020, 0x6020, 0x6020, 0x6020, 0x6021, 0x6021, 0x6022, 0x6022, - 0x6023, 0x6024, 0x6025, 0x6025, 0x6026, 0x6027, 0x6028, 0x6029, - 0x602a, 0x602b, 0x602c, 0x602e, 0x602f, 0x6030, 0x6031, 0x6033, - 0x6034, 0x6035, 0x6037, 0x6038, 0x603a, 0x603b, 0x603d, 0x603f, - 0x6020, 0x6020, 0x6020, 0x6020, 0x6021, 0x6021, 0x6022, 0x6022, - 0x6023, 0x6024, 0x6025, 0x6025, 0x6026, 0x6027, 0x6028, 0x6029, - 0x602a, 0x602b, 0x602c, 0x602e, 0x602f, 0x6030, 0x6031, 0x6033, - 0x6034, 0x6035, 0x6037, 0x6038, 0x603a, 0x603b, 0x603d, 0x603f, - 0x6020, 0x6020, 0x6020, 0x6020, 0x6021, 0x6021, 0x6022, 0x6022, - 0x6023, 0x6024, 0x6025, 0x6025, 0x6026, 0x6027, 0x6028, 0x6029, - 0x602a, 0x602b, 0x602c, 0x602e, 0x602f, 0x6030, 0x6031, 0x6033, - 0x6034, 0x6035, 0x6037, 0x6038, 0x603a, 0x603b, 0x603d, 0x603f, - 0x6040, 0x6040, 0x6040, 0x6040, 0x6041, 0x6041, 0x6042, 0x6042, - 0x6043, 0x6044, 0x6045, 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, - 0x604a, 0x604b, 0x604c, 0x604e, 0x604f, 0x6050, 0x6051, 0x6053, - 0x6054, 0x6055, 0x6057, 0x6058, 0x605a, 0x605b, 0x605d, 0x605f, - 0x6040, 0x6040, 0x6040, 0x6040, 0x6041, 0x6041, 0x6042, 0x6042, - 0x6043, 0x6044, 0x6045, 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, - 0x604a, 0x604b, 0x604c, 0x604e, 0x604f, 0x6050, 0x6051, 0x6053, - 0x6054, 0x6055, 0x6057, 0x6058, 0x605a, 0x605b, 0x605d, 0x605f, - 0x6060, 0x6060, 0x6060, 0x6060, 0x6061, 0x6061, 0x6062, 0x6062, - 0x6063, 0x6064, 0x6065, 0x6065, 0x6066, 0x6067, 0x6068, 0x6069, - 0x606a, 0x606b, 0x606c, 0x606e, 0x606f, 0x6070, 0x6071, 0x6073, - 0x6074, 0x6075, 0x6077, 0x6078, 0x607a, 0x607b, 0x607d, 0x607f, - 0x6060, 0x6060, 0x6060, 0x6060, 0x6061, 0x6061, 0x6062, 0x6062, - 0x6063, 0x6064, 0x6065, 0x6065, 0x6066, 0x6067, 0x6068, 0x6069, - 0x606a, 0x606b, 0x606c, 0x606e, 0x606f, 0x6070, 0x6071, 0x6073, - 0x6074, 0x6075, 0x6077, 0x6078, 0x607a, 0x607b, 0x607d, 0x607f, - 0x6080, 0x6080, 0x6080, 0x6080, 0x6081, 0x6081, 0x6082, 0x6082, - 0x6083, 0x6084, 0x6085, 0x6085, 0x6086, 0x6087, 0x6088, 0x6089, - 0x608a, 0x608b, 0x608c, 0x608e, 0x608f, 0x6090, 0x6091, 0x6093, - 0x6094, 0x6095, 0x6097, 0x6098, 0x609a, 0x609b, 0x609d, 0x609f, - 0x60a0, 0x60a0, 0x60a0, 0x60a0, 0x60a1, 0x60a1, 0x60a2, 0x60a2, - 0x60a3, 0x60a4, 0x60a5, 0x60a5, 0x60a6, 0x60a7, 0x60a8, 0x60a9, - 0x60aa, 0x60ab, 0x60ac, 0x60ae, 0x60af, 0x60b0, 0x60b1, 0x60b3, - 0x60b4, 0x60b5, 0x60b7, 0x60b8, 0x60ba, 0x60bb, 0x60bd, 0x60bf, - 0x60a0, 0x60a0, 0x60a0, 0x60a0, 0x60a1, 0x60a1, 0x60a2, 0x60a2, - 0x60a3, 0x60a4, 0x60a5, 0x60a5, 0x60a6, 0x60a7, 0x60a8, 0x60a9, - 0x60aa, 0x60ab, 0x60ac, 0x60ae, 0x60af, 0x60b0, 0x60b1, 0x60b3, - 0x60b4, 0x60b5, 0x60b7, 0x60b8, 0x60ba, 0x60bb, 0x60bd, 0x60bf, - 0x60c0, 0x60c0, 0x60c0, 0x60c0, 0x60c1, 0x60c1, 0x60c2, 0x60c2, - 0x60c3, 0x60c4, 0x60c5, 0x60c5, 0x60c6, 0x60c7, 0x60c8, 0x60c9, - 0x60ca, 0x60cb, 0x60cc, 0x60ce, 0x60cf, 0x60d0, 0x60d1, 0x60d3, - 0x60d4, 0x60d5, 0x60d7, 0x60d8, 0x60da, 0x60db, 0x60dd, 0x60df, - 0x60e0, 0x60e0, 0x60e0, 0x60e0, 0x60e1, 0x60e1, 0x60e2, 0x60e2, - 0x60e3, 0x60e4, 0x60e5, 0x60e5, 0x60e6, 0x60e7, 0x60e8, 0x60e9, - 0x60ea, 0x60eb, 0x60ec, 0x60ee, 0x60ef, 0x60f0, 0x60f1, 0x60f3, - 0x60f4, 0x60f5, 0x60f7, 0x60f8, 0x60fa, 0x60fb, 0x60fd, 0x60ff, - 0x60e0, 0x60e0, 0x60e0, 0x60e0, 0x60e1, 0x60e1, 0x60e2, 0x60e2, - 0x60e3, 0x60e4, 0x60e5, 0x60e5, 0x60e6, 0x60e7, 0x60e8, 0x60e9, - 0x60ea, 0x60eb, 0x60ec, 0x60ee, 0x60ef, 0x60f0, 0x60f1, 0x60f3, - 0x60f4, 0x60f5, 0x60f7, 0x60f8, 0x60fa, 0x60fb, 0x60fd, 0x60ff, - 0x6100, 0x6100, 0x6100, 0x6100, 0x6101, 0x6101, 0x6102, 0x6102, - 0x6103, 0x6104, 0x6105, 0x6105, 0x6106, 0x6107, 0x6108, 0x6109, - 0x610a, 0x610b, 0x610c, 0x610e, 0x610f, 0x6110, 0x6111, 0x6113, - 0x6114, 0x6115, 0x6117, 0x6118, 0x611a, 0x611b, 0x611d, 0x611f, - 0x6120, 0x6120, 0x6120, 0x6120, 0x6121, 0x6121, 0x6122, 0x6122, - 0x6123, 0x6124, 0x6125, 0x6125, 0x6126, 0x6127, 0x6128, 0x6129, - 0x612a, 0x612b, 0x612c, 0x612e, 0x612f, 0x6130, 0x6131, 0x6133, - 0x6134, 0x6135, 0x6137, 0x6138, 0x613a, 0x613b, 0x613d, 0x613f, - 0x6140, 0x6140, 0x6140, 0x6140, 0x6141, 0x6141, 0x6142, 0x6142, - 0x6143, 0x6144, 0x6145, 0x6145, 0x6146, 0x6147, 0x6148, 0x6149, - 0x614a, 0x614b, 0x614c, 0x614e, 0x614f, 0x6150, 0x6151, 0x6153, - 0x6154, 0x6155, 0x6157, 0x6158, 0x615a, 0x615b, 0x615d, 0x615f, - 0x6140, 0x6140, 0x6140, 0x6140, 0x6141, 0x6141, 0x6142, 0x6142, - 0x6143, 0x6144, 0x6145, 0x6145, 0x6146, 0x6147, 0x6148, 0x6149, - 0x614a, 0x614b, 0x614c, 0x614e, 0x614f, 0x6150, 0x6151, 0x6153, - 0x6154, 0x6155, 0x6157, 0x6158, 0x615a, 0x615b, 0x615d, 0x615f, - 0x6160, 0x6160, 0x6160, 0x6160, 0x6161, 0x6161, 0x6162, 0x6162, - 0x6163, 0x6164, 0x6165, 0x6165, 0x6166, 0x6167, 0x6168, 0x6169, - 0x616a, 0x616b, 0x616c, 0x616e, 0x616f, 0x6170, 0x6171, 0x6173, - 0x6174, 0x6175, 0x6177, 0x6178, 0x617a, 0x617b, 0x617d, 0x617f, - 0x6180, 0x6180, 0x6180, 0x6180, 0x6181, 0x6181, 0x6182, 0x6182, - 0x6183, 0x6184, 0x6185, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, - 0x618a, 0x618b, 0x618c, 0x618e, 0x618f, 0x6190, 0x6191, 0x6193, - 0x6194, 0x6195, 0x6197, 0x6198, 0x619a, 0x619b, 0x619d, 0x619f, - 0x61a0, 0x61a0, 0x61a0, 0x61a0, 0x61a1, 0x61a1, 0x61a2, 0x61a2, - 0x61a3, 0x61a4, 0x61a5, 0x61a5, 0x61a6, 0x61a7, 0x61a8, 0x61a9, - 0x61aa, 0x61ab, 0x61ac, 0x61ae, 0x61af, 0x61b0, 0x61b1, 0x61b3, - 0x61b4, 0x61b5, 0x61b7, 0x61b8, 0x61ba, 0x61bb, 0x61bd, 0x61bf, - 0x61c0, 0x61c0, 0x61c0, 0x61c0, 0x61c1, 0x61c1, 0x61c2, 0x61c2, - 0x61c3, 0x61c4, 0x61c5, 0x61c5, 0x61c6, 0x61c7, 0x61c8, 0x61c9, - 0x61ca, 0x61cb, 0x61cc, 0x61ce, 0x61cf, 0x61d0, 0x61d1, 0x61d3, - 0x61d4, 0x61d5, 0x61d7, 0x61d8, 0x61da, 0x61db, 0x61dd, 0x61df, - 0x61e0, 0x61e0, 0x61e0, 0x61e0, 0x61e1, 0x61e1, 0x61e2, 0x61e2, - 0x61e3, 0x61e4, 0x61e5, 0x61e5, 0x61e6, 0x61e7, 0x61e8, 0x61e9, - 0x61ea, 0x61eb, 0x61ec, 0x61ee, 0x61ef, 0x61f0, 0x61f1, 0x61f3, - 0x61f4, 0x61f5, 0x61f7, 0x61f8, 0x61fa, 0x61fb, 0x61fd, 0x61ff, - 0x6200, 0x6200, 0x6200, 0x6200, 0x6201, 0x6201, 0x6202, 0x6202, - 0x6203, 0x6204, 0x6205, 0x6205, 0x6206, 0x6207, 0x6208, 0x6209, - 0x620a, 0x620b, 0x620c, 0x620e, 0x620f, 0x6210, 0x6211, 0x6213, - 0x6214, 0x6215, 0x6217, 0x6218, 0x621a, 0x621b, 0x621d, 0x621f, - 0x6220, 0x6220, 0x6220, 0x6220, 0x6221, 0x6221, 0x6222, 0x6222, - 0x6223, 0x6224, 0x6225, 0x6225, 0x6226, 0x6227, 0x6228, 0x6229, - 0x622a, 0x622b, 0x622c, 0x622e, 0x622f, 0x6230, 0x6231, 0x6233, - 0x6234, 0x6235, 0x6237, 0x6238, 0x623a, 0x623b, 0x623d, 0x623f, - 0x6240, 0x6240, 0x6240, 0x6240, 0x6241, 0x6241, 0x6242, 0x6242, - 0x6243, 0x6244, 0x6245, 0x6245, 0x6246, 0x6247, 0x6248, 0x6249, - 0x624a, 0x624b, 0x624c, 0x624e, 0x624f, 0x6250, 0x6251, 0x6253, - 0x6254, 0x6255, 0x6257, 0x6258, 0x625a, 0x625b, 0x625d, 0x625f, - 0x6260, 0x6260, 0x6260, 0x6260, 0x6261, 0x6261, 0x6262, 0x6262, - 0x6263, 0x6264, 0x6265, 0x6265, 0x6266, 0x6267, 0x6268, 0x6269, - 0x626a, 0x626b, 0x626c, 0x626e, 0x626f, 0x6270, 0x6271, 0x6273, - 0x6274, 0x6275, 0x6277, 0x6278, 0x627a, 0x627b, 0x627d, 0x627f, - 0x6280, 0x6280, 0x6280, 0x6280, 0x6281, 0x6281, 0x6282, 0x6282, - 0x6283, 0x6284, 0x6285, 0x6285, 0x6286, 0x6287, 0x6288, 0x6289, - 0x628a, 0x628b, 0x628c, 0x628e, 0x628f, 0x6290, 0x6291, 0x6293, - 0x6294, 0x6295, 0x6297, 0x6298, 0x629a, 0x629b, 0x629d, 0x629f, - 0x62a0, 0x62a0, 0x62a0, 0x62a0, 0x62a1, 0x62a1, 0x62a2, 0x62a2, - 0x62a3, 0x62a4, 0x62a5, 0x62a5, 0x62a6, 0x62a7, 0x62a8, 0x62a9, - 0x62aa, 0x62ab, 0x62ac, 0x62ae, 0x62af, 0x62b0, 0x62b1, 0x62b3, - 0x62b4, 0x62b5, 0x62b7, 0x62b8, 0x62ba, 0x62bb, 0x62bd, 0x62bf, - 0x62c0, 0x62c0, 0x62c0, 0x62c0, 0x62c1, 0x62c1, 0x62c2, 0x62c2, - 0x62c3, 0x62c4, 0x62c5, 0x62c5, 0x62c6, 0x62c7, 0x62c8, 0x62c9, - 0x62ca, 0x62cb, 0x62cc, 0x62ce, 0x62cf, 0x62d0, 0x62d1, 0x62d3, - 0x62d4, 0x62d5, 0x62d7, 0x62d8, 0x62da, 0x62db, 0x62dd, 0x62df, - 0x62e0, 0x62e0, 0x62e0, 0x62e0, 0x62e1, 0x62e1, 0x62e2, 0x62e2, - 0x62e3, 0x62e4, 0x62e5, 0x62e5, 0x62e6, 0x62e7, 0x62e8, 0x62e9, - 0x62ea, 0x62eb, 0x62ec, 0x62ee, 0x62ef, 0x62f0, 0x62f1, 0x62f3, - 0x62f4, 0x62f5, 0x62f7, 0x62f8, 0x62fa, 0x62fb, 0x62fd, 0x62ff, - 0x6300, 0x6300, 0x6300, 0x6300, 0x6301, 0x6301, 0x6302, 0x6302, - 0x6303, 0x6304, 0x6305, 0x6305, 0x6306, 0x6307, 0x6308, 0x6309, - 0x630a, 0x630b, 0x630c, 0x630e, 0x630f, 0x6310, 0x6311, 0x6313, - 0x6314, 0x6315, 0x6317, 0x6318, 0x631a, 0x631b, 0x631d, 0x631f, - 0x6320, 0x6320, 0x6320, 0x6320, 0x6321, 0x6321, 0x6322, 0x6322, - 0x6323, 0x6324, 0x6325, 0x6325, 0x6326, 0x6327, 0x6328, 0x6329, - 0x632a, 0x632b, 0x632c, 0x632e, 0x632f, 0x6330, 0x6331, 0x6333, - 0x6334, 0x6335, 0x6337, 0x6338, 0x633a, 0x633b, 0x633d, 0x633f, - 0x6340, 0x6340, 0x6340, 0x6340, 0x6341, 0x6341, 0x6342, 0x6342, - 0x6343, 0x6344, 0x6345, 0x6345, 0x6346, 0x6347, 0x6348, 0x6349, - 0x634a, 0x634b, 0x634c, 0x634e, 0x634f, 0x6350, 0x6351, 0x6353, - 0x6354, 0x6355, 0x6357, 0x6358, 0x635a, 0x635b, 0x635d, 0x635f, - 0x6380, 0x6380, 0x6380, 0x6380, 0x6381, 0x6381, 0x6382, 0x6382, - 0x6383, 0x6384, 0x6385, 0x6385, 0x6386, 0x6387, 0x6388, 0x6389, - 0x638a, 0x638b, 0x638c, 0x638e, 0x638f, 0x6390, 0x6391, 0x6393, - 0x6394, 0x6395, 0x6397, 0x6398, 0x639a, 0x639b, 0x639d, 0x639f, - 0x63a0, 0x63a0, 0x63a0, 0x63a0, 0x63a1, 0x63a1, 0x63a2, 0x63a2, - 0x63a3, 0x63a4, 0x63a5, 0x63a5, 0x63a6, 0x63a7, 0x63a8, 0x63a9, - 0x63aa, 0x63ab, 0x63ac, 0x63ae, 0x63af, 0x63b0, 0x63b1, 0x63b3, - 0x63b4, 0x63b5, 0x63b7, 0x63b8, 0x63ba, 0x63bb, 0x63bd, 0x63bf, - 0x63c0, 0x63c0, 0x63c0, 0x63c0, 0x63c1, 0x63c1, 0x63c2, 0x63c2, - 0x63c3, 0x63c4, 0x63c5, 0x63c5, 0x63c6, 0x63c7, 0x63c8, 0x63c9, - 0x63ca, 0x63cb, 0x63cc, 0x63ce, 0x63cf, 0x63d0, 0x63d1, 0x63d3, - 0x63d4, 0x63d5, 0x63d7, 0x63d8, 0x63da, 0x63db, 0x63dd, 0x63df, - 0x63e0, 0x63e0, 0x63e0, 0x63e0, 0x63e1, 0x63e1, 0x63e2, 0x63e2, - 0x63e3, 0x63e4, 0x63e5, 0x63e5, 0x63e6, 0x63e7, 0x63e8, 0x63e9, - 0x63ea, 0x63eb, 0x63ec, 0x63ee, 0x63ef, 0x63f0, 0x63f1, 0x63f3, - 0x63f4, 0x63f5, 0x63f7, 0x63f8, 0x63fa, 0x63fb, 0x63fd, 0x63ff, - 0x6400, 0x6400, 0x6400, 0x6400, 0x6401, 0x6401, 0x6402, 0x6402, - 0x6403, 0x6404, 0x6405, 0x6405, 0x6406, 0x6407, 0x6408, 0x6409, - 0x640a, 0x640b, 0x640c, 0x640e, 0x640f, 0x6410, 0x6411, 0x6413, - 0x6414, 0x6415, 0x6417, 0x6418, 0x641a, 0x641b, 0x641d, 0x641f, - 0x6440, 0x6440, 0x6440, 0x6440, 0x6441, 0x6441, 0x6442, 0x6442, - 0x6443, 0x6444, 0x6445, 0x6445, 0x6446, 0x6447, 0x6448, 0x6449, - 0x644a, 0x644b, 0x644c, 0x644e, 0x644f, 0x6450, 0x6451, 0x6453, - 0x6454, 0x6455, 0x6457, 0x6458, 0x645a, 0x645b, 0x645d, 0x645f, - 0x6460, 0x6460, 0x6460, 0x6460, 0x6461, 0x6461, 0x6462, 0x6462, - 0x6463, 0x6464, 0x6465, 0x6465, 0x6466, 0x6467, 0x6468, 0x6469, - 0x646a, 0x646b, 0x646c, 0x646e, 0x646f, 0x6470, 0x6471, 0x6473, - 0x6474, 0x6475, 0x6477, 0x6478, 0x647a, 0x647b, 0x647d, 0x647f, - 0x6480, 0x6480, 0x6480, 0x6480, 0x6481, 0x6481, 0x6482, 0x6482, - 0x6483, 0x6484, 0x6485, 0x6485, 0x6486, 0x6487, 0x6488, 0x6489, - 0x648a, 0x648b, 0x648c, 0x648e, 0x648f, 0x6490, 0x6491, 0x6493, - 0x6494, 0x6495, 0x6497, 0x6498, 0x649a, 0x649b, 0x649d, 0x649f, - 0x64c0, 0x64c0, 0x64c0, 0x64c0, 0x64c1, 0x64c1, 0x64c2, 0x64c2, - 0x64c3, 0x64c4, 0x64c5, 0x64c5, 0x64c6, 0x64c7, 0x64c8, 0x64c9, - 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64cf, 0x64d0, 0x64d1, 0x64d3, - 0x64d4, 0x64d5, 0x64d7, 0x64d8, 0x64da, 0x64db, 0x64dd, 0x64df, - 0x64e0, 0x64e0, 0x64e0, 0x64e0, 0x64e1, 0x64e1, 0x64e2, 0x64e2, - 0x64e3, 0x64e4, 0x64e5, 0x64e5, 0x64e6, 0x64e7, 0x64e8, 0x64e9, - 0x64ea, 0x64eb, 0x64ec, 0x64ee, 0x64ef, 0x64f0, 0x64f1, 0x64f3, - 0x64f4, 0x64f5, 0x64f7, 0x64f8, 0x64fa, 0x64fb, 0x64fd, 0x64ff, - 0x6500, 0x6500, 0x6500, 0x6500, 0x6501, 0x6501, 0x6502, 0x6502, - 0x6503, 0x6504, 0x6505, 0x6505, 0x6506, 0x6507, 0x6508, 0x6509, - 0x650a, 0x650b, 0x650c, 0x650e, 0x650f, 0x6510, 0x6511, 0x6513, - 0x6514, 0x6515, 0x6517, 0x6518, 0x651a, 0x651b, 0x651d, 0x651f, - 0x6540, 0x6540, 0x6540, 0x6540, 0x6541, 0x6541, 0x6542, 0x6542, - 0x6543, 0x6544, 0x6545, 0x6545, 0x6546, 0x6547, 0x6548, 0x6549, - 0x654a, 0x654b, 0x654c, 0x654e, 0x654f, 0x6550, 0x6551, 0x6553, - 0x6554, 0x6555, 0x6557, 0x6558, 0x655a, 0x655b, 0x655d, 0x655f, - 0x6560, 0x6560, 0x6560, 0x6560, 0x6561, 0x6561, 0x6562, 0x6562, - 0x6563, 0x6564, 0x6565, 0x6565, 0x6566, 0x6567, 0x6568, 0x6569, - 0x656a, 0x656b, 0x656c, 0x656e, 0x656f, 0x6570, 0x6571, 0x6573, - 0x6574, 0x6575, 0x6577, 0x6578, 0x657a, 0x657b, 0x657d, 0x657f, - 0x6580, 0x6580, 0x6580, 0x6580, 0x6581, 0x6581, 0x6582, 0x6582, - 0x6583, 0x6584, 0x6585, 0x6585, 0x6586, 0x6587, 0x6588, 0x6589, - 0x658a, 0x658b, 0x658c, 0x658e, 0x658f, 0x6590, 0x6591, 0x6593, - 0x6594, 0x6595, 0x6597, 0x6598, 0x659a, 0x659b, 0x659d, 0x659f, - 0x65c0, 0x65c0, 0x65c0, 0x65c0, 0x65c1, 0x65c1, 0x65c2, 0x65c2, - 0x65c3, 0x65c4, 0x65c5, 0x65c5, 0x65c6, 0x65c7, 0x65c8, 0x65c9, - 0x65ca, 0x65cb, 0x65cc, 0x65ce, 0x65cf, 0x65d0, 0x65d1, 0x65d3, - 0x65d4, 0x65d5, 0x65d7, 0x65d8, 0x65da, 0x65db, 0x65dd, 0x65df, - 0x65e0, 0x65e0, 0x65e0, 0x65e0, 0x65e1, 0x65e1, 0x65e2, 0x65e2, - 0x65e3, 0x65e4, 0x65e5, 0x65e5, 0x65e6, 0x65e7, 0x65e8, 0x65e9, - 0x65ea, 0x65eb, 0x65ec, 0x65ee, 0x65ef, 0x65f0, 0x65f1, 0x65f3, - 0x65f4, 0x65f5, 0x65f7, 0x65f8, 0x65fa, 0x65fb, 0x65fd, 0x65ff, - 0x6620, 0x6620, 0x6620, 0x6620, 0x6621, 0x6621, 0x6622, 0x6622, - 0x6623, 0x6624, 0x6625, 0x6625, 0x6626, 0x6627, 0x6628, 0x6629, - 0x662a, 0x662b, 0x662c, 0x662e, 0x662f, 0x6630, 0x6631, 0x6633, - 0x6634, 0x6635, 0x6637, 0x6638, 0x663a, 0x663b, 0x663d, 0x663f, - 0x6640, 0x6640, 0x6640, 0x6640, 0x6641, 0x6641, 0x6642, 0x6642, - 0x6643, 0x6644, 0x6645, 0x6645, 0x6646, 0x6647, 0x6648, 0x6649, - 0x664a, 0x664b, 0x664c, 0x664e, 0x664f, 0x6650, 0x6651, 0x6653, - 0x6654, 0x6655, 0x6657, 0x6658, 0x665a, 0x665b, 0x665d, 0x665f, - 0x6680, 0x6680, 0x6680, 0x6680, 0x6681, 0x6681, 0x6682, 0x6682, - 0x6683, 0x6684, 0x6685, 0x6685, 0x6686, 0x6687, 0x6688, 0x6689, - 0x668a, 0x668b, 0x668c, 0x668e, 0x668f, 0x6690, 0x6691, 0x6693, - 0x6694, 0x6695, 0x6697, 0x6698, 0x669a, 0x669b, 0x669d, 0x669f, - 0x66a0, 0x66a0, 0x66a0, 0x66a0, 0x66a1, 0x66a1, 0x66a2, 0x66a2, - 0x66a3, 0x66a4, 0x66a5, 0x66a5, 0x66a6, 0x66a7, 0x66a8, 0x66a9, - 0x66aa, 0x66ab, 0x66ac, 0x66ae, 0x66af, 0x66b0, 0x66b1, 0x66b3, - 0x66b4, 0x66b5, 0x66b7, 0x66b8, 0x66ba, 0x66bb, 0x66bd, 0x66bf, - 0x66e0, 0x66e0, 0x66e0, 0x66e0, 0x66e1, 0x66e1, 0x66e2, 0x66e2, - 0x66e3, 0x66e4, 0x66e5, 0x66e5, 0x66e6, 0x66e7, 0x66e8, 0x66e9, - 0x66ea, 0x66eb, 0x66ec, 0x66ee, 0x66ef, 0x66f0, 0x66f1, 0x66f3, - 0x66f4, 0x66f5, 0x66f7, 0x66f8, 0x66fa, 0x66fb, 0x66fd, 0x66ff, - 0x6700, 0x6700, 0x6700, 0x6700, 0x6701, 0x6701, 0x6702, 0x6702, - 0x6703, 0x6704, 0x6705, 0x6705, 0x6706, 0x6707, 0x6708, 0x6709, - 0x670a, 0x670b, 0x670c, 0x670e, 0x670f, 0x6710, 0x6711, 0x6713, - 0x6714, 0x6715, 0x6717, 0x6718, 0x671a, 0x671b, 0x671d, 0x671f, - 0x6740, 0x6740, 0x6740, 0x6740, 0x6741, 0x6741, 0x6742, 0x6742, - 0x6743, 0x6744, 0x6745, 0x6745, 0x6746, 0x6747, 0x6748, 0x6749, - 0x674a, 0x674b, 0x674c, 0x674e, 0x674f, 0x6750, 0x6751, 0x6753, - 0x6754, 0x6755, 0x6757, 0x6758, 0x675a, 0x675b, 0x675d, 0x675f, - 0x6760, 0x6760, 0x6760, 0x6760, 0x6761, 0x6761, 0x6762, 0x6762, - 0x6763, 0x6764, 0x6765, 0x6765, 0x6766, 0x6767, 0x6768, 0x6769, - 0x676a, 0x676b, 0x676c, 0x676e, 0x676f, 0x6770, 0x6771, 0x6773, - 0x6774, 0x6775, 0x6777, 0x6778, 0x677a, 0x677b, 0x677d, 0x677f, - 0x67a0, 0x67a0, 0x67a0, 0x67a0, 0x67a1, 0x67a1, 0x67a2, 0x67a2, - 0x67a3, 0x67a4, 0x67a5, 0x67a5, 0x67a6, 0x67a7, 0x67a8, 0x67a9, - 0x67aa, 0x67ab, 0x67ac, 0x67ae, 0x67af, 0x67b0, 0x67b1, 0x67b3, - 0x67b4, 0x67b5, 0x67b7, 0x67b8, 0x67ba, 0x67bb, 0x67bd, 0x67bf, - 0x67e0, 0x67e0, 0x67e0, 0x67e0, 0x67e1, 0x67e1, 0x67e2, 0x67e2, - 0x67e3, 0x67e4, 0x67e5, 0x67e5, 0x67e6, 0x67e7, 0x67e8, 0x67e9, - 0x67ea, 0x67eb, 0x67ec, 0x67ee, 0x67ef, 0x67f0, 0x67f1, 0x67f3, - 0x67f4, 0x67f5, 0x67f7, 0x67f8, 0x67fa, 0x67fb, 0x67fd, 0x67ff, - 0x7000, 0x7000, 0x7000, 0x7000, 0x7001, 0x7001, 0x7002, 0x7002, - 0x7003, 0x7004, 0x7005, 0x7005, 0x7006, 0x7007, 0x7008, 0x7009, - 0x700a, 0x700b, 0x700c, 0x700e, 0x700f, 0x7010, 0x7011, 0x7013, - 0x7014, 0x7015, 0x7017, 0x7018, 0x701a, 0x701b, 0x701d, 0x701f, - 0x7000, 0x7000, 0x7000, 0x7000, 0x7001, 0x7001, 0x7002, 0x7002, - 0x7003, 0x7004, 0x7005, 0x7005, 0x7006, 0x7007, 0x7008, 0x7009, - 0x700a, 0x700b, 0x700c, 0x700e, 0x700f, 0x7010, 0x7011, 0x7013, - 0x7014, 0x7015, 0x7017, 0x7018, 0x701a, 0x701b, 0x701d, 0x701f, - 0x7000, 0x7000, 0x7000, 0x7000, 0x7001, 0x7001, 0x7002, 0x7002, - 0x7003, 0x7004, 0x7005, 0x7005, 0x7006, 0x7007, 0x7008, 0x7009, - 0x700a, 0x700b, 0x700c, 0x700e, 0x700f, 0x7010, 0x7011, 0x7013, - 0x7014, 0x7015, 0x7017, 0x7018, 0x701a, 0x701b, 0x701d, 0x701f, - 0x7000, 0x7000, 0x7000, 0x7000, 0x7001, 0x7001, 0x7002, 0x7002, - 0x7003, 0x7004, 0x7005, 0x7005, 0x7006, 0x7007, 0x7008, 0x7009, - 0x700a, 0x700b, 0x700c, 0x700e, 0x700f, 0x7010, 0x7011, 0x7013, - 0x7014, 0x7015, 0x7017, 0x7018, 0x701a, 0x701b, 0x701d, 0x701f, - 0x7000, 0x7000, 0x7000, 0x7000, 0x7001, 0x7001, 0x7002, 0x7002, - 0x7003, 0x7004, 0x7005, 0x7005, 0x7006, 0x7007, 0x7008, 0x7009, - 0x700a, 0x700b, 0x700c, 0x700e, 0x700f, 0x7010, 0x7011, 0x7013, - 0x7014, 0x7015, 0x7017, 0x7018, 0x701a, 0x701b, 0x701d, 0x701f, - 0x7020, 0x7020, 0x7020, 0x7020, 0x7021, 0x7021, 0x7022, 0x7022, - 0x7023, 0x7024, 0x7025, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, - 0x702a, 0x702b, 0x702c, 0x702e, 0x702f, 0x7030, 0x7031, 0x7033, - 0x7034, 0x7035, 0x7037, 0x7038, 0x703a, 0x703b, 0x703d, 0x703f, - 0x7020, 0x7020, 0x7020, 0x7020, 0x7021, 0x7021, 0x7022, 0x7022, - 0x7023, 0x7024, 0x7025, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, - 0x702a, 0x702b, 0x702c, 0x702e, 0x702f, 0x7030, 0x7031, 0x7033, - 0x7034, 0x7035, 0x7037, 0x7038, 0x703a, 0x703b, 0x703d, 0x703f, - 0x7020, 0x7020, 0x7020, 0x7020, 0x7021, 0x7021, 0x7022, 0x7022, - 0x7023, 0x7024, 0x7025, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, - 0x702a, 0x702b, 0x702c, 0x702e, 0x702f, 0x7030, 0x7031, 0x7033, - 0x7034, 0x7035, 0x7037, 0x7038, 0x703a, 0x703b, 0x703d, 0x703f, - 0x7040, 0x7040, 0x7040, 0x7040, 0x7041, 0x7041, 0x7042, 0x7042, - 0x7043, 0x7044, 0x7045, 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, - 0x704a, 0x704b, 0x704c, 0x704e, 0x704f, 0x7050, 0x7051, 0x7053, - 0x7054, 0x7055, 0x7057, 0x7058, 0x705a, 0x705b, 0x705d, 0x705f, - 0x7040, 0x7040, 0x7040, 0x7040, 0x7041, 0x7041, 0x7042, 0x7042, - 0x7043, 0x7044, 0x7045, 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, - 0x704a, 0x704b, 0x704c, 0x704e, 0x704f, 0x7050, 0x7051, 0x7053, - 0x7054, 0x7055, 0x7057, 0x7058, 0x705a, 0x705b, 0x705d, 0x705f, - 0x7060, 0x7060, 0x7060, 0x7060, 0x7061, 0x7061, 0x7062, 0x7062, - 0x7063, 0x7064, 0x7065, 0x7065, 0x7066, 0x7067, 0x7068, 0x7069, - 0x706a, 0x706b, 0x706c, 0x706e, 0x706f, 0x7070, 0x7071, 0x7073, - 0x7074, 0x7075, 0x7077, 0x7078, 0x707a, 0x707b, 0x707d, 0x707f, - 0x7060, 0x7060, 0x7060, 0x7060, 0x7061, 0x7061, 0x7062, 0x7062, - 0x7063, 0x7064, 0x7065, 0x7065, 0x7066, 0x7067, 0x7068, 0x7069, - 0x706a, 0x706b, 0x706c, 0x706e, 0x706f, 0x7070, 0x7071, 0x7073, - 0x7074, 0x7075, 0x7077, 0x7078, 0x707a, 0x707b, 0x707d, 0x707f, - 0x7080, 0x7080, 0x7080, 0x7080, 0x7081, 0x7081, 0x7082, 0x7082, - 0x7083, 0x7084, 0x7085, 0x7085, 0x7086, 0x7087, 0x7088, 0x7089, - 0x708a, 0x708b, 0x708c, 0x708e, 0x708f, 0x7090, 0x7091, 0x7093, - 0x7094, 0x7095, 0x7097, 0x7098, 0x709a, 0x709b, 0x709d, 0x709f, - 0x70a0, 0x70a0, 0x70a0, 0x70a0, 0x70a1, 0x70a1, 0x70a2, 0x70a2, - 0x70a3, 0x70a4, 0x70a5, 0x70a5, 0x70a6, 0x70a7, 0x70a8, 0x70a9, - 0x70aa, 0x70ab, 0x70ac, 0x70ae, 0x70af, 0x70b0, 0x70b1, 0x70b3, - 0x70b4, 0x70b5, 0x70b7, 0x70b8, 0x70ba, 0x70bb, 0x70bd, 0x70bf, - 0x70a0, 0x70a0, 0x70a0, 0x70a0, 0x70a1, 0x70a1, 0x70a2, 0x70a2, - 0x70a3, 0x70a4, 0x70a5, 0x70a5, 0x70a6, 0x70a7, 0x70a8, 0x70a9, - 0x70aa, 0x70ab, 0x70ac, 0x70ae, 0x70af, 0x70b0, 0x70b1, 0x70b3, - 0x70b4, 0x70b5, 0x70b7, 0x70b8, 0x70ba, 0x70bb, 0x70bd, 0x70bf, - 0x70c0, 0x70c0, 0x70c0, 0x70c0, 0x70c1, 0x70c1, 0x70c2, 0x70c2, - 0x70c3, 0x70c4, 0x70c5, 0x70c5, 0x70c6, 0x70c7, 0x70c8, 0x70c9, - 0x70ca, 0x70cb, 0x70cc, 0x70ce, 0x70cf, 0x70d0, 0x70d1, 0x70d3, - 0x70d4, 0x70d5, 0x70d7, 0x70d8, 0x70da, 0x70db, 0x70dd, 0x70df, - 0x70e0, 0x70e0, 0x70e0, 0x70e0, 0x70e1, 0x70e1, 0x70e2, 0x70e2, - 0x70e3, 0x70e4, 0x70e5, 0x70e5, 0x70e6, 0x70e7, 0x70e8, 0x70e9, - 0x70ea, 0x70eb, 0x70ec, 0x70ee, 0x70ef, 0x70f0, 0x70f1, 0x70f3, - 0x70f4, 0x70f5, 0x70f7, 0x70f8, 0x70fa, 0x70fb, 0x70fd, 0x70ff, - 0x70e0, 0x70e0, 0x70e0, 0x70e0, 0x70e1, 0x70e1, 0x70e2, 0x70e2, - 0x70e3, 0x70e4, 0x70e5, 0x70e5, 0x70e6, 0x70e7, 0x70e8, 0x70e9, - 0x70ea, 0x70eb, 0x70ec, 0x70ee, 0x70ef, 0x70f0, 0x70f1, 0x70f3, - 0x70f4, 0x70f5, 0x70f7, 0x70f8, 0x70fa, 0x70fb, 0x70fd, 0x70ff, - 0x7100, 0x7100, 0x7100, 0x7100, 0x7101, 0x7101, 0x7102, 0x7102, - 0x7103, 0x7104, 0x7105, 0x7105, 0x7106, 0x7107, 0x7108, 0x7109, - 0x710a, 0x710b, 0x710c, 0x710e, 0x710f, 0x7110, 0x7111, 0x7113, - 0x7114, 0x7115, 0x7117, 0x7118, 0x711a, 0x711b, 0x711d, 0x711f, - 0x7120, 0x7120, 0x7120, 0x7120, 0x7121, 0x7121, 0x7122, 0x7122, - 0x7123, 0x7124, 0x7125, 0x7125, 0x7126, 0x7127, 0x7128, 0x7129, - 0x712a, 0x712b, 0x712c, 0x712e, 0x712f, 0x7130, 0x7131, 0x7133, - 0x7134, 0x7135, 0x7137, 0x7138, 0x713a, 0x713b, 0x713d, 0x713f, - 0x7140, 0x7140, 0x7140, 0x7140, 0x7141, 0x7141, 0x7142, 0x7142, - 0x7143, 0x7144, 0x7145, 0x7145, 0x7146, 0x7147, 0x7148, 0x7149, - 0x714a, 0x714b, 0x714c, 0x714e, 0x714f, 0x7150, 0x7151, 0x7153, - 0x7154, 0x7155, 0x7157, 0x7158, 0x715a, 0x715b, 0x715d, 0x715f, - 0x7140, 0x7140, 0x7140, 0x7140, 0x7141, 0x7141, 0x7142, 0x7142, - 0x7143, 0x7144, 0x7145, 0x7145, 0x7146, 0x7147, 0x7148, 0x7149, - 0x714a, 0x714b, 0x714c, 0x714e, 0x714f, 0x7150, 0x7151, 0x7153, - 0x7154, 0x7155, 0x7157, 0x7158, 0x715a, 0x715b, 0x715d, 0x715f, - 0x7160, 0x7160, 0x7160, 0x7160, 0x7161, 0x7161, 0x7162, 0x7162, - 0x7163, 0x7164, 0x7165, 0x7165, 0x7166, 0x7167, 0x7168, 0x7169, - 0x716a, 0x716b, 0x716c, 0x716e, 0x716f, 0x7170, 0x7171, 0x7173, - 0x7174, 0x7175, 0x7177, 0x7178, 0x717a, 0x717b, 0x717d, 0x717f, - 0x7180, 0x7180, 0x7180, 0x7180, 0x7181, 0x7181, 0x7182, 0x7182, - 0x7183, 0x7184, 0x7185, 0x7185, 0x7186, 0x7187, 0x7188, 0x7189, - 0x718a, 0x718b, 0x718c, 0x718e, 0x718f, 0x7190, 0x7191, 0x7193, - 0x7194, 0x7195, 0x7197, 0x7198, 0x719a, 0x719b, 0x719d, 0x719f, - 0x71a0, 0x71a0, 0x71a0, 0x71a0, 0x71a1, 0x71a1, 0x71a2, 0x71a2, - 0x71a3, 0x71a4, 0x71a5, 0x71a5, 0x71a6, 0x71a7, 0x71a8, 0x71a9, - 0x71aa, 0x71ab, 0x71ac, 0x71ae, 0x71af, 0x71b0, 0x71b1, 0x71b3, - 0x71b4, 0x71b5, 0x71b7, 0x71b8, 0x71ba, 0x71bb, 0x71bd, 0x71bf, - 0x71c0, 0x71c0, 0x71c0, 0x71c0, 0x71c1, 0x71c1, 0x71c2, 0x71c2, - 0x71c3, 0x71c4, 0x71c5, 0x71c5, 0x71c6, 0x71c7, 0x71c8, 0x71c9, - 0x71ca, 0x71cb, 0x71cc, 0x71ce, 0x71cf, 0x71d0, 0x71d1, 0x71d3, - 0x71d4, 0x71d5, 0x71d7, 0x71d8, 0x71da, 0x71db, 0x71dd, 0x71df, - 0x71e0, 0x71e0, 0x71e0, 0x71e0, 0x71e1, 0x71e1, 0x71e2, 0x71e2, - 0x71e3, 0x71e4, 0x71e5, 0x71e5, 0x71e6, 0x71e7, 0x71e8, 0x71e9, - 0x71ea, 0x71eb, 0x71ec, 0x71ee, 0x71ef, 0x71f0, 0x71f1, 0x71f3, - 0x71f4, 0x71f5, 0x71f7, 0x71f8, 0x71fa, 0x71fb, 0x71fd, 0x71ff, - 0x7200, 0x7200, 0x7200, 0x7200, 0x7201, 0x7201, 0x7202, 0x7202, - 0x7203, 0x7204, 0x7205, 0x7205, 0x7206, 0x7207, 0x7208, 0x7209, - 0x720a, 0x720b, 0x720c, 0x720e, 0x720f, 0x7210, 0x7211, 0x7213, - 0x7214, 0x7215, 0x7217, 0x7218, 0x721a, 0x721b, 0x721d, 0x721f, - 0x7220, 0x7220, 0x7220, 0x7220, 0x7221, 0x7221, 0x7222, 0x7222, - 0x7223, 0x7224, 0x7225, 0x7225, 0x7226, 0x7227, 0x7228, 0x7229, - 0x722a, 0x722b, 0x722c, 0x722e, 0x722f, 0x7230, 0x7231, 0x7233, - 0x7234, 0x7235, 0x7237, 0x7238, 0x723a, 0x723b, 0x723d, 0x723f, - 0x7240, 0x7240, 0x7240, 0x7240, 0x7241, 0x7241, 0x7242, 0x7242, - 0x7243, 0x7244, 0x7245, 0x7245, 0x7246, 0x7247, 0x7248, 0x7249, - 0x724a, 0x724b, 0x724c, 0x724e, 0x724f, 0x7250, 0x7251, 0x7253, - 0x7254, 0x7255, 0x7257, 0x7258, 0x725a, 0x725b, 0x725d, 0x725f, - 0x7260, 0x7260, 0x7260, 0x7260, 0x7261, 0x7261, 0x7262, 0x7262, - 0x7263, 0x7264, 0x7265, 0x7265, 0x7266, 0x7267, 0x7268, 0x7269, - 0x726a, 0x726b, 0x726c, 0x726e, 0x726f, 0x7270, 0x7271, 0x7273, - 0x7274, 0x7275, 0x7277, 0x7278, 0x727a, 0x727b, 0x727d, 0x727f, - 0x7280, 0x7280, 0x7280, 0x7280, 0x7281, 0x7281, 0x7282, 0x7282, - 0x7283, 0x7284, 0x7285, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, - 0x728a, 0x728b, 0x728c, 0x728e, 0x728f, 0x7290, 0x7291, 0x7293, - 0x7294, 0x7295, 0x7297, 0x7298, 0x729a, 0x729b, 0x729d, 0x729f, - 0x72a0, 0x72a0, 0x72a0, 0x72a0, 0x72a1, 0x72a1, 0x72a2, 0x72a2, - 0x72a3, 0x72a4, 0x72a5, 0x72a5, 0x72a6, 0x72a7, 0x72a8, 0x72a9, - 0x72aa, 0x72ab, 0x72ac, 0x72ae, 0x72af, 0x72b0, 0x72b1, 0x72b3, - 0x72b4, 0x72b5, 0x72b7, 0x72b8, 0x72ba, 0x72bb, 0x72bd, 0x72bf, - 0x72c0, 0x72c0, 0x72c0, 0x72c0, 0x72c1, 0x72c1, 0x72c2, 0x72c2, - 0x72c3, 0x72c4, 0x72c5, 0x72c5, 0x72c6, 0x72c7, 0x72c8, 0x72c9, - 0x72ca, 0x72cb, 0x72cc, 0x72ce, 0x72cf, 0x72d0, 0x72d1, 0x72d3, - 0x72d4, 0x72d5, 0x72d7, 0x72d8, 0x72da, 0x72db, 0x72dd, 0x72df, - 0x72e0, 0x72e0, 0x72e0, 0x72e0, 0x72e1, 0x72e1, 0x72e2, 0x72e2, - 0x72e3, 0x72e4, 0x72e5, 0x72e5, 0x72e6, 0x72e7, 0x72e8, 0x72e9, - 0x72ea, 0x72eb, 0x72ec, 0x72ee, 0x72ef, 0x72f0, 0x72f1, 0x72f3, - 0x72f4, 0x72f5, 0x72f7, 0x72f8, 0x72fa, 0x72fb, 0x72fd, 0x72ff, - 0x7300, 0x7300, 0x7300, 0x7300, 0x7301, 0x7301, 0x7302, 0x7302, - 0x7303, 0x7304, 0x7305, 0x7305, 0x7306, 0x7307, 0x7308, 0x7309, - 0x730a, 0x730b, 0x730c, 0x730e, 0x730f, 0x7310, 0x7311, 0x7313, - 0x7314, 0x7315, 0x7317, 0x7318, 0x731a, 0x731b, 0x731d, 0x731f, - 0x7320, 0x7320, 0x7320, 0x7320, 0x7321, 0x7321, 0x7322, 0x7322, - 0x7323, 0x7324, 0x7325, 0x7325, 0x7326, 0x7327, 0x7328, 0x7329, - 0x732a, 0x732b, 0x732c, 0x732e, 0x732f, 0x7330, 0x7331, 0x7333, - 0x7334, 0x7335, 0x7337, 0x7338, 0x733a, 0x733b, 0x733d, 0x733f, - 0x7340, 0x7340, 0x7340, 0x7340, 0x7341, 0x7341, 0x7342, 0x7342, - 0x7343, 0x7344, 0x7345, 0x7345, 0x7346, 0x7347, 0x7348, 0x7349, - 0x734a, 0x734b, 0x734c, 0x734e, 0x734f, 0x7350, 0x7351, 0x7353, - 0x7354, 0x7355, 0x7357, 0x7358, 0x735a, 0x735b, 0x735d, 0x735f, - 0x7380, 0x7380, 0x7380, 0x7380, 0x7381, 0x7381, 0x7382, 0x7382, - 0x7383, 0x7384, 0x7385, 0x7385, 0x7386, 0x7387, 0x7388, 0x7389, - 0x738a, 0x738b, 0x738c, 0x738e, 0x738f, 0x7390, 0x7391, 0x7393, - 0x7394, 0x7395, 0x7397, 0x7398, 0x739a, 0x739b, 0x739d, 0x739f, - 0x73a0, 0x73a0, 0x73a0, 0x73a0, 0x73a1, 0x73a1, 0x73a2, 0x73a2, - 0x73a3, 0x73a4, 0x73a5, 0x73a5, 0x73a6, 0x73a7, 0x73a8, 0x73a9, - 0x73aa, 0x73ab, 0x73ac, 0x73ae, 0x73af, 0x73b0, 0x73b1, 0x73b3, - 0x73b4, 0x73b5, 0x73b7, 0x73b8, 0x73ba, 0x73bb, 0x73bd, 0x73bf, - 0x73c0, 0x73c0, 0x73c0, 0x73c0, 0x73c1, 0x73c1, 0x73c2, 0x73c2, - 0x73c3, 0x73c4, 0x73c5, 0x73c5, 0x73c6, 0x73c7, 0x73c8, 0x73c9, - 0x73ca, 0x73cb, 0x73cc, 0x73ce, 0x73cf, 0x73d0, 0x73d1, 0x73d3, - 0x73d4, 0x73d5, 0x73d7, 0x73d8, 0x73da, 0x73db, 0x73dd, 0x73df, - 0x73e0, 0x73e0, 0x73e0, 0x73e0, 0x73e1, 0x73e1, 0x73e2, 0x73e2, - 0x73e3, 0x73e4, 0x73e5, 0x73e5, 0x73e6, 0x73e7, 0x73e8, 0x73e9, - 0x73ea, 0x73eb, 0x73ec, 0x73ee, 0x73ef, 0x73f0, 0x73f1, 0x73f3, - 0x73f4, 0x73f5, 0x73f7, 0x73f8, 0x73fa, 0x73fb, 0x73fd, 0x73ff, - 0x7400, 0x7400, 0x7400, 0x7400, 0x7401, 0x7401, 0x7402, 0x7402, - 0x7403, 0x7404, 0x7405, 0x7405, 0x7406, 0x7407, 0x7408, 0x7409, - 0x740a, 0x740b, 0x740c, 0x740e, 0x740f, 0x7410, 0x7411, 0x7413, - 0x7414, 0x7415, 0x7417, 0x7418, 0x741a, 0x741b, 0x741d, 0x741f, - 0x7440, 0x7440, 0x7440, 0x7440, 0x7441, 0x7441, 0x7442, 0x7442, - 0x7443, 0x7444, 0x7445, 0x7445, 0x7446, 0x7447, 0x7448, 0x7449, - 0x744a, 0x744b, 0x744c, 0x744e, 0x744f, 0x7450, 0x7451, 0x7453, - 0x7454, 0x7455, 0x7457, 0x7458, 0x745a, 0x745b, 0x745d, 0x745f, - 0x7460, 0x7460, 0x7460, 0x7460, 0x7461, 0x7461, 0x7462, 0x7462, - 0x7463, 0x7464, 0x7465, 0x7465, 0x7466, 0x7467, 0x7468, 0x7469, - 0x746a, 0x746b, 0x746c, 0x746e, 0x746f, 0x7470, 0x7471, 0x7473, - 0x7474, 0x7475, 0x7477, 0x7478, 0x747a, 0x747b, 0x747d, 0x747f, - 0x7480, 0x7480, 0x7480, 0x7480, 0x7481, 0x7481, 0x7482, 0x7482, - 0x7483, 0x7484, 0x7485, 0x7485, 0x7486, 0x7487, 0x7488, 0x7489, - 0x748a, 0x748b, 0x748c, 0x748e, 0x748f, 0x7490, 0x7491, 0x7493, - 0x7494, 0x7495, 0x7497, 0x7498, 0x749a, 0x749b, 0x749d, 0x749f, - 0x74c0, 0x74c0, 0x74c0, 0x74c0, 0x74c1, 0x74c1, 0x74c2, 0x74c2, - 0x74c3, 0x74c4, 0x74c5, 0x74c5, 0x74c6, 0x74c7, 0x74c8, 0x74c9, - 0x74ca, 0x74cb, 0x74cc, 0x74ce, 0x74cf, 0x74d0, 0x74d1, 0x74d3, - 0x74d4, 0x74d5, 0x74d7, 0x74d8, 0x74da, 0x74db, 0x74dd, 0x74df, - 0x74e0, 0x74e0, 0x74e0, 0x74e0, 0x74e1, 0x74e1, 0x74e2, 0x74e2, - 0x74e3, 0x74e4, 0x74e5, 0x74e5, 0x74e6, 0x74e7, 0x74e8, 0x74e9, - 0x74ea, 0x74eb, 0x74ec, 0x74ee, 0x74ef, 0x74f0, 0x74f1, 0x74f3, - 0x74f4, 0x74f5, 0x74f7, 0x74f8, 0x74fa, 0x74fb, 0x74fd, 0x74ff, - 0x7500, 0x7500, 0x7500, 0x7500, 0x7501, 0x7501, 0x7502, 0x7502, - 0x7503, 0x7504, 0x7505, 0x7505, 0x7506, 0x7507, 0x7508, 0x7509, - 0x750a, 0x750b, 0x750c, 0x750e, 0x750f, 0x7510, 0x7511, 0x7513, - 0x7514, 0x7515, 0x7517, 0x7518, 0x751a, 0x751b, 0x751d, 0x751f, - 0x7540, 0x7540, 0x7540, 0x7540, 0x7541, 0x7541, 0x7542, 0x7542, - 0x7543, 0x7544, 0x7545, 0x7545, 0x7546, 0x7547, 0x7548, 0x7549, - 0x754a, 0x754b, 0x754c, 0x754e, 0x754f, 0x7550, 0x7551, 0x7553, - 0x7554, 0x7555, 0x7557, 0x7558, 0x755a, 0x755b, 0x755d, 0x755f, - 0x7560, 0x7560, 0x7560, 0x7560, 0x7561, 0x7561, 0x7562, 0x7562, - 0x7563, 0x7564, 0x7565, 0x7565, 0x7566, 0x7567, 0x7568, 0x7569, - 0x756a, 0x756b, 0x756c, 0x756e, 0x756f, 0x7570, 0x7571, 0x7573, - 0x7574, 0x7575, 0x7577, 0x7578, 0x757a, 0x757b, 0x757d, 0x757f, - 0x7580, 0x7580, 0x7580, 0x7580, 0x7581, 0x7581, 0x7582, 0x7582, - 0x7583, 0x7584, 0x7585, 0x7585, 0x7586, 0x7587, 0x7588, 0x7589, - 0x758a, 0x758b, 0x758c, 0x758e, 0x758f, 0x7590, 0x7591, 0x7593, - 0x7594, 0x7595, 0x7597, 0x7598, 0x759a, 0x759b, 0x759d, 0x759f, - 0x75c0, 0x75c0, 0x75c0, 0x75c0, 0x75c1, 0x75c1, 0x75c2, 0x75c2, - 0x75c3, 0x75c4, 0x75c5, 0x75c5, 0x75c6, 0x75c7, 0x75c8, 0x75c9, - 0x75ca, 0x75cb, 0x75cc, 0x75ce, 0x75cf, 0x75d0, 0x75d1, 0x75d3, - 0x75d4, 0x75d5, 0x75d7, 0x75d8, 0x75da, 0x75db, 0x75dd, 0x75df, - 0x75e0, 0x75e0, 0x75e0, 0x75e0, 0x75e1, 0x75e1, 0x75e2, 0x75e2, - 0x75e3, 0x75e4, 0x75e5, 0x75e5, 0x75e6, 0x75e7, 0x75e8, 0x75e9, - 0x75ea, 0x75eb, 0x75ec, 0x75ee, 0x75ef, 0x75f0, 0x75f1, 0x75f3, - 0x75f4, 0x75f5, 0x75f7, 0x75f8, 0x75fa, 0x75fb, 0x75fd, 0x75ff, - 0x7620, 0x7620, 0x7620, 0x7620, 0x7621, 0x7621, 0x7622, 0x7622, - 0x7623, 0x7624, 0x7625, 0x7625, 0x7626, 0x7627, 0x7628, 0x7629, - 0x762a, 0x762b, 0x762c, 0x762e, 0x762f, 0x7630, 0x7631, 0x7633, - 0x7634, 0x7635, 0x7637, 0x7638, 0x763a, 0x763b, 0x763d, 0x763f, - 0x7640, 0x7640, 0x7640, 0x7640, 0x7641, 0x7641, 0x7642, 0x7642, - 0x7643, 0x7644, 0x7645, 0x7645, 0x7646, 0x7647, 0x7648, 0x7649, - 0x764a, 0x764b, 0x764c, 0x764e, 0x764f, 0x7650, 0x7651, 0x7653, - 0x7654, 0x7655, 0x7657, 0x7658, 0x765a, 0x765b, 0x765d, 0x765f, - 0x7680, 0x7680, 0x7680, 0x7680, 0x7681, 0x7681, 0x7682, 0x7682, - 0x7683, 0x7684, 0x7685, 0x7685, 0x7686, 0x7687, 0x7688, 0x7689, - 0x768a, 0x768b, 0x768c, 0x768e, 0x768f, 0x7690, 0x7691, 0x7693, - 0x7694, 0x7695, 0x7697, 0x7698, 0x769a, 0x769b, 0x769d, 0x769f, - 0x76a0, 0x76a0, 0x76a0, 0x76a0, 0x76a1, 0x76a1, 0x76a2, 0x76a2, - 0x76a3, 0x76a4, 0x76a5, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76a9, - 0x76aa, 0x76ab, 0x76ac, 0x76ae, 0x76af, 0x76b0, 0x76b1, 0x76b3, - 0x76b4, 0x76b5, 0x76b7, 0x76b8, 0x76ba, 0x76bb, 0x76bd, 0x76bf, - 0x76e0, 0x76e0, 0x76e0, 0x76e0, 0x76e1, 0x76e1, 0x76e2, 0x76e2, - 0x76e3, 0x76e4, 0x76e5, 0x76e5, 0x76e6, 0x76e7, 0x76e8, 0x76e9, - 0x76ea, 0x76eb, 0x76ec, 0x76ee, 0x76ef, 0x76f0, 0x76f1, 0x76f3, - 0x76f4, 0x76f5, 0x76f7, 0x76f8, 0x76fa, 0x76fb, 0x76fd, 0x76ff, - 0x7700, 0x7700, 0x7700, 0x7700, 0x7701, 0x7701, 0x7702, 0x7702, - 0x7703, 0x7704, 0x7705, 0x7705, 0x7706, 0x7707, 0x7708, 0x7709, - 0x770a, 0x770b, 0x770c, 0x770e, 0x770f, 0x7710, 0x7711, 0x7713, - 0x7714, 0x7715, 0x7717, 0x7718, 0x771a, 0x771b, 0x771d, 0x771f, - 0x7740, 0x7740, 0x7740, 0x7740, 0x7741, 0x7741, 0x7742, 0x7742, - 0x7743, 0x7744, 0x7745, 0x7745, 0x7746, 0x7747, 0x7748, 0x7749, - 0x774a, 0x774b, 0x774c, 0x774e, 0x774f, 0x7750, 0x7751, 0x7753, - 0x7754, 0x7755, 0x7757, 0x7758, 0x775a, 0x775b, 0x775d, 0x775f, - 0x7760, 0x7760, 0x7760, 0x7760, 0x7761, 0x7761, 0x7762, 0x7762, - 0x7763, 0x7764, 0x7765, 0x7765, 0x7766, 0x7767, 0x7768, 0x7769, - 0x776a, 0x776b, 0x776c, 0x776e, 0x776f, 0x7770, 0x7771, 0x7773, - 0x7774, 0x7775, 0x7777, 0x7778, 0x777a, 0x777b, 0x777d, 0x777f, - 0x77a0, 0x77a0, 0x77a0, 0x77a0, 0x77a1, 0x77a1, 0x77a2, 0x77a2, - 0x77a3, 0x77a4, 0x77a5, 0x77a5, 0x77a6, 0x77a7, 0x77a8, 0x77a9, - 0x77aa, 0x77ab, 0x77ac, 0x77ae, 0x77af, 0x77b0, 0x77b1, 0x77b3, - 0x77b4, 0x77b5, 0x77b7, 0x77b8, 0x77ba, 0x77bb, 0x77bd, 0x77bf, - 0x77e0, 0x77e0, 0x77e0, 0x77e0, 0x77e1, 0x77e1, 0x77e2, 0x77e2, - 0x77e3, 0x77e4, 0x77e5, 0x77e5, 0x77e6, 0x77e7, 0x77e8, 0x77e9, - 0x77ea, 0x77eb, 0x77ec, 0x77ee, 0x77ef, 0x77f0, 0x77f1, 0x77f3, - 0x77f4, 0x77f5, 0x77f7, 0x77f8, 0x77fa, 0x77fb, 0x77fd, 0x77ff, - 0x7800, 0x7800, 0x7800, 0x7800, 0x7801, 0x7801, 0x7802, 0x7802, - 0x7803, 0x7804, 0x7805, 0x7805, 0x7806, 0x7807, 0x7808, 0x7809, - 0x780a, 0x780b, 0x780c, 0x780e, 0x780f, 0x7810, 0x7811, 0x7813, - 0x7814, 0x7815, 0x7817, 0x7818, 0x781a, 0x781b, 0x781d, 0x781f, - 0x7800, 0x7800, 0x7800, 0x7800, 0x7801, 0x7801, 0x7802, 0x7802, - 0x7803, 0x7804, 0x7805, 0x7805, 0x7806, 0x7807, 0x7808, 0x7809, - 0x780a, 0x780b, 0x780c, 0x780e, 0x780f, 0x7810, 0x7811, 0x7813, - 0x7814, 0x7815, 0x7817, 0x7818, 0x781a, 0x781b, 0x781d, 0x781f, - 0x7800, 0x7800, 0x7800, 0x7800, 0x7801, 0x7801, 0x7802, 0x7802, - 0x7803, 0x7804, 0x7805, 0x7805, 0x7806, 0x7807, 0x7808, 0x7809, - 0x780a, 0x780b, 0x780c, 0x780e, 0x780f, 0x7810, 0x7811, 0x7813, - 0x7814, 0x7815, 0x7817, 0x7818, 0x781a, 0x781b, 0x781d, 0x781f, - 0x7800, 0x7800, 0x7800, 0x7800, 0x7801, 0x7801, 0x7802, 0x7802, - 0x7803, 0x7804, 0x7805, 0x7805, 0x7806, 0x7807, 0x7808, 0x7809, - 0x780a, 0x780b, 0x780c, 0x780e, 0x780f, 0x7810, 0x7811, 0x7813, - 0x7814, 0x7815, 0x7817, 0x7818, 0x781a, 0x781b, 0x781d, 0x781f, - 0x7800, 0x7800, 0x7800, 0x7800, 0x7801, 0x7801, 0x7802, 0x7802, - 0x7803, 0x7804, 0x7805, 0x7805, 0x7806, 0x7807, 0x7808, 0x7809, - 0x780a, 0x780b, 0x780c, 0x780e, 0x780f, 0x7810, 0x7811, 0x7813, - 0x7814, 0x7815, 0x7817, 0x7818, 0x781a, 0x781b, 0x781d, 0x781f, - 0x7820, 0x7820, 0x7820, 0x7820, 0x7821, 0x7821, 0x7822, 0x7822, - 0x7823, 0x7824, 0x7825, 0x7825, 0x7826, 0x7827, 0x7828, 0x7829, - 0x782a, 0x782b, 0x782c, 0x782e, 0x782f, 0x7830, 0x7831, 0x7833, - 0x7834, 0x7835, 0x7837, 0x7838, 0x783a, 0x783b, 0x783d, 0x783f, - 0x7820, 0x7820, 0x7820, 0x7820, 0x7821, 0x7821, 0x7822, 0x7822, - 0x7823, 0x7824, 0x7825, 0x7825, 0x7826, 0x7827, 0x7828, 0x7829, - 0x782a, 0x782b, 0x782c, 0x782e, 0x782f, 0x7830, 0x7831, 0x7833, - 0x7834, 0x7835, 0x7837, 0x7838, 0x783a, 0x783b, 0x783d, 0x783f, - 0x7820, 0x7820, 0x7820, 0x7820, 0x7821, 0x7821, 0x7822, 0x7822, - 0x7823, 0x7824, 0x7825, 0x7825, 0x7826, 0x7827, 0x7828, 0x7829, - 0x782a, 0x782b, 0x782c, 0x782e, 0x782f, 0x7830, 0x7831, 0x7833, - 0x7834, 0x7835, 0x7837, 0x7838, 0x783a, 0x783b, 0x783d, 0x783f, - 0x7840, 0x7840, 0x7840, 0x7840, 0x7841, 0x7841, 0x7842, 0x7842, - 0x7843, 0x7844, 0x7845, 0x7845, 0x7846, 0x7847, 0x7848, 0x7849, - 0x784a, 0x784b, 0x784c, 0x784e, 0x784f, 0x7850, 0x7851, 0x7853, - 0x7854, 0x7855, 0x7857, 0x7858, 0x785a, 0x785b, 0x785d, 0x785f, - 0x7840, 0x7840, 0x7840, 0x7840, 0x7841, 0x7841, 0x7842, 0x7842, - 0x7843, 0x7844, 0x7845, 0x7845, 0x7846, 0x7847, 0x7848, 0x7849, - 0x784a, 0x784b, 0x784c, 0x784e, 0x784f, 0x7850, 0x7851, 0x7853, - 0x7854, 0x7855, 0x7857, 0x7858, 0x785a, 0x785b, 0x785d, 0x785f, - 0x7860, 0x7860, 0x7860, 0x7860, 0x7861, 0x7861, 0x7862, 0x7862, - 0x7863, 0x7864, 0x7865, 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, - 0x786a, 0x786b, 0x786c, 0x786e, 0x786f, 0x7870, 0x7871, 0x7873, - 0x7874, 0x7875, 0x7877, 0x7878, 0x787a, 0x787b, 0x787d, 0x787f, - 0x7860, 0x7860, 0x7860, 0x7860, 0x7861, 0x7861, 0x7862, 0x7862, - 0x7863, 0x7864, 0x7865, 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, - 0x786a, 0x786b, 0x786c, 0x786e, 0x786f, 0x7870, 0x7871, 0x7873, - 0x7874, 0x7875, 0x7877, 0x7878, 0x787a, 0x787b, 0x787d, 0x787f, - 0x7880, 0x7880, 0x7880, 0x7880, 0x7881, 0x7881, 0x7882, 0x7882, - 0x7883, 0x7884, 0x7885, 0x7885, 0x7886, 0x7887, 0x7888, 0x7889, - 0x788a, 0x788b, 0x788c, 0x788e, 0x788f, 0x7890, 0x7891, 0x7893, - 0x7894, 0x7895, 0x7897, 0x7898, 0x789a, 0x789b, 0x789d, 0x789f, - 0x78a0, 0x78a0, 0x78a0, 0x78a0, 0x78a1, 0x78a1, 0x78a2, 0x78a2, - 0x78a3, 0x78a4, 0x78a5, 0x78a5, 0x78a6, 0x78a7, 0x78a8, 0x78a9, - 0x78aa, 0x78ab, 0x78ac, 0x78ae, 0x78af, 0x78b0, 0x78b1, 0x78b3, - 0x78b4, 0x78b5, 0x78b7, 0x78b8, 0x78ba, 0x78bb, 0x78bd, 0x78bf, - 0x78a0, 0x78a0, 0x78a0, 0x78a0, 0x78a1, 0x78a1, 0x78a2, 0x78a2, - 0x78a3, 0x78a4, 0x78a5, 0x78a5, 0x78a6, 0x78a7, 0x78a8, 0x78a9, - 0x78aa, 0x78ab, 0x78ac, 0x78ae, 0x78af, 0x78b0, 0x78b1, 0x78b3, - 0x78b4, 0x78b5, 0x78b7, 0x78b8, 0x78ba, 0x78bb, 0x78bd, 0x78bf, - 0x78c0, 0x78c0, 0x78c0, 0x78c0, 0x78c1, 0x78c1, 0x78c2, 0x78c2, - 0x78c3, 0x78c4, 0x78c5, 0x78c5, 0x78c6, 0x78c7, 0x78c8, 0x78c9, - 0x78ca, 0x78cb, 0x78cc, 0x78ce, 0x78cf, 0x78d0, 0x78d1, 0x78d3, - 0x78d4, 0x78d5, 0x78d7, 0x78d8, 0x78da, 0x78db, 0x78dd, 0x78df, - 0x78e0, 0x78e0, 0x78e0, 0x78e0, 0x78e1, 0x78e1, 0x78e2, 0x78e2, - 0x78e3, 0x78e4, 0x78e5, 0x78e5, 0x78e6, 0x78e7, 0x78e8, 0x78e9, - 0x78ea, 0x78eb, 0x78ec, 0x78ee, 0x78ef, 0x78f0, 0x78f1, 0x78f3, - 0x78f4, 0x78f5, 0x78f7, 0x78f8, 0x78fa, 0x78fb, 0x78fd, 0x78ff, - 0x78e0, 0x78e0, 0x78e0, 0x78e0, 0x78e1, 0x78e1, 0x78e2, 0x78e2, - 0x78e3, 0x78e4, 0x78e5, 0x78e5, 0x78e6, 0x78e7, 0x78e8, 0x78e9, - 0x78ea, 0x78eb, 0x78ec, 0x78ee, 0x78ef, 0x78f0, 0x78f1, 0x78f3, - 0x78f4, 0x78f5, 0x78f7, 0x78f8, 0x78fa, 0x78fb, 0x78fd, 0x78ff, - 0x7900, 0x7900, 0x7900, 0x7900, 0x7901, 0x7901, 0x7902, 0x7902, - 0x7903, 0x7904, 0x7905, 0x7905, 0x7906, 0x7907, 0x7908, 0x7909, - 0x790a, 0x790b, 0x790c, 0x790e, 0x790f, 0x7910, 0x7911, 0x7913, - 0x7914, 0x7915, 0x7917, 0x7918, 0x791a, 0x791b, 0x791d, 0x791f, - 0x7920, 0x7920, 0x7920, 0x7920, 0x7921, 0x7921, 0x7922, 0x7922, - 0x7923, 0x7924, 0x7925, 0x7925, 0x7926, 0x7927, 0x7928, 0x7929, - 0x792a, 0x792b, 0x792c, 0x792e, 0x792f, 0x7930, 0x7931, 0x7933, - 0x7934, 0x7935, 0x7937, 0x7938, 0x793a, 0x793b, 0x793d, 0x793f, - 0x7940, 0x7940, 0x7940, 0x7940, 0x7941, 0x7941, 0x7942, 0x7942, - 0x7943, 0x7944, 0x7945, 0x7945, 0x7946, 0x7947, 0x7948, 0x7949, - 0x794a, 0x794b, 0x794c, 0x794e, 0x794f, 0x7950, 0x7951, 0x7953, - 0x7954, 0x7955, 0x7957, 0x7958, 0x795a, 0x795b, 0x795d, 0x795f, - 0x7940, 0x7940, 0x7940, 0x7940, 0x7941, 0x7941, 0x7942, 0x7942, - 0x7943, 0x7944, 0x7945, 0x7945, 0x7946, 0x7947, 0x7948, 0x7949, - 0x794a, 0x794b, 0x794c, 0x794e, 0x794f, 0x7950, 0x7951, 0x7953, - 0x7954, 0x7955, 0x7957, 0x7958, 0x795a, 0x795b, 0x795d, 0x795f, - 0x7960, 0x7960, 0x7960, 0x7960, 0x7961, 0x7961, 0x7962, 0x7962, - 0x7963, 0x7964, 0x7965, 0x7965, 0x7966, 0x7967, 0x7968, 0x7969, - 0x796a, 0x796b, 0x796c, 0x796e, 0x796f, 0x7970, 0x7971, 0x7973, - 0x7974, 0x7975, 0x7977, 0x7978, 0x797a, 0x797b, 0x797d, 0x797f, - 0x7980, 0x7980, 0x7980, 0x7980, 0x7981, 0x7981, 0x7982, 0x7982, - 0x7983, 0x7984, 0x7985, 0x7985, 0x7986, 0x7987, 0x7988, 0x7989, - 0x798a, 0x798b, 0x798c, 0x798e, 0x798f, 0x7990, 0x7991, 0x7993, - 0x7994, 0x7995, 0x7997, 0x7998, 0x799a, 0x799b, 0x799d, 0x799f, - 0x79a0, 0x79a0, 0x79a0, 0x79a0, 0x79a1, 0x79a1, 0x79a2, 0x79a2, - 0x79a3, 0x79a4, 0x79a5, 0x79a5, 0x79a6, 0x79a7, 0x79a8, 0x79a9, - 0x79aa, 0x79ab, 0x79ac, 0x79ae, 0x79af, 0x79b0, 0x79b1, 0x79b3, - 0x79b4, 0x79b5, 0x79b7, 0x79b8, 0x79ba, 0x79bb, 0x79bd, 0x79bf, - 0x79c0, 0x79c0, 0x79c0, 0x79c0, 0x79c1, 0x79c1, 0x79c2, 0x79c2, - 0x79c3, 0x79c4, 0x79c5, 0x79c5, 0x79c6, 0x79c7, 0x79c8, 0x79c9, - 0x79ca, 0x79cb, 0x79cc, 0x79ce, 0x79cf, 0x79d0, 0x79d1, 0x79d3, - 0x79d4, 0x79d5, 0x79d7, 0x79d8, 0x79da, 0x79db, 0x79dd, 0x79df, - 0x79e0, 0x79e0, 0x79e0, 0x79e0, 0x79e1, 0x79e1, 0x79e2, 0x79e2, - 0x79e3, 0x79e4, 0x79e5, 0x79e5, 0x79e6, 0x79e7, 0x79e8, 0x79e9, - 0x79ea, 0x79eb, 0x79ec, 0x79ee, 0x79ef, 0x79f0, 0x79f1, 0x79f3, - 0x79f4, 0x79f5, 0x79f7, 0x79f8, 0x79fa, 0x79fb, 0x79fd, 0x79ff, - 0x7a00, 0x7a00, 0x7a00, 0x7a00, 0x7a01, 0x7a01, 0x7a02, 0x7a02, - 0x7a03, 0x7a04, 0x7a05, 0x7a05, 0x7a06, 0x7a07, 0x7a08, 0x7a09, - 0x7a0a, 0x7a0b, 0x7a0c, 0x7a0e, 0x7a0f, 0x7a10, 0x7a11, 0x7a13, - 0x7a14, 0x7a15, 0x7a17, 0x7a18, 0x7a1a, 0x7a1b, 0x7a1d, 0x7a1f, - 0x7a20, 0x7a20, 0x7a20, 0x7a20, 0x7a21, 0x7a21, 0x7a22, 0x7a22, - 0x7a23, 0x7a24, 0x7a25, 0x7a25, 0x7a26, 0x7a27, 0x7a28, 0x7a29, - 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2e, 0x7a2f, 0x7a30, 0x7a31, 0x7a33, - 0x7a34, 0x7a35, 0x7a37, 0x7a38, 0x7a3a, 0x7a3b, 0x7a3d, 0x7a3f, - 0x7a40, 0x7a40, 0x7a40, 0x7a40, 0x7a41, 0x7a41, 0x7a42, 0x7a42, - 0x7a43, 0x7a44, 0x7a45, 0x7a45, 0x7a46, 0x7a47, 0x7a48, 0x7a49, - 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4e, 0x7a4f, 0x7a50, 0x7a51, 0x7a53, - 0x7a54, 0x7a55, 0x7a57, 0x7a58, 0x7a5a, 0x7a5b, 0x7a5d, 0x7a5f, - 0x7a60, 0x7a60, 0x7a60, 0x7a60, 0x7a61, 0x7a61, 0x7a62, 0x7a62, - 0x7a63, 0x7a64, 0x7a65, 0x7a65, 0x7a66, 0x7a67, 0x7a68, 0x7a69, - 0x7a6a, 0x7a6b, 0x7a6c, 0x7a6e, 0x7a6f, 0x7a70, 0x7a71, 0x7a73, - 0x7a74, 0x7a75, 0x7a77, 0x7a78, 0x7a7a, 0x7a7b, 0x7a7d, 0x7a7f, - 0x7a80, 0x7a80, 0x7a80, 0x7a80, 0x7a81, 0x7a81, 0x7a82, 0x7a82, - 0x7a83, 0x7a84, 0x7a85, 0x7a85, 0x7a86, 0x7a87, 0x7a88, 0x7a89, - 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8e, 0x7a8f, 0x7a90, 0x7a91, 0x7a93, - 0x7a94, 0x7a95, 0x7a97, 0x7a98, 0x7a9a, 0x7a9b, 0x7a9d, 0x7a9f, - 0x7aa0, 0x7aa0, 0x7aa0, 0x7aa0, 0x7aa1, 0x7aa1, 0x7aa2, 0x7aa2, - 0x7aa3, 0x7aa4, 0x7aa5, 0x7aa5, 0x7aa6, 0x7aa7, 0x7aa8, 0x7aa9, - 0x7aaa, 0x7aab, 0x7aac, 0x7aae, 0x7aaf, 0x7ab0, 0x7ab1, 0x7ab3, - 0x7ab4, 0x7ab5, 0x7ab7, 0x7ab8, 0x7aba, 0x7abb, 0x7abd, 0x7abf, - 0x7ac0, 0x7ac0, 0x7ac0, 0x7ac0, 0x7ac1, 0x7ac1, 0x7ac2, 0x7ac2, - 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac5, 0x7ac6, 0x7ac7, 0x7ac8, 0x7ac9, - 0x7aca, 0x7acb, 0x7acc, 0x7ace, 0x7acf, 0x7ad0, 0x7ad1, 0x7ad3, - 0x7ad4, 0x7ad5, 0x7ad7, 0x7ad8, 0x7ada, 0x7adb, 0x7add, 0x7adf, - 0x7ae0, 0x7ae0, 0x7ae0, 0x7ae0, 0x7ae1, 0x7ae1, 0x7ae2, 0x7ae2, - 0x7ae3, 0x7ae4, 0x7ae5, 0x7ae5, 0x7ae6, 0x7ae7, 0x7ae8, 0x7ae9, - 0x7aea, 0x7aeb, 0x7aec, 0x7aee, 0x7aef, 0x7af0, 0x7af1, 0x7af3, - 0x7af4, 0x7af5, 0x7af7, 0x7af8, 0x7afa, 0x7afb, 0x7afd, 0x7aff, - 0x7b00, 0x7b00, 0x7b00, 0x7b00, 0x7b01, 0x7b01, 0x7b02, 0x7b02, - 0x7b03, 0x7b04, 0x7b05, 0x7b05, 0x7b06, 0x7b07, 0x7b08, 0x7b09, - 0x7b0a, 0x7b0b, 0x7b0c, 0x7b0e, 0x7b0f, 0x7b10, 0x7b11, 0x7b13, - 0x7b14, 0x7b15, 0x7b17, 0x7b18, 0x7b1a, 0x7b1b, 0x7b1d, 0x7b1f, - 0x7b20, 0x7b20, 0x7b20, 0x7b20, 0x7b21, 0x7b21, 0x7b22, 0x7b22, - 0x7b23, 0x7b24, 0x7b25, 0x7b25, 0x7b26, 0x7b27, 0x7b28, 0x7b29, - 0x7b2a, 0x7b2b, 0x7b2c, 0x7b2e, 0x7b2f, 0x7b30, 0x7b31, 0x7b33, - 0x7b34, 0x7b35, 0x7b37, 0x7b38, 0x7b3a, 0x7b3b, 0x7b3d, 0x7b3f, - 0x7b40, 0x7b40, 0x7b40, 0x7b40, 0x7b41, 0x7b41, 0x7b42, 0x7b42, - 0x7b43, 0x7b44, 0x7b45, 0x7b45, 0x7b46, 0x7b47, 0x7b48, 0x7b49, - 0x7b4a, 0x7b4b, 0x7b4c, 0x7b4e, 0x7b4f, 0x7b50, 0x7b51, 0x7b53, - 0x7b54, 0x7b55, 0x7b57, 0x7b58, 0x7b5a, 0x7b5b, 0x7b5d, 0x7b5f, - 0x7b80, 0x7b80, 0x7b80, 0x7b80, 0x7b81, 0x7b81, 0x7b82, 0x7b82, - 0x7b83, 0x7b84, 0x7b85, 0x7b85, 0x7b86, 0x7b87, 0x7b88, 0x7b89, - 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8e, 0x7b8f, 0x7b90, 0x7b91, 0x7b93, - 0x7b94, 0x7b95, 0x7b97, 0x7b98, 0x7b9a, 0x7b9b, 0x7b9d, 0x7b9f, - 0x7ba0, 0x7ba0, 0x7ba0, 0x7ba0, 0x7ba1, 0x7ba1, 0x7ba2, 0x7ba2, - 0x7ba3, 0x7ba4, 0x7ba5, 0x7ba5, 0x7ba6, 0x7ba7, 0x7ba8, 0x7ba9, - 0x7baa, 0x7bab, 0x7bac, 0x7bae, 0x7baf, 0x7bb0, 0x7bb1, 0x7bb3, - 0x7bb4, 0x7bb5, 0x7bb7, 0x7bb8, 0x7bba, 0x7bbb, 0x7bbd, 0x7bbf, - 0x7bc0, 0x7bc0, 0x7bc0, 0x7bc0, 0x7bc1, 0x7bc1, 0x7bc2, 0x7bc2, - 0x7bc3, 0x7bc4, 0x7bc5, 0x7bc5, 0x7bc6, 0x7bc7, 0x7bc8, 0x7bc9, - 0x7bca, 0x7bcb, 0x7bcc, 0x7bce, 0x7bcf, 0x7bd0, 0x7bd1, 0x7bd3, - 0x7bd4, 0x7bd5, 0x7bd7, 0x7bd8, 0x7bda, 0x7bdb, 0x7bdd, 0x7bdf, - 0x7be0, 0x7be0, 0x7be0, 0x7be0, 0x7be1, 0x7be1, 0x7be2, 0x7be2, - 0x7be3, 0x7be4, 0x7be5, 0x7be5, 0x7be6, 0x7be7, 0x7be8, 0x7be9, - 0x7bea, 0x7beb, 0x7bec, 0x7bee, 0x7bef, 0x7bf0, 0x7bf1, 0x7bf3, - 0x7bf4, 0x7bf5, 0x7bf7, 0x7bf8, 0x7bfa, 0x7bfb, 0x7bfd, 0x7bff, - 0x7c00, 0x7c00, 0x7c00, 0x7c00, 0x7c01, 0x7c01, 0x7c02, 0x7c02, - 0x7c03, 0x7c04, 0x7c05, 0x7c05, 0x7c06, 0x7c07, 0x7c08, 0x7c09, - 0x7c0a, 0x7c0b, 0x7c0c, 0x7c0e, 0x7c0f, 0x7c10, 0x7c11, 0x7c13, - 0x7c14, 0x7c15, 0x7c17, 0x7c18, 0x7c1a, 0x7c1b, 0x7c1d, 0x7c1f, - 0x7c40, 0x7c40, 0x7c40, 0x7c40, 0x7c41, 0x7c41, 0x7c42, 0x7c42, - 0x7c43, 0x7c44, 0x7c45, 0x7c45, 0x7c46, 0x7c47, 0x7c48, 0x7c49, - 0x7c4a, 0x7c4b, 0x7c4c, 0x7c4e, 0x7c4f, 0x7c50, 0x7c51, 0x7c53, - 0x7c54, 0x7c55, 0x7c57, 0x7c58, 0x7c5a, 0x7c5b, 0x7c5d, 0x7c5f, - 0x7c60, 0x7c60, 0x7c60, 0x7c60, 0x7c61, 0x7c61, 0x7c62, 0x7c62, - 0x7c63, 0x7c64, 0x7c65, 0x7c65, 0x7c66, 0x7c67, 0x7c68, 0x7c69, - 0x7c6a, 0x7c6b, 0x7c6c, 0x7c6e, 0x7c6f, 0x7c70, 0x7c71, 0x7c73, - 0x7c74, 0x7c75, 0x7c77, 0x7c78, 0x7c7a, 0x7c7b, 0x7c7d, 0x7c7f, - 0x7c80, 0x7c80, 0x7c80, 0x7c80, 0x7c81, 0x7c81, 0x7c82, 0x7c82, - 0x7c83, 0x7c84, 0x7c85, 0x7c85, 0x7c86, 0x7c87, 0x7c88, 0x7c89, - 0x7c8a, 0x7c8b, 0x7c8c, 0x7c8e, 0x7c8f, 0x7c90, 0x7c91, 0x7c93, - 0x7c94, 0x7c95, 0x7c97, 0x7c98, 0x7c9a, 0x7c9b, 0x7c9d, 0x7c9f, - 0x7cc0, 0x7cc0, 0x7cc0, 0x7cc0, 0x7cc1, 0x7cc1, 0x7cc2, 0x7cc2, - 0x7cc3, 0x7cc4, 0x7cc5, 0x7cc5, 0x7cc6, 0x7cc7, 0x7cc8, 0x7cc9, - 0x7cca, 0x7ccb, 0x7ccc, 0x7cce, 0x7ccf, 0x7cd0, 0x7cd1, 0x7cd3, - 0x7cd4, 0x7cd5, 0x7cd7, 0x7cd8, 0x7cda, 0x7cdb, 0x7cdd, 0x7cdf, - 0x7ce0, 0x7ce0, 0x7ce0, 0x7ce0, 0x7ce1, 0x7ce1, 0x7ce2, 0x7ce2, - 0x7ce3, 0x7ce4, 0x7ce5, 0x7ce5, 0x7ce6, 0x7ce7, 0x7ce8, 0x7ce9, - 0x7cea, 0x7ceb, 0x7cec, 0x7cee, 0x7cef, 0x7cf0, 0x7cf1, 0x7cf3, - 0x7cf4, 0x7cf5, 0x7cf7, 0x7cf8, 0x7cfa, 0x7cfb, 0x7cfd, 0x7cff, - 0x7d00, 0x7d00, 0x7d00, 0x7d00, 0x7d01, 0x7d01, 0x7d02, 0x7d02, - 0x7d03, 0x7d04, 0x7d05, 0x7d05, 0x7d06, 0x7d07, 0x7d08, 0x7d09, - 0x7d0a, 0x7d0b, 0x7d0c, 0x7d0e, 0x7d0f, 0x7d10, 0x7d11, 0x7d13, - 0x7d14, 0x7d15, 0x7d17, 0x7d18, 0x7d1a, 0x7d1b, 0x7d1d, 0x7d1f, - 0x7d40, 0x7d40, 0x7d40, 0x7d40, 0x7d41, 0x7d41, 0x7d42, 0x7d42, - 0x7d43, 0x7d44, 0x7d45, 0x7d45, 0x7d46, 0x7d47, 0x7d48, 0x7d49, - 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4e, 0x7d4f, 0x7d50, 0x7d51, 0x7d53, - 0x7d54, 0x7d55, 0x7d57, 0x7d58, 0x7d5a, 0x7d5b, 0x7d5d, 0x7d5f, - 0x7d60, 0x7d60, 0x7d60, 0x7d60, 0x7d61, 0x7d61, 0x7d62, 0x7d62, - 0x7d63, 0x7d64, 0x7d65, 0x7d65, 0x7d66, 0x7d67, 0x7d68, 0x7d69, - 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6e, 0x7d6f, 0x7d70, 0x7d71, 0x7d73, - 0x7d74, 0x7d75, 0x7d77, 0x7d78, 0x7d7a, 0x7d7b, 0x7d7d, 0x7d7f, - 0x7d80, 0x7d80, 0x7d80, 0x7d80, 0x7d81, 0x7d81, 0x7d82, 0x7d82, - 0x7d83, 0x7d84, 0x7d85, 0x7d85, 0x7d86, 0x7d87, 0x7d88, 0x7d89, - 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8e, 0x7d8f, 0x7d90, 0x7d91, 0x7d93, - 0x7d94, 0x7d95, 0x7d97, 0x7d98, 0x7d9a, 0x7d9b, 0x7d9d, 0x7d9f, - 0x7dc0, 0x7dc0, 0x7dc0, 0x7dc0, 0x7dc1, 0x7dc1, 0x7dc2, 0x7dc2, - 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc5, 0x7dc6, 0x7dc7, 0x7dc8, 0x7dc9, - 0x7dca, 0x7dcb, 0x7dcc, 0x7dce, 0x7dcf, 0x7dd0, 0x7dd1, 0x7dd3, - 0x7dd4, 0x7dd5, 0x7dd7, 0x7dd8, 0x7dda, 0x7ddb, 0x7ddd, 0x7ddf, - 0x7de0, 0x7de0, 0x7de0, 0x7de0, 0x7de1, 0x7de1, 0x7de2, 0x7de2, - 0x7de3, 0x7de4, 0x7de5, 0x7de5, 0x7de6, 0x7de7, 0x7de8, 0x7de9, - 0x7dea, 0x7deb, 0x7dec, 0x7dee, 0x7def, 0x7df0, 0x7df1, 0x7df3, - 0x7df4, 0x7df5, 0x7df7, 0x7df8, 0x7dfa, 0x7dfb, 0x7dfd, 0x7dff, - 0x7e20, 0x7e20, 0x7e20, 0x7e20, 0x7e21, 0x7e21, 0x7e22, 0x7e22, - 0x7e23, 0x7e24, 0x7e25, 0x7e25, 0x7e26, 0x7e27, 0x7e28, 0x7e29, - 0x7e2a, 0x7e2b, 0x7e2c, 0x7e2e, 0x7e2f, 0x7e30, 0x7e31, 0x7e33, - 0x7e34, 0x7e35, 0x7e37, 0x7e38, 0x7e3a, 0x7e3b, 0x7e3d, 0x7e3f, - 0x7e40, 0x7e40, 0x7e40, 0x7e40, 0x7e41, 0x7e41, 0x7e42, 0x7e42, - 0x7e43, 0x7e44, 0x7e45, 0x7e45, 0x7e46, 0x7e47, 0x7e48, 0x7e49, - 0x7e4a, 0x7e4b, 0x7e4c, 0x7e4e, 0x7e4f, 0x7e50, 0x7e51, 0x7e53, - 0x7e54, 0x7e55, 0x7e57, 0x7e58, 0x7e5a, 0x7e5b, 0x7e5d, 0x7e5f, - 0x7e80, 0x7e80, 0x7e80, 0x7e80, 0x7e81, 0x7e81, 0x7e82, 0x7e82, - 0x7e83, 0x7e84, 0x7e85, 0x7e85, 0x7e86, 0x7e87, 0x7e88, 0x7e89, - 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8e, 0x7e8f, 0x7e90, 0x7e91, 0x7e93, - 0x7e94, 0x7e95, 0x7e97, 0x7e98, 0x7e9a, 0x7e9b, 0x7e9d, 0x7e9f, - 0x7ea0, 0x7ea0, 0x7ea0, 0x7ea0, 0x7ea1, 0x7ea1, 0x7ea2, 0x7ea2, - 0x7ea3, 0x7ea4, 0x7ea5, 0x7ea5, 0x7ea6, 0x7ea7, 0x7ea8, 0x7ea9, - 0x7eaa, 0x7eab, 0x7eac, 0x7eae, 0x7eaf, 0x7eb0, 0x7eb1, 0x7eb3, - 0x7eb4, 0x7eb5, 0x7eb7, 0x7eb8, 0x7eba, 0x7ebb, 0x7ebd, 0x7ebf, - 0x7ee0, 0x7ee0, 0x7ee0, 0x7ee0, 0x7ee1, 0x7ee1, 0x7ee2, 0x7ee2, - 0x7ee3, 0x7ee4, 0x7ee5, 0x7ee5, 0x7ee6, 0x7ee7, 0x7ee8, 0x7ee9, - 0x7eea, 0x7eeb, 0x7eec, 0x7eee, 0x7eef, 0x7ef0, 0x7ef1, 0x7ef3, - 0x7ef4, 0x7ef5, 0x7ef7, 0x7ef8, 0x7efa, 0x7efb, 0x7efd, 0x7eff, - 0x7f00, 0x7f00, 0x7f00, 0x7f00, 0x7f01, 0x7f01, 0x7f02, 0x7f02, - 0x7f03, 0x7f04, 0x7f05, 0x7f05, 0x7f06, 0x7f07, 0x7f08, 0x7f09, - 0x7f0a, 0x7f0b, 0x7f0c, 0x7f0e, 0x7f0f, 0x7f10, 0x7f11, 0x7f13, - 0x7f14, 0x7f15, 0x7f17, 0x7f18, 0x7f1a, 0x7f1b, 0x7f1d, 0x7f1f, - 0x7f40, 0x7f40, 0x7f40, 0x7f40, 0x7f41, 0x7f41, 0x7f42, 0x7f42, - 0x7f43, 0x7f44, 0x7f45, 0x7f45, 0x7f46, 0x7f47, 0x7f48, 0x7f49, - 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4e, 0x7f4f, 0x7f50, 0x7f51, 0x7f53, - 0x7f54, 0x7f55, 0x7f57, 0x7f58, 0x7f5a, 0x7f5b, 0x7f5d, 0x7f5f, - 0x7f60, 0x7f60, 0x7f60, 0x7f60, 0x7f61, 0x7f61, 0x7f62, 0x7f62, - 0x7f63, 0x7f64, 0x7f65, 0x7f65, 0x7f66, 0x7f67, 0x7f68, 0x7f69, - 0x7f6a, 0x7f6b, 0x7f6c, 0x7f6e, 0x7f6f, 0x7f70, 0x7f71, 0x7f73, - 0x7f74, 0x7f75, 0x7f77, 0x7f78, 0x7f7a, 0x7f7b, 0x7f7d, 0x7f7f, - 0x7fa0, 0x7fa0, 0x7fa0, 0x7fa0, 0x7fa1, 0x7fa1, 0x7fa2, 0x7fa2, - 0x7fa3, 0x7fa4, 0x7fa5, 0x7fa5, 0x7fa6, 0x7fa7, 0x7fa8, 0x7fa9, - 0x7faa, 0x7fab, 0x7fac, 0x7fae, 0x7faf, 0x7fb0, 0x7fb1, 0x7fb3, - 0x7fb4, 0x7fb5, 0x7fb7, 0x7fb8, 0x7fba, 0x7fbb, 0x7fbd, 0x7fbf, - 0x7fe0, 0x7fe0, 0x7fe0, 0x7fe0, 0x7fe1, 0x7fe1, 0x7fe2, 0x7fe2, - 0x7fe3, 0x7fe4, 0x7fe5, 0x7fe5, 0x7fe6, 0x7fe7, 0x7fe8, 0x7fe9, - 0x7fea, 0x7feb, 0x7fec, 0x7fee, 0x7fef, 0x7ff0, 0x7ff1, 0x7ff3, - 0x7ff4, 0x7ff5, 0x7ff7, 0x7ff8, 0x7ffa, 0x7ffb, 0x7ffd, 0x7fff, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8001, 0x8002, 0x8002, - 0x8003, 0x8004, 0x8005, 0x8005, 0x8006, 0x8007, 0x8008, 0x8009, - 0x800a, 0x800b, 0x800c, 0x800e, 0x800f, 0x8010, 0x8011, 0x8013, - 0x8014, 0x8015, 0x8017, 0x8018, 0x801a, 0x801b, 0x801d, 0x801f, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8001, 0x8002, 0x8002, - 0x8003, 0x8004, 0x8005, 0x8005, 0x8006, 0x8007, 0x8008, 0x8009, - 0x800a, 0x800b, 0x800c, 0x800e, 0x800f, 0x8010, 0x8011, 0x8013, - 0x8014, 0x8015, 0x8017, 0x8018, 0x801a, 0x801b, 0x801d, 0x801f, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8001, 0x8002, 0x8002, - 0x8003, 0x8004, 0x8005, 0x8005, 0x8006, 0x8007, 0x8008, 0x8009, - 0x800a, 0x800b, 0x800c, 0x800e, 0x800f, 0x8010, 0x8011, 0x8013, - 0x8014, 0x8015, 0x8017, 0x8018, 0x801a, 0x801b, 0x801d, 0x801f, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8001, 0x8002, 0x8002, - 0x8003, 0x8004, 0x8005, 0x8005, 0x8006, 0x8007, 0x8008, 0x8009, - 0x800a, 0x800b, 0x800c, 0x800e, 0x800f, 0x8010, 0x8011, 0x8013, - 0x8014, 0x8015, 0x8017, 0x8018, 0x801a, 0x801b, 0x801d, 0x801f, - 0x8000, 0x8000, 0x8000, 0x8000, 0x8001, 0x8001, 0x8002, 0x8002, - 0x8003, 0x8004, 0x8005, 0x8005, 0x8006, 0x8007, 0x8008, 0x8009, - 0x800a, 0x800b, 0x800c, 0x800e, 0x800f, 0x8010, 0x8011, 0x8013, - 0x8014, 0x8015, 0x8017, 0x8018, 0x801a, 0x801b, 0x801d, 0x801f, - 0x8020, 0x8020, 0x8020, 0x8020, 0x8021, 0x8021, 0x8022, 0x8022, - 0x8023, 0x8024, 0x8025, 0x8025, 0x8026, 0x8027, 0x8028, 0x8029, - 0x802a, 0x802b, 0x802c, 0x802e, 0x802f, 0x8030, 0x8031, 0x8033, - 0x8034, 0x8035, 0x8037, 0x8038, 0x803a, 0x803b, 0x803d, 0x803f, - 0x8020, 0x8020, 0x8020, 0x8020, 0x8021, 0x8021, 0x8022, 0x8022, - 0x8023, 0x8024, 0x8025, 0x8025, 0x8026, 0x8027, 0x8028, 0x8029, - 0x802a, 0x802b, 0x802c, 0x802e, 0x802f, 0x8030, 0x8031, 0x8033, - 0x8034, 0x8035, 0x8037, 0x8038, 0x803a, 0x803b, 0x803d, 0x803f, - 0x8020, 0x8020, 0x8020, 0x8020, 0x8021, 0x8021, 0x8022, 0x8022, - 0x8023, 0x8024, 0x8025, 0x8025, 0x8026, 0x8027, 0x8028, 0x8029, - 0x802a, 0x802b, 0x802c, 0x802e, 0x802f, 0x8030, 0x8031, 0x8033, - 0x8034, 0x8035, 0x8037, 0x8038, 0x803a, 0x803b, 0x803d, 0x803f, - 0x8040, 0x8040, 0x8040, 0x8040, 0x8041, 0x8041, 0x8042, 0x8042, - 0x8043, 0x8044, 0x8045, 0x8045, 0x8046, 0x8047, 0x8048, 0x8049, - 0x804a, 0x804b, 0x804c, 0x804e, 0x804f, 0x8050, 0x8051, 0x8053, - 0x8054, 0x8055, 0x8057, 0x8058, 0x805a, 0x805b, 0x805d, 0x805f, - 0x8040, 0x8040, 0x8040, 0x8040, 0x8041, 0x8041, 0x8042, 0x8042, - 0x8043, 0x8044, 0x8045, 0x8045, 0x8046, 0x8047, 0x8048, 0x8049, - 0x804a, 0x804b, 0x804c, 0x804e, 0x804f, 0x8050, 0x8051, 0x8053, - 0x8054, 0x8055, 0x8057, 0x8058, 0x805a, 0x805b, 0x805d, 0x805f, - 0x8060, 0x8060, 0x8060, 0x8060, 0x8061, 0x8061, 0x8062, 0x8062, - 0x8063, 0x8064, 0x8065, 0x8065, 0x8066, 0x8067, 0x8068, 0x8069, - 0x806a, 0x806b, 0x806c, 0x806e, 0x806f, 0x8070, 0x8071, 0x8073, - 0x8074, 0x8075, 0x8077, 0x8078, 0x807a, 0x807b, 0x807d, 0x807f, - 0x8060, 0x8060, 0x8060, 0x8060, 0x8061, 0x8061, 0x8062, 0x8062, - 0x8063, 0x8064, 0x8065, 0x8065, 0x8066, 0x8067, 0x8068, 0x8069, - 0x806a, 0x806b, 0x806c, 0x806e, 0x806f, 0x8070, 0x8071, 0x8073, - 0x8074, 0x8075, 0x8077, 0x8078, 0x807a, 0x807b, 0x807d, 0x807f, - 0x8080, 0x8080, 0x8080, 0x8080, 0x8081, 0x8081, 0x8082, 0x8082, - 0x8083, 0x8084, 0x8085, 0x8085, 0x8086, 0x8087, 0x8088, 0x8089, - 0x808a, 0x808b, 0x808c, 0x808e, 0x808f, 0x8090, 0x8091, 0x8093, - 0x8094, 0x8095, 0x8097, 0x8098, 0x809a, 0x809b, 0x809d, 0x809f, - 0x80a0, 0x80a0, 0x80a0, 0x80a0, 0x80a1, 0x80a1, 0x80a2, 0x80a2, - 0x80a3, 0x80a4, 0x80a5, 0x80a5, 0x80a6, 0x80a7, 0x80a8, 0x80a9, - 0x80aa, 0x80ab, 0x80ac, 0x80ae, 0x80af, 0x80b0, 0x80b1, 0x80b3, - 0x80b4, 0x80b5, 0x80b7, 0x80b8, 0x80ba, 0x80bb, 0x80bd, 0x80bf, - 0x80a0, 0x80a0, 0x80a0, 0x80a0, 0x80a1, 0x80a1, 0x80a2, 0x80a2, - 0x80a3, 0x80a4, 0x80a5, 0x80a5, 0x80a6, 0x80a7, 0x80a8, 0x80a9, - 0x80aa, 0x80ab, 0x80ac, 0x80ae, 0x80af, 0x80b0, 0x80b1, 0x80b3, - 0x80b4, 0x80b5, 0x80b7, 0x80b8, 0x80ba, 0x80bb, 0x80bd, 0x80bf, - 0x80c0, 0x80c0, 0x80c0, 0x80c0, 0x80c1, 0x80c1, 0x80c2, 0x80c2, - 0x80c3, 0x80c4, 0x80c5, 0x80c5, 0x80c6, 0x80c7, 0x80c8, 0x80c9, - 0x80ca, 0x80cb, 0x80cc, 0x80ce, 0x80cf, 0x80d0, 0x80d1, 0x80d3, - 0x80d4, 0x80d5, 0x80d7, 0x80d8, 0x80da, 0x80db, 0x80dd, 0x80df, - 0x80e0, 0x80e0, 0x80e0, 0x80e0, 0x80e1, 0x80e1, 0x80e2, 0x80e2, - 0x80e3, 0x80e4, 0x80e5, 0x80e5, 0x80e6, 0x80e7, 0x80e8, 0x80e9, - 0x80ea, 0x80eb, 0x80ec, 0x80ee, 0x80ef, 0x80f0, 0x80f1, 0x80f3, - 0x80f4, 0x80f5, 0x80f7, 0x80f8, 0x80fa, 0x80fb, 0x80fd, 0x80ff, - 0x80e0, 0x80e0, 0x80e0, 0x80e0, 0x80e1, 0x80e1, 0x80e2, 0x80e2, - 0x80e3, 0x80e4, 0x80e5, 0x80e5, 0x80e6, 0x80e7, 0x80e8, 0x80e9, - 0x80ea, 0x80eb, 0x80ec, 0x80ee, 0x80ef, 0x80f0, 0x80f1, 0x80f3, - 0x80f4, 0x80f5, 0x80f7, 0x80f8, 0x80fa, 0x80fb, 0x80fd, 0x80ff, - 0x8100, 0x8100, 0x8100, 0x8100, 0x8101, 0x8101, 0x8102, 0x8102, - 0x8103, 0x8104, 0x8105, 0x8105, 0x8106, 0x8107, 0x8108, 0x8109, - 0x810a, 0x810b, 0x810c, 0x810e, 0x810f, 0x8110, 0x8111, 0x8113, - 0x8114, 0x8115, 0x8117, 0x8118, 0x811a, 0x811b, 0x811d, 0x811f, - 0x8120, 0x8120, 0x8120, 0x8120, 0x8121, 0x8121, 0x8122, 0x8122, - 0x8123, 0x8124, 0x8125, 0x8125, 0x8126, 0x8127, 0x8128, 0x8129, - 0x812a, 0x812b, 0x812c, 0x812e, 0x812f, 0x8130, 0x8131, 0x8133, - 0x8134, 0x8135, 0x8137, 0x8138, 0x813a, 0x813b, 0x813d, 0x813f, - 0x8140, 0x8140, 0x8140, 0x8140, 0x8141, 0x8141, 0x8142, 0x8142, - 0x8143, 0x8144, 0x8145, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, - 0x814a, 0x814b, 0x814c, 0x814e, 0x814f, 0x8150, 0x8151, 0x8153, - 0x8154, 0x8155, 0x8157, 0x8158, 0x815a, 0x815b, 0x815d, 0x815f, - 0x8140, 0x8140, 0x8140, 0x8140, 0x8141, 0x8141, 0x8142, 0x8142, - 0x8143, 0x8144, 0x8145, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, - 0x814a, 0x814b, 0x814c, 0x814e, 0x814f, 0x8150, 0x8151, 0x8153, - 0x8154, 0x8155, 0x8157, 0x8158, 0x815a, 0x815b, 0x815d, 0x815f, - 0x8160, 0x8160, 0x8160, 0x8160, 0x8161, 0x8161, 0x8162, 0x8162, - 0x8163, 0x8164, 0x8165, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, - 0x816a, 0x816b, 0x816c, 0x816e, 0x816f, 0x8170, 0x8171, 0x8173, - 0x8174, 0x8175, 0x8177, 0x8178, 0x817a, 0x817b, 0x817d, 0x817f, - 0x8180, 0x8180, 0x8180, 0x8180, 0x8181, 0x8181, 0x8182, 0x8182, - 0x8183, 0x8184, 0x8185, 0x8185, 0x8186, 0x8187, 0x8188, 0x8189, - 0x818a, 0x818b, 0x818c, 0x818e, 0x818f, 0x8190, 0x8191, 0x8193, - 0x8194, 0x8195, 0x8197, 0x8198, 0x819a, 0x819b, 0x819d, 0x819f, - 0x81a0, 0x81a0, 0x81a0, 0x81a0, 0x81a1, 0x81a1, 0x81a2, 0x81a2, - 0x81a3, 0x81a4, 0x81a5, 0x81a5, 0x81a6, 0x81a7, 0x81a8, 0x81a9, - 0x81aa, 0x81ab, 0x81ac, 0x81ae, 0x81af, 0x81b0, 0x81b1, 0x81b3, - 0x81b4, 0x81b5, 0x81b7, 0x81b8, 0x81ba, 0x81bb, 0x81bd, 0x81bf, - 0x81c0, 0x81c0, 0x81c0, 0x81c0, 0x81c1, 0x81c1, 0x81c2, 0x81c2, - 0x81c3, 0x81c4, 0x81c5, 0x81c5, 0x81c6, 0x81c7, 0x81c8, 0x81c9, - 0x81ca, 0x81cb, 0x81cc, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d3, - 0x81d4, 0x81d5, 0x81d7, 0x81d8, 0x81da, 0x81db, 0x81dd, 0x81df, - 0x81e0, 0x81e0, 0x81e0, 0x81e0, 0x81e1, 0x81e1, 0x81e2, 0x81e2, - 0x81e3, 0x81e4, 0x81e5, 0x81e5, 0x81e6, 0x81e7, 0x81e8, 0x81e9, - 0x81ea, 0x81eb, 0x81ec, 0x81ee, 0x81ef, 0x81f0, 0x81f1, 0x81f3, - 0x81f4, 0x81f5, 0x81f7, 0x81f8, 0x81fa, 0x81fb, 0x81fd, 0x81ff, - 0x8200, 0x8200, 0x8200, 0x8200, 0x8201, 0x8201, 0x8202, 0x8202, - 0x8203, 0x8204, 0x8205, 0x8205, 0x8206, 0x8207, 0x8208, 0x8209, - 0x820a, 0x820b, 0x820c, 0x820e, 0x820f, 0x8210, 0x8211, 0x8213, - 0x8214, 0x8215, 0x8217, 0x8218, 0x821a, 0x821b, 0x821d, 0x821f, - 0x8220, 0x8220, 0x8220, 0x8220, 0x8221, 0x8221, 0x8222, 0x8222, - 0x8223, 0x8224, 0x8225, 0x8225, 0x8226, 0x8227, 0x8228, 0x8229, - 0x822a, 0x822b, 0x822c, 0x822e, 0x822f, 0x8230, 0x8231, 0x8233, - 0x8234, 0x8235, 0x8237, 0x8238, 0x823a, 0x823b, 0x823d, 0x823f, - 0x8240, 0x8240, 0x8240, 0x8240, 0x8241, 0x8241, 0x8242, 0x8242, - 0x8243, 0x8244, 0x8245, 0x8245, 0x8246, 0x8247, 0x8248, 0x8249, - 0x824a, 0x824b, 0x824c, 0x824e, 0x824f, 0x8250, 0x8251, 0x8253, - 0x8254, 0x8255, 0x8257, 0x8258, 0x825a, 0x825b, 0x825d, 0x825f, - 0x8260, 0x8260, 0x8260, 0x8260, 0x8261, 0x8261, 0x8262, 0x8262, - 0x8263, 0x8264, 0x8265, 0x8265, 0x8266, 0x8267, 0x8268, 0x8269, - 0x826a, 0x826b, 0x826c, 0x826e, 0x826f, 0x8270, 0x8271, 0x8273, - 0x8274, 0x8275, 0x8277, 0x8278, 0x827a, 0x827b, 0x827d, 0x827f, - 0x8280, 0x8280, 0x8280, 0x8280, 0x8281, 0x8281, 0x8282, 0x8282, - 0x8283, 0x8284, 0x8285, 0x8285, 0x8286, 0x8287, 0x8288, 0x8289, - 0x828a, 0x828b, 0x828c, 0x828e, 0x828f, 0x8290, 0x8291, 0x8293, - 0x8294, 0x8295, 0x8297, 0x8298, 0x829a, 0x829b, 0x829d, 0x829f, - 0x82a0, 0x82a0, 0x82a0, 0x82a0, 0x82a1, 0x82a1, 0x82a2, 0x82a2, - 0x82a3, 0x82a4, 0x82a5, 0x82a5, 0x82a6, 0x82a7, 0x82a8, 0x82a9, - 0x82aa, 0x82ab, 0x82ac, 0x82ae, 0x82af, 0x82b0, 0x82b1, 0x82b3, - 0x82b4, 0x82b5, 0x82b7, 0x82b8, 0x82ba, 0x82bb, 0x82bd, 0x82bf, - 0x82c0, 0x82c0, 0x82c0, 0x82c0, 0x82c1, 0x82c1, 0x82c2, 0x82c2, - 0x82c3, 0x82c4, 0x82c5, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, - 0x82ca, 0x82cb, 0x82cc, 0x82ce, 0x82cf, 0x82d0, 0x82d1, 0x82d3, - 0x82d4, 0x82d5, 0x82d7, 0x82d8, 0x82da, 0x82db, 0x82dd, 0x82df, - 0x82e0, 0x82e0, 0x82e0, 0x82e0, 0x82e1, 0x82e1, 0x82e2, 0x82e2, - 0x82e3, 0x82e4, 0x82e5, 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, - 0x82ea, 0x82eb, 0x82ec, 0x82ee, 0x82ef, 0x82f0, 0x82f1, 0x82f3, - 0x82f4, 0x82f5, 0x82f7, 0x82f8, 0x82fa, 0x82fb, 0x82fd, 0x82ff, - 0x8300, 0x8300, 0x8300, 0x8300, 0x8301, 0x8301, 0x8302, 0x8302, - 0x8303, 0x8304, 0x8305, 0x8305, 0x8306, 0x8307, 0x8308, 0x8309, - 0x830a, 0x830b, 0x830c, 0x830e, 0x830f, 0x8310, 0x8311, 0x8313, - 0x8314, 0x8315, 0x8317, 0x8318, 0x831a, 0x831b, 0x831d, 0x831f, - 0x8320, 0x8320, 0x8320, 0x8320, 0x8321, 0x8321, 0x8322, 0x8322, - 0x8323, 0x8324, 0x8325, 0x8325, 0x8326, 0x8327, 0x8328, 0x8329, - 0x832a, 0x832b, 0x832c, 0x832e, 0x832f, 0x8330, 0x8331, 0x8333, - 0x8334, 0x8335, 0x8337, 0x8338, 0x833a, 0x833b, 0x833d, 0x833f, - 0x8340, 0x8340, 0x8340, 0x8340, 0x8341, 0x8341, 0x8342, 0x8342, - 0x8343, 0x8344, 0x8345, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, - 0x834a, 0x834b, 0x834c, 0x834e, 0x834f, 0x8350, 0x8351, 0x8353, - 0x8354, 0x8355, 0x8357, 0x8358, 0x835a, 0x835b, 0x835d, 0x835f, - 0x8380, 0x8380, 0x8380, 0x8380, 0x8381, 0x8381, 0x8382, 0x8382, - 0x8383, 0x8384, 0x8385, 0x8385, 0x8386, 0x8387, 0x8388, 0x8389, - 0x838a, 0x838b, 0x838c, 0x838e, 0x838f, 0x8390, 0x8391, 0x8393, - 0x8394, 0x8395, 0x8397, 0x8398, 0x839a, 0x839b, 0x839d, 0x839f, - 0x83a0, 0x83a0, 0x83a0, 0x83a0, 0x83a1, 0x83a1, 0x83a2, 0x83a2, - 0x83a3, 0x83a4, 0x83a5, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, - 0x83aa, 0x83ab, 0x83ac, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b3, - 0x83b4, 0x83b5, 0x83b7, 0x83b8, 0x83ba, 0x83bb, 0x83bd, 0x83bf, - 0x83c0, 0x83c0, 0x83c0, 0x83c0, 0x83c1, 0x83c1, 0x83c2, 0x83c2, - 0x83c3, 0x83c4, 0x83c5, 0x83c5, 0x83c6, 0x83c7, 0x83c8, 0x83c9, - 0x83ca, 0x83cb, 0x83cc, 0x83ce, 0x83cf, 0x83d0, 0x83d1, 0x83d3, - 0x83d4, 0x83d5, 0x83d7, 0x83d8, 0x83da, 0x83db, 0x83dd, 0x83df, - 0x83e0, 0x83e0, 0x83e0, 0x83e0, 0x83e1, 0x83e1, 0x83e2, 0x83e2, - 0x83e3, 0x83e4, 0x83e5, 0x83e5, 0x83e6, 0x83e7, 0x83e8, 0x83e9, - 0x83ea, 0x83eb, 0x83ec, 0x83ee, 0x83ef, 0x83f0, 0x83f1, 0x83f3, - 0x83f4, 0x83f5, 0x83f7, 0x83f8, 0x83fa, 0x83fb, 0x83fd, 0x83ff, - 0x8400, 0x8400, 0x8400, 0x8400, 0x8401, 0x8401, 0x8402, 0x8402, - 0x8403, 0x8404, 0x8405, 0x8405, 0x8406, 0x8407, 0x8408, 0x8409, - 0x840a, 0x840b, 0x840c, 0x840e, 0x840f, 0x8410, 0x8411, 0x8413, - 0x8414, 0x8415, 0x8417, 0x8418, 0x841a, 0x841b, 0x841d, 0x841f, - 0x8440, 0x8440, 0x8440, 0x8440, 0x8441, 0x8441, 0x8442, 0x8442, - 0x8443, 0x8444, 0x8445, 0x8445, 0x8446, 0x8447, 0x8448, 0x8449, - 0x844a, 0x844b, 0x844c, 0x844e, 0x844f, 0x8450, 0x8451, 0x8453, - 0x8454, 0x8455, 0x8457, 0x8458, 0x845a, 0x845b, 0x845d, 0x845f, - 0x8460, 0x8460, 0x8460, 0x8460, 0x8461, 0x8461, 0x8462, 0x8462, - 0x8463, 0x8464, 0x8465, 0x8465, 0x8466, 0x8467, 0x8468, 0x8469, - 0x846a, 0x846b, 0x846c, 0x846e, 0x846f, 0x8470, 0x8471, 0x8473, - 0x8474, 0x8475, 0x8477, 0x8478, 0x847a, 0x847b, 0x847d, 0x847f, - 0x8480, 0x8480, 0x8480, 0x8480, 0x8481, 0x8481, 0x8482, 0x8482, - 0x8483, 0x8484, 0x8485, 0x8485, 0x8486, 0x8487, 0x8488, 0x8489, - 0x848a, 0x848b, 0x848c, 0x848e, 0x848f, 0x8490, 0x8491, 0x8493, - 0x8494, 0x8495, 0x8497, 0x8498, 0x849a, 0x849b, 0x849d, 0x849f, - 0x84c0, 0x84c0, 0x84c0, 0x84c0, 0x84c1, 0x84c1, 0x84c2, 0x84c2, - 0x84c3, 0x84c4, 0x84c5, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84c9, - 0x84ca, 0x84cb, 0x84cc, 0x84ce, 0x84cf, 0x84d0, 0x84d1, 0x84d3, - 0x84d4, 0x84d5, 0x84d7, 0x84d8, 0x84da, 0x84db, 0x84dd, 0x84df, - 0x84e0, 0x84e0, 0x84e0, 0x84e0, 0x84e1, 0x84e1, 0x84e2, 0x84e2, - 0x84e3, 0x84e4, 0x84e5, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, - 0x84ea, 0x84eb, 0x84ec, 0x84ee, 0x84ef, 0x84f0, 0x84f1, 0x84f3, - 0x84f4, 0x84f5, 0x84f7, 0x84f8, 0x84fa, 0x84fb, 0x84fd, 0x84ff, - 0x8500, 0x8500, 0x8500, 0x8500, 0x8501, 0x8501, 0x8502, 0x8502, - 0x8503, 0x8504, 0x8505, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, - 0x850a, 0x850b, 0x850c, 0x850e, 0x850f, 0x8510, 0x8511, 0x8513, - 0x8514, 0x8515, 0x8517, 0x8518, 0x851a, 0x851b, 0x851d, 0x851f, - 0x8540, 0x8540, 0x8540, 0x8540, 0x8541, 0x8541, 0x8542, 0x8542, - 0x8543, 0x8544, 0x8545, 0x8545, 0x8546, 0x8547, 0x8548, 0x8549, - 0x854a, 0x854b, 0x854c, 0x854e, 0x854f, 0x8550, 0x8551, 0x8553, - 0x8554, 0x8555, 0x8557, 0x8558, 0x855a, 0x855b, 0x855d, 0x855f, - 0x8560, 0x8560, 0x8560, 0x8560, 0x8561, 0x8561, 0x8562, 0x8562, - 0x8563, 0x8564, 0x8565, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569, - 0x856a, 0x856b, 0x856c, 0x856e, 0x856f, 0x8570, 0x8571, 0x8573, - 0x8574, 0x8575, 0x8577, 0x8578, 0x857a, 0x857b, 0x857d, 0x857f, - 0x8580, 0x8580, 0x8580, 0x8580, 0x8581, 0x8581, 0x8582, 0x8582, - 0x8583, 0x8584, 0x8585, 0x8585, 0x8586, 0x8587, 0x8588, 0x8589, - 0x858a, 0x858b, 0x858c, 0x858e, 0x858f, 0x8590, 0x8591, 0x8593, - 0x8594, 0x8595, 0x8597, 0x8598, 0x859a, 0x859b, 0x859d, 0x859f, - 0x85c0, 0x85c0, 0x85c0, 0x85c0, 0x85c1, 0x85c1, 0x85c2, 0x85c2, - 0x85c3, 0x85c4, 0x85c5, 0x85c5, 0x85c6, 0x85c7, 0x85c8, 0x85c9, - 0x85ca, 0x85cb, 0x85cc, 0x85ce, 0x85cf, 0x85d0, 0x85d1, 0x85d3, - 0x85d4, 0x85d5, 0x85d7, 0x85d8, 0x85da, 0x85db, 0x85dd, 0x85df, - 0x85e0, 0x85e0, 0x85e0, 0x85e0, 0x85e1, 0x85e1, 0x85e2, 0x85e2, - 0x85e3, 0x85e4, 0x85e5, 0x85e5, 0x85e6, 0x85e7, 0x85e8, 0x85e9, - 0x85ea, 0x85eb, 0x85ec, 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0x85f3, - 0x85f4, 0x85f5, 0x85f7, 0x85f8, 0x85fa, 0x85fb, 0x85fd, 0x85ff, - 0x8620, 0x8620, 0x8620, 0x8620, 0x8621, 0x8621, 0x8622, 0x8622, - 0x8623, 0x8624, 0x8625, 0x8625, 0x8626, 0x8627, 0x8628, 0x8629, - 0x862a, 0x862b, 0x862c, 0x862e, 0x862f, 0x8630, 0x8631, 0x8633, - 0x8634, 0x8635, 0x8637, 0x8638, 0x863a, 0x863b, 0x863d, 0x863f, - 0x8640, 0x8640, 0x8640, 0x8640, 0x8641, 0x8641, 0x8642, 0x8642, - 0x8643, 0x8644, 0x8645, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, - 0x864a, 0x864b, 0x864c, 0x864e, 0x864f, 0x8650, 0x8651, 0x8653, - 0x8654, 0x8655, 0x8657, 0x8658, 0x865a, 0x865b, 0x865d, 0x865f, - 0x8680, 0x8680, 0x8680, 0x8680, 0x8681, 0x8681, 0x8682, 0x8682, - 0x8683, 0x8684, 0x8685, 0x8685, 0x8686, 0x8687, 0x8688, 0x8689, - 0x868a, 0x868b, 0x868c, 0x868e, 0x868f, 0x8690, 0x8691, 0x8693, - 0x8694, 0x8695, 0x8697, 0x8698, 0x869a, 0x869b, 0x869d, 0x869f, - 0x86a0, 0x86a0, 0x86a0, 0x86a0, 0x86a1, 0x86a1, 0x86a2, 0x86a2, - 0x86a3, 0x86a4, 0x86a5, 0x86a5, 0x86a6, 0x86a7, 0x86a8, 0x86a9, - 0x86aa, 0x86ab, 0x86ac, 0x86ae, 0x86af, 0x86b0, 0x86b1, 0x86b3, - 0x86b4, 0x86b5, 0x86b7, 0x86b8, 0x86ba, 0x86bb, 0x86bd, 0x86bf, - 0x86e0, 0x86e0, 0x86e0, 0x86e0, 0x86e1, 0x86e1, 0x86e2, 0x86e2, - 0x86e3, 0x86e4, 0x86e5, 0x86e5, 0x86e6, 0x86e7, 0x86e8, 0x86e9, - 0x86ea, 0x86eb, 0x86ec, 0x86ee, 0x86ef, 0x86f0, 0x86f1, 0x86f3, - 0x86f4, 0x86f5, 0x86f7, 0x86f8, 0x86fa, 0x86fb, 0x86fd, 0x86ff, - 0x8700, 0x8700, 0x8700, 0x8700, 0x8701, 0x8701, 0x8702, 0x8702, - 0x8703, 0x8704, 0x8705, 0x8705, 0x8706, 0x8707, 0x8708, 0x8709, - 0x870a, 0x870b, 0x870c, 0x870e, 0x870f, 0x8710, 0x8711, 0x8713, - 0x8714, 0x8715, 0x8717, 0x8718, 0x871a, 0x871b, 0x871d, 0x871f, - 0x8740, 0x8740, 0x8740, 0x8740, 0x8741, 0x8741, 0x8742, 0x8742, - 0x8743, 0x8744, 0x8745, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, - 0x874a, 0x874b, 0x874c, 0x874e, 0x874f, 0x8750, 0x8751, 0x8753, - 0x8754, 0x8755, 0x8757, 0x8758, 0x875a, 0x875b, 0x875d, 0x875f, - 0x8760, 0x8760, 0x8760, 0x8760, 0x8761, 0x8761, 0x8762, 0x8762, - 0x8763, 0x8764, 0x8765, 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, - 0x876a, 0x876b, 0x876c, 0x876e, 0x876f, 0x8770, 0x8771, 0x8773, - 0x8774, 0x8775, 0x8777, 0x8778, 0x877a, 0x877b, 0x877d, 0x877f, - 0x87a0, 0x87a0, 0x87a0, 0x87a0, 0x87a1, 0x87a1, 0x87a2, 0x87a2, - 0x87a3, 0x87a4, 0x87a5, 0x87a5, 0x87a6, 0x87a7, 0x87a8, 0x87a9, - 0x87aa, 0x87ab, 0x87ac, 0x87ae, 0x87af, 0x87b0, 0x87b1, 0x87b3, - 0x87b4, 0x87b5, 0x87b7, 0x87b8, 0x87ba, 0x87bb, 0x87bd, 0x87bf, - 0x87e0, 0x87e0, 0x87e0, 0x87e0, 0x87e1, 0x87e1, 0x87e2, 0x87e2, - 0x87e3, 0x87e4, 0x87e5, 0x87e5, 0x87e6, 0x87e7, 0x87e8, 0x87e9, - 0x87ea, 0x87eb, 0x87ec, 0x87ee, 0x87ef, 0x87f0, 0x87f1, 0x87f3, - 0x87f4, 0x87f5, 0x87f7, 0x87f8, 0x87fa, 0x87fb, 0x87fd, 0x87ff, - 0x8800, 0x8800, 0x8800, 0x8800, 0x8801, 0x8801, 0x8802, 0x8802, - 0x8803, 0x8804, 0x8805, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, - 0x880a, 0x880b, 0x880c, 0x880e, 0x880f, 0x8810, 0x8811, 0x8813, - 0x8814, 0x8815, 0x8817, 0x8818, 0x881a, 0x881b, 0x881d, 0x881f, - 0x8800, 0x8800, 0x8800, 0x8800, 0x8801, 0x8801, 0x8802, 0x8802, - 0x8803, 0x8804, 0x8805, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, - 0x880a, 0x880b, 0x880c, 0x880e, 0x880f, 0x8810, 0x8811, 0x8813, - 0x8814, 0x8815, 0x8817, 0x8818, 0x881a, 0x881b, 0x881d, 0x881f, - 0x8800, 0x8800, 0x8800, 0x8800, 0x8801, 0x8801, 0x8802, 0x8802, - 0x8803, 0x8804, 0x8805, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, - 0x880a, 0x880b, 0x880c, 0x880e, 0x880f, 0x8810, 0x8811, 0x8813, - 0x8814, 0x8815, 0x8817, 0x8818, 0x881a, 0x881b, 0x881d, 0x881f, - 0x8800, 0x8800, 0x8800, 0x8800, 0x8801, 0x8801, 0x8802, 0x8802, - 0x8803, 0x8804, 0x8805, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, - 0x880a, 0x880b, 0x880c, 0x880e, 0x880f, 0x8810, 0x8811, 0x8813, - 0x8814, 0x8815, 0x8817, 0x8818, 0x881a, 0x881b, 0x881d, 0x881f, - 0x8800, 0x8800, 0x8800, 0x8800, 0x8801, 0x8801, 0x8802, 0x8802, - 0x8803, 0x8804, 0x8805, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, - 0x880a, 0x880b, 0x880c, 0x880e, 0x880f, 0x8810, 0x8811, 0x8813, - 0x8814, 0x8815, 0x8817, 0x8818, 0x881a, 0x881b, 0x881d, 0x881f, - 0x8820, 0x8820, 0x8820, 0x8820, 0x8821, 0x8821, 0x8822, 0x8822, - 0x8823, 0x8824, 0x8825, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, - 0x882a, 0x882b, 0x882c, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, - 0x8834, 0x8835, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883f, - 0x8820, 0x8820, 0x8820, 0x8820, 0x8821, 0x8821, 0x8822, 0x8822, - 0x8823, 0x8824, 0x8825, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, - 0x882a, 0x882b, 0x882c, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, - 0x8834, 0x8835, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883f, - 0x8820, 0x8820, 0x8820, 0x8820, 0x8821, 0x8821, 0x8822, 0x8822, - 0x8823, 0x8824, 0x8825, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, - 0x882a, 0x882b, 0x882c, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, - 0x8834, 0x8835, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883f, - 0x8840, 0x8840, 0x8840, 0x8840, 0x8841, 0x8841, 0x8842, 0x8842, - 0x8843, 0x8844, 0x8845, 0x8845, 0x8846, 0x8847, 0x8848, 0x8849, - 0x884a, 0x884b, 0x884c, 0x884e, 0x884f, 0x8850, 0x8851, 0x8853, - 0x8854, 0x8855, 0x8857, 0x8858, 0x885a, 0x885b, 0x885d, 0x885f, - 0x8840, 0x8840, 0x8840, 0x8840, 0x8841, 0x8841, 0x8842, 0x8842, - 0x8843, 0x8844, 0x8845, 0x8845, 0x8846, 0x8847, 0x8848, 0x8849, - 0x884a, 0x884b, 0x884c, 0x884e, 0x884f, 0x8850, 0x8851, 0x8853, - 0x8854, 0x8855, 0x8857, 0x8858, 0x885a, 0x885b, 0x885d, 0x885f, - 0x8860, 0x8860, 0x8860, 0x8860, 0x8861, 0x8861, 0x8862, 0x8862, - 0x8863, 0x8864, 0x8865, 0x8865, 0x8866, 0x8867, 0x8868, 0x8869, - 0x886a, 0x886b, 0x886c, 0x886e, 0x886f, 0x8870, 0x8871, 0x8873, - 0x8874, 0x8875, 0x8877, 0x8878, 0x887a, 0x887b, 0x887d, 0x887f, - 0x8860, 0x8860, 0x8860, 0x8860, 0x8861, 0x8861, 0x8862, 0x8862, - 0x8863, 0x8864, 0x8865, 0x8865, 0x8866, 0x8867, 0x8868, 0x8869, - 0x886a, 0x886b, 0x886c, 0x886e, 0x886f, 0x8870, 0x8871, 0x8873, - 0x8874, 0x8875, 0x8877, 0x8878, 0x887a, 0x887b, 0x887d, 0x887f, - 0x8880, 0x8880, 0x8880, 0x8880, 0x8881, 0x8881, 0x8882, 0x8882, - 0x8883, 0x8884, 0x8885, 0x8885, 0x8886, 0x8887, 0x8888, 0x8889, - 0x888a, 0x888b, 0x888c, 0x888e, 0x888f, 0x8890, 0x8891, 0x8893, - 0x8894, 0x8895, 0x8897, 0x8898, 0x889a, 0x889b, 0x889d, 0x889f, - 0x88a0, 0x88a0, 0x88a0, 0x88a0, 0x88a1, 0x88a1, 0x88a2, 0x88a2, - 0x88a3, 0x88a4, 0x88a5, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, - 0x88aa, 0x88ab, 0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b1, 0x88b3, - 0x88b4, 0x88b5, 0x88b7, 0x88b8, 0x88ba, 0x88bb, 0x88bd, 0x88bf, - 0x88a0, 0x88a0, 0x88a0, 0x88a0, 0x88a1, 0x88a1, 0x88a2, 0x88a2, - 0x88a3, 0x88a4, 0x88a5, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, - 0x88aa, 0x88ab, 0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b1, 0x88b3, - 0x88b4, 0x88b5, 0x88b7, 0x88b8, 0x88ba, 0x88bb, 0x88bd, 0x88bf, - 0x88c0, 0x88c0, 0x88c0, 0x88c0, 0x88c1, 0x88c1, 0x88c2, 0x88c2, - 0x88c3, 0x88c4, 0x88c5, 0x88c5, 0x88c6, 0x88c7, 0x88c8, 0x88c9, - 0x88ca, 0x88cb, 0x88cc, 0x88ce, 0x88cf, 0x88d0, 0x88d1, 0x88d3, - 0x88d4, 0x88d5, 0x88d7, 0x88d8, 0x88da, 0x88db, 0x88dd, 0x88df, - 0x88e0, 0x88e0, 0x88e0, 0x88e0, 0x88e1, 0x88e1, 0x88e2, 0x88e2, - 0x88e3, 0x88e4, 0x88e5, 0x88e5, 0x88e6, 0x88e7, 0x88e8, 0x88e9, - 0x88ea, 0x88eb, 0x88ec, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f3, - 0x88f4, 0x88f5, 0x88f7, 0x88f8, 0x88fa, 0x88fb, 0x88fd, 0x88ff, - 0x88e0, 0x88e0, 0x88e0, 0x88e0, 0x88e1, 0x88e1, 0x88e2, 0x88e2, - 0x88e3, 0x88e4, 0x88e5, 0x88e5, 0x88e6, 0x88e7, 0x88e8, 0x88e9, - 0x88ea, 0x88eb, 0x88ec, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f3, - 0x88f4, 0x88f5, 0x88f7, 0x88f8, 0x88fa, 0x88fb, 0x88fd, 0x88ff, - 0x8900, 0x8900, 0x8900, 0x8900, 0x8901, 0x8901, 0x8902, 0x8902, - 0x8903, 0x8904, 0x8905, 0x8905, 0x8906, 0x8907, 0x8908, 0x8909, - 0x890a, 0x890b, 0x890c, 0x890e, 0x890f, 0x8910, 0x8911, 0x8913, - 0x8914, 0x8915, 0x8917, 0x8918, 0x891a, 0x891b, 0x891d, 0x891f, - 0x8920, 0x8920, 0x8920, 0x8920, 0x8921, 0x8921, 0x8922, 0x8922, - 0x8923, 0x8924, 0x8925, 0x8925, 0x8926, 0x8927, 0x8928, 0x8929, - 0x892a, 0x892b, 0x892c, 0x892e, 0x892f, 0x8930, 0x8931, 0x8933, - 0x8934, 0x8935, 0x8937, 0x8938, 0x893a, 0x893b, 0x893d, 0x893f, - 0x8940, 0x8940, 0x8940, 0x8940, 0x8941, 0x8941, 0x8942, 0x8942, - 0x8943, 0x8944, 0x8945, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, - 0x894a, 0x894b, 0x894c, 0x894e, 0x894f, 0x8950, 0x8951, 0x8953, - 0x8954, 0x8955, 0x8957, 0x8958, 0x895a, 0x895b, 0x895d, 0x895f, - 0x8940, 0x8940, 0x8940, 0x8940, 0x8941, 0x8941, 0x8942, 0x8942, - 0x8943, 0x8944, 0x8945, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, - 0x894a, 0x894b, 0x894c, 0x894e, 0x894f, 0x8950, 0x8951, 0x8953, - 0x8954, 0x8955, 0x8957, 0x8958, 0x895a, 0x895b, 0x895d, 0x895f, - 0x8960, 0x8960, 0x8960, 0x8960, 0x8961, 0x8961, 0x8962, 0x8962, - 0x8963, 0x8964, 0x8965, 0x8965, 0x8966, 0x8967, 0x8968, 0x8969, - 0x896a, 0x896b, 0x896c, 0x896e, 0x896f, 0x8970, 0x8971, 0x8973, - 0x8974, 0x8975, 0x8977, 0x8978, 0x897a, 0x897b, 0x897d, 0x897f, - 0x8980, 0x8980, 0x8980, 0x8980, 0x8981, 0x8981, 0x8982, 0x8982, - 0x8983, 0x8984, 0x8985, 0x8985, 0x8986, 0x8987, 0x8988, 0x8989, - 0x898a, 0x898b, 0x898c, 0x898e, 0x898f, 0x8990, 0x8991, 0x8993, - 0x8994, 0x8995, 0x8997, 0x8998, 0x899a, 0x899b, 0x899d, 0x899f, - 0x89a0, 0x89a0, 0x89a0, 0x89a0, 0x89a1, 0x89a1, 0x89a2, 0x89a2, - 0x89a3, 0x89a4, 0x89a5, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, - 0x89aa, 0x89ab, 0x89ac, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b3, - 0x89b4, 0x89b5, 0x89b7, 0x89b8, 0x89ba, 0x89bb, 0x89bd, 0x89bf, - 0x89c0, 0x89c0, 0x89c0, 0x89c0, 0x89c1, 0x89c1, 0x89c2, 0x89c2, - 0x89c3, 0x89c4, 0x89c5, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, - 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x89d3, - 0x89d4, 0x89d5, 0x89d7, 0x89d8, 0x89da, 0x89db, 0x89dd, 0x89df, - 0x89e0, 0x89e0, 0x89e0, 0x89e0, 0x89e1, 0x89e1, 0x89e2, 0x89e2, - 0x89e3, 0x89e4, 0x89e5, 0x89e5, 0x89e6, 0x89e7, 0x89e8, 0x89e9, - 0x89ea, 0x89eb, 0x89ec, 0x89ee, 0x89ef, 0x89f0, 0x89f1, 0x89f3, - 0x89f4, 0x89f5, 0x89f7, 0x89f8, 0x89fa, 0x89fb, 0x89fd, 0x89ff, - 0x8a00, 0x8a00, 0x8a00, 0x8a00, 0x8a01, 0x8a01, 0x8a02, 0x8a02, - 0x8a03, 0x8a04, 0x8a05, 0x8a05, 0x8a06, 0x8a07, 0x8a08, 0x8a09, - 0x8a0a, 0x8a0b, 0x8a0c, 0x8a0e, 0x8a0f, 0x8a10, 0x8a11, 0x8a13, - 0x8a14, 0x8a15, 0x8a17, 0x8a18, 0x8a1a, 0x8a1b, 0x8a1d, 0x8a1f, - 0x8a20, 0x8a20, 0x8a20, 0x8a20, 0x8a21, 0x8a21, 0x8a22, 0x8a22, - 0x8a23, 0x8a24, 0x8a25, 0x8a25, 0x8a26, 0x8a27, 0x8a28, 0x8a29, - 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2e, 0x8a2f, 0x8a30, 0x8a31, 0x8a33, - 0x8a34, 0x8a35, 0x8a37, 0x8a38, 0x8a3a, 0x8a3b, 0x8a3d, 0x8a3f, - 0x8a40, 0x8a40, 0x8a40, 0x8a40, 0x8a41, 0x8a41, 0x8a42, 0x8a42, - 0x8a43, 0x8a44, 0x8a45, 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, - 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a53, - 0x8a54, 0x8a55, 0x8a57, 0x8a58, 0x8a5a, 0x8a5b, 0x8a5d, 0x8a5f, - 0x8a60, 0x8a60, 0x8a60, 0x8a60, 0x8a61, 0x8a61, 0x8a62, 0x8a62, - 0x8a63, 0x8a64, 0x8a65, 0x8a65, 0x8a66, 0x8a67, 0x8a68, 0x8a69, - 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6e, 0x8a6f, 0x8a70, 0x8a71, 0x8a73, - 0x8a74, 0x8a75, 0x8a77, 0x8a78, 0x8a7a, 0x8a7b, 0x8a7d, 0x8a7f, - 0x8a80, 0x8a80, 0x8a80, 0x8a80, 0x8a81, 0x8a81, 0x8a82, 0x8a82, - 0x8a83, 0x8a84, 0x8a85, 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, - 0x8a8a, 0x8a8b, 0x8a8c, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a93, - 0x8a94, 0x8a95, 0x8a97, 0x8a98, 0x8a9a, 0x8a9b, 0x8a9d, 0x8a9f, - 0x8aa0, 0x8aa0, 0x8aa0, 0x8aa0, 0x8aa1, 0x8aa1, 0x8aa2, 0x8aa2, - 0x8aa3, 0x8aa4, 0x8aa5, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, - 0x8aaa, 0x8aab, 0x8aac, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab3, - 0x8ab4, 0x8ab5, 0x8ab7, 0x8ab8, 0x8aba, 0x8abb, 0x8abd, 0x8abf, - 0x8ac0, 0x8ac0, 0x8ac0, 0x8ac0, 0x8ac1, 0x8ac1, 0x8ac2, 0x8ac2, - 0x8ac3, 0x8ac4, 0x8ac5, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, - 0x8aca, 0x8acb, 0x8acc, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad3, - 0x8ad4, 0x8ad5, 0x8ad7, 0x8ad8, 0x8ada, 0x8adb, 0x8add, 0x8adf, - 0x8ae0, 0x8ae0, 0x8ae0, 0x8ae0, 0x8ae1, 0x8ae1, 0x8ae2, 0x8ae2, - 0x8ae3, 0x8ae4, 0x8ae5, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, - 0x8aea, 0x8aeb, 0x8aec, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af3, - 0x8af4, 0x8af5, 0x8af7, 0x8af8, 0x8afa, 0x8afb, 0x8afd, 0x8aff, - 0x8b00, 0x8b00, 0x8b00, 0x8b00, 0x8b01, 0x8b01, 0x8b02, 0x8b02, - 0x8b03, 0x8b04, 0x8b05, 0x8b05, 0x8b06, 0x8b07, 0x8b08, 0x8b09, - 0x8b0a, 0x8b0b, 0x8b0c, 0x8b0e, 0x8b0f, 0x8b10, 0x8b11, 0x8b13, - 0x8b14, 0x8b15, 0x8b17, 0x8b18, 0x8b1a, 0x8b1b, 0x8b1d, 0x8b1f, - 0x8b20, 0x8b20, 0x8b20, 0x8b20, 0x8b21, 0x8b21, 0x8b22, 0x8b22, - 0x8b23, 0x8b24, 0x8b25, 0x8b25, 0x8b26, 0x8b27, 0x8b28, 0x8b29, - 0x8b2a, 0x8b2b, 0x8b2c, 0x8b2e, 0x8b2f, 0x8b30, 0x8b31, 0x8b33, - 0x8b34, 0x8b35, 0x8b37, 0x8b38, 0x8b3a, 0x8b3b, 0x8b3d, 0x8b3f, - 0x8b40, 0x8b40, 0x8b40, 0x8b40, 0x8b41, 0x8b41, 0x8b42, 0x8b42, - 0x8b43, 0x8b44, 0x8b45, 0x8b45, 0x8b46, 0x8b47, 0x8b48, 0x8b49, - 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b53, - 0x8b54, 0x8b55, 0x8b57, 0x8b58, 0x8b5a, 0x8b5b, 0x8b5d, 0x8b5f, - 0x8b80, 0x8b80, 0x8b80, 0x8b80, 0x8b81, 0x8b81, 0x8b82, 0x8b82, - 0x8b83, 0x8b84, 0x8b85, 0x8b85, 0x8b86, 0x8b87, 0x8b88, 0x8b89, - 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8e, 0x8b8f, 0x8b90, 0x8b91, 0x8b93, - 0x8b94, 0x8b95, 0x8b97, 0x8b98, 0x8b9a, 0x8b9b, 0x8b9d, 0x8b9f, - 0x8ba0, 0x8ba0, 0x8ba0, 0x8ba0, 0x8ba1, 0x8ba1, 0x8ba2, 0x8ba2, - 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba5, 0x8ba6, 0x8ba7, 0x8ba8, 0x8ba9, - 0x8baa, 0x8bab, 0x8bac, 0x8bae, 0x8baf, 0x8bb0, 0x8bb1, 0x8bb3, - 0x8bb4, 0x8bb5, 0x8bb7, 0x8bb8, 0x8bba, 0x8bbb, 0x8bbd, 0x8bbf, - 0x8bc0, 0x8bc0, 0x8bc0, 0x8bc0, 0x8bc1, 0x8bc1, 0x8bc2, 0x8bc2, - 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc5, 0x8bc6, 0x8bc7, 0x8bc8, 0x8bc9, - 0x8bca, 0x8bcb, 0x8bcc, 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd3, - 0x8bd4, 0x8bd5, 0x8bd7, 0x8bd8, 0x8bda, 0x8bdb, 0x8bdd, 0x8bdf, - 0x8be0, 0x8be0, 0x8be0, 0x8be0, 0x8be1, 0x8be1, 0x8be2, 0x8be2, - 0x8be3, 0x8be4, 0x8be5, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, - 0x8bea, 0x8beb, 0x8bec, 0x8bee, 0x8bef, 0x8bf0, 0x8bf1, 0x8bf3, - 0x8bf4, 0x8bf5, 0x8bf7, 0x8bf8, 0x8bfa, 0x8bfb, 0x8bfd, 0x8bff, - 0x8c00, 0x8c00, 0x8c00, 0x8c00, 0x8c01, 0x8c01, 0x8c02, 0x8c02, - 0x8c03, 0x8c04, 0x8c05, 0x8c05, 0x8c06, 0x8c07, 0x8c08, 0x8c09, - 0x8c0a, 0x8c0b, 0x8c0c, 0x8c0e, 0x8c0f, 0x8c10, 0x8c11, 0x8c13, - 0x8c14, 0x8c15, 0x8c17, 0x8c18, 0x8c1a, 0x8c1b, 0x8c1d, 0x8c1f, - 0x8c40, 0x8c40, 0x8c40, 0x8c40, 0x8c41, 0x8c41, 0x8c42, 0x8c42, - 0x8c43, 0x8c44, 0x8c45, 0x8c45, 0x8c46, 0x8c47, 0x8c48, 0x8c49, - 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c53, - 0x8c54, 0x8c55, 0x8c57, 0x8c58, 0x8c5a, 0x8c5b, 0x8c5d, 0x8c5f, - 0x8c60, 0x8c60, 0x8c60, 0x8c60, 0x8c61, 0x8c61, 0x8c62, 0x8c62, - 0x8c63, 0x8c64, 0x8c65, 0x8c65, 0x8c66, 0x8c67, 0x8c68, 0x8c69, - 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c73, - 0x8c74, 0x8c75, 0x8c77, 0x8c78, 0x8c7a, 0x8c7b, 0x8c7d, 0x8c7f, - 0x8c80, 0x8c80, 0x8c80, 0x8c80, 0x8c81, 0x8c81, 0x8c82, 0x8c82, - 0x8c83, 0x8c84, 0x8c85, 0x8c85, 0x8c86, 0x8c87, 0x8c88, 0x8c89, - 0x8c8a, 0x8c8b, 0x8c8c, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c93, - 0x8c94, 0x8c95, 0x8c97, 0x8c98, 0x8c9a, 0x8c9b, 0x8c9d, 0x8c9f, - 0x8cc0, 0x8cc0, 0x8cc0, 0x8cc0, 0x8cc1, 0x8cc1, 0x8cc2, 0x8cc2, - 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, - 0x8cca, 0x8ccb, 0x8ccc, 0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd3, - 0x8cd4, 0x8cd5, 0x8cd7, 0x8cd8, 0x8cda, 0x8cdb, 0x8cdd, 0x8cdf, - 0x8ce0, 0x8ce0, 0x8ce0, 0x8ce0, 0x8ce1, 0x8ce1, 0x8ce2, 0x8ce2, - 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, - 0x8cea, 0x8ceb, 0x8cec, 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf3, - 0x8cf4, 0x8cf5, 0x8cf7, 0x8cf8, 0x8cfa, 0x8cfb, 0x8cfd, 0x8cff, - 0x8d00, 0x8d00, 0x8d00, 0x8d00, 0x8d01, 0x8d01, 0x8d02, 0x8d02, - 0x8d03, 0x8d04, 0x8d05, 0x8d05, 0x8d06, 0x8d07, 0x8d08, 0x8d09, - 0x8d0a, 0x8d0b, 0x8d0c, 0x8d0e, 0x8d0f, 0x8d10, 0x8d11, 0x8d13, - 0x8d14, 0x8d15, 0x8d17, 0x8d18, 0x8d1a, 0x8d1b, 0x8d1d, 0x8d1f, - 0x8d40, 0x8d40, 0x8d40, 0x8d40, 0x8d41, 0x8d41, 0x8d42, 0x8d42, - 0x8d43, 0x8d44, 0x8d45, 0x8d45, 0x8d46, 0x8d47, 0x8d48, 0x8d49, - 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4e, 0x8d4f, 0x8d50, 0x8d51, 0x8d53, - 0x8d54, 0x8d55, 0x8d57, 0x8d58, 0x8d5a, 0x8d5b, 0x8d5d, 0x8d5f, - 0x8d60, 0x8d60, 0x8d60, 0x8d60, 0x8d61, 0x8d61, 0x8d62, 0x8d62, - 0x8d63, 0x8d64, 0x8d65, 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69, - 0x8d6a, 0x8d6b, 0x8d6c, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71, 0x8d73, - 0x8d74, 0x8d75, 0x8d77, 0x8d78, 0x8d7a, 0x8d7b, 0x8d7d, 0x8d7f, - 0x8d80, 0x8d80, 0x8d80, 0x8d80, 0x8d81, 0x8d81, 0x8d82, 0x8d82, - 0x8d83, 0x8d84, 0x8d85, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0x8d89, - 0x8d8a, 0x8d8b, 0x8d8c, 0x8d8e, 0x8d8f, 0x8d90, 0x8d91, 0x8d93, - 0x8d94, 0x8d95, 0x8d97, 0x8d98, 0x8d9a, 0x8d9b, 0x8d9d, 0x8d9f, - 0x8dc0, 0x8dc0, 0x8dc0, 0x8dc0, 0x8dc1, 0x8dc1, 0x8dc2, 0x8dc2, - 0x8dc3, 0x8dc4, 0x8dc5, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, - 0x8dca, 0x8dcb, 0x8dcc, 0x8dce, 0x8dcf, 0x8dd0, 0x8dd1, 0x8dd3, - 0x8dd4, 0x8dd5, 0x8dd7, 0x8dd8, 0x8dda, 0x8ddb, 0x8ddd, 0x8ddf, - 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de1, 0x8de1, 0x8de2, 0x8de2, - 0x8de3, 0x8de4, 0x8de5, 0x8de5, 0x8de6, 0x8de7, 0x8de8, 0x8de9, - 0x8dea, 0x8deb, 0x8dec, 0x8dee, 0x8def, 0x8df0, 0x8df1, 0x8df3, - 0x8df4, 0x8df5, 0x8df7, 0x8df8, 0x8dfa, 0x8dfb, 0x8dfd, 0x8dff, - 0x8e20, 0x8e20, 0x8e20, 0x8e20, 0x8e21, 0x8e21, 0x8e22, 0x8e22, - 0x8e23, 0x8e24, 0x8e25, 0x8e25, 0x8e26, 0x8e27, 0x8e28, 0x8e29, - 0x8e2a, 0x8e2b, 0x8e2c, 0x8e2e, 0x8e2f, 0x8e30, 0x8e31, 0x8e33, - 0x8e34, 0x8e35, 0x8e37, 0x8e38, 0x8e3a, 0x8e3b, 0x8e3d, 0x8e3f, - 0x8e40, 0x8e40, 0x8e40, 0x8e40, 0x8e41, 0x8e41, 0x8e42, 0x8e42, - 0x8e43, 0x8e44, 0x8e45, 0x8e45, 0x8e46, 0x8e47, 0x8e48, 0x8e49, - 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4e, 0x8e4f, 0x8e50, 0x8e51, 0x8e53, - 0x8e54, 0x8e55, 0x8e57, 0x8e58, 0x8e5a, 0x8e5b, 0x8e5d, 0x8e5f, - 0x8e80, 0x8e80, 0x8e80, 0x8e80, 0x8e81, 0x8e81, 0x8e82, 0x8e82, - 0x8e83, 0x8e84, 0x8e85, 0x8e85, 0x8e86, 0x8e87, 0x8e88, 0x8e89, - 0x8e8a, 0x8e8b, 0x8e8c, 0x8e8e, 0x8e8f, 0x8e90, 0x8e91, 0x8e93, - 0x8e94, 0x8e95, 0x8e97, 0x8e98, 0x8e9a, 0x8e9b, 0x8e9d, 0x8e9f, - 0x8ea0, 0x8ea0, 0x8ea0, 0x8ea0, 0x8ea1, 0x8ea1, 0x8ea2, 0x8ea2, - 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, - 0x8eaa, 0x8eab, 0x8eac, 0x8eae, 0x8eaf, 0x8eb0, 0x8eb1, 0x8eb3, - 0x8eb4, 0x8eb5, 0x8eb7, 0x8eb8, 0x8eba, 0x8ebb, 0x8ebd, 0x8ebf, - 0x8ee0, 0x8ee0, 0x8ee0, 0x8ee0, 0x8ee1, 0x8ee1, 0x8ee2, 0x8ee2, - 0x8ee3, 0x8ee4, 0x8ee5, 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, - 0x8eea, 0x8eeb, 0x8eec, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef3, - 0x8ef4, 0x8ef5, 0x8ef7, 0x8ef8, 0x8efa, 0x8efb, 0x8efd, 0x8eff, - 0x8f00, 0x8f00, 0x8f00, 0x8f00, 0x8f01, 0x8f01, 0x8f02, 0x8f02, - 0x8f03, 0x8f04, 0x8f05, 0x8f05, 0x8f06, 0x8f07, 0x8f08, 0x8f09, - 0x8f0a, 0x8f0b, 0x8f0c, 0x8f0e, 0x8f0f, 0x8f10, 0x8f11, 0x8f13, - 0x8f14, 0x8f15, 0x8f17, 0x8f18, 0x8f1a, 0x8f1b, 0x8f1d, 0x8f1f, - 0x8f40, 0x8f40, 0x8f40, 0x8f40, 0x8f41, 0x8f41, 0x8f42, 0x8f42, - 0x8f43, 0x8f44, 0x8f45, 0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, - 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f53, - 0x8f54, 0x8f55, 0x8f57, 0x8f58, 0x8f5a, 0x8f5b, 0x8f5d, 0x8f5f, - 0x8f60, 0x8f60, 0x8f60, 0x8f60, 0x8f61, 0x8f61, 0x8f62, 0x8f62, - 0x8f63, 0x8f64, 0x8f65, 0x8f65, 0x8f66, 0x8f67, 0x8f68, 0x8f69, - 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6e, 0x8f6f, 0x8f70, 0x8f71, 0x8f73, - 0x8f74, 0x8f75, 0x8f77, 0x8f78, 0x8f7a, 0x8f7b, 0x8f7d, 0x8f7f, - 0x8fa0, 0x8fa0, 0x8fa0, 0x8fa0, 0x8fa1, 0x8fa1, 0x8fa2, 0x8fa2, - 0x8fa3, 0x8fa4, 0x8fa5, 0x8fa5, 0x8fa6, 0x8fa7, 0x8fa8, 0x8fa9, - 0x8faa, 0x8fab, 0x8fac, 0x8fae, 0x8faf, 0x8fb0, 0x8fb1, 0x8fb3, - 0x8fb4, 0x8fb5, 0x8fb7, 0x8fb8, 0x8fba, 0x8fbb, 0x8fbd, 0x8fbf, - 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe0, 0x8fe1, 0x8fe1, 0x8fe2, 0x8fe2, - 0x8fe3, 0x8fe4, 0x8fe5, 0x8fe5, 0x8fe6, 0x8fe7, 0x8fe8, 0x8fe9, - 0x8fea, 0x8feb, 0x8fec, 0x8fee, 0x8fef, 0x8ff0, 0x8ff1, 0x8ff3, - 0x8ff4, 0x8ff5, 0x8ff7, 0x8ff8, 0x8ffa, 0x8ffb, 0x8ffd, 0x8fff, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9801, 0x9801, 0x9802, 0x9802, - 0x9803, 0x9804, 0x9805, 0x9805, 0x9806, 0x9807, 0x9808, 0x9809, - 0x980a, 0x980b, 0x980c, 0x980e, 0x980f, 0x9810, 0x9811, 0x9813, - 0x9814, 0x9815, 0x9817, 0x9818, 0x981a, 0x981b, 0x981d, 0x981f, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9801, 0x9801, 0x9802, 0x9802, - 0x9803, 0x9804, 0x9805, 0x9805, 0x9806, 0x9807, 0x9808, 0x9809, - 0x980a, 0x980b, 0x980c, 0x980e, 0x980f, 0x9810, 0x9811, 0x9813, - 0x9814, 0x9815, 0x9817, 0x9818, 0x981a, 0x981b, 0x981d, 0x981f, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9801, 0x9801, 0x9802, 0x9802, - 0x9803, 0x9804, 0x9805, 0x9805, 0x9806, 0x9807, 0x9808, 0x9809, - 0x980a, 0x980b, 0x980c, 0x980e, 0x980f, 0x9810, 0x9811, 0x9813, - 0x9814, 0x9815, 0x9817, 0x9818, 0x981a, 0x981b, 0x981d, 0x981f, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9801, 0x9801, 0x9802, 0x9802, - 0x9803, 0x9804, 0x9805, 0x9805, 0x9806, 0x9807, 0x9808, 0x9809, - 0x980a, 0x980b, 0x980c, 0x980e, 0x980f, 0x9810, 0x9811, 0x9813, - 0x9814, 0x9815, 0x9817, 0x9818, 0x981a, 0x981b, 0x981d, 0x981f, - 0x9800, 0x9800, 0x9800, 0x9800, 0x9801, 0x9801, 0x9802, 0x9802, - 0x9803, 0x9804, 0x9805, 0x9805, 0x9806, 0x9807, 0x9808, 0x9809, - 0x980a, 0x980b, 0x980c, 0x980e, 0x980f, 0x9810, 0x9811, 0x9813, - 0x9814, 0x9815, 0x9817, 0x9818, 0x981a, 0x981b, 0x981d, 0x981f, - 0x9820, 0x9820, 0x9820, 0x9820, 0x9821, 0x9821, 0x9822, 0x9822, - 0x9823, 0x9824, 0x9825, 0x9825, 0x9826, 0x9827, 0x9828, 0x9829, - 0x982a, 0x982b, 0x982c, 0x982e, 0x982f, 0x9830, 0x9831, 0x9833, - 0x9834, 0x9835, 0x9837, 0x9838, 0x983a, 0x983b, 0x983d, 0x983f, - 0x9820, 0x9820, 0x9820, 0x9820, 0x9821, 0x9821, 0x9822, 0x9822, - 0x9823, 0x9824, 0x9825, 0x9825, 0x9826, 0x9827, 0x9828, 0x9829, - 0x982a, 0x982b, 0x982c, 0x982e, 0x982f, 0x9830, 0x9831, 0x9833, - 0x9834, 0x9835, 0x9837, 0x9838, 0x983a, 0x983b, 0x983d, 0x983f, - 0x9820, 0x9820, 0x9820, 0x9820, 0x9821, 0x9821, 0x9822, 0x9822, - 0x9823, 0x9824, 0x9825, 0x9825, 0x9826, 0x9827, 0x9828, 0x9829, - 0x982a, 0x982b, 0x982c, 0x982e, 0x982f, 0x9830, 0x9831, 0x9833, - 0x9834, 0x9835, 0x9837, 0x9838, 0x983a, 0x983b, 0x983d, 0x983f, - 0x9840, 0x9840, 0x9840, 0x9840, 0x9841, 0x9841, 0x9842, 0x9842, - 0x9843, 0x9844, 0x9845, 0x9845, 0x9846, 0x9847, 0x9848, 0x9849, - 0x984a, 0x984b, 0x984c, 0x984e, 0x984f, 0x9850, 0x9851, 0x9853, - 0x9854, 0x9855, 0x9857, 0x9858, 0x985a, 0x985b, 0x985d, 0x985f, - 0x9840, 0x9840, 0x9840, 0x9840, 0x9841, 0x9841, 0x9842, 0x9842, - 0x9843, 0x9844, 0x9845, 0x9845, 0x9846, 0x9847, 0x9848, 0x9849, - 0x984a, 0x984b, 0x984c, 0x984e, 0x984f, 0x9850, 0x9851, 0x9853, - 0x9854, 0x9855, 0x9857, 0x9858, 0x985a, 0x985b, 0x985d, 0x985f, - 0x9860, 0x9860, 0x9860, 0x9860, 0x9861, 0x9861, 0x9862, 0x9862, - 0x9863, 0x9864, 0x9865, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, - 0x986a, 0x986b, 0x986c, 0x986e, 0x986f, 0x9870, 0x9871, 0x9873, - 0x9874, 0x9875, 0x9877, 0x9878, 0x987a, 0x987b, 0x987d, 0x987f, - 0x9860, 0x9860, 0x9860, 0x9860, 0x9861, 0x9861, 0x9862, 0x9862, - 0x9863, 0x9864, 0x9865, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, - 0x986a, 0x986b, 0x986c, 0x986e, 0x986f, 0x9870, 0x9871, 0x9873, - 0x9874, 0x9875, 0x9877, 0x9878, 0x987a, 0x987b, 0x987d, 0x987f, - 0x9880, 0x9880, 0x9880, 0x9880, 0x9881, 0x9881, 0x9882, 0x9882, - 0x9883, 0x9884, 0x9885, 0x9885, 0x9886, 0x9887, 0x9888, 0x9889, - 0x988a, 0x988b, 0x988c, 0x988e, 0x988f, 0x9890, 0x9891, 0x9893, - 0x9894, 0x9895, 0x9897, 0x9898, 0x989a, 0x989b, 0x989d, 0x989f, - 0x98a0, 0x98a0, 0x98a0, 0x98a0, 0x98a1, 0x98a1, 0x98a2, 0x98a2, - 0x98a3, 0x98a4, 0x98a5, 0x98a5, 0x98a6, 0x98a7, 0x98a8, 0x98a9, - 0x98aa, 0x98ab, 0x98ac, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b3, - 0x98b4, 0x98b5, 0x98b7, 0x98b8, 0x98ba, 0x98bb, 0x98bd, 0x98bf, - 0x98a0, 0x98a0, 0x98a0, 0x98a0, 0x98a1, 0x98a1, 0x98a2, 0x98a2, - 0x98a3, 0x98a4, 0x98a5, 0x98a5, 0x98a6, 0x98a7, 0x98a8, 0x98a9, - 0x98aa, 0x98ab, 0x98ac, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b3, - 0x98b4, 0x98b5, 0x98b7, 0x98b8, 0x98ba, 0x98bb, 0x98bd, 0x98bf, - 0x98c0, 0x98c0, 0x98c0, 0x98c0, 0x98c1, 0x98c1, 0x98c2, 0x98c2, - 0x98c3, 0x98c4, 0x98c5, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, - 0x98ca, 0x98cb, 0x98cc, 0x98ce, 0x98cf, 0x98d0, 0x98d1, 0x98d3, - 0x98d4, 0x98d5, 0x98d7, 0x98d8, 0x98da, 0x98db, 0x98dd, 0x98df, - 0x98e0, 0x98e0, 0x98e0, 0x98e0, 0x98e1, 0x98e1, 0x98e2, 0x98e2, - 0x98e3, 0x98e4, 0x98e5, 0x98e5, 0x98e6, 0x98e7, 0x98e8, 0x98e9, - 0x98ea, 0x98eb, 0x98ec, 0x98ee, 0x98ef, 0x98f0, 0x98f1, 0x98f3, - 0x98f4, 0x98f5, 0x98f7, 0x98f8, 0x98fa, 0x98fb, 0x98fd, 0x98ff, - 0x98e0, 0x98e0, 0x98e0, 0x98e0, 0x98e1, 0x98e1, 0x98e2, 0x98e2, - 0x98e3, 0x98e4, 0x98e5, 0x98e5, 0x98e6, 0x98e7, 0x98e8, 0x98e9, - 0x98ea, 0x98eb, 0x98ec, 0x98ee, 0x98ef, 0x98f0, 0x98f1, 0x98f3, - 0x98f4, 0x98f5, 0x98f7, 0x98f8, 0x98fa, 0x98fb, 0x98fd, 0x98ff, - 0x9900, 0x9900, 0x9900, 0x9900, 0x9901, 0x9901, 0x9902, 0x9902, - 0x9903, 0x9904, 0x9905, 0x9905, 0x9906, 0x9907, 0x9908, 0x9909, - 0x990a, 0x990b, 0x990c, 0x990e, 0x990f, 0x9910, 0x9911, 0x9913, - 0x9914, 0x9915, 0x9917, 0x9918, 0x991a, 0x991b, 0x991d, 0x991f, - 0x9920, 0x9920, 0x9920, 0x9920, 0x9921, 0x9921, 0x9922, 0x9922, - 0x9923, 0x9924, 0x9925, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929, - 0x992a, 0x992b, 0x992c, 0x992e, 0x992f, 0x9930, 0x9931, 0x9933, - 0x9934, 0x9935, 0x9937, 0x9938, 0x993a, 0x993b, 0x993d, 0x993f, - 0x9940, 0x9940, 0x9940, 0x9940, 0x9941, 0x9941, 0x9942, 0x9942, - 0x9943, 0x9944, 0x9945, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, - 0x994a, 0x994b, 0x994c, 0x994e, 0x994f, 0x9950, 0x9951, 0x9953, - 0x9954, 0x9955, 0x9957, 0x9958, 0x995a, 0x995b, 0x995d, 0x995f, - 0x9940, 0x9940, 0x9940, 0x9940, 0x9941, 0x9941, 0x9942, 0x9942, - 0x9943, 0x9944, 0x9945, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, - 0x994a, 0x994b, 0x994c, 0x994e, 0x994f, 0x9950, 0x9951, 0x9953, - 0x9954, 0x9955, 0x9957, 0x9958, 0x995a, 0x995b, 0x995d, 0x995f, - 0x9960, 0x9960, 0x9960, 0x9960, 0x9961, 0x9961, 0x9962, 0x9962, - 0x9963, 0x9964, 0x9965, 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, - 0x996a, 0x996b, 0x996c, 0x996e, 0x996f, 0x9970, 0x9971, 0x9973, - 0x9974, 0x9975, 0x9977, 0x9978, 0x997a, 0x997b, 0x997d, 0x997f, - 0x9980, 0x9980, 0x9980, 0x9980, 0x9981, 0x9981, 0x9982, 0x9982, - 0x9983, 0x9984, 0x9985, 0x9985, 0x9986, 0x9987, 0x9988, 0x9989, - 0x998a, 0x998b, 0x998c, 0x998e, 0x998f, 0x9990, 0x9991, 0x9993, - 0x9994, 0x9995, 0x9997, 0x9998, 0x999a, 0x999b, 0x999d, 0x999f, - 0x99a0, 0x99a0, 0x99a0, 0x99a0, 0x99a1, 0x99a1, 0x99a2, 0x99a2, - 0x99a3, 0x99a4, 0x99a5, 0x99a5, 0x99a6, 0x99a7, 0x99a8, 0x99a9, - 0x99aa, 0x99ab, 0x99ac, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b3, - 0x99b4, 0x99b5, 0x99b7, 0x99b8, 0x99ba, 0x99bb, 0x99bd, 0x99bf, - 0x99c0, 0x99c0, 0x99c0, 0x99c0, 0x99c1, 0x99c1, 0x99c2, 0x99c2, - 0x99c3, 0x99c4, 0x99c5, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, - 0x99ca, 0x99cb, 0x99cc, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d3, - 0x99d4, 0x99d5, 0x99d7, 0x99d8, 0x99da, 0x99db, 0x99dd, 0x99df, - 0x99e0, 0x99e0, 0x99e0, 0x99e0, 0x99e1, 0x99e1, 0x99e2, 0x99e2, - 0x99e3, 0x99e4, 0x99e5, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, - 0x99ea, 0x99eb, 0x99ec, 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f3, - 0x99f4, 0x99f5, 0x99f7, 0x99f8, 0x99fa, 0x99fb, 0x99fd, 0x99ff, - 0x9a00, 0x9a00, 0x9a00, 0x9a00, 0x9a01, 0x9a01, 0x9a02, 0x9a02, - 0x9a03, 0x9a04, 0x9a05, 0x9a05, 0x9a06, 0x9a07, 0x9a08, 0x9a09, - 0x9a0a, 0x9a0b, 0x9a0c, 0x9a0e, 0x9a0f, 0x9a10, 0x9a11, 0x9a13, - 0x9a14, 0x9a15, 0x9a17, 0x9a18, 0x9a1a, 0x9a1b, 0x9a1d, 0x9a1f, - 0x9a20, 0x9a20, 0x9a20, 0x9a20, 0x9a21, 0x9a21, 0x9a22, 0x9a22, - 0x9a23, 0x9a24, 0x9a25, 0x9a25, 0x9a26, 0x9a27, 0x9a28, 0x9a29, - 0x9a2a, 0x9a2b, 0x9a2c, 0x9a2e, 0x9a2f, 0x9a30, 0x9a31, 0x9a33, - 0x9a34, 0x9a35, 0x9a37, 0x9a38, 0x9a3a, 0x9a3b, 0x9a3d, 0x9a3f, - 0x9a40, 0x9a40, 0x9a40, 0x9a40, 0x9a41, 0x9a41, 0x9a42, 0x9a42, - 0x9a43, 0x9a44, 0x9a45, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, - 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a53, - 0x9a54, 0x9a55, 0x9a57, 0x9a58, 0x9a5a, 0x9a5b, 0x9a5d, 0x9a5f, - 0x9a60, 0x9a60, 0x9a60, 0x9a60, 0x9a61, 0x9a61, 0x9a62, 0x9a62, - 0x9a63, 0x9a64, 0x9a65, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, - 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6e, 0x9a6f, 0x9a70, 0x9a71, 0x9a73, - 0x9a74, 0x9a75, 0x9a77, 0x9a78, 0x9a7a, 0x9a7b, 0x9a7d, 0x9a7f, - 0x9a80, 0x9a80, 0x9a80, 0x9a80, 0x9a81, 0x9a81, 0x9a82, 0x9a82, - 0x9a83, 0x9a84, 0x9a85, 0x9a85, 0x9a86, 0x9a87, 0x9a88, 0x9a89, - 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8e, 0x9a8f, 0x9a90, 0x9a91, 0x9a93, - 0x9a94, 0x9a95, 0x9a97, 0x9a98, 0x9a9a, 0x9a9b, 0x9a9d, 0x9a9f, - 0x9aa0, 0x9aa0, 0x9aa0, 0x9aa0, 0x9aa1, 0x9aa1, 0x9aa2, 0x9aa2, - 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa5, 0x9aa6, 0x9aa7, 0x9aa8, 0x9aa9, - 0x9aaa, 0x9aab, 0x9aac, 0x9aae, 0x9aaf, 0x9ab0, 0x9ab1, 0x9ab3, - 0x9ab4, 0x9ab5, 0x9ab7, 0x9ab8, 0x9aba, 0x9abb, 0x9abd, 0x9abf, - 0x9ac0, 0x9ac0, 0x9ac0, 0x9ac0, 0x9ac1, 0x9ac1, 0x9ac2, 0x9ac2, - 0x9ac3, 0x9ac4, 0x9ac5, 0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, - 0x9aca, 0x9acb, 0x9acc, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad3, - 0x9ad4, 0x9ad5, 0x9ad7, 0x9ad8, 0x9ada, 0x9adb, 0x9add, 0x9adf, - 0x9ae0, 0x9ae0, 0x9ae0, 0x9ae0, 0x9ae1, 0x9ae1, 0x9ae2, 0x9ae2, - 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae5, 0x9ae6, 0x9ae7, 0x9ae8, 0x9ae9, - 0x9aea, 0x9aeb, 0x9aec, 0x9aee, 0x9aef, 0x9af0, 0x9af1, 0x9af3, - 0x9af4, 0x9af5, 0x9af7, 0x9af8, 0x9afa, 0x9afb, 0x9afd, 0x9aff, - 0x9b00, 0x9b00, 0x9b00, 0x9b00, 0x9b01, 0x9b01, 0x9b02, 0x9b02, - 0x9b03, 0x9b04, 0x9b05, 0x9b05, 0x9b06, 0x9b07, 0x9b08, 0x9b09, - 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0e, 0x9b0f, 0x9b10, 0x9b11, 0x9b13, - 0x9b14, 0x9b15, 0x9b17, 0x9b18, 0x9b1a, 0x9b1b, 0x9b1d, 0x9b1f, - 0x9b20, 0x9b20, 0x9b20, 0x9b20, 0x9b21, 0x9b21, 0x9b22, 0x9b22, - 0x9b23, 0x9b24, 0x9b25, 0x9b25, 0x9b26, 0x9b27, 0x9b28, 0x9b29, - 0x9b2a, 0x9b2b, 0x9b2c, 0x9b2e, 0x9b2f, 0x9b30, 0x9b31, 0x9b33, - 0x9b34, 0x9b35, 0x9b37, 0x9b38, 0x9b3a, 0x9b3b, 0x9b3d, 0x9b3f, - 0x9b40, 0x9b40, 0x9b40, 0x9b40, 0x9b41, 0x9b41, 0x9b42, 0x9b42, - 0x9b43, 0x9b44, 0x9b45, 0x9b45, 0x9b46, 0x9b47, 0x9b48, 0x9b49, - 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4e, 0x9b4f, 0x9b50, 0x9b51, 0x9b53, - 0x9b54, 0x9b55, 0x9b57, 0x9b58, 0x9b5a, 0x9b5b, 0x9b5d, 0x9b5f, - 0x9b80, 0x9b80, 0x9b80, 0x9b80, 0x9b81, 0x9b81, 0x9b82, 0x9b82, - 0x9b83, 0x9b84, 0x9b85, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, - 0x9b8a, 0x9b8b, 0x9b8c, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b93, - 0x9b94, 0x9b95, 0x9b97, 0x9b98, 0x9b9a, 0x9b9b, 0x9b9d, 0x9b9f, - 0x9ba0, 0x9ba0, 0x9ba0, 0x9ba0, 0x9ba1, 0x9ba1, 0x9ba2, 0x9ba2, - 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, - 0x9baa, 0x9bab, 0x9bac, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb3, - 0x9bb4, 0x9bb5, 0x9bb7, 0x9bb8, 0x9bba, 0x9bbb, 0x9bbd, 0x9bbf, - 0x9bc0, 0x9bc0, 0x9bc0, 0x9bc0, 0x9bc1, 0x9bc1, 0x9bc2, 0x9bc2, - 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc5, 0x9bc6, 0x9bc7, 0x9bc8, 0x9bc9, - 0x9bca, 0x9bcb, 0x9bcc, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd3, - 0x9bd4, 0x9bd5, 0x9bd7, 0x9bd8, 0x9bda, 0x9bdb, 0x9bdd, 0x9bdf, - 0x9be0, 0x9be0, 0x9be0, 0x9be0, 0x9be1, 0x9be1, 0x9be2, 0x9be2, - 0x9be3, 0x9be4, 0x9be5, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, - 0x9bea, 0x9beb, 0x9bec, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf3, - 0x9bf4, 0x9bf5, 0x9bf7, 0x9bf8, 0x9bfa, 0x9bfb, 0x9bfd, 0x9bff, - 0x9c00, 0x9c00, 0x9c00, 0x9c00, 0x9c01, 0x9c01, 0x9c02, 0x9c02, - 0x9c03, 0x9c04, 0x9c05, 0x9c05, 0x9c06, 0x9c07, 0x9c08, 0x9c09, - 0x9c0a, 0x9c0b, 0x9c0c, 0x9c0e, 0x9c0f, 0x9c10, 0x9c11, 0x9c13, - 0x9c14, 0x9c15, 0x9c17, 0x9c18, 0x9c1a, 0x9c1b, 0x9c1d, 0x9c1f, - 0x9c40, 0x9c40, 0x9c40, 0x9c40, 0x9c41, 0x9c41, 0x9c42, 0x9c42, - 0x9c43, 0x9c44, 0x9c45, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, - 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c53, - 0x9c54, 0x9c55, 0x9c57, 0x9c58, 0x9c5a, 0x9c5b, 0x9c5d, 0x9c5f, - 0x9c60, 0x9c60, 0x9c60, 0x9c60, 0x9c61, 0x9c61, 0x9c62, 0x9c62, - 0x9c63, 0x9c64, 0x9c65, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, - 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c73, - 0x9c74, 0x9c75, 0x9c77, 0x9c78, 0x9c7a, 0x9c7b, 0x9c7d, 0x9c7f, - 0x9c80, 0x9c80, 0x9c80, 0x9c80, 0x9c81, 0x9c81, 0x9c82, 0x9c82, - 0x9c83, 0x9c84, 0x9c85, 0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x9c89, - 0x9c8a, 0x9c8b, 0x9c8c, 0x9c8e, 0x9c8f, 0x9c90, 0x9c91, 0x9c93, - 0x9c94, 0x9c95, 0x9c97, 0x9c98, 0x9c9a, 0x9c9b, 0x9c9d, 0x9c9f, - 0x9cc0, 0x9cc0, 0x9cc0, 0x9cc0, 0x9cc1, 0x9cc1, 0x9cc2, 0x9cc2, - 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, 0x9cc9, - 0x9cca, 0x9ccb, 0x9ccc, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd1, 0x9cd3, - 0x9cd4, 0x9cd5, 0x9cd7, 0x9cd8, 0x9cda, 0x9cdb, 0x9cdd, 0x9cdf, - 0x9ce0, 0x9ce0, 0x9ce0, 0x9ce0, 0x9ce1, 0x9ce1, 0x9ce2, 0x9ce2, - 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, - 0x9cea, 0x9ceb, 0x9cec, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf3, - 0x9cf4, 0x9cf5, 0x9cf7, 0x9cf8, 0x9cfa, 0x9cfb, 0x9cfd, 0x9cff, - 0x9d00, 0x9d00, 0x9d00, 0x9d00, 0x9d01, 0x9d01, 0x9d02, 0x9d02, - 0x9d03, 0x9d04, 0x9d05, 0x9d05, 0x9d06, 0x9d07, 0x9d08, 0x9d09, - 0x9d0a, 0x9d0b, 0x9d0c, 0x9d0e, 0x9d0f, 0x9d10, 0x9d11, 0x9d13, - 0x9d14, 0x9d15, 0x9d17, 0x9d18, 0x9d1a, 0x9d1b, 0x9d1d, 0x9d1f, - 0x9d40, 0x9d40, 0x9d40, 0x9d40, 0x9d41, 0x9d41, 0x9d42, 0x9d42, - 0x9d43, 0x9d44, 0x9d45, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, - 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d53, - 0x9d54, 0x9d55, 0x9d57, 0x9d58, 0x9d5a, 0x9d5b, 0x9d5d, 0x9d5f, - 0x9d60, 0x9d60, 0x9d60, 0x9d60, 0x9d61, 0x9d61, 0x9d62, 0x9d62, - 0x9d63, 0x9d64, 0x9d65, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, - 0x9d6a, 0x9d6b, 0x9d6c, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d73, - 0x9d74, 0x9d75, 0x9d77, 0x9d78, 0x9d7a, 0x9d7b, 0x9d7d, 0x9d7f, - 0x9d80, 0x9d80, 0x9d80, 0x9d80, 0x9d81, 0x9d81, 0x9d82, 0x9d82, - 0x9d83, 0x9d84, 0x9d85, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, - 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d93, - 0x9d94, 0x9d95, 0x9d97, 0x9d98, 0x9d9a, 0x9d9b, 0x9d9d, 0x9d9f, - 0x9dc0, 0x9dc0, 0x9dc0, 0x9dc0, 0x9dc1, 0x9dc1, 0x9dc2, 0x9dc2, - 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, - 0x9dca, 0x9dcb, 0x9dcc, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd3, - 0x9dd4, 0x9dd5, 0x9dd7, 0x9dd8, 0x9dda, 0x9ddb, 0x9ddd, 0x9ddf, - 0x9de0, 0x9de0, 0x9de0, 0x9de0, 0x9de1, 0x9de1, 0x9de2, 0x9de2, - 0x9de3, 0x9de4, 0x9de5, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, - 0x9dea, 0x9deb, 0x9dec, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df3, - 0x9df4, 0x9df5, 0x9df7, 0x9df8, 0x9dfa, 0x9dfb, 0x9dfd, 0x9dff, - 0x9e20, 0x9e20, 0x9e20, 0x9e20, 0x9e21, 0x9e21, 0x9e22, 0x9e22, - 0x9e23, 0x9e24, 0x9e25, 0x9e25, 0x9e26, 0x9e27, 0x9e28, 0x9e29, - 0x9e2a, 0x9e2b, 0x9e2c, 0x9e2e, 0x9e2f, 0x9e30, 0x9e31, 0x9e33, - 0x9e34, 0x9e35, 0x9e37, 0x9e38, 0x9e3a, 0x9e3b, 0x9e3d, 0x9e3f, - 0x9e40, 0x9e40, 0x9e40, 0x9e40, 0x9e41, 0x9e41, 0x9e42, 0x9e42, - 0x9e43, 0x9e44, 0x9e45, 0x9e45, 0x9e46, 0x9e47, 0x9e48, 0x9e49, - 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e4f, 0x9e50, 0x9e51, 0x9e53, - 0x9e54, 0x9e55, 0x9e57, 0x9e58, 0x9e5a, 0x9e5b, 0x9e5d, 0x9e5f, - 0x9e80, 0x9e80, 0x9e80, 0x9e80, 0x9e81, 0x9e81, 0x9e82, 0x9e82, - 0x9e83, 0x9e84, 0x9e85, 0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, - 0x9e8a, 0x9e8b, 0x9e8c, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e93, - 0x9e94, 0x9e95, 0x9e97, 0x9e98, 0x9e9a, 0x9e9b, 0x9e9d, 0x9e9f, - 0x9ea0, 0x9ea0, 0x9ea0, 0x9ea0, 0x9ea1, 0x9ea1, 0x9ea2, 0x9ea2, - 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, 0x9ea9, - 0x9eaa, 0x9eab, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb3, - 0x9eb4, 0x9eb5, 0x9eb7, 0x9eb8, 0x9eba, 0x9ebb, 0x9ebd, 0x9ebf, - 0x9ee0, 0x9ee0, 0x9ee0, 0x9ee0, 0x9ee1, 0x9ee1, 0x9ee2, 0x9ee2, - 0x9ee3, 0x9ee4, 0x9ee5, 0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, - 0x9eea, 0x9eeb, 0x9eec, 0x9eee, 0x9eef, 0x9ef0, 0x9ef1, 0x9ef3, - 0x9ef4, 0x9ef5, 0x9ef7, 0x9ef8, 0x9efa, 0x9efb, 0x9efd, 0x9eff, - 0x9f00, 0x9f00, 0x9f00, 0x9f00, 0x9f01, 0x9f01, 0x9f02, 0x9f02, - 0x9f03, 0x9f04, 0x9f05, 0x9f05, 0x9f06, 0x9f07, 0x9f08, 0x9f09, - 0x9f0a, 0x9f0b, 0x9f0c, 0x9f0e, 0x9f0f, 0x9f10, 0x9f11, 0x9f13, - 0x9f14, 0x9f15, 0x9f17, 0x9f18, 0x9f1a, 0x9f1b, 0x9f1d, 0x9f1f, - 0x9f40, 0x9f40, 0x9f40, 0x9f40, 0x9f41, 0x9f41, 0x9f42, 0x9f42, - 0x9f43, 0x9f44, 0x9f45, 0x9f45, 0x9f46, 0x9f47, 0x9f48, 0x9f49, - 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4e, 0x9f4f, 0x9f50, 0x9f51, 0x9f53, - 0x9f54, 0x9f55, 0x9f57, 0x9f58, 0x9f5a, 0x9f5b, 0x9f5d, 0x9f5f, - 0x9f60, 0x9f60, 0x9f60, 0x9f60, 0x9f61, 0x9f61, 0x9f62, 0x9f62, - 0x9f63, 0x9f64, 0x9f65, 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69, - 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f73, - 0x9f74, 0x9f75, 0x9f77, 0x9f78, 0x9f7a, 0x9f7b, 0x9f7d, 0x9f7f, - 0x9fa0, 0x9fa0, 0x9fa0, 0x9fa0, 0x9fa1, 0x9fa1, 0x9fa2, 0x9fa2, - 0x9fa3, 0x9fa4, 0x9fa5, 0x9fa5, 0x9fa6, 0x9fa7, 0x9fa8, 0x9fa9, - 0x9faa, 0x9fab, 0x9fac, 0x9fae, 0x9faf, 0x9fb0, 0x9fb1, 0x9fb3, - 0x9fb4, 0x9fb5, 0x9fb7, 0x9fb8, 0x9fba, 0x9fbb, 0x9fbd, 0x9fbf, - 0x9fe0, 0x9fe0, 0x9fe0, 0x9fe0, 0x9fe1, 0x9fe1, 0x9fe2, 0x9fe2, - 0x9fe3, 0x9fe4, 0x9fe5, 0x9fe5, 0x9fe6, 0x9fe7, 0x9fe8, 0x9fe9, - 0x9fea, 0x9feb, 0x9fec, 0x9fee, 0x9fef, 0x9ff0, 0x9ff1, 0x9ff3, - 0x9ff4, 0x9ff5, 0x9ff7, 0x9ff8, 0x9ffa, 0x9ffb, 0x9ffd, 0x9fff, - 0xa000, 0xa000, 0xa000, 0xa000, 0xa001, 0xa001, 0xa002, 0xa002, - 0xa003, 0xa004, 0xa005, 0xa005, 0xa006, 0xa007, 0xa008, 0xa009, - 0xa00a, 0xa00b, 0xa00c, 0xa00e, 0xa00f, 0xa010, 0xa011, 0xa013, - 0xa014, 0xa015, 0xa017, 0xa018, 0xa01a, 0xa01b, 0xa01d, 0xa01f, - 0xa000, 0xa000, 0xa000, 0xa000, 0xa001, 0xa001, 0xa002, 0xa002, - 0xa003, 0xa004, 0xa005, 0xa005, 0xa006, 0xa007, 0xa008, 0xa009, - 0xa00a, 0xa00b, 0xa00c, 0xa00e, 0xa00f, 0xa010, 0xa011, 0xa013, - 0xa014, 0xa015, 0xa017, 0xa018, 0xa01a, 0xa01b, 0xa01d, 0xa01f, - 0xa000, 0xa000, 0xa000, 0xa000, 0xa001, 0xa001, 0xa002, 0xa002, - 0xa003, 0xa004, 0xa005, 0xa005, 0xa006, 0xa007, 0xa008, 0xa009, - 0xa00a, 0xa00b, 0xa00c, 0xa00e, 0xa00f, 0xa010, 0xa011, 0xa013, - 0xa014, 0xa015, 0xa017, 0xa018, 0xa01a, 0xa01b, 0xa01d, 0xa01f, - 0xa000, 0xa000, 0xa000, 0xa000, 0xa001, 0xa001, 0xa002, 0xa002, - 0xa003, 0xa004, 0xa005, 0xa005, 0xa006, 0xa007, 0xa008, 0xa009, - 0xa00a, 0xa00b, 0xa00c, 0xa00e, 0xa00f, 0xa010, 0xa011, 0xa013, - 0xa014, 0xa015, 0xa017, 0xa018, 0xa01a, 0xa01b, 0xa01d, 0xa01f, - 0xa000, 0xa000, 0xa000, 0xa000, 0xa001, 0xa001, 0xa002, 0xa002, - 0xa003, 0xa004, 0xa005, 0xa005, 0xa006, 0xa007, 0xa008, 0xa009, - 0xa00a, 0xa00b, 0xa00c, 0xa00e, 0xa00f, 0xa010, 0xa011, 0xa013, - 0xa014, 0xa015, 0xa017, 0xa018, 0xa01a, 0xa01b, 0xa01d, 0xa01f, - 0xa020, 0xa020, 0xa020, 0xa020, 0xa021, 0xa021, 0xa022, 0xa022, - 0xa023, 0xa024, 0xa025, 0xa025, 0xa026, 0xa027, 0xa028, 0xa029, - 0xa02a, 0xa02b, 0xa02c, 0xa02e, 0xa02f, 0xa030, 0xa031, 0xa033, - 0xa034, 0xa035, 0xa037, 0xa038, 0xa03a, 0xa03b, 0xa03d, 0xa03f, - 0xa020, 0xa020, 0xa020, 0xa020, 0xa021, 0xa021, 0xa022, 0xa022, - 0xa023, 0xa024, 0xa025, 0xa025, 0xa026, 0xa027, 0xa028, 0xa029, - 0xa02a, 0xa02b, 0xa02c, 0xa02e, 0xa02f, 0xa030, 0xa031, 0xa033, - 0xa034, 0xa035, 0xa037, 0xa038, 0xa03a, 0xa03b, 0xa03d, 0xa03f, - 0xa020, 0xa020, 0xa020, 0xa020, 0xa021, 0xa021, 0xa022, 0xa022, - 0xa023, 0xa024, 0xa025, 0xa025, 0xa026, 0xa027, 0xa028, 0xa029, - 0xa02a, 0xa02b, 0xa02c, 0xa02e, 0xa02f, 0xa030, 0xa031, 0xa033, - 0xa034, 0xa035, 0xa037, 0xa038, 0xa03a, 0xa03b, 0xa03d, 0xa03f, - 0xa040, 0xa040, 0xa040, 0xa040, 0xa041, 0xa041, 0xa042, 0xa042, - 0xa043, 0xa044, 0xa045, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, - 0xa04a, 0xa04b, 0xa04c, 0xa04e, 0xa04f, 0xa050, 0xa051, 0xa053, - 0xa054, 0xa055, 0xa057, 0xa058, 0xa05a, 0xa05b, 0xa05d, 0xa05f, - 0xa040, 0xa040, 0xa040, 0xa040, 0xa041, 0xa041, 0xa042, 0xa042, - 0xa043, 0xa044, 0xa045, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, - 0xa04a, 0xa04b, 0xa04c, 0xa04e, 0xa04f, 0xa050, 0xa051, 0xa053, - 0xa054, 0xa055, 0xa057, 0xa058, 0xa05a, 0xa05b, 0xa05d, 0xa05f, - 0xa060, 0xa060, 0xa060, 0xa060, 0xa061, 0xa061, 0xa062, 0xa062, - 0xa063, 0xa064, 0xa065, 0xa065, 0xa066, 0xa067, 0xa068, 0xa069, - 0xa06a, 0xa06b, 0xa06c, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa073, - 0xa074, 0xa075, 0xa077, 0xa078, 0xa07a, 0xa07b, 0xa07d, 0xa07f, - 0xa060, 0xa060, 0xa060, 0xa060, 0xa061, 0xa061, 0xa062, 0xa062, - 0xa063, 0xa064, 0xa065, 0xa065, 0xa066, 0xa067, 0xa068, 0xa069, - 0xa06a, 0xa06b, 0xa06c, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa073, - 0xa074, 0xa075, 0xa077, 0xa078, 0xa07a, 0xa07b, 0xa07d, 0xa07f, - 0xa080, 0xa080, 0xa080, 0xa080, 0xa081, 0xa081, 0xa082, 0xa082, - 0xa083, 0xa084, 0xa085, 0xa085, 0xa086, 0xa087, 0xa088, 0xa089, - 0xa08a, 0xa08b, 0xa08c, 0xa08e, 0xa08f, 0xa090, 0xa091, 0xa093, - 0xa094, 0xa095, 0xa097, 0xa098, 0xa09a, 0xa09b, 0xa09d, 0xa09f, - 0xa0a0, 0xa0a0, 0xa0a0, 0xa0a0, 0xa0a1, 0xa0a1, 0xa0a2, 0xa0a2, - 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8, 0xa0a9, - 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ae, 0xa0af, 0xa0b0, 0xa0b1, 0xa0b3, - 0xa0b4, 0xa0b5, 0xa0b7, 0xa0b8, 0xa0ba, 0xa0bb, 0xa0bd, 0xa0bf, - 0xa0a0, 0xa0a0, 0xa0a0, 0xa0a0, 0xa0a1, 0xa0a1, 0xa0a2, 0xa0a2, - 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8, 0xa0a9, - 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ae, 0xa0af, 0xa0b0, 0xa0b1, 0xa0b3, - 0xa0b4, 0xa0b5, 0xa0b7, 0xa0b8, 0xa0ba, 0xa0bb, 0xa0bd, 0xa0bf, - 0xa0c0, 0xa0c0, 0xa0c0, 0xa0c0, 0xa0c1, 0xa0c1, 0xa0c2, 0xa0c2, - 0xa0c3, 0xa0c4, 0xa0c5, 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8, 0xa0c9, - 0xa0ca, 0xa0cb, 0xa0cc, 0xa0ce, 0xa0cf, 0xa0d0, 0xa0d1, 0xa0d3, - 0xa0d4, 0xa0d5, 0xa0d7, 0xa0d8, 0xa0da, 0xa0db, 0xa0dd, 0xa0df, - 0xa0e0, 0xa0e0, 0xa0e0, 0xa0e0, 0xa0e1, 0xa0e1, 0xa0e2, 0xa0e2, - 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8, 0xa0e9, - 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ee, 0xa0ef, 0xa0f0, 0xa0f1, 0xa0f3, - 0xa0f4, 0xa0f5, 0xa0f7, 0xa0f8, 0xa0fa, 0xa0fb, 0xa0fd, 0xa0ff, - 0xa0e0, 0xa0e0, 0xa0e0, 0xa0e0, 0xa0e1, 0xa0e1, 0xa0e2, 0xa0e2, - 0xa0e3, 0xa0e4, 0xa0e5, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8, 0xa0e9, - 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ee, 0xa0ef, 0xa0f0, 0xa0f1, 0xa0f3, - 0xa0f4, 0xa0f5, 0xa0f7, 0xa0f8, 0xa0fa, 0xa0fb, 0xa0fd, 0xa0ff, - 0xa100, 0xa100, 0xa100, 0xa100, 0xa101, 0xa101, 0xa102, 0xa102, - 0xa103, 0xa104, 0xa105, 0xa105, 0xa106, 0xa107, 0xa108, 0xa109, - 0xa10a, 0xa10b, 0xa10c, 0xa10e, 0xa10f, 0xa110, 0xa111, 0xa113, - 0xa114, 0xa115, 0xa117, 0xa118, 0xa11a, 0xa11b, 0xa11d, 0xa11f, - 0xa120, 0xa120, 0xa120, 0xa120, 0xa121, 0xa121, 0xa122, 0xa122, - 0xa123, 0xa124, 0xa125, 0xa125, 0xa126, 0xa127, 0xa128, 0xa129, - 0xa12a, 0xa12b, 0xa12c, 0xa12e, 0xa12f, 0xa130, 0xa131, 0xa133, - 0xa134, 0xa135, 0xa137, 0xa138, 0xa13a, 0xa13b, 0xa13d, 0xa13f, - 0xa140, 0xa140, 0xa140, 0xa140, 0xa141, 0xa141, 0xa142, 0xa142, - 0xa143, 0xa144, 0xa145, 0xa145, 0xa146, 0xa147, 0xa148, 0xa149, - 0xa14a, 0xa14b, 0xa14c, 0xa14e, 0xa14f, 0xa150, 0xa151, 0xa153, - 0xa154, 0xa155, 0xa157, 0xa158, 0xa15a, 0xa15b, 0xa15d, 0xa15f, - 0xa140, 0xa140, 0xa140, 0xa140, 0xa141, 0xa141, 0xa142, 0xa142, - 0xa143, 0xa144, 0xa145, 0xa145, 0xa146, 0xa147, 0xa148, 0xa149, - 0xa14a, 0xa14b, 0xa14c, 0xa14e, 0xa14f, 0xa150, 0xa151, 0xa153, - 0xa154, 0xa155, 0xa157, 0xa158, 0xa15a, 0xa15b, 0xa15d, 0xa15f, - 0xa160, 0xa160, 0xa160, 0xa160, 0xa161, 0xa161, 0xa162, 0xa162, - 0xa163, 0xa164, 0xa165, 0xa165, 0xa166, 0xa167, 0xa168, 0xa169, - 0xa16a, 0xa16b, 0xa16c, 0xa16e, 0xa16f, 0xa170, 0xa171, 0xa173, - 0xa174, 0xa175, 0xa177, 0xa178, 0xa17a, 0xa17b, 0xa17d, 0xa17f, - 0xa180, 0xa180, 0xa180, 0xa180, 0xa181, 0xa181, 0xa182, 0xa182, - 0xa183, 0xa184, 0xa185, 0xa185, 0xa186, 0xa187, 0xa188, 0xa189, - 0xa18a, 0xa18b, 0xa18c, 0xa18e, 0xa18f, 0xa190, 0xa191, 0xa193, - 0xa194, 0xa195, 0xa197, 0xa198, 0xa19a, 0xa19b, 0xa19d, 0xa19f, - 0xa1a0, 0xa1a0, 0xa1a0, 0xa1a0, 0xa1a1, 0xa1a1, 0xa1a2, 0xa1a2, - 0xa1a3, 0xa1a4, 0xa1a5, 0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8, 0xa1a9, - 0xa1aa, 0xa1ab, 0xa1ac, 0xa1ae, 0xa1af, 0xa1b0, 0xa1b1, 0xa1b3, - 0xa1b4, 0xa1b5, 0xa1b7, 0xa1b8, 0xa1ba, 0xa1bb, 0xa1bd, 0xa1bf, - 0xa1c0, 0xa1c0, 0xa1c0, 0xa1c0, 0xa1c1, 0xa1c1, 0xa1c2, 0xa1c2, - 0xa1c3, 0xa1c4, 0xa1c5, 0xa1c5, 0xa1c6, 0xa1c7, 0xa1c8, 0xa1c9, - 0xa1ca, 0xa1cb, 0xa1cc, 0xa1ce, 0xa1cf, 0xa1d0, 0xa1d1, 0xa1d3, - 0xa1d4, 0xa1d5, 0xa1d7, 0xa1d8, 0xa1da, 0xa1db, 0xa1dd, 0xa1df, - 0xa1e0, 0xa1e0, 0xa1e0, 0xa1e0, 0xa1e1, 0xa1e1, 0xa1e2, 0xa1e2, - 0xa1e3, 0xa1e4, 0xa1e5, 0xa1e5, 0xa1e6, 0xa1e7, 0xa1e8, 0xa1e9, - 0xa1ea, 0xa1eb, 0xa1ec, 0xa1ee, 0xa1ef, 0xa1f0, 0xa1f1, 0xa1f3, - 0xa1f4, 0xa1f5, 0xa1f7, 0xa1f8, 0xa1fa, 0xa1fb, 0xa1fd, 0xa1ff, - 0xa200, 0xa200, 0xa200, 0xa200, 0xa201, 0xa201, 0xa202, 0xa202, - 0xa203, 0xa204, 0xa205, 0xa205, 0xa206, 0xa207, 0xa208, 0xa209, - 0xa20a, 0xa20b, 0xa20c, 0xa20e, 0xa20f, 0xa210, 0xa211, 0xa213, - 0xa214, 0xa215, 0xa217, 0xa218, 0xa21a, 0xa21b, 0xa21d, 0xa21f, - 0xa220, 0xa220, 0xa220, 0xa220, 0xa221, 0xa221, 0xa222, 0xa222, - 0xa223, 0xa224, 0xa225, 0xa225, 0xa226, 0xa227, 0xa228, 0xa229, - 0xa22a, 0xa22b, 0xa22c, 0xa22e, 0xa22f, 0xa230, 0xa231, 0xa233, - 0xa234, 0xa235, 0xa237, 0xa238, 0xa23a, 0xa23b, 0xa23d, 0xa23f, - 0xa240, 0xa240, 0xa240, 0xa240, 0xa241, 0xa241, 0xa242, 0xa242, - 0xa243, 0xa244, 0xa245, 0xa245, 0xa246, 0xa247, 0xa248, 0xa249, - 0xa24a, 0xa24b, 0xa24c, 0xa24e, 0xa24f, 0xa250, 0xa251, 0xa253, - 0xa254, 0xa255, 0xa257, 0xa258, 0xa25a, 0xa25b, 0xa25d, 0xa25f, - 0xa260, 0xa260, 0xa260, 0xa260, 0xa261, 0xa261, 0xa262, 0xa262, - 0xa263, 0xa264, 0xa265, 0xa265, 0xa266, 0xa267, 0xa268, 0xa269, - 0xa26a, 0xa26b, 0xa26c, 0xa26e, 0xa26f, 0xa270, 0xa271, 0xa273, - 0xa274, 0xa275, 0xa277, 0xa278, 0xa27a, 0xa27b, 0xa27d, 0xa27f, - 0xa280, 0xa280, 0xa280, 0xa280, 0xa281, 0xa281, 0xa282, 0xa282, - 0xa283, 0xa284, 0xa285, 0xa285, 0xa286, 0xa287, 0xa288, 0xa289, - 0xa28a, 0xa28b, 0xa28c, 0xa28e, 0xa28f, 0xa290, 0xa291, 0xa293, - 0xa294, 0xa295, 0xa297, 0xa298, 0xa29a, 0xa29b, 0xa29d, 0xa29f, - 0xa2a0, 0xa2a0, 0xa2a0, 0xa2a0, 0xa2a1, 0xa2a1, 0xa2a2, 0xa2a2, - 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a5, 0xa2a6, 0xa2a7, 0xa2a8, 0xa2a9, - 0xa2aa, 0xa2ab, 0xa2ac, 0xa2ae, 0xa2af, 0xa2b0, 0xa2b1, 0xa2b3, - 0xa2b4, 0xa2b5, 0xa2b7, 0xa2b8, 0xa2ba, 0xa2bb, 0xa2bd, 0xa2bf, - 0xa2c0, 0xa2c0, 0xa2c0, 0xa2c0, 0xa2c1, 0xa2c1, 0xa2c2, 0xa2c2, - 0xa2c3, 0xa2c4, 0xa2c5, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, - 0xa2ca, 0xa2cb, 0xa2cc, 0xa2ce, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d3, - 0xa2d4, 0xa2d5, 0xa2d7, 0xa2d8, 0xa2da, 0xa2db, 0xa2dd, 0xa2df, - 0xa2e0, 0xa2e0, 0xa2e0, 0xa2e0, 0xa2e1, 0xa2e1, 0xa2e2, 0xa2e2, - 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa2e9, - 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ee, 0xa2ef, 0xa2f0, 0xa2f1, 0xa2f3, - 0xa2f4, 0xa2f5, 0xa2f7, 0xa2f8, 0xa2fa, 0xa2fb, 0xa2fd, 0xa2ff, - 0xa300, 0xa300, 0xa300, 0xa300, 0xa301, 0xa301, 0xa302, 0xa302, - 0xa303, 0xa304, 0xa305, 0xa305, 0xa306, 0xa307, 0xa308, 0xa309, - 0xa30a, 0xa30b, 0xa30c, 0xa30e, 0xa30f, 0xa310, 0xa311, 0xa313, - 0xa314, 0xa315, 0xa317, 0xa318, 0xa31a, 0xa31b, 0xa31d, 0xa31f, - 0xa320, 0xa320, 0xa320, 0xa320, 0xa321, 0xa321, 0xa322, 0xa322, - 0xa323, 0xa324, 0xa325, 0xa325, 0xa326, 0xa327, 0xa328, 0xa329, - 0xa32a, 0xa32b, 0xa32c, 0xa32e, 0xa32f, 0xa330, 0xa331, 0xa333, - 0xa334, 0xa335, 0xa337, 0xa338, 0xa33a, 0xa33b, 0xa33d, 0xa33f, - 0xa340, 0xa340, 0xa340, 0xa340, 0xa341, 0xa341, 0xa342, 0xa342, - 0xa343, 0xa344, 0xa345, 0xa345, 0xa346, 0xa347, 0xa348, 0xa349, - 0xa34a, 0xa34b, 0xa34c, 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa353, - 0xa354, 0xa355, 0xa357, 0xa358, 0xa35a, 0xa35b, 0xa35d, 0xa35f, - 0xa380, 0xa380, 0xa380, 0xa380, 0xa381, 0xa381, 0xa382, 0xa382, - 0xa383, 0xa384, 0xa385, 0xa385, 0xa386, 0xa387, 0xa388, 0xa389, - 0xa38a, 0xa38b, 0xa38c, 0xa38e, 0xa38f, 0xa390, 0xa391, 0xa393, - 0xa394, 0xa395, 0xa397, 0xa398, 0xa39a, 0xa39b, 0xa39d, 0xa39f, - 0xa3a0, 0xa3a0, 0xa3a0, 0xa3a0, 0xa3a1, 0xa3a1, 0xa3a2, 0xa3a2, - 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8, 0xa3a9, - 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ae, 0xa3af, 0xa3b0, 0xa3b1, 0xa3b3, - 0xa3b4, 0xa3b5, 0xa3b7, 0xa3b8, 0xa3ba, 0xa3bb, 0xa3bd, 0xa3bf, - 0xa3c0, 0xa3c0, 0xa3c0, 0xa3c0, 0xa3c1, 0xa3c1, 0xa3c2, 0xa3c2, - 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c5, 0xa3c6, 0xa3c7, 0xa3c8, 0xa3c9, - 0xa3ca, 0xa3cb, 0xa3cc, 0xa3ce, 0xa3cf, 0xa3d0, 0xa3d1, 0xa3d3, - 0xa3d4, 0xa3d5, 0xa3d7, 0xa3d8, 0xa3da, 0xa3db, 0xa3dd, 0xa3df, - 0xa3e0, 0xa3e0, 0xa3e0, 0xa3e0, 0xa3e1, 0xa3e1, 0xa3e2, 0xa3e2, - 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e5, 0xa3e6, 0xa3e7, 0xa3e8, 0xa3e9, - 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ee, 0xa3ef, 0xa3f0, 0xa3f1, 0xa3f3, - 0xa3f4, 0xa3f5, 0xa3f7, 0xa3f8, 0xa3fa, 0xa3fb, 0xa3fd, 0xa3ff, - 0xa400, 0xa400, 0xa400, 0xa400, 0xa401, 0xa401, 0xa402, 0xa402, - 0xa403, 0xa404, 0xa405, 0xa405, 0xa406, 0xa407, 0xa408, 0xa409, - 0xa40a, 0xa40b, 0xa40c, 0xa40e, 0xa40f, 0xa410, 0xa411, 0xa413, - 0xa414, 0xa415, 0xa417, 0xa418, 0xa41a, 0xa41b, 0xa41d, 0xa41f, - 0xa440, 0xa440, 0xa440, 0xa440, 0xa441, 0xa441, 0xa442, 0xa442, - 0xa443, 0xa444, 0xa445, 0xa445, 0xa446, 0xa447, 0xa448, 0xa449, - 0xa44a, 0xa44b, 0xa44c, 0xa44e, 0xa44f, 0xa450, 0xa451, 0xa453, - 0xa454, 0xa455, 0xa457, 0xa458, 0xa45a, 0xa45b, 0xa45d, 0xa45f, - 0xa460, 0xa460, 0xa460, 0xa460, 0xa461, 0xa461, 0xa462, 0xa462, - 0xa463, 0xa464, 0xa465, 0xa465, 0xa466, 0xa467, 0xa468, 0xa469, - 0xa46a, 0xa46b, 0xa46c, 0xa46e, 0xa46f, 0xa470, 0xa471, 0xa473, - 0xa474, 0xa475, 0xa477, 0xa478, 0xa47a, 0xa47b, 0xa47d, 0xa47f, - 0xa480, 0xa480, 0xa480, 0xa480, 0xa481, 0xa481, 0xa482, 0xa482, - 0xa483, 0xa484, 0xa485, 0xa485, 0xa486, 0xa487, 0xa488, 0xa489, - 0xa48a, 0xa48b, 0xa48c, 0xa48e, 0xa48f, 0xa490, 0xa491, 0xa493, - 0xa494, 0xa495, 0xa497, 0xa498, 0xa49a, 0xa49b, 0xa49d, 0xa49f, - 0xa4c0, 0xa4c0, 0xa4c0, 0xa4c0, 0xa4c1, 0xa4c1, 0xa4c2, 0xa4c2, - 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c5, 0xa4c6, 0xa4c7, 0xa4c8, 0xa4c9, - 0xa4ca, 0xa4cb, 0xa4cc, 0xa4ce, 0xa4cf, 0xa4d0, 0xa4d1, 0xa4d3, - 0xa4d4, 0xa4d5, 0xa4d7, 0xa4d8, 0xa4da, 0xa4db, 0xa4dd, 0xa4df, - 0xa4e0, 0xa4e0, 0xa4e0, 0xa4e0, 0xa4e1, 0xa4e1, 0xa4e2, 0xa4e2, - 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e5, 0xa4e6, 0xa4e7, 0xa4e8, 0xa4e9, - 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ee, 0xa4ef, 0xa4f0, 0xa4f1, 0xa4f3, - 0xa4f4, 0xa4f5, 0xa4f7, 0xa4f8, 0xa4fa, 0xa4fb, 0xa4fd, 0xa4ff, - 0xa500, 0xa500, 0xa500, 0xa500, 0xa501, 0xa501, 0xa502, 0xa502, - 0xa503, 0xa504, 0xa505, 0xa505, 0xa506, 0xa507, 0xa508, 0xa509, - 0xa50a, 0xa50b, 0xa50c, 0xa50e, 0xa50f, 0xa510, 0xa511, 0xa513, - 0xa514, 0xa515, 0xa517, 0xa518, 0xa51a, 0xa51b, 0xa51d, 0xa51f, - 0xa540, 0xa540, 0xa540, 0xa540, 0xa541, 0xa541, 0xa542, 0xa542, - 0xa543, 0xa544, 0xa545, 0xa545, 0xa546, 0xa547, 0xa548, 0xa549, - 0xa54a, 0xa54b, 0xa54c, 0xa54e, 0xa54f, 0xa550, 0xa551, 0xa553, - 0xa554, 0xa555, 0xa557, 0xa558, 0xa55a, 0xa55b, 0xa55d, 0xa55f, - 0xa560, 0xa560, 0xa560, 0xa560, 0xa561, 0xa561, 0xa562, 0xa562, - 0xa563, 0xa564, 0xa565, 0xa565, 0xa566, 0xa567, 0xa568, 0xa569, - 0xa56a, 0xa56b, 0xa56c, 0xa56e, 0xa56f, 0xa570, 0xa571, 0xa573, - 0xa574, 0xa575, 0xa577, 0xa578, 0xa57a, 0xa57b, 0xa57d, 0xa57f, - 0xa580, 0xa580, 0xa580, 0xa580, 0xa581, 0xa581, 0xa582, 0xa582, - 0xa583, 0xa584, 0xa585, 0xa585, 0xa586, 0xa587, 0xa588, 0xa589, - 0xa58a, 0xa58b, 0xa58c, 0xa58e, 0xa58f, 0xa590, 0xa591, 0xa593, - 0xa594, 0xa595, 0xa597, 0xa598, 0xa59a, 0xa59b, 0xa59d, 0xa59f, - 0xa5c0, 0xa5c0, 0xa5c0, 0xa5c0, 0xa5c1, 0xa5c1, 0xa5c2, 0xa5c2, - 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c5, 0xa5c6, 0xa5c7, 0xa5c8, 0xa5c9, - 0xa5ca, 0xa5cb, 0xa5cc, 0xa5ce, 0xa5cf, 0xa5d0, 0xa5d1, 0xa5d3, - 0xa5d4, 0xa5d5, 0xa5d7, 0xa5d8, 0xa5da, 0xa5db, 0xa5dd, 0xa5df, - 0xa5e0, 0xa5e0, 0xa5e0, 0xa5e0, 0xa5e1, 0xa5e1, 0xa5e2, 0xa5e2, - 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e5, 0xa5e6, 0xa5e7, 0xa5e8, 0xa5e9, - 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ee, 0xa5ef, 0xa5f0, 0xa5f1, 0xa5f3, - 0xa5f4, 0xa5f5, 0xa5f7, 0xa5f8, 0xa5fa, 0xa5fb, 0xa5fd, 0xa5ff, - 0xa620, 0xa620, 0xa620, 0xa620, 0xa621, 0xa621, 0xa622, 0xa622, - 0xa623, 0xa624, 0xa625, 0xa625, 0xa626, 0xa627, 0xa628, 0xa629, - 0xa62a, 0xa62b, 0xa62c, 0xa62e, 0xa62f, 0xa630, 0xa631, 0xa633, - 0xa634, 0xa635, 0xa637, 0xa638, 0xa63a, 0xa63b, 0xa63d, 0xa63f, - 0xa640, 0xa640, 0xa640, 0xa640, 0xa641, 0xa641, 0xa642, 0xa642, - 0xa643, 0xa644, 0xa645, 0xa645, 0xa646, 0xa647, 0xa648, 0xa649, - 0xa64a, 0xa64b, 0xa64c, 0xa64e, 0xa64f, 0xa650, 0xa651, 0xa653, - 0xa654, 0xa655, 0xa657, 0xa658, 0xa65a, 0xa65b, 0xa65d, 0xa65f, - 0xa680, 0xa680, 0xa680, 0xa680, 0xa681, 0xa681, 0xa682, 0xa682, - 0xa683, 0xa684, 0xa685, 0xa685, 0xa686, 0xa687, 0xa688, 0xa689, - 0xa68a, 0xa68b, 0xa68c, 0xa68e, 0xa68f, 0xa690, 0xa691, 0xa693, - 0xa694, 0xa695, 0xa697, 0xa698, 0xa69a, 0xa69b, 0xa69d, 0xa69f, - 0xa6a0, 0xa6a0, 0xa6a0, 0xa6a0, 0xa6a1, 0xa6a1, 0xa6a2, 0xa6a2, - 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a5, 0xa6a6, 0xa6a7, 0xa6a8, 0xa6a9, - 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ae, 0xa6af, 0xa6b0, 0xa6b1, 0xa6b3, - 0xa6b4, 0xa6b5, 0xa6b7, 0xa6b8, 0xa6ba, 0xa6bb, 0xa6bd, 0xa6bf, - 0xa6e0, 0xa6e0, 0xa6e0, 0xa6e0, 0xa6e1, 0xa6e1, 0xa6e2, 0xa6e2, - 0xa6e3, 0xa6e4, 0xa6e5, 0xa6e5, 0xa6e6, 0xa6e7, 0xa6e8, 0xa6e9, - 0xa6ea, 0xa6eb, 0xa6ec, 0xa6ee, 0xa6ef, 0xa6f0, 0xa6f1, 0xa6f3, - 0xa6f4, 0xa6f5, 0xa6f7, 0xa6f8, 0xa6fa, 0xa6fb, 0xa6fd, 0xa6ff, - 0xa700, 0xa700, 0xa700, 0xa700, 0xa701, 0xa701, 0xa702, 0xa702, - 0xa703, 0xa704, 0xa705, 0xa705, 0xa706, 0xa707, 0xa708, 0xa709, - 0xa70a, 0xa70b, 0xa70c, 0xa70e, 0xa70f, 0xa710, 0xa711, 0xa713, - 0xa714, 0xa715, 0xa717, 0xa718, 0xa71a, 0xa71b, 0xa71d, 0xa71f, - 0xa740, 0xa740, 0xa740, 0xa740, 0xa741, 0xa741, 0xa742, 0xa742, - 0xa743, 0xa744, 0xa745, 0xa745, 0xa746, 0xa747, 0xa748, 0xa749, - 0xa74a, 0xa74b, 0xa74c, 0xa74e, 0xa74f, 0xa750, 0xa751, 0xa753, - 0xa754, 0xa755, 0xa757, 0xa758, 0xa75a, 0xa75b, 0xa75d, 0xa75f, - 0xa760, 0xa760, 0xa760, 0xa760, 0xa761, 0xa761, 0xa762, 0xa762, - 0xa763, 0xa764, 0xa765, 0xa765, 0xa766, 0xa767, 0xa768, 0xa769, - 0xa76a, 0xa76b, 0xa76c, 0xa76e, 0xa76f, 0xa770, 0xa771, 0xa773, - 0xa774, 0xa775, 0xa777, 0xa778, 0xa77a, 0xa77b, 0xa77d, 0xa77f, - 0xa7a0, 0xa7a0, 0xa7a0, 0xa7a0, 0xa7a1, 0xa7a1, 0xa7a2, 0xa7a2, - 0xa7a3, 0xa7a4, 0xa7a5, 0xa7a5, 0xa7a6, 0xa7a7, 0xa7a8, 0xa7a9, - 0xa7aa, 0xa7ab, 0xa7ac, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, 0xa7b3, - 0xa7b4, 0xa7b5, 0xa7b7, 0xa7b8, 0xa7ba, 0xa7bb, 0xa7bd, 0xa7bf, - 0xa7e0, 0xa7e0, 0xa7e0, 0xa7e0, 0xa7e1, 0xa7e1, 0xa7e2, 0xa7e2, - 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, - 0xa7ea, 0xa7eb, 0xa7ec, 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, 0xa7f3, - 0xa7f4, 0xa7f5, 0xa7f7, 0xa7f8, 0xa7fa, 0xa7fb, 0xa7fd, 0xa7ff, - 0xa800, 0xa800, 0xa800, 0xa800, 0xa801, 0xa801, 0xa802, 0xa802, - 0xa803, 0xa804, 0xa805, 0xa805, 0xa806, 0xa807, 0xa808, 0xa809, - 0xa80a, 0xa80b, 0xa80c, 0xa80e, 0xa80f, 0xa810, 0xa811, 0xa813, - 0xa814, 0xa815, 0xa817, 0xa818, 0xa81a, 0xa81b, 0xa81d, 0xa81f, - 0xa800, 0xa800, 0xa800, 0xa800, 0xa801, 0xa801, 0xa802, 0xa802, - 0xa803, 0xa804, 0xa805, 0xa805, 0xa806, 0xa807, 0xa808, 0xa809, - 0xa80a, 0xa80b, 0xa80c, 0xa80e, 0xa80f, 0xa810, 0xa811, 0xa813, - 0xa814, 0xa815, 0xa817, 0xa818, 0xa81a, 0xa81b, 0xa81d, 0xa81f, - 0xa800, 0xa800, 0xa800, 0xa800, 0xa801, 0xa801, 0xa802, 0xa802, - 0xa803, 0xa804, 0xa805, 0xa805, 0xa806, 0xa807, 0xa808, 0xa809, - 0xa80a, 0xa80b, 0xa80c, 0xa80e, 0xa80f, 0xa810, 0xa811, 0xa813, - 0xa814, 0xa815, 0xa817, 0xa818, 0xa81a, 0xa81b, 0xa81d, 0xa81f, - 0xa800, 0xa800, 0xa800, 0xa800, 0xa801, 0xa801, 0xa802, 0xa802, - 0xa803, 0xa804, 0xa805, 0xa805, 0xa806, 0xa807, 0xa808, 0xa809, - 0xa80a, 0xa80b, 0xa80c, 0xa80e, 0xa80f, 0xa810, 0xa811, 0xa813, - 0xa814, 0xa815, 0xa817, 0xa818, 0xa81a, 0xa81b, 0xa81d, 0xa81f, - 0xa800, 0xa800, 0xa800, 0xa800, 0xa801, 0xa801, 0xa802, 0xa802, - 0xa803, 0xa804, 0xa805, 0xa805, 0xa806, 0xa807, 0xa808, 0xa809, - 0xa80a, 0xa80b, 0xa80c, 0xa80e, 0xa80f, 0xa810, 0xa811, 0xa813, - 0xa814, 0xa815, 0xa817, 0xa818, 0xa81a, 0xa81b, 0xa81d, 0xa81f, - 0xa820, 0xa820, 0xa820, 0xa820, 0xa821, 0xa821, 0xa822, 0xa822, - 0xa823, 0xa824, 0xa825, 0xa825, 0xa826, 0xa827, 0xa828, 0xa829, - 0xa82a, 0xa82b, 0xa82c, 0xa82e, 0xa82f, 0xa830, 0xa831, 0xa833, - 0xa834, 0xa835, 0xa837, 0xa838, 0xa83a, 0xa83b, 0xa83d, 0xa83f, - 0xa820, 0xa820, 0xa820, 0xa820, 0xa821, 0xa821, 0xa822, 0xa822, - 0xa823, 0xa824, 0xa825, 0xa825, 0xa826, 0xa827, 0xa828, 0xa829, - 0xa82a, 0xa82b, 0xa82c, 0xa82e, 0xa82f, 0xa830, 0xa831, 0xa833, - 0xa834, 0xa835, 0xa837, 0xa838, 0xa83a, 0xa83b, 0xa83d, 0xa83f, - 0xa820, 0xa820, 0xa820, 0xa820, 0xa821, 0xa821, 0xa822, 0xa822, - 0xa823, 0xa824, 0xa825, 0xa825, 0xa826, 0xa827, 0xa828, 0xa829, - 0xa82a, 0xa82b, 0xa82c, 0xa82e, 0xa82f, 0xa830, 0xa831, 0xa833, - 0xa834, 0xa835, 0xa837, 0xa838, 0xa83a, 0xa83b, 0xa83d, 0xa83f, - 0xa840, 0xa840, 0xa840, 0xa840, 0xa841, 0xa841, 0xa842, 0xa842, - 0xa843, 0xa844, 0xa845, 0xa845, 0xa846, 0xa847, 0xa848, 0xa849, - 0xa84a, 0xa84b, 0xa84c, 0xa84e, 0xa84f, 0xa850, 0xa851, 0xa853, - 0xa854, 0xa855, 0xa857, 0xa858, 0xa85a, 0xa85b, 0xa85d, 0xa85f, - 0xa840, 0xa840, 0xa840, 0xa840, 0xa841, 0xa841, 0xa842, 0xa842, - 0xa843, 0xa844, 0xa845, 0xa845, 0xa846, 0xa847, 0xa848, 0xa849, - 0xa84a, 0xa84b, 0xa84c, 0xa84e, 0xa84f, 0xa850, 0xa851, 0xa853, - 0xa854, 0xa855, 0xa857, 0xa858, 0xa85a, 0xa85b, 0xa85d, 0xa85f, - 0xa860, 0xa860, 0xa860, 0xa860, 0xa861, 0xa861, 0xa862, 0xa862, - 0xa863, 0xa864, 0xa865, 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, - 0xa86a, 0xa86b, 0xa86c, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa873, - 0xa874, 0xa875, 0xa877, 0xa878, 0xa87a, 0xa87b, 0xa87d, 0xa87f, - 0xa860, 0xa860, 0xa860, 0xa860, 0xa861, 0xa861, 0xa862, 0xa862, - 0xa863, 0xa864, 0xa865, 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, - 0xa86a, 0xa86b, 0xa86c, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa873, - 0xa874, 0xa875, 0xa877, 0xa878, 0xa87a, 0xa87b, 0xa87d, 0xa87f, - 0xa880, 0xa880, 0xa880, 0xa880, 0xa881, 0xa881, 0xa882, 0xa882, - 0xa883, 0xa884, 0xa885, 0xa885, 0xa886, 0xa887, 0xa888, 0xa889, - 0xa88a, 0xa88b, 0xa88c, 0xa88e, 0xa88f, 0xa890, 0xa891, 0xa893, - 0xa894, 0xa895, 0xa897, 0xa898, 0xa89a, 0xa89b, 0xa89d, 0xa89f, - 0xa8a0, 0xa8a0, 0xa8a0, 0xa8a0, 0xa8a1, 0xa8a1, 0xa8a2, 0xa8a2, - 0xa8a3, 0xa8a4, 0xa8a5, 0xa8a5, 0xa8a6, 0xa8a7, 0xa8a8, 0xa8a9, - 0xa8aa, 0xa8ab, 0xa8ac, 0xa8ae, 0xa8af, 0xa8b0, 0xa8b1, 0xa8b3, - 0xa8b4, 0xa8b5, 0xa8b7, 0xa8b8, 0xa8ba, 0xa8bb, 0xa8bd, 0xa8bf, - 0xa8a0, 0xa8a0, 0xa8a0, 0xa8a0, 0xa8a1, 0xa8a1, 0xa8a2, 0xa8a2, - 0xa8a3, 0xa8a4, 0xa8a5, 0xa8a5, 0xa8a6, 0xa8a7, 0xa8a8, 0xa8a9, - 0xa8aa, 0xa8ab, 0xa8ac, 0xa8ae, 0xa8af, 0xa8b0, 0xa8b1, 0xa8b3, - 0xa8b4, 0xa8b5, 0xa8b7, 0xa8b8, 0xa8ba, 0xa8bb, 0xa8bd, 0xa8bf, - 0xa8c0, 0xa8c0, 0xa8c0, 0xa8c0, 0xa8c1, 0xa8c1, 0xa8c2, 0xa8c2, - 0xa8c3, 0xa8c4, 0xa8c5, 0xa8c5, 0xa8c6, 0xa8c7, 0xa8c8, 0xa8c9, - 0xa8ca, 0xa8cb, 0xa8cc, 0xa8ce, 0xa8cf, 0xa8d0, 0xa8d1, 0xa8d3, - 0xa8d4, 0xa8d5, 0xa8d7, 0xa8d8, 0xa8da, 0xa8db, 0xa8dd, 0xa8df, - 0xa8e0, 0xa8e0, 0xa8e0, 0xa8e0, 0xa8e1, 0xa8e1, 0xa8e2, 0xa8e2, - 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e5, 0xa8e6, 0xa8e7, 0xa8e8, 0xa8e9, - 0xa8ea, 0xa8eb, 0xa8ec, 0xa8ee, 0xa8ef, 0xa8f0, 0xa8f1, 0xa8f3, - 0xa8f4, 0xa8f5, 0xa8f7, 0xa8f8, 0xa8fa, 0xa8fb, 0xa8fd, 0xa8ff, - 0xa8e0, 0xa8e0, 0xa8e0, 0xa8e0, 0xa8e1, 0xa8e1, 0xa8e2, 0xa8e2, - 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e5, 0xa8e6, 0xa8e7, 0xa8e8, 0xa8e9, - 0xa8ea, 0xa8eb, 0xa8ec, 0xa8ee, 0xa8ef, 0xa8f0, 0xa8f1, 0xa8f3, - 0xa8f4, 0xa8f5, 0xa8f7, 0xa8f8, 0xa8fa, 0xa8fb, 0xa8fd, 0xa8ff, - 0xa900, 0xa900, 0xa900, 0xa900, 0xa901, 0xa901, 0xa902, 0xa902, - 0xa903, 0xa904, 0xa905, 0xa905, 0xa906, 0xa907, 0xa908, 0xa909, - 0xa90a, 0xa90b, 0xa90c, 0xa90e, 0xa90f, 0xa910, 0xa911, 0xa913, - 0xa914, 0xa915, 0xa917, 0xa918, 0xa91a, 0xa91b, 0xa91d, 0xa91f, - 0xa920, 0xa920, 0xa920, 0xa920, 0xa921, 0xa921, 0xa922, 0xa922, - 0xa923, 0xa924, 0xa925, 0xa925, 0xa926, 0xa927, 0xa928, 0xa929, - 0xa92a, 0xa92b, 0xa92c, 0xa92e, 0xa92f, 0xa930, 0xa931, 0xa933, - 0xa934, 0xa935, 0xa937, 0xa938, 0xa93a, 0xa93b, 0xa93d, 0xa93f, - 0xa940, 0xa940, 0xa940, 0xa940, 0xa941, 0xa941, 0xa942, 0xa942, - 0xa943, 0xa944, 0xa945, 0xa945, 0xa946, 0xa947, 0xa948, 0xa949, - 0xa94a, 0xa94b, 0xa94c, 0xa94e, 0xa94f, 0xa950, 0xa951, 0xa953, - 0xa954, 0xa955, 0xa957, 0xa958, 0xa95a, 0xa95b, 0xa95d, 0xa95f, - 0xa940, 0xa940, 0xa940, 0xa940, 0xa941, 0xa941, 0xa942, 0xa942, - 0xa943, 0xa944, 0xa945, 0xa945, 0xa946, 0xa947, 0xa948, 0xa949, - 0xa94a, 0xa94b, 0xa94c, 0xa94e, 0xa94f, 0xa950, 0xa951, 0xa953, - 0xa954, 0xa955, 0xa957, 0xa958, 0xa95a, 0xa95b, 0xa95d, 0xa95f, - 0xa960, 0xa960, 0xa960, 0xa960, 0xa961, 0xa961, 0xa962, 0xa962, - 0xa963, 0xa964, 0xa965, 0xa965, 0xa966, 0xa967, 0xa968, 0xa969, - 0xa96a, 0xa96b, 0xa96c, 0xa96e, 0xa96f, 0xa970, 0xa971, 0xa973, - 0xa974, 0xa975, 0xa977, 0xa978, 0xa97a, 0xa97b, 0xa97d, 0xa97f, - 0xa980, 0xa980, 0xa980, 0xa980, 0xa981, 0xa981, 0xa982, 0xa982, - 0xa983, 0xa984, 0xa985, 0xa985, 0xa986, 0xa987, 0xa988, 0xa989, - 0xa98a, 0xa98b, 0xa98c, 0xa98e, 0xa98f, 0xa990, 0xa991, 0xa993, - 0xa994, 0xa995, 0xa997, 0xa998, 0xa99a, 0xa99b, 0xa99d, 0xa99f, - 0xa9a0, 0xa9a0, 0xa9a0, 0xa9a0, 0xa9a1, 0xa9a1, 0xa9a2, 0xa9a2, - 0xa9a3, 0xa9a4, 0xa9a5, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9, - 0xa9aa, 0xa9ab, 0xa9ac, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1, 0xa9b3, - 0xa9b4, 0xa9b5, 0xa9b7, 0xa9b8, 0xa9ba, 0xa9bb, 0xa9bd, 0xa9bf, - 0xa9c0, 0xa9c0, 0xa9c0, 0xa9c0, 0xa9c1, 0xa9c1, 0xa9c2, 0xa9c2, - 0xa9c3, 0xa9c4, 0xa9c5, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, - 0xa9ca, 0xa9cb, 0xa9cc, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, 0xa9d3, - 0xa9d4, 0xa9d5, 0xa9d7, 0xa9d8, 0xa9da, 0xa9db, 0xa9dd, 0xa9df, - 0xa9e0, 0xa9e0, 0xa9e0, 0xa9e0, 0xa9e1, 0xa9e1, 0xa9e2, 0xa9e2, - 0xa9e3, 0xa9e4, 0xa9e5, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9, - 0xa9ea, 0xa9eb, 0xa9ec, 0xa9ee, 0xa9ef, 0xa9f0, 0xa9f1, 0xa9f3, - 0xa9f4, 0xa9f5, 0xa9f7, 0xa9f8, 0xa9fa, 0xa9fb, 0xa9fd, 0xa9ff, - 0xaa00, 0xaa00, 0xaa00, 0xaa00, 0xaa01, 0xaa01, 0xaa02, 0xaa02, - 0xaa03, 0xaa04, 0xaa05, 0xaa05, 0xaa06, 0xaa07, 0xaa08, 0xaa09, - 0xaa0a, 0xaa0b, 0xaa0c, 0xaa0e, 0xaa0f, 0xaa10, 0xaa11, 0xaa13, - 0xaa14, 0xaa15, 0xaa17, 0xaa18, 0xaa1a, 0xaa1b, 0xaa1d, 0xaa1f, - 0xaa20, 0xaa20, 0xaa20, 0xaa20, 0xaa21, 0xaa21, 0xaa22, 0xaa22, - 0xaa23, 0xaa24, 0xaa25, 0xaa25, 0xaa26, 0xaa27, 0xaa28, 0xaa29, - 0xaa2a, 0xaa2b, 0xaa2c, 0xaa2e, 0xaa2f, 0xaa30, 0xaa31, 0xaa33, - 0xaa34, 0xaa35, 0xaa37, 0xaa38, 0xaa3a, 0xaa3b, 0xaa3d, 0xaa3f, - 0xaa40, 0xaa40, 0xaa40, 0xaa40, 0xaa41, 0xaa41, 0xaa42, 0xaa42, - 0xaa43, 0xaa44, 0xaa45, 0xaa45, 0xaa46, 0xaa47, 0xaa48, 0xaa49, - 0xaa4a, 0xaa4b, 0xaa4c, 0xaa4e, 0xaa4f, 0xaa50, 0xaa51, 0xaa53, - 0xaa54, 0xaa55, 0xaa57, 0xaa58, 0xaa5a, 0xaa5b, 0xaa5d, 0xaa5f, - 0xaa60, 0xaa60, 0xaa60, 0xaa60, 0xaa61, 0xaa61, 0xaa62, 0xaa62, - 0xaa63, 0xaa64, 0xaa65, 0xaa65, 0xaa66, 0xaa67, 0xaa68, 0xaa69, - 0xaa6a, 0xaa6b, 0xaa6c, 0xaa6e, 0xaa6f, 0xaa70, 0xaa71, 0xaa73, - 0xaa74, 0xaa75, 0xaa77, 0xaa78, 0xaa7a, 0xaa7b, 0xaa7d, 0xaa7f, - 0xaa80, 0xaa80, 0xaa80, 0xaa80, 0xaa81, 0xaa81, 0xaa82, 0xaa82, - 0xaa83, 0xaa84, 0xaa85, 0xaa85, 0xaa86, 0xaa87, 0xaa88, 0xaa89, - 0xaa8a, 0xaa8b, 0xaa8c, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa93, - 0xaa94, 0xaa95, 0xaa97, 0xaa98, 0xaa9a, 0xaa9b, 0xaa9d, 0xaa9f, - 0xaaa0, 0xaaa0, 0xaaa0, 0xaaa0, 0xaaa1, 0xaaa1, 0xaaa2, 0xaaa2, - 0xaaa3, 0xaaa4, 0xaaa5, 0xaaa5, 0xaaa6, 0xaaa7, 0xaaa8, 0xaaa9, - 0xaaaa, 0xaaab, 0xaaac, 0xaaae, 0xaaaf, 0xaab0, 0xaab1, 0xaab3, - 0xaab4, 0xaab5, 0xaab7, 0xaab8, 0xaaba, 0xaabb, 0xaabd, 0xaabf, - 0xaac0, 0xaac0, 0xaac0, 0xaac0, 0xaac1, 0xaac1, 0xaac2, 0xaac2, - 0xaac3, 0xaac4, 0xaac5, 0xaac5, 0xaac6, 0xaac7, 0xaac8, 0xaac9, - 0xaaca, 0xaacb, 0xaacc, 0xaace, 0xaacf, 0xaad0, 0xaad1, 0xaad3, - 0xaad4, 0xaad5, 0xaad7, 0xaad8, 0xaada, 0xaadb, 0xaadd, 0xaadf, - 0xaae0, 0xaae0, 0xaae0, 0xaae0, 0xaae1, 0xaae1, 0xaae2, 0xaae2, - 0xaae3, 0xaae4, 0xaae5, 0xaae5, 0xaae6, 0xaae7, 0xaae8, 0xaae9, - 0xaaea, 0xaaeb, 0xaaec, 0xaaee, 0xaaef, 0xaaf0, 0xaaf1, 0xaaf3, - 0xaaf4, 0xaaf5, 0xaaf7, 0xaaf8, 0xaafa, 0xaafb, 0xaafd, 0xaaff, - 0xab00, 0xab00, 0xab00, 0xab00, 0xab01, 0xab01, 0xab02, 0xab02, - 0xab03, 0xab04, 0xab05, 0xab05, 0xab06, 0xab07, 0xab08, 0xab09, - 0xab0a, 0xab0b, 0xab0c, 0xab0e, 0xab0f, 0xab10, 0xab11, 0xab13, - 0xab14, 0xab15, 0xab17, 0xab18, 0xab1a, 0xab1b, 0xab1d, 0xab1f, - 0xab20, 0xab20, 0xab20, 0xab20, 0xab21, 0xab21, 0xab22, 0xab22, - 0xab23, 0xab24, 0xab25, 0xab25, 0xab26, 0xab27, 0xab28, 0xab29, - 0xab2a, 0xab2b, 0xab2c, 0xab2e, 0xab2f, 0xab30, 0xab31, 0xab33, - 0xab34, 0xab35, 0xab37, 0xab38, 0xab3a, 0xab3b, 0xab3d, 0xab3f, - 0xab40, 0xab40, 0xab40, 0xab40, 0xab41, 0xab41, 0xab42, 0xab42, - 0xab43, 0xab44, 0xab45, 0xab45, 0xab46, 0xab47, 0xab48, 0xab49, - 0xab4a, 0xab4b, 0xab4c, 0xab4e, 0xab4f, 0xab50, 0xab51, 0xab53, - 0xab54, 0xab55, 0xab57, 0xab58, 0xab5a, 0xab5b, 0xab5d, 0xab5f, - 0xab80, 0xab80, 0xab80, 0xab80, 0xab81, 0xab81, 0xab82, 0xab82, - 0xab83, 0xab84, 0xab85, 0xab85, 0xab86, 0xab87, 0xab88, 0xab89, - 0xab8a, 0xab8b, 0xab8c, 0xab8e, 0xab8f, 0xab90, 0xab91, 0xab93, - 0xab94, 0xab95, 0xab97, 0xab98, 0xab9a, 0xab9b, 0xab9d, 0xab9f, - 0xaba0, 0xaba0, 0xaba0, 0xaba0, 0xaba1, 0xaba1, 0xaba2, 0xaba2, - 0xaba3, 0xaba4, 0xaba5, 0xaba5, 0xaba6, 0xaba7, 0xaba8, 0xaba9, - 0xabaa, 0xabab, 0xabac, 0xabae, 0xabaf, 0xabb0, 0xabb1, 0xabb3, - 0xabb4, 0xabb5, 0xabb7, 0xabb8, 0xabba, 0xabbb, 0xabbd, 0xabbf, - 0xabc0, 0xabc0, 0xabc0, 0xabc0, 0xabc1, 0xabc1, 0xabc2, 0xabc2, - 0xabc3, 0xabc4, 0xabc5, 0xabc5, 0xabc6, 0xabc7, 0xabc8, 0xabc9, - 0xabca, 0xabcb, 0xabcc, 0xabce, 0xabcf, 0xabd0, 0xabd1, 0xabd3, - 0xabd4, 0xabd5, 0xabd7, 0xabd8, 0xabda, 0xabdb, 0xabdd, 0xabdf, - 0xabe0, 0xabe0, 0xabe0, 0xabe0, 0xabe1, 0xabe1, 0xabe2, 0xabe2, - 0xabe3, 0xabe4, 0xabe5, 0xabe5, 0xabe6, 0xabe7, 0xabe8, 0xabe9, - 0xabea, 0xabeb, 0xabec, 0xabee, 0xabef, 0xabf0, 0xabf1, 0xabf3, - 0xabf4, 0xabf5, 0xabf7, 0xabf8, 0xabfa, 0xabfb, 0xabfd, 0xabff, - 0xac00, 0xac00, 0xac00, 0xac00, 0xac01, 0xac01, 0xac02, 0xac02, - 0xac03, 0xac04, 0xac05, 0xac05, 0xac06, 0xac07, 0xac08, 0xac09, - 0xac0a, 0xac0b, 0xac0c, 0xac0e, 0xac0f, 0xac10, 0xac11, 0xac13, - 0xac14, 0xac15, 0xac17, 0xac18, 0xac1a, 0xac1b, 0xac1d, 0xac1f, - 0xac40, 0xac40, 0xac40, 0xac40, 0xac41, 0xac41, 0xac42, 0xac42, - 0xac43, 0xac44, 0xac45, 0xac45, 0xac46, 0xac47, 0xac48, 0xac49, - 0xac4a, 0xac4b, 0xac4c, 0xac4e, 0xac4f, 0xac50, 0xac51, 0xac53, - 0xac54, 0xac55, 0xac57, 0xac58, 0xac5a, 0xac5b, 0xac5d, 0xac5f, - 0xac60, 0xac60, 0xac60, 0xac60, 0xac61, 0xac61, 0xac62, 0xac62, - 0xac63, 0xac64, 0xac65, 0xac65, 0xac66, 0xac67, 0xac68, 0xac69, - 0xac6a, 0xac6b, 0xac6c, 0xac6e, 0xac6f, 0xac70, 0xac71, 0xac73, - 0xac74, 0xac75, 0xac77, 0xac78, 0xac7a, 0xac7b, 0xac7d, 0xac7f, - 0xac80, 0xac80, 0xac80, 0xac80, 0xac81, 0xac81, 0xac82, 0xac82, - 0xac83, 0xac84, 0xac85, 0xac85, 0xac86, 0xac87, 0xac88, 0xac89, - 0xac8a, 0xac8b, 0xac8c, 0xac8e, 0xac8f, 0xac90, 0xac91, 0xac93, - 0xac94, 0xac95, 0xac97, 0xac98, 0xac9a, 0xac9b, 0xac9d, 0xac9f, - 0xacc0, 0xacc0, 0xacc0, 0xacc0, 0xacc1, 0xacc1, 0xacc2, 0xacc2, - 0xacc3, 0xacc4, 0xacc5, 0xacc5, 0xacc6, 0xacc7, 0xacc8, 0xacc9, - 0xacca, 0xaccb, 0xaccc, 0xacce, 0xaccf, 0xacd0, 0xacd1, 0xacd3, - 0xacd4, 0xacd5, 0xacd7, 0xacd8, 0xacda, 0xacdb, 0xacdd, 0xacdf, - 0xace0, 0xace0, 0xace0, 0xace0, 0xace1, 0xace1, 0xace2, 0xace2, - 0xace3, 0xace4, 0xace5, 0xace5, 0xace6, 0xace7, 0xace8, 0xace9, - 0xacea, 0xaceb, 0xacec, 0xacee, 0xacef, 0xacf0, 0xacf1, 0xacf3, - 0xacf4, 0xacf5, 0xacf7, 0xacf8, 0xacfa, 0xacfb, 0xacfd, 0xacff, - 0xad00, 0xad00, 0xad00, 0xad00, 0xad01, 0xad01, 0xad02, 0xad02, - 0xad03, 0xad04, 0xad05, 0xad05, 0xad06, 0xad07, 0xad08, 0xad09, - 0xad0a, 0xad0b, 0xad0c, 0xad0e, 0xad0f, 0xad10, 0xad11, 0xad13, - 0xad14, 0xad15, 0xad17, 0xad18, 0xad1a, 0xad1b, 0xad1d, 0xad1f, - 0xad40, 0xad40, 0xad40, 0xad40, 0xad41, 0xad41, 0xad42, 0xad42, - 0xad43, 0xad44, 0xad45, 0xad45, 0xad46, 0xad47, 0xad48, 0xad49, - 0xad4a, 0xad4b, 0xad4c, 0xad4e, 0xad4f, 0xad50, 0xad51, 0xad53, - 0xad54, 0xad55, 0xad57, 0xad58, 0xad5a, 0xad5b, 0xad5d, 0xad5f, - 0xad60, 0xad60, 0xad60, 0xad60, 0xad61, 0xad61, 0xad62, 0xad62, - 0xad63, 0xad64, 0xad65, 0xad65, 0xad66, 0xad67, 0xad68, 0xad69, - 0xad6a, 0xad6b, 0xad6c, 0xad6e, 0xad6f, 0xad70, 0xad71, 0xad73, - 0xad74, 0xad75, 0xad77, 0xad78, 0xad7a, 0xad7b, 0xad7d, 0xad7f, - 0xad80, 0xad80, 0xad80, 0xad80, 0xad81, 0xad81, 0xad82, 0xad82, - 0xad83, 0xad84, 0xad85, 0xad85, 0xad86, 0xad87, 0xad88, 0xad89, - 0xad8a, 0xad8b, 0xad8c, 0xad8e, 0xad8f, 0xad90, 0xad91, 0xad93, - 0xad94, 0xad95, 0xad97, 0xad98, 0xad9a, 0xad9b, 0xad9d, 0xad9f, - 0xadc0, 0xadc0, 0xadc0, 0xadc0, 0xadc1, 0xadc1, 0xadc2, 0xadc2, - 0xadc3, 0xadc4, 0xadc5, 0xadc5, 0xadc6, 0xadc7, 0xadc8, 0xadc9, - 0xadca, 0xadcb, 0xadcc, 0xadce, 0xadcf, 0xadd0, 0xadd1, 0xadd3, - 0xadd4, 0xadd5, 0xadd7, 0xadd8, 0xadda, 0xaddb, 0xaddd, 0xaddf, - 0xade0, 0xade0, 0xade0, 0xade0, 0xade1, 0xade1, 0xade2, 0xade2, - 0xade3, 0xade4, 0xade5, 0xade5, 0xade6, 0xade7, 0xade8, 0xade9, - 0xadea, 0xadeb, 0xadec, 0xadee, 0xadef, 0xadf0, 0xadf1, 0xadf3, - 0xadf4, 0xadf5, 0xadf7, 0xadf8, 0xadfa, 0xadfb, 0xadfd, 0xadff, - 0xae20, 0xae20, 0xae20, 0xae20, 0xae21, 0xae21, 0xae22, 0xae22, - 0xae23, 0xae24, 0xae25, 0xae25, 0xae26, 0xae27, 0xae28, 0xae29, - 0xae2a, 0xae2b, 0xae2c, 0xae2e, 0xae2f, 0xae30, 0xae31, 0xae33, - 0xae34, 0xae35, 0xae37, 0xae38, 0xae3a, 0xae3b, 0xae3d, 0xae3f, - 0xae40, 0xae40, 0xae40, 0xae40, 0xae41, 0xae41, 0xae42, 0xae42, - 0xae43, 0xae44, 0xae45, 0xae45, 0xae46, 0xae47, 0xae48, 0xae49, - 0xae4a, 0xae4b, 0xae4c, 0xae4e, 0xae4f, 0xae50, 0xae51, 0xae53, - 0xae54, 0xae55, 0xae57, 0xae58, 0xae5a, 0xae5b, 0xae5d, 0xae5f, - 0xae80, 0xae80, 0xae80, 0xae80, 0xae81, 0xae81, 0xae82, 0xae82, - 0xae83, 0xae84, 0xae85, 0xae85, 0xae86, 0xae87, 0xae88, 0xae89, - 0xae8a, 0xae8b, 0xae8c, 0xae8e, 0xae8f, 0xae90, 0xae91, 0xae93, - 0xae94, 0xae95, 0xae97, 0xae98, 0xae9a, 0xae9b, 0xae9d, 0xae9f, - 0xaea0, 0xaea0, 0xaea0, 0xaea0, 0xaea1, 0xaea1, 0xaea2, 0xaea2, - 0xaea3, 0xaea4, 0xaea5, 0xaea5, 0xaea6, 0xaea7, 0xaea8, 0xaea9, - 0xaeaa, 0xaeab, 0xaeac, 0xaeae, 0xaeaf, 0xaeb0, 0xaeb1, 0xaeb3, - 0xaeb4, 0xaeb5, 0xaeb7, 0xaeb8, 0xaeba, 0xaebb, 0xaebd, 0xaebf, - 0xaee0, 0xaee0, 0xaee0, 0xaee0, 0xaee1, 0xaee1, 0xaee2, 0xaee2, - 0xaee3, 0xaee4, 0xaee5, 0xaee5, 0xaee6, 0xaee7, 0xaee8, 0xaee9, - 0xaeea, 0xaeeb, 0xaeec, 0xaeee, 0xaeef, 0xaef0, 0xaef1, 0xaef3, - 0xaef4, 0xaef5, 0xaef7, 0xaef8, 0xaefa, 0xaefb, 0xaefd, 0xaeff, - 0xaf00, 0xaf00, 0xaf00, 0xaf00, 0xaf01, 0xaf01, 0xaf02, 0xaf02, - 0xaf03, 0xaf04, 0xaf05, 0xaf05, 0xaf06, 0xaf07, 0xaf08, 0xaf09, - 0xaf0a, 0xaf0b, 0xaf0c, 0xaf0e, 0xaf0f, 0xaf10, 0xaf11, 0xaf13, - 0xaf14, 0xaf15, 0xaf17, 0xaf18, 0xaf1a, 0xaf1b, 0xaf1d, 0xaf1f, - 0xaf40, 0xaf40, 0xaf40, 0xaf40, 0xaf41, 0xaf41, 0xaf42, 0xaf42, - 0xaf43, 0xaf44, 0xaf45, 0xaf45, 0xaf46, 0xaf47, 0xaf48, 0xaf49, - 0xaf4a, 0xaf4b, 0xaf4c, 0xaf4e, 0xaf4f, 0xaf50, 0xaf51, 0xaf53, - 0xaf54, 0xaf55, 0xaf57, 0xaf58, 0xaf5a, 0xaf5b, 0xaf5d, 0xaf5f, - 0xaf60, 0xaf60, 0xaf60, 0xaf60, 0xaf61, 0xaf61, 0xaf62, 0xaf62, - 0xaf63, 0xaf64, 0xaf65, 0xaf65, 0xaf66, 0xaf67, 0xaf68, 0xaf69, - 0xaf6a, 0xaf6b, 0xaf6c, 0xaf6e, 0xaf6f, 0xaf70, 0xaf71, 0xaf73, - 0xaf74, 0xaf75, 0xaf77, 0xaf78, 0xaf7a, 0xaf7b, 0xaf7d, 0xaf7f, - 0xafa0, 0xafa0, 0xafa0, 0xafa0, 0xafa1, 0xafa1, 0xafa2, 0xafa2, - 0xafa3, 0xafa4, 0xafa5, 0xafa5, 0xafa6, 0xafa7, 0xafa8, 0xafa9, - 0xafaa, 0xafab, 0xafac, 0xafae, 0xafaf, 0xafb0, 0xafb1, 0xafb3, - 0xafb4, 0xafb5, 0xafb7, 0xafb8, 0xafba, 0xafbb, 0xafbd, 0xafbf, - 0xafe0, 0xafe0, 0xafe0, 0xafe0, 0xafe1, 0xafe1, 0xafe2, 0xafe2, - 0xafe3, 0xafe4, 0xafe5, 0xafe5, 0xafe6, 0xafe7, 0xafe8, 0xafe9, - 0xafea, 0xafeb, 0xafec, 0xafee, 0xafef, 0xaff0, 0xaff1, 0xaff3, - 0xaff4, 0xaff5, 0xaff7, 0xaff8, 0xaffa, 0xaffb, 0xaffd, 0xafff, - 0xb800, 0xb800, 0xb800, 0xb800, 0xb801, 0xb801, 0xb802, 0xb802, - 0xb803, 0xb804, 0xb805, 0xb805, 0xb806, 0xb807, 0xb808, 0xb809, - 0xb80a, 0xb80b, 0xb80c, 0xb80e, 0xb80f, 0xb810, 0xb811, 0xb813, - 0xb814, 0xb815, 0xb817, 0xb818, 0xb81a, 0xb81b, 0xb81d, 0xb81f, - 0xb800, 0xb800, 0xb800, 0xb800, 0xb801, 0xb801, 0xb802, 0xb802, - 0xb803, 0xb804, 0xb805, 0xb805, 0xb806, 0xb807, 0xb808, 0xb809, - 0xb80a, 0xb80b, 0xb80c, 0xb80e, 0xb80f, 0xb810, 0xb811, 0xb813, - 0xb814, 0xb815, 0xb817, 0xb818, 0xb81a, 0xb81b, 0xb81d, 0xb81f, - 0xb800, 0xb800, 0xb800, 0xb800, 0xb801, 0xb801, 0xb802, 0xb802, - 0xb803, 0xb804, 0xb805, 0xb805, 0xb806, 0xb807, 0xb808, 0xb809, - 0xb80a, 0xb80b, 0xb80c, 0xb80e, 0xb80f, 0xb810, 0xb811, 0xb813, - 0xb814, 0xb815, 0xb817, 0xb818, 0xb81a, 0xb81b, 0xb81d, 0xb81f, - 0xb800, 0xb800, 0xb800, 0xb800, 0xb801, 0xb801, 0xb802, 0xb802, - 0xb803, 0xb804, 0xb805, 0xb805, 0xb806, 0xb807, 0xb808, 0xb809, - 0xb80a, 0xb80b, 0xb80c, 0xb80e, 0xb80f, 0xb810, 0xb811, 0xb813, - 0xb814, 0xb815, 0xb817, 0xb818, 0xb81a, 0xb81b, 0xb81d, 0xb81f, - 0xb800, 0xb800, 0xb800, 0xb800, 0xb801, 0xb801, 0xb802, 0xb802, - 0xb803, 0xb804, 0xb805, 0xb805, 0xb806, 0xb807, 0xb808, 0xb809, - 0xb80a, 0xb80b, 0xb80c, 0xb80e, 0xb80f, 0xb810, 0xb811, 0xb813, - 0xb814, 0xb815, 0xb817, 0xb818, 0xb81a, 0xb81b, 0xb81d, 0xb81f, - 0xb820, 0xb820, 0xb820, 0xb820, 0xb821, 0xb821, 0xb822, 0xb822, - 0xb823, 0xb824, 0xb825, 0xb825, 0xb826, 0xb827, 0xb828, 0xb829, - 0xb82a, 0xb82b, 0xb82c, 0xb82e, 0xb82f, 0xb830, 0xb831, 0xb833, - 0xb834, 0xb835, 0xb837, 0xb838, 0xb83a, 0xb83b, 0xb83d, 0xb83f, - 0xb820, 0xb820, 0xb820, 0xb820, 0xb821, 0xb821, 0xb822, 0xb822, - 0xb823, 0xb824, 0xb825, 0xb825, 0xb826, 0xb827, 0xb828, 0xb829, - 0xb82a, 0xb82b, 0xb82c, 0xb82e, 0xb82f, 0xb830, 0xb831, 0xb833, - 0xb834, 0xb835, 0xb837, 0xb838, 0xb83a, 0xb83b, 0xb83d, 0xb83f, - 0xb820, 0xb820, 0xb820, 0xb820, 0xb821, 0xb821, 0xb822, 0xb822, - 0xb823, 0xb824, 0xb825, 0xb825, 0xb826, 0xb827, 0xb828, 0xb829, - 0xb82a, 0xb82b, 0xb82c, 0xb82e, 0xb82f, 0xb830, 0xb831, 0xb833, - 0xb834, 0xb835, 0xb837, 0xb838, 0xb83a, 0xb83b, 0xb83d, 0xb83f, - 0xb840, 0xb840, 0xb840, 0xb840, 0xb841, 0xb841, 0xb842, 0xb842, - 0xb843, 0xb844, 0xb845, 0xb845, 0xb846, 0xb847, 0xb848, 0xb849, - 0xb84a, 0xb84b, 0xb84c, 0xb84e, 0xb84f, 0xb850, 0xb851, 0xb853, - 0xb854, 0xb855, 0xb857, 0xb858, 0xb85a, 0xb85b, 0xb85d, 0xb85f, - 0xb840, 0xb840, 0xb840, 0xb840, 0xb841, 0xb841, 0xb842, 0xb842, - 0xb843, 0xb844, 0xb845, 0xb845, 0xb846, 0xb847, 0xb848, 0xb849, - 0xb84a, 0xb84b, 0xb84c, 0xb84e, 0xb84f, 0xb850, 0xb851, 0xb853, - 0xb854, 0xb855, 0xb857, 0xb858, 0xb85a, 0xb85b, 0xb85d, 0xb85f, - 0xb860, 0xb860, 0xb860, 0xb860, 0xb861, 0xb861, 0xb862, 0xb862, - 0xb863, 0xb864, 0xb865, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, - 0xb86a, 0xb86b, 0xb86c, 0xb86e, 0xb86f, 0xb870, 0xb871, 0xb873, - 0xb874, 0xb875, 0xb877, 0xb878, 0xb87a, 0xb87b, 0xb87d, 0xb87f, - 0xb860, 0xb860, 0xb860, 0xb860, 0xb861, 0xb861, 0xb862, 0xb862, - 0xb863, 0xb864, 0xb865, 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, - 0xb86a, 0xb86b, 0xb86c, 0xb86e, 0xb86f, 0xb870, 0xb871, 0xb873, - 0xb874, 0xb875, 0xb877, 0xb878, 0xb87a, 0xb87b, 0xb87d, 0xb87f, - 0xb880, 0xb880, 0xb880, 0xb880, 0xb881, 0xb881, 0xb882, 0xb882, - 0xb883, 0xb884, 0xb885, 0xb885, 0xb886, 0xb887, 0xb888, 0xb889, - 0xb88a, 0xb88b, 0xb88c, 0xb88e, 0xb88f, 0xb890, 0xb891, 0xb893, - 0xb894, 0xb895, 0xb897, 0xb898, 0xb89a, 0xb89b, 0xb89d, 0xb89f, - 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a1, 0xb8a1, 0xb8a2, 0xb8a2, - 0xb8a3, 0xb8a4, 0xb8a5, 0xb8a5, 0xb8a6, 0xb8a7, 0xb8a8, 0xb8a9, - 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ae, 0xb8af, 0xb8b0, 0xb8b1, 0xb8b3, - 0xb8b4, 0xb8b5, 0xb8b7, 0xb8b8, 0xb8ba, 0xb8bb, 0xb8bd, 0xb8bf, - 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a0, 0xb8a1, 0xb8a1, 0xb8a2, 0xb8a2, - 0xb8a3, 0xb8a4, 0xb8a5, 0xb8a5, 0xb8a6, 0xb8a7, 0xb8a8, 0xb8a9, - 0xb8aa, 0xb8ab, 0xb8ac, 0xb8ae, 0xb8af, 0xb8b0, 0xb8b1, 0xb8b3, - 0xb8b4, 0xb8b5, 0xb8b7, 0xb8b8, 0xb8ba, 0xb8bb, 0xb8bd, 0xb8bf, - 0xb8c0, 0xb8c0, 0xb8c0, 0xb8c0, 0xb8c1, 0xb8c1, 0xb8c2, 0xb8c2, - 0xb8c3, 0xb8c4, 0xb8c5, 0xb8c5, 0xb8c6, 0xb8c7, 0xb8c8, 0xb8c9, - 0xb8ca, 0xb8cb, 0xb8cc, 0xb8ce, 0xb8cf, 0xb8d0, 0xb8d1, 0xb8d3, - 0xb8d4, 0xb8d5, 0xb8d7, 0xb8d8, 0xb8da, 0xb8db, 0xb8dd, 0xb8df, - 0xb8e0, 0xb8e0, 0xb8e0, 0xb8e0, 0xb8e1, 0xb8e1, 0xb8e2, 0xb8e2, - 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e5, 0xb8e6, 0xb8e7, 0xb8e8, 0xb8e9, - 0xb8ea, 0xb8eb, 0xb8ec, 0xb8ee, 0xb8ef, 0xb8f0, 0xb8f1, 0xb8f3, - 0xb8f4, 0xb8f5, 0xb8f7, 0xb8f8, 0xb8fa, 0xb8fb, 0xb8fd, 0xb8ff, - 0xb8e0, 0xb8e0, 0xb8e0, 0xb8e0, 0xb8e1, 0xb8e1, 0xb8e2, 0xb8e2, - 0xb8e3, 0xb8e4, 0xb8e5, 0xb8e5, 0xb8e6, 0xb8e7, 0xb8e8, 0xb8e9, - 0xb8ea, 0xb8eb, 0xb8ec, 0xb8ee, 0xb8ef, 0xb8f0, 0xb8f1, 0xb8f3, - 0xb8f4, 0xb8f5, 0xb8f7, 0xb8f8, 0xb8fa, 0xb8fb, 0xb8fd, 0xb8ff, - 0xb900, 0xb900, 0xb900, 0xb900, 0xb901, 0xb901, 0xb902, 0xb902, - 0xb903, 0xb904, 0xb905, 0xb905, 0xb906, 0xb907, 0xb908, 0xb909, - 0xb90a, 0xb90b, 0xb90c, 0xb90e, 0xb90f, 0xb910, 0xb911, 0xb913, - 0xb914, 0xb915, 0xb917, 0xb918, 0xb91a, 0xb91b, 0xb91d, 0xb91f, - 0xb920, 0xb920, 0xb920, 0xb920, 0xb921, 0xb921, 0xb922, 0xb922, - 0xb923, 0xb924, 0xb925, 0xb925, 0xb926, 0xb927, 0xb928, 0xb929, - 0xb92a, 0xb92b, 0xb92c, 0xb92e, 0xb92f, 0xb930, 0xb931, 0xb933, - 0xb934, 0xb935, 0xb937, 0xb938, 0xb93a, 0xb93b, 0xb93d, 0xb93f, - 0xb940, 0xb940, 0xb940, 0xb940, 0xb941, 0xb941, 0xb942, 0xb942, - 0xb943, 0xb944, 0xb945, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, - 0xb94a, 0xb94b, 0xb94c, 0xb94e, 0xb94f, 0xb950, 0xb951, 0xb953, - 0xb954, 0xb955, 0xb957, 0xb958, 0xb95a, 0xb95b, 0xb95d, 0xb95f, - 0xb940, 0xb940, 0xb940, 0xb940, 0xb941, 0xb941, 0xb942, 0xb942, - 0xb943, 0xb944, 0xb945, 0xb945, 0xb946, 0xb947, 0xb948, 0xb949, - 0xb94a, 0xb94b, 0xb94c, 0xb94e, 0xb94f, 0xb950, 0xb951, 0xb953, - 0xb954, 0xb955, 0xb957, 0xb958, 0xb95a, 0xb95b, 0xb95d, 0xb95f, - 0xb960, 0xb960, 0xb960, 0xb960, 0xb961, 0xb961, 0xb962, 0xb962, - 0xb963, 0xb964, 0xb965, 0xb965, 0xb966, 0xb967, 0xb968, 0xb969, - 0xb96a, 0xb96b, 0xb96c, 0xb96e, 0xb96f, 0xb970, 0xb971, 0xb973, - 0xb974, 0xb975, 0xb977, 0xb978, 0xb97a, 0xb97b, 0xb97d, 0xb97f, - 0xb980, 0xb980, 0xb980, 0xb980, 0xb981, 0xb981, 0xb982, 0xb982, - 0xb983, 0xb984, 0xb985, 0xb985, 0xb986, 0xb987, 0xb988, 0xb989, - 0xb98a, 0xb98b, 0xb98c, 0xb98e, 0xb98f, 0xb990, 0xb991, 0xb993, - 0xb994, 0xb995, 0xb997, 0xb998, 0xb99a, 0xb99b, 0xb99d, 0xb99f, - 0xb9a0, 0xb9a0, 0xb9a0, 0xb9a0, 0xb9a1, 0xb9a1, 0xb9a2, 0xb9a2, - 0xb9a3, 0xb9a4, 0xb9a5, 0xb9a5, 0xb9a6, 0xb9a7, 0xb9a8, 0xb9a9, - 0xb9aa, 0xb9ab, 0xb9ac, 0xb9ae, 0xb9af, 0xb9b0, 0xb9b1, 0xb9b3, - 0xb9b4, 0xb9b5, 0xb9b7, 0xb9b8, 0xb9ba, 0xb9bb, 0xb9bd, 0xb9bf, - 0xb9c0, 0xb9c0, 0xb9c0, 0xb9c0, 0xb9c1, 0xb9c1, 0xb9c2, 0xb9c2, - 0xb9c3, 0xb9c4, 0xb9c5, 0xb9c5, 0xb9c6, 0xb9c7, 0xb9c8, 0xb9c9, - 0xb9ca, 0xb9cb, 0xb9cc, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d3, - 0xb9d4, 0xb9d5, 0xb9d7, 0xb9d8, 0xb9da, 0xb9db, 0xb9dd, 0xb9df, - 0xb9e0, 0xb9e0, 0xb9e0, 0xb9e0, 0xb9e1, 0xb9e1, 0xb9e2, 0xb9e2, - 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e5, 0xb9e6, 0xb9e7, 0xb9e8, 0xb9e9, - 0xb9ea, 0xb9eb, 0xb9ec, 0xb9ee, 0xb9ef, 0xb9f0, 0xb9f1, 0xb9f3, - 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9fa, 0xb9fb, 0xb9fd, 0xb9ff, - 0xba00, 0xba00, 0xba00, 0xba00, 0xba01, 0xba01, 0xba02, 0xba02, - 0xba03, 0xba04, 0xba05, 0xba05, 0xba06, 0xba07, 0xba08, 0xba09, - 0xba0a, 0xba0b, 0xba0c, 0xba0e, 0xba0f, 0xba10, 0xba11, 0xba13, - 0xba14, 0xba15, 0xba17, 0xba18, 0xba1a, 0xba1b, 0xba1d, 0xba1f, - 0xba20, 0xba20, 0xba20, 0xba20, 0xba21, 0xba21, 0xba22, 0xba22, - 0xba23, 0xba24, 0xba25, 0xba25, 0xba26, 0xba27, 0xba28, 0xba29, - 0xba2a, 0xba2b, 0xba2c, 0xba2e, 0xba2f, 0xba30, 0xba31, 0xba33, - 0xba34, 0xba35, 0xba37, 0xba38, 0xba3a, 0xba3b, 0xba3d, 0xba3f, - 0xba40, 0xba40, 0xba40, 0xba40, 0xba41, 0xba41, 0xba42, 0xba42, - 0xba43, 0xba44, 0xba45, 0xba45, 0xba46, 0xba47, 0xba48, 0xba49, - 0xba4a, 0xba4b, 0xba4c, 0xba4e, 0xba4f, 0xba50, 0xba51, 0xba53, - 0xba54, 0xba55, 0xba57, 0xba58, 0xba5a, 0xba5b, 0xba5d, 0xba5f, - 0xba60, 0xba60, 0xba60, 0xba60, 0xba61, 0xba61, 0xba62, 0xba62, - 0xba63, 0xba64, 0xba65, 0xba65, 0xba66, 0xba67, 0xba68, 0xba69, - 0xba6a, 0xba6b, 0xba6c, 0xba6e, 0xba6f, 0xba70, 0xba71, 0xba73, - 0xba74, 0xba75, 0xba77, 0xba78, 0xba7a, 0xba7b, 0xba7d, 0xba7f, - 0xba80, 0xba80, 0xba80, 0xba80, 0xba81, 0xba81, 0xba82, 0xba82, - 0xba83, 0xba84, 0xba85, 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, - 0xba8a, 0xba8b, 0xba8c, 0xba8e, 0xba8f, 0xba90, 0xba91, 0xba93, - 0xba94, 0xba95, 0xba97, 0xba98, 0xba9a, 0xba9b, 0xba9d, 0xba9f, - 0xbaa0, 0xbaa0, 0xbaa0, 0xbaa0, 0xbaa1, 0xbaa1, 0xbaa2, 0xbaa2, - 0xbaa3, 0xbaa4, 0xbaa5, 0xbaa5, 0xbaa6, 0xbaa7, 0xbaa8, 0xbaa9, - 0xbaaa, 0xbaab, 0xbaac, 0xbaae, 0xbaaf, 0xbab0, 0xbab1, 0xbab3, - 0xbab4, 0xbab5, 0xbab7, 0xbab8, 0xbaba, 0xbabb, 0xbabd, 0xbabf, - 0xbac0, 0xbac0, 0xbac0, 0xbac0, 0xbac1, 0xbac1, 0xbac2, 0xbac2, - 0xbac3, 0xbac4, 0xbac5, 0xbac5, 0xbac6, 0xbac7, 0xbac8, 0xbac9, - 0xbaca, 0xbacb, 0xbacc, 0xbace, 0xbacf, 0xbad0, 0xbad1, 0xbad3, - 0xbad4, 0xbad5, 0xbad7, 0xbad8, 0xbada, 0xbadb, 0xbadd, 0xbadf, - 0xbae0, 0xbae0, 0xbae0, 0xbae0, 0xbae1, 0xbae1, 0xbae2, 0xbae2, - 0xbae3, 0xbae4, 0xbae5, 0xbae5, 0xbae6, 0xbae7, 0xbae8, 0xbae9, - 0xbaea, 0xbaeb, 0xbaec, 0xbaee, 0xbaef, 0xbaf0, 0xbaf1, 0xbaf3, - 0xbaf4, 0xbaf5, 0xbaf7, 0xbaf8, 0xbafa, 0xbafb, 0xbafd, 0xbaff, - 0xbb00, 0xbb00, 0xbb00, 0xbb00, 0xbb01, 0xbb01, 0xbb02, 0xbb02, - 0xbb03, 0xbb04, 0xbb05, 0xbb05, 0xbb06, 0xbb07, 0xbb08, 0xbb09, - 0xbb0a, 0xbb0b, 0xbb0c, 0xbb0e, 0xbb0f, 0xbb10, 0xbb11, 0xbb13, - 0xbb14, 0xbb15, 0xbb17, 0xbb18, 0xbb1a, 0xbb1b, 0xbb1d, 0xbb1f, - 0xbb20, 0xbb20, 0xbb20, 0xbb20, 0xbb21, 0xbb21, 0xbb22, 0xbb22, - 0xbb23, 0xbb24, 0xbb25, 0xbb25, 0xbb26, 0xbb27, 0xbb28, 0xbb29, - 0xbb2a, 0xbb2b, 0xbb2c, 0xbb2e, 0xbb2f, 0xbb30, 0xbb31, 0xbb33, - 0xbb34, 0xbb35, 0xbb37, 0xbb38, 0xbb3a, 0xbb3b, 0xbb3d, 0xbb3f, - 0xbb40, 0xbb40, 0xbb40, 0xbb40, 0xbb41, 0xbb41, 0xbb42, 0xbb42, - 0xbb43, 0xbb44, 0xbb45, 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, - 0xbb4a, 0xbb4b, 0xbb4c, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, 0xbb53, - 0xbb54, 0xbb55, 0xbb57, 0xbb58, 0xbb5a, 0xbb5b, 0xbb5d, 0xbb5f, - 0xbb80, 0xbb80, 0xbb80, 0xbb80, 0xbb81, 0xbb81, 0xbb82, 0xbb82, - 0xbb83, 0xbb84, 0xbb85, 0xbb85, 0xbb86, 0xbb87, 0xbb88, 0xbb89, - 0xbb8a, 0xbb8b, 0xbb8c, 0xbb8e, 0xbb8f, 0xbb90, 0xbb91, 0xbb93, - 0xbb94, 0xbb95, 0xbb97, 0xbb98, 0xbb9a, 0xbb9b, 0xbb9d, 0xbb9f, - 0xbba0, 0xbba0, 0xbba0, 0xbba0, 0xbba1, 0xbba1, 0xbba2, 0xbba2, - 0xbba3, 0xbba4, 0xbba5, 0xbba5, 0xbba6, 0xbba7, 0xbba8, 0xbba9, - 0xbbaa, 0xbbab, 0xbbac, 0xbbae, 0xbbaf, 0xbbb0, 0xbbb1, 0xbbb3, - 0xbbb4, 0xbbb5, 0xbbb7, 0xbbb8, 0xbbba, 0xbbbb, 0xbbbd, 0xbbbf, - 0xbbc0, 0xbbc0, 0xbbc0, 0xbbc0, 0xbbc1, 0xbbc1, 0xbbc2, 0xbbc2, - 0xbbc3, 0xbbc4, 0xbbc5, 0xbbc5, 0xbbc6, 0xbbc7, 0xbbc8, 0xbbc9, - 0xbbca, 0xbbcb, 0xbbcc, 0xbbce, 0xbbcf, 0xbbd0, 0xbbd1, 0xbbd3, - 0xbbd4, 0xbbd5, 0xbbd7, 0xbbd8, 0xbbda, 0xbbdb, 0xbbdd, 0xbbdf, - 0xbbe0, 0xbbe0, 0xbbe0, 0xbbe0, 0xbbe1, 0xbbe1, 0xbbe2, 0xbbe2, - 0xbbe3, 0xbbe4, 0xbbe5, 0xbbe5, 0xbbe6, 0xbbe7, 0xbbe8, 0xbbe9, - 0xbbea, 0xbbeb, 0xbbec, 0xbbee, 0xbbef, 0xbbf0, 0xbbf1, 0xbbf3, - 0xbbf4, 0xbbf5, 0xbbf7, 0xbbf8, 0xbbfa, 0xbbfb, 0xbbfd, 0xbbff, - 0xbc00, 0xbc00, 0xbc00, 0xbc00, 0xbc01, 0xbc01, 0xbc02, 0xbc02, - 0xbc03, 0xbc04, 0xbc05, 0xbc05, 0xbc06, 0xbc07, 0xbc08, 0xbc09, - 0xbc0a, 0xbc0b, 0xbc0c, 0xbc0e, 0xbc0f, 0xbc10, 0xbc11, 0xbc13, - 0xbc14, 0xbc15, 0xbc17, 0xbc18, 0xbc1a, 0xbc1b, 0xbc1d, 0xbc1f, - 0xbc40, 0xbc40, 0xbc40, 0xbc40, 0xbc41, 0xbc41, 0xbc42, 0xbc42, - 0xbc43, 0xbc44, 0xbc45, 0xbc45, 0xbc46, 0xbc47, 0xbc48, 0xbc49, - 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4e, 0xbc4f, 0xbc50, 0xbc51, 0xbc53, - 0xbc54, 0xbc55, 0xbc57, 0xbc58, 0xbc5a, 0xbc5b, 0xbc5d, 0xbc5f, - 0xbc60, 0xbc60, 0xbc60, 0xbc60, 0xbc61, 0xbc61, 0xbc62, 0xbc62, - 0xbc63, 0xbc64, 0xbc65, 0xbc65, 0xbc66, 0xbc67, 0xbc68, 0xbc69, - 0xbc6a, 0xbc6b, 0xbc6c, 0xbc6e, 0xbc6f, 0xbc70, 0xbc71, 0xbc73, - 0xbc74, 0xbc75, 0xbc77, 0xbc78, 0xbc7a, 0xbc7b, 0xbc7d, 0xbc7f, - 0xbc80, 0xbc80, 0xbc80, 0xbc80, 0xbc81, 0xbc81, 0xbc82, 0xbc82, - 0xbc83, 0xbc84, 0xbc85, 0xbc85, 0xbc86, 0xbc87, 0xbc88, 0xbc89, - 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8e, 0xbc8f, 0xbc90, 0xbc91, 0xbc93, - 0xbc94, 0xbc95, 0xbc97, 0xbc98, 0xbc9a, 0xbc9b, 0xbc9d, 0xbc9f, - 0xbcc0, 0xbcc0, 0xbcc0, 0xbcc0, 0xbcc1, 0xbcc1, 0xbcc2, 0xbcc2, - 0xbcc3, 0xbcc4, 0xbcc5, 0xbcc5, 0xbcc6, 0xbcc7, 0xbcc8, 0xbcc9, - 0xbcca, 0xbccb, 0xbccc, 0xbcce, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd3, - 0xbcd4, 0xbcd5, 0xbcd7, 0xbcd8, 0xbcda, 0xbcdb, 0xbcdd, 0xbcdf, - 0xbce0, 0xbce0, 0xbce0, 0xbce0, 0xbce1, 0xbce1, 0xbce2, 0xbce2, - 0xbce3, 0xbce4, 0xbce5, 0xbce5, 0xbce6, 0xbce7, 0xbce8, 0xbce9, - 0xbcea, 0xbceb, 0xbcec, 0xbcee, 0xbcef, 0xbcf0, 0xbcf1, 0xbcf3, - 0xbcf4, 0xbcf5, 0xbcf7, 0xbcf8, 0xbcfa, 0xbcfb, 0xbcfd, 0xbcff, - 0xbd00, 0xbd00, 0xbd00, 0xbd00, 0xbd01, 0xbd01, 0xbd02, 0xbd02, - 0xbd03, 0xbd04, 0xbd05, 0xbd05, 0xbd06, 0xbd07, 0xbd08, 0xbd09, - 0xbd0a, 0xbd0b, 0xbd0c, 0xbd0e, 0xbd0f, 0xbd10, 0xbd11, 0xbd13, - 0xbd14, 0xbd15, 0xbd17, 0xbd18, 0xbd1a, 0xbd1b, 0xbd1d, 0xbd1f, - 0xbd40, 0xbd40, 0xbd40, 0xbd40, 0xbd41, 0xbd41, 0xbd42, 0xbd42, - 0xbd43, 0xbd44, 0xbd45, 0xbd45, 0xbd46, 0xbd47, 0xbd48, 0xbd49, - 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4e, 0xbd4f, 0xbd50, 0xbd51, 0xbd53, - 0xbd54, 0xbd55, 0xbd57, 0xbd58, 0xbd5a, 0xbd5b, 0xbd5d, 0xbd5f, - 0xbd60, 0xbd60, 0xbd60, 0xbd60, 0xbd61, 0xbd61, 0xbd62, 0xbd62, - 0xbd63, 0xbd64, 0xbd65, 0xbd65, 0xbd66, 0xbd67, 0xbd68, 0xbd69, - 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6e, 0xbd6f, 0xbd70, 0xbd71, 0xbd73, - 0xbd74, 0xbd75, 0xbd77, 0xbd78, 0xbd7a, 0xbd7b, 0xbd7d, 0xbd7f, - 0xbd80, 0xbd80, 0xbd80, 0xbd80, 0xbd81, 0xbd81, 0xbd82, 0xbd82, - 0xbd83, 0xbd84, 0xbd85, 0xbd85, 0xbd86, 0xbd87, 0xbd88, 0xbd89, - 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8e, 0xbd8f, 0xbd90, 0xbd91, 0xbd93, - 0xbd94, 0xbd95, 0xbd97, 0xbd98, 0xbd9a, 0xbd9b, 0xbd9d, 0xbd9f, - 0xbdc0, 0xbdc0, 0xbdc0, 0xbdc0, 0xbdc1, 0xbdc1, 0xbdc2, 0xbdc2, - 0xbdc3, 0xbdc4, 0xbdc5, 0xbdc5, 0xbdc6, 0xbdc7, 0xbdc8, 0xbdc9, - 0xbdca, 0xbdcb, 0xbdcc, 0xbdce, 0xbdcf, 0xbdd0, 0xbdd1, 0xbdd3, - 0xbdd4, 0xbdd5, 0xbdd7, 0xbdd8, 0xbdda, 0xbddb, 0xbddd, 0xbddf, - 0xbde0, 0xbde0, 0xbde0, 0xbde0, 0xbde1, 0xbde1, 0xbde2, 0xbde2, - 0xbde3, 0xbde4, 0xbde5, 0xbde5, 0xbde6, 0xbde7, 0xbde8, 0xbde9, - 0xbdea, 0xbdeb, 0xbdec, 0xbdee, 0xbdef, 0xbdf0, 0xbdf1, 0xbdf3, - 0xbdf4, 0xbdf5, 0xbdf7, 0xbdf8, 0xbdfa, 0xbdfb, 0xbdfd, 0xbdff, - 0xbe20, 0xbe20, 0xbe20, 0xbe20, 0xbe21, 0xbe21, 0xbe22, 0xbe22, - 0xbe23, 0xbe24, 0xbe25, 0xbe25, 0xbe26, 0xbe27, 0xbe28, 0xbe29, - 0xbe2a, 0xbe2b, 0xbe2c, 0xbe2e, 0xbe2f, 0xbe30, 0xbe31, 0xbe33, - 0xbe34, 0xbe35, 0xbe37, 0xbe38, 0xbe3a, 0xbe3b, 0xbe3d, 0xbe3f, - 0xbe40, 0xbe40, 0xbe40, 0xbe40, 0xbe41, 0xbe41, 0xbe42, 0xbe42, - 0xbe43, 0xbe44, 0xbe45, 0xbe45, 0xbe46, 0xbe47, 0xbe48, 0xbe49, - 0xbe4a, 0xbe4b, 0xbe4c, 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe53, - 0xbe54, 0xbe55, 0xbe57, 0xbe58, 0xbe5a, 0xbe5b, 0xbe5d, 0xbe5f, - 0xbe80, 0xbe80, 0xbe80, 0xbe80, 0xbe81, 0xbe81, 0xbe82, 0xbe82, - 0xbe83, 0xbe84, 0xbe85, 0xbe85, 0xbe86, 0xbe87, 0xbe88, 0xbe89, - 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe93, - 0xbe94, 0xbe95, 0xbe97, 0xbe98, 0xbe9a, 0xbe9b, 0xbe9d, 0xbe9f, - 0xbea0, 0xbea0, 0xbea0, 0xbea0, 0xbea1, 0xbea1, 0xbea2, 0xbea2, - 0xbea3, 0xbea4, 0xbea5, 0xbea5, 0xbea6, 0xbea7, 0xbea8, 0xbea9, - 0xbeaa, 0xbeab, 0xbeac, 0xbeae, 0xbeaf, 0xbeb0, 0xbeb1, 0xbeb3, - 0xbeb4, 0xbeb5, 0xbeb7, 0xbeb8, 0xbeba, 0xbebb, 0xbebd, 0xbebf, - 0xbee0, 0xbee0, 0xbee0, 0xbee0, 0xbee1, 0xbee1, 0xbee2, 0xbee2, - 0xbee3, 0xbee4, 0xbee5, 0xbee5, 0xbee6, 0xbee7, 0xbee8, 0xbee9, - 0xbeea, 0xbeeb, 0xbeec, 0xbeee, 0xbeef, 0xbef0, 0xbef1, 0xbef3, - 0xbef4, 0xbef5, 0xbef7, 0xbef8, 0xbefa, 0xbefb, 0xbefd, 0xbeff, - 0xbf00, 0xbf00, 0xbf00, 0xbf00, 0xbf01, 0xbf01, 0xbf02, 0xbf02, - 0xbf03, 0xbf04, 0xbf05, 0xbf05, 0xbf06, 0xbf07, 0xbf08, 0xbf09, - 0xbf0a, 0xbf0b, 0xbf0c, 0xbf0e, 0xbf0f, 0xbf10, 0xbf11, 0xbf13, - 0xbf14, 0xbf15, 0xbf17, 0xbf18, 0xbf1a, 0xbf1b, 0xbf1d, 0xbf1f, - 0xbf40, 0xbf40, 0xbf40, 0xbf40, 0xbf41, 0xbf41, 0xbf42, 0xbf42, - 0xbf43, 0xbf44, 0xbf45, 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, - 0xbf4a, 0xbf4b, 0xbf4c, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, 0xbf53, - 0xbf54, 0xbf55, 0xbf57, 0xbf58, 0xbf5a, 0xbf5b, 0xbf5d, 0xbf5f, - 0xbf60, 0xbf60, 0xbf60, 0xbf60, 0xbf61, 0xbf61, 0xbf62, 0xbf62, - 0xbf63, 0xbf64, 0xbf65, 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, - 0xbf6a, 0xbf6b, 0xbf6c, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf73, - 0xbf74, 0xbf75, 0xbf77, 0xbf78, 0xbf7a, 0xbf7b, 0xbf7d, 0xbf7f, - 0xbfa0, 0xbfa0, 0xbfa0, 0xbfa0, 0xbfa1, 0xbfa1, 0xbfa2, 0xbfa2, - 0xbfa3, 0xbfa4, 0xbfa5, 0xbfa5, 0xbfa6, 0xbfa7, 0xbfa8, 0xbfa9, - 0xbfaa, 0xbfab, 0xbfac, 0xbfae, 0xbfaf, 0xbfb0, 0xbfb1, 0xbfb3, - 0xbfb4, 0xbfb5, 0xbfb7, 0xbfb8, 0xbfba, 0xbfbb, 0xbfbd, 0xbfbf, - 0xbfe0, 0xbfe0, 0xbfe0, 0xbfe0, 0xbfe1, 0xbfe1, 0xbfe2, 0xbfe2, - 0xbfe3, 0xbfe4, 0xbfe5, 0xbfe5, 0xbfe6, 0xbfe7, 0xbfe8, 0xbfe9, - 0xbfea, 0xbfeb, 0xbfec, 0xbfee, 0xbfef, 0xbff0, 0xbff1, 0xbff3, - 0xbff4, 0xbff5, 0xbff7, 0xbff8, 0xbffa, 0xbffb, 0xbffd, 0xbfff, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc001, 0xc001, 0xc002, 0xc002, - 0xc003, 0xc004, 0xc005, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, - 0xc00a, 0xc00b, 0xc00c, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc013, - 0xc014, 0xc015, 0xc017, 0xc018, 0xc01a, 0xc01b, 0xc01d, 0xc01f, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc001, 0xc001, 0xc002, 0xc002, - 0xc003, 0xc004, 0xc005, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, - 0xc00a, 0xc00b, 0xc00c, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc013, - 0xc014, 0xc015, 0xc017, 0xc018, 0xc01a, 0xc01b, 0xc01d, 0xc01f, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc001, 0xc001, 0xc002, 0xc002, - 0xc003, 0xc004, 0xc005, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, - 0xc00a, 0xc00b, 0xc00c, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc013, - 0xc014, 0xc015, 0xc017, 0xc018, 0xc01a, 0xc01b, 0xc01d, 0xc01f, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc001, 0xc001, 0xc002, 0xc002, - 0xc003, 0xc004, 0xc005, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, - 0xc00a, 0xc00b, 0xc00c, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc013, - 0xc014, 0xc015, 0xc017, 0xc018, 0xc01a, 0xc01b, 0xc01d, 0xc01f, - 0xc000, 0xc000, 0xc000, 0xc000, 0xc001, 0xc001, 0xc002, 0xc002, - 0xc003, 0xc004, 0xc005, 0xc005, 0xc006, 0xc007, 0xc008, 0xc009, - 0xc00a, 0xc00b, 0xc00c, 0xc00e, 0xc00f, 0xc010, 0xc011, 0xc013, - 0xc014, 0xc015, 0xc017, 0xc018, 0xc01a, 0xc01b, 0xc01d, 0xc01f, - 0xc020, 0xc020, 0xc020, 0xc020, 0xc021, 0xc021, 0xc022, 0xc022, - 0xc023, 0xc024, 0xc025, 0xc025, 0xc026, 0xc027, 0xc028, 0xc029, - 0xc02a, 0xc02b, 0xc02c, 0xc02e, 0xc02f, 0xc030, 0xc031, 0xc033, - 0xc034, 0xc035, 0xc037, 0xc038, 0xc03a, 0xc03b, 0xc03d, 0xc03f, - 0xc020, 0xc020, 0xc020, 0xc020, 0xc021, 0xc021, 0xc022, 0xc022, - 0xc023, 0xc024, 0xc025, 0xc025, 0xc026, 0xc027, 0xc028, 0xc029, - 0xc02a, 0xc02b, 0xc02c, 0xc02e, 0xc02f, 0xc030, 0xc031, 0xc033, - 0xc034, 0xc035, 0xc037, 0xc038, 0xc03a, 0xc03b, 0xc03d, 0xc03f, - 0xc020, 0xc020, 0xc020, 0xc020, 0xc021, 0xc021, 0xc022, 0xc022, - 0xc023, 0xc024, 0xc025, 0xc025, 0xc026, 0xc027, 0xc028, 0xc029, - 0xc02a, 0xc02b, 0xc02c, 0xc02e, 0xc02f, 0xc030, 0xc031, 0xc033, - 0xc034, 0xc035, 0xc037, 0xc038, 0xc03a, 0xc03b, 0xc03d, 0xc03f, - 0xc040, 0xc040, 0xc040, 0xc040, 0xc041, 0xc041, 0xc042, 0xc042, - 0xc043, 0xc044, 0xc045, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, - 0xc04a, 0xc04b, 0xc04c, 0xc04e, 0xc04f, 0xc050, 0xc051, 0xc053, - 0xc054, 0xc055, 0xc057, 0xc058, 0xc05a, 0xc05b, 0xc05d, 0xc05f, - 0xc040, 0xc040, 0xc040, 0xc040, 0xc041, 0xc041, 0xc042, 0xc042, - 0xc043, 0xc044, 0xc045, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, - 0xc04a, 0xc04b, 0xc04c, 0xc04e, 0xc04f, 0xc050, 0xc051, 0xc053, - 0xc054, 0xc055, 0xc057, 0xc058, 0xc05a, 0xc05b, 0xc05d, 0xc05f, - 0xc060, 0xc060, 0xc060, 0xc060, 0xc061, 0xc061, 0xc062, 0xc062, - 0xc063, 0xc064, 0xc065, 0xc065, 0xc066, 0xc067, 0xc068, 0xc069, - 0xc06a, 0xc06b, 0xc06c, 0xc06e, 0xc06f, 0xc070, 0xc071, 0xc073, - 0xc074, 0xc075, 0xc077, 0xc078, 0xc07a, 0xc07b, 0xc07d, 0xc07f, - 0xc060, 0xc060, 0xc060, 0xc060, 0xc061, 0xc061, 0xc062, 0xc062, - 0xc063, 0xc064, 0xc065, 0xc065, 0xc066, 0xc067, 0xc068, 0xc069, - 0xc06a, 0xc06b, 0xc06c, 0xc06e, 0xc06f, 0xc070, 0xc071, 0xc073, - 0xc074, 0xc075, 0xc077, 0xc078, 0xc07a, 0xc07b, 0xc07d, 0xc07f, - 0xc080, 0xc080, 0xc080, 0xc080, 0xc081, 0xc081, 0xc082, 0xc082, - 0xc083, 0xc084, 0xc085, 0xc085, 0xc086, 0xc087, 0xc088, 0xc089, - 0xc08a, 0xc08b, 0xc08c, 0xc08e, 0xc08f, 0xc090, 0xc091, 0xc093, - 0xc094, 0xc095, 0xc097, 0xc098, 0xc09a, 0xc09b, 0xc09d, 0xc09f, - 0xc0a0, 0xc0a0, 0xc0a0, 0xc0a0, 0xc0a1, 0xc0a1, 0xc0a2, 0xc0a2, - 0xc0a3, 0xc0a4, 0xc0a5, 0xc0a5, 0xc0a6, 0xc0a7, 0xc0a8, 0xc0a9, - 0xc0aa, 0xc0ab, 0xc0ac, 0xc0ae, 0xc0af, 0xc0b0, 0xc0b1, 0xc0b3, - 0xc0b4, 0xc0b5, 0xc0b7, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0bf, - 0xc0a0, 0xc0a0, 0xc0a0, 0xc0a0, 0xc0a1, 0xc0a1, 0xc0a2, 0xc0a2, - 0xc0a3, 0xc0a4, 0xc0a5, 0xc0a5, 0xc0a6, 0xc0a7, 0xc0a8, 0xc0a9, - 0xc0aa, 0xc0ab, 0xc0ac, 0xc0ae, 0xc0af, 0xc0b0, 0xc0b1, 0xc0b3, - 0xc0b4, 0xc0b5, 0xc0b7, 0xc0b8, 0xc0ba, 0xc0bb, 0xc0bd, 0xc0bf, - 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c0, 0xc0c1, 0xc0c1, 0xc0c2, 0xc0c2, - 0xc0c3, 0xc0c4, 0xc0c5, 0xc0c5, 0xc0c6, 0xc0c7, 0xc0c8, 0xc0c9, - 0xc0ca, 0xc0cb, 0xc0cc, 0xc0ce, 0xc0cf, 0xc0d0, 0xc0d1, 0xc0d3, - 0xc0d4, 0xc0d5, 0xc0d7, 0xc0d8, 0xc0da, 0xc0db, 0xc0dd, 0xc0df, - 0xc0e0, 0xc0e0, 0xc0e0, 0xc0e0, 0xc0e1, 0xc0e1, 0xc0e2, 0xc0e2, - 0xc0e3, 0xc0e4, 0xc0e5, 0xc0e5, 0xc0e6, 0xc0e7, 0xc0e8, 0xc0e9, - 0xc0ea, 0xc0eb, 0xc0ec, 0xc0ee, 0xc0ef, 0xc0f0, 0xc0f1, 0xc0f3, - 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f8, 0xc0fa, 0xc0fb, 0xc0fd, 0xc0ff, - 0xc0e0, 0xc0e0, 0xc0e0, 0xc0e0, 0xc0e1, 0xc0e1, 0xc0e2, 0xc0e2, - 0xc0e3, 0xc0e4, 0xc0e5, 0xc0e5, 0xc0e6, 0xc0e7, 0xc0e8, 0xc0e9, - 0xc0ea, 0xc0eb, 0xc0ec, 0xc0ee, 0xc0ef, 0xc0f0, 0xc0f1, 0xc0f3, - 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f8, 0xc0fa, 0xc0fb, 0xc0fd, 0xc0ff, - 0xc100, 0xc100, 0xc100, 0xc100, 0xc101, 0xc101, 0xc102, 0xc102, - 0xc103, 0xc104, 0xc105, 0xc105, 0xc106, 0xc107, 0xc108, 0xc109, - 0xc10a, 0xc10b, 0xc10c, 0xc10e, 0xc10f, 0xc110, 0xc111, 0xc113, - 0xc114, 0xc115, 0xc117, 0xc118, 0xc11a, 0xc11b, 0xc11d, 0xc11f, - 0xc120, 0xc120, 0xc120, 0xc120, 0xc121, 0xc121, 0xc122, 0xc122, - 0xc123, 0xc124, 0xc125, 0xc125, 0xc126, 0xc127, 0xc128, 0xc129, - 0xc12a, 0xc12b, 0xc12c, 0xc12e, 0xc12f, 0xc130, 0xc131, 0xc133, - 0xc134, 0xc135, 0xc137, 0xc138, 0xc13a, 0xc13b, 0xc13d, 0xc13f, - 0xc140, 0xc140, 0xc140, 0xc140, 0xc141, 0xc141, 0xc142, 0xc142, - 0xc143, 0xc144, 0xc145, 0xc145, 0xc146, 0xc147, 0xc148, 0xc149, - 0xc14a, 0xc14b, 0xc14c, 0xc14e, 0xc14f, 0xc150, 0xc151, 0xc153, - 0xc154, 0xc155, 0xc157, 0xc158, 0xc15a, 0xc15b, 0xc15d, 0xc15f, - 0xc140, 0xc140, 0xc140, 0xc140, 0xc141, 0xc141, 0xc142, 0xc142, - 0xc143, 0xc144, 0xc145, 0xc145, 0xc146, 0xc147, 0xc148, 0xc149, - 0xc14a, 0xc14b, 0xc14c, 0xc14e, 0xc14f, 0xc150, 0xc151, 0xc153, - 0xc154, 0xc155, 0xc157, 0xc158, 0xc15a, 0xc15b, 0xc15d, 0xc15f, - 0xc160, 0xc160, 0xc160, 0xc160, 0xc161, 0xc161, 0xc162, 0xc162, - 0xc163, 0xc164, 0xc165, 0xc165, 0xc166, 0xc167, 0xc168, 0xc169, - 0xc16a, 0xc16b, 0xc16c, 0xc16e, 0xc16f, 0xc170, 0xc171, 0xc173, - 0xc174, 0xc175, 0xc177, 0xc178, 0xc17a, 0xc17b, 0xc17d, 0xc17f, - 0xc180, 0xc180, 0xc180, 0xc180, 0xc181, 0xc181, 0xc182, 0xc182, - 0xc183, 0xc184, 0xc185, 0xc185, 0xc186, 0xc187, 0xc188, 0xc189, - 0xc18a, 0xc18b, 0xc18c, 0xc18e, 0xc18f, 0xc190, 0xc191, 0xc193, - 0xc194, 0xc195, 0xc197, 0xc198, 0xc19a, 0xc19b, 0xc19d, 0xc19f, - 0xc1a0, 0xc1a0, 0xc1a0, 0xc1a0, 0xc1a1, 0xc1a1, 0xc1a2, 0xc1a2, - 0xc1a3, 0xc1a4, 0xc1a5, 0xc1a5, 0xc1a6, 0xc1a7, 0xc1a8, 0xc1a9, - 0xc1aa, 0xc1ab, 0xc1ac, 0xc1ae, 0xc1af, 0xc1b0, 0xc1b1, 0xc1b3, - 0xc1b4, 0xc1b5, 0xc1b7, 0xc1b8, 0xc1ba, 0xc1bb, 0xc1bd, 0xc1bf, - 0xc1c0, 0xc1c0, 0xc1c0, 0xc1c0, 0xc1c1, 0xc1c1, 0xc1c2, 0xc1c2, - 0xc1c3, 0xc1c4, 0xc1c5, 0xc1c5, 0xc1c6, 0xc1c7, 0xc1c8, 0xc1c9, - 0xc1ca, 0xc1cb, 0xc1cc, 0xc1ce, 0xc1cf, 0xc1d0, 0xc1d1, 0xc1d3, - 0xc1d4, 0xc1d5, 0xc1d7, 0xc1d8, 0xc1da, 0xc1db, 0xc1dd, 0xc1df, - 0xc1e0, 0xc1e0, 0xc1e0, 0xc1e0, 0xc1e1, 0xc1e1, 0xc1e2, 0xc1e2, - 0xc1e3, 0xc1e4, 0xc1e5, 0xc1e5, 0xc1e6, 0xc1e7, 0xc1e8, 0xc1e9, - 0xc1ea, 0xc1eb, 0xc1ec, 0xc1ee, 0xc1ef, 0xc1f0, 0xc1f1, 0xc1f3, - 0xc1f4, 0xc1f5, 0xc1f7, 0xc1f8, 0xc1fa, 0xc1fb, 0xc1fd, 0xc1ff, - 0xc200, 0xc200, 0xc200, 0xc200, 0xc201, 0xc201, 0xc202, 0xc202, - 0xc203, 0xc204, 0xc205, 0xc205, 0xc206, 0xc207, 0xc208, 0xc209, - 0xc20a, 0xc20b, 0xc20c, 0xc20e, 0xc20f, 0xc210, 0xc211, 0xc213, - 0xc214, 0xc215, 0xc217, 0xc218, 0xc21a, 0xc21b, 0xc21d, 0xc21f, - 0xc220, 0xc220, 0xc220, 0xc220, 0xc221, 0xc221, 0xc222, 0xc222, - 0xc223, 0xc224, 0xc225, 0xc225, 0xc226, 0xc227, 0xc228, 0xc229, - 0xc22a, 0xc22b, 0xc22c, 0xc22e, 0xc22f, 0xc230, 0xc231, 0xc233, - 0xc234, 0xc235, 0xc237, 0xc238, 0xc23a, 0xc23b, 0xc23d, 0xc23f, - 0xc240, 0xc240, 0xc240, 0xc240, 0xc241, 0xc241, 0xc242, 0xc242, - 0xc243, 0xc244, 0xc245, 0xc245, 0xc246, 0xc247, 0xc248, 0xc249, - 0xc24a, 0xc24b, 0xc24c, 0xc24e, 0xc24f, 0xc250, 0xc251, 0xc253, - 0xc254, 0xc255, 0xc257, 0xc258, 0xc25a, 0xc25b, 0xc25d, 0xc25f, - 0xc260, 0xc260, 0xc260, 0xc260, 0xc261, 0xc261, 0xc262, 0xc262, - 0xc263, 0xc264, 0xc265, 0xc265, 0xc266, 0xc267, 0xc268, 0xc269, - 0xc26a, 0xc26b, 0xc26c, 0xc26e, 0xc26f, 0xc270, 0xc271, 0xc273, - 0xc274, 0xc275, 0xc277, 0xc278, 0xc27a, 0xc27b, 0xc27d, 0xc27f, - 0xc280, 0xc280, 0xc280, 0xc280, 0xc281, 0xc281, 0xc282, 0xc282, - 0xc283, 0xc284, 0xc285, 0xc285, 0xc286, 0xc287, 0xc288, 0xc289, - 0xc28a, 0xc28b, 0xc28c, 0xc28e, 0xc28f, 0xc290, 0xc291, 0xc293, - 0xc294, 0xc295, 0xc297, 0xc298, 0xc29a, 0xc29b, 0xc29d, 0xc29f, - 0xc2a0, 0xc2a0, 0xc2a0, 0xc2a0, 0xc2a1, 0xc2a1, 0xc2a2, 0xc2a2, - 0xc2a3, 0xc2a4, 0xc2a5, 0xc2a5, 0xc2a6, 0xc2a7, 0xc2a8, 0xc2a9, - 0xc2aa, 0xc2ab, 0xc2ac, 0xc2ae, 0xc2af, 0xc2b0, 0xc2b1, 0xc2b3, - 0xc2b4, 0xc2b5, 0xc2b7, 0xc2b8, 0xc2ba, 0xc2bb, 0xc2bd, 0xc2bf, - 0xc2c0, 0xc2c0, 0xc2c0, 0xc2c0, 0xc2c1, 0xc2c1, 0xc2c2, 0xc2c2, - 0xc2c3, 0xc2c4, 0xc2c5, 0xc2c5, 0xc2c6, 0xc2c7, 0xc2c8, 0xc2c9, - 0xc2ca, 0xc2cb, 0xc2cc, 0xc2ce, 0xc2cf, 0xc2d0, 0xc2d1, 0xc2d3, - 0xc2d4, 0xc2d5, 0xc2d7, 0xc2d8, 0xc2da, 0xc2db, 0xc2dd, 0xc2df, - 0xc2e0, 0xc2e0, 0xc2e0, 0xc2e0, 0xc2e1, 0xc2e1, 0xc2e2, 0xc2e2, - 0xc2e3, 0xc2e4, 0xc2e5, 0xc2e5, 0xc2e6, 0xc2e7, 0xc2e8, 0xc2e9, - 0xc2ea, 0xc2eb, 0xc2ec, 0xc2ee, 0xc2ef, 0xc2f0, 0xc2f1, 0xc2f3, - 0xc2f4, 0xc2f5, 0xc2f7, 0xc2f8, 0xc2fa, 0xc2fb, 0xc2fd, 0xc2ff, - 0xc300, 0xc300, 0xc300, 0xc300, 0xc301, 0xc301, 0xc302, 0xc302, - 0xc303, 0xc304, 0xc305, 0xc305, 0xc306, 0xc307, 0xc308, 0xc309, - 0xc30a, 0xc30b, 0xc30c, 0xc30e, 0xc30f, 0xc310, 0xc311, 0xc313, - 0xc314, 0xc315, 0xc317, 0xc318, 0xc31a, 0xc31b, 0xc31d, 0xc31f, - 0xc320, 0xc320, 0xc320, 0xc320, 0xc321, 0xc321, 0xc322, 0xc322, - 0xc323, 0xc324, 0xc325, 0xc325, 0xc326, 0xc327, 0xc328, 0xc329, - 0xc32a, 0xc32b, 0xc32c, 0xc32e, 0xc32f, 0xc330, 0xc331, 0xc333, - 0xc334, 0xc335, 0xc337, 0xc338, 0xc33a, 0xc33b, 0xc33d, 0xc33f, - 0xc340, 0xc340, 0xc340, 0xc340, 0xc341, 0xc341, 0xc342, 0xc342, - 0xc343, 0xc344, 0xc345, 0xc345, 0xc346, 0xc347, 0xc348, 0xc349, - 0xc34a, 0xc34b, 0xc34c, 0xc34e, 0xc34f, 0xc350, 0xc351, 0xc353, - 0xc354, 0xc355, 0xc357, 0xc358, 0xc35a, 0xc35b, 0xc35d, 0xc35f, - 0xc380, 0xc380, 0xc380, 0xc380, 0xc381, 0xc381, 0xc382, 0xc382, - 0xc383, 0xc384, 0xc385, 0xc385, 0xc386, 0xc387, 0xc388, 0xc389, - 0xc38a, 0xc38b, 0xc38c, 0xc38e, 0xc38f, 0xc390, 0xc391, 0xc393, - 0xc394, 0xc395, 0xc397, 0xc398, 0xc39a, 0xc39b, 0xc39d, 0xc39f, - 0xc3a0, 0xc3a0, 0xc3a0, 0xc3a0, 0xc3a1, 0xc3a1, 0xc3a2, 0xc3a2, - 0xc3a3, 0xc3a4, 0xc3a5, 0xc3a5, 0xc3a6, 0xc3a7, 0xc3a8, 0xc3a9, - 0xc3aa, 0xc3ab, 0xc3ac, 0xc3ae, 0xc3af, 0xc3b0, 0xc3b1, 0xc3b3, - 0xc3b4, 0xc3b5, 0xc3b7, 0xc3b8, 0xc3ba, 0xc3bb, 0xc3bd, 0xc3bf, - 0xc3c0, 0xc3c0, 0xc3c0, 0xc3c0, 0xc3c1, 0xc3c1, 0xc3c2, 0xc3c2, - 0xc3c3, 0xc3c4, 0xc3c5, 0xc3c5, 0xc3c6, 0xc3c7, 0xc3c8, 0xc3c9, - 0xc3ca, 0xc3cb, 0xc3cc, 0xc3ce, 0xc3cf, 0xc3d0, 0xc3d1, 0xc3d3, - 0xc3d4, 0xc3d5, 0xc3d7, 0xc3d8, 0xc3da, 0xc3db, 0xc3dd, 0xc3df, - 0xc3e0, 0xc3e0, 0xc3e0, 0xc3e0, 0xc3e1, 0xc3e1, 0xc3e2, 0xc3e2, - 0xc3e3, 0xc3e4, 0xc3e5, 0xc3e5, 0xc3e6, 0xc3e7, 0xc3e8, 0xc3e9, - 0xc3ea, 0xc3eb, 0xc3ec, 0xc3ee, 0xc3ef, 0xc3f0, 0xc3f1, 0xc3f3, - 0xc3f4, 0xc3f5, 0xc3f7, 0xc3f8, 0xc3fa, 0xc3fb, 0xc3fd, 0xc3ff, - 0xc400, 0xc400, 0xc400, 0xc400, 0xc401, 0xc401, 0xc402, 0xc402, - 0xc403, 0xc404, 0xc405, 0xc405, 0xc406, 0xc407, 0xc408, 0xc409, - 0xc40a, 0xc40b, 0xc40c, 0xc40e, 0xc40f, 0xc410, 0xc411, 0xc413, - 0xc414, 0xc415, 0xc417, 0xc418, 0xc41a, 0xc41b, 0xc41d, 0xc41f, - 0xc440, 0xc440, 0xc440, 0xc440, 0xc441, 0xc441, 0xc442, 0xc442, - 0xc443, 0xc444, 0xc445, 0xc445, 0xc446, 0xc447, 0xc448, 0xc449, - 0xc44a, 0xc44b, 0xc44c, 0xc44e, 0xc44f, 0xc450, 0xc451, 0xc453, - 0xc454, 0xc455, 0xc457, 0xc458, 0xc45a, 0xc45b, 0xc45d, 0xc45f, - 0xc460, 0xc460, 0xc460, 0xc460, 0xc461, 0xc461, 0xc462, 0xc462, - 0xc463, 0xc464, 0xc465, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, - 0xc46a, 0xc46b, 0xc46c, 0xc46e, 0xc46f, 0xc470, 0xc471, 0xc473, - 0xc474, 0xc475, 0xc477, 0xc478, 0xc47a, 0xc47b, 0xc47d, 0xc47f, - 0xc480, 0xc480, 0xc480, 0xc480, 0xc481, 0xc481, 0xc482, 0xc482, - 0xc483, 0xc484, 0xc485, 0xc485, 0xc486, 0xc487, 0xc488, 0xc489, - 0xc48a, 0xc48b, 0xc48c, 0xc48e, 0xc48f, 0xc490, 0xc491, 0xc493, - 0xc494, 0xc495, 0xc497, 0xc498, 0xc49a, 0xc49b, 0xc49d, 0xc49f, - 0xc4c0, 0xc4c0, 0xc4c0, 0xc4c0, 0xc4c1, 0xc4c1, 0xc4c2, 0xc4c2, - 0xc4c3, 0xc4c4, 0xc4c5, 0xc4c5, 0xc4c6, 0xc4c7, 0xc4c8, 0xc4c9, - 0xc4ca, 0xc4cb, 0xc4cc, 0xc4ce, 0xc4cf, 0xc4d0, 0xc4d1, 0xc4d3, - 0xc4d4, 0xc4d5, 0xc4d7, 0xc4d8, 0xc4da, 0xc4db, 0xc4dd, 0xc4df, - 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e0, 0xc4e1, 0xc4e1, 0xc4e2, 0xc4e2, - 0xc4e3, 0xc4e4, 0xc4e5, 0xc4e5, 0xc4e6, 0xc4e7, 0xc4e8, 0xc4e9, - 0xc4ea, 0xc4eb, 0xc4ec, 0xc4ee, 0xc4ef, 0xc4f0, 0xc4f1, 0xc4f3, - 0xc4f4, 0xc4f5, 0xc4f7, 0xc4f8, 0xc4fa, 0xc4fb, 0xc4fd, 0xc4ff, - 0xc500, 0xc500, 0xc500, 0xc500, 0xc501, 0xc501, 0xc502, 0xc502, - 0xc503, 0xc504, 0xc505, 0xc505, 0xc506, 0xc507, 0xc508, 0xc509, - 0xc50a, 0xc50b, 0xc50c, 0xc50e, 0xc50f, 0xc510, 0xc511, 0xc513, - 0xc514, 0xc515, 0xc517, 0xc518, 0xc51a, 0xc51b, 0xc51d, 0xc51f, - 0xc540, 0xc540, 0xc540, 0xc540, 0xc541, 0xc541, 0xc542, 0xc542, - 0xc543, 0xc544, 0xc545, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, - 0xc54a, 0xc54b, 0xc54c, 0xc54e, 0xc54f, 0xc550, 0xc551, 0xc553, - 0xc554, 0xc555, 0xc557, 0xc558, 0xc55a, 0xc55b, 0xc55d, 0xc55f, - 0xc560, 0xc560, 0xc560, 0xc560, 0xc561, 0xc561, 0xc562, 0xc562, - 0xc563, 0xc564, 0xc565, 0xc565, 0xc566, 0xc567, 0xc568, 0xc569, - 0xc56a, 0xc56b, 0xc56c, 0xc56e, 0xc56f, 0xc570, 0xc571, 0xc573, - 0xc574, 0xc575, 0xc577, 0xc578, 0xc57a, 0xc57b, 0xc57d, 0xc57f, - 0xc580, 0xc580, 0xc580, 0xc580, 0xc581, 0xc581, 0xc582, 0xc582, - 0xc583, 0xc584, 0xc585, 0xc585, 0xc586, 0xc587, 0xc588, 0xc589, - 0xc58a, 0xc58b, 0xc58c, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc593, - 0xc594, 0xc595, 0xc597, 0xc598, 0xc59a, 0xc59b, 0xc59d, 0xc59f, - 0xc5c0, 0xc5c0, 0xc5c0, 0xc5c0, 0xc5c1, 0xc5c1, 0xc5c2, 0xc5c2, - 0xc5c3, 0xc5c4, 0xc5c5, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9, - 0xc5ca, 0xc5cb, 0xc5cc, 0xc5ce, 0xc5cf, 0xc5d0, 0xc5d1, 0xc5d3, - 0xc5d4, 0xc5d5, 0xc5d7, 0xc5d8, 0xc5da, 0xc5db, 0xc5dd, 0xc5df, - 0xc5e0, 0xc5e0, 0xc5e0, 0xc5e0, 0xc5e1, 0xc5e1, 0xc5e2, 0xc5e2, - 0xc5e3, 0xc5e4, 0xc5e5, 0xc5e5, 0xc5e6, 0xc5e7, 0xc5e8, 0xc5e9, - 0xc5ea, 0xc5eb, 0xc5ec, 0xc5ee, 0xc5ef, 0xc5f0, 0xc5f1, 0xc5f3, - 0xc5f4, 0xc5f5, 0xc5f7, 0xc5f8, 0xc5fa, 0xc5fb, 0xc5fd, 0xc5ff, - 0xc620, 0xc620, 0xc620, 0xc620, 0xc621, 0xc621, 0xc622, 0xc622, - 0xc623, 0xc624, 0xc625, 0xc625, 0xc626, 0xc627, 0xc628, 0xc629, - 0xc62a, 0xc62b, 0xc62c, 0xc62e, 0xc62f, 0xc630, 0xc631, 0xc633, - 0xc634, 0xc635, 0xc637, 0xc638, 0xc63a, 0xc63b, 0xc63d, 0xc63f, - 0xc640, 0xc640, 0xc640, 0xc640, 0xc641, 0xc641, 0xc642, 0xc642, - 0xc643, 0xc644, 0xc645, 0xc645, 0xc646, 0xc647, 0xc648, 0xc649, - 0xc64a, 0xc64b, 0xc64c, 0xc64e, 0xc64f, 0xc650, 0xc651, 0xc653, - 0xc654, 0xc655, 0xc657, 0xc658, 0xc65a, 0xc65b, 0xc65d, 0xc65f, - 0xc680, 0xc680, 0xc680, 0xc680, 0xc681, 0xc681, 0xc682, 0xc682, - 0xc683, 0xc684, 0xc685, 0xc685, 0xc686, 0xc687, 0xc688, 0xc689, - 0xc68a, 0xc68b, 0xc68c, 0xc68e, 0xc68f, 0xc690, 0xc691, 0xc693, - 0xc694, 0xc695, 0xc697, 0xc698, 0xc69a, 0xc69b, 0xc69d, 0xc69f, - 0xc6a0, 0xc6a0, 0xc6a0, 0xc6a0, 0xc6a1, 0xc6a1, 0xc6a2, 0xc6a2, - 0xc6a3, 0xc6a4, 0xc6a5, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, - 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b3, - 0xc6b4, 0xc6b5, 0xc6b7, 0xc6b8, 0xc6ba, 0xc6bb, 0xc6bd, 0xc6bf, - 0xc6e0, 0xc6e0, 0xc6e0, 0xc6e0, 0xc6e1, 0xc6e1, 0xc6e2, 0xc6e2, - 0xc6e3, 0xc6e4, 0xc6e5, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, - 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f3, - 0xc6f4, 0xc6f5, 0xc6f7, 0xc6f8, 0xc6fa, 0xc6fb, 0xc6fd, 0xc6ff, - 0xc700, 0xc700, 0xc700, 0xc700, 0xc701, 0xc701, 0xc702, 0xc702, - 0xc703, 0xc704, 0xc705, 0xc705, 0xc706, 0xc707, 0xc708, 0xc709, - 0xc70a, 0xc70b, 0xc70c, 0xc70e, 0xc70f, 0xc710, 0xc711, 0xc713, - 0xc714, 0xc715, 0xc717, 0xc718, 0xc71a, 0xc71b, 0xc71d, 0xc71f, - 0xc740, 0xc740, 0xc740, 0xc740, 0xc741, 0xc741, 0xc742, 0xc742, - 0xc743, 0xc744, 0xc745, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, - 0xc74a, 0xc74b, 0xc74c, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc753, - 0xc754, 0xc755, 0xc757, 0xc758, 0xc75a, 0xc75b, 0xc75d, 0xc75f, - 0xc760, 0xc760, 0xc760, 0xc760, 0xc761, 0xc761, 0xc762, 0xc762, - 0xc763, 0xc764, 0xc765, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, - 0xc76a, 0xc76b, 0xc76c, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc773, - 0xc774, 0xc775, 0xc777, 0xc778, 0xc77a, 0xc77b, 0xc77d, 0xc77f, - 0xc7a0, 0xc7a0, 0xc7a0, 0xc7a0, 0xc7a1, 0xc7a1, 0xc7a2, 0xc7a2, - 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, - 0xc7aa, 0xc7ab, 0xc7ac, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b3, - 0xc7b4, 0xc7b5, 0xc7b7, 0xc7b8, 0xc7ba, 0xc7bb, 0xc7bd, 0xc7bf, - 0xc7e0, 0xc7e0, 0xc7e0, 0xc7e0, 0xc7e1, 0xc7e1, 0xc7e2, 0xc7e2, - 0xc7e3, 0xc7e4, 0xc7e5, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7e9, - 0xc7ea, 0xc7eb, 0xc7ec, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f3, - 0xc7f4, 0xc7f5, 0xc7f7, 0xc7f8, 0xc7fa, 0xc7fb, 0xc7fd, 0xc7ff, - 0xd000, 0xd000, 0xd000, 0xd000, 0xd001, 0xd001, 0xd002, 0xd002, - 0xd003, 0xd004, 0xd005, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, - 0xd00a, 0xd00b, 0xd00c, 0xd00e, 0xd00f, 0xd010, 0xd011, 0xd013, - 0xd014, 0xd015, 0xd017, 0xd018, 0xd01a, 0xd01b, 0xd01d, 0xd01f, - 0xd000, 0xd000, 0xd000, 0xd000, 0xd001, 0xd001, 0xd002, 0xd002, - 0xd003, 0xd004, 0xd005, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, - 0xd00a, 0xd00b, 0xd00c, 0xd00e, 0xd00f, 0xd010, 0xd011, 0xd013, - 0xd014, 0xd015, 0xd017, 0xd018, 0xd01a, 0xd01b, 0xd01d, 0xd01f, - 0xd000, 0xd000, 0xd000, 0xd000, 0xd001, 0xd001, 0xd002, 0xd002, - 0xd003, 0xd004, 0xd005, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, - 0xd00a, 0xd00b, 0xd00c, 0xd00e, 0xd00f, 0xd010, 0xd011, 0xd013, - 0xd014, 0xd015, 0xd017, 0xd018, 0xd01a, 0xd01b, 0xd01d, 0xd01f, - 0xd000, 0xd000, 0xd000, 0xd000, 0xd001, 0xd001, 0xd002, 0xd002, - 0xd003, 0xd004, 0xd005, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, - 0xd00a, 0xd00b, 0xd00c, 0xd00e, 0xd00f, 0xd010, 0xd011, 0xd013, - 0xd014, 0xd015, 0xd017, 0xd018, 0xd01a, 0xd01b, 0xd01d, 0xd01f, - 0xd000, 0xd000, 0xd000, 0xd000, 0xd001, 0xd001, 0xd002, 0xd002, - 0xd003, 0xd004, 0xd005, 0xd005, 0xd006, 0xd007, 0xd008, 0xd009, - 0xd00a, 0xd00b, 0xd00c, 0xd00e, 0xd00f, 0xd010, 0xd011, 0xd013, - 0xd014, 0xd015, 0xd017, 0xd018, 0xd01a, 0xd01b, 0xd01d, 0xd01f, - 0xd020, 0xd020, 0xd020, 0xd020, 0xd021, 0xd021, 0xd022, 0xd022, - 0xd023, 0xd024, 0xd025, 0xd025, 0xd026, 0xd027, 0xd028, 0xd029, - 0xd02a, 0xd02b, 0xd02c, 0xd02e, 0xd02f, 0xd030, 0xd031, 0xd033, - 0xd034, 0xd035, 0xd037, 0xd038, 0xd03a, 0xd03b, 0xd03d, 0xd03f, - 0xd020, 0xd020, 0xd020, 0xd020, 0xd021, 0xd021, 0xd022, 0xd022, - 0xd023, 0xd024, 0xd025, 0xd025, 0xd026, 0xd027, 0xd028, 0xd029, - 0xd02a, 0xd02b, 0xd02c, 0xd02e, 0xd02f, 0xd030, 0xd031, 0xd033, - 0xd034, 0xd035, 0xd037, 0xd038, 0xd03a, 0xd03b, 0xd03d, 0xd03f, - 0xd020, 0xd020, 0xd020, 0xd020, 0xd021, 0xd021, 0xd022, 0xd022, - 0xd023, 0xd024, 0xd025, 0xd025, 0xd026, 0xd027, 0xd028, 0xd029, - 0xd02a, 0xd02b, 0xd02c, 0xd02e, 0xd02f, 0xd030, 0xd031, 0xd033, - 0xd034, 0xd035, 0xd037, 0xd038, 0xd03a, 0xd03b, 0xd03d, 0xd03f, - 0xd040, 0xd040, 0xd040, 0xd040, 0xd041, 0xd041, 0xd042, 0xd042, - 0xd043, 0xd044, 0xd045, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, - 0xd04a, 0xd04b, 0xd04c, 0xd04e, 0xd04f, 0xd050, 0xd051, 0xd053, - 0xd054, 0xd055, 0xd057, 0xd058, 0xd05a, 0xd05b, 0xd05d, 0xd05f, - 0xd040, 0xd040, 0xd040, 0xd040, 0xd041, 0xd041, 0xd042, 0xd042, - 0xd043, 0xd044, 0xd045, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, - 0xd04a, 0xd04b, 0xd04c, 0xd04e, 0xd04f, 0xd050, 0xd051, 0xd053, - 0xd054, 0xd055, 0xd057, 0xd058, 0xd05a, 0xd05b, 0xd05d, 0xd05f, - 0xd060, 0xd060, 0xd060, 0xd060, 0xd061, 0xd061, 0xd062, 0xd062, - 0xd063, 0xd064, 0xd065, 0xd065, 0xd066, 0xd067, 0xd068, 0xd069, - 0xd06a, 0xd06b, 0xd06c, 0xd06e, 0xd06f, 0xd070, 0xd071, 0xd073, - 0xd074, 0xd075, 0xd077, 0xd078, 0xd07a, 0xd07b, 0xd07d, 0xd07f, - 0xd060, 0xd060, 0xd060, 0xd060, 0xd061, 0xd061, 0xd062, 0xd062, - 0xd063, 0xd064, 0xd065, 0xd065, 0xd066, 0xd067, 0xd068, 0xd069, - 0xd06a, 0xd06b, 0xd06c, 0xd06e, 0xd06f, 0xd070, 0xd071, 0xd073, - 0xd074, 0xd075, 0xd077, 0xd078, 0xd07a, 0xd07b, 0xd07d, 0xd07f, - 0xd080, 0xd080, 0xd080, 0xd080, 0xd081, 0xd081, 0xd082, 0xd082, - 0xd083, 0xd084, 0xd085, 0xd085, 0xd086, 0xd087, 0xd088, 0xd089, - 0xd08a, 0xd08b, 0xd08c, 0xd08e, 0xd08f, 0xd090, 0xd091, 0xd093, - 0xd094, 0xd095, 0xd097, 0xd098, 0xd09a, 0xd09b, 0xd09d, 0xd09f, - 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a1, 0xd0a1, 0xd0a2, 0xd0a2, - 0xd0a3, 0xd0a4, 0xd0a5, 0xd0a5, 0xd0a6, 0xd0a7, 0xd0a8, 0xd0a9, - 0xd0aa, 0xd0ab, 0xd0ac, 0xd0ae, 0xd0af, 0xd0b0, 0xd0b1, 0xd0b3, - 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b8, 0xd0ba, 0xd0bb, 0xd0bd, 0xd0bf, - 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a0, 0xd0a1, 0xd0a1, 0xd0a2, 0xd0a2, - 0xd0a3, 0xd0a4, 0xd0a5, 0xd0a5, 0xd0a6, 0xd0a7, 0xd0a8, 0xd0a9, - 0xd0aa, 0xd0ab, 0xd0ac, 0xd0ae, 0xd0af, 0xd0b0, 0xd0b1, 0xd0b3, - 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b8, 0xd0ba, 0xd0bb, 0xd0bd, 0xd0bf, - 0xd0c0, 0xd0c0, 0xd0c0, 0xd0c0, 0xd0c1, 0xd0c1, 0xd0c2, 0xd0c2, - 0xd0c3, 0xd0c4, 0xd0c5, 0xd0c5, 0xd0c6, 0xd0c7, 0xd0c8, 0xd0c9, - 0xd0ca, 0xd0cb, 0xd0cc, 0xd0ce, 0xd0cf, 0xd0d0, 0xd0d1, 0xd0d3, - 0xd0d4, 0xd0d5, 0xd0d7, 0xd0d8, 0xd0da, 0xd0db, 0xd0dd, 0xd0df, - 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e1, 0xd0e1, 0xd0e2, 0xd0e2, - 0xd0e3, 0xd0e4, 0xd0e5, 0xd0e5, 0xd0e6, 0xd0e7, 0xd0e8, 0xd0e9, - 0xd0ea, 0xd0eb, 0xd0ec, 0xd0ee, 0xd0ef, 0xd0f0, 0xd0f1, 0xd0f3, - 0xd0f4, 0xd0f5, 0xd0f7, 0xd0f8, 0xd0fa, 0xd0fb, 0xd0fd, 0xd0ff, - 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e0, 0xd0e1, 0xd0e1, 0xd0e2, 0xd0e2, - 0xd0e3, 0xd0e4, 0xd0e5, 0xd0e5, 0xd0e6, 0xd0e7, 0xd0e8, 0xd0e9, - 0xd0ea, 0xd0eb, 0xd0ec, 0xd0ee, 0xd0ef, 0xd0f0, 0xd0f1, 0xd0f3, - 0xd0f4, 0xd0f5, 0xd0f7, 0xd0f8, 0xd0fa, 0xd0fb, 0xd0fd, 0xd0ff, - 0xd100, 0xd100, 0xd100, 0xd100, 0xd101, 0xd101, 0xd102, 0xd102, - 0xd103, 0xd104, 0xd105, 0xd105, 0xd106, 0xd107, 0xd108, 0xd109, - 0xd10a, 0xd10b, 0xd10c, 0xd10e, 0xd10f, 0xd110, 0xd111, 0xd113, - 0xd114, 0xd115, 0xd117, 0xd118, 0xd11a, 0xd11b, 0xd11d, 0xd11f, - 0xd120, 0xd120, 0xd120, 0xd120, 0xd121, 0xd121, 0xd122, 0xd122, - 0xd123, 0xd124, 0xd125, 0xd125, 0xd126, 0xd127, 0xd128, 0xd129, - 0xd12a, 0xd12b, 0xd12c, 0xd12e, 0xd12f, 0xd130, 0xd131, 0xd133, - 0xd134, 0xd135, 0xd137, 0xd138, 0xd13a, 0xd13b, 0xd13d, 0xd13f, - 0xd140, 0xd140, 0xd140, 0xd140, 0xd141, 0xd141, 0xd142, 0xd142, - 0xd143, 0xd144, 0xd145, 0xd145, 0xd146, 0xd147, 0xd148, 0xd149, - 0xd14a, 0xd14b, 0xd14c, 0xd14e, 0xd14f, 0xd150, 0xd151, 0xd153, - 0xd154, 0xd155, 0xd157, 0xd158, 0xd15a, 0xd15b, 0xd15d, 0xd15f, - 0xd140, 0xd140, 0xd140, 0xd140, 0xd141, 0xd141, 0xd142, 0xd142, - 0xd143, 0xd144, 0xd145, 0xd145, 0xd146, 0xd147, 0xd148, 0xd149, - 0xd14a, 0xd14b, 0xd14c, 0xd14e, 0xd14f, 0xd150, 0xd151, 0xd153, - 0xd154, 0xd155, 0xd157, 0xd158, 0xd15a, 0xd15b, 0xd15d, 0xd15f, - 0xd160, 0xd160, 0xd160, 0xd160, 0xd161, 0xd161, 0xd162, 0xd162, - 0xd163, 0xd164, 0xd165, 0xd165, 0xd166, 0xd167, 0xd168, 0xd169, - 0xd16a, 0xd16b, 0xd16c, 0xd16e, 0xd16f, 0xd170, 0xd171, 0xd173, - 0xd174, 0xd175, 0xd177, 0xd178, 0xd17a, 0xd17b, 0xd17d, 0xd17f, - 0xd180, 0xd180, 0xd180, 0xd180, 0xd181, 0xd181, 0xd182, 0xd182, - 0xd183, 0xd184, 0xd185, 0xd185, 0xd186, 0xd187, 0xd188, 0xd189, - 0xd18a, 0xd18b, 0xd18c, 0xd18e, 0xd18f, 0xd190, 0xd191, 0xd193, - 0xd194, 0xd195, 0xd197, 0xd198, 0xd19a, 0xd19b, 0xd19d, 0xd19f, - 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a0, 0xd1a1, 0xd1a1, 0xd1a2, 0xd1a2, - 0xd1a3, 0xd1a4, 0xd1a5, 0xd1a5, 0xd1a6, 0xd1a7, 0xd1a8, 0xd1a9, - 0xd1aa, 0xd1ab, 0xd1ac, 0xd1ae, 0xd1af, 0xd1b0, 0xd1b1, 0xd1b3, - 0xd1b4, 0xd1b5, 0xd1b7, 0xd1b8, 0xd1ba, 0xd1bb, 0xd1bd, 0xd1bf, - 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c0, 0xd1c1, 0xd1c1, 0xd1c2, 0xd1c2, - 0xd1c3, 0xd1c4, 0xd1c5, 0xd1c5, 0xd1c6, 0xd1c7, 0xd1c8, 0xd1c9, - 0xd1ca, 0xd1cb, 0xd1cc, 0xd1ce, 0xd1cf, 0xd1d0, 0xd1d1, 0xd1d3, - 0xd1d4, 0xd1d5, 0xd1d7, 0xd1d8, 0xd1da, 0xd1db, 0xd1dd, 0xd1df, - 0xd1e0, 0xd1e0, 0xd1e0, 0xd1e0, 0xd1e1, 0xd1e1, 0xd1e2, 0xd1e2, - 0xd1e3, 0xd1e4, 0xd1e5, 0xd1e5, 0xd1e6, 0xd1e7, 0xd1e8, 0xd1e9, - 0xd1ea, 0xd1eb, 0xd1ec, 0xd1ee, 0xd1ef, 0xd1f0, 0xd1f1, 0xd1f3, - 0xd1f4, 0xd1f5, 0xd1f7, 0xd1f8, 0xd1fa, 0xd1fb, 0xd1fd, 0xd1ff, - 0xd200, 0xd200, 0xd200, 0xd200, 0xd201, 0xd201, 0xd202, 0xd202, - 0xd203, 0xd204, 0xd205, 0xd205, 0xd206, 0xd207, 0xd208, 0xd209, - 0xd20a, 0xd20b, 0xd20c, 0xd20e, 0xd20f, 0xd210, 0xd211, 0xd213, - 0xd214, 0xd215, 0xd217, 0xd218, 0xd21a, 0xd21b, 0xd21d, 0xd21f, - 0xd220, 0xd220, 0xd220, 0xd220, 0xd221, 0xd221, 0xd222, 0xd222, - 0xd223, 0xd224, 0xd225, 0xd225, 0xd226, 0xd227, 0xd228, 0xd229, - 0xd22a, 0xd22b, 0xd22c, 0xd22e, 0xd22f, 0xd230, 0xd231, 0xd233, - 0xd234, 0xd235, 0xd237, 0xd238, 0xd23a, 0xd23b, 0xd23d, 0xd23f, - 0xd240, 0xd240, 0xd240, 0xd240, 0xd241, 0xd241, 0xd242, 0xd242, - 0xd243, 0xd244, 0xd245, 0xd245, 0xd246, 0xd247, 0xd248, 0xd249, - 0xd24a, 0xd24b, 0xd24c, 0xd24e, 0xd24f, 0xd250, 0xd251, 0xd253, - 0xd254, 0xd255, 0xd257, 0xd258, 0xd25a, 0xd25b, 0xd25d, 0xd25f, - 0xd260, 0xd260, 0xd260, 0xd260, 0xd261, 0xd261, 0xd262, 0xd262, - 0xd263, 0xd264, 0xd265, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, - 0xd26a, 0xd26b, 0xd26c, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd273, - 0xd274, 0xd275, 0xd277, 0xd278, 0xd27a, 0xd27b, 0xd27d, 0xd27f, - 0xd280, 0xd280, 0xd280, 0xd280, 0xd281, 0xd281, 0xd282, 0xd282, - 0xd283, 0xd284, 0xd285, 0xd285, 0xd286, 0xd287, 0xd288, 0xd289, - 0xd28a, 0xd28b, 0xd28c, 0xd28e, 0xd28f, 0xd290, 0xd291, 0xd293, - 0xd294, 0xd295, 0xd297, 0xd298, 0xd29a, 0xd29b, 0xd29d, 0xd29f, - 0xd2a0, 0xd2a0, 0xd2a0, 0xd2a0, 0xd2a1, 0xd2a1, 0xd2a2, 0xd2a2, - 0xd2a3, 0xd2a4, 0xd2a5, 0xd2a5, 0xd2a6, 0xd2a7, 0xd2a8, 0xd2a9, - 0xd2aa, 0xd2ab, 0xd2ac, 0xd2ae, 0xd2af, 0xd2b0, 0xd2b1, 0xd2b3, - 0xd2b4, 0xd2b5, 0xd2b7, 0xd2b8, 0xd2ba, 0xd2bb, 0xd2bd, 0xd2bf, - 0xd2c0, 0xd2c0, 0xd2c0, 0xd2c0, 0xd2c1, 0xd2c1, 0xd2c2, 0xd2c2, - 0xd2c3, 0xd2c4, 0xd2c5, 0xd2c5, 0xd2c6, 0xd2c7, 0xd2c8, 0xd2c9, - 0xd2ca, 0xd2cb, 0xd2cc, 0xd2ce, 0xd2cf, 0xd2d0, 0xd2d1, 0xd2d3, - 0xd2d4, 0xd2d5, 0xd2d7, 0xd2d8, 0xd2da, 0xd2db, 0xd2dd, 0xd2df, - 0xd2e0, 0xd2e0, 0xd2e0, 0xd2e0, 0xd2e1, 0xd2e1, 0xd2e2, 0xd2e2, - 0xd2e3, 0xd2e4, 0xd2e5, 0xd2e5, 0xd2e6, 0xd2e7, 0xd2e8, 0xd2e9, - 0xd2ea, 0xd2eb, 0xd2ec, 0xd2ee, 0xd2ef, 0xd2f0, 0xd2f1, 0xd2f3, - 0xd2f4, 0xd2f5, 0xd2f7, 0xd2f8, 0xd2fa, 0xd2fb, 0xd2fd, 0xd2ff, - 0xd300, 0xd300, 0xd300, 0xd300, 0xd301, 0xd301, 0xd302, 0xd302, - 0xd303, 0xd304, 0xd305, 0xd305, 0xd306, 0xd307, 0xd308, 0xd309, - 0xd30a, 0xd30b, 0xd30c, 0xd30e, 0xd30f, 0xd310, 0xd311, 0xd313, - 0xd314, 0xd315, 0xd317, 0xd318, 0xd31a, 0xd31b, 0xd31d, 0xd31f, - 0xd320, 0xd320, 0xd320, 0xd320, 0xd321, 0xd321, 0xd322, 0xd322, - 0xd323, 0xd324, 0xd325, 0xd325, 0xd326, 0xd327, 0xd328, 0xd329, - 0xd32a, 0xd32b, 0xd32c, 0xd32e, 0xd32f, 0xd330, 0xd331, 0xd333, - 0xd334, 0xd335, 0xd337, 0xd338, 0xd33a, 0xd33b, 0xd33d, 0xd33f, - 0xd340, 0xd340, 0xd340, 0xd340, 0xd341, 0xd341, 0xd342, 0xd342, - 0xd343, 0xd344, 0xd345, 0xd345, 0xd346, 0xd347, 0xd348, 0xd349, - 0xd34a, 0xd34b, 0xd34c, 0xd34e, 0xd34f, 0xd350, 0xd351, 0xd353, - 0xd354, 0xd355, 0xd357, 0xd358, 0xd35a, 0xd35b, 0xd35d, 0xd35f, - 0xd380, 0xd380, 0xd380, 0xd380, 0xd381, 0xd381, 0xd382, 0xd382, - 0xd383, 0xd384, 0xd385, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, - 0xd38a, 0xd38b, 0xd38c, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd393, - 0xd394, 0xd395, 0xd397, 0xd398, 0xd39a, 0xd39b, 0xd39d, 0xd39f, - 0xd3a0, 0xd3a0, 0xd3a0, 0xd3a0, 0xd3a1, 0xd3a1, 0xd3a2, 0xd3a2, - 0xd3a3, 0xd3a4, 0xd3a5, 0xd3a5, 0xd3a6, 0xd3a7, 0xd3a8, 0xd3a9, - 0xd3aa, 0xd3ab, 0xd3ac, 0xd3ae, 0xd3af, 0xd3b0, 0xd3b1, 0xd3b3, - 0xd3b4, 0xd3b5, 0xd3b7, 0xd3b8, 0xd3ba, 0xd3bb, 0xd3bd, 0xd3bf, - 0xd3c0, 0xd3c0, 0xd3c0, 0xd3c0, 0xd3c1, 0xd3c1, 0xd3c2, 0xd3c2, - 0xd3c3, 0xd3c4, 0xd3c5, 0xd3c5, 0xd3c6, 0xd3c7, 0xd3c8, 0xd3c9, - 0xd3ca, 0xd3cb, 0xd3cc, 0xd3ce, 0xd3cf, 0xd3d0, 0xd3d1, 0xd3d3, - 0xd3d4, 0xd3d5, 0xd3d7, 0xd3d8, 0xd3da, 0xd3db, 0xd3dd, 0xd3df, - 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e0, 0xd3e1, 0xd3e1, 0xd3e2, 0xd3e2, - 0xd3e3, 0xd3e4, 0xd3e5, 0xd3e5, 0xd3e6, 0xd3e7, 0xd3e8, 0xd3e9, - 0xd3ea, 0xd3eb, 0xd3ec, 0xd3ee, 0xd3ef, 0xd3f0, 0xd3f1, 0xd3f3, - 0xd3f4, 0xd3f5, 0xd3f7, 0xd3f8, 0xd3fa, 0xd3fb, 0xd3fd, 0xd3ff, - 0xd400, 0xd400, 0xd400, 0xd400, 0xd401, 0xd401, 0xd402, 0xd402, - 0xd403, 0xd404, 0xd405, 0xd405, 0xd406, 0xd407, 0xd408, 0xd409, - 0xd40a, 0xd40b, 0xd40c, 0xd40e, 0xd40f, 0xd410, 0xd411, 0xd413, - 0xd414, 0xd415, 0xd417, 0xd418, 0xd41a, 0xd41b, 0xd41d, 0xd41f, - 0xd440, 0xd440, 0xd440, 0xd440, 0xd441, 0xd441, 0xd442, 0xd442, - 0xd443, 0xd444, 0xd445, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, - 0xd44a, 0xd44b, 0xd44c, 0xd44e, 0xd44f, 0xd450, 0xd451, 0xd453, - 0xd454, 0xd455, 0xd457, 0xd458, 0xd45a, 0xd45b, 0xd45d, 0xd45f, - 0xd460, 0xd460, 0xd460, 0xd460, 0xd461, 0xd461, 0xd462, 0xd462, - 0xd463, 0xd464, 0xd465, 0xd465, 0xd466, 0xd467, 0xd468, 0xd469, - 0xd46a, 0xd46b, 0xd46c, 0xd46e, 0xd46f, 0xd470, 0xd471, 0xd473, - 0xd474, 0xd475, 0xd477, 0xd478, 0xd47a, 0xd47b, 0xd47d, 0xd47f, - 0xd480, 0xd480, 0xd480, 0xd480, 0xd481, 0xd481, 0xd482, 0xd482, - 0xd483, 0xd484, 0xd485, 0xd485, 0xd486, 0xd487, 0xd488, 0xd489, - 0xd48a, 0xd48b, 0xd48c, 0xd48e, 0xd48f, 0xd490, 0xd491, 0xd493, - 0xd494, 0xd495, 0xd497, 0xd498, 0xd49a, 0xd49b, 0xd49d, 0xd49f, - 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c0, 0xd4c1, 0xd4c1, 0xd4c2, 0xd4c2, - 0xd4c3, 0xd4c4, 0xd4c5, 0xd4c5, 0xd4c6, 0xd4c7, 0xd4c8, 0xd4c9, - 0xd4ca, 0xd4cb, 0xd4cc, 0xd4ce, 0xd4cf, 0xd4d0, 0xd4d1, 0xd4d3, - 0xd4d4, 0xd4d5, 0xd4d7, 0xd4d8, 0xd4da, 0xd4db, 0xd4dd, 0xd4df, - 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e0, 0xd4e1, 0xd4e1, 0xd4e2, 0xd4e2, - 0xd4e3, 0xd4e4, 0xd4e5, 0xd4e5, 0xd4e6, 0xd4e7, 0xd4e8, 0xd4e9, - 0xd4ea, 0xd4eb, 0xd4ec, 0xd4ee, 0xd4ef, 0xd4f0, 0xd4f1, 0xd4f3, - 0xd4f4, 0xd4f5, 0xd4f7, 0xd4f8, 0xd4fa, 0xd4fb, 0xd4fd, 0xd4ff, - 0xd500, 0xd500, 0xd500, 0xd500, 0xd501, 0xd501, 0xd502, 0xd502, - 0xd503, 0xd504, 0xd505, 0xd505, 0xd506, 0xd507, 0xd508, 0xd509, - 0xd50a, 0xd50b, 0xd50c, 0xd50e, 0xd50f, 0xd510, 0xd511, 0xd513, - 0xd514, 0xd515, 0xd517, 0xd518, 0xd51a, 0xd51b, 0xd51d, 0xd51f, - 0xd540, 0xd540, 0xd540, 0xd540, 0xd541, 0xd541, 0xd542, 0xd542, - 0xd543, 0xd544, 0xd545, 0xd545, 0xd546, 0xd547, 0xd548, 0xd549, - 0xd54a, 0xd54b, 0xd54c, 0xd54e, 0xd54f, 0xd550, 0xd551, 0xd553, - 0xd554, 0xd555, 0xd557, 0xd558, 0xd55a, 0xd55b, 0xd55d, 0xd55f, - 0xd560, 0xd560, 0xd560, 0xd560, 0xd561, 0xd561, 0xd562, 0xd562, - 0xd563, 0xd564, 0xd565, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, - 0xd56a, 0xd56b, 0xd56c, 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd573, - 0xd574, 0xd575, 0xd577, 0xd578, 0xd57a, 0xd57b, 0xd57d, 0xd57f, - 0xd580, 0xd580, 0xd580, 0xd580, 0xd581, 0xd581, 0xd582, 0xd582, - 0xd583, 0xd584, 0xd585, 0xd585, 0xd586, 0xd587, 0xd588, 0xd589, - 0xd58a, 0xd58b, 0xd58c, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd593, - 0xd594, 0xd595, 0xd597, 0xd598, 0xd59a, 0xd59b, 0xd59d, 0xd59f, - 0xd5c0, 0xd5c0, 0xd5c0, 0xd5c0, 0xd5c1, 0xd5c1, 0xd5c2, 0xd5c2, - 0xd5c3, 0xd5c4, 0xd5c5, 0xd5c5, 0xd5c6, 0xd5c7, 0xd5c8, 0xd5c9, - 0xd5ca, 0xd5cb, 0xd5cc, 0xd5ce, 0xd5cf, 0xd5d0, 0xd5d1, 0xd5d3, - 0xd5d4, 0xd5d5, 0xd5d7, 0xd5d8, 0xd5da, 0xd5db, 0xd5dd, 0xd5df, - 0xd5e0, 0xd5e0, 0xd5e0, 0xd5e0, 0xd5e1, 0xd5e1, 0xd5e2, 0xd5e2, - 0xd5e3, 0xd5e4, 0xd5e5, 0xd5e5, 0xd5e6, 0xd5e7, 0xd5e8, 0xd5e9, - 0xd5ea, 0xd5eb, 0xd5ec, 0xd5ee, 0xd5ef, 0xd5f0, 0xd5f1, 0xd5f3, - 0xd5f4, 0xd5f5, 0xd5f7, 0xd5f8, 0xd5fa, 0xd5fb, 0xd5fd, 0xd5ff, - 0xd620, 0xd620, 0xd620, 0xd620, 0xd621, 0xd621, 0xd622, 0xd622, - 0xd623, 0xd624, 0xd625, 0xd625, 0xd626, 0xd627, 0xd628, 0xd629, - 0xd62a, 0xd62b, 0xd62c, 0xd62e, 0xd62f, 0xd630, 0xd631, 0xd633, - 0xd634, 0xd635, 0xd637, 0xd638, 0xd63a, 0xd63b, 0xd63d, 0xd63f, - 0xd640, 0xd640, 0xd640, 0xd640, 0xd641, 0xd641, 0xd642, 0xd642, - 0xd643, 0xd644, 0xd645, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, - 0xd64a, 0xd64b, 0xd64c, 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd653, - 0xd654, 0xd655, 0xd657, 0xd658, 0xd65a, 0xd65b, 0xd65d, 0xd65f, - 0xd680, 0xd680, 0xd680, 0xd680, 0xd681, 0xd681, 0xd682, 0xd682, - 0xd683, 0xd684, 0xd685, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, - 0xd68a, 0xd68b, 0xd68c, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd693, - 0xd694, 0xd695, 0xd697, 0xd698, 0xd69a, 0xd69b, 0xd69d, 0xd69f, - 0xd6a0, 0xd6a0, 0xd6a0, 0xd6a0, 0xd6a1, 0xd6a1, 0xd6a2, 0xd6a2, - 0xd6a3, 0xd6a4, 0xd6a5, 0xd6a5, 0xd6a6, 0xd6a7, 0xd6a8, 0xd6a9, - 0xd6aa, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6af, 0xd6b0, 0xd6b1, 0xd6b3, - 0xd6b4, 0xd6b5, 0xd6b7, 0xd6b8, 0xd6ba, 0xd6bb, 0xd6bd, 0xd6bf, - 0xd6e0, 0xd6e0, 0xd6e0, 0xd6e0, 0xd6e1, 0xd6e1, 0xd6e2, 0xd6e2, - 0xd6e3, 0xd6e4, 0xd6e5, 0xd6e5, 0xd6e6, 0xd6e7, 0xd6e8, 0xd6e9, - 0xd6ea, 0xd6eb, 0xd6ec, 0xd6ee, 0xd6ef, 0xd6f0, 0xd6f1, 0xd6f3, - 0xd6f4, 0xd6f5, 0xd6f7, 0xd6f8, 0xd6fa, 0xd6fb, 0xd6fd, 0xd6ff, - 0xd700, 0xd700, 0xd700, 0xd700, 0xd701, 0xd701, 0xd702, 0xd702, - 0xd703, 0xd704, 0xd705, 0xd705, 0xd706, 0xd707, 0xd708, 0xd709, - 0xd70a, 0xd70b, 0xd70c, 0xd70e, 0xd70f, 0xd710, 0xd711, 0xd713, - 0xd714, 0xd715, 0xd717, 0xd718, 0xd71a, 0xd71b, 0xd71d, 0xd71f, - 0xd740, 0xd740, 0xd740, 0xd740, 0xd741, 0xd741, 0xd742, 0xd742, - 0xd743, 0xd744, 0xd745, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, - 0xd74a, 0xd74b, 0xd74c, 0xd74e, 0xd74f, 0xd750, 0xd751, 0xd753, - 0xd754, 0xd755, 0xd757, 0xd758, 0xd75a, 0xd75b, 0xd75d, 0xd75f, - 0xd760, 0xd760, 0xd760, 0xd760, 0xd761, 0xd761, 0xd762, 0xd762, - 0xd763, 0xd764, 0xd765, 0xd765, 0xd766, 0xd767, 0xd768, 0xd769, - 0xd76a, 0xd76b, 0xd76c, 0xd76e, 0xd76f, 0xd770, 0xd771, 0xd773, - 0xd774, 0xd775, 0xd777, 0xd778, 0xd77a, 0xd77b, 0xd77d, 0xd77f, - 0xd7a0, 0xd7a0, 0xd7a0, 0xd7a0, 0xd7a1, 0xd7a1, 0xd7a2, 0xd7a2, - 0xd7a3, 0xd7a4, 0xd7a5, 0xd7a5, 0xd7a6, 0xd7a7, 0xd7a8, 0xd7a9, - 0xd7aa, 0xd7ab, 0xd7ac, 0xd7ae, 0xd7af, 0xd7b0, 0xd7b1, 0xd7b3, - 0xd7b4, 0xd7b5, 0xd7b7, 0xd7b8, 0xd7ba, 0xd7bb, 0xd7bd, 0xd7bf, - 0xd7e0, 0xd7e0, 0xd7e0, 0xd7e0, 0xd7e1, 0xd7e1, 0xd7e2, 0xd7e2, - 0xd7e3, 0xd7e4, 0xd7e5, 0xd7e5, 0xd7e6, 0xd7e7, 0xd7e8, 0xd7e9, - 0xd7ea, 0xd7eb, 0xd7ec, 0xd7ee, 0xd7ef, 0xd7f0, 0xd7f1, 0xd7f3, - 0xd7f4, 0xd7f5, 0xd7f7, 0xd7f8, 0xd7fa, 0xd7fb, 0xd7fd, 0xd7ff, - 0xd800, 0xd800, 0xd800, 0xd800, 0xd801, 0xd801, 0xd802, 0xd802, - 0xd803, 0xd804, 0xd805, 0xd805, 0xd806, 0xd807, 0xd808, 0xd809, - 0xd80a, 0xd80b, 0xd80c, 0xd80e, 0xd80f, 0xd810, 0xd811, 0xd813, - 0xd814, 0xd815, 0xd817, 0xd818, 0xd81a, 0xd81b, 0xd81d, 0xd81f, - 0xd800, 0xd800, 0xd800, 0xd800, 0xd801, 0xd801, 0xd802, 0xd802, - 0xd803, 0xd804, 0xd805, 0xd805, 0xd806, 0xd807, 0xd808, 0xd809, - 0xd80a, 0xd80b, 0xd80c, 0xd80e, 0xd80f, 0xd810, 0xd811, 0xd813, - 0xd814, 0xd815, 0xd817, 0xd818, 0xd81a, 0xd81b, 0xd81d, 0xd81f, - 0xd800, 0xd800, 0xd800, 0xd800, 0xd801, 0xd801, 0xd802, 0xd802, - 0xd803, 0xd804, 0xd805, 0xd805, 0xd806, 0xd807, 0xd808, 0xd809, - 0xd80a, 0xd80b, 0xd80c, 0xd80e, 0xd80f, 0xd810, 0xd811, 0xd813, - 0xd814, 0xd815, 0xd817, 0xd818, 0xd81a, 0xd81b, 0xd81d, 0xd81f, - 0xd800, 0xd800, 0xd800, 0xd800, 0xd801, 0xd801, 0xd802, 0xd802, - 0xd803, 0xd804, 0xd805, 0xd805, 0xd806, 0xd807, 0xd808, 0xd809, - 0xd80a, 0xd80b, 0xd80c, 0xd80e, 0xd80f, 0xd810, 0xd811, 0xd813, - 0xd814, 0xd815, 0xd817, 0xd818, 0xd81a, 0xd81b, 0xd81d, 0xd81f, - 0xd800, 0xd800, 0xd800, 0xd800, 0xd801, 0xd801, 0xd802, 0xd802, - 0xd803, 0xd804, 0xd805, 0xd805, 0xd806, 0xd807, 0xd808, 0xd809, - 0xd80a, 0xd80b, 0xd80c, 0xd80e, 0xd80f, 0xd810, 0xd811, 0xd813, - 0xd814, 0xd815, 0xd817, 0xd818, 0xd81a, 0xd81b, 0xd81d, 0xd81f, - 0xd820, 0xd820, 0xd820, 0xd820, 0xd821, 0xd821, 0xd822, 0xd822, - 0xd823, 0xd824, 0xd825, 0xd825, 0xd826, 0xd827, 0xd828, 0xd829, - 0xd82a, 0xd82b, 0xd82c, 0xd82e, 0xd82f, 0xd830, 0xd831, 0xd833, - 0xd834, 0xd835, 0xd837, 0xd838, 0xd83a, 0xd83b, 0xd83d, 0xd83f, - 0xd820, 0xd820, 0xd820, 0xd820, 0xd821, 0xd821, 0xd822, 0xd822, - 0xd823, 0xd824, 0xd825, 0xd825, 0xd826, 0xd827, 0xd828, 0xd829, - 0xd82a, 0xd82b, 0xd82c, 0xd82e, 0xd82f, 0xd830, 0xd831, 0xd833, - 0xd834, 0xd835, 0xd837, 0xd838, 0xd83a, 0xd83b, 0xd83d, 0xd83f, - 0xd820, 0xd820, 0xd820, 0xd820, 0xd821, 0xd821, 0xd822, 0xd822, - 0xd823, 0xd824, 0xd825, 0xd825, 0xd826, 0xd827, 0xd828, 0xd829, - 0xd82a, 0xd82b, 0xd82c, 0xd82e, 0xd82f, 0xd830, 0xd831, 0xd833, - 0xd834, 0xd835, 0xd837, 0xd838, 0xd83a, 0xd83b, 0xd83d, 0xd83f, - 0xd840, 0xd840, 0xd840, 0xd840, 0xd841, 0xd841, 0xd842, 0xd842, - 0xd843, 0xd844, 0xd845, 0xd845, 0xd846, 0xd847, 0xd848, 0xd849, - 0xd84a, 0xd84b, 0xd84c, 0xd84e, 0xd84f, 0xd850, 0xd851, 0xd853, - 0xd854, 0xd855, 0xd857, 0xd858, 0xd85a, 0xd85b, 0xd85d, 0xd85f, - 0xd840, 0xd840, 0xd840, 0xd840, 0xd841, 0xd841, 0xd842, 0xd842, - 0xd843, 0xd844, 0xd845, 0xd845, 0xd846, 0xd847, 0xd848, 0xd849, - 0xd84a, 0xd84b, 0xd84c, 0xd84e, 0xd84f, 0xd850, 0xd851, 0xd853, - 0xd854, 0xd855, 0xd857, 0xd858, 0xd85a, 0xd85b, 0xd85d, 0xd85f, - 0xd860, 0xd860, 0xd860, 0xd860, 0xd861, 0xd861, 0xd862, 0xd862, - 0xd863, 0xd864, 0xd865, 0xd865, 0xd866, 0xd867, 0xd868, 0xd869, - 0xd86a, 0xd86b, 0xd86c, 0xd86e, 0xd86f, 0xd870, 0xd871, 0xd873, - 0xd874, 0xd875, 0xd877, 0xd878, 0xd87a, 0xd87b, 0xd87d, 0xd87f, - 0xd860, 0xd860, 0xd860, 0xd860, 0xd861, 0xd861, 0xd862, 0xd862, - 0xd863, 0xd864, 0xd865, 0xd865, 0xd866, 0xd867, 0xd868, 0xd869, - 0xd86a, 0xd86b, 0xd86c, 0xd86e, 0xd86f, 0xd870, 0xd871, 0xd873, - 0xd874, 0xd875, 0xd877, 0xd878, 0xd87a, 0xd87b, 0xd87d, 0xd87f, - 0xd880, 0xd880, 0xd880, 0xd880, 0xd881, 0xd881, 0xd882, 0xd882, - 0xd883, 0xd884, 0xd885, 0xd885, 0xd886, 0xd887, 0xd888, 0xd889, - 0xd88a, 0xd88b, 0xd88c, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd893, - 0xd894, 0xd895, 0xd897, 0xd898, 0xd89a, 0xd89b, 0xd89d, 0xd89f, - 0xd8a0, 0xd8a0, 0xd8a0, 0xd8a0, 0xd8a1, 0xd8a1, 0xd8a2, 0xd8a2, - 0xd8a3, 0xd8a4, 0xd8a5, 0xd8a5, 0xd8a6, 0xd8a7, 0xd8a8, 0xd8a9, - 0xd8aa, 0xd8ab, 0xd8ac, 0xd8ae, 0xd8af, 0xd8b0, 0xd8b1, 0xd8b3, - 0xd8b4, 0xd8b5, 0xd8b7, 0xd8b8, 0xd8ba, 0xd8bb, 0xd8bd, 0xd8bf, - 0xd8a0, 0xd8a0, 0xd8a0, 0xd8a0, 0xd8a1, 0xd8a1, 0xd8a2, 0xd8a2, - 0xd8a3, 0xd8a4, 0xd8a5, 0xd8a5, 0xd8a6, 0xd8a7, 0xd8a8, 0xd8a9, - 0xd8aa, 0xd8ab, 0xd8ac, 0xd8ae, 0xd8af, 0xd8b0, 0xd8b1, 0xd8b3, - 0xd8b4, 0xd8b5, 0xd8b7, 0xd8b8, 0xd8ba, 0xd8bb, 0xd8bd, 0xd8bf, - 0xd8c0, 0xd8c0, 0xd8c0, 0xd8c0, 0xd8c1, 0xd8c1, 0xd8c2, 0xd8c2, - 0xd8c3, 0xd8c4, 0xd8c5, 0xd8c5, 0xd8c6, 0xd8c7, 0xd8c8, 0xd8c9, - 0xd8ca, 0xd8cb, 0xd8cc, 0xd8ce, 0xd8cf, 0xd8d0, 0xd8d1, 0xd8d3, - 0xd8d4, 0xd8d5, 0xd8d7, 0xd8d8, 0xd8da, 0xd8db, 0xd8dd, 0xd8df, - 0xd8e0, 0xd8e0, 0xd8e0, 0xd8e0, 0xd8e1, 0xd8e1, 0xd8e2, 0xd8e2, - 0xd8e3, 0xd8e4, 0xd8e5, 0xd8e5, 0xd8e6, 0xd8e7, 0xd8e8, 0xd8e9, - 0xd8ea, 0xd8eb, 0xd8ec, 0xd8ee, 0xd8ef, 0xd8f0, 0xd8f1, 0xd8f3, - 0xd8f4, 0xd8f5, 0xd8f7, 0xd8f8, 0xd8fa, 0xd8fb, 0xd8fd, 0xd8ff, - 0xd8e0, 0xd8e0, 0xd8e0, 0xd8e0, 0xd8e1, 0xd8e1, 0xd8e2, 0xd8e2, - 0xd8e3, 0xd8e4, 0xd8e5, 0xd8e5, 0xd8e6, 0xd8e7, 0xd8e8, 0xd8e9, - 0xd8ea, 0xd8eb, 0xd8ec, 0xd8ee, 0xd8ef, 0xd8f0, 0xd8f1, 0xd8f3, - 0xd8f4, 0xd8f5, 0xd8f7, 0xd8f8, 0xd8fa, 0xd8fb, 0xd8fd, 0xd8ff, - 0xd900, 0xd900, 0xd900, 0xd900, 0xd901, 0xd901, 0xd902, 0xd902, - 0xd903, 0xd904, 0xd905, 0xd905, 0xd906, 0xd907, 0xd908, 0xd909, - 0xd90a, 0xd90b, 0xd90c, 0xd90e, 0xd90f, 0xd910, 0xd911, 0xd913, - 0xd914, 0xd915, 0xd917, 0xd918, 0xd91a, 0xd91b, 0xd91d, 0xd91f, - 0xd920, 0xd920, 0xd920, 0xd920, 0xd921, 0xd921, 0xd922, 0xd922, - 0xd923, 0xd924, 0xd925, 0xd925, 0xd926, 0xd927, 0xd928, 0xd929, - 0xd92a, 0xd92b, 0xd92c, 0xd92e, 0xd92f, 0xd930, 0xd931, 0xd933, - 0xd934, 0xd935, 0xd937, 0xd938, 0xd93a, 0xd93b, 0xd93d, 0xd93f, - 0xd940, 0xd940, 0xd940, 0xd940, 0xd941, 0xd941, 0xd942, 0xd942, - 0xd943, 0xd944, 0xd945, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, - 0xd94a, 0xd94b, 0xd94c, 0xd94e, 0xd94f, 0xd950, 0xd951, 0xd953, - 0xd954, 0xd955, 0xd957, 0xd958, 0xd95a, 0xd95b, 0xd95d, 0xd95f, - 0xd940, 0xd940, 0xd940, 0xd940, 0xd941, 0xd941, 0xd942, 0xd942, - 0xd943, 0xd944, 0xd945, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, - 0xd94a, 0xd94b, 0xd94c, 0xd94e, 0xd94f, 0xd950, 0xd951, 0xd953, - 0xd954, 0xd955, 0xd957, 0xd958, 0xd95a, 0xd95b, 0xd95d, 0xd95f, - 0xd960, 0xd960, 0xd960, 0xd960, 0xd961, 0xd961, 0xd962, 0xd962, - 0xd963, 0xd964, 0xd965, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, - 0xd96a, 0xd96b, 0xd96c, 0xd96e, 0xd96f, 0xd970, 0xd971, 0xd973, - 0xd974, 0xd975, 0xd977, 0xd978, 0xd97a, 0xd97b, 0xd97d, 0xd97f, - 0xd980, 0xd980, 0xd980, 0xd980, 0xd981, 0xd981, 0xd982, 0xd982, - 0xd983, 0xd984, 0xd985, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, - 0xd98a, 0xd98b, 0xd98c, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd993, - 0xd994, 0xd995, 0xd997, 0xd998, 0xd99a, 0xd99b, 0xd99d, 0xd99f, - 0xd9a0, 0xd9a0, 0xd9a0, 0xd9a0, 0xd9a1, 0xd9a1, 0xd9a2, 0xd9a2, - 0xd9a3, 0xd9a4, 0xd9a5, 0xd9a5, 0xd9a6, 0xd9a7, 0xd9a8, 0xd9a9, - 0xd9aa, 0xd9ab, 0xd9ac, 0xd9ae, 0xd9af, 0xd9b0, 0xd9b1, 0xd9b3, - 0xd9b4, 0xd9b5, 0xd9b7, 0xd9b8, 0xd9ba, 0xd9bb, 0xd9bd, 0xd9bf, - 0xd9c0, 0xd9c0, 0xd9c0, 0xd9c0, 0xd9c1, 0xd9c1, 0xd9c2, 0xd9c2, - 0xd9c3, 0xd9c4, 0xd9c5, 0xd9c5, 0xd9c6, 0xd9c7, 0xd9c8, 0xd9c9, - 0xd9ca, 0xd9cb, 0xd9cc, 0xd9ce, 0xd9cf, 0xd9d0, 0xd9d1, 0xd9d3, - 0xd9d4, 0xd9d5, 0xd9d7, 0xd9d8, 0xd9da, 0xd9db, 0xd9dd, 0xd9df, - 0xd9e0, 0xd9e0, 0xd9e0, 0xd9e0, 0xd9e1, 0xd9e1, 0xd9e2, 0xd9e2, - 0xd9e3, 0xd9e4, 0xd9e5, 0xd9e5, 0xd9e6, 0xd9e7, 0xd9e8, 0xd9e9, - 0xd9ea, 0xd9eb, 0xd9ec, 0xd9ee, 0xd9ef, 0xd9f0, 0xd9f1, 0xd9f3, - 0xd9f4, 0xd9f5, 0xd9f7, 0xd9f8, 0xd9fa, 0xd9fb, 0xd9fd, 0xd9ff, - 0xda00, 0xda00, 0xda00, 0xda00, 0xda01, 0xda01, 0xda02, 0xda02, - 0xda03, 0xda04, 0xda05, 0xda05, 0xda06, 0xda07, 0xda08, 0xda09, - 0xda0a, 0xda0b, 0xda0c, 0xda0e, 0xda0f, 0xda10, 0xda11, 0xda13, - 0xda14, 0xda15, 0xda17, 0xda18, 0xda1a, 0xda1b, 0xda1d, 0xda1f, - 0xda20, 0xda20, 0xda20, 0xda20, 0xda21, 0xda21, 0xda22, 0xda22, - 0xda23, 0xda24, 0xda25, 0xda25, 0xda26, 0xda27, 0xda28, 0xda29, - 0xda2a, 0xda2b, 0xda2c, 0xda2e, 0xda2f, 0xda30, 0xda31, 0xda33, - 0xda34, 0xda35, 0xda37, 0xda38, 0xda3a, 0xda3b, 0xda3d, 0xda3f, - 0xda40, 0xda40, 0xda40, 0xda40, 0xda41, 0xda41, 0xda42, 0xda42, - 0xda43, 0xda44, 0xda45, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, - 0xda4a, 0xda4b, 0xda4c, 0xda4e, 0xda4f, 0xda50, 0xda51, 0xda53, - 0xda54, 0xda55, 0xda57, 0xda58, 0xda5a, 0xda5b, 0xda5d, 0xda5f, - 0xda60, 0xda60, 0xda60, 0xda60, 0xda61, 0xda61, 0xda62, 0xda62, - 0xda63, 0xda64, 0xda65, 0xda65, 0xda66, 0xda67, 0xda68, 0xda69, - 0xda6a, 0xda6b, 0xda6c, 0xda6e, 0xda6f, 0xda70, 0xda71, 0xda73, - 0xda74, 0xda75, 0xda77, 0xda78, 0xda7a, 0xda7b, 0xda7d, 0xda7f, - 0xda80, 0xda80, 0xda80, 0xda80, 0xda81, 0xda81, 0xda82, 0xda82, - 0xda83, 0xda84, 0xda85, 0xda85, 0xda86, 0xda87, 0xda88, 0xda89, - 0xda8a, 0xda8b, 0xda8c, 0xda8e, 0xda8f, 0xda90, 0xda91, 0xda93, - 0xda94, 0xda95, 0xda97, 0xda98, 0xda9a, 0xda9b, 0xda9d, 0xda9f, - 0xdaa0, 0xdaa0, 0xdaa0, 0xdaa0, 0xdaa1, 0xdaa1, 0xdaa2, 0xdaa2, - 0xdaa3, 0xdaa4, 0xdaa5, 0xdaa5, 0xdaa6, 0xdaa7, 0xdaa8, 0xdaa9, - 0xdaaa, 0xdaab, 0xdaac, 0xdaae, 0xdaaf, 0xdab0, 0xdab1, 0xdab3, - 0xdab4, 0xdab5, 0xdab7, 0xdab8, 0xdaba, 0xdabb, 0xdabd, 0xdabf, - 0xdac0, 0xdac0, 0xdac0, 0xdac0, 0xdac1, 0xdac1, 0xdac2, 0xdac2, - 0xdac3, 0xdac4, 0xdac5, 0xdac5, 0xdac6, 0xdac7, 0xdac8, 0xdac9, - 0xdaca, 0xdacb, 0xdacc, 0xdace, 0xdacf, 0xdad0, 0xdad1, 0xdad3, - 0xdad4, 0xdad5, 0xdad7, 0xdad8, 0xdada, 0xdadb, 0xdadd, 0xdadf, - 0xdae0, 0xdae0, 0xdae0, 0xdae0, 0xdae1, 0xdae1, 0xdae2, 0xdae2, - 0xdae3, 0xdae4, 0xdae5, 0xdae5, 0xdae6, 0xdae7, 0xdae8, 0xdae9, - 0xdaea, 0xdaeb, 0xdaec, 0xdaee, 0xdaef, 0xdaf0, 0xdaf1, 0xdaf3, - 0xdaf4, 0xdaf5, 0xdaf7, 0xdaf8, 0xdafa, 0xdafb, 0xdafd, 0xdaff, - 0xdb00, 0xdb00, 0xdb00, 0xdb00, 0xdb01, 0xdb01, 0xdb02, 0xdb02, - 0xdb03, 0xdb04, 0xdb05, 0xdb05, 0xdb06, 0xdb07, 0xdb08, 0xdb09, - 0xdb0a, 0xdb0b, 0xdb0c, 0xdb0e, 0xdb0f, 0xdb10, 0xdb11, 0xdb13, - 0xdb14, 0xdb15, 0xdb17, 0xdb18, 0xdb1a, 0xdb1b, 0xdb1d, 0xdb1f, - 0xdb20, 0xdb20, 0xdb20, 0xdb20, 0xdb21, 0xdb21, 0xdb22, 0xdb22, - 0xdb23, 0xdb24, 0xdb25, 0xdb25, 0xdb26, 0xdb27, 0xdb28, 0xdb29, - 0xdb2a, 0xdb2b, 0xdb2c, 0xdb2e, 0xdb2f, 0xdb30, 0xdb31, 0xdb33, - 0xdb34, 0xdb35, 0xdb37, 0xdb38, 0xdb3a, 0xdb3b, 0xdb3d, 0xdb3f, - 0xdb40, 0xdb40, 0xdb40, 0xdb40, 0xdb41, 0xdb41, 0xdb42, 0xdb42, - 0xdb43, 0xdb44, 0xdb45, 0xdb45, 0xdb46, 0xdb47, 0xdb48, 0xdb49, - 0xdb4a, 0xdb4b, 0xdb4c, 0xdb4e, 0xdb4f, 0xdb50, 0xdb51, 0xdb53, - 0xdb54, 0xdb55, 0xdb57, 0xdb58, 0xdb5a, 0xdb5b, 0xdb5d, 0xdb5f, - 0xdb80, 0xdb80, 0xdb80, 0xdb80, 0xdb81, 0xdb81, 0xdb82, 0xdb82, - 0xdb83, 0xdb84, 0xdb85, 0xdb85, 0xdb86, 0xdb87, 0xdb88, 0xdb89, - 0xdb8a, 0xdb8b, 0xdb8c, 0xdb8e, 0xdb8f, 0xdb90, 0xdb91, 0xdb93, - 0xdb94, 0xdb95, 0xdb97, 0xdb98, 0xdb9a, 0xdb9b, 0xdb9d, 0xdb9f, - 0xdba0, 0xdba0, 0xdba0, 0xdba0, 0xdba1, 0xdba1, 0xdba2, 0xdba2, - 0xdba3, 0xdba4, 0xdba5, 0xdba5, 0xdba6, 0xdba7, 0xdba8, 0xdba9, - 0xdbaa, 0xdbab, 0xdbac, 0xdbae, 0xdbaf, 0xdbb0, 0xdbb1, 0xdbb3, - 0xdbb4, 0xdbb5, 0xdbb7, 0xdbb8, 0xdbba, 0xdbbb, 0xdbbd, 0xdbbf, - 0xdbc0, 0xdbc0, 0xdbc0, 0xdbc0, 0xdbc1, 0xdbc1, 0xdbc2, 0xdbc2, - 0xdbc3, 0xdbc4, 0xdbc5, 0xdbc5, 0xdbc6, 0xdbc7, 0xdbc8, 0xdbc9, - 0xdbca, 0xdbcb, 0xdbcc, 0xdbce, 0xdbcf, 0xdbd0, 0xdbd1, 0xdbd3, - 0xdbd4, 0xdbd5, 0xdbd7, 0xdbd8, 0xdbda, 0xdbdb, 0xdbdd, 0xdbdf, - 0xdbe0, 0xdbe0, 0xdbe0, 0xdbe0, 0xdbe1, 0xdbe1, 0xdbe2, 0xdbe2, - 0xdbe3, 0xdbe4, 0xdbe5, 0xdbe5, 0xdbe6, 0xdbe7, 0xdbe8, 0xdbe9, - 0xdbea, 0xdbeb, 0xdbec, 0xdbee, 0xdbef, 0xdbf0, 0xdbf1, 0xdbf3, - 0xdbf4, 0xdbf5, 0xdbf7, 0xdbf8, 0xdbfa, 0xdbfb, 0xdbfd, 0xdbff, - 0xdc00, 0xdc00, 0xdc00, 0xdc00, 0xdc01, 0xdc01, 0xdc02, 0xdc02, - 0xdc03, 0xdc04, 0xdc05, 0xdc05, 0xdc06, 0xdc07, 0xdc08, 0xdc09, - 0xdc0a, 0xdc0b, 0xdc0c, 0xdc0e, 0xdc0f, 0xdc10, 0xdc11, 0xdc13, - 0xdc14, 0xdc15, 0xdc17, 0xdc18, 0xdc1a, 0xdc1b, 0xdc1d, 0xdc1f, - 0xdc40, 0xdc40, 0xdc40, 0xdc40, 0xdc41, 0xdc41, 0xdc42, 0xdc42, - 0xdc43, 0xdc44, 0xdc45, 0xdc45, 0xdc46, 0xdc47, 0xdc48, 0xdc49, - 0xdc4a, 0xdc4b, 0xdc4c, 0xdc4e, 0xdc4f, 0xdc50, 0xdc51, 0xdc53, - 0xdc54, 0xdc55, 0xdc57, 0xdc58, 0xdc5a, 0xdc5b, 0xdc5d, 0xdc5f, - 0xdc60, 0xdc60, 0xdc60, 0xdc60, 0xdc61, 0xdc61, 0xdc62, 0xdc62, - 0xdc63, 0xdc64, 0xdc65, 0xdc65, 0xdc66, 0xdc67, 0xdc68, 0xdc69, - 0xdc6a, 0xdc6b, 0xdc6c, 0xdc6e, 0xdc6f, 0xdc70, 0xdc71, 0xdc73, - 0xdc74, 0xdc75, 0xdc77, 0xdc78, 0xdc7a, 0xdc7b, 0xdc7d, 0xdc7f, - 0xdc80, 0xdc80, 0xdc80, 0xdc80, 0xdc81, 0xdc81, 0xdc82, 0xdc82, - 0xdc83, 0xdc84, 0xdc85, 0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, - 0xdc8a, 0xdc8b, 0xdc8c, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc93, - 0xdc94, 0xdc95, 0xdc97, 0xdc98, 0xdc9a, 0xdc9b, 0xdc9d, 0xdc9f, - 0xdcc0, 0xdcc0, 0xdcc0, 0xdcc0, 0xdcc1, 0xdcc1, 0xdcc2, 0xdcc2, - 0xdcc3, 0xdcc4, 0xdcc5, 0xdcc5, 0xdcc6, 0xdcc7, 0xdcc8, 0xdcc9, - 0xdcca, 0xdccb, 0xdccc, 0xdcce, 0xdccf, 0xdcd0, 0xdcd1, 0xdcd3, - 0xdcd4, 0xdcd5, 0xdcd7, 0xdcd8, 0xdcda, 0xdcdb, 0xdcdd, 0xdcdf, - 0xdce0, 0xdce0, 0xdce0, 0xdce0, 0xdce1, 0xdce1, 0xdce2, 0xdce2, - 0xdce3, 0xdce4, 0xdce5, 0xdce5, 0xdce6, 0xdce7, 0xdce8, 0xdce9, - 0xdcea, 0xdceb, 0xdcec, 0xdcee, 0xdcef, 0xdcf0, 0xdcf1, 0xdcf3, - 0xdcf4, 0xdcf5, 0xdcf7, 0xdcf8, 0xdcfa, 0xdcfb, 0xdcfd, 0xdcff, - 0xdd00, 0xdd00, 0xdd00, 0xdd00, 0xdd01, 0xdd01, 0xdd02, 0xdd02, - 0xdd03, 0xdd04, 0xdd05, 0xdd05, 0xdd06, 0xdd07, 0xdd08, 0xdd09, - 0xdd0a, 0xdd0b, 0xdd0c, 0xdd0e, 0xdd0f, 0xdd10, 0xdd11, 0xdd13, - 0xdd14, 0xdd15, 0xdd17, 0xdd18, 0xdd1a, 0xdd1b, 0xdd1d, 0xdd1f, - 0xdd40, 0xdd40, 0xdd40, 0xdd40, 0xdd41, 0xdd41, 0xdd42, 0xdd42, - 0xdd43, 0xdd44, 0xdd45, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, - 0xdd4a, 0xdd4b, 0xdd4c, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, 0xdd53, - 0xdd54, 0xdd55, 0xdd57, 0xdd58, 0xdd5a, 0xdd5b, 0xdd5d, 0xdd5f, - 0xdd60, 0xdd60, 0xdd60, 0xdd60, 0xdd61, 0xdd61, 0xdd62, 0xdd62, - 0xdd63, 0xdd64, 0xdd65, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, - 0xdd6a, 0xdd6b, 0xdd6c, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, 0xdd73, - 0xdd74, 0xdd75, 0xdd77, 0xdd78, 0xdd7a, 0xdd7b, 0xdd7d, 0xdd7f, - 0xdd80, 0xdd80, 0xdd80, 0xdd80, 0xdd81, 0xdd81, 0xdd82, 0xdd82, - 0xdd83, 0xdd84, 0xdd85, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, - 0xdd8a, 0xdd8b, 0xdd8c, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd93, - 0xdd94, 0xdd95, 0xdd97, 0xdd98, 0xdd9a, 0xdd9b, 0xdd9d, 0xdd9f, - 0xddc0, 0xddc0, 0xddc0, 0xddc0, 0xddc1, 0xddc1, 0xddc2, 0xddc2, - 0xddc3, 0xddc4, 0xddc5, 0xddc5, 0xddc6, 0xddc7, 0xddc8, 0xddc9, - 0xddca, 0xddcb, 0xddcc, 0xddce, 0xddcf, 0xddd0, 0xddd1, 0xddd3, - 0xddd4, 0xddd5, 0xddd7, 0xddd8, 0xddda, 0xdddb, 0xdddd, 0xdddf, - 0xdde0, 0xdde0, 0xdde0, 0xdde0, 0xdde1, 0xdde1, 0xdde2, 0xdde2, - 0xdde3, 0xdde4, 0xdde5, 0xdde5, 0xdde6, 0xdde7, 0xdde8, 0xdde9, - 0xddea, 0xddeb, 0xddec, 0xddee, 0xddef, 0xddf0, 0xddf1, 0xddf3, - 0xddf4, 0xddf5, 0xddf7, 0xddf8, 0xddfa, 0xddfb, 0xddfd, 0xddff, - 0xde20, 0xde20, 0xde20, 0xde20, 0xde21, 0xde21, 0xde22, 0xde22, - 0xde23, 0xde24, 0xde25, 0xde25, 0xde26, 0xde27, 0xde28, 0xde29, - 0xde2a, 0xde2b, 0xde2c, 0xde2e, 0xde2f, 0xde30, 0xde31, 0xde33, - 0xde34, 0xde35, 0xde37, 0xde38, 0xde3a, 0xde3b, 0xde3d, 0xde3f, - 0xde40, 0xde40, 0xde40, 0xde40, 0xde41, 0xde41, 0xde42, 0xde42, - 0xde43, 0xde44, 0xde45, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, - 0xde4a, 0xde4b, 0xde4c, 0xde4e, 0xde4f, 0xde50, 0xde51, 0xde53, - 0xde54, 0xde55, 0xde57, 0xde58, 0xde5a, 0xde5b, 0xde5d, 0xde5f, - 0xde80, 0xde80, 0xde80, 0xde80, 0xde81, 0xde81, 0xde82, 0xde82, - 0xde83, 0xde84, 0xde85, 0xde85, 0xde86, 0xde87, 0xde88, 0xde89, - 0xde8a, 0xde8b, 0xde8c, 0xde8e, 0xde8f, 0xde90, 0xde91, 0xde93, - 0xde94, 0xde95, 0xde97, 0xde98, 0xde9a, 0xde9b, 0xde9d, 0xde9f, - 0xdea0, 0xdea0, 0xdea0, 0xdea0, 0xdea1, 0xdea1, 0xdea2, 0xdea2, - 0xdea3, 0xdea4, 0xdea5, 0xdea5, 0xdea6, 0xdea7, 0xdea8, 0xdea9, - 0xdeaa, 0xdeab, 0xdeac, 0xdeae, 0xdeaf, 0xdeb0, 0xdeb1, 0xdeb3, - 0xdeb4, 0xdeb5, 0xdeb7, 0xdeb8, 0xdeba, 0xdebb, 0xdebd, 0xdebf, - 0xdee0, 0xdee0, 0xdee0, 0xdee0, 0xdee1, 0xdee1, 0xdee2, 0xdee2, - 0xdee3, 0xdee4, 0xdee5, 0xdee5, 0xdee6, 0xdee7, 0xdee8, 0xdee9, - 0xdeea, 0xdeeb, 0xdeec, 0xdeee, 0xdeef, 0xdef0, 0xdef1, 0xdef3, - 0xdef4, 0xdef5, 0xdef7, 0xdef8, 0xdefa, 0xdefb, 0xdefd, 0xdeff, - 0xdf00, 0xdf00, 0xdf00, 0xdf00, 0xdf01, 0xdf01, 0xdf02, 0xdf02, - 0xdf03, 0xdf04, 0xdf05, 0xdf05, 0xdf06, 0xdf07, 0xdf08, 0xdf09, - 0xdf0a, 0xdf0b, 0xdf0c, 0xdf0e, 0xdf0f, 0xdf10, 0xdf11, 0xdf13, - 0xdf14, 0xdf15, 0xdf17, 0xdf18, 0xdf1a, 0xdf1b, 0xdf1d, 0xdf1f, - 0xdf40, 0xdf40, 0xdf40, 0xdf40, 0xdf41, 0xdf41, 0xdf42, 0xdf42, - 0xdf43, 0xdf44, 0xdf45, 0xdf45, 0xdf46, 0xdf47, 0xdf48, 0xdf49, - 0xdf4a, 0xdf4b, 0xdf4c, 0xdf4e, 0xdf4f, 0xdf50, 0xdf51, 0xdf53, - 0xdf54, 0xdf55, 0xdf57, 0xdf58, 0xdf5a, 0xdf5b, 0xdf5d, 0xdf5f, - 0xdf60, 0xdf60, 0xdf60, 0xdf60, 0xdf61, 0xdf61, 0xdf62, 0xdf62, - 0xdf63, 0xdf64, 0xdf65, 0xdf65, 0xdf66, 0xdf67, 0xdf68, 0xdf69, - 0xdf6a, 0xdf6b, 0xdf6c, 0xdf6e, 0xdf6f, 0xdf70, 0xdf71, 0xdf73, - 0xdf74, 0xdf75, 0xdf77, 0xdf78, 0xdf7a, 0xdf7b, 0xdf7d, 0xdf7f, - 0xdfa0, 0xdfa0, 0xdfa0, 0xdfa0, 0xdfa1, 0xdfa1, 0xdfa2, 0xdfa2, - 0xdfa3, 0xdfa4, 0xdfa5, 0xdfa5, 0xdfa6, 0xdfa7, 0xdfa8, 0xdfa9, - 0xdfaa, 0xdfab, 0xdfac, 0xdfae, 0xdfaf, 0xdfb0, 0xdfb1, 0xdfb3, - 0xdfb4, 0xdfb5, 0xdfb7, 0xdfb8, 0xdfba, 0xdfbb, 0xdfbd, 0xdfbf, - 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe0, 0xdfe1, 0xdfe1, 0xdfe2, 0xdfe2, - 0xdfe3, 0xdfe4, 0xdfe5, 0xdfe5, 0xdfe6, 0xdfe7, 0xdfe8, 0xdfe9, - 0xdfea, 0xdfeb, 0xdfec, 0xdfee, 0xdfef, 0xdff0, 0xdff1, 0xdff3, - 0xdff4, 0xdff5, 0xdff7, 0xdff8, 0xdffa, 0xdffb, 0xdffd, 0xdfff, - 0xe800, 0xe800, 0xe800, 0xe800, 0xe801, 0xe801, 0xe802, 0xe802, - 0xe803, 0xe804, 0xe805, 0xe805, 0xe806, 0xe807, 0xe808, 0xe809, - 0xe80a, 0xe80b, 0xe80c, 0xe80e, 0xe80f, 0xe810, 0xe811, 0xe813, - 0xe814, 0xe815, 0xe817, 0xe818, 0xe81a, 0xe81b, 0xe81d, 0xe81f, - 0xe800, 0xe800, 0xe800, 0xe800, 0xe801, 0xe801, 0xe802, 0xe802, - 0xe803, 0xe804, 0xe805, 0xe805, 0xe806, 0xe807, 0xe808, 0xe809, - 0xe80a, 0xe80b, 0xe80c, 0xe80e, 0xe80f, 0xe810, 0xe811, 0xe813, - 0xe814, 0xe815, 0xe817, 0xe818, 0xe81a, 0xe81b, 0xe81d, 0xe81f, - 0xe800, 0xe800, 0xe800, 0xe800, 0xe801, 0xe801, 0xe802, 0xe802, - 0xe803, 0xe804, 0xe805, 0xe805, 0xe806, 0xe807, 0xe808, 0xe809, - 0xe80a, 0xe80b, 0xe80c, 0xe80e, 0xe80f, 0xe810, 0xe811, 0xe813, - 0xe814, 0xe815, 0xe817, 0xe818, 0xe81a, 0xe81b, 0xe81d, 0xe81f, - 0xe800, 0xe800, 0xe800, 0xe800, 0xe801, 0xe801, 0xe802, 0xe802, - 0xe803, 0xe804, 0xe805, 0xe805, 0xe806, 0xe807, 0xe808, 0xe809, - 0xe80a, 0xe80b, 0xe80c, 0xe80e, 0xe80f, 0xe810, 0xe811, 0xe813, - 0xe814, 0xe815, 0xe817, 0xe818, 0xe81a, 0xe81b, 0xe81d, 0xe81f, - 0xe800, 0xe800, 0xe800, 0xe800, 0xe801, 0xe801, 0xe802, 0xe802, - 0xe803, 0xe804, 0xe805, 0xe805, 0xe806, 0xe807, 0xe808, 0xe809, - 0xe80a, 0xe80b, 0xe80c, 0xe80e, 0xe80f, 0xe810, 0xe811, 0xe813, - 0xe814, 0xe815, 0xe817, 0xe818, 0xe81a, 0xe81b, 0xe81d, 0xe81f, - 0xe820, 0xe820, 0xe820, 0xe820, 0xe821, 0xe821, 0xe822, 0xe822, - 0xe823, 0xe824, 0xe825, 0xe825, 0xe826, 0xe827, 0xe828, 0xe829, - 0xe82a, 0xe82b, 0xe82c, 0xe82e, 0xe82f, 0xe830, 0xe831, 0xe833, - 0xe834, 0xe835, 0xe837, 0xe838, 0xe83a, 0xe83b, 0xe83d, 0xe83f, - 0xe820, 0xe820, 0xe820, 0xe820, 0xe821, 0xe821, 0xe822, 0xe822, - 0xe823, 0xe824, 0xe825, 0xe825, 0xe826, 0xe827, 0xe828, 0xe829, - 0xe82a, 0xe82b, 0xe82c, 0xe82e, 0xe82f, 0xe830, 0xe831, 0xe833, - 0xe834, 0xe835, 0xe837, 0xe838, 0xe83a, 0xe83b, 0xe83d, 0xe83f, - 0xe820, 0xe820, 0xe820, 0xe820, 0xe821, 0xe821, 0xe822, 0xe822, - 0xe823, 0xe824, 0xe825, 0xe825, 0xe826, 0xe827, 0xe828, 0xe829, - 0xe82a, 0xe82b, 0xe82c, 0xe82e, 0xe82f, 0xe830, 0xe831, 0xe833, - 0xe834, 0xe835, 0xe837, 0xe838, 0xe83a, 0xe83b, 0xe83d, 0xe83f, - 0xe840, 0xe840, 0xe840, 0xe840, 0xe841, 0xe841, 0xe842, 0xe842, - 0xe843, 0xe844, 0xe845, 0xe845, 0xe846, 0xe847, 0xe848, 0xe849, - 0xe84a, 0xe84b, 0xe84c, 0xe84e, 0xe84f, 0xe850, 0xe851, 0xe853, - 0xe854, 0xe855, 0xe857, 0xe858, 0xe85a, 0xe85b, 0xe85d, 0xe85f, - 0xe840, 0xe840, 0xe840, 0xe840, 0xe841, 0xe841, 0xe842, 0xe842, - 0xe843, 0xe844, 0xe845, 0xe845, 0xe846, 0xe847, 0xe848, 0xe849, - 0xe84a, 0xe84b, 0xe84c, 0xe84e, 0xe84f, 0xe850, 0xe851, 0xe853, - 0xe854, 0xe855, 0xe857, 0xe858, 0xe85a, 0xe85b, 0xe85d, 0xe85f, - 0xe860, 0xe860, 0xe860, 0xe860, 0xe861, 0xe861, 0xe862, 0xe862, - 0xe863, 0xe864, 0xe865, 0xe865, 0xe866, 0xe867, 0xe868, 0xe869, - 0xe86a, 0xe86b, 0xe86c, 0xe86e, 0xe86f, 0xe870, 0xe871, 0xe873, - 0xe874, 0xe875, 0xe877, 0xe878, 0xe87a, 0xe87b, 0xe87d, 0xe87f, - 0xe860, 0xe860, 0xe860, 0xe860, 0xe861, 0xe861, 0xe862, 0xe862, - 0xe863, 0xe864, 0xe865, 0xe865, 0xe866, 0xe867, 0xe868, 0xe869, - 0xe86a, 0xe86b, 0xe86c, 0xe86e, 0xe86f, 0xe870, 0xe871, 0xe873, - 0xe874, 0xe875, 0xe877, 0xe878, 0xe87a, 0xe87b, 0xe87d, 0xe87f, - 0xe880, 0xe880, 0xe880, 0xe880, 0xe881, 0xe881, 0xe882, 0xe882, - 0xe883, 0xe884, 0xe885, 0xe885, 0xe886, 0xe887, 0xe888, 0xe889, - 0xe88a, 0xe88b, 0xe88c, 0xe88e, 0xe88f, 0xe890, 0xe891, 0xe893, - 0xe894, 0xe895, 0xe897, 0xe898, 0xe89a, 0xe89b, 0xe89d, 0xe89f, - 0xe8a0, 0xe8a0, 0xe8a0, 0xe8a0, 0xe8a1, 0xe8a1, 0xe8a2, 0xe8a2, - 0xe8a3, 0xe8a4, 0xe8a5, 0xe8a5, 0xe8a6, 0xe8a7, 0xe8a8, 0xe8a9, - 0xe8aa, 0xe8ab, 0xe8ac, 0xe8ae, 0xe8af, 0xe8b0, 0xe8b1, 0xe8b3, - 0xe8b4, 0xe8b5, 0xe8b7, 0xe8b8, 0xe8ba, 0xe8bb, 0xe8bd, 0xe8bf, - 0xe8a0, 0xe8a0, 0xe8a0, 0xe8a0, 0xe8a1, 0xe8a1, 0xe8a2, 0xe8a2, - 0xe8a3, 0xe8a4, 0xe8a5, 0xe8a5, 0xe8a6, 0xe8a7, 0xe8a8, 0xe8a9, - 0xe8aa, 0xe8ab, 0xe8ac, 0xe8ae, 0xe8af, 0xe8b0, 0xe8b1, 0xe8b3, - 0xe8b4, 0xe8b5, 0xe8b7, 0xe8b8, 0xe8ba, 0xe8bb, 0xe8bd, 0xe8bf, - 0xe8c0, 0xe8c0, 0xe8c0, 0xe8c0, 0xe8c1, 0xe8c1, 0xe8c2, 0xe8c2, - 0xe8c3, 0xe8c4, 0xe8c5, 0xe8c5, 0xe8c6, 0xe8c7, 0xe8c8, 0xe8c9, - 0xe8ca, 0xe8cb, 0xe8cc, 0xe8ce, 0xe8cf, 0xe8d0, 0xe8d1, 0xe8d3, - 0xe8d4, 0xe8d5, 0xe8d7, 0xe8d8, 0xe8da, 0xe8db, 0xe8dd, 0xe8df, - 0xe8e0, 0xe8e0, 0xe8e0, 0xe8e0, 0xe8e1, 0xe8e1, 0xe8e2, 0xe8e2, - 0xe8e3, 0xe8e4, 0xe8e5, 0xe8e5, 0xe8e6, 0xe8e7, 0xe8e8, 0xe8e9, - 0xe8ea, 0xe8eb, 0xe8ec, 0xe8ee, 0xe8ef, 0xe8f0, 0xe8f1, 0xe8f3, - 0xe8f4, 0xe8f5, 0xe8f7, 0xe8f8, 0xe8fa, 0xe8fb, 0xe8fd, 0xe8ff, - 0xe8e0, 0xe8e0, 0xe8e0, 0xe8e0, 0xe8e1, 0xe8e1, 0xe8e2, 0xe8e2, - 0xe8e3, 0xe8e4, 0xe8e5, 0xe8e5, 0xe8e6, 0xe8e7, 0xe8e8, 0xe8e9, - 0xe8ea, 0xe8eb, 0xe8ec, 0xe8ee, 0xe8ef, 0xe8f0, 0xe8f1, 0xe8f3, - 0xe8f4, 0xe8f5, 0xe8f7, 0xe8f8, 0xe8fa, 0xe8fb, 0xe8fd, 0xe8ff, - 0xe900, 0xe900, 0xe900, 0xe900, 0xe901, 0xe901, 0xe902, 0xe902, - 0xe903, 0xe904, 0xe905, 0xe905, 0xe906, 0xe907, 0xe908, 0xe909, - 0xe90a, 0xe90b, 0xe90c, 0xe90e, 0xe90f, 0xe910, 0xe911, 0xe913, - 0xe914, 0xe915, 0xe917, 0xe918, 0xe91a, 0xe91b, 0xe91d, 0xe91f, - 0xe920, 0xe920, 0xe920, 0xe920, 0xe921, 0xe921, 0xe922, 0xe922, - 0xe923, 0xe924, 0xe925, 0xe925, 0xe926, 0xe927, 0xe928, 0xe929, - 0xe92a, 0xe92b, 0xe92c, 0xe92e, 0xe92f, 0xe930, 0xe931, 0xe933, - 0xe934, 0xe935, 0xe937, 0xe938, 0xe93a, 0xe93b, 0xe93d, 0xe93f, - 0xe940, 0xe940, 0xe940, 0xe940, 0xe941, 0xe941, 0xe942, 0xe942, - 0xe943, 0xe944, 0xe945, 0xe945, 0xe946, 0xe947, 0xe948, 0xe949, - 0xe94a, 0xe94b, 0xe94c, 0xe94e, 0xe94f, 0xe950, 0xe951, 0xe953, - 0xe954, 0xe955, 0xe957, 0xe958, 0xe95a, 0xe95b, 0xe95d, 0xe95f, - 0xe940, 0xe940, 0xe940, 0xe940, 0xe941, 0xe941, 0xe942, 0xe942, - 0xe943, 0xe944, 0xe945, 0xe945, 0xe946, 0xe947, 0xe948, 0xe949, - 0xe94a, 0xe94b, 0xe94c, 0xe94e, 0xe94f, 0xe950, 0xe951, 0xe953, - 0xe954, 0xe955, 0xe957, 0xe958, 0xe95a, 0xe95b, 0xe95d, 0xe95f, - 0xe960, 0xe960, 0xe960, 0xe960, 0xe961, 0xe961, 0xe962, 0xe962, - 0xe963, 0xe964, 0xe965, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, - 0xe96a, 0xe96b, 0xe96c, 0xe96e, 0xe96f, 0xe970, 0xe971, 0xe973, - 0xe974, 0xe975, 0xe977, 0xe978, 0xe97a, 0xe97b, 0xe97d, 0xe97f, - 0xe980, 0xe980, 0xe980, 0xe980, 0xe981, 0xe981, 0xe982, 0xe982, - 0xe983, 0xe984, 0xe985, 0xe985, 0xe986, 0xe987, 0xe988, 0xe989, - 0xe98a, 0xe98b, 0xe98c, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe993, - 0xe994, 0xe995, 0xe997, 0xe998, 0xe99a, 0xe99b, 0xe99d, 0xe99f, - 0xe9a0, 0xe9a0, 0xe9a0, 0xe9a0, 0xe9a1, 0xe9a1, 0xe9a2, 0xe9a2, - 0xe9a3, 0xe9a4, 0xe9a5, 0xe9a5, 0xe9a6, 0xe9a7, 0xe9a8, 0xe9a9, - 0xe9aa, 0xe9ab, 0xe9ac, 0xe9ae, 0xe9af, 0xe9b0, 0xe9b1, 0xe9b3, - 0xe9b4, 0xe9b5, 0xe9b7, 0xe9b8, 0xe9ba, 0xe9bb, 0xe9bd, 0xe9bf, - 0xe9c0, 0xe9c0, 0xe9c0, 0xe9c0, 0xe9c1, 0xe9c1, 0xe9c2, 0xe9c2, - 0xe9c3, 0xe9c4, 0xe9c5, 0xe9c5, 0xe9c6, 0xe9c7, 0xe9c8, 0xe9c9, - 0xe9ca, 0xe9cb, 0xe9cc, 0xe9ce, 0xe9cf, 0xe9d0, 0xe9d1, 0xe9d3, - 0xe9d4, 0xe9d5, 0xe9d7, 0xe9d8, 0xe9da, 0xe9db, 0xe9dd, 0xe9df, - 0xe9e0, 0xe9e0, 0xe9e0, 0xe9e0, 0xe9e1, 0xe9e1, 0xe9e2, 0xe9e2, - 0xe9e3, 0xe9e4, 0xe9e5, 0xe9e5, 0xe9e6, 0xe9e7, 0xe9e8, 0xe9e9, - 0xe9ea, 0xe9eb, 0xe9ec, 0xe9ee, 0xe9ef, 0xe9f0, 0xe9f1, 0xe9f3, - 0xe9f4, 0xe9f5, 0xe9f7, 0xe9f8, 0xe9fa, 0xe9fb, 0xe9fd, 0xe9ff, - 0xea00, 0xea00, 0xea00, 0xea00, 0xea01, 0xea01, 0xea02, 0xea02, - 0xea03, 0xea04, 0xea05, 0xea05, 0xea06, 0xea07, 0xea08, 0xea09, - 0xea0a, 0xea0b, 0xea0c, 0xea0e, 0xea0f, 0xea10, 0xea11, 0xea13, - 0xea14, 0xea15, 0xea17, 0xea18, 0xea1a, 0xea1b, 0xea1d, 0xea1f, - 0xea20, 0xea20, 0xea20, 0xea20, 0xea21, 0xea21, 0xea22, 0xea22, - 0xea23, 0xea24, 0xea25, 0xea25, 0xea26, 0xea27, 0xea28, 0xea29, - 0xea2a, 0xea2b, 0xea2c, 0xea2e, 0xea2f, 0xea30, 0xea31, 0xea33, - 0xea34, 0xea35, 0xea37, 0xea38, 0xea3a, 0xea3b, 0xea3d, 0xea3f, - 0xea40, 0xea40, 0xea40, 0xea40, 0xea41, 0xea41, 0xea42, 0xea42, - 0xea43, 0xea44, 0xea45, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, - 0xea4a, 0xea4b, 0xea4c, 0xea4e, 0xea4f, 0xea50, 0xea51, 0xea53, - 0xea54, 0xea55, 0xea57, 0xea58, 0xea5a, 0xea5b, 0xea5d, 0xea5f, - 0xea60, 0xea60, 0xea60, 0xea60, 0xea61, 0xea61, 0xea62, 0xea62, - 0xea63, 0xea64, 0xea65, 0xea65, 0xea66, 0xea67, 0xea68, 0xea69, - 0xea6a, 0xea6b, 0xea6c, 0xea6e, 0xea6f, 0xea70, 0xea71, 0xea73, - 0xea74, 0xea75, 0xea77, 0xea78, 0xea7a, 0xea7b, 0xea7d, 0xea7f, - 0xea80, 0xea80, 0xea80, 0xea80, 0xea81, 0xea81, 0xea82, 0xea82, - 0xea83, 0xea84, 0xea85, 0xea85, 0xea86, 0xea87, 0xea88, 0xea89, - 0xea8a, 0xea8b, 0xea8c, 0xea8e, 0xea8f, 0xea90, 0xea91, 0xea93, - 0xea94, 0xea95, 0xea97, 0xea98, 0xea9a, 0xea9b, 0xea9d, 0xea9f, - 0xeaa0, 0xeaa0, 0xeaa0, 0xeaa0, 0xeaa1, 0xeaa1, 0xeaa2, 0xeaa2, - 0xeaa3, 0xeaa4, 0xeaa5, 0xeaa5, 0xeaa6, 0xeaa7, 0xeaa8, 0xeaa9, - 0xeaaa, 0xeaab, 0xeaac, 0xeaae, 0xeaaf, 0xeab0, 0xeab1, 0xeab3, - 0xeab4, 0xeab5, 0xeab7, 0xeab8, 0xeaba, 0xeabb, 0xeabd, 0xeabf, - 0xeac0, 0xeac0, 0xeac0, 0xeac0, 0xeac1, 0xeac1, 0xeac2, 0xeac2, - 0xeac3, 0xeac4, 0xeac5, 0xeac5, 0xeac6, 0xeac7, 0xeac8, 0xeac9, - 0xeaca, 0xeacb, 0xeacc, 0xeace, 0xeacf, 0xead0, 0xead1, 0xead3, - 0xead4, 0xead5, 0xead7, 0xead8, 0xeada, 0xeadb, 0xeadd, 0xeadf, - 0xeae0, 0xeae0, 0xeae0, 0xeae0, 0xeae1, 0xeae1, 0xeae2, 0xeae2, - 0xeae3, 0xeae4, 0xeae5, 0xeae5, 0xeae6, 0xeae7, 0xeae8, 0xeae9, - 0xeaea, 0xeaeb, 0xeaec, 0xeaee, 0xeaef, 0xeaf0, 0xeaf1, 0xeaf3, - 0xeaf4, 0xeaf5, 0xeaf7, 0xeaf8, 0xeafa, 0xeafb, 0xeafd, 0xeaff, - 0xeb00, 0xeb00, 0xeb00, 0xeb00, 0xeb01, 0xeb01, 0xeb02, 0xeb02, - 0xeb03, 0xeb04, 0xeb05, 0xeb05, 0xeb06, 0xeb07, 0xeb08, 0xeb09, - 0xeb0a, 0xeb0b, 0xeb0c, 0xeb0e, 0xeb0f, 0xeb10, 0xeb11, 0xeb13, - 0xeb14, 0xeb15, 0xeb17, 0xeb18, 0xeb1a, 0xeb1b, 0xeb1d, 0xeb1f, - 0xeb20, 0xeb20, 0xeb20, 0xeb20, 0xeb21, 0xeb21, 0xeb22, 0xeb22, - 0xeb23, 0xeb24, 0xeb25, 0xeb25, 0xeb26, 0xeb27, 0xeb28, 0xeb29, - 0xeb2a, 0xeb2b, 0xeb2c, 0xeb2e, 0xeb2f, 0xeb30, 0xeb31, 0xeb33, - 0xeb34, 0xeb35, 0xeb37, 0xeb38, 0xeb3a, 0xeb3b, 0xeb3d, 0xeb3f, - 0xeb40, 0xeb40, 0xeb40, 0xeb40, 0xeb41, 0xeb41, 0xeb42, 0xeb42, - 0xeb43, 0xeb44, 0xeb45, 0xeb45, 0xeb46, 0xeb47, 0xeb48, 0xeb49, - 0xeb4a, 0xeb4b, 0xeb4c, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, 0xeb53, - 0xeb54, 0xeb55, 0xeb57, 0xeb58, 0xeb5a, 0xeb5b, 0xeb5d, 0xeb5f, - 0xeb80, 0xeb80, 0xeb80, 0xeb80, 0xeb81, 0xeb81, 0xeb82, 0xeb82, - 0xeb83, 0xeb84, 0xeb85, 0xeb85, 0xeb86, 0xeb87, 0xeb88, 0xeb89, - 0xeb8a, 0xeb8b, 0xeb8c, 0xeb8e, 0xeb8f, 0xeb90, 0xeb91, 0xeb93, - 0xeb94, 0xeb95, 0xeb97, 0xeb98, 0xeb9a, 0xeb9b, 0xeb9d, 0xeb9f, - 0xeba0, 0xeba0, 0xeba0, 0xeba0, 0xeba1, 0xeba1, 0xeba2, 0xeba2, - 0xeba3, 0xeba4, 0xeba5, 0xeba5, 0xeba6, 0xeba7, 0xeba8, 0xeba9, - 0xebaa, 0xebab, 0xebac, 0xebae, 0xebaf, 0xebb0, 0xebb1, 0xebb3, - 0xebb4, 0xebb5, 0xebb7, 0xebb8, 0xebba, 0xebbb, 0xebbd, 0xebbf, - 0xebc0, 0xebc0, 0xebc0, 0xebc0, 0xebc1, 0xebc1, 0xebc2, 0xebc2, - 0xebc3, 0xebc4, 0xebc5, 0xebc5, 0xebc6, 0xebc7, 0xebc8, 0xebc9, - 0xebca, 0xebcb, 0xebcc, 0xebce, 0xebcf, 0xebd0, 0xebd1, 0xebd3, - 0xebd4, 0xebd5, 0xebd7, 0xebd8, 0xebda, 0xebdb, 0xebdd, 0xebdf, - 0xebe0, 0xebe0, 0xebe0, 0xebe0, 0xebe1, 0xebe1, 0xebe2, 0xebe2, - 0xebe3, 0xebe4, 0xebe5, 0xebe5, 0xebe6, 0xebe7, 0xebe8, 0xebe9, - 0xebea, 0xebeb, 0xebec, 0xebee, 0xebef, 0xebf0, 0xebf1, 0xebf3, - 0xebf4, 0xebf5, 0xebf7, 0xebf8, 0xebfa, 0xebfb, 0xebfd, 0xebff, - 0xec00, 0xec00, 0xec00, 0xec00, 0xec01, 0xec01, 0xec02, 0xec02, - 0xec03, 0xec04, 0xec05, 0xec05, 0xec06, 0xec07, 0xec08, 0xec09, - 0xec0a, 0xec0b, 0xec0c, 0xec0e, 0xec0f, 0xec10, 0xec11, 0xec13, - 0xec14, 0xec15, 0xec17, 0xec18, 0xec1a, 0xec1b, 0xec1d, 0xec1f, - 0xec40, 0xec40, 0xec40, 0xec40, 0xec41, 0xec41, 0xec42, 0xec42, - 0xec43, 0xec44, 0xec45, 0xec45, 0xec46, 0xec47, 0xec48, 0xec49, - 0xec4a, 0xec4b, 0xec4c, 0xec4e, 0xec4f, 0xec50, 0xec51, 0xec53, - 0xec54, 0xec55, 0xec57, 0xec58, 0xec5a, 0xec5b, 0xec5d, 0xec5f, - 0xec60, 0xec60, 0xec60, 0xec60, 0xec61, 0xec61, 0xec62, 0xec62, - 0xec63, 0xec64, 0xec65, 0xec65, 0xec66, 0xec67, 0xec68, 0xec69, - 0xec6a, 0xec6b, 0xec6c, 0xec6e, 0xec6f, 0xec70, 0xec71, 0xec73, - 0xec74, 0xec75, 0xec77, 0xec78, 0xec7a, 0xec7b, 0xec7d, 0xec7f, - 0xec80, 0xec80, 0xec80, 0xec80, 0xec81, 0xec81, 0xec82, 0xec82, - 0xec83, 0xec84, 0xec85, 0xec85, 0xec86, 0xec87, 0xec88, 0xec89, - 0xec8a, 0xec8b, 0xec8c, 0xec8e, 0xec8f, 0xec90, 0xec91, 0xec93, - 0xec94, 0xec95, 0xec97, 0xec98, 0xec9a, 0xec9b, 0xec9d, 0xec9f, - 0xecc0, 0xecc0, 0xecc0, 0xecc0, 0xecc1, 0xecc1, 0xecc2, 0xecc2, - 0xecc3, 0xecc4, 0xecc5, 0xecc5, 0xecc6, 0xecc7, 0xecc8, 0xecc9, - 0xecca, 0xeccb, 0xeccc, 0xecce, 0xeccf, 0xecd0, 0xecd1, 0xecd3, - 0xecd4, 0xecd5, 0xecd7, 0xecd8, 0xecda, 0xecdb, 0xecdd, 0xecdf, - 0xece0, 0xece0, 0xece0, 0xece0, 0xece1, 0xece1, 0xece2, 0xece2, - 0xece3, 0xece4, 0xece5, 0xece5, 0xece6, 0xece7, 0xece8, 0xece9, - 0xecea, 0xeceb, 0xecec, 0xecee, 0xecef, 0xecf0, 0xecf1, 0xecf3, - 0xecf4, 0xecf5, 0xecf7, 0xecf8, 0xecfa, 0xecfb, 0xecfd, 0xecff, - 0xed00, 0xed00, 0xed00, 0xed00, 0xed01, 0xed01, 0xed02, 0xed02, - 0xed03, 0xed04, 0xed05, 0xed05, 0xed06, 0xed07, 0xed08, 0xed09, - 0xed0a, 0xed0b, 0xed0c, 0xed0e, 0xed0f, 0xed10, 0xed11, 0xed13, - 0xed14, 0xed15, 0xed17, 0xed18, 0xed1a, 0xed1b, 0xed1d, 0xed1f, - 0xed40, 0xed40, 0xed40, 0xed40, 0xed41, 0xed41, 0xed42, 0xed42, - 0xed43, 0xed44, 0xed45, 0xed45, 0xed46, 0xed47, 0xed48, 0xed49, - 0xed4a, 0xed4b, 0xed4c, 0xed4e, 0xed4f, 0xed50, 0xed51, 0xed53, - 0xed54, 0xed55, 0xed57, 0xed58, 0xed5a, 0xed5b, 0xed5d, 0xed5f, - 0xed60, 0xed60, 0xed60, 0xed60, 0xed61, 0xed61, 0xed62, 0xed62, - 0xed63, 0xed64, 0xed65, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, - 0xed6a, 0xed6b, 0xed6c, 0xed6e, 0xed6f, 0xed70, 0xed71, 0xed73, - 0xed74, 0xed75, 0xed77, 0xed78, 0xed7a, 0xed7b, 0xed7d, 0xed7f, - 0xed80, 0xed80, 0xed80, 0xed80, 0xed81, 0xed81, 0xed82, 0xed82, - 0xed83, 0xed84, 0xed85, 0xed85, 0xed86, 0xed87, 0xed88, 0xed89, - 0xed8a, 0xed8b, 0xed8c, 0xed8e, 0xed8f, 0xed90, 0xed91, 0xed93, - 0xed94, 0xed95, 0xed97, 0xed98, 0xed9a, 0xed9b, 0xed9d, 0xed9f, - 0xedc0, 0xedc0, 0xedc0, 0xedc0, 0xedc1, 0xedc1, 0xedc2, 0xedc2, - 0xedc3, 0xedc4, 0xedc5, 0xedc5, 0xedc6, 0xedc7, 0xedc8, 0xedc9, - 0xedca, 0xedcb, 0xedcc, 0xedce, 0xedcf, 0xedd0, 0xedd1, 0xedd3, - 0xedd4, 0xedd5, 0xedd7, 0xedd8, 0xedda, 0xeddb, 0xeddd, 0xeddf, - 0xede0, 0xede0, 0xede0, 0xede0, 0xede1, 0xede1, 0xede2, 0xede2, - 0xede3, 0xede4, 0xede5, 0xede5, 0xede6, 0xede7, 0xede8, 0xede9, - 0xedea, 0xedeb, 0xedec, 0xedee, 0xedef, 0xedf0, 0xedf1, 0xedf3, - 0xedf4, 0xedf5, 0xedf7, 0xedf8, 0xedfa, 0xedfb, 0xedfd, 0xedff, - 0xee20, 0xee20, 0xee20, 0xee20, 0xee21, 0xee21, 0xee22, 0xee22, - 0xee23, 0xee24, 0xee25, 0xee25, 0xee26, 0xee27, 0xee28, 0xee29, - 0xee2a, 0xee2b, 0xee2c, 0xee2e, 0xee2f, 0xee30, 0xee31, 0xee33, - 0xee34, 0xee35, 0xee37, 0xee38, 0xee3a, 0xee3b, 0xee3d, 0xee3f, - 0xee40, 0xee40, 0xee40, 0xee40, 0xee41, 0xee41, 0xee42, 0xee42, - 0xee43, 0xee44, 0xee45, 0xee45, 0xee46, 0xee47, 0xee48, 0xee49, - 0xee4a, 0xee4b, 0xee4c, 0xee4e, 0xee4f, 0xee50, 0xee51, 0xee53, - 0xee54, 0xee55, 0xee57, 0xee58, 0xee5a, 0xee5b, 0xee5d, 0xee5f, - 0xee80, 0xee80, 0xee80, 0xee80, 0xee81, 0xee81, 0xee82, 0xee82, - 0xee83, 0xee84, 0xee85, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, - 0xee8a, 0xee8b, 0xee8c, 0xee8e, 0xee8f, 0xee90, 0xee91, 0xee93, - 0xee94, 0xee95, 0xee97, 0xee98, 0xee9a, 0xee9b, 0xee9d, 0xee9f, - 0xeea0, 0xeea0, 0xeea0, 0xeea0, 0xeea1, 0xeea1, 0xeea2, 0xeea2, - 0xeea3, 0xeea4, 0xeea5, 0xeea5, 0xeea6, 0xeea7, 0xeea8, 0xeea9, - 0xeeaa, 0xeeab, 0xeeac, 0xeeae, 0xeeaf, 0xeeb0, 0xeeb1, 0xeeb3, - 0xeeb4, 0xeeb5, 0xeeb7, 0xeeb8, 0xeeba, 0xeebb, 0xeebd, 0xeebf, - 0xeee0, 0xeee0, 0xeee0, 0xeee0, 0xeee1, 0xeee1, 0xeee2, 0xeee2, - 0xeee3, 0xeee4, 0xeee5, 0xeee5, 0xeee6, 0xeee7, 0xeee8, 0xeee9, - 0xeeea, 0xeeeb, 0xeeec, 0xeeee, 0xeeef, 0xeef0, 0xeef1, 0xeef3, - 0xeef4, 0xeef5, 0xeef7, 0xeef8, 0xeefa, 0xeefb, 0xeefd, 0xeeff, - 0xef00, 0xef00, 0xef00, 0xef00, 0xef01, 0xef01, 0xef02, 0xef02, - 0xef03, 0xef04, 0xef05, 0xef05, 0xef06, 0xef07, 0xef08, 0xef09, - 0xef0a, 0xef0b, 0xef0c, 0xef0e, 0xef0f, 0xef10, 0xef11, 0xef13, - 0xef14, 0xef15, 0xef17, 0xef18, 0xef1a, 0xef1b, 0xef1d, 0xef1f, - 0xef40, 0xef40, 0xef40, 0xef40, 0xef41, 0xef41, 0xef42, 0xef42, - 0xef43, 0xef44, 0xef45, 0xef45, 0xef46, 0xef47, 0xef48, 0xef49, - 0xef4a, 0xef4b, 0xef4c, 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef53, - 0xef54, 0xef55, 0xef57, 0xef58, 0xef5a, 0xef5b, 0xef5d, 0xef5f, - 0xef60, 0xef60, 0xef60, 0xef60, 0xef61, 0xef61, 0xef62, 0xef62, - 0xef63, 0xef64, 0xef65, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, - 0xef6a, 0xef6b, 0xef6c, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xef73, - 0xef74, 0xef75, 0xef77, 0xef78, 0xef7a, 0xef7b, 0xef7d, 0xef7f, - 0xefa0, 0xefa0, 0xefa0, 0xefa0, 0xefa1, 0xefa1, 0xefa2, 0xefa2, - 0xefa3, 0xefa4, 0xefa5, 0xefa5, 0xefa6, 0xefa7, 0xefa8, 0xefa9, - 0xefaa, 0xefab, 0xefac, 0xefae, 0xefaf, 0xefb0, 0xefb1, 0xefb3, - 0xefb4, 0xefb5, 0xefb7, 0xefb8, 0xefba, 0xefbb, 0xefbd, 0xefbf, - 0xefe0, 0xefe0, 0xefe0, 0xefe0, 0xefe1, 0xefe1, 0xefe2, 0xefe2, - 0xefe3, 0xefe4, 0xefe5, 0xefe5, 0xefe6, 0xefe7, 0xefe8, 0xefe9, - 0xefea, 0xefeb, 0xefec, 0xefee, 0xefef, 0xeff0, 0xeff1, 0xeff3, - 0xeff4, 0xeff5, 0xeff7, 0xeff8, 0xeffa, 0xeffb, 0xeffd, 0xefff, - 0xf800, 0xf800, 0xf800, 0xf800, 0xf801, 0xf801, 0xf802, 0xf802, - 0xf803, 0xf804, 0xf805, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809, - 0xf80a, 0xf80b, 0xf80c, 0xf80e, 0xf80f, 0xf810, 0xf811, 0xf813, - 0xf814, 0xf815, 0xf817, 0xf818, 0xf81a, 0xf81b, 0xf81d, 0xf81f, - 0xf800, 0xf800, 0xf800, 0xf800, 0xf801, 0xf801, 0xf802, 0xf802, - 0xf803, 0xf804, 0xf805, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809, - 0xf80a, 0xf80b, 0xf80c, 0xf80e, 0xf80f, 0xf810, 0xf811, 0xf813, - 0xf814, 0xf815, 0xf817, 0xf818, 0xf81a, 0xf81b, 0xf81d, 0xf81f, - 0xf800, 0xf800, 0xf800, 0xf800, 0xf801, 0xf801, 0xf802, 0xf802, - 0xf803, 0xf804, 0xf805, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809, - 0xf80a, 0xf80b, 0xf80c, 0xf80e, 0xf80f, 0xf810, 0xf811, 0xf813, - 0xf814, 0xf815, 0xf817, 0xf818, 0xf81a, 0xf81b, 0xf81d, 0xf81f, - 0xf800, 0xf800, 0xf800, 0xf800, 0xf801, 0xf801, 0xf802, 0xf802, - 0xf803, 0xf804, 0xf805, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809, - 0xf80a, 0xf80b, 0xf80c, 0xf80e, 0xf80f, 0xf810, 0xf811, 0xf813, - 0xf814, 0xf815, 0xf817, 0xf818, 0xf81a, 0xf81b, 0xf81d, 0xf81f, - 0xf800, 0xf800, 0xf800, 0xf800, 0xf801, 0xf801, 0xf802, 0xf802, - 0xf803, 0xf804, 0xf805, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809, - 0xf80a, 0xf80b, 0xf80c, 0xf80e, 0xf80f, 0xf810, 0xf811, 0xf813, - 0xf814, 0xf815, 0xf817, 0xf818, 0xf81a, 0xf81b, 0xf81d, 0xf81f, - 0xf820, 0xf820, 0xf820, 0xf820, 0xf821, 0xf821, 0xf822, 0xf822, - 0xf823, 0xf824, 0xf825, 0xf825, 0xf826, 0xf827, 0xf828, 0xf829, - 0xf82a, 0xf82b, 0xf82c, 0xf82e, 0xf82f, 0xf830, 0xf831, 0xf833, - 0xf834, 0xf835, 0xf837, 0xf838, 0xf83a, 0xf83b, 0xf83d, 0xf83f, - 0xf820, 0xf820, 0xf820, 0xf820, 0xf821, 0xf821, 0xf822, 0xf822, - 0xf823, 0xf824, 0xf825, 0xf825, 0xf826, 0xf827, 0xf828, 0xf829, - 0xf82a, 0xf82b, 0xf82c, 0xf82e, 0xf82f, 0xf830, 0xf831, 0xf833, - 0xf834, 0xf835, 0xf837, 0xf838, 0xf83a, 0xf83b, 0xf83d, 0xf83f, - 0xf820, 0xf820, 0xf820, 0xf820, 0xf821, 0xf821, 0xf822, 0xf822, - 0xf823, 0xf824, 0xf825, 0xf825, 0xf826, 0xf827, 0xf828, 0xf829, - 0xf82a, 0xf82b, 0xf82c, 0xf82e, 0xf82f, 0xf830, 0xf831, 0xf833, - 0xf834, 0xf835, 0xf837, 0xf838, 0xf83a, 0xf83b, 0xf83d, 0xf83f, - 0xf840, 0xf840, 0xf840, 0xf840, 0xf841, 0xf841, 0xf842, 0xf842, - 0xf843, 0xf844, 0xf845, 0xf845, 0xf846, 0xf847, 0xf848, 0xf849, - 0xf84a, 0xf84b, 0xf84c, 0xf84e, 0xf84f, 0xf850, 0xf851, 0xf853, - 0xf854, 0xf855, 0xf857, 0xf858, 0xf85a, 0xf85b, 0xf85d, 0xf85f, - 0xf840, 0xf840, 0xf840, 0xf840, 0xf841, 0xf841, 0xf842, 0xf842, - 0xf843, 0xf844, 0xf845, 0xf845, 0xf846, 0xf847, 0xf848, 0xf849, - 0xf84a, 0xf84b, 0xf84c, 0xf84e, 0xf84f, 0xf850, 0xf851, 0xf853, - 0xf854, 0xf855, 0xf857, 0xf858, 0xf85a, 0xf85b, 0xf85d, 0xf85f, - 0xf860, 0xf860, 0xf860, 0xf860, 0xf861, 0xf861, 0xf862, 0xf862, - 0xf863, 0xf864, 0xf865, 0xf865, 0xf866, 0xf867, 0xf868, 0xf869, - 0xf86a, 0xf86b, 0xf86c, 0xf86e, 0xf86f, 0xf870, 0xf871, 0xf873, - 0xf874, 0xf875, 0xf877, 0xf878, 0xf87a, 0xf87b, 0xf87d, 0xf87f, - 0xf860, 0xf860, 0xf860, 0xf860, 0xf861, 0xf861, 0xf862, 0xf862, - 0xf863, 0xf864, 0xf865, 0xf865, 0xf866, 0xf867, 0xf868, 0xf869, - 0xf86a, 0xf86b, 0xf86c, 0xf86e, 0xf86f, 0xf870, 0xf871, 0xf873, - 0xf874, 0xf875, 0xf877, 0xf878, 0xf87a, 0xf87b, 0xf87d, 0xf87f, - 0xf880, 0xf880, 0xf880, 0xf880, 0xf881, 0xf881, 0xf882, 0xf882, - 0xf883, 0xf884, 0xf885, 0xf885, 0xf886, 0xf887, 0xf888, 0xf889, - 0xf88a, 0xf88b, 0xf88c, 0xf88e, 0xf88f, 0xf890, 0xf891, 0xf893, - 0xf894, 0xf895, 0xf897, 0xf898, 0xf89a, 0xf89b, 0xf89d, 0xf89f, - 0xf8a0, 0xf8a0, 0xf8a0, 0xf8a0, 0xf8a1, 0xf8a1, 0xf8a2, 0xf8a2, - 0xf8a3, 0xf8a4, 0xf8a5, 0xf8a5, 0xf8a6, 0xf8a7, 0xf8a8, 0xf8a9, - 0xf8aa, 0xf8ab, 0xf8ac, 0xf8ae, 0xf8af, 0xf8b0, 0xf8b1, 0xf8b3, - 0xf8b4, 0xf8b5, 0xf8b7, 0xf8b8, 0xf8ba, 0xf8bb, 0xf8bd, 0xf8bf, - 0xf8a0, 0xf8a0, 0xf8a0, 0xf8a0, 0xf8a1, 0xf8a1, 0xf8a2, 0xf8a2, - 0xf8a3, 0xf8a4, 0xf8a5, 0xf8a5, 0xf8a6, 0xf8a7, 0xf8a8, 0xf8a9, - 0xf8aa, 0xf8ab, 0xf8ac, 0xf8ae, 0xf8af, 0xf8b0, 0xf8b1, 0xf8b3, - 0xf8b4, 0xf8b5, 0xf8b7, 0xf8b8, 0xf8ba, 0xf8bb, 0xf8bd, 0xf8bf, - 0xf8c0, 0xf8c0, 0xf8c0, 0xf8c0, 0xf8c1, 0xf8c1, 0xf8c2, 0xf8c2, - 0xf8c3, 0xf8c4, 0xf8c5, 0xf8c5, 0xf8c6, 0xf8c7, 0xf8c8, 0xf8c9, - 0xf8ca, 0xf8cb, 0xf8cc, 0xf8ce, 0xf8cf, 0xf8d0, 0xf8d1, 0xf8d3, - 0xf8d4, 0xf8d5, 0xf8d7, 0xf8d8, 0xf8da, 0xf8db, 0xf8dd, 0xf8df, - 0xf8e0, 0xf8e0, 0xf8e0, 0xf8e0, 0xf8e1, 0xf8e1, 0xf8e2, 0xf8e2, - 0xf8e3, 0xf8e4, 0xf8e5, 0xf8e5, 0xf8e6, 0xf8e7, 0xf8e8, 0xf8e9, - 0xf8ea, 0xf8eb, 0xf8ec, 0xf8ee, 0xf8ef, 0xf8f0, 0xf8f1, 0xf8f3, - 0xf8f4, 0xf8f5, 0xf8f7, 0xf8f8, 0xf8fa, 0xf8fb, 0xf8fd, 0xf8ff, - 0xf8e0, 0xf8e0, 0xf8e0, 0xf8e0, 0xf8e1, 0xf8e1, 0xf8e2, 0xf8e2, - 0xf8e3, 0xf8e4, 0xf8e5, 0xf8e5, 0xf8e6, 0xf8e7, 0xf8e8, 0xf8e9, - 0xf8ea, 0xf8eb, 0xf8ec, 0xf8ee, 0xf8ef, 0xf8f0, 0xf8f1, 0xf8f3, - 0xf8f4, 0xf8f5, 0xf8f7, 0xf8f8, 0xf8fa, 0xf8fb, 0xf8fd, 0xf8ff, - 0xf900, 0xf900, 0xf900, 0xf900, 0xf901, 0xf901, 0xf902, 0xf902, - 0xf903, 0xf904, 0xf905, 0xf905, 0xf906, 0xf907, 0xf908, 0xf909, - 0xf90a, 0xf90b, 0xf90c, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf913, - 0xf914, 0xf915, 0xf917, 0xf918, 0xf91a, 0xf91b, 0xf91d, 0xf91f, - 0xf920, 0xf920, 0xf920, 0xf920, 0xf921, 0xf921, 0xf922, 0xf922, - 0xf923, 0xf924, 0xf925, 0xf925, 0xf926, 0xf927, 0xf928, 0xf929, - 0xf92a, 0xf92b, 0xf92c, 0xf92e, 0xf92f, 0xf930, 0xf931, 0xf933, - 0xf934, 0xf935, 0xf937, 0xf938, 0xf93a, 0xf93b, 0xf93d, 0xf93f, - 0xf940, 0xf940, 0xf940, 0xf940, 0xf941, 0xf941, 0xf942, 0xf942, - 0xf943, 0xf944, 0xf945, 0xf945, 0xf946, 0xf947, 0xf948, 0xf949, - 0xf94a, 0xf94b, 0xf94c, 0xf94e, 0xf94f, 0xf950, 0xf951, 0xf953, - 0xf954, 0xf955, 0xf957, 0xf958, 0xf95a, 0xf95b, 0xf95d, 0xf95f, - 0xf940, 0xf940, 0xf940, 0xf940, 0xf941, 0xf941, 0xf942, 0xf942, - 0xf943, 0xf944, 0xf945, 0xf945, 0xf946, 0xf947, 0xf948, 0xf949, - 0xf94a, 0xf94b, 0xf94c, 0xf94e, 0xf94f, 0xf950, 0xf951, 0xf953, - 0xf954, 0xf955, 0xf957, 0xf958, 0xf95a, 0xf95b, 0xf95d, 0xf95f, - 0xf960, 0xf960, 0xf960, 0xf960, 0xf961, 0xf961, 0xf962, 0xf962, - 0xf963, 0xf964, 0xf965, 0xf965, 0xf966, 0xf967, 0xf968, 0xf969, - 0xf96a, 0xf96b, 0xf96c, 0xf96e, 0xf96f, 0xf970, 0xf971, 0xf973, - 0xf974, 0xf975, 0xf977, 0xf978, 0xf97a, 0xf97b, 0xf97d, 0xf97f, - 0xf980, 0xf980, 0xf980, 0xf980, 0xf981, 0xf981, 0xf982, 0xf982, - 0xf983, 0xf984, 0xf985, 0xf985, 0xf986, 0xf987, 0xf988, 0xf989, - 0xf98a, 0xf98b, 0xf98c, 0xf98e, 0xf98f, 0xf990, 0xf991, 0xf993, - 0xf994, 0xf995, 0xf997, 0xf998, 0xf99a, 0xf99b, 0xf99d, 0xf99f, - 0xf9a0, 0xf9a0, 0xf9a0, 0xf9a0, 0xf9a1, 0xf9a1, 0xf9a2, 0xf9a2, - 0xf9a3, 0xf9a4, 0xf9a5, 0xf9a5, 0xf9a6, 0xf9a7, 0xf9a8, 0xf9a9, - 0xf9aa, 0xf9ab, 0xf9ac, 0xf9ae, 0xf9af, 0xf9b0, 0xf9b1, 0xf9b3, - 0xf9b4, 0xf9b5, 0xf9b7, 0xf9b8, 0xf9ba, 0xf9bb, 0xf9bd, 0xf9bf, - 0xf9c0, 0xf9c0, 0xf9c0, 0xf9c0, 0xf9c1, 0xf9c1, 0xf9c2, 0xf9c2, - 0xf9c3, 0xf9c4, 0xf9c5, 0xf9c5, 0xf9c6, 0xf9c7, 0xf9c8, 0xf9c9, - 0xf9ca, 0xf9cb, 0xf9cc, 0xf9ce, 0xf9cf, 0xf9d0, 0xf9d1, 0xf9d3, - 0xf9d4, 0xf9d5, 0xf9d7, 0xf9d8, 0xf9da, 0xf9db, 0xf9dd, 0xf9df, - 0xf9e0, 0xf9e0, 0xf9e0, 0xf9e0, 0xf9e1, 0xf9e1, 0xf9e2, 0xf9e2, - 0xf9e3, 0xf9e4, 0xf9e5, 0xf9e5, 0xf9e6, 0xf9e7, 0xf9e8, 0xf9e9, - 0xf9ea, 0xf9eb, 0xf9ec, 0xf9ee, 0xf9ef, 0xf9f0, 0xf9f1, 0xf9f3, - 0xf9f4, 0xf9f5, 0xf9f7, 0xf9f8, 0xf9fa, 0xf9fb, 0xf9fd, 0xf9ff, - 0xfa00, 0xfa00, 0xfa00, 0xfa00, 0xfa01, 0xfa01, 0xfa02, 0xfa02, - 0xfa03, 0xfa04, 0xfa05, 0xfa05, 0xfa06, 0xfa07, 0xfa08, 0xfa09, - 0xfa0a, 0xfa0b, 0xfa0c, 0xfa0e, 0xfa0f, 0xfa10, 0xfa11, 0xfa13, - 0xfa14, 0xfa15, 0xfa17, 0xfa18, 0xfa1a, 0xfa1b, 0xfa1d, 0xfa1f, - 0xfa20, 0xfa20, 0xfa20, 0xfa20, 0xfa21, 0xfa21, 0xfa22, 0xfa22, - 0xfa23, 0xfa24, 0xfa25, 0xfa25, 0xfa26, 0xfa27, 0xfa28, 0xfa29, - 0xfa2a, 0xfa2b, 0xfa2c, 0xfa2e, 0xfa2f, 0xfa30, 0xfa31, 0xfa33, - 0xfa34, 0xfa35, 0xfa37, 0xfa38, 0xfa3a, 0xfa3b, 0xfa3d, 0xfa3f, - 0xfa40, 0xfa40, 0xfa40, 0xfa40, 0xfa41, 0xfa41, 0xfa42, 0xfa42, - 0xfa43, 0xfa44, 0xfa45, 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, - 0xfa4a, 0xfa4b, 0xfa4c, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa53, - 0xfa54, 0xfa55, 0xfa57, 0xfa58, 0xfa5a, 0xfa5b, 0xfa5d, 0xfa5f, - 0xfa60, 0xfa60, 0xfa60, 0xfa60, 0xfa61, 0xfa61, 0xfa62, 0xfa62, - 0xfa63, 0xfa64, 0xfa65, 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, - 0xfa6a, 0xfa6b, 0xfa6c, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, 0xfa73, - 0xfa74, 0xfa75, 0xfa77, 0xfa78, 0xfa7a, 0xfa7b, 0xfa7d, 0xfa7f, - 0xfa80, 0xfa80, 0xfa80, 0xfa80, 0xfa81, 0xfa81, 0xfa82, 0xfa82, - 0xfa83, 0xfa84, 0xfa85, 0xfa85, 0xfa86, 0xfa87, 0xfa88, 0xfa89, - 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa93, - 0xfa94, 0xfa95, 0xfa97, 0xfa98, 0xfa9a, 0xfa9b, 0xfa9d, 0xfa9f, - 0xfaa0, 0xfaa0, 0xfaa0, 0xfaa0, 0xfaa1, 0xfaa1, 0xfaa2, 0xfaa2, - 0xfaa3, 0xfaa4, 0xfaa5, 0xfaa5, 0xfaa6, 0xfaa7, 0xfaa8, 0xfaa9, - 0xfaaa, 0xfaab, 0xfaac, 0xfaae, 0xfaaf, 0xfab0, 0xfab1, 0xfab3, - 0xfab4, 0xfab5, 0xfab7, 0xfab8, 0xfaba, 0xfabb, 0xfabd, 0xfabf, - 0xfac0, 0xfac0, 0xfac0, 0xfac0, 0xfac1, 0xfac1, 0xfac2, 0xfac2, - 0xfac3, 0xfac4, 0xfac5, 0xfac5, 0xfac6, 0xfac7, 0xfac8, 0xfac9, - 0xfaca, 0xfacb, 0xfacc, 0xface, 0xfacf, 0xfad0, 0xfad1, 0xfad3, - 0xfad4, 0xfad5, 0xfad7, 0xfad8, 0xfada, 0xfadb, 0xfadd, 0xfadf, - 0xfae0, 0xfae0, 0xfae0, 0xfae0, 0xfae1, 0xfae1, 0xfae2, 0xfae2, - 0xfae3, 0xfae4, 0xfae5, 0xfae5, 0xfae6, 0xfae7, 0xfae8, 0xfae9, - 0xfaea, 0xfaeb, 0xfaec, 0xfaee, 0xfaef, 0xfaf0, 0xfaf1, 0xfaf3, - 0xfaf4, 0xfaf5, 0xfaf7, 0xfaf8, 0xfafa, 0xfafb, 0xfafd, 0xfaff, - 0xfb00, 0xfb00, 0xfb00, 0xfb00, 0xfb01, 0xfb01, 0xfb02, 0xfb02, - 0xfb03, 0xfb04, 0xfb05, 0xfb05, 0xfb06, 0xfb07, 0xfb08, 0xfb09, - 0xfb0a, 0xfb0b, 0xfb0c, 0xfb0e, 0xfb0f, 0xfb10, 0xfb11, 0xfb13, - 0xfb14, 0xfb15, 0xfb17, 0xfb18, 0xfb1a, 0xfb1b, 0xfb1d, 0xfb1f, - 0xfb20, 0xfb20, 0xfb20, 0xfb20, 0xfb21, 0xfb21, 0xfb22, 0xfb22, - 0xfb23, 0xfb24, 0xfb25, 0xfb25, 0xfb26, 0xfb27, 0xfb28, 0xfb29, - 0xfb2a, 0xfb2b, 0xfb2c, 0xfb2e, 0xfb2f, 0xfb30, 0xfb31, 0xfb33, - 0xfb34, 0xfb35, 0xfb37, 0xfb38, 0xfb3a, 0xfb3b, 0xfb3d, 0xfb3f, - 0xfb40, 0xfb40, 0xfb40, 0xfb40, 0xfb41, 0xfb41, 0xfb42, 0xfb42, - 0xfb43, 0xfb44, 0xfb45, 0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, - 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, 0xfb53, - 0xfb54, 0xfb55, 0xfb57, 0xfb58, 0xfb5a, 0xfb5b, 0xfb5d, 0xfb5f, - 0xfb80, 0xfb80, 0xfb80, 0xfb80, 0xfb81, 0xfb81, 0xfb82, 0xfb82, - 0xfb83, 0xfb84, 0xfb85, 0xfb85, 0xfb86, 0xfb87, 0xfb88, 0xfb89, - 0xfb8a, 0xfb8b, 0xfb8c, 0xfb8e, 0xfb8f, 0xfb90, 0xfb91, 0xfb93, - 0xfb94, 0xfb95, 0xfb97, 0xfb98, 0xfb9a, 0xfb9b, 0xfb9d, 0xfb9f, - 0xfba0, 0xfba0, 0xfba0, 0xfba0, 0xfba1, 0xfba1, 0xfba2, 0xfba2, - 0xfba3, 0xfba4, 0xfba5, 0xfba5, 0xfba6, 0xfba7, 0xfba8, 0xfba9, - 0xfbaa, 0xfbab, 0xfbac, 0xfbae, 0xfbaf, 0xfbb0, 0xfbb1, 0xfbb3, - 0xfbb4, 0xfbb5, 0xfbb7, 0xfbb8, 0xfbba, 0xfbbb, 0xfbbd, 0xfbbf, - 0xfbc0, 0xfbc0, 0xfbc0, 0xfbc0, 0xfbc1, 0xfbc1, 0xfbc2, 0xfbc2, - 0xfbc3, 0xfbc4, 0xfbc5, 0xfbc5, 0xfbc6, 0xfbc7, 0xfbc8, 0xfbc9, - 0xfbca, 0xfbcb, 0xfbcc, 0xfbce, 0xfbcf, 0xfbd0, 0xfbd1, 0xfbd3, - 0xfbd4, 0xfbd5, 0xfbd7, 0xfbd8, 0xfbda, 0xfbdb, 0xfbdd, 0xfbdf, - 0xfbe0, 0xfbe0, 0xfbe0, 0xfbe0, 0xfbe1, 0xfbe1, 0xfbe2, 0xfbe2, - 0xfbe3, 0xfbe4, 0xfbe5, 0xfbe5, 0xfbe6, 0xfbe7, 0xfbe8, 0xfbe9, - 0xfbea, 0xfbeb, 0xfbec, 0xfbee, 0xfbef, 0xfbf0, 0xfbf1, 0xfbf3, - 0xfbf4, 0xfbf5, 0xfbf7, 0xfbf8, 0xfbfa, 0xfbfb, 0xfbfd, 0xfbff, - 0xfc00, 0xfc00, 0xfc00, 0xfc00, 0xfc01, 0xfc01, 0xfc02, 0xfc02, - 0xfc03, 0xfc04, 0xfc05, 0xfc05, 0xfc06, 0xfc07, 0xfc08, 0xfc09, - 0xfc0a, 0xfc0b, 0xfc0c, 0xfc0e, 0xfc0f, 0xfc10, 0xfc11, 0xfc13, - 0xfc14, 0xfc15, 0xfc17, 0xfc18, 0xfc1a, 0xfc1b, 0xfc1d, 0xfc1f, - 0xfc40, 0xfc40, 0xfc40, 0xfc40, 0xfc41, 0xfc41, 0xfc42, 0xfc42, - 0xfc43, 0xfc44, 0xfc45, 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xfc49, - 0xfc4a, 0xfc4b, 0xfc4c, 0xfc4e, 0xfc4f, 0xfc50, 0xfc51, 0xfc53, - 0xfc54, 0xfc55, 0xfc57, 0xfc58, 0xfc5a, 0xfc5b, 0xfc5d, 0xfc5f, - 0xfc60, 0xfc60, 0xfc60, 0xfc60, 0xfc61, 0xfc61, 0xfc62, 0xfc62, - 0xfc63, 0xfc64, 0xfc65, 0xfc65, 0xfc66, 0xfc67, 0xfc68, 0xfc69, - 0xfc6a, 0xfc6b, 0xfc6c, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, 0xfc73, - 0xfc74, 0xfc75, 0xfc77, 0xfc78, 0xfc7a, 0xfc7b, 0xfc7d, 0xfc7f, - 0xfc80, 0xfc80, 0xfc80, 0xfc80, 0xfc81, 0xfc81, 0xfc82, 0xfc82, - 0xfc83, 0xfc84, 0xfc85, 0xfc85, 0xfc86, 0xfc87, 0xfc88, 0xfc89, - 0xfc8a, 0xfc8b, 0xfc8c, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc93, - 0xfc94, 0xfc95, 0xfc97, 0xfc98, 0xfc9a, 0xfc9b, 0xfc9d, 0xfc9f, - 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc0, 0xfcc1, 0xfcc1, 0xfcc2, 0xfcc2, - 0xfcc3, 0xfcc4, 0xfcc5, 0xfcc5, 0xfcc6, 0xfcc7, 0xfcc8, 0xfcc9, - 0xfcca, 0xfccb, 0xfccc, 0xfcce, 0xfccf, 0xfcd0, 0xfcd1, 0xfcd3, - 0xfcd4, 0xfcd5, 0xfcd7, 0xfcd8, 0xfcda, 0xfcdb, 0xfcdd, 0xfcdf, - 0xfce0, 0xfce0, 0xfce0, 0xfce0, 0xfce1, 0xfce1, 0xfce2, 0xfce2, - 0xfce3, 0xfce4, 0xfce5, 0xfce5, 0xfce6, 0xfce7, 0xfce8, 0xfce9, - 0xfcea, 0xfceb, 0xfcec, 0xfcee, 0xfcef, 0xfcf0, 0xfcf1, 0xfcf3, - 0xfcf4, 0xfcf5, 0xfcf7, 0xfcf8, 0xfcfa, 0xfcfb, 0xfcfd, 0xfcff, - 0xfd00, 0xfd00, 0xfd00, 0xfd00, 0xfd01, 0xfd01, 0xfd02, 0xfd02, - 0xfd03, 0xfd04, 0xfd05, 0xfd05, 0xfd06, 0xfd07, 0xfd08, 0xfd09, - 0xfd0a, 0xfd0b, 0xfd0c, 0xfd0e, 0xfd0f, 0xfd10, 0xfd11, 0xfd13, - 0xfd14, 0xfd15, 0xfd17, 0xfd18, 0xfd1a, 0xfd1b, 0xfd1d, 0xfd1f, - 0xfd40, 0xfd40, 0xfd40, 0xfd40, 0xfd41, 0xfd41, 0xfd42, 0xfd42, - 0xfd43, 0xfd44, 0xfd45, 0xfd45, 0xfd46, 0xfd47, 0xfd48, 0xfd49, - 0xfd4a, 0xfd4b, 0xfd4c, 0xfd4e, 0xfd4f, 0xfd50, 0xfd51, 0xfd53, - 0xfd54, 0xfd55, 0xfd57, 0xfd58, 0xfd5a, 0xfd5b, 0xfd5d, 0xfd5f, - 0xfd60, 0xfd60, 0xfd60, 0xfd60, 0xfd61, 0xfd61, 0xfd62, 0xfd62, - 0xfd63, 0xfd64, 0xfd65, 0xfd65, 0xfd66, 0xfd67, 0xfd68, 0xfd69, - 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6e, 0xfd6f, 0xfd70, 0xfd71, 0xfd73, - 0xfd74, 0xfd75, 0xfd77, 0xfd78, 0xfd7a, 0xfd7b, 0xfd7d, 0xfd7f, - 0xfd80, 0xfd80, 0xfd80, 0xfd80, 0xfd81, 0xfd81, 0xfd82, 0xfd82, - 0xfd83, 0xfd84, 0xfd85, 0xfd85, 0xfd86, 0xfd87, 0xfd88, 0xfd89, - 0xfd8a, 0xfd8b, 0xfd8c, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd93, - 0xfd94, 0xfd95, 0xfd97, 0xfd98, 0xfd9a, 0xfd9b, 0xfd9d, 0xfd9f, - 0xfdc0, 0xfdc0, 0xfdc0, 0xfdc0, 0xfdc1, 0xfdc1, 0xfdc2, 0xfdc2, - 0xfdc3, 0xfdc4, 0xfdc5, 0xfdc5, 0xfdc6, 0xfdc7, 0xfdc8, 0xfdc9, - 0xfdca, 0xfdcb, 0xfdcc, 0xfdce, 0xfdcf, 0xfdd0, 0xfdd1, 0xfdd3, - 0xfdd4, 0xfdd5, 0xfdd7, 0xfdd8, 0xfdda, 0xfddb, 0xfddd, 0xfddf, - 0xfde0, 0xfde0, 0xfde0, 0xfde0, 0xfde1, 0xfde1, 0xfde2, 0xfde2, - 0xfde3, 0xfde4, 0xfde5, 0xfde5, 0xfde6, 0xfde7, 0xfde8, 0xfde9, - 0xfdea, 0xfdeb, 0xfdec, 0xfdee, 0xfdef, 0xfdf0, 0xfdf1, 0xfdf3, - 0xfdf4, 0xfdf5, 0xfdf7, 0xfdf8, 0xfdfa, 0xfdfb, 0xfdfd, 0xfdff, - 0xfe20, 0xfe20, 0xfe20, 0xfe20, 0xfe21, 0xfe21, 0xfe22, 0xfe22, - 0xfe23, 0xfe24, 0xfe25, 0xfe25, 0xfe26, 0xfe27, 0xfe28, 0xfe29, - 0xfe2a, 0xfe2b, 0xfe2c, 0xfe2e, 0xfe2f, 0xfe30, 0xfe31, 0xfe33, - 0xfe34, 0xfe35, 0xfe37, 0xfe38, 0xfe3a, 0xfe3b, 0xfe3d, 0xfe3f, - 0xfe40, 0xfe40, 0xfe40, 0xfe40, 0xfe41, 0xfe41, 0xfe42, 0xfe42, - 0xfe43, 0xfe44, 0xfe45, 0xfe45, 0xfe46, 0xfe47, 0xfe48, 0xfe49, - 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4e, 0xfe4f, 0xfe50, 0xfe51, 0xfe53, - 0xfe54, 0xfe55, 0xfe57, 0xfe58, 0xfe5a, 0xfe5b, 0xfe5d, 0xfe5f, - 0xfe80, 0xfe80, 0xfe80, 0xfe80, 0xfe81, 0xfe81, 0xfe82, 0xfe82, - 0xfe83, 0xfe84, 0xfe85, 0xfe85, 0xfe86, 0xfe87, 0xfe88, 0xfe89, - 0xfe8a, 0xfe8b, 0xfe8c, 0xfe8e, 0xfe8f, 0xfe90, 0xfe91, 0xfe93, - 0xfe94, 0xfe95, 0xfe97, 0xfe98, 0xfe9a, 0xfe9b, 0xfe9d, 0xfe9f, - 0xfea0, 0xfea0, 0xfea0, 0xfea0, 0xfea1, 0xfea1, 0xfea2, 0xfea2, - 0xfea3, 0xfea4, 0xfea5, 0xfea5, 0xfea6, 0xfea7, 0xfea8, 0xfea9, - 0xfeaa, 0xfeab, 0xfeac, 0xfeae, 0xfeaf, 0xfeb0, 0xfeb1, 0xfeb3, - 0xfeb4, 0xfeb5, 0xfeb7, 0xfeb8, 0xfeba, 0xfebb, 0xfebd, 0xfebf, - 0xfee0, 0xfee0, 0xfee0, 0xfee0, 0xfee1, 0xfee1, 0xfee2, 0xfee2, - 0xfee3, 0xfee4, 0xfee5, 0xfee5, 0xfee6, 0xfee7, 0xfee8, 0xfee9, - 0xfeea, 0xfeeb, 0xfeec, 0xfeee, 0xfeef, 0xfef0, 0xfef1, 0xfef3, - 0xfef4, 0xfef5, 0xfef7, 0xfef8, 0xfefa, 0xfefb, 0xfefd, 0xfeff, - 0xff00, 0xff00, 0xff00, 0xff00, 0xff01, 0xff01, 0xff02, 0xff02, - 0xff03, 0xff04, 0xff05, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, - 0xff0a, 0xff0b, 0xff0c, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff13, - 0xff14, 0xff15, 0xff17, 0xff18, 0xff1a, 0xff1b, 0xff1d, 0xff1f, - 0xff40, 0xff40, 0xff40, 0xff40, 0xff41, 0xff41, 0xff42, 0xff42, - 0xff43, 0xff44, 0xff45, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, - 0xff4a, 0xff4b, 0xff4c, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff53, - 0xff54, 0xff55, 0xff57, 0xff58, 0xff5a, 0xff5b, 0xff5d, 0xff5f, - 0xff60, 0xff60, 0xff60, 0xff60, 0xff61, 0xff61, 0xff62, 0xff62, - 0xff63, 0xff64, 0xff65, 0xff65, 0xff66, 0xff67, 0xff68, 0xff69, - 0xff6a, 0xff6b, 0xff6c, 0xff6e, 0xff6f, 0xff70, 0xff71, 0xff73, - 0xff74, 0xff75, 0xff77, 0xff78, 0xff7a, 0xff7b, 0xff7d, 0xff7f, - 0xffa0, 0xffa0, 0xffa0, 0xffa0, 0xffa1, 0xffa1, 0xffa2, 0xffa2, - 0xffa3, 0xffa4, 0xffa5, 0xffa5, 0xffa6, 0xffa7, 0xffa8, 0xffa9, - 0xffaa, 0xffab, 0xffac, 0xffae, 0xffaf, 0xffb0, 0xffb1, 0xffb3, - 0xffb4, 0xffb5, 0xffb7, 0xffb8, 0xffba, 0xffbb, 0xffbd, 0xffbf, - 0xffe0, 0xffe0, 0xffe0, 0xffe0, 0xffe1, 0xffe1, 0xffe2, 0xffe2, - 0xffe3, 0xffe4, 0xffe5, 0xffe5, 0xffe6, 0xffe7, 0xffe8, 0xffe9, - 0xffea, 0xffeb, 0xffec, 0xffee, 0xffef, 0xfff0, 0xfff1, 0xfff3, - 0xfff4, 0xfff5, 0xfff7, 0xfff8, 0xfffa, 0xfffb, 0xfffd, 0xffff, -}; diff --git a/sys/src/9/bitsy/init9.s b/sys/src/9/bitsy/init9.s deleted file mode 100644 index 2de558259..000000000 --- a/sys/src/9/bitsy/init9.s +++ /dev/null @@ -1,12 +0,0 @@ -TEXT _main(SB),$8 - MOVW $setR12(SB), R12 /* load the SB */ - MOVW $boot(SB), R0 - - ADD $12, R13, R1 /* get a pointer to 0(FP) */ - - MOVW R0, 4(R13) - MOVW R1, 8(R13) - - BL startboot(SB) - - diff --git a/sys/src/9/bitsy/io.h b/sys/src/9/bitsy/io.h deleted file mode 100644 index bedfdf0a7..000000000 --- a/sys/src/9/bitsy/io.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Definitions for IO devices. Used only in C. - */ - -enum -{ - /* hardware counter frequency */ - ClockFreq= 3686400, -}; - -/* - * IRQ's defined by SA1100 - */ -enum -{ - IRQgpio0= 0, - IRQgpio1= 1, - IRQgpio2= 2, - IRQgpio3= 3, - IRQgpio4= 4, - IRQgpio5= 5, - IRQgpio6= 6, - IRQgpio7= 7, - IRQgpio8= 8, - IRQgpio9= 9, - IRQgpio10= 10, - IRQgpiohi= 11, - IRQlcd= 12, - IRQudc= 13, - IRQuart1b= 15, - IRQuart2= 16, - IRQuart3= 17, - IRQmcp= 18, - IRQssp= 19, - IRQdma0= 20, - IRQdma1= 21, - IRQdma2= 22, - IRQdma3= 23, - IRQdma4= 24, - IRQdma5= 25, - IRQtimer0= 26, - IRQtimer1= 27, - IRQtimer2= 28, - IRQtimer3= 29, - IRQsecond= 30, - IRQrtc= 31, -}; - -/* - * GPIO lines (signal names from compaq document). _i indicates input - * and _o output. - */ -enum -{ - GPIO_PWR_ON_i= 1<<0, /* power button */ - GPIO_UP_IRQ_i= 1<<1, /* microcontroller interrupts */ - GPIO_LDD8_o= 1<<2, /* LCD data 8-15 */ - GPIO_LDD9_o= 1<<3, - GPIO_LDD10_o= 1<<4, - GPIO_LDD11_o= 1<<5, - GPIO_LDD12_o= 1<<6, - GPIO_LDD13_o= 1<<7, - GPIO_LDD14_o= 1<<8, - GPIO_LDD15_o= 1<<9, - GPIO_CARD_IND1_i= 1<<10, /* card inserted in PCMCIA socket 1 */ - GPIO_CARD_IRQ1_i= 1<<11, /* PCMCIA socket 1 interrupt */ - GPIO_CLK_SET0_o= 1<<12, /* clock selects for audio codec */ - GPIO_CLK_SET1_o= 1<<13, - GPIO_L3_SDA_io= 1<<14, /* UDA1341 interface */ - GPIO_L3_MODE_o= 1<<15, - GPIO_L3_SCLK_o= 1<<16, - GPIO_CARD_IND0_i= 1<<17, /* card inserted in PCMCIA socket 0 */ - GPIO_KEY_ACT_i= 1<<18, /* hot key from cradle */ - GPIO_SYS_CLK_i= 1<<19, /* clock from codec */ - GPIO_BAT_FAULT_i= 1<<20, /* battery fault */ - GPIO_CARD_IRQ0_i= 1<<21, /* PCMCIA socket 0 interrupt */ - GPIO_LOCK_i= 1<<22, /* expansion pack lock/unlock */ - GPIO_COM_DCD_i= 1<<23, /* DCD from UART3 */ - GPIO_OPT_IRQ_i= 1<<24, /* expansion pack IRQ */ - GPIO_COM_CTS_i= 1<<25, /* CTS from UART3 */ - GPIO_COM_RTS_o= 1<<26, /* RTS to UART3 */ - GPIO_OPT_IND_i= 1<<27, /* expansion pack inserted */ - -/* Peripheral Unit GPIO pin assignments: alternate functions */ - GPIO_SSP_TXD_o= 1<<10, /* SSP Transmit Data */ - GPIO_SSP_RXD_i= 1<<11, /* SSP Receive Data */ - GPIO_SSP_SCLK_o= 1<<12, /* SSP Sample CLocK */ - GPIO_SSP_SFRM_o= 1<<13, /* SSP Sample FRaMe */ - /* ser. port 1: */ - GPIO_UART_TXD_o= 1<<14, /* UART Transmit Data */ - GPIO_UART_RXD_i= 1<<15, /* UART Receive Data */ - GPIO_SDLC_SCLK_io= 1<<16, /* SDLC Sample CLocK (I/O) */ - GPIO_SDLC_AAF_o= 1<<17, /* SDLC Abort After Frame */ - GPIO_UART_SCLK1_i= 1<<18, /* UART Sample CLocK 1 */ - /* ser. port 4: */ - GPIO_SSP_CLK_i= 1<<19, /* SSP external CLocK */ - /* ser. port 3: */ - GPIO_UART_SCLK3_i= 1<<20, /* UART Sample CLocK 3 */ - /* ser. port 4: */ - GPIO_MCP_CLK_i= 1<<21, /* MCP CLocK */ - /* test controller: */ - GPIO_TIC_ACK_o= 1<<21, /* TIC ACKnowledge */ - GPIO_MBGNT_o= 1<<21, /* Memory Bus GraNT */ - GPIO_TREQA_i= 1<<22, /* TIC REQuest A */ - GPIO_MBREQ_i= 1<<22, /* Memory Bus REQuest */ - GPIO_TREQB_i= 1<<23, /* TIC REQuest B */ - GPIO_1Hz_o= 1<<25, /* 1 Hz clock */ - GPIO_RCLK_o= 1<<26, /* internal (R) CLocK (O, fcpu/2) */ - GPIO_32_768kHz_o= 1<<27, /* 32.768 kHz clock (O, RTC) */ -}; - -/* - * types of interrupts - */ -enum -{ - GPIOrising, - GPIOfalling, - GPIOboth, - IRQ, -}; - -/* hardware registers */ -typedef struct Uartregs Uartregs; -struct Uartregs -{ - ulong ctl[4]; - ulong dummya; - ulong data; - ulong dummyb; - ulong status[2]; -}; -extern Uartregs *uart3regs; -extern Uartregs *uart1regs; - -/* general purpose I/O lines control registers */ -typedef struct GPIOregs GPIOregs; -struct GPIOregs -{ - ulong level; /* 1 == high */ - ulong direction; /* 1 == output */ - ulong set; /* a 1 sets the bit, 0 leaves it alone */ - ulong clear; /* a 1 clears the bit, 0 leaves it alone */ - ulong rising; /* rising edge detect enable */ - ulong falling; /* falling edge detect enable */ - ulong edgestatus; /* writing a 1 bit clears */ - ulong altfunc; /* turn on alternate function for any set bits */ -}; - -extern GPIOregs *gpioregs; - -/* extra general purpose I/O bits, output only */ -enum -{ - EGPIO_prog_flash= 1<<0, - EGPIO_pcmcia_reset= 1<<1, - EGPIO_exppack_reset= 1<<2, - EGPIO_codec_reset= 1<<3, - EGPIO_exp_nvram_power= 1<<4, - EGPIO_exp_full_power= 1<<5, - EGPIO_lcd_3v= 1<<6, - EGPIO_rs232_power= 1<<7, - EGPIO_lcd_ic_power= 1<<8, - EGPIO_ir_power= 1<<9, - EGPIO_audio_power= 1<<10, - EGPIO_audio_ic_power= 1<<11, - EGPIO_audio_mute= 1<<12, - EGPIO_fir= 1<<13, /* not set is sir */ - EGPIO_lcd_5v= 1<<14, - EGPIO_lcd_9v= 1<<15, -}; -extern ulong *egpioreg; - -/* Peripheral pin controller registers */ -typedef struct PPCregs PPCregs; -struct PPCregs { - ulong direction; - ulong state; - ulong assignment; - ulong sleepdir; - ulong flags; -}; -extern PPCregs *ppcregs; - -/* Synchronous Serial Port controller registers */ -typedef struct SSPregs SSPregs; -struct SSPregs { - ulong control0; - ulong control1; - ulong dummy0; - ulong data; - ulong dummy1; - ulong status; -}; -extern SSPregs *sspregs; - -/* Multimedia Communications Port controller registers */ -typedef struct MCPregs MCPregs; -struct MCPregs { - ulong control0; - ulong reserved0; - ulong data0; - ulong data1; - ulong data2; - ulong reserved1; - ulong status; - ulong reserved[11]; - ulong control1; -}; -extern MCPregs *mcpregs; - -/* - * memory configuration - */ -enum -{ - /* bit shifts for pcmcia access time counters */ - MECR_io0= 0, - MECR_attr0= 5, - MECR_mem0= 10, - MECR_fast0= 11, - MECR_io1= MECR_io0+16, - MECR_attr1= MECR_attr0+16, - MECR_mem1= MECR_mem0+16, - MECR_fast1= MECR_fast0+16, - - REFR_kapd= 29, - REFR_eapd= 28, - REFR_k1db2= 22, - REFR_slfrsh= 31, -}; - -typedef struct MemConfRegs MemConfRegs; -struct MemConfRegs -{ - ulong mdcnfg; /* 0x00 dram */ - ulong mdcas00; /* 0x04 dram banks 0/1 */ - ulong mdcas01; /* 0x08 */ - ulong mdcas02; /* 0x0c */ - ulong msc0; /* 0x10 static */ - ulong msc1; /* 0x14 */ - ulong mecr; /* 0x18 pcmcia */ - ulong mdrefr; /* 0x1c dram refresh */ - ulong mdcas20; /* 0x20 dram banks 2/3 */ - ulong mdcas21; /* 0x24 */ - ulong mdcas22; /* 0x28 */ - ulong msc2; /* 0x2c static */ - ulong smcnfg; /* 0x30 SMROM config */ -}; -extern MemConfRegs *memconfregs; - -/* - * power management - */ - -/* Power management ops */ - -typedef struct PowerRegs PowerRegs; -struct PowerRegs -{ - ulong pmcr; /* 0x0 Power manager control register */ - ulong pssr; /* 0x4 Power manager sleep status register */ - ulong pspr; /* 0x8 Power manager scratch pad register */ - ulong pwer; /* 0xc Power manager wakeup enable register */ - ulong pcfr; /* 0x10 Power manager general configuration register */ - ulong ppcr; /* 0x14 Power manager PPL configuration register */ - ulong pgsr; /* 0x18 Power manager GPIO sleep state register */ - ulong posr; /* 0x1c Power manager oscillator status register */ -}; -extern PowerRegs *powerregs; - -/* - * reset controller - */ - -enum -{ - RCSR_hwr = 0x00000001, /* hw reset */ - RCSR_swr = 0x00000002, /* sw reset */ - RCSR_wdr = 0x00000004, /* watch dog */ - RCSR_smr = 0x00000008, /* sleep mode reset */ -}; - -typedef struct ResetRegs ResetRegs; -struct ResetRegs -{ - ulong rsrr; /* reset controller software reset register */ - ulong rcsr; /* reset controller status register */ -}; -extern ResetRegs *resetregs; - -typedef struct OSTimerRegs OSTimerRegs; -struct OSTimerRegs -{ - ulong osmr[4]; /* match registers */ - ulong oscr; /* counter register */ - ulong ossr; /* status register */ - ulong ower; /* watchdog enable register */ - ulong oier; /* timer interrupt enable register */ -}; -extern OSTimerRegs* timerregs; - -typedef struct Intrregs Intrregs; -struct Intrregs -{ - ulong icip; /* pending IRQs */ - ulong icmr; /* IRQ mask */ - ulong iclr; /* IRQ if bit == 0, FRIQ if 1 */ - ulong iccr; /* control register */ - ulong icfp; /* pending FIQs */ - ulong dummy1[3]; - ulong icpr; /* pending interrupts */ -}; -extern Intrregs *intrregs; - -typedef struct Gpclkregs Gpclkregs; -struct Gpclkregs -{ - ulong r0; - ulong r1; - ulong dummya; - ulong r2; - ulong r3; -}; -extern Gpclkregs *gpclkregs; - -/* - * Dont use this on bitsy drivers. - * This is for compat with code compiled - * from the ../pc directory - */ - -typedef struct Pcidev Pcidev; -typedef struct ISAConf ISAConf; -struct Pcidev { int dummy; }; -struct ISAConf{ int port; int irq; }; -int pcmspecial(char*, ISAConf*); diff --git a/sys/src/9/bitsy/l.s b/sys/src/9/bitsy/l.s deleted file mode 100644 index e533b9caa..000000000 --- a/sys/src/9/bitsy/l.s +++ /dev/null @@ -1,857 +0,0 @@ -#include "mem.h" - -/* - * Entered here from Compaq's bootldr with MMU disabled. - */ -TEXT _start(SB), $-4 - MOVW $setR12(SB), R12 /* load the SB */ -_main: - /* SVC mode, interrupts disabled */ - MOVW $(PsrDirq|PsrDfiq|PsrMsvc), R1 - MOVW R1, CPSR - - /* disable the MMU */ - MOVW $0x130, R1 - MCR CpMMU, 0, R1, C(CpControl), C(0x0) - - /* flush caches */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0x7), 0 - /* drain prefetch */ - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - - /* drain write buffer */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 4 - - MOVW $(MACHADDR+4*BY2PG), R13 /* stack */ - SUB $4, R13 /* link */ - BL main(SB) - BL exit(SB) - /* we shouldn't get here */ -_mainloop: - B _mainloop - BL _div(SB) /* hack to get _div etc loaded */ - -/* flush tlb's */ -TEXT mmuinvalidate(SB), $-4 - MCR CpMMU, 0, R0, C(CpTLBFlush), C(0x7) - RET - -/* flush tlb's */ -TEXT mmuinvalidateaddr(SB), $-4 - MCR CpMMU, 0, R0, C(CpTLBFlush), C(0x6), 1 - RET - -/* write back and invalidate i and d caches */ -TEXT cacheflush(SB), $-4 - /* splhi */ - MOVW CPSR, R3 - ORR $(PsrDirq), R3, R1 - MOVW R1, CPSR - - /* write back any dirty data */ - MOVW $0xe0000000,R0 - ADD $(8*1024),R0,R1 -_cfloop: - MOVW.P 32(R0),R2 - CMP.S R0,R1 - BGE _cfloop - - /* drain write buffer and invalidate i cache contents */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 4 - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0x5), 0 - - /* drain prefetch */ - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - - /* splx */ - MOVW R3, CPSR - RET - -/* write back d cache */ -TEXT cachewb(SB), $-4 - /* write back any dirty data */ -_cachewb: - MOVW $0xe0000000,R0 - ADD $(8*1024),R0,R1 -_cwbloop: - MOVW.P 32(R0),R2 - CMP.S R0,R1 - BGE _cwbloop - - /* drain write buffer */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 4 - RET - -/* write back a single cache line */ -TEXT cachewbaddr(SB), $-4 - BIC $31,R0 - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 1 - B _wbflush - -/* write back a region of cache lines */ -TEXT cachewbregion(SB), $-4 - MOVW 4(FP),R1 - CMP.S $(4*1024),R1 - BGT _cachewb - ADD R0,R1 - BIC $31,R0 -_cwbrloop: - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 1 - ADD $32,R0 - CMP.S R0,R1 - BGT _cwbrloop - B _wbflush - -/* invalidate the dcache */ -TEXT dcacheinvalidate(SB), $-4 - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0x6) - RET - -/* invalidate the icache */ -TEXT icacheinvalidate(SB), $-4 - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0x9) - RET - -/* drain write buffer */ -TEXT wbflush(SB), $-4 -_wbflush: - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 4 - RET - -/* return cpu id */ -TEXT getcpuid(SB), $-4 - MRC CpMMU, 0, R0, C(CpCPUID), C(0x0) - RET - -/* return fault status */ -TEXT getfsr(SB), $-4 - MRC CpMMU, 0, R0, C(CpFSR), C(0x0) - RET - -/* return mmu control register */ -TEXT getcontrol(SB), $-4 - SUB R0, R0 - MRC CpMMU, 0, R0, C(CpControl), C(0x0) - RET - -/* return mmu dac register */ -TEXT getdac(SB), $-4 - SUB R0, R0 - MRC CpMMU, 0, R0, C(CpDAC), C(0x0) - RET - -/* return mmu ttb register */ -TEXT getttb(SB), $-4 - SUB R0, R0 - MRC CpMMU, 0, R0, C(CpTTB), C(0x0) - RET - -/* return fault address */ -TEXT getfar(SB), $-4 - MRC CpMMU, 0, R0, C(CpFAR), C(0x0) - RET - -/* set the translation table base */ -TEXT putttb(SB), $-4 - MCR CpMMU, 0, R0, C(CpTTB), C(0x0) - RET - -/* - * enable mmu, i and d caches - */ -TEXT mmuenable(SB), $-4 - MRC CpMMU, 0, R0, C(CpControl), C(0x0) - ORR $(CpCmmuena|CpCdcache|CpCicache|CpCwb|CpCsystem), R0 - BIC $(CpCrom), R0 - MCR CpMMU, 0, R0, C(CpControl), C(0x0) - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - RET - -TEXT mmudisable(SB), $-4 - MRC CpMMU, 0, R0, C(CpControl), C(0x0) - BIC $(CpCmmuena|CpCdcache|CpCicache|CpCwb|CpCvivec), R0 - MCR CpMMU, 0, R0, C(CpControl), C(0x0) - RET - -/* - * use exception vectors at 0xffff0000 - */ -TEXT mappedIvecEnable(SB), $-4 - MRC CpMMU, 0, R0, C(CpControl), C(0x0) - ORR $(CpCvivec), R0 - MCR CpMMU, 0, R0, C(CpControl), C(0x0) - RET -TEXT mappedIvecDisable(SB), $-4 - MRC CpMMU, 0, R0, C(CpControl), C(0x0) - BIC $(CpCvivec), R0 - MCR CpMMU, 0, R0, C(CpControl), C(0x0) - RET - -/* set the translation table base */ -TEXT putdac(SB), $-4 - MCR CpMMU, 0, R0, C(CpDAC), C(0x0) - RET - -/* set address translation pid */ -TEXT putpid(SB), $-4 - MCR CpMMU, 0, R0, C(CpPID), C(0x0) - RET - -/* - * set the stack value for the mode passed in R0 - */ -TEXT setr13(SB), $-4 - MOVW 4(FP), R1 - - MOVW CPSR, R2 - BIC $PsrMask, R2, R3 - ORR R0, R3 - MOVW R3, CPSR - - MOVW R13, R0 - MOVW R1, R13 - - MOVW R2, CPSR - RET - -/* - * exception vectors, copied by trapinit() to somewhere useful - */ - -TEXT vectors(SB), $-4 - MOVW 0x18(R15), R15 /* reset */ - MOVW 0x18(R15), R15 /* undefined */ - MOVW 0x18(R15), R15 /* SWI */ - MOVW 0x18(R15), R15 /* prefetch abort */ - MOVW 0x18(R15), R15 /* data abort */ - MOVW 0x18(R15), R15 /* reserved */ - MOVW 0x18(R15), R15 /* IRQ */ - MOVW 0x18(R15), R15 /* FIQ */ - -TEXT vtable(SB), $-4 - WORD $_vsvc(SB) /* reset, in svc mode already */ - WORD $_vund(SB) /* undefined, switch to svc mode */ - WORD $_vsvc(SB) /* swi, in svc mode already */ - WORD $_vpabt(SB) /* prefetch abort, switch to svc mode */ - WORD $_vdabt(SB) /* data abort, switch to svc mode */ - WORD $_vsvc(SB) /* reserved */ - WORD $_virq(SB) /* IRQ, switch to svc mode */ - WORD $_vfiq(SB) /* FIQ, switch to svc mode */ - -TEXT _vrst(SB), $-4 - BL resettrap(SB) - -TEXT _vsvc(SB), $-4 /* SWI */ - MOVW.W R14, -4(R13) /* ureg->pc = interupted PC */ - MOVW SPSR, R14 /* ureg->psr = SPSR */ - MOVW.W R14, -4(R13) /* ... */ - MOVW $PsrMsvc, R14 /* ureg->type = PsrMsvc */ - MOVW.W R14, -4(R13) /* ... */ - MOVM.DB.W.S [R0-R14], (R13) /* save user level registers, at end r13 points to ureg */ - MOVW $setR12(SB), R12 /* Make sure we've got the kernel's SB loaded */ - MOVW R13, R0 /* first arg is pointer to ureg */ - SUB $8, R13 /* space for argument+link */ - - BL syscall(SB) - - ADD $(8+4*15), R13 /* make r13 point to ureg->type */ - MOVW 8(R13), R14 /* restore link */ - MOVW 4(R13), R0 /* restore SPSR */ - MOVW R0, SPSR /* ... */ - MOVM.DB.S (R13), [R0-R14] /* restore registers */ - ADD $8, R13 /* pop past ureg->{type+psr} */ - RFE /* MOVM.IA.S.W (R13), [R15] */ - -TEXT _vund(SB), $-4 /* undefined */ - MOVM.IA [R0-R4], (R13) /* free some working space */ - MOVW $PsrMund, R0 - B _vswitch - -TEXT _vpabt(SB), $-4 /* prefetch abort */ - MOVM.IA [R0-R4], (R13) /* free some working space */ - MOVW $PsrMabt, R0 /* r0 = type */ - B _vswitch - -TEXT _vdabt(SB), $-4 /* prefetch abort */ - MOVM.IA [R0-R4], (R13) /* free some working space */ - MOVW $(PsrMabt+1), R0 /* r0 = type */ - B _vswitch - -TEXT _virq(SB), $-4 /* IRQ */ - MOVM.IA [R0-R4], (R13) /* free some working space */ - MOVW $PsrMirq, R0 /* r0 = type */ - B _vswitch - - /* - * come here with type in R0 and R13 pointing above saved [r0-r4] - * and type in r0. we'll switch to SVC mode and then call trap. - */ -_vswitch: - MOVW SPSR, R1 /* save SPSR for ureg */ - MOVW R14, R2 /* save interrupted pc for ureg */ - MOVW R13, R3 /* save pointer to where the original [R0-R3] are */ - - /* switch to svc mode */ - MOVW CPSR, R14 - BIC $PsrMask, R14 - ORR $(PsrDirq|PsrDfiq|PsrMsvc), R14 - MOVW R14, CPSR - - /* interupted code kernel or user? */ - AND.S $0xf, R1, R4 - BEQ _userexcep - - /* here for trap from SVC mode */ - MOVM.DB.W [R0-R2], (R13) /* set ureg->{type, psr, pc}; r13 points to ureg->type */ - MOVM.IA (R3), [R0-R4] /* restore [R0-R4] from previous mode's stack */ - MOVM.DB.W [R0-R14], (R13) /* save kernel level registers, at end r13 points to ureg */ - MOVW $setR12(SB), R12 /* Make sure we've got the kernel's SB loaded */ - MOVW R13, R0 /* first arg is pointer to ureg */ - SUB $8, R13 /* space for argument+link (for debugger) */ - MOVW $0xdeaddead,R11 /* marker */ - - BL trap(SB) - - ADD $(8+4*15), R13 /* make r13 point to ureg->type */ - MOVW 8(R13), R14 /* restore link */ - MOVW 4(R13), R0 /* restore SPSR */ - MOVW R0, SPSR /* ... */ - MOVM.DB (R13), [R0-R14] /* restore registers */ - ADD $8, R13 /* pop past ureg->{type+psr} */ - RFE /* MOVM.IA.S.W (R13), [R15] */ - - /* here for trap from USER mode */ -_userexcep: - MOVM.DB.W [R0-R2], (R13) /* set ureg->{type, psr, pc}; r13 points to ureg->type */ - MOVM.IA (R3), [R0-R4] /* restore [R0-R4] from previous mode's stack */ - MOVM.DB.W.S [R0-R14], (R13) /* save kernel level registers, at end r13 points to ureg */ - MOVW $setR12(SB), R12 /* Make sure we've got the kernel's SB loaded */ - MOVW R13, R0 /* first arg is pointer to ureg */ - SUB $8, R13 /* space for argument+link (for debugger) */ - - BL trap(SB) - - ADD $(8+4*15), R13 /* make r13 point to ureg->type */ - MOVW 8(R13), R14 /* restore link */ - MOVW 4(R13), R0 /* restore SPSR */ - MOVW R0, SPSR /* ... */ - MOVM.DB.S (R13), [R0-R14] /* restore registers */ - ADD $8, R13 /* pop past ureg->{type+psr} */ - RFE /* MOVM.IA.S.W (R13), [R15] */ - -TEXT _vfiq(SB), $-4 /* FIQ */ - RFE /* FIQ is special, ignore it for now */ - -/* - * This is the first jump from kernel to user mode. - * Fake a return from interrupt. - * - * Enter with R0 containing the user stack pointer. - * UTZERO + 0x20 is always the entry point. - * - */ -TEXT touser(SB),$-4 - /* store the user stack pointer into the USR_r13 */ - MOVM.DB.W [R0], (R13) - MOVM.S.IA.W (R13),[R13] - - /* set up a PSR for user level */ - MOVW $(PsrMusr), R0 - MOVW R0,SPSR - - /* save the PC on the stack */ - MOVW $(UTZERO+0x20), R0 - MOVM.DB.W [R0],(R13) - - /* return from interrupt */ - RFE /* MOVM.IA.S.W (R13), [R15] */ - -/* - * here to jump to a newly forked process - */ -TEXT forkret(SB),$-4 - ADD $(4*15), R13 /* make r13 point to ureg->type */ - MOVW 8(R13), R14 /* restore link */ - MOVW 4(R13), R0 /* restore SPSR */ - MOVW R0, SPSR /* ... */ - MOVM.DB.S (R13), [R0-R14] /* restore registers */ - ADD $8, R13 /* pop past ureg->{type+psr} */ - RFE /* MOVM.IA.S.W (R13), [R15] */ - -TEXT splhi(SB), $-4 - /* save caller pc in Mach */ - MOVW $(MACHADDR+0x04),R2 - MOVW R14,0(R2) - /* turn off interrupts */ - MOVW CPSR, R0 - ORR $(PsrDirq), R0, R1 - MOVW R1, CPSR - RET - -TEXT spllo(SB), $-4 - MOVW CPSR, R0 - BIC $(PsrDirq), R0, R1 - MOVW R1, CPSR - RET - -TEXT splx(SB), $-4 - /* save caller pc in Mach */ - MOVW $(MACHADDR+0x04),R2 - MOVW R14,0(R2) - /* reset interrupt level */ - MOVW R0, R1 - MOVW CPSR, R0 - MOVW R1, CPSR - RET - -TEXT splxpc(SB), $-4 /* for iunlock */ - MOVW R0, R1 - MOVW CPSR, R0 - MOVW R1, CPSR - RET - -TEXT spldone(SB), $0 - RET - -TEXT islo(SB), $-4 - MOVW CPSR, R0 - AND $(PsrDirq), R0 - EOR $(PsrDirq), R0 - RET - -TEXT cpsrr(SB), $-4 - MOVW CPSR, R0 - RET - -TEXT spsrr(SB), $-4 - MOVW SPSR, R0 - RET - -TEXT getsp(SB), $-4 - MOVW R13, R0 - RET - -TEXT getlink(SB), $-4 - MOVW R14, R0 - RET - -TEXT getcallerpc(SB), $-4 - MOVW 0(R13), R0 - RET - -TEXT tas(SB), $-4 -TEXT _tas(SB), $-4 - MOVW R0, R1 - MOVW $0xDEADDEAD, R0 - MOVW R0, R3 - SWPW R0, (R1) - CMP.S R0, R3 - BEQ _tasout - EOR R3, R3 - CMP.S R0, R3 - BEQ _tasout - MOVW $1,R15 -_tasout: - RET - -TEXT setlabel(SB), $-4 - MOVW R13, 0(R0) /* sp */ - MOVW R14, 4(R0) /* pc */ - MOVW $0, R0 - RET - -TEXT gotolabel(SB), $-4 - MOVW 0(R0), R13 /* sp */ - MOVW 4(R0), R14 /* pc */ - MOVW $1, R0 - RET - -/* save the state machine in power_state[] for an upcoming suspend - */ -TEXT setpowerlabel(SB), $-4 - MOVW $power_state+0(SB), R0 - /* svc */ /* power_state[]: what */ - MOVW R1, 0(R0) - MOVW R2, 4(R0) - MOVW R3, 8(R0) - MOVW R4, 12(R0) - MOVW R5, 16(R0) - MOVW R6, 20(R0) - MOVW R7, 24(R0) - MOVW R8, 28(R0) - MOVW R9, 32(R0) - MOVW R10,36(R0) - MOVW R11,40(R0) - MOVW R12,44(R0) - MOVW R13,48(R0) - MOVW R14,52(R0) - MOVW SPSR, R1 - MOVW R1, 56(R0) - MOVW CPSR, R2 - MOVW R2, 60(R0) - /* copro */ - MRC CpMMU, 0, R3, C(CpDAC), C(0x0) - MOVW R3, 144(R0) - MRC CpMMU, 0, R3, C(CpTTB), C(0x0) - MOVW R3, 148(R0) - MRC CpMMU, 0, R3, C(CpControl), C(0x0) - MOVW R3, 152(R0) - MRC CpMMU, 0, R3, C(CpFSR), C(0x0) - MOVW R3, 156(R0) - MRC CpMMU, 0, R3, C(CpFAR), C(0x0) - MOVW R3, 160(R0) - MRC CpMMU, 0, R3, C(CpPID), C(0x0) - MOVW R3, 164(R0) - /* usr */ - BIC $(PsrMask), R2, R3 - ORR $(0xdf), R3 - MOVW R3, CPSR - MOVW SPSR, R11 - MOVW R11, 168(R0) - MOVW R12, 172(R0) - MOVW R13, 176(R0) - MOVW R14, 180(R0) - /* irq */ - BIC $(PsrMask), R2, R3 - ORR $(0xd2), R3 - MOVW R3, CPSR - MOVW SPSR, R11 - MOVW R11, 64(R0) - MOVW R12, 68(R0) - MOVW R13, 72(R0) - MOVW R14, 76(R0) - /* und */ - BIC $(PsrMask), R2, R3 - ORR $(0xdb), R3 - MOVW R3, CPSR - MOVW SPSR, R11 - MOVW R11, 80(R0) - MOVW R12, 84(R0) - MOVW R13, 88(R0) - MOVW R14, 92(R0) - /* abt */ - BIC $(PsrMask), R2, R3 - ORR $(0xd7), R3 - MOVW R3, CPSR - MOVW SPSR, R11 - MOVW R11, 96(R0) - MOVW R12, 100(R0) - MOVW R13, 104(R0) - MOVW R14, 108(R0) - /* fiq */ - BIC $(PsrMask), R2, R3 - ORR $(0xd1), R3 - MOVW R3, CPSR - MOVW SPSR, R7 - MOVW R7, 112(R0) - MOVW R8, 116(R0) - MOVW R9, 120(R0) - MOVW R10,124(R0) - MOVW R11,128(R0) - MOVW R12,132(R0) - MOVW R13,136(R0) - MOVW R14,140(R0) - /* done */ - MOVW R2, CPSR - MOVW R1, SPSR - MOVW $0, R0 - RET - -/* Entered after a resume from suspend state. - * The bootldr jumps here after a processor reset. - */ -TEXT power_resume(SB), $-4 - MOVW $setR12(SB), R12 /* load the SB */ - /* SVC mode, interrupts disabled */ - MOVW $(PsrDirq|PsrDfiq|PsrMsvc), R1 - MOVW R1, CPSR - /* gotopowerlabel() */ - /* svc */ - - MOVW $power_state+0(SB), R0 - MOVW 56(R0), R1 /* R1: SPSR, R2: CPSR */ - MOVW 60(R0), R2 - MOVW R1, SPSR - MOVW R2, CPSR - /* copro */ - /* flush caches */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0x7), 0 - /* drain prefetch */ - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - /* drain write buffer */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0xa), 4 - MCR CpMMU, 0, R0, C(CpTLBFlush), C(0x7) - MOVW 144(R0), R3 - MCR CpMMU, 0, R3, C(CpDAC), C(0x0) - MOVW 148(R0), R3 - MCR CpMMU, 0, R3, C(CpTTB), C(0x0) - MOVW 156(R0), R3 - MCR CpMMU, 0, R3, C(CpFSR), C(0x0) - MOVW 160(R0), R3 - MCR CpMMU, 0, R3, C(CpFAR), C(0x0) - MOVW 164(R0), R3 - MCR CpMMU, 0, R3, C(CpPID), C(0x0) - MOVW 152(R0), R3 - MCR CpMMU, 0, R3, C(CpControl), C(0x0) /* Enable cache */ - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - /* flush i&d caches */ - MCR CpMMU, 0, R0, C(CpCacheFlush), C(0x7), 0 - /* flush tlb */ - MCR CpMMU, 0, R0, C(CpTLBFlush), C(0x7), 0 - /* drain prefetch */ - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - /* usr */ - BIC $(PsrMask), R2, R3 - ORR $(0xdf), R3 - MOVW 168(R0), R11 - MOVW 172(R0), R12 - MOVW 176(R0), R13 - MOVW 180(R0), R14 - MOVW R11, SPSR - /* irq */ - BIC $(PsrMask), R2, R3 - ORR $(0xd2), R3 - MOVW R3, CPSR - MOVW 64(R0), R11 - MOVW 68(R0), R12 - MOVW 72(R0), R13 - MOVW 76(R0), R14 - MOVW R11, SPSR - /* und */ - BIC $(PsrMask), R2, R3 - ORR $(0xdb), R3 - MOVW R3, CPSR - MOVW 80(R0), R11 - MOVW 84(R0), R12 - MOVW 88(R0), R13 - MOVW 92(R0), R14 - MOVW R11, SPSR - /* abt */ - BIC $(PsrMask), R2, R3 - ORR $(0xd7), R3 - MOVW R3, CPSR - MOVW 96(R0), R11 - MOVW 100(R0), R12 - MOVW 104(R0), R13 - MOVW 108(R0), R14 - MOVW R11, SPSR - /* fiq */ - BIC $(PsrMask), R2, R3 - ORR $(0xd1), R3 - MOVW R3, CPSR - MOVW 112(R0), R7 - MOVW 116(R0), R8 - MOVW 120(R0), R9 - MOVW 124(R0), R10 - MOVW 128(R0), R11 - MOVW 132(R0), R12 - MOVW 136(R0), R13 - MOVW 140(R0), R14 - MOVW R7, SPSR - /* svc */ - MOVW 56(R0), R1 - MOVW 60(R0), R2 - MOVW R1, SPSR - MOVW R2, CPSR - MOVW 0(R0), R1 - MOVW 4(R0), R2 - MOVW 8(R0), R3 - MOVW 12(R0),R4 - MOVW 16(R0),R5 - MOVW 20(R0),R6 - MOVW 24(R0),R7 - MOVW 28(R0),R8 - MOVW 32(R0),R9 - MOVW 36(R0),R10 - MOVW 40(R0),R11 - MOVW 44(R0),R12 - MOVW 48(R0),R13 - MOVW 52(R0),R14 - RET -loop: - B loop - -TEXT power_down(SB), $-4 - - TEXT sa1100_power_off<>+0(SB),$8 - MOVW resetregs+0(SB),R7 - MOVW gpioregs+0(SB),R6 - MOVW memconfregs+0(SB),R5 - MOVW powerregs+0(SB),R3 - - - /* wakeup on power | rtc */ - MOVW $(PWR_rtc|PWR_gpio0),R2 - MOVW R2,0xc(R3) - - /* clear reset status */ - MOVW $(RCSR_all), R2 - MOVW R2, 0x4(R7) - /* float */ - MOVW $(PCFR_opde|PCFR_fp|PCFR_fs), R2 - MOVW R2,0x10(R3) - /* sleep state */ - MOVW $0,R2 - MOVW R2,0x18(R3) - /* set resume address (pspr)*/ - MOVW $resumeaddr+0(SB),R1 - MOVW 0x0(R1), R2 - MOVW R2,0x8(R3) - - BL cacheflush(SB) - - /* disable clock switching */ - MCR CpPWR, 0, R1, C(CpTest), C(0x2), 2 - - /* adjust mem timing */ - MOVW memconfregs+0(SB),R5 - MOVW 0x1c(R5), R2 - ORR $(MDREFR_k1db2), R2 - MOVW R2, 0x1c(R5) - - /* set PLL to lower speed w/ delay (ppcr = 0)*/ - MOVW powerregs+0(SB),R3 - MOVW $(120*206),R0 -l11: SUB $1,R0 - BGT l11 - MOVW $0, R2 - MOVW R2, 0x14(R3) - MOVW $(120*206),R0 -l12: SUB $1,R0 - BGT l12 - - /* setup registers for suspend procedure: - * 1. clear RT in mscx (R1, R7, R8) - * 2. clear DRI in mdrefr (R4) - * 3. set slfrsh in mdrefr (R6) - * 4. clear DE in mdcnfg (R9) - * 5. clear dram refresh (R10) - * 6. force sleep (R2) - */ - /* 1 */ - MOVW 0x10(R5), R2 - BIC $(MSC_rt), R2 - MOVW R2, R1 - MOVW 0x14(R5), R2 - BIC $(MSC_rt), R2 - MOVW R2, R7 - MOVW 0x2c(R5), R2 - BIC $(MSC_rt), R2 - MOVW R2, R8 - /* 2 */ - MOVW 0x1c(R5), R2 - BIC $(0xff00), R2 - BIC $(0x00f0), R2 - MOVW R2, R4 - /* 3 */ - ORR $(MDREFR_slfrsh), R2, R6 - /* 4 */ - MOVW 0x0(R5), R9 - BIC $(MDCFNG_de), R9, R9 - /* 5 */ - MOVW R4, R2 - BIC $(MDREFR_slfrsh), R2, R2 - BIC $(MDREFR_e1pin), R2, R2 - MOVW R2, R10 - /* 6 */ - MOVW $1,R2 - -TEXT power_magic(SB), $-4 - /* power_code gets copied into the area of no-ops below, - * at a cache-line boundary (8 instructions) - */ - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - MOVW R0, R0 - -TEXT power_code(SB), $-4 - /* Follow the procedure; this code gets copied to the no-op - * area preceding this code - */ - /* 1 */ - MOVW R1, 0x10(R5) - MOVW R7, 0x14(R5) - MOVW R8, 0x2c(R5) - /* 2 */ - MOVW R4, 0x1c(R5) - /* 3 */ - MOVW R6, 0x1c(R5) - /* 4 */ - MOVW R9, 0x0(R5) - /* 5 */ - MOVW R10, 0x1c(R5) - /* 6 */ - MOVW R2, 0x0(R3) -slloop: - B slloop /* loop waiting for sleep */ - -/* The first MCR instruction of this function needs to be on a cache-line - * boundary; to make this happen, it will be copied to the first cache-line - * boundary 8 words from the start of doze. - * - * Doze puts the machine into idle mode. Any interrupt will get it out - * at the next instruction (the RET, to be precise). - */ -TEXT doze(SB), $-4 - MOVW $UCDRAMZERO, R1 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - MOVW R0,R0 - RET - -TEXT doze_code(SB), $-4 - MCR CpPWR, 0, R0, C(CpTest), C(0x2), 2 - MOVW (R1), R0 - MCR CpPWR, 0, R0, C(CpTest), C(0x8), 2 diff --git a/sys/src/9/bitsy/main.c b/sys/src/9/bitsy/main.c deleted file mode 100644 index b1e3c17c9..000000000 --- a/sys/src/9/bitsy/main.c +++ /dev/null @@ -1,536 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "init.h" -#include "pool.h" - -Mach *m; -Proc *up; -Conf conf; -int noprint; - -void -main(void) -{ - mmuinvalidate(); - - /* zero out bss */ - memset(edata, 0, end-edata); - - /* point to Mach structure */ - m = (Mach*)MACHADDR; - memset(m, 0, sizeof(Mach)); - m->ticks = 1; - - active.machs[0] = 1; - - rs232power(1); - quotefmtinstall(); - iprint("\nPlan 9 bitsy kernel\n"); - confinit(); - xinit(); - mmuinit(); - machinit(); - trapinit(); - sa1110_uartsetup(1); - dmainit(); - screeninit(); - printinit(); /* from here on, print works, before this we need iprint */ - clockinit(); - procinit0(); - initseg(); - links(); - chandevreset(); - pageinit(); - swapinit(); - userinit(); - powerinit(); - schedinit(); -} - -/* need to do better */ -void -reboot(void*, void*, ulong) -{ -} - - -/* - * exit kernel either on a panic or user request - */ -void -exit(int) -{ - void (*f)(void); - - cpushutdown(); - splhi(); - iprint("it's a wonderful day to die\n"); - cacheflush(); - mmuinvalidate(); - mmudisable(); - f = nil; - (*f)(); -} - -static uchar *sp; - -/* - * starting place for first process - */ -void -init0(void) -{ - up->nerrlab = 0; - - spllo(); - - /* - * These are o.k. because rootinit is null. - * Then early kproc's will have a root and dot. - */ - up->slash = namec("#/", Atodir, 0, 0); - pathclose(up->slash->path); - up->slash->path = newpath("/"); - up->dot = cclone(up->slash); - - chandevinit(); - - if(!waserror()){ - ksetenv("terminal", "bitsy", 0); - ksetenv("cputype", "arm", 0); - if(cpuserver) - ksetenv("service", "cpu", 0); - else - ksetenv("service", "terminal", 0); - poperror(); - } - kproc("alarm", alarmkproc, 0); - kproc("power", powerkproc, 0); - - touser(sp); -} - -/* - * pass boot arguments to /boot - */ -static uchar * -pusharg(char *p) -{ - int n; - - n = strlen(p)+1; - sp -= n; - memmove(sp, p, n); - return sp; -} -static void -bootargs(ulong base) -{ - int i, ac; - uchar *av[32]; - uchar *bootpath; - uchar **lsp; - - /* - * the sizeof(Sargs) is to make the validaddr check in - * trap.c's syscall() work even when we have less than the - * max number of args. - */ - sp = (uchar*)base + BY2PG - sizeof(Sargs); - - bootpath = pusharg("/boot/boot"); - ac = 0; - av[ac++] = pusharg("boot"); - - /* 4 byte word align stack */ - sp = (uchar*)((ulong)sp & ~3); - - /* build argc, argv on stack */ - sp -= (ac+1)*sizeof(sp); - lsp = (uchar**)sp; - for(i = 0; i < ac; i++) - *lsp++ = av[i] + ((USTKTOP - BY2PG) - base); - *lsp = 0; - - /* push argv onto stack */ - sp -= BY2WD; - lsp = (uchar**)sp; - *lsp = sp + BY2WD + ((USTKTOP - BY2PG) - base); - - /* push pointer to "/boot" */ - sp -= BY2WD; - lsp = (uchar**)sp; - *lsp = bootpath + ((USTKTOP - BY2PG) - base); - - /* leave space for where the initcode's caller's return PC would normally reside */ - sp -= BY2WD; - - /* relocate stack to user's virtual addresses */ - sp += (USTKTOP - BY2PG) - base; -} - -/* - * create the first process - */ -void -userinit(void) -{ - Proc *p; - Segment *s; - KMap *k; - Page *pg; - - /* no processes yet */ - up = nil; - - p = newproc(); - p->pgrp = newpgrp(); - p->egrp = smalloc(sizeof(Egrp)); - p->egrp->ref = 1; - p->fgrp = dupfgrp(nil); - p->rgrp = newrgrp(); - p->procmode = 0640; - - kstrdup(&eve, ""); - kstrdup(&p->text, "*init*"); - kstrdup(&p->user, eve); - - /* - * Kernel Stack - */ - p->sched.pc = (ulong)init0; - p->sched.sp = (ulong)p->kstack+KSTACK-(sizeof(Sargs)+BY2WD); - - /* - * User Stack - */ - s = newseg(SG_STACK, USTKTOP-USTKSIZE, USTKSIZE/BY2PG); - p->seg[SSEG] = s; - pg = newpage(1, 0, USTKTOP-BY2PG); - segpage(s, pg); - k = kmap(pg); - bootargs(VA(k)); - kunmap(k); - - /* - * Text - */ - s = newseg(SG_TEXT, UTZERO, 1); - p->seg[TSEG] = s; - pg = newpage(1, 0, UTZERO); - pg->txtflush = ~0; - segpage(s, pg); - k = kmap(s->map[0]->pages[0]); - memmove((ulong*)VA(k), initcode, sizeof initcode); - kunmap(k); - - ready(p); -} - -/* - * set mach dependent process state for a new process - */ -void -procsetup(Proc *p) -{ - p->fpstate = FPinit; -} - -void -procfork(Proc*) -{ -} - -/* - * Save the mach dependent part of the process state. - */ -void -procsave(Proc *p) -{ - USED(p); -} - -/* place holder */ -/* - * dummy since rdb is not included - */ -void -rdb(void) -{ -} - -/* - * probe the last location in a meg of memory, make sure it's not - * reflected into something else we've already found. - */ -int -probemem(ulong addr) -{ - int i; - ulong *p; - ulong a; - - addr += OneMeg - sizeof(ulong); - p = (ulong*)addr; - *p = addr; - for(i=0; i= conf.mem[i].base && ktop <= conf.mem[i].limit) - conf.mem[i].base = ktop; - - /* zero memory */ - memset((void*)conf.mem[i].base, 0, conf.mem[i].limit - conf.mem[i].base); - - conf.mem[i].npage = (conf.mem[i].limit - conf.mem[i].base)/BY2PG; - conf.npage += conf.mem[i].npage; - } - - if(conf.npage > 16*MB/BY2PG){ - conf.upages = (conf.npage*60)/100; - imagmem->minarena = 4*1024*1024; - }else - conf.upages = (conf.npage*40)/100; - conf.ialloc = ((conf.npage-conf.upages)/2)*BY2PG; - - /* only one processor */ - conf.nmach = 1; - - /* set up other configuration parameters */ - conf.nproc = 100; - conf.nswap = conf.npage*3; - conf.nswppo = 4096; - conf.nimage = 200; - - conf.monitor = 1; - - conf.copymode = 0; /* copy on write */ -} - -GPIOregs *gpioregs; -ulong *egpioreg = (ulong*)EGPIOREGS; -PPCregs *ppcregs; -MemConfRegs *memconfregs; -PowerRegs *powerregs; -ResetRegs *resetregs; - -/* - * configure the machine - */ -void -machinit(void) -{ - /* set direction of SA1110 io pins and select alternate functions for some */ - gpioregs = mapspecial(GPIOREGS, sizeof(GPIOregs)); - gpioregs->direction = - GPIO_LDD8_o|GPIO_LDD9_o|GPIO_LDD10_o|GPIO_LDD11_o - |GPIO_LDD12_o|GPIO_LDD13_o|GPIO_LDD14_o|GPIO_LDD15_o - |GPIO_CLK_SET0_o|GPIO_CLK_SET1_o - |GPIO_L3_SDA_io|GPIO_L3_MODE_o|GPIO_L3_SCLK_o - |GPIO_COM_RTS_o; - gpioregs->rising = 0; - gpioregs->falling = 0; - gpioregs->altfunc |= - GPIO_LDD8_o|GPIO_LDD9_o|GPIO_LDD10_o|GPIO_LDD11_o - |GPIO_LDD12_o|GPIO_LDD13_o|GPIO_LDD14_o|GPIO_LDD15_o - |GPIO_SSP_CLK_i; - - /* map in special H3650 io pins */ - egpioreg = mapspecial(EGPIOREGS, sizeof(ulong)); - - /* map in peripheral pin controller (ssp will need it) */ - ppcregs = mapspecial(PPCREGS, sizeof(PPCregs)); - - /* SA1110 power management */ - powerregs = mapspecial(POWERREGS, sizeof(PowerRegs)); - - /* memory configuraton */ - memconfregs = mapspecial(MEMCONFREGS, sizeof(MemConfRegs)); - - /* reset controller */ - resetregs = mapspecial(RESETREGS, sizeof(ResetRegs)); -} - - -/* - * manage egpio bits - */ -static ulong egpiosticky; - -void -egpiobits(ulong bits, int on) -{ - if(on) - egpiosticky |= bits; - else - egpiosticky &= ~bits; - *egpioreg = egpiosticky; -} - -void -rs232power(int on) -{ - egpiobits(EGPIO_rs232_power, on); - delay(50); -} - -void -audioamppower(int on) -{ - egpiobits(EGPIO_audio_power, on); - delay(50); -} - -void -audioicpower(int on) -{ - egpiobits(EGPIO_audio_ic_power, on); - delay(50); -} - -void -irpower(int on) -{ - egpiobits(EGPIO_ir_power, on); - delay(50); -} - -void -lcdpower(int on) -{ - egpiobits(EGPIO_lcd_3v|EGPIO_lcd_ic_power|EGPIO_lcd_5v|EGPIO_lcd_9v, on); - delay(50); -} - -void -flashprogpower(int on) -{ - egpiobits(EGPIO_prog_flash, on); -} - -/* here on hardware reset */ -void -resettrap(void) -{ -} - -/* - * for drivers that used to run on x86's - */ -void -outb(ulong a, uchar v) -{ - *(uchar*)a = v; -} -void -outs(ulong a, ushort v) -{ - *(ushort*)a = v; -} -void -outss(ulong a, void *p, int n) -{ - ushort *sp = p; - - while(n-- > 0) - *(ushort*)a = *sp++; -} -void -outl(ulong a, ulong v) -{ - *(ulong*)a = v; -} -uchar -inb(ulong a) -{ - return *(uchar*)a; -} -ushort -ins(ulong a) -{ - return *(ushort*)a; -} -void -inss(ulong a, void *p, int n) -{ - ushort *sp = p; - - while(n-- > 0) - *sp++ = *(ushort*)a; -} -ulong -inl(ulong a) -{ - return *(ulong*)a; -} - -char* -getconf(char*) -{ - return nil; -} - -int -cmpswap(long *addr, long old, long new) -{ - int r, s; - - s = splhi(); - if(r = (*addr==old)) - *addr = new; - splx(s); - return r; -} - diff --git a/sys/src/9/bitsy/map b/sys/src/9/bitsy/map deleted file mode 100644 index 87f67bece..000000000 --- a/sys/src/9/bitsy/map +++ /dev/null @@ -1,10 +0,0 @@ -defn acidmap() -{ - local dfoffset; - - dfoffset = map()[1][3]; - map({"text", _start, etext, 0x20}); - map({"data", etext+1, edata, dfoffset}); - print("Set map for plan 9 kernel image\n"); - print("btext ", _start, " etext ", etext, "\n"); -} diff --git a/sys/src/9/bitsy/mem.h b/sys/src/9/bitsy/mem.h deleted file mode 100644 index 9b8b65bb6..000000000 --- a/sys/src/9/bitsy/mem.h +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Memory and machine-specific definitions. Used in C and assembler. - */ - -/* - * Sizes - */ -#define BI2BY 8 /* bits per byte */ -#define BI2WD 32 /* bits per word */ -#define BY2WD 4 /* bytes per word */ -#define BY2V 8 /* bytes per double word */ -#define BY2PG 4096 /* bytes per page */ -#define WD2PG (BY2PG/BY2WD) /* words per page */ -#define PGSHIFT 12 /* log(BY2PG) */ -#define ROUND(s, sz) (((s)+(sz-1))&~(sz-1)) -#define PGROUND(s) ROUND(s, BY2PG) -#define BLOCKALIGN 8 - -#define MAXMACH 1 /* max # cpus system can run */ - -/* - * Time - */ -#define HZ (20) /* clock frequency */ -#define MS2HZ (1000/HZ) /* millisec per clock tick */ -#define TK2SEC(t) ((t)/HZ) /* ticks to seconds */ - -/* - * Virtual addresses: - * - * We direct map all discovered DRAM and the area twixt 0xe0000000 and - * 0xe8000000 used to provide zeros for cache flushing. - * - * Flash is mapped to 0xb0000000 and special registers are mapped - * on demand to areas starting at 0xa0000000. - * - * The direct mapping is convenient but not necessary. It means - * that we don't have to turn on the MMU till well into the - * kernel. This can be changed by providing a mapping in l.s - * before calling main. - */ -#define UZERO 0 /* base of user address space */ -#define UTZERO (UZERO+BY2PG) /* first address in user text */ -#define KZERO 0xC0000000 /* base of kernel address space */ -#define KTZERO 0xC0008000 /* first address in kernel text */ -#define EMEMZERO 0x90000000 /* 256 meg for add on memory */ -#define EMEMTOP 0xA0000000 /* ... */ -#define REGZERO 0xA0000000 /* 128 meg for mapspecial regs */ -#define REGTOP 0xA8000000 /* ... */ -#define FLASHZERO 0xB0000000 /* 128 meg for flash */ -#define FLASHTOP 0xB8000000 /* ... */ -#define DRAMZERO 0xC0000000 /* 128 meg for dram */ -#define DRAMTOP 0xC8000000 /* ... */ -#define UCDRAMZERO 0xC8000000 /* 128 meg for dram (uncached/unbuffered) */ -#define UCDRAMTOP 0xD0000000 /* ... */ -#define NULLZERO 0xE0000000 /* 128 meg for cache flush zeroes */ -#define NULLTOP 0xE8000000 /* ... */ -#define USTKTOP 0x2000000 /* byte just beyond user stack */ -#define USTKSIZE (8*1024*1024) /* size of user stack */ -#define MACHADDR (KZERO+0x00001000) -#define EVECTORS 0xFFFF0000 /* virt base of exception vectors */ - -#define KSTACK (16*1024) /* Size of kernel stack */ - -/* - * Offsets into flash - */ -#define Flash_bootldr (FLASHZERO+0x0) /* boot loader */ -#define Flash_kernel (FLASHZERO+0x10000) /* boot kernel */ -#define Flash_tar (FLASHZERO+0x200000) /* fs.sac (tar file) */ - -/* - * virtual MMU - */ -#define PTEMAPMEM (1024*1024) -#define PTEPERTAB (PTEMAPMEM/BY2PG) -#define SEGMAPSIZE 1984 -#define SSEGMAPSIZE 16 -#define PPN(x) ((x)&~(BY2PG-1)) - -/* - * SA1110 definitions - */ - -/* - * memory physical addresses - */ -#define PHYSFLASH0 0x00000000 -#define PHYSDRAM0 0xC0000000 -#define PHYSNULL0 0xE0000000 - -/* - * peripheral control module physical addresses - */ -#define USBREGS 0x80000000 /* serial port 0 - USB */ -#define UART1REGS 0x80010000 /* serial port 1 - UART */ -#define GPCLKREGS 0x80020060 /* serial port 1 - general purpose clock */ -#define UART2REGS 0x80030000 /* serial port 2 - low speed IR */ -#define HSSPREGS 0x80040060 /* serial port 2 - high speed IR */ -#define UART3REGS 0x80050000 /* serial port 3 - RS232 UART */ -#define MCPREGS 0x80060000 /* serial port 4 - multimedia comm port */ -#define SSPREGS 0x80070060 /* serial port 4 - synchronous serial port */ -#define OSTIMERREGS 0x90000000 /* operating system timer registers */ -#define POWERREGS 0x90020000 /* power management */ -#define RESETREGS 0x90030000 /* reset controller */ -#define GPIOREGS 0x90040000 /* 28 general purpose IO pins */ -#define INTRREGS 0x90050000 /* interrupt registers */ -#define PPCREGS 0x90060000 /* peripheral pin controller */ -#define MEMCONFREGS 0xA0000000 /* memory configuration */ -#define LCDREGS 0xB0100000 /* display */ - -/* - * PCMCIA addresses - */ -#define PHYSPCM0REGS 0x20000000 -#define PYHSPCM0ATTR 0x28000000 -#define PYHSPCM0MEM 0x2C000000 -#define PHYSPCM1REGS 0x30000000 -#define PYHSPCM1ATTR 0x38000000 -#define PYHSPCM1MEM 0x3C000000 - -/* - * Program Status Registers - */ -#define PsrMusr 0x00000010 /* mode */ -#define PsrMfiq 0x00000011 -#define PsrMirq 0x00000012 -#define PsrMsvc 0x00000013 -#define PsrMabt 0x00000017 -#define PsrMund 0x0000001B -#define PsrMask 0x0000001F - -#define PsrDfiq 0x00000040 /* disable FIQ interrupts */ -#define PsrDirq 0x00000080 /* disable IRQ interrupts */ - -#define PsrV 0x10000000 /* overflow */ -#define PsrC 0x20000000 /* carry/borrow/extend */ -#define PsrZ 0x40000000 /* zero */ -#define PsrN 0x80000000 /* negative/less than */ - -/* - * Coprocessors - */ -#define CpMMU 15 -#define CpPWR 15 - -/* - * Internal MMU coprocessor registers - */ -#define CpCPUID 0 /* R: */ -#define CpControl 1 /* RW: */ -#define CpTTB 2 /* RW: translation table base */ -#define CpDAC 3 /* RW: domain access control */ -#define CpFSR 5 /* RW: fault status */ -#define CpFAR 6 /* RW: fault address */ -#define CpCacheFlush 7 /* W: cache flushing, wb draining*/ -#define CpTLBFlush 8 /* W: TLB flushing */ -#define CpRBFlush 9 /* W: Read Buffer ops */ -#define CpPID 13 /* RW: PID for virtual mapping */ -#define CpBpt 14 /* W: Breakpoint register */ -#define CpTest 15 /* W: Test, Clock and Idle Control */ - -/* - * CpControl - */ -#define CpCmmuena 0x00000001 /* M: MMU enable */ -#define CpCalign 0x00000002 /* A: alignment fault enable */ -#define CpCdcache 0x00000004 /* C: data cache on */ -#define CpCwb 0x00000008 /* W: write buffer turned on */ -#define CpCi32 0x00000010 /* P: 32-bit program space */ -#define CpCd32 0x00000020 /* D: 32-bit data space */ -#define CpCbe 0x00000080 /* B: big-endian operation */ -#define CpCsystem 0x00000100 /* S: system permission */ -#define CpCrom 0x00000200 /* R: ROM permission */ -#define CpCicache 0x00001000 /* I: instruction cache on */ -#define CpCvivec 0x00002000 /* X: virtual interrupt vector adjust */ - -/* - * fault codes - */ -#define FCterm 0x2 /* terminal */ -#define FCvec 0x0 /* vector */ -#define FCalignf 0x1 /* unaligned full word data access */ -#define FCalignh 0x3 /* unaligned half word data access */ -#define FCl1abort 0xc /* level 1 external abort on translation */ -#define FCl2abort 0xe /* level 2 external abort on translation */ -#define FCtransSec 0x5 /* section translation */ -#define FCtransPage 0x7 /* page translation */ -#define FCdomainSec 0x9 /* section domain */ -#define FCdomainPage 0x11 /* page domain */ -#define FCpermSec 0x9 /* section permissions */ -#define FCpermPage 0x11 /* page permissions */ -#define FCabortLFSec 0x4 /* external abort on linefetch for section */ -#define FCabortLFPage 0x6 /* external abort on linefetch for page */ -#define FCabortNLFSec 0x8 /* external abort on non-linefetch for section */ -#define FCabortNLFPage 0xa /* external abort on non-linefetch for page */ - -/* - * PTE bits used by fault.h. mmu.c translates them to real values. - */ -#define PTEVALID (1<<0) -#define PTERONLY 0 /* this is implied by the absence of PTEWRITE */ -#define PTEWRITE (1<<1) -#define PTEUNCACHED (1<<2) -#define PTEKERNEL (1<<3) /* no user access */ - -/* - * H3650 specific definitions - */ -#define EGPIOREGS 0x49000000 /* Additional GPIO register */ - -/* Power management */ - -#define PWR_rtc 0x80000000 /* resume on RTC */ -#define PWR_gpio0 0x00000001 /* resume on power button */ - -#define RCSR_all 0x0000000f -#define PCFR_opde 0x00000001 /* oscillator power-down enable */ -#define PCFR_suspend 0x00000001 -#define PCFR_fp 0x00000002 /* float pcmcia */ -#define PCFR_fs 0x00000004 /* float static memory */ -#define PCFR_fo 0x00000008 - -#define MDREFR_k1db2 (1 << 22) -#define MDREFR_slfrsh 0x80000000 /* self refresh */ -#define MDREFR_e1pin (1 << 20) -#define MSC_rt 0x00030003 - -#define MDCNFG_de0 0x00000001 /* dram enable */ -#define MDCNFG_de1 0x00000002 -#define MDCNFG_de2 0x00000004 -#define MDCNFG_de3 0x00000008 -#define MDCFNG_de 0x0000000f -#define PMCR_sf 1 diff --git a/sys/src/9/bitsy/mkfile b/sys/src/9/bitsy/mkfile deleted file mode 100644 index 05768dc72..000000000 --- a/sys/src/9/bitsy/mkfile +++ /dev/null @@ -1,139 +0,0 @@ -CONF=bitsy -CONFLIST=bitsy - -objtype=arm - $target - echo the boot loader misses the last 12 bytes >> $target - rm $target.gz - -install:V: $p$CONF paqdisk - if(test -d /n/once/arm){ - cp $p$CONF /n/once/arm/$p$CONF - cp s$p$CONF /n/once/arm/s$p$CONF - cp paqdisk /n/once/arm/paqdisk - } - if not - status='' - # 9fs lookout && cp $p$CONF /n/lookout/$objtype/$p$CONF - -installkern:V: $p$CONF - cp $p$CONF /$objtype/$p$CONF - cp s$p$CONF /$objtype/s$p$CONF - -<../boot/bootmkfile -<../port/portmkfile -<|../port/mkbootrules $CONF - -init.h:D: ../port/initcode.c init9.s - $CC ../port/initcode.c - $AS init9.s - $LD -l -R1 -s -o init.out init9.$O initcode.$O /arm/lib/libc.a - {echo 'uchar initcode[]={' - xd -1x init.h - -clock.$O: /$objtype/include/ureg.h -devether.$O: /$objtype/include/ureg.h ../port/netif.h -devpcmcia.$O: /$objtype/include/ureg.h -fpi.$O: fpi.h -fpiarm.$O: /$objtype/include/ureg.h fpi.h -fpimem.$O: fpi.h -main.$O: /$objtype/include/ureg.h errstr.h init.h -mmu.$O: /$objtype/include/ureg.h -power.$O: /$objtype/include/ureg.h -scu.$O: /$objtype/include/ureg.h -sa1110dma.$O: /$objtype/include/ureg.h -screen.$O: gamma.h -sdata.$O: /$objtype/include/ureg.h -trap$O: /$objtype/include/ureg.h -wavelan.$O: /$objtype/include/ureg.h wavelan.c wavelan.h ../pc/wavelan.h - -paqdisk:V: - rm -fr armpaq - mkdir armpaq - cd armpaq - disk/mkfs -d . /sys/lib/sysconfig/proto/armpaqproto - mkpaqfs -o ../paqdisk - cd .. - echo load ramdisk - echo !xms /sys/src/9/bitsy/paqdisk - -bitsy.clean: - rm -rf armpaq $p$CONF s$p$CONF paqdisk $CONF.c boot$CONF.c ../boot/libboot.a5 - diff --git a/sys/src/9/bitsy/mmu.c b/sys/src/9/bitsy/mmu.c deleted file mode 100644 index 8b7624eaa..000000000 --- a/sys/src/9/bitsy/mmu.c +++ /dev/null @@ -1,532 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "../port/error.h" - -/* - * to avoid mmu and cash flushing, we use the pid register in the MMU - * to map all user addresses. Although there are 64 possible pids, we - * can only use 31 because there are only 32 protection domains and we - * need one for the kernel. Pid i is thus associated with domain i. - * Domain 0 is used for the kernel. - */ - -/* real protection bits */ -enum -{ - /* level 1 descriptor bits */ - L1TypeMask= (3<<0), - L1Invalid= (0<<0), - L1PageTable= (1<<0), - L1Section= (2<<0), - L1Cached= (1<<3), - L1Buffered= (1<<2), - L1DomShift= 5, - L1Domain0= (0<>20] = L1Section | L1KernelRW| L1Domain0 - | L1Cached | L1Buffered - | ((0+o)&L1SectBaseMask); - - /* map DRAM */ - for(o = 0; o < DRAMTOP-DRAMZERO; o += OneMeg) - l1table[(DRAMZERO+o)>>20] = L1Section | L1KernelRW| L1Domain0 - | L1Cached | L1Buffered - | ((PHYSDRAM0+o)&L1SectBaseMask); - - /* uncached DRAM */ - for(o = 0; o < UCDRAMTOP-UCDRAMZERO; o += OneMeg) - l1table[(UCDRAMZERO+o)>>20] = L1Section | L1KernelRW| L1Domain0 - | ((PHYSDRAM0+o)&L1SectBaseMask); - - /* map zeros area */ - for(o = 0; o < NULLTOP-NULLZERO; o += OneMeg) - l1table[(NULLZERO+o)>>20] = L1Section | L1KernelRW | L1Domain0 - | L1Cached | L1Buffered - | ((PHYSNULL0+o)&L1SectBaseMask); - - /* map flash */ - for(o = 0; o < FLASHTOP-FLASHZERO; o += OneMeg) - l1table[(FLASHZERO+o)>>20] = L1Section | L1KernelRW | L1Domain0 - | ((PHYSFLASH0+o)&L1SectBaseMask); - - /* map peripheral control module regs */ - mapspecial(0x80000000, OneMeg); - - /* map system control module regs */ - mapspecial(0x90000000, OneMeg); - - /* - * double map start of ram to exception vectors - */ - a = EVECTORS; - t = xspanalloc(BY2PG, 1024, 0); - memset(t, 0, BY2PG); - l1table[a>>20] = L1PageTable | L1Domain0 | (((ulong)t) & L1PTBaseMask); - t[(a&0xfffff)>>PGSHIFT] = L2SmallPage | L2KernelRW | (PHYSDRAM0 & L2PageBaseMask); - - mmurestart(); - - mmuinited = 1; -} - -void -mmurestart(void) { - /* set up the domain register to cause all domains to obey pte access bits */ - - putdac(Dclient); - - /* point to map */ - putttb((ulong)l1table); - - /* enable mmu */ - wbflush(); - mmuinvalidate(); - mmuenable(); - cacheflush(); -} - -/* - * map on request - */ -static void* -_map(ulong pa, int len, ulong zero, ulong top, ulong l1prop, ulong l2prop) -{ - ulong *t; - ulong va, i, base, end, off, entry; - int large; - ulong* rv; - - rv = nil; - large = len >= 128*1024; - if(large){ - base = pa & ~(OneMeg-1); - end = (pa+len-1) & ~(OneMeg-1); - } else { - base = pa & ~(BY2PG-1); - end = (pa+len-1) & ~(BY2PG-1); - } - off = pa - base; - - for(va = zero; va < top && base <= end; va += OneMeg){ - switch(l1table[va>>20] & L1TypeMask){ - default: - /* found unused entry on level 1 table */ - if(large){ - if(rv == nil) - rv = (ulong*)(va+off); - l1table[va>>20] = L1Section | l1prop | L1Domain0 | - (base & L1SectBaseMask); - base += OneMeg; - continue; - } else { - - /* create an L2 page table and keep going */ - t = xspanalloc(BY2PG, 1024, 0); - memset(t, 0, BY2PG); - l1table[va>>20] = L1PageTable | L1Domain0 | - (((ulong)t) & L1PTBaseMask); - } - break; - case L1Section: - /* if it's already mapped in a one meg area, don't remap */ - entry = l1table[va>>20]; - i = entry & L1SectBaseMask; - if(pa >= i && (pa+len) <= i + OneMeg) - if((entry & ~L1SectBaseMask) == (L1Section | l1prop | L1Domain0)) - return (void*)(va + (pa & (OneMeg-1))); - - continue; - case L1PageTable: - if(large) - continue; - break; - } - - /* here if we're using page maps instead of sections */ - t = (ulong*)(l1table[va>>20] & L1PTBaseMask); - for(i = 0; i < OneMeg && base <= end; i += BY2PG){ - entry = t[i>>PGSHIFT]; - - /* found unused entry on level 2 table */ - if((entry & L2TypeMask) != L2SmallPage){ - if(rv == nil) - rv = (ulong*)(va+i+off); - t[i>>PGSHIFT] = L2SmallPage | l2prop | - (base & L2PageBaseMask); - base += BY2PG; - continue; - } - } - } - - /* didn't fit */ - if(base <= end) - return nil; - cacheflush(); - - return rv; -} - -/* map in i/o registers */ -void* -mapspecial(ulong pa, int len) -{ - return _map(pa, len, REGZERO, REGTOP, L1KernelRW, L2KernelRW); -} - -/* map add on memory */ -void* -mapmem(ulong pa, int len, int cached) -{ - ulong l1, l2; - - if(cached){ - l1 = L1KernelRW|L1Cached|L1Buffered; - l2 = L2KernelRW|L2Cached|L2Buffered; - } else { - l1 = L1KernelRW; - l2 = L2KernelRW; - } - return _map(pa, len, EMEMZERO, EMEMTOP, l1, l2); -} - -/* map a virtual address to a physical one */ -ulong -mmu_paddr(ulong va) -{ - ulong entry; - ulong *t; - - entry = l1table[va>>20]; - switch(entry & L1TypeMask){ - case L1Section: - return (entry & L1SectBaseMask) | (va & (OneMeg-1)); - case L1PageTable: - t = (ulong*)(entry & L1PTBaseMask); - va &= OneMeg-1; - entry = t[va>>PGSHIFT]; - switch(entry & L1TypeMask){ - case L2SmallPage: - return (entry & L2PageBaseMask) | (va & (BY2PG-1)); - } - } - return 0; -} - -/* map a physical address to a virtual one */ -ulong -findva(ulong pa, ulong zero, ulong top) -{ - int i; - ulong entry, va; - ulong start, end; - ulong *t; - - for(va = zero; va < top; va += OneMeg){ - /* search the L1 entry */ - entry = l1table[va>>20]; - switch(entry & L1TypeMask){ - default: - return 0; /* no holes */ - case L1Section: - start = entry & L1SectBaseMask; - end = start + OneMeg; - if(pa >= start && pa < end) - return va | (pa & (OneMeg-1)); - continue; - case L1PageTable: - break; - } - - /* search the L2 entry */ - t = (ulong*)(l1table[va>>20] & L1PTBaseMask); - for(i = 0; i < OneMeg; i += BY2PG){ - entry = t[i>>PGSHIFT]; - - /* found unused entry on level 2 table */ - if((entry & L2TypeMask) != L2SmallPage) - break; - - start = entry & L2PageBaseMask; - end = start + BY2PG; - if(pa >= start && pa < end) - return va | (BY2PG*i) | (pa & (BY2PG-1)); - } - } - return 0; -} -ulong -mmu_kaddr(ulong pa) -{ - ulong va; - - /* try the easy stuff first (the first case is true most of the time) */ - if(pa >= PHYSDRAM0 && pa <= PHYSDRAM0+(DRAMTOP-DRAMZERO)) - return DRAMZERO+(pa-PHYSDRAM0); - if(pa >= PHYSFLASH0 && pa <= PHYSFLASH0+(FLASHTOP-FLASHZERO)) - return FLASHZERO+(pa-PHYSFLASH0); - if(pa >= PHYSNULL0 && pa <= PHYSNULL0+(NULLTOP-NULLZERO)) - return NULLZERO+(pa-PHYSNULL0); - - if(!mmuinited) - return 0; /* this shouldn't happen */ - - /* walk the map for the special regs and extended memory */ - va = findva(pa, EMEMZERO, EMEMTOP); - if(va != 0) - return va; - return findva(pa, REGZERO, REGTOP); -} - -/* - * Return the number of bytes that can be accessed via KADDR(pa). - * If pa is not a valid argument to KADDR, return 0. - */ -ulong -cankaddr(ulong pa) -{ - /* - * Is this enough? - * We'll find out if anyone still has one - * of these... - */ - if(pa >= PHYSDRAM0 && pa <= PHYSDRAM0+(DRAMTOP-DRAMZERO)) - return PHYSDRAM0+(DRAMTOP-DRAMZERO) - pa; - return 0; -} - -/* - * table to map fault.c bits to physical bits - */ -static ulong mmubits[16] = -{ - [PTEVALID] L2SmallPage|L2Cached|L2Buffered|L2UserRO, - [PTEVALID|PTEWRITE] L2SmallPage|L2Cached|L2Buffered|L2UserRW, - [PTEVALID|PTEUNCACHED] L2SmallPage|L2UserRO, - [PTEVALID|PTEUNCACHED|PTEWRITE] L2SmallPage|L2UserRW, - - [PTEKERNEL|PTEVALID] L2SmallPage|L2Cached|L2Buffered|L2KernelRW, - [PTEKERNEL|PTEVALID|PTEWRITE] L2SmallPage|L2Cached|L2Buffered|L2KernelRW, - [PTEKERNEL|PTEVALID|PTEUNCACHED] L2SmallPage|L2KernelRW, - [PTEKERNEL|PTEVALID|PTEUNCACHED|PTEWRITE] L2SmallPage|L2KernelRW, -}; - -/* - * add an entry to the current map - */ -void -putmmu(uintptr va, uintptr pa, Page *pg) -{ - Page *l2pg; - ulong *t, *l1p, *l2p; - int s; - - s = splhi(); - - /* clear out the current entry */ - mmuinvalidateaddr(va); - - l2pg = up->l1page[va>>20]; - if(l2pg == nil){ - l2pg = up->mmufree; - if(l2pg != nil){ - up->mmufree = l2pg->next; - } else { - splx(s); - l2pg = newpage(0, 0, 0); - splhi(); - } - l2pg->va = VA(kmap(l2pg)); - up->l1page[va>>20] = l2pg; - memset((uchar*)(l2pg->va), 0, BY2PG); - } - - /* always point L1 entry to L2 page, can't hurt */ - l1p = &l1table[va>>20]; - *l1p = L1PageTable | L1Domain0 | (l2pg->pa & L1PTBaseMask); - up->l1table[va>>20] = *l1p; - t = (ulong*)l2pg->va; - - /* set L2 entry */ - l2p = &t[(va & (OneMeg-1))>>PGSHIFT]; - *l2p = mmubits[pa & (PTEKERNEL|PTEVALID|PTEUNCACHED|PTEWRITE)] - | (pa & ~(PTEKERNEL|PTEVALID|PTEUNCACHED|PTEWRITE)); - - /* write back dirty entries - we need this because the pio() in - * fault.c is writing via a different virt addr and won't clean - * its changes out of the dcache. Page coloring doesn't work - * on this mmu because the virtual cache is set associative - * rather than direct mapped. - */ - cachewb(); - if(pg->txtflush){ - icacheinvalidate(); - pg->txtflush = 0; - } - - splx(s); -} - -/* - * free up all page tables for this proc - */ -void -mmuptefree(Proc *p) -{ - Page *pg; - int i; - - for(i = 0; i < Nmeg; i++){ - pg = p->l1page[i]; - if(pg == nil) - continue; - p->l1page[i] = nil; - pg->next = p->mmufree; - p->mmufree = pg; - } - memset(p->l1table, 0, sizeof(p->l1table)); -} - -/* - * this is called with palloc locked so the pagechainhead is kosher - */ -void -mmurelease(Proc* p) -{ - Page *pg, *next; - - /* write back dirty cache entries before changing map */ - cacheflush(); - - mmuptefree(p); - - for(pg = p->mmufree; pg != nil; pg = next){ - next = pg->next; - if(--pg->ref) - panic("mmurelease: pg->ref %d\n", pg->ref); - pagechainhead(pg); - } - if(p->mmufree != nil) - pagechaindone(); - p->mmufree = nil; - - memset(l1table, 0, sizeof(p->l1table)); - cachewbregion((ulong)l1table, sizeof(p->l1table)); -} - -void -mmuswitch(Proc *p) -{ - if(m->mmupid == p->pid && p->newtlb == 0) - return; - m->mmupid = p->pid; - - /* write back dirty cache entries and invalidate all cache entries */ - cacheflush(); - - if(p->newtlb){ - mmuptefree(p); - p->newtlb = 0; - } - - /* move in new map */ - memmove(l1table, p->l1table, sizeof(p->l1table)); - - /* make sure map is in memory */ - cachewbregion((ulong)l1table, sizeof(p->l1table)); - - /* lose any possible stale tlb entries */ - mmuinvalidate(); -} - -void -flushmmu(void) -{ - int s; - - s = splhi(); - up->newtlb = 1; - mmuswitch(up); - splx(s); -} - -void -peekmmu(ulong va) -{ - ulong e, d; - - e = l1table[va>>20]; - switch(e & L1TypeMask){ - default: - iprint("l1: %#p[%#lux] = %#lux invalid\n", l1table, va>>20, e); - break; - case L1PageTable: - iprint("l1: %#p[%#lux] = %#lux pt\n", l1table, va>>20, e); - va &= OneMeg-1; - va >>= PGSHIFT; - e &= L1PTBaseMask; - d = ((ulong*)e)[va]; - iprint("l2: %#lux[%#lux] = %#lux\n", e, va, d); - break; - case L1Section: - iprint("l1: %#p[%#lux] = %#lux section\n", l1table, va>>20, e); - break; - } -} - -void -checkmmu(uintptr, uintptr) -{ -} - -void -countpagerefs(ulong*, int) -{ -} diff --git a/sys/src/9/bitsy/mouse.c b/sys/src/9/bitsy/mouse.c deleted file mode 100644 index f26607022..000000000 --- a/sys/src/9/bitsy/mouse.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "../port/error.h" -#include "io.h" - -#define Image IMAGE -#include -#include -#include -#include "screen.h" - -enum { - Button1 = 0x1; - Button2 = 0x2; - Button3 = 0x4; -}; - -int buttons; -Point position; - -static void -mousevent(void) { - static int curbuttons; - static Point curposition; - - if (buttons == curbuttons && eqpt(position, curposition)) - return; - - /* generate a mouse event */ - curbuttons = buttons; - curposition = position; -} - -void -buttonevent(int event) { - switch (event) { - case 0x02: - /* Button 2 down */ - buttons |= Button2; - mousevent(); - break; - case 0x82: - /* Button 2 up */ - buttons &= ~Button2; - mousevent(); - break; - case 0x03: - /* Button 3 down */ - buttons |= Button3; - mousevent(); - break; - case 0x83: - /* Button 3 up */ - buttons &= ~Button3; - mousevent(); - break; - default: - /* other buttons */ - } -} diff --git a/sys/src/9/bitsy/paqfiles/cpurc b/sys/src/9/bitsy/paqfiles/cpurc deleted file mode 100644 index fcc6da2d9..000000000 --- a/sys/src/9/bitsy/paqfiles/cpurc +++ /dev/null @@ -1,175 +0,0 @@ -#!/bin/rc - -debug=0 - -#set service to terminal (necessary for factotum, handy for everything else) -service=terminal - -echo -n terminal > /env/service -echo -n plan9 > /env/site -echo -n astro > /env/facedom -echo -n emelie > /env/fs - -bind -a '#y' /dev -bind -a '#F' /dev -bind -a '#I' /net -bind -a '#D' /net - -# parallelism for mk -NPROC=1 - -sysname=`{cat /dev/sysname} -if (~ $sysname ''){ - sysname=bitsy - echo $sysname>/dev/sysname -} -prompt=($sysname^'# ' ' ') - -# flavor -fileserver=emelie -cpu=olive - -# user defined flash partitions -echo -n add fs 0x0800000 0x1000000 > /dev/flash/flashctl - -# so we can see things -light 0 - -# set variables -if(~ $debug 1) echo ramfs -ramfs -if(~ $debug 1) echo pencal -params -f -if(! grep -s '^calibrate=' /tmp/tmpparams) - pencal >>/tmp/tmpparams -if not { - eval `{grep '^calibrate=' /tmp/tmpparams} - echo calibrate $calibrate > '#m/mousectl' -} -prompter /tmp/tmpparams -params -if(~ $debug 1) { - echo tmpparams: - cat /tmp/tmpparams -} -. /tmp/tmpparams - -if(~ $debug 1) echo set user -# set userid -if(test -e /env/user){ - echo -n $user > /dev/hostowner -} - -if(~ $debug 1) echo start flashfs -# bind in read/write file system -if (aux/flashfs) { - if (~ $debug 1) echo flashfs started - mount /srv/brzr /n/tmp - bind -a /n /n/tmp/n - bind -a /sys/lib /n/tmp/sys/lib - bind -a /sys /n/tmp/sys - bind -a /arm/bin/auth /n/tmp/arm/bin/auth - bind -a /arm/bin/ndb /n/tmp/arm/bin/ndb - bind -a /arm/bin/ip /n/tmp/arm/bin/ip - bind -a /arm/bin/aux /n/tmp/arm/bin/aux - bind -a /arm/bin /n/tmp/arm/bin - bind -a /arm /n/tmp/arm - bind -a /lib/ndb /n/tmp/lib/ndb - bind -a /lib/font /n/tmp/lib/font - bind -a /lib /n/tmp/lib - bind -a / /n/tmp - bind /n/tmp / - unmount /n/tmp -} >[2] /dev/null - -# start network -if(grep -s WaveLAN/IEEE /dev/pcm0ctl){ - if (~ $debug 1) echo 'configure #l0 wavelan' - echo -n 'configure #l0 wavelan'>/dev/pcm0ctl - bind -a '#l0' /net - switch($wvkey1){ - case '' - ; - case * - echo -n 'key1 '^$wvkey1 >/net/ether0/clone - } - switch($wvkey2){ - case '' - ; - case * - echo -n 'key2 '^$wvkey2 >/net/ether0/clone - } - switch($wvkey3){ - case '' - ; - case * - echo -n 'key3 '^$wvkey3 >/net/ether0/clone - } - switch($wvtxkey){ - case '' - ; - case * - echo -n 'txkey '^$wvtxkey >/net/ether0/clone - } - switch($wvmode){ - case '' - ; - case * - echo -n 'mode '^$wvmode >/net/ether0/clone - } - switch($wvibss){ - case '' - ; - case * - echo -n 'ibss '^$wvibss >/net/ether0/clone - } - switch($wvessid){ - case '' - ; - case * - echo -n 'essid '^$wvessid >/net/ether0/clone - } - switch($wvcrypt){ - case '' - ; - case * - echo -n 'crypt '^$wvcrypt >/net/ether0/clone - } - if (~ $debug 1) echo ip/ipconfig ether /net/ether0 $ipaddr $ipmask - ip/ipconfig ether /net/ether0 $ipaddr $ipmask - if(test -e /env/auth) - echo ' auth='^$auth >>/net/ndb - if(test -e /env/dns) - echo ' dns='^$dns >>/net/ndb - if(test -e /env/dnsdomain) - echo ' dnsdomain='^$dnsdomain >>/net/ndb - if(test -e /env/authdom) - echo ' authdom='^$authdom >>/net/ndb - - if (~ $debug 1) echo ndb/cs - ndb/cs - ndb/dns -r -} - -auth/factotum -n -s factotum -a $auth - -if(! test -e /env/font) - font=/lib/font/bit/lucidasans/unicode.6.font -if(! test -e /env/tabstop) - tabstop=2 - -if (test -d /usr/$user) { - home=/usr/$user - cd $home - if (test -r lib/profile) { - . lib/profile - exec /bin/rc - } - if (test -r lib/windows) { - if (~ $debug 1) echo 'exec rio -sk ''/bin/keyboard -l'' -i '$home'/lib/windows' - exec rio -sk '/bin/keyboard -l -w' -i $home/lib/windows - } -} -# bind in read/write file system -if (~ $debug 1) echo 'exec rio -sk ''/bin/keyboard -l''' -exec rio -sk '/bin/keyboard -l -w' diff --git a/sys/src/9/bitsy/paqfiles/local b/sys/src/9/bitsy/paqfiles/local deleted file mode 100644 index d00bea6a1..000000000 --- a/sys/src/9/bitsy/paqfiles/local +++ /dev/null @@ -1,6 +0,0 @@ -# -# files comprising the database -# -database= - file=/lib/ndb/local - file=/lib/ndb/common diff --git a/sys/src/9/bitsy/paqfiles/mfs b/sys/src/9/bitsy/paqfiles/mfs deleted file mode 100644 index 77441459e..000000000 --- a/sys/src/9/bitsy/paqfiles/mfs +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/rc - -# $proxy is typically set to tailfan's address. -ipnet=`{grep 'ip=' /net/ndb | sed 's/^.*ip=([0-9]+\.[0-9]+\.[0-9]+\.).*$/\1/'} -if (~ $proxy $ipnet^*){ - # Use a proxy - echo import $proxy /net /net - import $proxy /net /net -} - -switch($fs){ -case '' - echo you must set the environment variable fs - exit 0 -} -if (! test -e /mnt/factotum) { - if (test -e /srv/factotum) { - mount -b /srv/factotum /mnt - } - if not { - auth/factotum -u - } -} -srv -m $fs $fs /n/fs -bind -b /n/fs/arm/bin /bin -bind -b /n/fs/rc/bin /bin -bind -a /n/fs/lib /lib -bind -b /n/fs/sys /sys -bind -a /n/fs/usr /usr -bind -c /n/fs/mail /mail -bind -c /n/fs/acme /acme -user=`{cat /dev/user} -home=/usr/$user -bind -a /n/fs/usr/$user /usr/$user -bind -cb /usr/$user/tmp /tmp -bind -b /usr/$user/bin/rc /bin -bind -b /usr/$user/bin/arm /bin -bind -a /n/fs/lib/font/bit/lucidasans /lib/font/bit/lucidasans -bind -a /n/fs/lib/font/bit/lucida /lib/font/bit/lucida -bind -a /n/fs/lib/font/bit/misc /lib/font/bit/misc -#service=cpu aux/listen -t /bin/service diff --git a/sys/src/9/bitsy/paqfiles/namespace b/sys/src/9/bitsy/paqfiles/namespace deleted file mode 100644 index e3c638439..000000000 --- a/sys/src/9/bitsy/paqfiles/namespace +++ /dev/null @@ -1,53 +0,0 @@ -# root -mount #s/boot /root -bind -a /root / -bind -c /root/mnt /mnt - -# kernel devices -bind #c /dev -bind #d /fd -bind -c #e /env -bind #p /proc -bind -c #s /srv -bind -a #t /dev -bind -a #r /dev -bind -a #m /dev -bind -a #y /dev -bind -a #I /net -bind -a #A /dev -bind -a #F /dev -bind -a #¤ /dev - -# servers -mount -a /srv/cs /net -mount -a /srv/dns /net -mount -a /srv/factotum /mnt - -# read/write file system -mount /srv/brzr /n/brzr -mount /srv/brzr /n/tmp -bind -a /n /n/tmp/n -bind -a /sys/lib /n/tmp/sys/lib -bind -a /sys /n/tmp/sys -bind -a /arm/bin/auth /n/tmp/arm/bin/auth -bind -a /arm/bin/ndb /n/tmp/arm/bin/ndb -bind -a /arm/bin/ip /n/tmp/arm/bin/ip -bind -a /arm/bin/aux /n/tmp/arm/bin/aux -bind -a /arm/bin /n/tmp/arm/bin -bind -a /arm /n/tmp/arm -bind -a /lib/ndb /n/tmp/lib/ndb -bind -a /lib/font /n/tmp/lib/font -bind -a /lib /n/tmp/lib -bind -a / /n/tmp -bind /n/tmp / -unmount /n/tmp - -# standard bin -bind /arm/bin /bin -bind -a /rc/bin /bin -bind -a /arm/bin/bitsy /bin - -# user defines -bind -cb /usr/$user/tmp /tmp -bind -b /usr/$user/bin/rc /bin -bind -b /usr/$user/bin/arm /bin diff --git a/sys/src/9/bitsy/paqfiles/startip b/sys/src/9/bitsy/paqfiles/startip deleted file mode 100644 index e02dba6dc..000000000 --- a/sys/src/9/bitsy/paqfiles/startip +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/rc -if(grep -s WaveLAN/IEEE /dev/pcm0ctl){ - echo -n 'configure #l0 WaveLAN/IEEE'>/dev/pcm0ctl - bind -a '#l0' /net - echo -n 'key moon1'>/net/ether0/clone - ip/ipconfig ether /net/ether0 - ndb/cs - ndb/dns -r -} diff --git a/sys/src/9/bitsy/paqfiles/unicode.6.font b/sys/src/9/bitsy/paqfiles/unicode.6.font deleted file mode 100644 index edd129934..000000000 --- a/sys/src/9/bitsy/paqfiles/unicode.6.font +++ /dev/null @@ -1,5 +0,0 @@ -11 9 -0x0000 0x00FF lsr.10 -0x0100 0x01f0 ../lucida/EuroLatin.5.0 -0x2000 0x20aa ../lucida/GenPunct.5.0 -0x2200 0x22f1 ../lucida/MathOps1.5.0 diff --git a/sys/src/9/bitsy/power.c b/sys/src/9/bitsy/power.c deleted file mode 100644 index 50abbd02e..000000000 --- a/sys/src/9/bitsy/power.c +++ /dev/null @@ -1,358 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "pool.h" - -/* Power management for the bitsy */ - -#define TODFREQ 1000000000LL - -/* saved state during power down. - * it's only used up to 164/4. - * it's only used by routines in l.s - */ -ulong power_state[200/4]; - -ulong resumeaddr[1]; -Rendez powerr; -ulong powerflag = 0; /* set to start power-off sequence */ - -extern void power_resume(void); -extern int setpowerlabel(void); -extern void _start(void); -extern Uart sa1110uart[]; - -GPIOregs savedgpioregs; -Intrregs savedintrregs; - -#define R(p) ((Uartregs*)((p)->regs)) - -uchar *savedtext; - -static void -checkflash(void) -{ - ulong *p; - ulong s; - - s = 0; - for (p = (ulong*)FLASHZERO; p < (ulong*)(FLASHZERO+8*1024*1024); p++) - s += *p; - iprint("flash checksum is 0x%lux\n", s); -} - -static void -checkktext(void) -{ - ulong *p; - ulong s; - - s = 0; - for (p = (ulong*)_start; p < (ulong*)etext; p++){ - if(*p == 0) - iprint("%#p->0\n", p); - if (((ulong)p & 0x1fff) == 0){ - iprint("page 0x%lux checksum 0x%lux\n", - (ulong)(p-1)&~0x1fff, s); - s = 0; - } - s += *p; - } - iprint("page 0x%lux checksum 0x%lux\n", (ulong)(p-1)&~0x1fff, s); -} - -static void -checkpagetab(void) -{ - extern ulong l1table; - ulong *p; - ulong s; - - s = 0; - for (p = (ulong*)l1table; p < (ulong*)(l1table+16*1024); p++) - s += *p; - iprint("page table checksum is 0x%lux\n", s); -} - - -static void -dumpitall(void) -{ - extern ulong l1table; - - iprint("intr: icip %lux iclr %lux iccr %lux icmr %lux\n", - intrregs->icip, - intrregs->iclr, intrregs->iccr, intrregs->icmr ); - iprint("gpio: lvl %lux dir %lux, re %lux, fe %lux sts %lux alt %lux\n", - gpioregs->level, - gpioregs->direction, gpioregs->rising, gpioregs->falling, - gpioregs->edgestatus, gpioregs->altfunc); - iprint("uart1: %lux %lux %lux \nuart3: %lux %lux %lux\n", - R(&sa1110uart[0])->ctl[0], R(&sa1110uart[0])->status[0], R(&sa1110uart[0])->status[1], - R(&sa1110uart[1])->ctl[0], R(&sa1110uart[1])->status[0], R(&sa1110uart[1])->status[1]); - iprint("tmr: osmr %lux %lux %lux %lux oscr %lux ossr %lux oier %lux\n", - timerregs->osmr[0], timerregs->osmr[1], - timerregs->osmr[2], timerregs->osmr[3], - timerregs->oscr, timerregs->ossr, timerregs->oier); - iprint("dram: mdcnfg %lux mdrefr %lux cas %lux %lux %lux %lux %lux %lux\n", - memconfregs->mdcnfg, memconfregs->mdrefr, - memconfregs->mdcas00, memconfregs->mdcas01,memconfregs->mdcas02, - memconfregs->mdcas20, memconfregs->mdcas21,memconfregs->mdcas22); - iprint("dram: mdcnfg msc %lux %lux %lux mecr %lux\n", - memconfregs->msc0, memconfregs->msc1,memconfregs->msc2, - memconfregs->mecr); - iprint("mmu: CpControl %lux CpTTB %lux CpDAC %lux l1table 0x%lux\n", - getcontrol(), getttb(), getdac(), l1table); - iprint("powerregs: pmcr %lux pssr %lux pcfr %lux ppcr %lux pwer %lux pspr %lux pgsr %lux posr %lux\n", - powerregs->pmcr, powerregs->pssr, powerregs->pcfr, powerregs->ppcr, - powerregs->pwer, powerregs->pspr, powerregs->pgsr, powerregs->posr); - checkpagetab(); - checkflash(); - checkktext(); - iprint("\n\n"); -} - -static void -intrcpy(Intrregs *to, Intrregs *from) -{ - to->iclr = from->iclr; - to->iccr = from->iccr; - to->icmr = from->icmr; // interrupts enabled -} - -static void -gpiosave(GPIOregs *to, GPIOregs *from) -{ - to->level = from->level; - to->rising = from->rising; // gpio intrs enabled - to->falling= from->falling; // gpio intrs enabled - to->altfunc = from->altfunc; - to->direction = from->direction; -} - -static void -gpiorestore(GPIOregs *to, GPIOregs *from) -{ - to->direction = from->direction; - to->altfunc = from->altfunc; - to->set = from->level & 0x0fffffff; - to->clear = ~from->level & 0x0fffffff; - to->rising = from->rising; // gpio intrs enabled - to->falling= from->falling; // gpio intrs enabled -} - -void (*restart)(void) = nil; - -static int -bitno(ulong x) -{ - int i; - - for(i = 0; i < 8*sizeof(x); i++) - if((1<icip & (1<edgestatus = (1<icip = (1<r0 = 1<<0; - todset(savedtod + clkd * TODFREQ, 0LL, 0); - resetsuspendtimer(); - rs232power(1); - uartpower(1); - delay(100); - xlink = getcallerpc(&xlink); - iprint("\nresuming execution, sp = %#p, pc = 0x%lux, psw = 0x%ux\n", - &xsp, xlink, splhi()); -// dumpitall(); - delay(1000); -// irpower(1); - audiopower(1); - µcpower(1); - screenpower(1); - pcmciapower(1); - splx(power_pl); - return; - } - cacheflush(); - delay(100); - savedtod = todget(nil); - power_down(); - /* no return */ -} - -void -powerkproc(void*) -{ - ulong xlink, xlink1; - - while(waserror()) - ; - - for(;;){ - while(powerflag == 0) - sleep(&powerr, powerdown, 0); - - xlink = getcallerpc(&xlink); - -// iprint("call deepsleep, pc = 0x%lux, sp = 0x%lux\n", xlink, &xlink); - deepsleep(); - xlink1 = getcallerpc(&xlink1); - - delay(2000); - -// iprint("deepsleep returned, pc = 0x%lux, sp = 0x%lux\n", xlink1, &xlink); - powerflag = 0; - } -} - -void -onoffintr(Ureg* , void*) -{ - int i; - - /* Power down interrupt comes on power button release. - * Act only after button has been released a full 100 ms - */ - - if (powerflag) - return; - - for (i = 0; i < 100; i++) { - delay(1); - if ((gpioregs->level & GPIO_PWR_ON_i) == 0) - return; /* bounced */ - } - - powerflag = 1; - wakeup(&powerr); -} - -static void -blanktimer(void) -{ - drawactive(0); -} - -static ulong suspendtime = 120 * HZ; -static int lastsuspend; - -void -resetsuspendtimer(void) -{ - suspendtime = 60 * HZ; -} - -static void -suspendtimer(void) -{ -#ifdef notdef - uvlong now; - - if (suspendtime > 0) - suspendtime--; - if (suspendtime == 0){ - now = seconds(); - if (now < lastsuspend + 10){ - resetsuspendtimer(); - return; - } - lastsuspend = seconds(); - deepsleep(); - lastsuspend = seconds(); - return; - } -#endif /* notdef */ -} - -void -powerinit(void) -{ - extern ulong power_magic; - extern ulong power_code; - extern ulong doze_code; - ulong *p, *q, i; - - p = (ulong*)(((ulong)&power_magic + 0x1f) & ~0x1f); - q = &power_code; - for (i = 0; i < 8; i++) - *p++ = *q++; - p = (ulong*)(((ulong)doze + 0x3f) & ~0x1f); - q = &doze_code; - for (i = 0; i < 3; i++) - *p++ = *q++; - - *resumeaddr = (ulong) power_resume; - addclock0link(blanktimer, 1000/HZ); - addclock0link(suspendtimer, 1000/HZ); - intrenable(GPIOrising, bitno(GPIO_PWR_ON_i), onoffintr, nil, "on/off"); -} - -void -idlehands(void) -{ - char *msgb = "idlehands called with splhi\n"; - char *msga = "doze returns with splhi\n"; - - if(!islo()){ - uartputs(msga, strlen(msga)); - spllo(); - } - doze(); - if(!islo()){ - uartputs(msgb, strlen(msgb)); - spllo(); - } -} - diff --git a/sys/src/9/bitsy/sa1110dma.c b/sys/src/9/bitsy/sa1110dma.c deleted file mode 100644 index f95093d38..000000000 --- a/sys/src/9/bitsy/sa1110dma.c +++ /dev/null @@ -1,227 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" -#include "sa1110dma.h" - -static int debug = 0; - -/* - * DMA helper routines - */ - -enum { - NDMA = 6, /* Number of DMA channels */ - DMAREGS = 0xb0000000, /* DMA registers, physical */ -}; - -enum { - /* Device Address Register, DDAR */ - RW = 0, - E = 1, - BS = 2, - DW = 3, - DS = 4, /* bits 4 - 7 */ - DA = 8 /* bits 8 - 31 */ -}; - -enum { - /* Device Control & Status Register, DCSR */ - RUN = 0, - IE = 1, - ERROR = 2, - DONEA = 3, - STRTA = 4, - DONEB = 5, - STRTB = 6, - BIU = 7 -}; - -typedef struct DMAchan { - int allocated; - Rendez r; - void (*intr)(void*, ulong); - void *param; -} DMAchan; - -struct { - Lock; - DMAchan chan[6]; -} dma; - -struct dmaregs { - ulong ddar; - ulong dcsr_set; - ulong dcsr_clr; - ulong dcsr_rd; - ulong dstrtA; - ulong dxcntA; - ulong dstrtB; - ulong dxcntB; -} *dmaregs; - -static void dmaintr(Ureg*, void *); - -void -dmainit(void) { - int i; - - /* map the lcd regs into the kernel's virtual space */ - dmaregs = (struct dmaregs*)mapspecial(DMAREGS, NDMA*sizeof(struct dmaregs)); - if (debug) print("dma: dmaalloc registers 0x%ux mapped at 0x%p\n", - DMAREGS, dmaregs); - for (i = 0; i < NDMA; i++) { - intrenable(IRQ, IRQdma0+i, dmaintr, &dmaregs[i], "DMA"); - } -} - -void -dmareset(int i, int rd, int bigendian, int burstsize, int datumsize, int device, ulong port) { - ulong ddar; - - ddar = - (rd?1:0)< 1) - iprint("dma: dmastart 0x%lux\n", status); - - if ((status & (1< 1) print("dmaidle: 0x%lux\n", status); - return (status & (1<dcsr_rd; - if (debug > 1) - iprint("dma: interrupt channel %d, status 0x%lux\n", i, dcsr); - if (dcsr & 1<dcsr_clr = 1<dcsr_clr = ERROR; - iprint("DMA error, channel %d, status 0x%lux\n", i, dcsr); - if (dma.chan[i].intr) { - (*dma.chan[i].intr)(dma.chan[i].param, 0); - } - wakeup(&dma.chan[i].r); - return; - } - iprint("spurious DMA interrupt, channel %d, status 0x%lux\n", i, dcsr); -} diff --git a/sys/src/9/bitsy/sa1110dma.h b/sys/src/9/bitsy/sa1110dma.h deleted file mode 100644 index 24810e8d4..000000000 --- a/sys/src/9/bitsy/sa1110dma.h +++ /dev/null @@ -1,19 +0,0 @@ - -enum { - Port4MCP = 0x80060008, - Port4SSP = 0x8007006c, - AudioDMA = 0xa, - SSPXmitDMA = 0xe, - SSPRecvDMA = 0xf, -}; - -void dmainit(void); -int dmaalloc(int, int, int, int, int, ulong, void (*)(void*, ulong), void*); -void dmareset(int, int, int, int, int, int, ulong); -void dmafree(int); - -ulong dmastart(int, ulong, int); - -void dmawait(int); -void dmastop(int); -int dmaidle(int); diff --git a/sys/src/9/bitsy/screen.c b/sys/src/9/bitsy/screen.c deleted file mode 100644 index 9bcc8e688..000000000 --- a/sys/src/9/bitsy/screen.c +++ /dev/null @@ -1,492 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "../port/error.h" - -#define Image IMAGE -#include -#include -#include -#include "screen.h" -#include "gamma.h" - -#define MINX 8 - -int landscape = 0; /* orientation of the screen, default is 0: portait */ - -enum { - Wid = 240, - Ht = 320, - Pal0 = 0x2000, /* 16-bit pixel data in active mode (12 in passive) */ - - hsw = 0x00, - elw = 0x0e, - blw = 0x0d, - - vsw = 0x02, - efw = 0x01, - bfw = 0x0a, - - pcd = 0x10, -}; - -struct sa1110fb { - /* Frame buffer for 16-bit active color */ - short palette[16]; /* entry 0 set to Pal0, the rest to 0 */ - ushort pixel[Wid*Ht]; /* Pixel data */ -} *framebuf; - -enum { -/* LCD Control Register 0, lcd->lccr0 */ - LEN = 0, /* 1 bit */ - CMS = 1, /* 1 bit */ - SDS = 2, /* 1 bit */ - LDM = 3, /* 1 bit */ - BAM = 4, /* 1 bit */ - ERM = 5, /* 1 bit */ - PAS = 7, /* 1 bit */ - BLE = 8, /* 1 bit */ - DPD = 9, /* 1 bit */ - PDD = 12, /* 8 bits */ -}; - -enum { -/* LCD Control Register 1, lcd->lccr1 */ - PPL = 0, /* 10 bits */ - HSW = 10, /* 6 bits */ - ELW = 16, /* 8 bits */ - BLW = 24, /* 8 bits */ -}; - -enum { -/* LCD Control Register 2, lcd->lccr2 */ - LPP = 0, /* 10 bits */ - VSW = 10, /* 6 bits */ - EFW = 16, /* 8 bits */ - BFW = 24, /* 8 bits */ -}; - -enum { -/* LCD Control Register 3, lcd->lccr3 */ - PCD = 0, /* 8 bits */ - ACB = 8, /* 8 bits */ - API = 16, /* 4 bits */ - VSP = 20, /* 1 bit */ - HSP = 21, /* 1 bit */ - PCP = 22, /* 1 bit */ - OEP = 23, /* 1 bit */ -}; - -enum { -/* LCD Status Register, lcd->lcsr */ - LDD = 0, /* 1 bit */ - BAU = 1, /* 1 bit */ - BER = 2, /* 1 bit */ - ABC = 3, /* 1 bit */ - IOL = 4, /* 1 bit */ - IUL = 5, /* 1 bit */ - OIU = 6, /* 1 bit */ - IUU = 7, /* 1 bit */ - OOL = 8, /* 1 bit */ - OUL = 9, /* 1 bit */ - OOU = 10, /* 1 bit */ - OUU = 11, /* 1 bit */ -}; - -struct sa1110regs { - ulong lccr0; - ulong lcsr; - ulong dummies[2]; - short* dbar1; - ulong dcar1; - ulong dbar2; - ulong dcar2; - ulong lccr1; - ulong lccr2; - ulong lccr3; -} *lcd; - -static Memdata xgdata; - -static Memimage xgscreen = -{ - { 0, 0, Wid, Ht }, /* r */ - { 0, 0, Wid, Ht }, /* clipr */ - 16, /* depth */ - 3, /* nchan */ - RGB16, /* chan */ - nil, /* cmap */ - &xgdata, /* data */ - 0, /* zero */ - Wid/2, /* width */ - 0, /* layer */ - 0, /* flags */ -}; - -struct{ - Point pos; - int bwid; -}out; - -Memimage *gscreen; -Memimage *conscol; -Memimage *back; - -Memsubfont *memdefont; - -Lock screenlock; - -ushort *vscreen; /* virtual screen */ -Rectangle window; -Point curpos; -int h, w; - -static ulong rep(ulong, int); -static void screenwin(void); -static void screenputc(char *buf); -static void bitsyscreenputs(char *s, int n); -static void scroll(void); - -static void -lcdinit(void) -{ - /* the following line works because main memory is direct mapped */ - gpioregs->direction |= - GPIO_LDD8_o|GPIO_LDD9_o|GPIO_LDD10_o|GPIO_LDD11_o - |GPIO_LDD12_o|GPIO_LDD13_o|GPIO_LDD14_o|GPIO_LDD15_o; - gpioregs->altfunc |= - GPIO_LDD8_o|GPIO_LDD9_o|GPIO_LDD10_o|GPIO_LDD11_o - |GPIO_LDD12_o|GPIO_LDD13_o|GPIO_LDD14_o|GPIO_LDD15_o; - framebuf->palette[0] = Pal0; - lcd->dbar1 = framebuf->palette; - lcd->lccr3 = pcd<lccr2 = (Wid-1)<lccr1 = (Ht-16)<lccr0 = 1<r = Rect(0, 0, Ht, Wid); - gscreen->clipr = gscreen->r; - gscreen->width = Ht/2; - xgdata.bdata = (uchar *)framebuf->pixel; - } else { - gscreen->r = Rect(0, 0, Wid, Ht); - gscreen->clipr = gscreen->r; - gscreen->width = Wid/2; - xgdata.bdata = (uchar *)vscreen; - } - landscape = ls; -} - -void -lcdtweak(Cmdbuf *cmd) -{ - if(cmd->nf < 4) - return; - if(*cmd->f[0] == 'h') - lcd->lccr1 = ((Ht-16)<f[1], 0, 0)<f[2], 0, 0)<f[3], 0, 0)<f[0] == 'v') - lcd->lccr2 = ((Wid-1)<f[1], 0, 0)<f[2], 0, 0)<f[3], 0, 0)<r = Rect(0, 0, Ht, Wid); - gscreen->clipr = gscreen->r; - gscreen->width = Ht/2; - xgdata.bdata = (uchar *)framebuf->pixel; - while (i < Wid*Ht*1/3) framebuf->pixel[i++] = 0xf800; /* red */ - while (i < Wid*Ht*2/3) framebuf->pixel[i++] = 0xffff; /* white */ - while (i < Wid*Ht*3/3) framebuf->pixel[i++] = 0x001f; /* blue */ - } else { - gscreen->r = Rect(0, 0, Wid, Ht); - gscreen->clipr = gscreen->r; - gscreen->width = Wid/2; - xgdata.bdata = (uchar *)vscreen; - while (i < Wid*Ht*1/3) vscreen[i++] = 0xf800; /* red */ - while (i < Wid*Ht*2/3) vscreen[i++] = 0xffff; /* white */ - while (i < Wid*Ht*3/3) vscreen[i++] = 0x001f; /* blue */ - flushmemscreen(gscreen->r); - } - memimageinit(); - memdefont = getmemdefont(); - - out.pos.x = MINX; - out.pos.y = 0; - out.bwid = memdefont->info[' '].width; - - blanktime = 3; /* minutes */ - - screenwin(); -// screenputs = bitsyscreenputs; - screenputs = nil; -} - -void -flushmemscreen(Rectangle r) -{ - int x, y; - ulong start, end; - - if (landscape == 0) { - if (r.min.x < 0) r.min.x = 0; - if (r.max.x > Wid) r.max.x = Wid; - if (r.min.y < 0) r.min.y = 0; - if (r.max.y > Ht) r.max.y = Ht; - for (x = r.min.x; x < r.max.x; x++) - for (y = r.min.y; y < r.max.y; y++) - framebuf->pixel[(x+1)*Ht-1-y] = gamma[vscreen[y*Wid+x]]; - start = (ulong)&framebuf->pixel[(r.min.x+1)*Ht-1-(r.max.y-1)]; - end = (ulong)&framebuf->pixel[(r.max.x-1+1)*Ht-1-(r.min.y)]; - } else { - start = (ulong)&framebuf->pixel[r.min.y*Ht + r.min.x]; - end = (ulong)&framebuf->pixel[(r.max.y-1)*Ht + r.max.x - 1]; - } - cachewbregion(start, end-start); -} - -/* - * export screen to devdraw - */ -uchar* -attachscreen(Rectangle *r, ulong *chan, int* d, int *width, int *softscreen) -{ - *r = gscreen->r; - *d = gscreen->depth; - *chan = gscreen->chan; - *width = gscreen->width; - *softscreen = (landscape == 0); - - return (uchar*)gscreen->data->bdata; -} - -void -getcolor(ulong p, ulong* pr, ulong* pg, ulong* pb) -{ - USED(p, pr, pg, pb); -} - -int -setcolor(ulong p, ulong r, ulong g, ulong b) -{ - USED(p,r,g,b); - return 0; -} - -void -blankscreen(int blank) -{ - int cnt; - - if (blank) { - lcd->lccr0 &= ~(1<lcsr & (1< 0){ - i = chartorune(&r, s); - if(i == 0){ - s++; - --n; - continue; - } - memmove(buf, s, i); - buf[i] = 0; - n -= i; - s += i; - screenputc(buf); - } - unlock(&screenlock); -} - -static void -screenwin(void) -{ - Point p, q; - char *greet; - Memimage *orange; - Rectangle r; - - memsetchan(gscreen, RGB16); - - back = memwhite; - conscol = memblack; - - orange = allocmemimage(Rect(0,0,1,1), RGB16); - orange->flags |= Frepl; - orange->clipr = gscreen->r; - orange->data->bdata[0] = 0x40; - orange->data->bdata[1] = 0xfd; - - w = memdefont->info[' '].width; - h = memdefont->height; - - r = insetrect(gscreen->r, 4); - - memimagedraw(gscreen, r, memblack, ZP, memopaque, ZP, S); - window = insetrect(r, 4); - memimagedraw(gscreen, window, memwhite, ZP, memopaque, ZP, S); - - memimagedraw(gscreen, Rect(window.min.x, window.min.y, - window.max.x, window.min.y+h+5+6), orange, ZP, nil, ZP, S); - freememimage(orange); - window = insetrect(window, 5); - - greet = " Plan 9 Console "; - p = addpt(window.min, Pt(10, 0)); - q = memsubfontwidth(memdefont, greet); - memimagestring(gscreen, p, conscol, ZP, memdefont, greet); - flushmemscreen(r); - window.min.y += h+6; - curpos = window.min; - window.max.y = window.min.y+((window.max.y-window.min.y)/h)*h; -} - -static void -screenputc(char *buf) -{ - Point p; - int w, pos; - Rectangle r; - static int *xp; - static int xbuf[256]; - - if(xp < xbuf || xp >= &xbuf[sizeof(xbuf)]) - xp = xbuf; - - switch(buf[0]) { - case '\n': - if(curpos.y+h >= window.max.y) - scroll(); - curpos.y += h; - screenputc("\r"); - break; - case '\r': - xp = xbuf; - curpos.x = window.min.x; - break; - case '\t': - p = memsubfontwidth(memdefont, " "); - w = p.x; - if(curpos.x >= window.max.x-4*w) - screenputc("\n"); - - pos = (curpos.x-window.min.x)/w; - pos = 4-(pos%4); - *xp++ = curpos.x; - r = Rect(curpos.x, curpos.y, curpos.x+pos*w, curpos.y + h); - memimagedraw(gscreen, r, back, back->r.min, nil, back->r.min, S); - flushmemscreen(r); - curpos.x += pos*w; - break; - case '\b': - if(xp <= xbuf) - break; - xp--; - r = Rect(*xp, curpos.y, curpos.x, curpos.y + h); - memimagedraw(gscreen, r, back, back->r.min, nil, back->r.min, S); - flushmemscreen(r); - curpos.x = *xp; - break; - case '\0': - break; - default: - p = memsubfontwidth(memdefont, buf); - w = p.x; - - if(curpos.x >= window.max.x-w) - screenputc("\n"); - - *xp++ = curpos.x; - r = Rect(curpos.x, curpos.y, curpos.x+w, curpos.y + h); - memimagedraw(gscreen, r, back, back->r.min, nil, back->r.min, S); - memimagestring(gscreen, curpos, conscol, ZP, memdefont, buf); - flushmemscreen(r); - curpos.x += w; - } -} - -static void -scroll(void) -{ - int o; - Point p; - Rectangle r; - - o = 8*h; - r = Rpt(window.min, Pt(window.max.x, window.max.y-o)); - p = Pt(window.min.x, window.min.y+o); - memimagedraw(gscreen, r, gscreen, p, nil, p, S); - flushmemscreen(r); - r = Rpt(Pt(window.min.x, window.max.y-o), window.max); - memimagedraw(gscreen, r, back, ZP, nil, ZP, S); - flushmemscreen(r); - - curpos.y -= o; -} diff --git a/sys/src/9/bitsy/screen.h b/sys/src/9/bitsy/screen.h deleted file mode 100644 index e85b84992..000000000 --- a/sys/src/9/bitsy/screen.h +++ /dev/null @@ -1,14 +0,0 @@ -typedef struct Cursorinfo Cursorinfo; -typedef struct Cursor Cursor; - -extern ulong blanktime; - -struct Cursorinfo { - Lock; -}; - -extern void blankscreen(int); -extern void flushmemscreen(Rectangle); -extern uchar* attachscreen(Rectangle*, ulong*, int*, int*, int*); - -#define ishwimage(i) 0 diff --git a/sys/src/9/bitsy/sd.h b/sys/src/9/bitsy/sd.h deleted file mode 100644 index e69de29bb..000000000 diff --git a/sys/src/9/bitsy/sdata.c b/sys/src/9/bitsy/sdata.c deleted file mode 100644 index ac92c4bf1..000000000 --- a/sys/src/9/bitsy/sdata.c +++ /dev/null @@ -1,2087 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "../port/error.h" - -#include "../port/sd.h" - - -extern SDifc sdataifc; - -//BUG? -#define PCIWADDR(x) ((ulong)(x)) - -enum { - DbgCONFIG = 0x01, /* detected drive config info */ - DbgIDENTIFY = 0x02, /* detected drive identify info */ - DbgSTATE = 0x04, /* dump state on panic */ - DbgPROBE = 0x08, /* trace device probing */ - DbgDEBUG = 0x80, /* the current problem... */ -}; -#define DEBUG (DbgDEBUG|DbgSTATE|DbgCONFIG) - -enum { /* I/O ports */ - Data = 0, - Error = 1, /* (read) */ - Features = 1, /* (write) */ - Count = 2, /* sector count */ - Ir = 2, /* interrupt reason (PACKET) */ - Sector = 3, /* sector number, LBA<7-0> */ - Cyllo = 4, /* cylinder low, LBA<15-8> */ - Bytelo = 4, /* byte count low (PACKET) */ - Cylhi = 5, /* cylinder high, LBA<23-16> */ - Bytehi = 5, /* byte count hi (PACKET) */ - Dh = 6, /* Device/Head, LBA<32-14> */ - Status = 7, /* (read) */ - Command = 7, /* (write) */ - - As = 2, /* Alternate Status (read) */ - Dc = 2, /* Device Control (write) */ -}; - -enum { /* Error */ - Med = 0x01, /* Media error */ - Ili = 0x01, /* command set specific (PACKET) */ - Nm = 0x02, /* No Media */ - Eom = 0x02, /* command set specific (PACKET) */ - Abrt = 0x04, /* Aborted command */ - Mcr = 0x08, /* Media Change Request */ - Idnf = 0x10, /* no user-accessible address */ - Mc = 0x20, /* Media Change */ - Unc = 0x40, /* Uncorrectable data error */ - Wp = 0x40, /* Write Protect */ - Icrc = 0x80, /* Interface CRC error */ -}; - -enum { /* Features */ - Dma = 0x01, /* data transfer via DMA (PACKET) */ - Ovl = 0x02, /* command overlapped (PACKET) */ -}; - -enum { /* Interrupt Reason */ - Cd = 0x01, /* Command/Data */ - Io = 0x02, /* I/O direction */ - Rel = 0x04, /* Bus Release */ -}; - -enum { /* Device/Head */ - Dev0 = 0xA0, /* Master */ - Dev1 = 0xB0, /* Slave */ - Lba = 0x40, /* LBA mode */ -}; - -enum { /* Status, Alternate Status */ - Err = 0x01, /* Error */ - Chk = 0x01, /* Check error (PACKET) */ - Drq = 0x08, /* Data Request */ - Dsc = 0x10, /* Device Seek Complete */ - Serv = 0x10, /* Service */ - Df = 0x20, /* Device Fault */ - Dmrd = 0x20, /* DMA ready (PACKET) */ - Drdy = 0x40, /* Device Ready */ - Bsy = 0x80, /* Busy */ -}; - -enum { /* Command */ - Cnop = 0x00, /* NOP */ - Cdr = 0x08, /* Device Reset */ - Crs = 0x20, /* Read Sectors */ - Cws = 0x30, /* Write Sectors */ - Cedd = 0x90, /* Execute Device Diagnostics */ - Cpkt = 0xA0, /* Packet */ - Cidpkt = 0xA1, /* Identify Packet Device */ - Crsm = 0xC4, /* Read Multiple */ - Cwsm = 0xC5, /* Write Multiple */ - Csm = 0xC6, /* Set Multiple */ - Crdq = 0xC7, /* Read DMA queued */ - Crd = 0xC8, /* Read DMA */ - Cwd = 0xCA, /* Write DMA */ - Cwdq = 0xCC, /* Write DMA queued */ - Cstandby = 0xE2, /* Standby */ - Cid = 0xEC, /* Identify Device */ - Csf = 0xEF, /* Set Features */ -}; - -enum { /* Device Control */ - Nien = 0x02, /* (not) Interrupt Enable */ - Srst = 0x04, /* Software Reset */ -}; - -enum { /* PCI Configuration Registers */ - Bmiba = 0x20, /* Bus Master Interface Base Address */ - Idetim = 0x40, /* IE Timing */ - Sidetim = 0x44, /* Slave IE Timing */ - Udmactl = 0x48, /* Ultra DMA/33 Control */ - Udmatim = 0x4A, /* Ultra DMA/33 Timing */ -}; - -enum { /* Bus Master IDE I/O Ports */ - Bmicx = 0, /* Command */ - Bmisx = 2, /* Status */ - Bmidtpx = 4, /* Descriptor Table Pointer */ -}; - -enum { /* Bmicx */ - Ssbm = 0x01, /* Start/Stop Bus Master */ - Rwcon = 0x08, /* Read/Write Control */ -}; - -enum { /* Bmisx */ - Bmidea = 0x01, /* Bus Master IDE Active */ - Idedmae = 0x02, /* IDE DMA Error (R/WC) */ - Ideints = 0x04, /* IDE Interrupt Status (R/WC) */ - Dma0cap = 0x20, /* Drive 0 DMA Capable */ - Dma1cap = 0x40, /* Drive 0 DMA Capable */ -}; -enum { /* Physical Region Descriptor */ - PrdEOT = 0x80000000, /* Bus Master IDE Active */ -}; - -enum { /* offsets into the identify info. */ - Iconfig = 0, /* general configuration */ - Ilcyl = 1, /* logical cylinders */ - Ilhead = 3, /* logical heads */ - Ilsec = 6, /* logical sectors per logical track */ - Iserial = 10, /* serial number */ - Ifirmware = 23, /* firmware revision */ - Imodel = 27, /* model number */ - Imaxrwm = 47, /* max. read/write multiple sectors */ - Icapabilities = 49, /* capabilities */ - Istandby = 50, /* device specific standby timer */ - Ipiomode = 51, /* PIO data transfer mode number */ - Ivalid = 53, - Iccyl = 54, /* cylinders if (valid&0x01) */ - Ichead = 55, /* heads if (valid&0x01) */ - Icsec = 56, /* sectors if (valid&0x01) */ - Iccap = 57, /* capacity if (valid&0x01) */ - Irwm = 59, /* read/write multiple */ - Ilba0 = 60, /* LBA size */ - Ilba1 = 61, /* LBA size */ - Imwdma = 63, /* multiword DMA mode */ - Iapiomode = 64, /* advanced PIO modes supported */ - Iminmwdma = 65, /* min. multiword DMA cycle time */ - Irecmwdma = 66, /* rec. multiword DMA cycle time */ - Iminpio = 67, /* min. PIO cycle w/o flow control */ - Iminiordy = 68, /* min. PIO cycle with IORDY */ - Ipcktbr = 71, /* time from PACKET to bus release */ - Iserbsy = 72, /* time from SERVICE to !Bsy */ - Iqdepth = 75, /* max. queue depth */ - Imajor = 80, /* major version number */ - Iminor = 81, /* minor version number */ - Icsfs = 82, /* command set/feature supported */ - Icsfe = 85, /* command set/feature enabled */ - Iudma = 88, /* ultra DMA mode */ - Ierase = 89, /* time for security erase */ - Ieerase = 90, /* time for enhanced security erase */ - Ipower = 91, /* current advanced power management */ - Irmsn = 127, /* removable status notification */ - Istatus = 128, /* security status */ -}; - -typedef struct Ctlr Ctlr; -typedef struct Drive Drive; - -typedef struct Prd { - ulong pa; /* Physical Base Address */ - int count; -} Prd; - -enum { - Nprd = SDmaxio/(64*1024)+2, -}; - -typedef struct Ctlr { - int cmdport; - int ctlport; - int irq; - int tbdf; - int bmiba; /* bus master interface base address */ - - void (*ienable)(Ctlr*); - SDev* sdev; - - Drive* drive[2]; - - Prd* prdt; /* physical region descriptor table */ - - QLock; /* current command */ - Drive* curdrive; - int command; /* last command issued (debugging) */ - Rendez; - int done; - - Lock; /* register access */ -} Ctlr; - -typedef struct Drive { - Ctlr* ctlr; - - int dev; - ushort info[256]; - int c; /* cylinder */ - int h; /* head */ - int s; /* sector */ - int sectors; /* total */ - int secsize; /* sector size */ - - int dma; /* DMA R/W possible */ - int dmactl; - int rwm; /* read/write multiple possible */ - int rwmctl; - - int pkt; /* PACKET device, length of pktcmd */ - uchar pktcmd[16]; - int pktdma; /* this PACKET command using dma */ - - uchar sense[18]; - uchar inquiry[48]; - - QLock; /* drive access */ - int command; /* current command */ - int write; - uchar* data; - int dlen; - uchar* limit; - int count; /* sectors */ - int block; /* R/W bytes per block */ - int status; - int error; -} Drive; - - - -static void -atadumpstate(Drive* drive, uchar* cmd, int lba, int count) -{ - Prd *prd; - Ctlr *ctlr; - int i, bmiba; - - if(!(DEBUG & DbgSTATE)){ - USED(drive, cmd, lba, count); - return; - } - - ctlr = drive->ctlr; - print("command %2.2uX\n", ctlr->command); - print("data %8.8p limit %8.8p dlen %d status %uX error %uX\n", - drive->data, drive->limit, drive->dlen, - drive->status, drive->error); - if(cmd != nil){ - print("lba %d -> %d, count %d -> %d (%d)\n", - (cmd[2]<<24)|(cmd[3]<<16)|(cmd[4]<<8)|cmd[5], lba, - (cmd[7]<<8)|cmd[8], count, drive->count); - } - if(!(inb(ctlr->ctlport+As) & Bsy)){ - for(i = 1; i < 7; i++) - print(" 0x%2.2uX", inb(ctlr->cmdport+i)); - print(" 0x%2.2uX\n", inb(ctlr->ctlport+As)); - } - if(drive->command == Cwd || drive->command == Crd){ - bmiba = ctlr->bmiba; - prd = ctlr->prdt; - print("bmicx %2.2uX bmisx %2.2uX prdt %8.8p\n", - inb(bmiba+Bmicx), inb(bmiba+Bmisx), prd); - for(;;){ - print("pa 0x%8.8luX count %8.8uX\n", - prd->pa, prd->count); - if(prd->count & PrdEOT) - break; - prd++; - } - } -} - -static int -atadebug(int cmdport, int ctlport, char* fmt, ...) -{ - int i, n; - va_list arg; - char buf[PRINTSIZE]; - - if(!(DEBUG & DbgPROBE)){ - USED(cmdport, ctlport, fmt); - return 0; - } - - va_start(arg, fmt); - n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf; - va_end(arg); - - if(cmdport){ - if(buf[n-1] == '\n') - n--; - n += snprint(buf+n, PRINTSIZE-n, " ataregs 0x%uX:", - cmdport); - for(i = Features; i < Command; i++) - n += snprint(buf+n, PRINTSIZE-n, " 0x%2.2uX", - inb(cmdport+i)); - if(ctlport) - n += snprint(buf+n, PRINTSIZE-n, " 0x%2.2uX", - inb(ctlport+As)); - n += snprint(buf+n, PRINTSIZE-n, "\n"); - } - putstrn(buf, n); - - return n; -} - -static int -ataready(int cmdport, int ctlport, int dev, int reset, int ready, int micro) -{ - int as; - - atadebug(cmdport, ctlport, "ataready: dev %uX reset %uX ready %uX", - dev, reset, ready); - - for(;;){ - /* - * Wait for the controller to become not busy and - * possibly for a status bit to become true (usually - * Drdy). Must change to the appropriate device - * register set if necessary before testing for ready. - * Always run through the loop at least once so it - * can be used as a test for !Bsy. - */ - as = inb(ctlport+As); - if((as & reset) == 0){ - if(dev){ - outb(cmdport+Dh, dev); - dev = 0; - } - else if(ready == 0 || (as & ready)){ - atadebug(0, 0, "ataready: %d 0x%2.2uX\n", micro, as); - return as; - } - } - if(micro-- <= 0){ - atadebug(0, 0, "ataready: %d 0x%2.2uX\n", micro, as); - break; - } - microdelay(4); - } - atadebug(cmdport, ctlport, "ataready: timeout"); - - return -1; -} - -static int -atacsf(Drive* drive, vlong csf, int supported) -{ - ushort *info; - int cmdset, i, x; - - if(supported) - info = &drive->info[Icsfs]; - else - info = &drive->info[Icsfe]; - - for(i = 0; i < 3; i++){ - x = (csf>>(16*i)) & 0xFFFF; - if(x == 0) - continue; - cmdset = info[i]; - if(cmdset == 0 || cmdset == 0xFFFF) - return 0; - return cmdset & x; - } - - return 0; -} - -static int -atadone(void* arg) -{ - return ((Ctlr*)arg)->done; -} - -static int -atarwmmode(Drive* drive, int cmdport, int ctlport, int dev) -{ - int as, maxrwm, rwm; - - maxrwm = (drive->info[Imaxrwm] & 0xFF); - if(maxrwm == 0) - return 0; - - /* - * Sometimes drives come up with the current count set - * to 0; if so, set a suitable value, otherwise believe - * the value in Irwm if the 0x100 bit is set. - */ - if(drive->info[Irwm] & 0x100) - rwm = (drive->info[Irwm] & 0xFF); - else - rwm = 0; - if(rwm == 0) - rwm = maxrwm; - if(rwm > 16) - rwm = 16; - if(ataready(cmdport, ctlport, dev, Bsy|Drq, Drdy, 102*1000) < 0) - return 0; - outb(cmdport+Count, rwm); - outb(cmdport+Command, Csm); - microdelay(4); - as = ataready(cmdport, ctlport, 0, Bsy, Drdy|Df|Err, 1000); - inb(cmdport+Status); - if(as < 0 || (as & (Df|Err))) - return 0; - - drive->rwm = rwm; - - return rwm; -} - -static int -atadmamode(Drive* drive) -{ - int dma; - - /* - * Check if any DMA mode enabled. - * Assumes the BIOS has picked and enabled the best. - * This is completely passive at the moment, no attempt is - * made to ensure the hardware is correctly set up. - */ - dma = drive->info[Imwdma] & 0x0707; - drive->dma = (dma>>8) & dma; - if(drive->dma == 0 && (drive->info[Ivalid] & 0x04)){ - dma = drive->info[Iudma] & 0x1F1F; - drive->dma = (dma>>8) & dma; - if(drive->dma) - drive->dma |= 'U'<<16; - } - - return dma; -} - -static int -ataidentify(int cmdport, int ctlport, int dev, int pkt, void* info) -{ - int as, command, drdy; - - if(pkt){ - command = Cidpkt; - drdy = 0; - } - else{ - command = Cid; - drdy = Drdy; - } - as = ataready(cmdport, ctlport, dev, Bsy|Drq, drdy, 103*1000); - if(as < 0) - return as; - outb(cmdport+Command, command); - microdelay(4); - - as = ataready(cmdport, ctlport, 0, Bsy, Drq|Err, 400*1000); - if(as < 0) - return -1; - if(as & Err) - return as; - - memset(info, 0, 512); - inss(cmdport+Data, info, 256); - inb(cmdport+Status); - - if(DEBUG & DbgIDENTIFY){ - int i; - ushort *sp; - - sp = (ushort*)info; - for(i = 0; i < 32; i++){ - if(i && (i%16) == 0) - print("\n"); - print(" %4.4uX", *sp); - sp++; - } - print("\n"); - } - - return 0; -} - -static Drive* -atadrive(int cmdport, int ctlport, int dev) -{ - ushort *sp; - Drive *drive; - int as, i, pkt; - uchar buf[512], *p; - - atadebug(0, 0, "identify: port 0x%uX dev 0x%2.2uX\n", cmdport, dev); - pkt = 1; -retry: - as = ataidentify(cmdport, ctlport, dev, pkt, buf); - if(as < 0) - return nil; - if(as & Err){ - if(pkt == 0) - return nil; - pkt = 0; - goto retry; - } - - if((drive = malloc(sizeof(Drive))) == nil) - return nil; - drive->dev = dev; - memmove(drive->info, buf, sizeof(drive->info)); - drive->sense[0] = 0x70; - drive->sense[7] = sizeof(drive->sense)-7; - - drive->inquiry[2] = 2; - drive->inquiry[3] = 2; - drive->inquiry[4] = sizeof(drive->inquiry)-4; - p = &drive->inquiry[8]; - sp = &drive->info[Imodel]; - for(i = 0; i < 20; i++){ - *p++ = *sp>>8; - *p++ = *sp++; - } - - drive->secsize = 512; - if(drive->info[Iconfig] != 0x848A && (drive->info[Iconfig] & 0xC000) == 0x8000){ - if(drive->info[Iconfig] & 0x01) - drive->pkt = 16; - else - drive->pkt = 12; - } - else{ - if(drive->info[Ivalid] & 0x0001){ - drive->c = drive->info[Ilcyl]; - drive->h = drive->info[Ilhead]; - drive->s = drive->info[Ilsec]; - } - else{ - drive->c = drive->info[Iccyl]; - drive->h = drive->info[Ichead]; - drive->s = drive->info[Icsec]; - } - if(drive->info[Icapabilities] & 0x0200){ - drive->sectors = (drive->info[Ilba1]<<16) - |drive->info[Ilba0]; - drive->dev |= Lba; - } - else - drive->sectors = drive->c*drive->h*drive->s; - atarwmmode(drive, cmdport, ctlport, dev); - } - atadmamode(drive); - - if(DEBUG & DbgCONFIG){ - print("dev %2.2uX port %uX config %4.4uX capabilities %4.4uX", - dev, cmdport, - drive->info[Iconfig], drive->info[Icapabilities]); - print(" mwdma %4.4uX", drive->info[Imwdma]); - if(drive->info[Ivalid] & 0x04) - print(" udma %4.4uX", drive->info[Iudma]); - print(" dma %8.8uX rwm %ud\n", drive->dma, drive->rwm); - } - - return drive; -} - -static void -atasrst(int ctlport) -{ - /* - * Srst is a big stick and may cause problems if further - * commands are tried before the drives become ready again. - * Also, there will be problems here if overlapped commands - * are ever supported. - */ - microdelay(20); - outb(ctlport+Dc, Srst); - microdelay(20); - outb(ctlport+Dc, 0); - microdelay(4*1000); -} - -static SDev* -ataprobe(int cmdport, int ctlport, int irq) -{ - Ctlr* ctlr; - SDev *sdev; - Drive *drive; - int dev, error, rhi, rlo; - - /* - * Try to detect a floating bus. - * Bsy should be cleared. If not, see if the cylinder registers - * are read/write capable. - * If the master fails, try the slave to catch slave-only - * configurations. - * There's no need to restore the tested registers as they will - * be reset on any detected drives by the Cedd command. - * All this indicates is that there is at least one drive on the - * controller; when the non-existent drive is selected in a - * single-drive configuration the registers of the existing drive - * are often seen, only command execution fails. - */ - dev = Dev0; - if(inb(ctlport+As) & Bsy){ - outb(cmdport+Dh, dev); - microdelay(5); -trydev1: - atadebug(cmdport, ctlport, "ataprobe bsy"); - outb(cmdport+Cyllo, 0xAA); - outb(cmdport+Cylhi, 0x55); - outb(cmdport+Sector, 0xFF); - rlo = inb(cmdport+Cyllo); - rhi = inb(cmdport+Cylhi); - if(rlo != 0xAA && (rlo == 0xFF || rhi != 0x55)){ - if(dev == Dev1){ -release: - return nil; - } - dev = Dev1; - if(ataready(cmdport, ctlport, dev, Bsy, 0, 20*1000) < 0) - goto trydev1; - } - } - - /* - * Disable interrupts on any detected controllers. - */ - outb(ctlport+Dc, Nien); -tryedd1: - if(ataready(cmdport, ctlport, dev, Bsy|Drq, 0, 105*1000) < 0){ - /* - * There's something there, but it didn't come up clean, - * so try hitting it with a big stick. The timing here is - * wrong but this is a last-ditch effort and it sometimes - * gets some marginal hardware back online. - */ - atasrst(ctlport); - if(ataready(cmdport, ctlport, dev, Bsy|Drq, 0, 106*1000) < 0) - goto release; - } - - /* - * Can only get here if controller is not busy. - * If there are drives Bsy will be set within 400nS, - * must wait 2mS before testing Status. - * Wait for the command to complete (6 seconds max). - */ - outb(cmdport+Command, Cedd); - delay(5); - if(ataready(cmdport, ctlport, dev, Bsy|Drq, 0, 6*1000*1000) < 0) - goto release; - - /* - * If bit 0 of the error register is set then the selected drive - * exists. This is enough to detect single-drive configurations. - * However, if the master exists there is no way short of executing - * a command to determine if a slave is present. - * It appears possible to get here testing Dev0 although it doesn't - * exist and the EDD won't take, so try again with Dev1. - */ - error = inb(cmdport+Error); - atadebug(cmdport, ctlport, "ataprobe: dev %uX", dev); - if((error & ~0x80) != 0x01){ - if(dev == Dev1) - goto release; - dev = Dev1; - goto tryedd1; - } - - /* - * At least one drive is known to exist, try to - * identify it. If that fails, don't bother checking - * any further. - * If the one drive found is Dev0 and the EDD command - * didn't indicate Dev1 doesn't exist, check for it. - */ - if((drive = atadrive(cmdport, ctlport, dev)) == nil) - goto release; - if((ctlr = malloc(sizeof(Ctlr))) == nil){ - free(drive); - goto release; - } - if((sdev = malloc(sizeof(SDev))) == nil){ - free(ctlr); - free(drive); - goto release; - } - drive->ctlr = ctlr; - if(dev == Dev0){ - ctlr->drive[0] = drive; -#ifdef notdef - if(!(error & 0x80)){ - /* - * Always leave Dh pointing to a valid drive, - * otherwise a subsequent call to ataready on - * this controller may try to test a bogus Status. - * Ataprobe is the only place possibly invalid - * drives should be selected. - */ - drive = atadrive(cmdport, ctlport, Dev1); - if(drive != nil){ - drive->ctlr = ctlr; - ctlr->drive[1] = drive; - } - else{ - outb(cmdport+Dh, Dev0); - microdelay(1); - } - } -#endif - } - else - ctlr->drive[1] = drive; - - ctlr->cmdport = cmdport; - ctlr->ctlport = ctlport; - ctlr->irq = irq; - ctlr->tbdf = -1; - ctlr->command = Cedd; /* debugging */ - - sdev->ifc = &sdataifc; - sdev->ctlr = ctlr; - sdev->idno = 'C'; - sdev->nunit = 1; - ctlr->sdev = sdev; - - return sdev; -} - -static int -atasetsense(Drive* drive, int status, int key, int asc, int ascq) -{ - drive->sense[2] = key; - drive->sense[12] = asc; - drive->sense[13] = ascq; - - return status; -} - -static int -atastandby(Drive* drive, int period) -{ - Ctlr* ctlr; - int cmdport, done; - - ctlr = drive->ctlr; - drive->command = Cstandby; - qlock(ctlr); - - cmdport = ctlr->cmdport; - ilock(ctlr); - outb(cmdport+Count, period); - outb(cmdport+Dh, drive->dev); - ctlr->done = 0; - ctlr->curdrive = drive; - ctlr->command = Cstandby; /* debugging */ - outb(cmdport+Command, Cstandby); - iunlock(ctlr); - - while(waserror()) - ; - tsleep(ctlr, atadone, ctlr, 30*1000); - poperror(); - - done = ctlr->done; - qunlock(ctlr); - - if(!done || (drive->status & Err)) - return atasetsense(drive, SDcheck, 4, 8, drive->error); - return SDok; -} - -static int -atamodesense(Drive* drive, uchar* cmd) -{ - int len; - - /* - * Fake a vendor-specific request with page code 0, - * return the drive info. - */ - if((cmd[2] & 0x3F) != 0 && (cmd[2] & 0x3F) != 0x3F) - return atasetsense(drive, SDcheck, 0x05, 0x24, 0); - len = (cmd[7]<<8)|cmd[8]; - if(len == 0) - return SDok; - if(len < 8+sizeof(drive->info)) - return atasetsense(drive, SDcheck, 0x05, 0x1A, 0); - if(drive->data == nil || drive->dlen < len) - return atasetsense(drive, SDcheck, 0x05, 0x20, 1); - memset(drive->data, 0, 8); - drive->data[0] = sizeof(drive->info)>>8; - drive->data[1] = sizeof(drive->info); - memmove(drive->data+8, drive->info, sizeof(drive->info)); - drive->data += 8+sizeof(drive->info); - - return SDok; -} - -static void -atanop(Drive* drive, int subcommand) -{ - Ctlr* ctlr; - int as, cmdport, ctlport, timeo; - - /* - * Attempt to abort a command by using NOP. - * In response, the drive is supposed to set Abrt - * in the Error register, set (Drdy|Err) in Status - * and clear Bsy when done. However, some drives - * (e.g. ATAPI Zip) just go Bsy then clear Status - * when done, hence the timeout loop only on Bsy - * and the forced setting of drive->error. - */ - ctlr = drive->ctlr; - cmdport = ctlr->cmdport; - outb(cmdport+Features, subcommand); - outb(cmdport+Dh, drive->dev); - ctlr->command = Cnop; /* debugging */ - outb(cmdport+Command, Cnop); - - microdelay(1); - ctlport = ctlr->ctlport; - for(timeo = 0; timeo < 1000; timeo++){ - as = inb(ctlport+As); - if(!(as & Bsy)) - break; - microdelay(1); - } - drive->error |= Abrt; -} - -static void -ataabort(Drive* drive, int dolock) -{ - /* - * If NOP is available (packet commands) use it otherwise - * must try a software reset. - */ - if(dolock) - ilock(drive->ctlr); - if(atacsf(drive, 0x0000000000004000LL, 0)) - atanop(drive, 0); - else{ - atasrst(drive->ctlr->ctlport); - drive->error |= Abrt; - } - if(dolock) - iunlock(drive->ctlr); -} - -static int -atadmasetup(Drive* drive, int ) -{ - drive->dmactl = 0; - return -1; - -#ifdef notdef - Prd *prd; - ulong pa; - Ctlr *ctlr; - int bmiba, bmisx, count; - - pa = PCIWADDR(drive->data); - if(pa & 0x03) - return -1; - ctlr = drive->ctlr; - prd = ctlr->prdt; - - /* - * Sometimes drives identify themselves as being DMA capable - * although they are not on a busmastering controller. - */ - if(prd == nil){ - drive->dmactl = 0; - return -1; - } - - for(;;){ - prd->pa = pa; - count = 64*1024 - (pa & 0xFFFF); - if(count >= len){ - prd->count = PrdEOT|(len & 0xFFFF); - break; - } - prd->count = count; - len -= count; - pa += count; - prd++; - } - - bmiba = ctlr->bmiba; - outl(bmiba+Bmidtpx, PCIWADDR(ctlr->prdt)); - if(drive->write) - outb(ctlr->bmiba+Bmicx, 0); - else - outb(ctlr->bmiba+Bmicx, Rwcon); - bmisx = inb(bmiba+Bmisx); - outb(bmiba+Bmisx, bmisx|Ideints|Idedmae); - - return 0; -#endif -} - -static void -atadmastart(Ctlr* ctlr, int write) -{ - if(write) - outb(ctlr->bmiba+Bmicx, Ssbm); - else - outb(ctlr->bmiba+Bmicx, Rwcon|Ssbm); -} - -static int -atadmastop(Ctlr* ctlr) -{ - int bmiba; - - bmiba = ctlr->bmiba; - outb(bmiba+Bmicx, inb(bmiba+Bmicx) & ~Ssbm); - - return inb(bmiba+Bmisx); -} - -static void -atadmainterrupt(Drive* drive, int count) -{ - Ctlr* ctlr; - int bmiba, bmisx; - - ctlr = drive->ctlr; - bmiba = ctlr->bmiba; - bmisx = inb(bmiba+Bmisx); - switch(bmisx & (Ideints|Idedmae|Bmidea)){ - case Bmidea: - /* - * Data transfer still in progress, nothing to do - * (this should never happen). - */ - return; - - case Ideints: - case Ideints|Bmidea: - /* - * Normal termination, tidy up. - */ - drive->data += count; - break; - - default: - /* - * What's left are error conditions (memory transfer - * problem) and the device is not done but the PRD is - * exhausted. For both cases must somehow tell the - * drive to abort. - */ - ataabort(drive, 0); - break; - } - atadmastop(ctlr); - ctlr->done = 1; -} - -static void -atapktinterrupt(Drive* drive) -{ - Ctlr* ctlr; - int cmdport, len; - - ctlr = drive->ctlr; - cmdport = ctlr->cmdport; - switch(inb(cmdport+Ir) & (/*Rel|*/Io|Cd)){ - case Cd: - outss(cmdport+Data, drive->pktcmd, drive->pkt/2); - break; - - case 0: - len = (inb(cmdport+Bytehi)<<8)|inb(cmdport+Bytelo); - if(drive->data+len > drive->limit){ - atanop(drive, 0); - break; - } - outss(cmdport+Data, drive->data, len/2); - drive->data += len; - break; - - case Io: - len = (inb(cmdport+Bytehi)<<8)|inb(cmdport+Bytelo); - if(drive->data+len > drive->limit){ - atanop(drive, 0); - break; - } - inss(cmdport+Data, drive->data, len/2); - drive->data += len; - break; - - case Io|Cd: - if(drive->pktdma) - atadmainterrupt(drive, drive->dlen); - else - ctlr->done = 1; - break; - } -} - -static int -atapktio(Drive* drive, uchar* cmd, int clen) -{ - Ctlr *ctlr; - int as, cmdport, ctlport, len, r, timeo; - - if(cmd[0] == 0x5A && (cmd[2] & 0x3F) == 0) - return atamodesense(drive, cmd); - - r = SDok; - - drive->command = Cpkt; - memmove(drive->pktcmd, cmd, clen); - memset(drive->pktcmd+clen, 0, drive->pkt-clen); - drive->limit = drive->data+drive->dlen; - - ctlr = drive->ctlr; - cmdport = ctlr->cmdport; - ctlport = ctlr->ctlport; - - qlock(ctlr); - - if(ataready(cmdport, ctlport, drive->dev, Bsy|Drq, 0, 107*1000) < 0){ - qunlock(ctlr); - return -1; - } - - ilock(ctlr); - if(drive->dlen && drive->dmactl && !atadmasetup(drive, drive->dlen)) - drive->pktdma = Dma; - else - drive->pktdma = 0; - - outb(cmdport+Features, drive->pktdma); - outb(cmdport+Count, 0); - outb(cmdport+Sector, 0); - len = 16*drive->secsize; - outb(cmdport+Bytelo, len); - outb(cmdport+Bytehi, len>>8); - outb(cmdport+Dh, drive->dev); - ctlr->done = 0; - ctlr->curdrive = drive; - ctlr->command = Cpkt; /* debugging */ - if(drive->pktdma) - atadmastart(ctlr, drive->write); - outb(cmdport+Command, Cpkt); - - if((drive->info[Iconfig] & 0x0060) != 0x0020){ - microdelay(1); - as = ataready(cmdport, ctlport, 0, Bsy, Drq|Chk, 4*1000); - if(as < 0) - r = SDtimeout; - else if(as & Chk) - r = SDcheck; - else - atapktinterrupt(drive); - } - iunlock(ctlr); - - while(waserror()) - ; - if(!drive->pktdma) - sleep(ctlr, atadone, ctlr); - else for(timeo = 0; !ctlr->done; timeo++){ - tsleep(ctlr, atadone, ctlr, 1000); - if(ctlr->done) - break; - ilock(ctlr); - atadmainterrupt(drive, 0); - if(!drive->error && timeo > 10){ - ataabort(drive, 0); - atadmastop(ctlr); - drive->dmactl = 0; - drive->error |= Abrt; - } - if(drive->error){ - drive->status |= Chk; - ctlr->curdrive = nil; - } - iunlock(ctlr); - } - poperror(); - - qunlock(ctlr); - - if(drive->status & Chk) - r = SDcheck; - - return r; -} - -static int -atageniostart(Drive* drive, int lba) -{ - Ctlr *ctlr; - int as, c, cmdport, ctlport, h, len, s; - - if(drive->dev & Lba){ - c = (lba>>8) & 0xFFFF; - h = (lba>>24) & 0x0F; - s = lba & 0xFF; - } - else{ - c = lba/(drive->s*drive->h); - h = ((lba/drive->s) % drive->h); - s = (lba % drive->s) + 1; - } - - ctlr = drive->ctlr; - cmdport = ctlr->cmdport; - ctlport = ctlr->ctlport; - if(ataready(cmdport, ctlport, drive->dev, Bsy|Drq, 0, 101*1000) < 0) - return -1; - - ilock(ctlr); - if(drive->dmactl && !atadmasetup(drive, drive->count*drive->secsize)){ - if(drive->write) - drive->command = Cwd; - else - drive->command = Crd; - } - else if(drive->rwmctl){ - drive->block = drive->rwm*drive->secsize; - if(drive->write) - drive->command = Cwsm; - else - drive->command = Crsm; - } - else{ - drive->block = drive->secsize; - if(drive->write) - drive->command = Cws; - else - drive->command = Crs; - } - drive->limit = drive->data + drive->count*drive->secsize; - - outb(cmdport+Count, drive->count); - outb(cmdport+Sector, s); - outb(cmdport+Dh, drive->dev|h); - outb(cmdport+Cyllo, c); - outb(cmdport+Cylhi, c>>8); - ctlr->done = 0; - ctlr->curdrive = drive; - ctlr->command = drive->command; /* debugging */ - outb(cmdport+Command, drive->command); - - switch(drive->command){ - case Cws: - case Cwsm: - microdelay(1); - as = ataready(cmdport, ctlport, 0, Bsy, Drq|Err, 1000); - if(as < 0 || (as & Err)){ - iunlock(ctlr); - return -1; - } - len = drive->block; - if(drive->data+len > drive->limit) - len = drive->limit-drive->data; - outss(cmdport+Data, drive->data, len/2); - break; - - case Crd: - case Cwd: - atadmastart(ctlr, drive->write); - break; - } - iunlock(ctlr); - - return 0; -} - -static int -atagenioretry(Drive* drive) -{ - if(drive->dmactl) - drive->dmactl = 0; - else if(drive->rwmctl) - drive->rwmctl = 0; - else - return atasetsense(drive, SDcheck, 4, 8, drive->error); - - return SDretry; -} - -static int -atagenio(Drive* drive, uchar* cmd, int) -{ - uchar *p; - Ctlr *ctlr; - int count, lba, len; - - /* - * Map SCSI commands into ATA commands for discs. - * Fail any command with a LUN except INQUIRY which - * will return 'logical unit not supported'. - */ - if((cmd[1]>>5) && cmd[0] != 0x12) - return atasetsense(drive, SDcheck, 0x05, 0x25, 0); - - switch(cmd[0]){ - default: - return atasetsense(drive, SDcheck, 0x05, 0x20, 0); - - case 0x00: /* test unit ready */ - return SDok; - - case 0x03: /* request sense */ - if(cmd[4] < sizeof(drive->sense)) - len = cmd[4]; - else - len = sizeof(drive->sense); - if(drive->data && drive->dlen >= len){ - memmove(drive->data, drive->sense, len); - drive->data += len; - } - return SDok; - - case 0x12: /* inquiry */ - if(cmd[4] < sizeof(drive->inquiry)) - len = cmd[4]; - else - len = sizeof(drive->inquiry); - if(drive->data && drive->dlen >= len){ - memmove(drive->data, drive->inquiry, len); - drive->data += len; - } - return SDok; - - case 0x1B: /* start/stop unit */ - /* - * NOP for now, can use the power management feature - * set later. - */ - return SDok; - - case 0x25: /* read capacity */ - if((cmd[1] & 0x01) || cmd[2] || cmd[3]) - return atasetsense(drive, SDcheck, 0x05, 0x24, 0); - if(drive->data == nil || drive->dlen < 8) - return atasetsense(drive, SDcheck, 0x05, 0x20, 1); - /* - * Read capacity returns the LBA of the last sector. - */ - len = drive->sectors-1; - p = drive->data; - *p++ = len>>24; - *p++ = len>>16; - *p++ = len>>8; - *p++ = len; - len = drive->secsize; - *p++ = len>>24; - *p++ = len>>16; - *p++ = len>>8; - *p = len; - drive->data += 8; - return SDok; - - case 0x28: /* read */ - case 0x2A: /* write */ - break; - - case 0x5A: - return atamodesense(drive, cmd); - } - - ctlr = drive->ctlr; - lba = (cmd[2]<<24)|(cmd[3]<<16)|(cmd[4]<<8)|cmd[5]; - count = (cmd[7]<<8)|cmd[8]; - if(drive->data == nil) - return SDok; - if(drive->dlen < count*drive->secsize) - count = drive->dlen/drive->secsize; - qlock(ctlr); - while(count){ - if(count > 256) - drive->count = 256; - else - drive->count = count; - if(atageniostart(drive, lba)){ - ilock(ctlr); - atanop(drive, 0); - iunlock(ctlr); - qunlock(ctlr); - return atagenioretry(drive); - } - - while(waserror()) - ; - tsleep(ctlr, atadone, ctlr, 30*1000); - poperror(); - if(!ctlr->done){ - /* - * What should the above timeout be? In - * standby and sleep modes it could take as - * long as 30 seconds for a drive to respond. - * Very hard to get out of this cleanly. - */ - atadumpstate(drive, cmd, lba, count); - ataabort(drive, 1); - qunlock(ctlr); - return atagenioretry(drive); - } - - if(drive->status & Err){ - qunlock(ctlr); - return atasetsense(drive, SDcheck, 4, 8, drive->error); - } - count -= drive->count; - lba += drive->count; - } - qunlock(ctlr); - - return SDok; -} - -static int -atario(SDreq* r) -{ - Ctlr *ctlr; - Drive *drive; - SDunit *unit; - uchar cmd10[10], *cmdp, *p; - int clen, reqstatus, status; - - unit = r->unit; - if((ctlr = unit->dev->ctlr) == nil || ctlr->drive[unit->subno] == nil){ - r->status = SDtimeout; - return SDtimeout; - } - drive = ctlr->drive[unit->subno]; - - /* - * Most SCSI commands can be passed unchanged except for - * the padding on the end. The few which require munging - * are not used internally. Mode select/sense(6) could be - * converted to the 10-byte form but it's not worth the - * effort. Read/write(6) are easy. - */ - switch(r->cmd[0]){ - case 0x08: /* read */ - case 0x0A: /* write */ - cmdp = cmd10; - memset(cmdp, 0, sizeof(cmd10)); - cmdp[0] = r->cmd[0]|0x20; - cmdp[1] = r->cmd[1] & 0xE0; - cmdp[5] = r->cmd[3]; - cmdp[4] = r->cmd[2]; - cmdp[3] = r->cmd[1] & 0x0F; - cmdp[8] = r->cmd[4]; - clen = sizeof(cmd10); - break; - - default: - cmdp = r->cmd; - clen = r->clen; - break; - } - - qlock(drive); -retry: - drive->write = r->write; - drive->data = r->data; - drive->dlen = r->dlen; - - drive->status = 0; - drive->error = 0; - if(drive->pkt) - status = atapktio(drive, cmdp, clen); - else - status = atagenio(drive, cmdp, clen); - if(status == SDretry){ - if(DbgDEBUG) - print("%s: retry: dma %8.8uX rwm %4.4uX\n", - unit->name, drive->dmactl, drive->rwmctl); - goto retry; - } - if(status == SDok){ - atasetsense(drive, SDok, 0, 0, 0); - if(drive->data){ - p = r->data; - r->rlen = drive->data - p; - } - else - r->rlen = 0; - } - else if(status == SDcheck && !(r->flags & SDnosense)){ - drive->write = 0; - memset(cmd10, 0, sizeof(cmd10)); - cmd10[0] = 0x03; - cmd10[1] = r->lun<<5; - cmd10[4] = sizeof(r->sense)-1; - drive->data = r->sense; - drive->dlen = sizeof(r->sense)-1; - drive->status = 0; - drive->error = 0; - if(drive->pkt) - reqstatus = atapktio(drive, cmd10, 6); - else - reqstatus = atagenio(drive, cmd10, 6); - if(reqstatus == SDok){ - r->flags |= SDvalidsense; - atasetsense(drive, SDok, 0, 0, 0); - } - } - qunlock(drive); - r->status = status; - if(status != SDok) - return status; - - /* - * Fix up any results. - * Many ATAPI CD-ROMs ignore the LUN field completely and - * return valid INQUIRY data. Patch the response to indicate - * 'logical unit not supported' if the LUN is non-zero. - */ - switch(cmdp[0]){ - case 0x12: /* inquiry */ - if((p = r->data) == nil) - break; - if((cmdp[1]>>5) && (!drive->pkt || (p[0] & 0x1F) == 0x05)) - p[0] = 0x7F; - /*FALLTHROUGH*/ - default: - break; - } - - return SDok; -} - - -static void -atainterrupt(Ureg*, void* arg) -{ - Ctlr *ctlr; - Drive *drive; - int cmdport, len, status; - - ctlr = arg; - - ilock(ctlr); - if(inb(ctlr->ctlport+As) & Bsy){ - iunlock(ctlr); - if(DEBUG & DbgDEBUG) - print("IBsy+"); - return; - } - cmdport = ctlr->cmdport; - status = inb(cmdport+Status); - if((drive = ctlr->curdrive) == nil){ - iunlock(ctlr); - if((DEBUG & DbgDEBUG) && ctlr->command != Cedd) - print("Inil%2.2uX/%2.2uX+", ctlr->command, status); - return; - } - - if(status & Err) - drive->error = inb(cmdport+Error); - else switch(drive->command){ - default: - drive->error = Abrt; - break; - - case Crs: - case Crsm: - if(!(status & Drq)){ - drive->error = Abrt; - break; - } - len = drive->block; - if(drive->data+len > drive->limit) - len = drive->limit-drive->data; - inss(cmdport+Data, drive->data, len/2); - drive->data += len; - if(drive->data >= drive->limit) - ctlr->done = 1; - break; - - case Cws: - case Cwsm: - len = drive->block; - if(drive->data+len > drive->limit) - len = drive->limit-drive->data; - drive->data += len; - if(drive->data >= drive->limit){ - ctlr->done = 1; - break; - } - if(!(status & Drq)){ - drive->error = Abrt; - break; - } - len = drive->block; - if(drive->data+len > drive->limit) - len = drive->limit-drive->data; - outss(cmdport+Data, drive->data, len/2); - break; - - case Cpkt: - atapktinterrupt(drive); - break; - - case Crd: - case Cwd: - atadmainterrupt(drive, drive->count*drive->secsize); - break; - - case Cstandby: - ctlr->done = 1; - break; - } - iunlock(ctlr); - - if(drive->error){ - status |= Err; - ctlr->done = 1; - } - - if(ctlr->done){ - ctlr->curdrive = nil; - drive->status = status; - wakeup(ctlr); - } -} - -#ifdef notdef -static SDev* -atapnp(void) -{ - int cmdport; - int ctlport; - int irq; - - cmdport = 0x200; - ctlport = cmdport + 0x0C; - irq = 10; - return ataprobe(cmdport, ctlport, irq); -} -#endif - - -static SDev* -atalegacy(int port, int irq) -{ - return ataprobe(port, port+0x204, irq); -} - -static int ataitype; -static int atairq; -static int -ataenable(SDev* sdev) -{ - Ctlr *ctlr; - char name[KNAMELEN]; - - ctlr = sdev->ctlr; - - if(ctlr->bmiba){ - ctlr->prdt = xspanalloc(Nprd*sizeof(Prd), 4, 4*1024); - } - snprint(name, KNAMELEN, "%s (%s)", sdev->name, sdev->ifc->name); -// intrenable(ctlr->irq, atainterrupt, ctlr, ctlr->tbdf, name); - outb(ctlr->ctlport+Dc, 0); - intrenable(ataitype, atairq, atainterrupt, ctlr, name); - if(ctlr->ienable) - ctlr->ienable(ctlr); - - return 1; -} - -static int -atarctl(SDunit* unit, char* p, int l) -{ - int n; - Ctlr *ctlr; - Drive *drive; - - if((ctlr = unit->dev->ctlr) == nil || ctlr->drive[unit->subno] == nil) - return 0; - drive = ctlr->drive[unit->subno]; - - qlock(drive); - n = snprint(p, l, "config %4.4uX capabilities %4.4uX", - drive->info[Iconfig], drive->info[Icapabilities]); - if(drive->dma) - n += snprint(p+n, l-n, " dma %8.8uX dmactl %8.8uX", - drive->dma, drive->dmactl); - if(drive->rwm) - n += snprint(p+n, l-n, " rwm %ud rwmctl %ud", - drive->rwm, drive->rwmctl); - n += snprint(p+n, l-n, "\n"); - if(unit->sectors){ - n += snprint(p+n, l-n, "geometry %llud %ld", - unit->sectors, unit->secsize); - if(drive->pkt == 0) - n += snprint(p+n, l-n, " %d %d %d", - drive->c, drive->h, drive->s); - n += snprint(p+n, l-n, "\n"); - } - qunlock(drive); - - return n; -} - -static int -atawctl(SDunit* unit, Cmdbuf* cb) -{ - int period; - Ctlr *ctlr; - Drive *drive; - - if((ctlr = unit->dev->ctlr) == nil || ctlr->drive[unit->subno] == nil) - return 0; - drive = ctlr->drive[unit->subno]; - - qlock(drive); - if(waserror()){ - qunlock(drive); - nexterror(); - } - - /* - * Dma and rwm control is passive at the moment, - * i.e. it is assumed that the hardware is set up - * correctly already either by the BIOS or when - * the drive was initially identified. - */ - if(strcmp(cb->f[0], "dma") == 0){ - if(cb->nf != 2 || drive->dma == 0) - error(Ebadctl); - if(strcmp(cb->f[1], "on") == 0) - drive->dmactl = drive->dma; - else if(strcmp(cb->f[1], "off") == 0) - drive->dmactl = 0; - else - error(Ebadctl); - } - else if(strcmp(cb->f[0], "rwm") == 0){ - if(cb->nf != 2 || drive->rwm == 0) - error(Ebadctl); - if(strcmp(cb->f[1], "on") == 0) - drive->rwmctl = drive->rwm; - else if(strcmp(cb->f[1], "off") == 0) - drive->rwmctl = 0; - else - error(Ebadctl); - } - else if(strcmp(cb->f[0], "standby") == 0){ - switch(cb->nf){ - default: - error(Ebadctl); - case 2: - period = strtol(cb->f[1], 0, 0); - if(period && (period < 30 || period > 240*5)) - error(Ebadctl); - period /= 5; - break; - } - if(atastandby(drive, period) != SDok) - error(Ebadctl); - } - else - error(Ebadctl); - qunlock(drive); - poperror(); - - return 0; -} - -static int -scsitest(SDreq* r) -{ - r->write = 0; - memset(r->cmd, 0, sizeof(r->cmd)); - r->cmd[1] = r->lun<<5; - r->clen = 6; - r->data = nil; - r->dlen = 0; - r->flags = 0; - - r->status = ~0; - - return r->unit->dev->ifc->rio(r); -} - -static int -scsirio(SDreq* r) -{ - /* - * Perform an I/O request, returning - * -1 failure - * 0 ok - * 1 no medium present - * 2 retry - * The contents of r may be altered so the - * caller should re-initialise if necesary. - */ - r->status = ~0; - switch(r->unit->dev->ifc->rio(r)){ - default: - break; - case SDcheck: - if(!(r->flags & SDvalidsense)) - break; - switch(r->sense[2] & 0x0F){ - case 0x00: /* no sense */ - case 0x01: /* recovered error */ - return 2; - case 0x06: /* check condition */ - /* - * 0x28 - not ready to ready transition, - * medium may have changed. - * 0x29 - power on or some type of reset. - */ - if(r->sense[12] == 0x28 && r->sense[13] == 0) - return 2; - if(r->sense[12] == 0x29) - return 2; - break; - case 0x02: /* not ready */ - /* - * If no medium present, bail out. - * If unit is becoming ready, rather than not - * not ready, wait a little then poke it again. */ - if(r->sense[12] == 0x3A) - break; - if(r->sense[12] != 0x04 || r->sense[13] != 0x01) - break; - - while(waserror()) - ; - tsleep(&up->sleep, return0, 0, 500); - poperror(); - scsitest(r); - return 2; - default: - break; - } - break; - case SDok: - return 0; - } - return -1; -} - - -static int -ataverify(SDunit* unit) -{ - SDreq *r; - int i, status; - uchar *inquiry; - - if((r = malloc(sizeof(SDreq))) == nil) - return 0; - if((inquiry = sdmalloc(sizeof(unit->inquiry))) == nil){ - free(r); - return 0; - } - r->unit = unit; - r->lun = 0; /* ??? */ - - memset(unit->inquiry, 0, sizeof(unit->inquiry)); - r->write = 0; - r->cmd[0] = 0x12; - r->cmd[1] = r->lun<<5; - r->cmd[4] = sizeof(unit->inquiry)-1; - r->clen = 6; - r->data = inquiry; - r->dlen = sizeof(unit->inquiry)-1; - r->flags = 0; - - r->status = ~0; - if(unit->dev->ifc->rio(r) != SDok){ - free(r); - return 0; - } - memmove(unit->inquiry, inquiry, r->dlen); - free(inquiry); - - SET(status); - for(i = 0; i < 3; i++){ - while((status = scsitest(r)) == SDbusy) - ; - if(status == SDok || status != SDcheck) - break; - if(!(r->flags & SDvalidsense)) - break; - if((r->sense[2] & 0x0F) != 0x02) - continue; - /* - * Unit is 'not ready'. - * If it needs an initialising command, set status - * so it will be spun-up below. - * If there's no medium, that's OK too, but don't - * try to spin it up. - */ - if(r->sense[12] == 0x04 && r->sense[13] == 0x02){ - status = SDok; - break; - } - if(r->sense[12] == 0x3A) - break; - } - - if(status == SDok){ - /* - * Try to ensure a direct-access device is spinning. - * Don't wait for completion, ignore the result. - */ - if((unit->inquiry[0] & 0x1F) == 0){ - memset(r->cmd, 0, sizeof(r->cmd)); - r->write = 0; - r->cmd[0] = 0x1B; - r->cmd[1] = (r->lun<<5)|0x01; - r->cmd[4] = 1; - r->clen = 6; - r->data = nil; - r->dlen = 0; - r->flags = 0; - - r->status = ~0; - unit->dev->ifc->rio(r); - } - } - free(r); - - if(status == SDok || status == SDcheck) - return 1; - return 0; -} - -static int -ataonline(SDunit* unit) -{ - SDreq *r; - uchar *p; - int ok, retries; - - if((r = malloc(sizeof(SDreq))) == nil) - return 0; - if((p = sdmalloc(8)) == nil){ - free(r); - return 0; - } - - ok = 0; - - r->unit = unit; - r->lun = 0; /* ??? */ - for(retries = 0; retries < 10; retries++){ - /* - * Read-capacity is mandatory for DA, WORM, CD-ROM and - * MO. It may return 'not ready' if type DA is not - * spun up, type MO or type CD-ROM are not loaded or just - * plain slow getting their act together after a reset. - */ - r->write = 0; - memset(r->cmd, 0, sizeof(r->cmd)); - r->cmd[0] = 0x25; - r->cmd[1] = r->lun<<5; - r->clen = 10; - r->data = p; - r->dlen = 8; - r->flags = 0; - - r->status = ~0; - switch(scsirio(r)){ - default: - break; - case 0: - unit->sectors = (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3]; - /* - * Read-capacity returns the LBA of the last sector, - * therefore the number of sectors must be incremented. - */ - unit->sectors++; - unit->secsize = (p[4]<<24)|(p[5]<<16)|(p[6]<<8)|p[7]; - - /* - * Some ATAPI CD readers lie about the block size. - * Since we don't read audio via this interface - * it's okay to always fudge this. - */ - if(unit->secsize == 2352) - unit->secsize = 2048; - ok = 1; - break; - case 1: - ok = 1; - break; - case 2: - continue; - } - break; - } - free(p); - free(r); - - if(ok) - return ok+retries; - else - return 0; -} - -static long -atabio(SDunit* unit, int lun, int write, void* data, long nb, uvlong bno) -{ - SDreq *r; - long rlen; - - if((r = malloc(sizeof(SDreq))) == nil) - error(Enomem); - r->unit = unit; - r->lun = lun; -again: - r->write = write; - if(write == 0) - r->cmd[0] = 0x28; - else - r->cmd[0] = 0x2A; - r->cmd[1] = (lun<<5); - r->cmd[2] = bno>>24; - r->cmd[3] = bno>>16; - r->cmd[4] = bno>>8; - r->cmd[5] = bno; - r->cmd[6] = 0; - r->cmd[7] = nb>>8; - r->cmd[8] = nb; - r->cmd[9] = 0; - r->clen = 10; - r->data = data; - r->dlen = nb*unit->secsize; - r->flags = 0; - - r->status = ~0; - switch(scsirio(r)){ - default: - rlen = -1; - break; - case 0: - rlen = r->rlen; - break; - case 2: - rlen = -1; - if(!(r->flags & SDvalidsense)) - break; - switch(r->sense[2] & 0x0F){ - default: - break; - case 0x06: /* check condition */ - /* - * Check for a removeable media change. - * If so, mark it by zapping the geometry info - * to force an online request. - */ - if(r->sense[12] != 0x28 || r->sense[13] != 0) - break; - if(unit->inquiry[1] & 0x80) - unit->sectors = 0; - break; - case 0x02: /* not ready */ - /* - * If unit is becoming ready, - * rather than not not ready, try again. - */ - if(r->sense[12] == 0x04 && r->sense[13] == 0x01) - goto again; - break; - } - break; - } - free(r); - - return rlen; -} - - -struct Try { - int p; - int c; -} tries[] = { - { 0, 0x0c }, - { 0, 0 }, -}; - -static SDev* -ataprobew(DevConf *cf) -{ - int cmdport; - int ctlport; - int irq; - SDev* rc; - struct Try *try; - - rc = nil; - for (try = &tries[0]; try->p != 0 || try->c != 0; try++){ - ataitype = cf->itype; - atairq = cf->intnum; - cmdport = cf->ports[0].port + try->p; - ctlport = cmdport + try->c; - irq = cf->intnum; - rc = ataprobe(cmdport, ctlport, irq); - if (rc) - break; - } - return rc; -} - -static void -ataclear(SDev *sdev) -{ - Ctlr* ctlr; - - ctlr = sdev->ctlr; - - if (ctlr->drive[0]) - free(ctlr->drive[0]); - if (ctlr->drive[1]) - free(ctlr->drive[1]); - if (sdev->name) - free(sdev->name); - if (sdev->unitflg) - free(sdev->unitflg); - if (sdev->unit) - free(sdev->unit); - free(ctlr); - free(sdev); -} - -static char * -atastat(SDev *sdev, char *p, char *e) -{ - Ctlr *ctlr = sdev->ctlr; - - return seprint(p, e, "%s ata port %X ctl %X irq %d\n", - sdev->name, ctlr->cmdport, ctlr->ctlport, ctlr->irq); -} - - -SDifc sdataifc = { - "ata", /* name */ - - nil, /* pnp */ - atalegacy, /* legacy */ - ataenable, /* enable */ - nil, /* disable */ - - ataverify, /* verify */ - ataonline, /* online */ - atario, /* rio */ - atarctl, /* rctl */ - atawctl, /* wctl */ - - atabio, /* bio */ - ataprobew, /* probew */ - ataclear, /* clear */ - atastat, /* stat */ -}; - diff --git a/sys/src/9/bitsy/tar.c b/sys/src/9/bitsy/tar.c deleted file mode 100644 index 88171e6bc..000000000 --- a/sys/src/9/bitsy/tar.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" - -typedef union Hblock Hblock; - -#define TBLOCK 512 -#define NAMSIZ 100 -union Hblock -{ - char dummy[TBLOCK]; - struct header - { - char name[NAMSIZ]; - char mode[8]; - char uid[8]; - char gid[8]; - char size[12]; - char mtime[12]; - char chksum[8]; - char linkflag; - char linkname[NAMSIZ]; - } dbuf; -}; - -static int getdir(Hblock *hb, Dir *sp); -static int checksum(Hblock *hb); - -uchar* -tarlookup(uchar *addr, char *file, int *dlen) -{ - Hblock *hp; - Dir dir; - - hp = (Hblock*)addr; - while(getdir(hp, &dir) != 0) { - if(strcmp(file, hp->dbuf.name) == 0) { - *dlen = dir.length; - return (uchar*)(hp+1); - } - hp += (dir.length+TBLOCK-1)/TBLOCK + 1; - } - return 0; -} - -static int -getdir(Hblock *hp, Dir *sp) -{ - int chksum; - - if (hp->dbuf.name[0] == '\0') - return 0; - sp->length = strtol(hp->dbuf.size, 0, 8); - sp->mtime = strtol(hp->dbuf.mtime, 0, 8); - chksum = strtol(hp->dbuf.chksum, 0, 8); - if (chksum != checksum(hp)) { - print("directory checksum error\n"); - return 0; - } - return 1; -} - -static int -checksum(Hblock *hp) -{ - int i; - char *cp; - - i = 0; - for (cp = hp->dummy; cp < &hp->dummy[TBLOCK]; cp++) { - if(cp < hp->dbuf.chksum || cp >= &hp->dbuf.chksum[sizeof(hp->dbuf.chksum)]) - i += *cp & 0xff; - else - i += ' ' & 0xff; - } - return(i); -} diff --git a/sys/src/9/bitsy/trap.c b/sys/src/9/bitsy/trap.c deleted file mode 100644 index 188e5e065..000000000 --- a/sys/src/9/bitsy/trap.c +++ /dev/null @@ -1,926 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "ureg.h" -#include "../port/error.h" -#include "tos.h" - -Intrregs *intrregs; - -typedef struct Vctl { - Vctl* next; /* handlers on this vector */ - char *name; /* of driver, xallocated */ - void (*f)(Ureg*, void*); /* handler to call */ - void* a; /* argument to call it with */ -} Vctl; - -static Lock vctllock; -static Vctl *vctl[32]; -static Vctl *gpiovctl[27]; -static int gpioirqref[12]; - -/* - * Layout at virtual address 0. - */ -typedef struct Vpage0 { - void (*vectors[8])(void); - ulong vtable[8]; -} Vpage0; -Vpage0 *vpage0; - -static int irq(Ureg*); -static void gpiointr(Ureg*, void*); - -/* recover state after power suspend - * NB: to help debugging bad suspend code, - * I changed some prints below to iprints, - * to avoid deadlocks when a panic is being - * issued during the suspend/resume handler. - */ -void -trapresume(void) -{ - vpage0 = (Vpage0*)EVECTORS; - memmove(vpage0->vectors, vectors, sizeof(vpage0->vectors)); - memmove(vpage0->vtable, vtable, sizeof(vpage0->vtable)); - wbflush(); - mappedIvecEnable(); -} - -/* - * set up for exceptions - */ -void -trapinit(void) -{ - /* set up the exception vectors */ - vpage0 = (Vpage0*)EVECTORS; - memmove(vpage0->vectors, vectors, sizeof(vpage0->vectors)); - memmove(vpage0->vtable, vtable, sizeof(vpage0->vtable)); - - wbflush(); - - /* use exception vectors at 0xFFFF0000 */ - mappedIvecEnable(); - - /* set up the stacks for the interrupt modes */ - setr13(PsrMfiq, m->sfiq); - setr13(PsrMirq, m->sirq); - setr13(PsrMabt, m->sabt); - setr13(PsrMund, m->sund); - - /* map in interrupt registers */ - intrregs = mapspecial(INTRREGS, sizeof(*intrregs)); - - /* make all interrupts IRQ (i.e. not FIQ) and disable all interrupts */ - intrregs->iclr = 0; - intrregs->icmr = 0; - - /* turn off all gpio interrupts */ - gpioregs->rising = 0; - gpioregs->falling = 0; - gpioregs->edgestatus = gpioregs->edgestatus; - - /* allow all enabled interrupts to take processor out of sleep mode */ - intrregs->iccr = 0; -} - -void -trapdump(char *tag) -{ - iprint("%s: icip %lux icmr %lux iclr %lux iccr %lux icfp %lux\n", - tag, intrregs->icip, intrregs->icmr, intrregs->iclr, - intrregs->iccr, intrregs->icfp); -} - -void -warnregs(Ureg *ur, char *tag) -{ - char buf[1024]; - char *e = buf+sizeof(buf); - char *p; - - p = seprint(buf, e, "%s:\n", tag); - p = seprint(p, e, "type 0x%.8lux psr 0x%.8lux pc 0x%.8lux\n", - ur->type, ur->psr, ur->pc); - p = seprint(p, e, "r0 0x%.8lux r1 0x%.8lux r2 0x%.8lux r3 0x%.8lux\n", - ur->r0, ur->r1, ur->r2, ur->r3); - p = seprint(p, e, "r4 0x%.8lux r5 0x%.8lux r6 0x%.8lux r7 0x%.8lux\n", - ur->r4, ur->r5, ur->r6, ur->r7); - p = seprint(p, e, "r8 0x%.8lux r9 0x%.8lux r10 0x%.8lux r11 0x%.8lux\n", - ur->r8, ur->r9, ur->r10, ur->r11); - seprint(p, e, "r12 0x%.8lux r13 0x%.8lux r14 0x%.8lux\n", - ur->r12, ur->r13, ur->r14); - iprint("%s", buf); -} - -/* - * enable an irq interrupt - */ -static void -irqenable(int irq, IntrHandler *f, void* a, char *name) -{ - Vctl *v; - - if(irq >= nelem(vctl) || irq < 0) - panic("intrenable"); - - v = malloc(sizeof(Vctl)); - v->f = f; - v->a = a; - v->name = xalloc(strlen(name)+1); - strcpy(v->name, name); - - lock(&vctllock); - v->next = vctl[irq]; - vctl[irq] = v; - intrregs->icmr |= 1<= nelem(vctl) || irq < 0) - panic("intrdisable"); - - lock(&vctllock); - for(vp = &vctl[irq]; v = *vp; vp = &v->next) - if (v->f == f && v->a == a && strcmp(v->name, name) == 0){ - print("irqdisable: remove %s\n", name); - *vp = v->next; - free(v); - break; - } - if (v == nil) - print("irqdisable: irq %d, name %s not enabled\n", irq, name); - if (vctl[irq] == nil){ - print("irqdisable: clear icmr bit %d\n", irq); - intrregs->icmr &= ~(1<= nelem(gpiovctl) || which < 0) - panic("intrenable"); - if(which > 11) - irq = 11; - - /* the pin had better be configured as input */ - if((1<direction) - panic("intrenable of output pin %d", which); - - /* create a second level vctl for the gpio edge interrupt */ - v = malloc(sizeof(Vctl)); - v->f = f; - v->a = a; - v->name = xalloc(strlen(name)+1); - strcpy(v->name, name); - - lock(&vctllock); - v->next = gpiovctl[which]; - gpiovctl[which] = v; - - /* set edge register to enable interrupt */ - switch(type){ - case GPIOboth: - gpioregs->rising |= 1<falling |= 1<falling |= 1<rising |= 1<= nelem(gpiovctl) || which < 0) - panic("intrdisable"); - if(which > 11) - irq = 11; - - lock(&vctllock); - for(vp = &gpiovctl[which]; v = *vp; vp = &v->next) - if (v->f == f && v->a == a && strcmp(v->name, name) == 0){ - break; - } - if (gpiovctl[which] == nil){ - /* set edge register to enable interrupt */ - switch(type){ - case GPIOboth: - print("intrdisable: gpio-rising+falling clear bit %d\n", which); - gpioregs->rising &= ~(1<falling &= ~(1<falling &= ~(1<rising &= ~(1<next; - }else - print("intrdisable: which %d, name %s not enabled\n", which, name); - unlock(&vctllock); - /* disable the gpio interrupt handler if necessary */ - if(--gpioirqref[irq] == 0){ - print("intrdisable: inrqdisable gpiointr\n"); - irqdisable(irq, gpiointr, nil, "gpio edge"); - } - free(v); -} - -/* - * called by trap to handle access faults - */ -static void -faultarm(Ureg *ureg, ulong va, int user, int read) -{ - int n, insyscall; - char buf[ERRMAX]; - - if (up == nil) { - warnregs(ureg, "kernel fault"); - panic("fault: nil up in faultarm, accessing 0x%lux", va); - } - insyscall = up->insyscall; - up->insyscall = 1; - n = fault(va, read); - if(n < 0){ - if(!user){ - warnregs(ureg, "kernel fault"); - panic("fault: kernel accessing 0x%lux", va); - } -// warnregs(ureg, "user fault"); - sprint(buf, "sys: trap: fault %s va=0x%lux", read ? "read" : "write", va); - postnote(up, 1, buf, NDebug); - } - up->insyscall = insyscall; -} - -/* - * returns 1 if the instruction writes memory, 0 otherwise - */ -int -writetomem(ulong inst) -{ - /* swap always write memory */ - if((inst & 0x0FC00000) == 0x01000000) - return 1; - - /* loads and stores are distinguished by bit 20 */ - if(inst & (1<<20)) - return 0; - - return 1; -} - - -/* - * here on all exceptions other than syscall (SWI) - */ -void -trap(Ureg *ureg) -{ - ulong inst; - int clockintr, user, x, rv; - ulong va, fsr; - char buf[ERRMAX]; - int rem; - - if(up != nil) - rem = ((char*)ureg)-up->kstack; - else - rem = ((char*)ureg)-((char*)(MACHADDR+sizeof(Mach))); - if(rem < 256) { - dumpstack(); - panic("trap %d bytes remaining, up = %#p, ureg = %#p, at pc 0x%lux", - rem, up, ureg, ureg->pc); - } - - user = (ureg->psr & PsrMask) == PsrMusr; - - /* - * All interrupts/exceptions should be resumed at ureg->pc-4, - * except for Data Abort which resumes at ureg->pc-8. - */ - if(ureg->type == (PsrMabt+1)) - ureg->pc -= 8; - else - ureg->pc -= 4; - - clockintr = 0; - switch(ureg->type){ - default: - panic("unknown trap"); - break; - case PsrMirq: - clockintr = irq(ureg); - break; - case PsrMabt: /* prefetch fault */ - faultarm(ureg, ureg->pc, user, 1); - break; - case PsrMabt+1: /* data fault */ - va = getfar(); - inst = *(ulong*)(ureg->pc); - fsr = getfsr() & 0xf; - switch(fsr){ - case 0x0: - panic("vector exception at %lux", ureg->pc); - break; - case 0x1: - case 0x3: - if(user){ - snprint(buf, sizeof(buf), "sys: alignment: pc 0x%lux va 0x%lux\n", - ureg->pc, va); - postnote(up, 1, buf, NDebug); - } else - panic("kernel alignment: pc 0x%lux va 0x%lux", ureg->pc, va); - break; - case 0x2: - panic("terminal exception at %lux", ureg->pc); - break; - case 0x4: - case 0x6: - case 0x8: - case 0xa: - case 0xc: - case 0xe: - panic("external abort 0x%lux pc 0x%lux addr 0x%lux", fsr, ureg->pc, va); - break; - case 0x5: - case 0x7: - /* translation fault, i.e., no pte entry */ - faultarm(ureg, va, user, !writetomem(inst)); - break; - case 0x9: - case 0xb: - /* domain fault, accessing something we shouldn't */ - if(user){ - sprint(buf, "sys: access violation: pc 0x%lux va 0x%lux\n", - ureg->pc, va); - postnote(up, 1, buf, NDebug); - } else - panic("kernel access violation: pc 0x%lux va 0x%lux", - ureg->pc, va); - break; - case 0xd: - case 0xf: - /* permission error, copy on write or real permission error */ - faultarm(ureg, va, user, !writetomem(inst)); - break; - } - break; - case PsrMund: /* undefined instruction */ - if (user) { - /* look for floating point instructions to interpret */ - x = spllo(); - rv = fpiarm(ureg); - splx(x); - if (rv == 0) { - sprint(buf, "undefined instruction: pc 0x%lux\n", ureg->pc); - postnote(up, 1, buf, NDebug); - } - }else{ - iprint("undefined instruction: pc=0x%lux, inst=0x%lux, 0x%lux, 0x%lux, 0x%lux, 0x%lux\n", ureg->pc, ((ulong*)ureg->pc)[-2], ((ulong*)ureg->pc)[-1], ((ulong*)ureg->pc)[0], ((ulong*)ureg->pc)[1], ((ulong*)ureg->pc)[2]); - panic("undefined instruction"); - } - break; - } - splhi(); - - /* delaysched set because we held a lock or because our quantum ended */ - if(up && up->delaysched && clockintr){ - sched(); - splhi(); - } - - if(user){ - if(up->procctl || up->nnote) - notify(ureg); - kexit(ureg); - } -} - -/* - * here on irq's - */ -static int -irq(Ureg *ur) -{ - ulong va; - int clockintr, i; - Vctl *v; - - va = intrregs->icip; - - if(va & (1<next){ - v->f(ur, v->a); - va &= ~(1<edgestatus; - gpioregs->edgestatus = va; - - for(i = 0; i < 27; i++){ - if(((1<next){ - v->f(ur, v->a); - va &= ~(1<psr & PsrMask) != PsrMusr) { - panic("syscall: pc 0x%lux r14 0x%lux cs 0x%lux", ureg->pc, ureg->r14, ureg->psr); - } - - m->syscall++; - up->insyscall = 1; - up->pc = ureg->pc; - up->dbgreg = ureg; - - scallnr = ureg->r0; - up->scallnr = scallnr; - spllo(); - - sp = ureg->sp; - up->nerrlab = 0; - ret = -1; - if(!waserror()){ - if(scallnr >= nsyscall){ - pprint("bad sys call number %d pc %lux\n", - scallnr, ureg->pc); - postnote(up, 1, "sys: bad sys call", NDebug); - error(Ebadarg); - } - - if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-sizeof(Sargs)-BY2WD)) - validaddr(sp, sizeof(Sargs)+BY2WD, 0); - - up->s = *((Sargs*)(sp+BY2WD)); - up->psstate = sysctab[scallnr]; - - ret = systab[scallnr]((va_list)up->s.args); - poperror(); - }else{ - /* failure: save the error buffer for errstr */ - e = up->syserrstr; - up->syserrstr = up->errstr; - up->errstr = e; - } - if(up->nerrlab){ - print("bad errstack [%d]: %d extra\n", scallnr, up->nerrlab); - for(i = 0; i < NERR; i++) - print("sp=%lux pc=%lux\n", - up->errlab[i].sp, up->errlab[i].pc); - panic("error stack"); - } - - up->insyscall = 0; - up->psstate = 0; - - /* - * Put return value in frame. On the x86 the syscall is - * just another trap and the return value from syscall is - * ignored. On other machines the return value is put into - * the results register by caller of syscall. - */ - ureg->r0 = ret; - - if(scallnr == NOTED) - noted(ureg, *(ulong*)(sp+BY2WD)); - - if(up->delaysched) - sched(); - - splhi(); - if(scallnr != RFORK && (up->procctl || up->nnote)) - notify(ureg); -} - -/* - * Return user to state before notify() - */ -void -noted(Ureg* ureg, ulong arg0) -{ - Ureg *nureg; - ulong oureg, sp; - - qlock(&up->debug); - if(arg0!=NRSTR && !up->notified) { - qunlock(&up->debug); - pprint("call to noted() when not notified\n"); - pexit("Suicide", 0); - } - up->notified = 0; - - nureg = up->ureg; /* pointer to user returned Ureg struct */ - - /* sanity clause */ - oureg = (ulong)nureg; - if(!okaddr(oureg-BY2WD, BY2WD+sizeof(Ureg), 0)){ - qunlock(&up->debug); - pprint("bad ureg in noted or call to noted when not notified\n"); - pexit("Suicide", 0); - } - - /* don't let user change system flags */ - nureg->psr = (ureg->psr & ~(PsrMask|PsrDfiq|PsrDirq)) | - (nureg->psr & (PsrMask|PsrDfiq|PsrDirq)); - - memmove(ureg, nureg, sizeof(Ureg)); - - switch(arg0){ - case NCONT: - case NRSTR: - if(!okaddr(nureg->pc, 1, 0) || !okaddr(nureg->sp, BY2WD, 0)){ - qunlock(&up->debug); - pprint("suicide: trap in noted\n"); - pexit("Suicide", 0); - } - up->ureg = (Ureg*)(*(ulong*)(oureg-BY2WD)); - qunlock(&up->debug); - break; - - case NSAVE: - if(!okaddr(nureg->pc, BY2WD, 0) - || !okaddr(nureg->sp, BY2WD, 0)){ - qunlock(&up->debug); - pprint("suicide: trap in noted\n"); - pexit("Suicide", 0); - } - qunlock(&up->debug); - sp = oureg-4*BY2WD-ERRMAX; - splhi(); - ureg->sp = sp; - ((ulong*)sp)[1] = oureg; /* arg 1 0(FP) is ureg* */ - ((ulong*)sp)[0] = 0; /* arg 0 is pc */ - break; - - default: - up->lastnote.flag = NDebug; - /* fall through */ - - case NDFLT: - qunlock(&up->debug); - if(up->lastnote.flag == NDebug) - pprint("suicide: %s\n", up->lastnote.msg); - pexit(up->lastnote.msg, up->lastnote.flag!=NDebug); - } -} - -/* - * Call user, if necessary, with note. - * Pass user the Ureg struct and the note on his stack. - */ -int -notify(Ureg* ureg) -{ - int l; - ulong s, sp; - Note *n; - - if(up->procctl) - procctl(); - if(up->nnote == 0) - return 0; - - s = spllo(); - qlock(&up->debug); - up->notepending = 0; - n = &up->note[0]; - if(strncmp(n->msg, "sys:", 4) == 0){ - l = strlen(n->msg); - if(l > ERRMAX-15) /* " pc=0x12345678\0" */ - l = ERRMAX-15; - sprint(n->msg+l, " pc=0x%.8lux", ureg->pc); - } - - if(n->flag!=NUser && (up->notified || up->notify==0)){ - qunlock(&up->debug); - if(n->flag == NDebug) - pprint("suicide: %s\n", n->msg); - pexit(n->msg, n->flag!=NDebug); - } - - if(up->notified) { - qunlock(&up->debug); - splhi(); - return 0; - } - - if(!up->notify){ - qunlock(&up->debug); - pexit(n->msg, n->flag!=NDebug); - } - sp = ureg->sp; - sp -= sizeof(Ureg); - - if(!okaddr((uintptr)up->notify, 1, 0) - || !okaddr(sp-ERRMAX-4*BY2WD, sizeof(Ureg)+ERRMAX+4*BY2WD, 1)){ - qunlock(&up->debug); - pprint("suicide: bad address in notify\n"); - pexit("Suicide", 0); - } - - up->ureg = (void*)sp; - memmove((Ureg*)sp, ureg, sizeof(Ureg)); - *(Ureg**)(sp-BY2WD) = up->ureg; /* word under Ureg is old up->ureg */ - up->ureg = (void*)sp; - sp -= BY2WD+ERRMAX; - memmove((char*)sp, up->note[0].msg, ERRMAX); - sp -= 3*BY2WD; - *(ulong*)(sp+2*BY2WD) = sp+3*BY2WD; /* arg 2 is string */ - *(ulong*)(sp+1*BY2WD) = (ulong)up->ureg; /* arg 1 is ureg* */ - *(ulong*)(sp+0*BY2WD) = 0; /* arg 0 is pc */ - ureg->sp = sp; - ureg->pc = (ulong)up->notify; - up->notified = 1; - up->nnote--; - memmove(&up->lastnote, &up->note[0], sizeof(Note)); - memmove(&up->note[0], &up->note[1], up->nnote*sizeof(Note)); - - qunlock(&up->debug); - splx(s); - return 1; -} - -/* Give enough context in the ureg to produce a kernel stack for - * a sleeping process - */ -void -setkernur(Ureg *ureg, Proc *p) -{ - ureg->pc = p->sched.pc; - ureg->sp = p->sched.sp+4; - ureg->r14 = (ulong)sched; -} - -/* - * return the userpc the last exception happened at - */ -uintptr -userpc(void) -{ - Ureg *ureg; - - ureg = (Ureg*)up->dbgreg; - return ureg->pc; -} - -/* This routine must save the values of registers the user is not permitted - * to write from devproc and then restore the saved values before returning. - */ -void -setregisters(Ureg* ureg, char* pureg, char* uva, int n) -{ - USED(ureg, pureg, uva, n); -} - -/* - * this is the body for all kproc's - */ -static void -linkproc(void) -{ - spllo(); - up->kpfun(up->kparg); - pexit("kproc exiting", 0); -} - -/* - * setup stack and initial PC for a new kernel proc. This is architecture - * dependent because of the starting stack location - */ -void -kprocchild(Proc *p, void (*func)(void*), void *arg) -{ - p->sched.pc = (ulong)linkproc; - p->sched.sp = (ulong)p->kstack+KSTACK; - - p->kpfun = func; - p->kparg = arg; -} - - -/* - * Craft a return frame which will cause the child to pop out of - * the scheduler in user mode with the return register zero. Set - * pc to point to a l.s return function. - */ -void -forkchild(Proc *p, Ureg *ureg) -{ - Ureg *cureg; - -//print("%lud setting up for forking child %lud\n", up->pid, p->pid); - p->sched.sp = (ulong)p->kstack+KSTACK-sizeof(Ureg); - p->sched.pc = (ulong)forkret; - - cureg = (Ureg*)(p->sched.sp); - memmove(cureg, ureg, sizeof(Ureg)); - - /* syscall returns 0 for child */ - cureg->r0 = 0; - - /* Things from bottom of syscall which were never executed */ - p->psstate = 0; - p->insyscall = 0; -} - -/* - * setup stack, initial PC, and any arch dependent regs for an execing user proc. - */ -uintptr -execregs(uintptr entry, ulong ssize, ulong nargs) -{ - ulong *sp; - Ureg *ureg; - - sp = (ulong*)(USTKTOP - ssize); - *--sp = nargs; - - ureg = up->dbgreg; - memset(ureg, 0, 15*sizeof(ulong)); - ureg->r13 = (ulong)sp; - ureg->pc = entry; -//print("%lud: EXECREGS pc 0x%lux sp 0x%lux\n", up->pid, ureg->pc, ureg->r13); - return USTKTOP-sizeof(Tos); /* address of kernel/user shared data */ -} - -/* - * Fill in enough of Ureg to get a stack trace, and call a function. - * Used by debugging interface rdb. - */ -void -callwithureg(void (*fn)(Ureg*)) -{ - Ureg ureg; - ureg.pc = getcallerpc(&fn); - ureg.sp = (ulong)&fn; - fn(&ureg); -} - -static void -_dumpstack(Ureg *ureg) -{ - ulong l, v, i; - ulong *p; - extern ulong etext; - - if(up == 0){ - iprint("no current proc\n"); - return; - } - - iprint("ktrace /kernel/path %.8lux %.8lux %.8lux\n", ureg->pc, ureg->sp, ureg->r14); - i = 0; - for(l=(ulong)&l; l<(ulong)(up->kstack+KSTACK); l+=4){ - v = *(ulong*)l; - if(KTZERO < v && v < (ulong)&etext && (v&3)==0){ - v -= 4; - p = (ulong*)v; - if((*p & 0x0f000000) == 0x0b000000){ - iprint("%.8lux=%.8lux ", l, v); - i++; - } - } - if(i == 4){ - i = 0; - iprint("\n"); - } - } - if(i) - iprint("\n"); -} - -void -dumpstack(void) -{ - callwithureg(_dumpstack); -} - -/* - * pc output by ps - */ -uintptr -dbgpc(Proc *p) -{ - Ureg *ureg; - - ureg = p->dbgreg; - if(ureg == 0) - return 0; - - return ureg->pc; -} - -/* - * called in sysfile.c - */ -void -evenaddr(ulong addr) -{ - if(addr & 3){ - postnote(up, 1, "sys: odd address", NDebug); - error(Ebadarg); - } -} diff --git a/sys/src/9/bitsy/uartsa1110.c b/sys/src/9/bitsy/uartsa1110.c deleted file mode 100644 index 02b5e6298..000000000 --- a/sys/src/9/bitsy/uartsa1110.c +++ /dev/null @@ -1,514 +0,0 @@ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" - -#include "../port/netif.h" - -/* this isn't strictly an sa1110 driver. The rts/cts stuff is h3650 specific */ - -static void sa1110_uartpower(Uart *, int); - -enum -{ - /* ctl[0] bits */ - Parity= 1<<0, - Even= 1<<1, - Stop2= 1<<2, - Bits8= 1<<3, - SCE= 1<<4, /* synchronous clock enable */ - RCE= 1<<5, /* rx on falling edge of clock */ - TCE= 1<<6, /* tx on falling edge of clock */ - - /* ctl[3] bits */ - Rena= 1<<0, /* receiver enable */ - Tena= 1<<1, /* transmitter enable */ - Break= 1<<2, /* force TXD3 low */ - Rintena= 1<<3, /* enable receive interrupt */ - Tintena= 1<<4, /* enable transmitter interrupt */ - Loopback= 1<<5, /* loop back data */ - - /* data bits */ - DEparity= 1<<8, /* parity error */ - DEframe= 1<<9, /* framing error */ - DEoverrun= 1<<10, /* overrun error */ - - /* status[0] bits */ - Tint= 1<<0, /* transmit fifo half full interrupt */ - Rint0= 1<<1, /* receiver fifo 1/3-2/3 full */ - Rint1= 1<<2, /* receiver fifo not empty and receiver idle */ - Breakstart= 1<<3, - Breakend= 1<<4, - Fifoerror= 1<<5, /* fifo error */ - - /* status[1] bits */ - Tbusy= 1<<0, /* transmitting */ - Rnotempty= 1<<1, /* receive fifo not empty */ - Tnotfull= 1<<2, /* transmit fifo not full */ - ParityError= 1<<3, - FrameError= 1<<4, - Overrun= 1<<5, -}; - -extern PhysUart sa1110physuart; - -//static -Uart sa1110uart[2] = { -{ .regs = (void*)UART3REGS, - .name = "serialport3", - .freq = ClockFreq, - .bits = 8, - .stop = 1, - .parity = 'n', - .baud = 115200, - .phys = &sa1110physuart, - .special = 0, - .next = &sa1110uart[1], }, - -{ .regs = (void*)UART1REGS, - .name = "serialport1", - .freq = ClockFreq, - .bits = 8, - .stop = 1, - .parity = 'n', - .baud = 115200, - .phys = &sa1110physuart, - .putc = µcputc, - .special = 0, - .next = nil, }, -}; -static Uart* µcuart; - -#define R(p) ((Uartregs*)((p)->regs)) -#define SR(p) ((Uartregs*)((p)->saveregs)) - -/* - * enable a port's interrupts. set DTR and RTS - */ -static void -sa1110_uartenable(Uart *p, int intena) -{ - ulong s; - - s = R(p)->ctl[3] & ~(Rintena|Tintena|Rena|Tena); - if(intena) - R(p)->ctl[3] = s |Rintena|Tintena|Rena|Tena; - else - R(p)->ctl[3] = s | Rena|Tena; -} - -/* - * disable interrupts. clear DTR, and RTS - */ -static void -sa1110_uartdisable(Uart *p) -{ - R(p)->ctl[3] &= ~(Rintena|Tintena|Rena|Tena); -} - -static long -sa1110_uartstatus(Uart *p, void *buf, long n, long offset) -{ - char str[256]; - ulong ctl0; - - ctl0 = R(p)->ctl[0]; - snprint(str, sizeof(str), - "b%d c%d d%d e%d l%d m%d p%c r%d s%d i%d\n" - "dev(%d) type(%d) framing(%d) overruns(%d)%s%s%s%s\n", - - p->baud, - p->hup_dcd, - 0, - p->hup_dsr, - (ctl0 & Bits8) ? 8 : 7, - 0, - (ctl0 & Parity) ? ((ctl0 & Even) ? 'e' : 'o') : 'n', - 0, - (ctl0 & Stop2) ? 2 : 1, - 1, - - p->dev, - p->type, - p->ferr, - p->oerr, - "", - "", - "", - "" ); - return readstr(offset, buf, n, str); -} - -/* - * set the buad rate - */ -static int -sa1110_uartbaud(Uart *p, int rate) -{ - ulong brconst; - ulong ctl3; - - if(rate <= 0) - return -1; - - /* disable */ - ctl3 = R(p)->ctl[3]; - R(p)->ctl[3] = 0; - - brconst = p->freq/(16*rate) - 1; - R(p)->ctl[1] = (brconst>>8) & 0xf; - R(p)->ctl[2] = brconst & 0xff; - - /* reenable */ - R(p)->ctl[3] = ctl3; - - p->baud = rate; - return 0; -} - -/* - * send a break - */ -static void -sa1110_uartbreak(Uart *p, int ms) -{ - if(ms == 0) - ms = 200; - - R(p)->ctl[3] |= Break; - tsleep(&up->sleep, return0, 0, ms); - R(p)->ctl[3] &= ~Break; -} - -/* - * set bits/char - */ -static int -sa1110_uartbits(Uart *p, int n) -{ - ulong ctl0, ctl3; - - ctl0 = R(p)->ctl[0]; - switch(n){ - case 7: - ctl0 &= ~Bits8; - break; - case 8: - ctl0 |= Bits8; - break; - default: - return -1; - } - - /* disable */ - ctl3 = R(p)->ctl[3]; - R(p)->ctl[3] = 0; - - R(p)->ctl[0] = ctl0; - - /* reenable */ - R(p)->ctl[3] = ctl3; - - p->bits = n; - return 0; -} - -/* - * set stop bits - */ -static int -sa1110_uartstop(Uart *p, int n) -{ - ulong ctl0, ctl3; - - ctl0 = R(p)->ctl[0]; - switch(n){ - case 1: - ctl0 &= ~Stop2; - break; - case 2: - ctl0 |= Stop2; - break; - default: - return -1; - } - - /* disable */ - ctl3 = R(p)->ctl[3]; - R(p)->ctl[3] = 0; - - R(p)->ctl[0] = ctl0; - - /* reenable */ - R(p)->ctl[3] = ctl3; - - p->stop = n; - return 0; -} - -/* - * turn on/off rts - */ -static void -sa1110_uartrts(Uart*, int) -{ -} - -/* - * turn on/off dtr - */ -static void -sa1110_uartdtr(Uart*, int) -{ -} - -/* - * turn on/off modem flow control on/off (rts/cts) - */ -static void -sa1110_uartmodemctl(Uart *p, int on) -{ - if(on) { - } else { - p->cts = 1; - } -} - -/* - * set parity - */ -static int -sa1110_uartparity(Uart *p, int type) -{ - ulong ctl0, ctl3; - - ctl0 = R(p)->ctl[0]; - switch(type){ - case 'e': - ctl0 |= Parity|Even; - break; - case 'o': - ctl0 |= Parity; - break; - default: - ctl0 &= ~(Parity|Even); - break; - } - - /* disable */ - ctl3 = R(p)->ctl[3]; - R(p)->ctl[3] = 0; - - R(p)->ctl[0] = ctl0; - - /* reenable */ - R(p)->ctl[3] = ctl3; - - return 0; -} - -/* - * restart output if not blocked and OK to send - */ -static void -sa1110_uartkick(Uart *p) -{ - int i; - - R(p)->ctl[3] &= ~Tintena; - - if(p->cts == 0 || p->blocked) - return; - - for(i = 0; i < 1024; i++){ - if(!(R(p)->status[1] & Tnotfull)){ - R(p)->ctl[3] |= Tintena; - break; - } - if(p->op >= p->oe && uartstageoutput(p) == 0) - break; - R(p)->data = *p->op++; - } -} - -/* - * take an interrupt - */ -static void -sa1110_uartintr(Ureg*, void *x) -{ - Uart *p; - ulong s; - Uartregs *regs; - - p = x; - regs = p->regs; - - /* receiver interrupt, snarf bytes */ - while(regs->status[1] & Rnotempty) - uartrecv(p, regs->data); - - /* remember and reset interrupt causes */ - s = regs->status[0]; - regs->status[0] |= s; - - if(s & Tint){ - /* transmitter interrupt, restart */ - uartkick(p); - } - - if(s & (ParityError|FrameError|Overrun)){ - if(s & ParityError) - p->parity++; - if(s & FrameError) - p->ferr++; - if(s & Overrun) - p->oerr++; - } - - /* receiver interrupt, snarf bytes */ - while(regs->status[1] & Rnotempty) - uartrecv(p, regs->data); -} - -static Uart* -sa1110_pnp(void) -{ - return sa1110uart; -} - -static int -sa1110_getc(Uart *uart) -{ - Uartregs *ur; - - ur = uart->regs; - while((ur->status[1] & Rnotempty) == 0) - ; - return ur->data; -} - -static void -sa1110_putc(Uart *uart, int c) -{ - Uartregs *ur; - - ur = uart->regs; - /* wait for output ready */ - while((ur->status[1] & Tnotfull) == 0) - ; - ur->data = c; - while((ur->status[1] & Tbusy)) - ; -} - -PhysUart sa1110physuart = { - .name= "sa1110", - .pnp= sa1110_pnp, - .enable= sa1110_uartenable, - .disable= sa1110_uartdisable, - .bits= sa1110_uartbits, - .kick= sa1110_uartkick, - .modemctl= sa1110_uartmodemctl, - .baud= sa1110_uartbaud, - .stop= sa1110_uartstop, - .parity= sa1110_uartparity, - .dobreak= sa1110_uartbreak, - .rts= sa1110_uartrts, - .dtr= sa1110_uartdtr, - .status= sa1110_uartstatus, - .power= sa1110_uartpower, - .getc= sa1110_getc, - .putc= sa1110_putc, -}; - -/* - * for iprint, just write it - */ -void -serialµcputs(uchar *str, int n) -{ - Uartregs *ur; - - if(µcuart == nil) - return; - ur = µcuart->regs; - while(n-- > 0){ - /* wait for output ready */ - while((ur->status[1] & Tnotfull) == 0) - ; - ur->data = *str++; - } - while((ur->status[1] & Tbusy)) - ; -} - -enum -{ - /* gpclk register 0 */ - Gpclk_sus= 1<<0, /* set uart mode */ -}; - -Gpclkregs *gpclkregs; - -/* - * setup all uarts (called early by main() to allow debugging output to - * a serial port) - */ -void -sa1110_uartsetup(int console) -{ - Uart *p; - - /* external serial port (eia0) */ - p = &sa1110uart[0]; - p->regs = mapspecial(UART3REGS, sizeof(Uartregs)); - p->saveregs = xalloc(sizeof(Uartregs)); - /* set eia0 up as a console */ - if(console){ - uartctl(p, "b115200 l8 pn s1"); - (*p->phys->enable)(p, 0); - p->console = 1; - consuart = p; - } - intrenable(IRQ, IRQuart3, sa1110_uartintr, p, p->name); - - /* port for talking to microcontroller (eia1) */ - gpclkregs = mapspecial(GPCLKREGS, sizeof(Gpclkregs)); - gpclkregs->r0 = Gpclk_sus; /* set uart mode */ - - p = &sa1110uart[1]; - p->regs = mapspecial(UART1REGS, sizeof(Uartregs)); - p->saveregs = xalloc(sizeof(Uartregs)); - uartctl(p, "b115200 l8 pn s1"); - µcuart = p; - p->special = 1; - (*p->phys->enable)(p, 0); - intrenable(IRQ, IRQuart1b, sa1110_uartintr, p, p->name); -} - -static void -uartcpy(Uartregs *to, Uartregs *from) -{ - to->ctl[0] = from->ctl[0]; -// to->ctl[1] = from->ctl[1]; -// to->ctl[2] = from->ctl[2]; - to->ctl[3] = from->ctl[3]; - -} - -static void -sa1110_uartpower(Uart *p, int powerup) -{ - if (powerup) { - /* power up, restore the registers */ - uartcpy(R(p), SR(p)); - R(p)->status[0] = R(p)->status[0]; - } else { - /* power down, save the registers */ - uartcpy(SR(p), R(p)); - } -} diff --git a/sys/src/9/bitsy/wavelan.c b/sys/src/9/bitsy/wavelan.c deleted file mode 100644 index d52ff1f85..000000000 --- a/sys/src/9/bitsy/wavelan.c +++ /dev/null @@ -1,1223 +0,0 @@ -/* - Lucent Wavelan IEEE 802.11 pcmcia. - There is almost no documentation for the card. - the driver is done using both the FreeBSD, Linux and - original Plan 9 drivers as `documentation'. - - Has been used with the card plugged in during all up time. - no cards removals/insertions yet. - - For known BUGS see the comments below. Besides, - the driver keeps interrupts disabled for just too - long. When it gets robust, locks should be revisited. - - BUGS: check endian, alignment and mem/io issues; - multicast; - receive watchdog interrupts. - TODO: automatic power management; - improve locking. - */ -#include "u.h" -#include "../port/lib.h" -#include "mem.h" -#include "dat.h" -#include "fns.h" -#include "io.h" -#include "../port/error.h" -#include "../port/netif.h" -#include "etherif.h" -#include "wavelan.h" - -enum -{ - MSperTick= 50, /* ms between ticks of kproc */ -}; - -/* - * When we're using a PCI device and memory-mapped I/O, - * the registers are spaced out as though each takes 32 bits, - * even though they are only 16-bit registers. Thus, - * ctlr->mmb[reg] is the right way to access register reg, - * even though a priori you'd expect to use ctlr->mmb[reg/2]. - */ -void -csr_outs(Ctlr *ctlr, int reg, ushort arg) -{ - if(ctlr->mmb) - ctlr->mmb[reg] = arg; - else - outs(ctlr->iob+reg, arg); -} - -ushort -csr_ins(Ctlr *ctlr, int reg) -{ - if(ctlr->mmb) - return ctlr->mmb[reg]; - else - return ins(ctlr->iob+reg); -} - -static void -csr_ack(Ctlr *ctlr, int ev) -{ - csr_outs(ctlr, WR_EvAck, ev); -} - -static void -csr_inss(Ctlr *ctlr, int reg, void *dat, int ndat) -{ - ushort *rp, *wp; - - if(ctlr->mmb){ - rp = &ctlr->mmb[reg]; - wp = dat; - while(ndat-- > 0) - *wp++ = *rp; - }else - inss(ctlr->iob+reg, dat, ndat); -} - -static void -csr_outss(Ctlr *ctlr, int reg, void *dat, int ndat) -{ - ushort *rp, *wp; - - if(ctlr->mmb){ - rp = dat; - wp = &ctlr->mmb[reg]; - while(ndat-- > 0) - *wp = *rp++; - }else - outss(ctlr->iob+reg, dat, ndat); -} - -// w_... routines do not ilock the Ctlr and should -// be called locked. - -void -w_intdis(Ctlr* ctlr) -{ - csr_outs(ctlr, WR_IntEna, 0); - csr_ack(ctlr, 0xffff); -} - -static void -w_intena(Ctlr* ctlr) -{ - csr_outs(ctlr, WR_IntEna, WEvs); -} - -int -w_cmd(Ctlr *ctlr, ushort cmd, ushort arg) -{ - int i, rc; - - for(i=0; ictlrno, cmd, csr_ins(ctlr, WR_Cmd)); - return -1; - } - - csr_outs(ctlr, WR_Parm0, arg); - csr_outs(ctlr, WR_Cmd, cmd); - - for(i=0; ictlrno, cmd, i); - if(i == IniTmOut){ - print("#l%d: execing cmd %.4ux: %.4ux\n", ctlr->ctlrno, cmd, csr_ins(ctlr, WR_EvSts)); - return -1; - } - } - rc = csr_ins(ctlr, WR_Sts); - csr_ack(ctlr, WCmdEv); - - if((rc&WCmdMsk) != (cmd&WCmdMsk)){ - print("#l%d: cmd %.4ux: status %.4ux\n", ctlr->ctlrno, cmd, rc); - return -1; - } - if(rc&WResSts){ - /* - * Don't print; this happens on every WCmdAccWr for some reason. - */ - if(0) print("#l%d: cmd %.4ux: status %.4ux\n", ctlr->ctlrno, cmd, rc); - return -1; - } - return 0; -} - -static int -w_seek(Ctlr* ctlr, ushort id, ushort offset, int chan) -{ - int i, rc; - static ushort sel[] = { WR_Sel0, WR_Sel1 }; - static ushort off[] = { WR_Off0, WR_Off1 }; - - if(chan != 0 && chan != 1) - panic("wavelan: bad chan\n"); - csr_outs(ctlr, sel[chan], id); - csr_outs(ctlr, off[chan], offset); - for (i=0; itype)){ - DEBUG("wavelan: access read failed\n"); - return -1; - } - if(w_seek(ctlr,ltv->type,0,1)){ - DEBUG("wavelan: seek failed\n"); - return -1; - } - len = csr_ins(ctlr, WR_Data1); - if(len > ltv->len) - return -1; - ltv->len = len; - if((code=csr_ins(ctlr, WR_Data1)) != ltv->type){ - USED(code); - DEBUG("wavelan: type %x != code %x\n",ltv->type,code); - return -1; - } - if(ltv->len > 0) - csr_inss(ctlr, WR_Data1, <v->val, ltv->len-1); - - return 0; -} - -static void -w_outltv(Ctlr* ctlr, Wltv* ltv) -{ - if(w_seek(ctlr,ltv->type, 0, 1)) - return; - csr_outss(ctlr, WR_Data1, ltv, ltv->len+1); - w_cmd(ctlr, WCmdAccWr, ltv->type); -} - -void -ltv_outs(Ctlr* ctlr, int type, ushort val) -{ - Wltv ltv; - - ltv.len = 2; - ltv.type = type; - ltv.val = val; - w_outltv(ctlr, <v); -} - -int -ltv_ins(Ctlr* ctlr, int type) -{ - Wltv ltv; - - ltv.len = 2; - ltv.type = type; - ltv.val = 0; - if(w_inltv(ctlr, <v)) - return -1; - return ltv.val; -} - -static void -ltv_outstr(Ctlr* ctlr, int type, char* val) -{ - Wltv ltv; - int len; - - len = strlen(val); - if(len > sizeof(ltv.s)) - len = sizeof(ltv.s); - memset(<v, 0, sizeof(ltv)); - ltv.len = (sizeof(ltv.type)+sizeof(ltv.slen)+sizeof(ltv.s))/2; - ltv.type = type; - -// This should be ltv.slen = len; according to Axel Belinfante - ltv.slen = len; - - strncpy(ltv.s, val, len); - w_outltv(ctlr, <v); -} - -static char Unkname[] = "who knows"; -static char Nilname[] = "card does not tell"; - -static char* -ltv_inname(Ctlr* ctlr, int type) -{ - static Wltv ltv; - int len; - - memset(<v,0,sizeof(ltv)); - ltv.len = WNameLen/2+2; - ltv.type = type; - if(w_inltv(ctlr, <v)) - return Unkname; - len = ltv.slen; - if(len == 0 || ltv.s[0] == 0) - return Nilname; - if(len >= sizeof ltv.s) - len = sizeof ltv.s - 1; - ltv.s[len] = '\0'; - return ltv.s; -} - -static int -w_read(Ctlr* ctlr, int type, int off, void* buf, ulong len) -{ - if(w_seek(ctlr, type, off, 1)){ - DEBUG("wavelan: w_read: seek failed"); - return 0; - } - csr_inss(ctlr, WR_Data1, buf, len/2); - - return len; -} - -static int -w_write(Ctlr* ctlr, int type, int off, void* buf, ulong len) -{ - if(w_seek(ctlr, type, off, 0)){ - DEBUG("wavelan: w_write: seek failed\n"); - return 0; - } - - csr_outss(ctlr, WR_Data0, buf, len/2); - csr_outs(ctlr, WR_Data0, 0xdead); - csr_outs(ctlr, WR_Data0, 0xbeef); - if(w_seek(ctlr, type, off + len, 0)){ - DEBUG("wavelan: write seek failed\n"); - return 0; - } - if(csr_ins(ctlr, WR_Data0) == 0xdead && csr_ins(ctlr, WR_Data0) == 0xbeef) - return len; - - DEBUG("wavelan: Hermes bug byte.\n"); - return 0; -} - -static int -w_alloc(Ctlr* ctlr, int len) -{ - int rc; - int i,j; - - if(w_cmd(ctlr, WCmdMalloc, len)==0) - for (i = 0; ictlr; - - if(!ctlr) - return -1; - - w_intdis(ctlr); - w_cmd(ctlr, WCmdDis, 0); - w_intdis(ctlr); - if(w_cmd(ctlr, WCmdIni, 0)) - return -1; - w_intdis(ctlr); - - ltv_outs(ctlr, WTyp_Tick, 8); - ltv_outs(ctlr, WTyp_MaxLen, ctlr->maxlen); - ltv_outs(ctlr, WTyp_Ptype, ctlr->ptype); - ltv_outs(ctlr, WTyp_CreateIBSS, ctlr->createibss); - ltv_outs(ctlr, WTyp_RtsThres, ctlr->rtsthres); - ltv_outs(ctlr, WTyp_TxRate, ctlr->txrate); - ltv_outs(ctlr, WTyp_ApDens, ctlr->apdensity); - ltv_outs(ctlr, WTyp_PMWait, ctlr->pmwait); - ltv_outs(ctlr, WTyp_PM, ctlr->pmena); - if(*ctlr->netname) - ltv_outstr(ctlr, WTyp_NetName, ctlr->netname); - if(*ctlr->wantname) - ltv_outstr(ctlr, WTyp_WantName, ctlr->wantname); - ltv_outs(ctlr, WTyp_Chan, ctlr->chan); - if(*ctlr->nodename) - ltv_outstr(ctlr, WTyp_NodeName, ctlr->nodename); - ltv.len = 4; - ltv.type = WTyp_Mac; - memmove(ltv.addr, ether->ea, Eaddrlen); - w_outltv(ctlr, <v); - - ltv_outs(ctlr, WTyp_Prom, (ether->prom?1:0)); - - if(ctlr->hascrypt && ctlr->crypt){ - ltv_outs(ctlr, WTyp_Crypt, ctlr->crypt); - ltv_outs(ctlr, WTyp_TxKey, ctlr->txkey); - w_outltv(ctlr, &ctlr->keys); - ltv_outs(ctlr, WTyp_XClear, ctlr->xclear); - } - - // BUG: set multicast addresses - - if(w_cmd(ctlr, WCmdEna, 0)){ - DEBUG("wavelan: Enable failed"); - return -1; - } - ctlr->txdid = w_alloc(ctlr, 1518 + sizeof(WFrame) + 8); - ctlr->txmid = w_alloc(ctlr, 1518 + sizeof(WFrame) + 8); - if(ctlr->txdid == -1 || ctlr->txmid == -1) - DEBUG("wavelan: alloc failed"); - ctlr->txbusy = 0; - w_intena(ctlr); - return 0; -} - -static void -w_rxdone(Ether* ether) -{ - Ctlr* ctlr = (Ctlr*) ether->ctlr; - int len, sp; - WFrame f; - Block* bp=0; - Etherpkt* ep; - - sp = csr_ins(ctlr, WR_RXId); - len = w_read(ctlr, sp, 0, &f, sizeof(f)); - if(len == 0){ - DEBUG("wavelan: read frame error\n"); - goto rxerror; - } - if(f.sts&WF_Err){ - goto rxerror; - } - switch(f.sts){ - case WF_1042: - case WF_Tunnel: - case WF_WMP: - len = f.dlen + WSnapHdrLen; - bp = iallocb(ETHERHDRSIZE + len + 2); - if(!bp) - goto rxerror; - ep = (Etherpkt*) bp->wp; - memmove(ep->d, f.addr1, Eaddrlen); - memmove(ep->s, f.addr2, Eaddrlen); - memmove(ep->type,&f.type,2); - bp->wp += ETHERHDRSIZE; - if(w_read(ctlr, sp, WF_802_11_Off, bp->wp, len+2) == 0){ - DEBUG("wavelan: read 802.11 error\n"); - goto rxerror; - } - bp->wp = bp->rp+(ETHERHDRSIZE+f.dlen); - break; - default: - len = ETHERHDRSIZE + f.dlen + 2; - bp = iallocb(len); - if(!bp) - goto rxerror; - if(w_read(ctlr, sp, WF_802_3_Off, bp->wp, len) == 0){ - DEBUG("wavelan: read 800.3 error\n"); - goto rxerror; - } - bp->wp += len; - } - - ctlr->nrx++; - etheriq(ether,bp,1); - ctlr->signal = ((ctlr->signal*15)+((f.qinfo>>8) & 0xFF))/16; - ctlr->noise = ((ctlr->noise*15)+(f.qinfo & 0xFF))/16; - return; - -rxerror: - freeb(bp); - ctlr->nrxerr++; -} - -static void -w_txstart(Ether* ether) -{ - Etherpkt *pkt; - Ctlr *ctlr; - Block *bp; - int len, off; - - if((ctlr = ether->ctlr) == nil || (ctlr->state & (Attached|Power)) != (Attached|Power) || ctlr->txbusy) - return; - - if((bp = qget(ether->oq)) == nil) - return; - pkt = (Etherpkt*)bp->rp; - - // - // If the packet header type field is > 1500 it is an IP or - // ARP datagram, otherwise it is an 802.3 packet. See RFC1042. - // - memset(&ctlr->txf, 0, sizeof(ctlr->txf)); - if(((pkt->type[0]<<8)|pkt->type[1]) > 1500){ - ctlr->txf.framectl = WF_Data; - memmove(ctlr->txf.addr1, pkt->d, Eaddrlen); - memmove(ctlr->txf.addr2, pkt->s, Eaddrlen); - memmove(ctlr->txf.dstaddr, pkt->d, Eaddrlen); - memmove(ctlr->txf.srcaddr, pkt->s, Eaddrlen); - memmove(&ctlr->txf.type, pkt->type, 2); - bp->rp += ETHERHDRSIZE; - len = BLEN(bp); - off = WF_802_11_Off; - ctlr->txf.dlen = len+ETHERHDRSIZE-WSnapHdrLen; - hnputs((uchar*)&ctlr->txf.dat[0], WSnap0); - hnputs((uchar*)&ctlr->txf.dat[1], WSnap1); - hnputs((uchar*)&ctlr->txf.len, len+ETHERHDRSIZE-WSnapHdrLen); - } - else{ - len = BLEN(bp); - off = WF_802_3_Off; - ctlr->txf.dlen = len; - } - w_write(ctlr, ctlr->txdid, 0, &ctlr->txf, sizeof(ctlr->txf)); - w_write(ctlr, ctlr->txdid, off, bp->rp, len+2); - - if(w_cmd(ctlr, WCmdReclaim|WCmdTx, ctlr->txdid)){ - DEBUG("wavelan: transmit failed\n"); - ctlr->ntxerr++; - } - else{ - ctlr->txbusy = 1; - ctlr->txtmout = 2; - } - freeb(bp); -} - -static void -w_txdone(Ctlr* ctlr, int sts) -{ - ctlr->txbusy = 0; - ctlr->txtmout = 0; - if(sts & WTxErrEv) - ctlr->ntxerr++; - else - ctlr->ntx++; -} - -/* save the stats info in the ctlr struct */ -static void -w_stats(Ctlr* ctlr, int len) -{ - int i, rc; - ulong* p = (ulong*)&ctlr->WStats; - ulong* pend = (ulong*)&ctlr->end; - - for (i = 0; i < len && p < pend; i++){ - rc = csr_ins(ctlr, WR_Data1); - if(rc > 0xf000) - rc = ~rc & 0xffff; - p[i] += rc; - } -} - -/* send the base station scan info to any readers */ -static void -w_scaninfo(Ether* ether, Ctlr *ctlr, int len) -{ - int i, j; - Netfile **ep, *f, **fp; - Block *bp; - WScan *wsp; - ushort *scanbuf; - - scanbuf = malloc(len*2); - if(scanbuf == nil) - return; - - for (i = 0; i < len ; i++) - scanbuf[i] = csr_ins(ctlr, WR_Data1); - - /* calculate number of samples */ - len /= 25; - if(len == 0) - goto out; - - i = ether->scan; - ep = ðer->f[Ntypes]; - for(fp = ether->f; fp < ep && i > 0; fp++){ - f = *fp; - if(f == nil || f->scan == 0) - continue; - - bp = iallocb(100*len); - if(bp == nil) - break; - for(j = 0; j < len; j++){ - wsp = (WScan*)(&scanbuf[j*25]); - if(wsp->ssid_len > 32) - wsp->ssid_len = 32; - bp->wp = (uchar*)seprint((char*)bp->wp, (char*)bp->lim, - "ssid=%.*s;bssid=%E;signal=%d;noise=%d;chan=%d%s\n", - wsp->ssid_len, wsp->ssid, wsp->bssid, wsp->signal, - wsp->noise, wsp->chan, (wsp->capinfo&(1<<4))?";wep":""); - } - qpass(f->in, bp); - i--; - } -out: - free(scanbuf); -} - -static int -w_info(Ether *ether, Ctlr* ctlr) -{ - int sp; - Wltv ltv; - - sp = csr_ins(ctlr, WR_InfoId); - ltv.len = ltv.type = 0; - w_read(ctlr, sp, 0, <v, 4); - ltv.len--; - switch(ltv.type){ - case WTyp_Stats: - w_stats(ctlr, ltv.len); - return 0; - case WTyp_Scan: - w_scaninfo(ether, ctlr, ltv.len); - return 0; - } - return -1; -} - -/* set scanning interval */ -static void -w_scanbs(void *a, uint secs) -{ - Ether *ether = a; - Ctlr* ctlr = (Ctlr*) ether->ctlr; - - ctlr->scanticks = secs*(1000/MSperTick); -} - -static void -w_intr(Ether *ether) -{ - int rc, txid; - Ctlr* ctlr = (Ctlr*) ether->ctlr; - - if((ctlr->state & Power) == 0) - return; - - if((ctlr->state & Attached) == 0){ - csr_ack(ctlr, 0xffff); - csr_outs(ctlr, WR_IntEna, 0); - return; - } - - rc = csr_ins(ctlr, WR_EvSts); - csr_ack(ctlr, ~WEvs); // Not interested in them - if(rc & WRXEv){ - w_rxdone(ether); - csr_ack(ctlr, WRXEv); - } - if(rc & WTXEv){ - w_txdone(ctlr, rc); - csr_ack(ctlr, WTXEv); - } - if(rc & WAllocEv){ - ctlr->nalloc++; - txid = csr_ins(ctlr, WR_Alloc); - csr_ack(ctlr, WAllocEv); - if(txid == ctlr->txdid){ - if((rc & WTXEv) == 0) - w_txdone(ctlr, rc); - } - } - if(rc & WInfoEv){ - ctlr->ninfo++; - w_info(ether, ctlr); - csr_ack(ctlr, WInfoEv); - } - if(rc & WTxErrEv){ - w_txdone(ctlr, rc); - csr_ack(ctlr, WTxErrEv); - } - if(rc & WIDropEv){ - ctlr->nidrop++; - csr_ack(ctlr, WIDropEv); - } - w_txstart(ether); -} - -// Watcher to ensure that the card still works properly and -// to request WStats updates once a minute. -// BUG: it runs much more often, see the comment below. - -static void -w_timer(void* arg) -{ - Ether* ether = (Ether*) arg; - Ctlr* ctlr = (Ctlr*)ether->ctlr; - - ctlr->timerproc = up; - while(waserror()) - ; - for(;;){ - tsleep(&up->sleep, return0, 0, MSperTick); - ctlr = (Ctlr*)ether->ctlr; - if(ctlr == 0) - break; - if((ctlr->state & (Attached|Power)) != (Attached|Power)) - continue; - ctlr->ticks++; - - ilock(ctlr); - - // Seems that the card gets frames BUT does - // not send the interrupt; this is a problem because - // I suspect it runs out of receive buffers and - // stops receiving until a transmit watchdog - // reenables the card. - // The problem is serious because it leads to - // poor rtts. - // This can be seen clearly by commenting out - // the next if and doing a ping: it will stop - // receiving (although the icmp replies are being - // issued from the remote) after a few seconds. - // Of course this `bug' could be because I'm reading - // the card frames in the wrong way; due to the - // lack of documentation I cannot know. - - if(csr_ins(ctlr, WR_EvSts)&WEvs){ - ctlr->tickintr++; - w_intr(ether); - } - - if((ctlr->ticks % 10) == 0) { - if(ctlr->txtmout && --ctlr->txtmout == 0){ - ctlr->nwatchdogs++; - w_txdone(ctlr, WTxErrEv); - if(w_enable(ether)){ - DEBUG("wavelan: wdog enable failed\n"); - } - w_txstart(ether); - } - if((ctlr->ticks % 120) == 0) - if(ctlr->txbusy == 0) - w_cmd(ctlr, WCmdEnquire, WTyp_Stats); - if(ctlr->scanticks > 0) - if((ctlr->ticks % ctlr->scanticks) == 0) - if(ctlr->txbusy == 0) - w_cmd(ctlr, WCmdEnquire, WTyp_Scan); - } - iunlock(ctlr); - } - pexit("terminated", 1); -} - -void -w_multicast(void*, uchar*, int) -{ - // BUG: to be added. -} - -void -w_attach(Ether* ether) -{ - Ctlr* ctlr; - char name[64]; - int rc; - - if(ether->ctlr == 0) - return; - - snprint(name, sizeof(name), "#l%dtimer", ether->ctlrno); - ctlr = (Ctlr*) ether->ctlr; - if((ctlr->state & Attached) == 0){ - ilock(ctlr); - rc = w_enable(ether); - iunlock(ctlr); - if(rc == 0){ - ctlr->state |= Attached; - kproc(name, w_timer, ether); - } else - print("#l%d: enable failed\n",ether->ctlrno); - } -} - -void -w_detach(Ether* ether) -{ - Ctlr* ctlr; - char name[64]; - - if(ether->ctlr == nil) - return; - - snprint(name, sizeof(name), "#l%dtimer", ether->ctlrno); - ctlr = (Ctlr*) ether->ctlr; - if(ctlr->state & Attached){ - ilock(ctlr); - w_intdis(ctlr); - if(ctlr->timerproc){ - if(!postnote(ctlr->timerproc, 1, "kill", NExit)) - print("timerproc note not posted\n"); - print("w_detach, killing 0x%p\n", ctlr->timerproc); - } - ctlr->state &= ~Attached; - iunlock(ctlr); - } - ether->ctlr = nil; -} - -void -w_power(Ether* ether, int on) -{ - Ctlr *ctlr; - - ctlr = (Ctlr*) ether->ctlr; - ilock(ctlr); -iprint("w_power %d\n", on); - if(on){ - if((ctlr->state & Power) == 0){ - if (wavelanreset(ether, ctlr) < 0){ - iprint("w_power: reset failed\n"); - iunlock(ctlr); - w_detach(ether); - free(ctlr); - return; - } - if(ctlr->state & Attached) - w_enable(ether); - ctlr->state |= Power; - } - }else{ - if(ctlr->state & Power){ - if(ctlr->state & Attached) - w_intdis(ctlr); - ctlr->state &= ~Power; - } - } - iunlock(ctlr); -} - -#define PRINTSTAT(fmt,val) l += snprint(p+l, READSTR-l, (fmt), (val)) -#define PRINTSTR(fmt) l += snprint(p+l, READSTR-l, (fmt)) - -long -w_ifstat(Ether* ether, void* a, long n, ulong offset) -{ - Ctlr *ctlr = (Ctlr*) ether->ctlr; - char *k, *p; - int i, l, txid; - - ether->oerrs = ctlr->ntxerr; - ether->crcs = ctlr->nrxfcserr; - ether->frames = 0; - ether->buffs = ctlr->nrxdropnobuf; - ether->overflows = 0; - - // - // Offset must be zero or there's a possibility the - // new data won't match the previous read. - // - if(n == 0 || offset != 0) - return 0; - - p = malloc(READSTR); - l = 0; - - PRINTSTAT("Signal: %d\n", ctlr->signal-149); - PRINTSTAT("Noise: %d\n", ctlr->noise-149); - PRINTSTAT("SNR: %ud\n", ctlr->signal-ctlr->noise); - PRINTSTAT("Interrupts: %lud\n", ctlr->nints); - PRINTSTAT("Double Interrupts: %lud\n", ctlr->ndoubleint); - PRINTSTAT("TxPackets: %lud\n", ctlr->ntx); - PRINTSTAT("RxPackets: %lud\n", ctlr->nrx); - PRINTSTAT("TxErrors: %lud\n", ctlr->ntxerr); - PRINTSTAT("RxErrors: %lud\n", ctlr->nrxerr); - PRINTSTAT("TxRequests: %lud\n", ctlr->ntxrq); - PRINTSTAT("AllocEvs: %lud\n", ctlr->nalloc); - PRINTSTAT("InfoEvs: %lud\n", ctlr->ninfo); - PRINTSTAT("InfoDrop: %lud\n", ctlr->nidrop); - PRINTSTAT("WatchDogs: %lud\n", ctlr->nwatchdogs); - PRINTSTAT("Ticks: %ud\n", ctlr->ticks); - PRINTSTAT("TickIntr: %ud\n", ctlr->tickintr); - k = ((ctlr->state & Attached) ? "attached" : "not attached"); - PRINTSTAT("Card %s", k); - k = ((ctlr->state & Power) ? "on" : "off"); - PRINTSTAT(", power %s", k); - k = ((ctlr->txbusy)? ", txbusy" : ""); - PRINTSTAT("%s\n", k); - - if(ctlr->hascrypt){ - PRINTSTR("Keys: "); - for (i = 0; i < WNKeys; i++){ - if(ctlr->keys.keys[i].len == 0) - PRINTSTR("none "); - else if(SEEKEYS == 0) - PRINTSTR("set "); - else - PRINTSTAT("%s ", ctlr->keys.keys[i].dat); - } - PRINTSTR("\n"); - } - - // real card stats - ilock(ctlr); - PRINTSTR("\nCard stats: \n"); - PRINTSTAT("Status: %ux\n", csr_ins(ctlr, WR_Sts)); - PRINTSTAT("Event status: %ux\n", csr_ins(ctlr, WR_EvSts)); - i = ltv_ins(ctlr, WTyp_Ptype); - PRINTSTAT("Port type: %d\n", i); - PRINTSTAT("Transmit rate: %d\n", ltv_ins(ctlr, WTyp_TxRate)); - PRINTSTAT("Current Transmit rate: %d\n", - ltv_ins(ctlr, WTyp_CurTxRate)); - PRINTSTAT("Channel: %d\n", ltv_ins(ctlr, WTyp_Chan)); - PRINTSTAT("AP density: %d\n", ltv_ins(ctlr, WTyp_ApDens)); - PRINTSTAT("Promiscuous mode: %d\n", ltv_ins(ctlr, WTyp_Prom)); - if(i == WPTypeAdHoc) - PRINTSTAT("SSID name: %s\n", ltv_inname(ctlr, WTyp_NetName)); - else { - Wltv ltv; - PRINTSTAT("Current name: %s\n", ltv_inname(ctlr, WTyp_CurName)); - ltv.type = WTyp_BaseID; - ltv.len = 4; - if(w_inltv(ctlr, <v)) - print("#l%d: unable to read base station mac addr\n", ether->ctlrno); - l += snprint(p+l, READSTR-l, "Base station: %2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n", - ltv.addr[0], ltv.addr[1], ltv.addr[2], ltv.addr[3], ltv.addr[4], ltv.addr[5]); - } - PRINTSTAT("Net name: %s\n", ltv_inname(ctlr, WTyp_WantName)); - PRINTSTAT("Node name: %s\n", ltv_inname(ctlr, WTyp_NodeName)); - if(ltv_ins(ctlr, WTyp_HasCrypt) == 0) - PRINTSTR("WEP: not supported\n"); - else { - if(ltv_ins(ctlr, WTyp_Crypt) == 0) - PRINTSTR("WEP: disabled\n"); - else{ - PRINTSTR("WEP: enabled\n"); - k = ((ctlr->xclear)? "excluded": "included"); - PRINTSTAT("Clear packets: %s\n", k); - txid = ltv_ins(ctlr, WTyp_TxKey); - PRINTSTAT("Transmit key id: %d\n", txid); - } - } - iunlock(ctlr); - - PRINTSTAT("ntxuframes: %lud\n", ctlr->ntxuframes); - PRINTSTAT("ntxmframes: %lud\n", ctlr->ntxmframes); - PRINTSTAT("ntxfrags: %lud\n", ctlr->ntxfrags); - PRINTSTAT("ntxubytes: %lud\n", ctlr->ntxubytes); - PRINTSTAT("ntxmbytes: %lud\n", ctlr->ntxmbytes); - PRINTSTAT("ntxdeferred: %lud\n", ctlr->ntxdeferred); - PRINTSTAT("ntxsretries: %lud\n", ctlr->ntxsretries); - PRINTSTAT("ntxmultiretries: %lud\n", ctlr->ntxmultiretries); - PRINTSTAT("ntxretrylimit: %lud\n", ctlr->ntxretrylimit); - PRINTSTAT("ntxdiscards: %lud\n", ctlr->ntxdiscards); - PRINTSTAT("nrxuframes: %lud\n", ctlr->nrxuframes); - PRINTSTAT("nrxmframes: %lud\n", ctlr->nrxmframes); - PRINTSTAT("nrxfrags: %lud\n", ctlr->nrxfrags); - PRINTSTAT("nrxubytes: %lud\n", ctlr->nrxubytes); - PRINTSTAT("nrxmbytes: %lud\n", ctlr->nrxmbytes); - PRINTSTAT("nrxfcserr: %lud\n", ctlr->nrxfcserr); - PRINTSTAT("nrxdropnobuf: %lud\n", ctlr->nrxdropnobuf); - PRINTSTAT("nrxdropnosa: %lud\n", ctlr->nrxdropnosa); - PRINTSTAT("nrxcantdecrypt: %lud\n", ctlr->nrxcantdecrypt); - PRINTSTAT("nrxmsgfrag: %lud\n", ctlr->nrxmsgfrag); - PRINTSTAT("nrxmsgbadfrag: %lud\n", ctlr->nrxmsgbadfrag); - USED(l); - n = readstr(offset, a, n, p); - free(p); - return n; -} -#undef PRINTSTR -#undef PRINTSTAT - -int -w_option(Ctlr* ctlr, char* buf, long n) -{ - char *p; - int i, r; - WKey *key; - Cmdbuf *cb; - - r = 0; - - cb = parsecmd(buf, n); - if(cb->nf < 2) - r = -1; - else if(cistrcmp(cb->f[0], "essid") == 0){ - if(cistrcmp(cb->f[1],"default") == 0) - p = ""; - else - p = cb->f[1]; - if(ctlr->ptype == WPTypeAdHoc){ - memset(ctlr->netname, 0, sizeof(ctlr->netname)); - strncpy(ctlr->netname, p, WNameLen); - } - else{ - memset(ctlr->wantname, 0, sizeof(ctlr->wantname)); - strncpy(ctlr->wantname, p, WNameLen); - } - } - else if(cistrcmp(cb->f[0], "station") == 0){ - memset(ctlr->nodename, 0, sizeof(ctlr->nodename)); - strncpy(ctlr->nodename, cb->f[1], WNameLen); - } - else if(cistrcmp(cb->f[0], "channel") == 0){ - if((i = atoi(cb->f[1])) >= 1 && i <= 16) - ctlr->chan = i; - else - r = -1; - } - else if(cistrcmp(cb->f[0], "mode") == 0){ - if(cistrcmp(cb->f[1], "managed") == 0) - ctlr->ptype = WPTypeManaged; - else if(cistrcmp(cb->f[1], "wds") == 0) - ctlr->ptype = WPTypeWDS; - else if(cistrcmp(cb->f[1], "adhoc") == 0) - ctlr->ptype = WPTypeAdHoc; - else if((i = atoi(cb->f[1])) >= 1 && i <= 3) - ctlr->ptype = i; - else - r = -1; - } - else if(cistrcmp(cb->f[0], "ibss") == 0){ - if(cistrcmp(cb->f[1], "on") == 0) - ctlr->createibss = 1; - else - ctlr->createibss = 0; - } - else if(cistrcmp(cb->f[0], "crypt") == 0){ - if(cistrcmp(cb->f[1], "off") == 0) - ctlr->crypt = 0; - else if(cistrcmp(cb->f[1], "on") == 0 && ctlr->hascrypt) - ctlr->crypt = 1; - else - r = -1; - } - else if(cistrcmp(cb->f[0], "clear") == 0){ - if(cistrcmp(cb->f[1], "on") == 0) - ctlr->xclear = 0; - else if(cistrcmp(cb->f[1], "off") == 0 && ctlr->hascrypt) - ctlr->xclear = 1; - else - r = -1; - } - else if(cistrncmp(cb->f[0], "key", 3) == 0){ - if((i = atoi(cb->f[0]+3)) >= 1 && i <= WNKeys){ - ctlr->txkey = i-1; - key = &ctlr->keys.keys[ctlr->txkey]; - key->len = strlen(cb->f[1]); - if(key->len > WKeyLen) - key->len = WKeyLen; - memset(key->dat, 0, sizeof(key->dat)); - memmove(key->dat, cb->f[1], key->len); - } - else - r = -1; - } - else if(cistrcmp(cb->f[0], "txkey") == 0){ - if((i = atoi(cb->f[1])) >= 1 && i <= WNKeys) - ctlr->txkey = i-1; - else - r = -1; - } - else if(cistrcmp(cb->f[0], "pm") == 0){ - if(cistrcmp(cb->f[1], "off") == 0) - ctlr->pmena = 0; - else if(cistrcmp(cb->f[1], "on") == 0){ - ctlr->pmena = 1; - if(cb->nf == 3){ - i = atoi(cb->f[2]); - // check range here? what are the units? - ctlr->pmwait = i; - } - } - else - r = -1; - } - else - r = -2; - free(cb); - - return r; -} - -long -w_ctl(Ether* ether, void* buf, long n) -{ - Ctlr *ctlr; - - if((ctlr = ether->ctlr) == nil) - error(Enonexist); - if((ctlr->state & Attached) == 0) - error(Eshutdown); - - ilock(ctlr); - if(w_option(ctlr, buf, n)){ - iunlock(ctlr); - error(Ebadctl); - } - if(ctlr->txbusy) - w_txdone(ctlr, WTxErrEv); - w_enable(ether); - w_txstart(ether); - iunlock(ctlr); - - return n; -} - -void -w_transmit(Ether* ether) -{ - Ctlr* ctlr = ether->ctlr; - - if(ctlr == 0) - return; - - ilock(ctlr); - ctlr->ntxrq++; - w_txstart(ether); - iunlock(ctlr); -} - -void -w_promiscuous(void* arg, int on) -{ - Ether* ether = (Ether*)arg; - Ctlr* ctlr = ether->ctlr; - - if(ctlr == nil) - error("card not found"); - if((ctlr->state & Attached) == 0) - error("card not attached"); - ilock(ctlr); - ltv_outs(ctlr, WTyp_Prom, (on?1:0)); - iunlock(ctlr); -} - -void -w_interrupt(Ureg* ,void* arg) -{ - Ether* ether = (Ether*) arg; - Ctlr* ctlr = (Ctlr*) ether->ctlr; - - if(ctlr == 0) - return; - ilock(ctlr); - ctlr->nints++; - w_intr(ether); - iunlock(ctlr); -} - -int -wavelanreset(Ether* ether, Ctlr *ctlr) -{ - Wltv ltv; - - iprint("wavelanreset, iob 0x%ux\n", ctlr->iob); - w_intdis(ctlr); - if(w_cmd(ctlr,WCmdIni,0)){ - iprint("#l%d: init failed\n", ether->ctlrno); - return -1; - } - w_intdis(ctlr); - ltv_outs(ctlr, WTyp_Tick, 8); - - ctlr->chan = 0; - ctlr->ptype = WDfltPType; - ctlr->txkey = 0; - ctlr->createibss = 0; - ctlr->keys.len = sizeof(WKey)*WNKeys/2 + 1; - ctlr->keys.type = WTyp_Keys; - if(ctlr->hascrypt = ltv_ins(ctlr, WTyp_HasCrypt)) - ctlr->crypt = 1; - *ctlr->netname = *ctlr->wantname = 0; - strcpy(ctlr->nodename, "Plan 9 STA"); - - ctlr->netname[WNameLen-1] = 0; - ctlr->wantname[WNameLen-1] = 0; - ctlr->nodename[WNameLen-1] =0; - - ltv.type = WTyp_Mac; - ltv.len = 4; - if(w_inltv(ctlr, <v)){ - iprint("#l%d: unable to read mac addr\n", - ether->ctlrno); - return -1; - } - memmove(ether->ea, ltv.addr, Eaddrlen); - - if(ctlr->chan == 0) - ctlr->chan = ltv_ins(ctlr, WTyp_Chan); - ctlr->apdensity = WDfltApDens; - ctlr->rtsthres = WDfltRtsThres; - ctlr->txrate = WDfltTxRate; - ctlr->maxlen = WMaxLen; - ctlr->pmena = 0; - ctlr->pmwait = 100; - ctlr->signal = 1; - ctlr->noise = 1; - ctlr->state |= Power; - - // free old Ctlr struct if resetting after suspend - if(ether->ctlr && ether->ctlr != ctlr) - free(ether->ctlr); - - // link to ether - ether->ctlr = ctlr; - ether->mbps = 10; - ether->attach = w_attach; - ether->detach = w_detach; - ether->interrupt = w_interrupt; - ether->transmit = w_transmit; - ether->ifstat = w_ifstat; - ether->ctl = w_ctl; - ether->power = w_power; - ether->promiscuous = w_promiscuous; - ether->multicast = w_multicast; - ether->scanbs = w_scanbs; - ether->arg = ether; - - DEBUG("#l%d: irq %lud port %lx type %s", - ether->ctlrno, ether->intnum, ether->ports[0].port, ether->type); - DEBUG(" %2.2ux%2.2ux%2.2ux%2.2ux%2.2ux%2.2ux\n", - ether->ea[0], ether->ea[1], ether->ea[2], - ether->ea[3], ether->ea[4], ether->ea[5]); - - return 0; -} - -char* wavenames[] = { - "WaveLAN/IEEE", - "TrueMobile 1150", - "Instant Wireless ; Network PC CARD", - "Instant Wireless Network PC Card", - "Avaya Wireless PC Card", - "AirLancer MC-11", - nil, -}; diff --git a/sys/src/9/bitsy/wavelan.h b/sys/src/9/bitsy/wavelan.h deleted file mode 100644 index c3db893c1..000000000 --- a/sys/src/9/bitsy/wavelan.h +++ /dev/null @@ -1 +0,0 @@ -#include "../pc/wavelan.h" diff --git a/sys/src/9/mkfile b/sys/src/9/mkfile index 45dfa7027..b6a4445dd 100644 --- a/sys/src/9/mkfile +++ b/sys/src/9/mkfile @@ -1,6 +1,5 @@ ARCH=\ bcm\ - bitsy\ kw\ mtx\ omap\