Skip to content

Instantly share code, notes, and snippets.

@rbobillot
Last active November 16, 2022 17:35
Show Gist options
  • Save rbobillot/acf3ec4e5323e54aab8e16ee13ac6a7d to your computer and use it in GitHub Desktop.
Save rbobillot/acf3ec4e5323e54aab8e16ee13ac6a7d to your computer and use it in GitHub Desktop.
pkm_ser_de: Python3.10 Script to Serialize/Deserialize Gen4's .pkm files (from/to JSON), it can also edit some fields
#!/usr/bin/env python3.10
import itertools
import json
import random
import struct
import sys
import uuid
from array import array
from base64 import b64encode, b64decode
from binascii import hexlify
def get_nickname(namebytes, origin_game):
"""
--- GEN 4
Reads bytes from the nickname's offsets.
Each nickname letters, comes from unicode_char table
each unicode_char is encoded on 2 bytes
we need to read bytes 2 by 2, and merge them to get the unicode_char value
Bytes pairs are in little endian : ['\b7800', '\b3c01', ...]
They must be swapped : ['\b0078', '\b013c', ...]
Once they are properly formatted, they are converted to unicode chars,
using the unicode_char array,
with current_byte (\b0078...) being the array's index
--- GEN 5
Reads bytes from the nickname's offsets.
Each nickname letters, is a simple ASCII char
"""
name = ''
for i in range(0, len(namebytes), 2):
cur_byte = eval(hex(namebytes[i+1]) + hex(namebytes[i])[2:])
if namebytes[i] == 0xff:
return name
if origin_game and any(gen5 in origin_game for gen5 in ['White','Black']):
name += chr(namebytes[i])
else:
name += chr(unicode_char[cur_byte-1])
return name
def update_field(pkm, json_data, field):
field_data = json_data[field]
p = array('B')
p.frombytes(pkm)
def update_checksum():
# Simulate the C#'s BitConverter.ToUInt16 method
def to_uint_16(bs, i):
return ((bs[i+1] & 0xff) << 8) | (bs[i] & 0xff)
# seems like the uint16 sum cannot be shortened
# using a 'sum' function (without breaking the 16bit masking)
chksm = 0
for i in range(0x8, 0x88, 2):
chksm += to_uint_16(p, i)
# Maksing and swapping bytes
chksm &= 0xffff
# print(f"Src checksum: 0x{hexlify(p[0x06:0x08]).decode('utf-8')}")
p[0x06] = chksm & 0xff
p[0x07] = (chksm >> 8) & 0xff
# print(f"New checksum: 0x{hexlify(p[0x06:0x08]).decode('utf-8')}")
def modify_name_in_range(name, start, end):
"""
This function works the same way for:
- Pokemon's nickname
- Original Trainer's name
First we need to modify specific bytes ranges (those for Nickname, and OT)
As we modifiy letters in Nickname, or OT fields,
we need to find the index of unicode_char, for each modified letter
composing Nickname or OT.
We will eventually need to find the index of each modified letter from unicode_char
and convert them for the game, through the ingame_char list,
applying each index found
We wont be able to update bytes with the unicode_char value
indeed each unicode_char is encoded with 2 bytes
therefore, we will need to split each unicode_char in 2 bytes
According the function 'get_nickname',
we know the letters bytes are formatted in little endian
hense, we need to swap them again
At the end of the modified word,
we add "ending markers" (0xffff, 0x0000, 0x0000...)
until the end of the range
"""
for i in range(start, end, 2):
index = int((i - start) / 2) # new nickname's index
length = len(name) # new nickname's length
if index < length:
# TODO: handle Gen 5 name (cf get_nickname)
ingame_char_index = [n for n,e in enumerate(unicode_char) if name[index] == chr(e)][0]
p[i] = ingame_char[ingame_char_index] & 0xff # assign unicode first byte
p[i+1] = ingame_char[ingame_char_index] >> 8 # assign unicode second byte
elif index in [length, length+1]:
p[i] = p[i+1] = 0xff
else:
p[i] = p[i+1] = 0x00
if 'name' == field:
modify_name_in_range(list(field_data), 0x48, 0x5e)
elif 'ot' == field:
modify_name_in_range(list(field_data), 0x68, 0x78)
elif 'happiness' == field:
p[0x14] = field_data
elif 'original_language' == field:
p[0x17] = field_data
elif 'origin_game' == field:
p[0x5f] = field_data
update_checksum()
return p.tobytes()
def json_to_pkm(json_str, pkm_format):
"""
Converts json to pkm, using the 'raw_pkm_data' field
Also if some fields are modified,
and listed in 'modified_fields'
the right bytes will be updated, including the mentionned fields changes
"""
j = json.loads(json_str)
pkm = b64decode(j['raw_pkm_data'])
modified_fields = []
handled_fields = [
'name',
'happiness',
'ot',
'original_language',
'origin_game'
]
def save_pkm(data):
write_to_file(f"./{j['species']}-{j['holding'].replace(' ', '-').lower()}-{j['id'][-6:]}.pkm", data, "wb")
if 'modified_fields' in j:
modified_fields = j['modified_fields']
if not isinstance(modified_fields, list):
print('No fields were modified ("modified_fields" must be a list of strings)')
save_pkm(pkm)
return pkm
if not modified_fields:
save_pkm(pkm)
return pkm
if any((not field in j) for field in modified_fields):
unknown = [field for field in modified_fields if (not field in j)]
print(f"No fields were modified (Some fields do not exist: {unknown})")
save_pkm(pkm)
return pkm
if any((not field in handled_fields) for field in modified_fields):
unhandled = [field for field in modified_fields if (not field in handled_fields)]
print(f"No fields were modified (Some fields are not handled yet: {unhandled})")
save_pkm(pkm)
return pkm
# check if the target fields were actually modified
# (comparing json, and raw_data's json target fields)
json_from_raw = pkm_to_json(pkm, write_and_display_json=False)
[modifs1, modifs2] = list(map(lambda x: {k:v for k, v in x.items() if k in modified_fields}, [json_from_raw, j]))
if modifs1 == modifs2:
save_pkm(pkm)
return pkm
for field in modified_fields:
pkm = update_field(pkm, j, field)
print(f"Modified fields: {modified_fields}")
save_pkm(pkm)
return pkm
def pkm_to_json(pkm, write_and_display_json=True):
p = array('B')
p.frombytes(pkm)
raw_pkm_data_b64 = b64encode(pkm).decode("utf-8")
### unencrypted bytes
pid = p[0x00] + (p[0x01] << 8) + (p[0x02] << 16) + (p[0x03] << 24)
chksm = '0x' + hexlify(p[0x06:0x08]).decode('utf-8')
### encrypted bytes
# Block A
nat_dex_id = (p[0x09] << 8) + p[0x08]
held_item = items.get((p[0x0b] << 8) + p[0x0a])
otid = (p[0x0d] << 8) + p[0x0c]
secid = (p[0x0f] << 8) + p[0x0e]
xp = p[0x10:0x14] # TODO
happy = p[0x14]
abil = ability.get(p[0x15])
markings = p[0x16] # TODO
orig_lang = languages[p[0x17]]
evs = evcheck(p[0x18:0x1e])
# Block B
moves = get_moves(p[0x28:0x30])
ivs = ivcheck(p[0x38:0x3c])
if p[0x40] & (1 << 2): # bit 2
gender = 'Genderless'
elif p[0x40] & (1 << 1): # bit 1
gender = 'Female'
else: # bit 3->7
gender = 'Male'
# Block C
origin_game = gorigin.get(p[0x5f])
nickname = get_nickname(p[0x48:0x5e], origin_game)
# Block D
otname = get_nickname(p[0x68:0x78], origin_game)
level = p[0x8c]
nat = nature.get(pid % 25)
spec = species.get(nat_dex_id)
hidden = hiddenpower(ivs)
shiny = shinycheck(pid, otid, secid)
pkm_uuid = str(uuid.uuid4())
pkm_json_str = json.dumps({
"id" : pkm_uuid,
"checksum" : chksm,
"name" : nickname,
"index" : nat_dex_id,
"holding" : held_item,
"shiny" : shiny,
"level" : level,
"happiness" : happy,
"nature" : nat,
"species" : spec,
"ability" : abil,
"gender" : gender,
"ot" : otname,
"tid" : otid,
"sid" : secid,
# "origin_game" : origin_game,
"hidden_power" : hidden,
"moves" : moves,
"ivs" : dict(zip(["hp", "atk", "def", "spa", "spd", "spe"], ivs)),
"evs" : dict(zip(["hp", "atk", "def", "spa", "spd", "spe", "total"], evs)),
"original_language" : orig_lang,
"modified_fields" : [],
"raw_pkm_data" : raw_pkm_data_b64,
}, indent=2, ensure_ascii=False)
if write_and_display_json:
write_to_file(f"./{spec}-{held_item.replace(' ', '-').lower()}-{pkm_uuid[-6:]}.json", pkm_json_str, "w")
print(pkm_json_str)
return json.loads(pkm_json_str)
def ivcheck(b):
ivs = b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24)
hp = (ivs & 0x0000001f)
atk = (ivs & 0x000003e0) >> 5
df = (ivs & 0x00007c00) >> 10
spe = (ivs & 0x000f8000) >> 15
spa = (ivs & 0x01f00000) >> 20
spd = (ivs & 0x3e000000) >> 25
return [hp, atk, df, spa, spd, spe]
def evcheck(b):
hp = b[0]
atk = b[1]
df = b[2]
spe = b[3]
spa = b[4]
spd = b[5]
total = hp + atk + df + spe + spa + spd
return [hp, atk, df, spa, spd, spe, total]
def get_moves(b):
a1 = attacks.get(b[0] + (b[1] << 8))
a2 = attacks.get(b[2] + (b[3] << 8))
a3 = attacks.get(b[4] + (b[5] << 8))
a4 = attacks.get(b[6] + (b[7] << 8))
return [a1, a2, a3, a4]
def shinycheck(pid, otid, secid):
pida = pid >> 16
pidb = pid & 0xffff
ids = otid ^ secid
pids = pida ^ pidb
return (ids ^ pids) < 8
def hiddenpower(ivs):
t = 0
p = 0
for i in range(6):
t += (ivs[i] % 2) * (2 ** i)
m = ivs[i] % 4
if m == 2 or m == 3:
p += 2 ** i
t = int((t * 15) / 63)
p = int((p * 40) / 63) + 30
return { "power_type" : hptype.get(t), "base_power" : p }
languages = {
0x1 : "日本語 (Japan)",
0x2 : "English (US/UK/AU)",
0x3 : "Français (France/Québec)",
0x4 : "Italiano (Italy)",
0x5 : "Deutsch (Germany)",
0x6 : "Español (Spain/Latin Americas)",
0x7 : "한국어 (South Korea)"
}
species = {
1: 'Bulbasaur',
2: 'Ivysaur',
3: 'Venusaur',
4: 'Charmander',
5: 'Charmeleon',
6: 'Charizard',
7: 'Squirtle',
8: 'Wartortle',
9: 'Blastoise',
10: 'Caterpie',
11: 'Metapod',
12: 'Butterfree',
13: 'Weedle',
14: 'Kakuna',
15: 'Beedrill',
16: 'Pidgey',
17: 'Pidgeotto',
18: 'Pidgeot',
19: 'Rattata',
20: 'Raticate',
21: 'Spearow',
22: 'Fearow',
23: 'Ekans',
24: 'Arbok',
25: 'Pikachu',
26: 'Raichu',
27: 'Sandshrew',
28: 'Sandslash',
29: 'Nidoran (F)',
30: 'Nidorina',
31: 'Nidoqueen',
32: 'Nidoran (M)',
33: 'Nidorino',
34: 'Nidoking',
35: 'Clefairy',
36: 'Clefable',
37: 'Vulpix',
38: 'Ninetales',
39: 'Jigglypuff',
40: 'Wigglytuff',
41: 'Zubat',
42: 'Golbat',
43: 'Oddish',
44: 'Gloom',
45: 'Vileplume',
46: 'Paras',
47: 'Parasect',
48: 'Venonat',
49: 'Venomoth',
50: 'Diglett',
51: 'Dugtrio',
52: 'Meowth',
53: 'Persian',
54: 'Psyduck',
55: 'Golduck',
56: 'Mankey',
57: 'Primeape',
58: 'Growlithe',
59: 'Arcanine',
60: 'Poliwag',
61: 'Poliwhirl',
62: 'Poliwrath',
63: 'Abra',
64: 'Kadabra',
65: 'Alakazam',
66: 'Machop',
67: 'Machoke',
68: 'Machamp',
69: 'Bellsprout',
70: 'Weepinbell',
71: 'Victreebel',
72: 'Tentacool',
73: 'Tentacruel',
74: 'Geodude',
75: 'Graveler',
76: 'Golem',
77: 'Ponyta',
78: 'Rapidash',
79: 'Slowpoke',
80: 'Slowbro',
81: 'Magnemite',
82: 'Magneton',
83: 'Farfetch\'d',
84: 'Doduo',
85: 'Dodrio',
86: 'Seel',
87: 'Dewgong',
88: 'Grimer',
89: 'Muk',
90: 'Shellder',
91: 'Cloyster',
92: 'Gastly',
93: 'Haunter',
94: 'Gengar',
95: 'Onix',
96: 'Drowzee',
97: 'Hypno',
98: 'Krabby',
99: 'Kingler',
100: 'Voltorb',
101: 'Electrode',
102: 'Exeggcute',
103: 'Exeggutor',
104: 'Cubone',
105: 'Marowak',
106: 'Hitmonlee',
107: 'Hitmonchan',
108: 'Lickitung',
109: 'Koffing',
110: 'Weezing',
111: 'Rhyhorn',
112: 'Rhydon',
113: 'Chansey',
114: 'Tangela',
115: 'Kangaskhan',
116: 'Horsea',
117: 'Seadra',
118: 'Goldeen',
119: 'Seaking',
120: 'Staryu',
121: 'Starmie',
122: 'Mr. Mime',
123: 'Scyther',
124: 'Jynx',
125: 'Electabuzz',
126: 'Magmar',
127: 'Pinsir',
128: 'Tauros',
129: 'Magikarp',
130: 'Gyarados',
131: 'Lapras',
132: 'Ditto',
133: 'Eevee',
134: 'Vaporeon',
135: 'Jolteon',
136: 'Flareon',
137: 'Porygon',
138: 'Omanyte',
139: 'Omastar',
140: 'Kabuto',
141: 'Kabutops',
142: 'Aerodactyl',
143: 'Snorlax',
144: 'Articuno',
145: 'Zapdos',
146: 'Moltres',
147: 'Dratini',
148: 'Dragonair',
149: 'Dragonite',
150: 'Mewtwo',
151: 'Mew',
152: 'Chikorita',
153: 'Bayleef',
154: 'Meganium',
155: 'Cyndaquil',
156: 'Quilava',
157: 'Typhlosion',
158: 'Totodile',
159: 'Croconaw',
160: 'Feraligatr',
161: 'Sentret',
162: 'Furret',
163: 'Hoothoot',
164: 'Noctowl',
165: 'Ledyba',
166: 'Ledian',
167: 'Spinarak',
168: 'Ariados',
169: 'Crobat',
170: 'Chinchou',
171: 'Lanturn',
172: 'Pichu',
173: 'Cleffa',
174: 'Igglybuff',
175: 'Togepi',
176: 'Togetic',
177: 'Natu',
178: 'Xatu',
179: 'Mareep',
180: 'Flaaffy',
181: 'Ampharos',
182: 'Bellossom',
183: 'Marill',
184: 'Azumarill',
185: 'Sudowoodo',
186: 'Politoed',
187: 'Hoppip',
188: 'Skiploom',
189: 'Jumpluff',
190: 'Aipom',
191: 'Sunkern',
192: 'Sunflora',
193: 'Yanma',
194: 'Wooper',
195: 'Quagsire',
196: 'Espeon',
197: 'Umbreon',
198: 'Murkrow',
199: 'Slowking',
200: 'Misdreavus',
201: 'Unown',
202: 'Wobbuffet',
203: 'Girafarig',
204: 'Pineco',
205: 'Forretress',
206: 'Dunsparce',
207: 'Gligar',
208: 'Steelix',
209: 'Snubbull',
210: 'Granbull',
211: 'Qwilfish',
212: 'Scizor',
213: 'Shuckle',
214: 'Heracross',
215: 'Sneasel',
216: 'Teddiursa',
217: 'Ursaring',
218: 'Slugma',
219: 'Magcargo',
220: 'Swinub',
221: 'Piloswine',
222: 'Corsola',
223: 'Remoraid',
224: 'Octillery',
225: 'Delibird',
226: 'Mantine',
227: 'Skarmory',
228: 'Houndour',
229: 'Houndoom',
230: 'Kingdra',
231: 'Phanpy',
232: 'Donphan',
233: 'Porygon2',
234: 'Stantler',
235: 'Smeargle',
236: 'Tyrogue',
237: 'Hitmontop',
238: 'Smoochum',
239: 'Elekid',
240: 'Magby',
241: 'Miltank',
242: 'Blissey',
243: 'Raikou',
244: 'Entei',
245: 'Suicune',
246: 'Larvitar',
247: 'Pupitar',
248: 'Tyranitar',
249: 'Lugia',
250: 'Ho-Oh',
251: 'Celebi',
252: 'Treecko',
253: 'Grovyle',
254: 'Sceptile',
255: 'Torchic',
256: 'Combusken',
257: 'Blaziken',
258: 'Mudkip',
259: 'Marshtomp',
260: 'Swampert',
261: 'Poochyena',
262: 'Mightyena',
263: 'Zigzagoon',
264: 'Linoone',
265: 'Wurmple',
266: 'Silcoon',
267: 'Beautifly',
268: 'Cascoon',
269: 'Dustox',
270: 'Lotad',
271: 'Lombre',
272: 'Ludicolo',
273: 'Seedot',
274: 'Nuzleaf',
275: 'Shiftry',
276: 'Taillow',
277: 'Swellow',
278: 'Wingull',
279: 'Pelipper',
280: 'Ralts',
281: 'Kirlia',
282: 'Gardevoir',
283: 'Surskit',
284: 'Masquerain',
285: 'Shroomish',
286: 'Breloom',
287: 'Slakoth',
288: 'Vigoroth',
289: 'Slaking',
290: 'Nincada',
291: 'Ninjask',
292: 'Shedinja',
293: 'Whismur',
294: 'Loudred',
295: 'Exploud',
296: 'Makuhita',
297: 'Hariyama',
298: 'Azurill',
299: 'Nosepass',
300: 'Skitty',
301: 'Delcatty',
302: 'Sableye',
303: 'Mawile',
304: 'Aron',
305: 'Lairon',
306: 'Aggron',
307: 'Meditite',
308: 'Medicham',
309: 'Electrike',
310: 'Manectric',
311: 'Plusle',
312: 'Minun',
313: 'Volbeat',
314: 'Illumise',
315: 'Roselia',
316: 'Gulpin',
317: 'Swalot',
318: 'Carvanha',
319: 'Sharpedo',
320: 'Wailmer',
321: 'Wailord',
322: 'Numel',
323: 'Camerupt',
324: 'Torkoal',
325: 'Spoink',
326: 'Grumpig',
327: 'Spinda',
328: 'Trapinch',
329: 'Vibrava',
330: 'Flygon',
331: 'Cacnea',
332: 'Cacturne',
333: 'Swablu',
334: 'Altaria',
335: 'Zangoose',
336: 'Seviper',
337: 'Lunatone',
338: 'Solrock',
339: 'Barboach',
340: 'Whiscash',
341: 'Corphish',
342: 'Crawdaunt',
343: 'Baltoy',
344: 'Claydol',
345: 'Lileep',
346: 'Cradily',
347: 'Anorith',
348: 'Armaldo',
349: 'Feebas',
350: 'Milotic',
351: 'Castform',
352: 'Kecleon',
353: 'Shuppet',
354: 'Banette',
355: 'Duskull',
356: 'Dusclops',
357: 'Tropius',
358: 'Chimecho',
359: 'Absol',
360: 'Wynaut',
361: 'Snorunt',
362: 'Glalie',
363: 'Spheal',
364: 'Sealeo',
365: 'Walrein',
366: 'Clamperl',
367: 'Huntail',
368: 'Gorebyss',
369: 'Relicanth',
370: 'Luvdisc',
371: 'Bagon',
372: 'Shelgon',
373: 'Salamence',
374: 'Beldum',
375: 'Metang',
376: 'Metagross',
377: 'Regirock',
378: 'Regice',
379: 'Registeel',
380: 'Latias',
381: 'Latios',
382: 'Kyogre',
383: 'Groudon',
384: 'Rayquaza',
385: 'Jirachi',
386: 'Deoxys',
387: 'Turtwig',
388: 'Grotle',
389: 'Torterra',
390: 'Chimchar',
391: 'Monferno',
392: 'Infernape',
393: 'Piplup',
394: 'Prinplup',
395: 'Empoleon',
396: 'Starly',
397: 'Staravia',
398: 'Staraptor',
399: 'Bidoof',
400: 'Bibarel',
401: 'Kricketot',
402: 'Kricketune',
403: 'Shinx',
404: 'Luxio',
405: 'Luxray',
406: 'Budew',
407: 'Roserade',
408: 'Cranidos',
409: 'Rampardos',
410: 'Shieldon',
411: 'Bastiodon',
412: 'Burmy',
413: 'Wormadam',
414: 'Mothim',
415: 'Combee',
416: 'Vespiquen',
417: 'Pachirisu',
418: 'Buizel',
419: 'Floatzel',
420: 'Cherubi',
421: 'Cherrim',
422: 'Shellos',
423: 'Gastrodon',
424: 'Ambipom',
425: 'Drifloon',
426: 'Drifblim',
427: 'Buneary',
428: 'Lopunny',
429: 'Mismagius',
430: 'Honchkrow',
431: 'Glameow',
432: 'Purugly',
433: 'Chingling',
434: 'Stunky',
435: 'Skuntank',
436: 'Bronzor',
437: 'Bronzong',
438: 'Bonsly',
439: 'Mime Jr.',
440: 'Happiny',
441: 'Chatot',
442: 'Spiritomb',
443: 'Gible',
444: 'Gabite',
445: 'Garchomp',
446: 'Munchlax',
447: 'Riolu',
448: 'Lucario',
449: 'Hippopotas',
450: 'Hippowdon',
451: 'Skorupi',
452: 'Drapion',
453: 'Croagunk',
454: 'Toxicroak',
455: 'Carnivine',
456: 'Finneon',
457: 'Lumineon',
458: 'Mantyke',
459: 'Snover',
460: 'Abomasnow',
461: 'Weavile',
462: 'Magnezone',
463: 'Lickilicky',
464: 'Rhyperior',
465: 'Tangrowth',
466: 'Electivire',
467: 'Magmortar',
468: 'Togekiss',
469: 'Yanmega',
470: 'Leafeon',
471: 'Glaceon',
472: 'Gliscor',
473: 'Mamoswine',
474: 'Porygon-Z',
475: 'Gallade',
476: 'Probopass',
477: 'Dusknoir',
478: 'Froslass',
479: 'Rotom',
480: 'Uxie',
481: 'Mesprit',
482: 'Azelf',
483: 'Dialga',
484: 'Palkia',
485: 'Heatran',
486: 'Regigigas',
487: 'Giratina',
488: 'Cresselia',
489: 'Phione',
490: 'Manaphy',
491: 'Darkrai',
492: 'Shaymin',
493: 'Arceus',
494: 'Victini',
495: 'Snivy',
496: 'Servine',
497: 'Serperior',
498: 'Tepig',
499: 'Pignite',
500: 'Emboar',
501: 'Oshawott',
502: 'Dewott',
503: 'Samurott',
504: 'Patrat',
505: 'Watchog',
506: 'Lillipup',
507: 'Herdier',
508: 'Stoutland',
509: 'Purrloin',
510: 'Liepard',
511: 'Pansage',
512: 'Simisage',
513: 'Pansear',
514: 'Simisear',
515: 'Panpour',
516: 'Simipour',
517: 'Munna',
518: 'Musharna',
519: 'Pidove',
520: 'Tranquill',
521: 'Unfezant',
522: 'Blitzle',
523: 'Zebstrika',
524: 'Roggenrola',
525: 'Boldore',
526: 'Gigalith',
527: 'Woobat',
528: 'Swoobat',
529: 'Drilbur',
530: 'Excadrill',
531: 'Audino',
532: 'Timburr',
533: 'Gurdurr',
534: 'Conkeldurr',
535: 'Tympole',
536: 'Palpitoad',
537: 'Seismitoad',
538: 'Throh',
539: 'Sawk',
540: 'Sewaddle',
541: 'Swadloon',
542: 'Leavanny',
543: 'Venipede',
544: 'Whirlipede',
545: 'Scolipede',
546: 'Cottonee',
547: 'Whimsicott',
548: 'Petilil',
549: 'Lilligant',
550: 'Basculin',
550: 'Basculin',
551: 'Sandile',
552: 'Krokorok',
553: 'Krookodile',
554: 'Darumaka',
555: 'Darmanitan',
555: 'Darmanitan',
556: 'Maractus',
557: 'Dwebble',
558: 'Crustle',
559: 'Scraggy',
560: 'Scrafty',
561: 'Sigilyph',
562: 'Yamask',
563: 'Cofagrigus',
564: 'Tirtouga',
565: 'Carracosta',
566: 'Archen',
567: 'Archeops',
568: 'Trubbish',
569: 'Garbodor',
570: 'Zorua',
571: 'Zoroark',
572: 'Minccino',
573: 'Cinccino',
574: 'Gothita',
575: 'Gothorita',
576: 'Gothitelle',
577: 'Solosis',
578: 'Duosion',
579: 'Reuniclus',
580: 'Ducklett',
581: 'Swanna',
582: 'Vanillite',
583: 'Vanillish',
584: 'Vanilluxe',
585: 'Deerling',
586: 'Sawsbuck',
587: 'Emolga',
588: 'Karrablast',
589: 'Escavalier',
590: 'Foongus',
591: 'Amoonguss',
592: 'Frillish',
593: 'Jellicent',
594: 'Alomomola',
595: 'Joltik',
596: 'Galvantula',
597: 'Ferroseed',
598: 'Ferrothorn',
599: 'Klink',
600: 'Klang',
601: 'Klinklang',
602: 'Tynamo',
603: 'Eelektrik',
604: 'Eelektross',
605: 'Elgyem',
606: 'Beheeyem',
607: 'Litwick',
608: 'Lampent',
609: 'Chandelure',
610: 'Axew',
611: 'Fraxure',
612: 'Haxorus',
613: 'Cubchoo',
614: 'Beartic',
615: 'Cryogonal',
616: 'Shelmet',
617: 'Accelgor',
618: 'Stunfisk',
619: 'Mienfoo',
620: 'Mienshao',
621: 'Druddigon',
622: 'Golett',
623: 'Golurk',
624: 'Pawniard',
625: 'Bisharp',
626: 'Bouffalant',
627: 'Rufflet',
628: 'Braviary',
629: 'Vullaby',
630: 'Mandibuzz',
631: 'Heatmor',
632: 'Durant',
633: 'Deino',
634: 'Zweilous',
635: 'Hydreigon',
636: 'Larvesta',
637: 'Volcarona',
638: 'Cobalion',
639: 'Terrakion',
640: 'Virizion',
641: 'Tornadus',
642: 'Thundurus',
643: 'Reshiram',
644: 'Zekrom',
645: 'Landorus',
646: 'Kyurem',
647: 'Keldeo',
648: 'Meloetta',
649: 'Genesect'
}
nature = {
0: 'Hardy',
1: 'Lonely',
2: 'Brave',
3: 'Adamant',
4: 'Naughty',
5: 'Bold',
6: 'Docile',
7: 'Relaxed',
8: 'Impish',
9: 'Lax',
10: 'Timid',
11: 'Hasty',
12: 'Serious',
13: 'Jolly',
14: 'Naive',
15: 'Modest',
16: 'Mild',
17: 'Quiet',
18: 'Bashful',
19: 'Rash',
20: 'Calm',
21: 'Gentle',
22: 'Sassy',
23: 'Careful',
24: 'Quirky'
}
ability = {
1: 'Stench',
2: 'Drizzle',
3: 'Speed Boost',
4: 'Battle Armor',
5: 'Sturdy',
6: 'Damp',
7: 'Limber',
8: 'Sand Veil',
9: 'Static',
10: 'Volt Absorb',
11: 'Water Absorb',
12: 'Oblivious',
13: 'Cloud Nine',
14: 'Compoundeyes',
15: 'Insomnia',
16: 'Color Change',
17: 'Immunity',
18: 'Flash Fire',
19: 'Shield Dust',
20: 'Own Tempo',
21: 'Suction Cups',
22: 'Intimidate',
23: 'Shadow Tag',
24: 'Rough Skin',
25: 'Wonder Guard',
26: 'Levitate',
27: 'Effect Spore',
28: 'Synchronize',
29: 'Clear Body',
30: 'Natural Cure',
31: 'Lightningrod',
32: 'Serene Grace',
33: 'Swift Swim',
34: 'Chlorophyll',
35: 'Illuminate',
36: 'Trace',
37: 'Huge Power',
38: 'Poison Point',
39: 'Inner Focus',
40: 'Magma Armor',
41: 'Water Veil',
42: 'Magnet Pull',
43: 'Soundproof',
44: 'Rain Dish',
45: 'Sand Stream',
46: 'Pressure',
47: 'Thick Fat',
48: 'Early Bird',
49: 'Flame Body',
50: 'Run Away',
51: 'Keen Eye',
52: 'Hyper Cutter',
53: 'Pickup',
54: 'Truant',
55: 'Hustle',
56: 'Cute Charm',
57: 'Plus',
58: 'Minus',
59: 'Forecast',
60: 'Sticky Hold',
61: 'Shed Skin',
62: 'Guts',
63: 'Marvel Scale',
64: 'Liquid Ooze',
65: 'Overgrow',
66: 'Blaze',
67: 'Torrent',
68: 'Swarm',
69: 'Rock Head',
70: 'Drought',
71: 'Arena Trap',
72: 'Vital Spirit',
73: 'White Smoke',
74: 'Pure Power',
75: 'Shell Armor',
76: 'Air Lock',
77: 'Tangled Feet',
78: 'Motor Drive',
79: 'Rivalry',
80: 'Steadfast',
81: 'Snow Cloak',
82: 'Gluttony',
83: 'Anger Point',
84: 'Unburden',
85: 'Heatproof',
86: 'Simple',
87: 'Dry Skin',
88: 'Download',
89: 'Iron Fist',
90: 'Poison Heal',
91: 'Adaptability',
92: 'Skill Link',
93: 'Hydration',
94: 'Solar Power',
95: 'Quick Feet',
96: 'Normalize',
97: 'Sniper',
98: 'Magic Guard',
99: 'No Guard',
100: 'Stall',
101: 'Technician',
102: 'Leaf Guard',
103: 'Klutz',
104: 'Mold Breaker',
105: 'Super Luck',
106: 'Aftermath',
107: 'Anticipation',
108: 'Forewarn',
109: 'Unaware',
110: 'Tinted Lens',
111: 'Filter',
112: 'Slow Start',
113: 'Scrappy',
114: 'Storm Drain',
115: 'Ice Body',
116: 'Solid Rock',
117: 'Snow Warning',
118: 'Honey Gather',
119: 'Frisk',
120: 'Reckless',
121: 'Multitype',
122: 'Flower Gift',
123: 'Bad Dreams',
124: 'Pickpocket',
125: 'Sheer Force',
126: 'Contrary',
127: 'Unnerve',
128: 'Defiant',
129: 'Defeatist',
130: 'Cursed Body',
131: 'Healer',
132: 'Friend Guard',
133: 'Weak Armor',
134: 'Heavy Metal',
135: 'Light Metal',
136: 'Multiscale',
137: 'Toxic Boost',
138: 'Flare Boost',
139: 'Harvest',
140: 'Telepathy',
141: 'Moody',
142: 'Overcoat',
143: 'Poison Touch',
144: 'Regenerator',
145: 'Big Pecks',
146: 'Sand Rush',
147: 'Wonder Skin',
148: 'Analytic',
149: 'Illusion',
150: 'Imposter',
151: 'Infiltrator',
152: 'Mummy',
153: 'Moxie',
154: 'Justified',
155: 'Rattled',
156: 'Magic Bounce',
157: 'Sap Sipper',
158: 'Prankster',
159: 'Sand Force',
160: 'Iron Barbs',
161: 'Zen Mode',
162: 'Victory Star',
163: 'Turboblaze',
164: 'Teravolt'
}
attacks = {
1: 'Pound',
2: 'Karate Chop',
3: 'Double Slap',
4: 'Comet Punch',
5: 'Mega Punch',
6: 'Pay Day',
7: 'Fire Punch',
8: 'Ice Punch',
9: 'Thunder Punch',
10: 'Scratch',
11: 'Vice Grip',
12: 'Guillotine',
13: 'Razor Wind',
14: 'Swords Dance',
15: 'Cut',
16: 'Gust',
17: 'Wing Attack',
18: 'Whirlwind',
19: 'Fly',
20: 'Bind',
21: 'Slam',
22: 'Vine Whip',
23: 'Stomp',
24: 'Double Kick',
25: 'Mega Kick',
26: 'Jump Kick',
27: 'Rolling Kick',
28: 'Sand-Attack',
29: 'Headbutt',
30: 'Horn Attack',
31: 'Fury Attack',
32: 'Horn Drill',
33: 'Tackle',
34: 'Body Slam',
35: 'Wrap',
36: 'Take Down',
37: 'Thrash',
38: 'Double-Edge',
39: 'Tail Whip',
40: 'Poison Sting',
41: 'Twineedle',
42: 'Pin Missile',
43: 'Leer',
44: 'Bite',
45: 'Growl',
46: 'Roar',
47: 'Sing',
48: 'Supersonic',
49: 'Sonic Boom',
50: 'Disable',
51: 'Acid',
52: 'Ember',
53: 'Flamethrower',
54: 'Mist',
55: 'Water Gun',
56: 'Hydro Pump',
57: 'Surf',
58: 'Ice Beam',
59: 'Blizzard',
60: 'Psybeam',
61: 'Bubble Beam',
62: 'Aurora Beam',
63: 'Hyper Beam',
64: 'Peck',
65: 'Drill Peck',
66: 'Submission',
67: 'Low Kick',
68: 'Counter',
69: 'Seismic Toss',
70: 'Strength',
71: 'Absorb',
72: 'Mega Drain',
73: 'Leech Seed',
74: 'Growth',
75: 'Razor Leaf',
76: 'Solar Beam',
77: 'Poison Powder',
78: 'Stun Spore',
79: 'Sleep Powder',
80: 'Petal Dance',
81: 'String Shot',
82: 'Dragon Rage',
83: 'Fire Spin',
84: 'Thunder Shock',
85: 'Thunderbolt',
86: 'Thunder Wave',
87: 'Thunder',
88: 'Rock Throw',
89: 'Earthquake',
90: 'Fissure',
91: 'Dig',
92: 'Toxic',
93: 'Confusion',
94: 'Psychic',
95: 'Hypnosis',
96: 'Meditate',
97: 'Agility',
98: 'Quick Attack',
99: 'Rage',
100: 'Teleport',
101: 'Night Shade',
102: 'Mimic',
103: 'Screech',
104: 'Double Team',
105: 'Recover',
106: 'Harden',
107: 'Minimize',
108: 'SmokeScreen',
109: 'Confuse Ray',
110: 'Withdraw',
111: 'Defense Curl',
112: 'Barrier',
113: 'Light Screen',
114: 'Haze',
115: 'Reflect',
116: 'Focus Energy',
117: 'Bide',
118: 'Metronome',
119: 'Mirror Move',
120: 'Self Destruct',
121: 'Egg Bomb',
122: 'Lick',
123: 'Smog',
124: 'Sludge',
125: 'Bone Club',
126: 'Fire Blast',
127: 'Waterfall',
128: 'Clamp',
129: 'Swift',
130: 'Skull Bash',
131: 'Spike Cannon',
132: 'Constrict',
133: 'Amnesia',
134: 'Kinesis',
135: 'Soft Boiled',
136: 'High Jump Kick',
137: 'Glare',
138: 'Dream Eater',
139: 'Poison Gas',
140: 'Barrage',
141: 'Leech Life',
142: 'Lovely Kiss',
143: 'Sky Attack',
144: 'Transform',
145: 'Bubble',
146: 'Dizzy Punch',
147: 'Spore',
148: 'Flash',
149: 'Psywave',
150: 'Splash',
151: 'Acid Armor',
152: 'Crabhammer',
153: 'Explosion',
154: 'Fury Swipes',
155: 'Bonemerang',
156: 'Rest',
157: 'Rock Slide',
158: 'Hyper Fang',
159: 'Sharpen',
160: 'Conversion',
161: 'Tri Attack',
162: 'Super Fang',
163: 'Slash',
164: 'Substitute',
165: 'Struggle',
166: 'Sketch',
167: 'Triple Kick',
168: 'Thief',
169: 'Spider Web',
170: 'Mind Reader',
171: 'Nightmare',
172: 'Flame Wheel',
173: 'Snore',
174: 'Curse',
175: 'Flail',
176: 'Conversion 2',
177: 'Aeroblast',
178: 'Cotton Spore',
179: 'Reversal',
180: 'Spite',
181: 'Powder Snow',
182: 'Protect',
183: 'Mach Punch',
184: 'Scary Face',
185: 'Feint Attack',
186: 'Sweet Kiss',
187: 'Belly Drum',
188: 'Sludge Bomb',
189: 'Mud-Slap',
190: 'Octazooka',
191: 'Spikes',
192: 'Zap Cannon',
193: 'Foresight',
194: 'Destiny Bond',
195: 'Perish Song',
196: 'Icy Wind',
197: 'Detect',
198: 'Bone Rush',
199: 'Lock-On',
200: 'Outrage',
201: 'Sandstorm',
202: 'Giga Drain',
203: 'Endure',
204: 'Charm',
205: 'Rollout',
206: 'False Swipe',
207: 'Swagger',
208: 'Milk Drink',
209: 'Spark',
210: 'Fury Cutter',
211: 'Steel Wing',
212: 'Mean Look',
213: 'Attract',
214: 'Sleep Talk',
215: 'Heal Bell',
216: 'Return',
217: 'Present',
218: 'Frustration',
219: 'Safeguard',
220: 'Pain Split',
221: 'Sacred Fire',
222: 'Magnitude',
223: 'Dynamic Punch',
224: 'Megahorn',
225: 'Dragon Breath',
226: 'Baton Pass',
227: 'Encore',
228: 'Pursuit',
229: 'Rapid Spin',
230: 'Sweet Scent',
231: 'Iron Tail',
232: 'Metal Claw',
233: 'Vital Throw',
234: 'Morning Sun',
235: 'Synthesis',
236: 'Moonlight',
237: 'Hidden Power',
238: 'Cross Chop',
239: 'Twister',
240: 'Rain Dance',
241: 'Sunny Day',
242: 'Crunch',
243: 'Mirror Coat',
244: 'Psych Up',
245: 'Extreme Speed',
246: 'Ancient Power',
247: 'Shadow Ball',
248: 'Future Sight',
249: 'Rock Smash',
250: 'Whirlpool',
251: 'Beat Up',
252: 'Fake Out',
253: 'Uproar',
254: 'Stockpile',
255: 'Spit Up',
256: 'Swallow',
257: 'Heat Wave',
258: 'Hail',
259: 'Torment',
260: 'Flatter',
261: 'Will-O-Wisp',
262: 'Memento',
263: 'Facade',
264: 'Focus Punch',
265: 'Smelling Salts',
266: 'Follow Me',
267: 'Nature Power',
268: 'Charge',
269: 'Taunt',
270: 'Helping Hand',
271: 'Trick',
272: 'Role Play',
273: 'Wish',
274: 'Assist',
275: 'Ingrain',
276: 'Superpower',
277: 'Magic Coat',
278: 'Recycle',
279: 'Revenge',
280: 'Brick Break',
281: 'Yawn',
282: 'Knock Off',
283: 'Endeavor',
284: 'Eruption',
285: 'Skill Swap',
286: 'Imprison',
287: 'Refresh',
288: 'Grudge',
289: 'Snatch',
290: 'Secret Power',
291: 'Dive',
292: 'Arm Thrust',
293: 'Camouflage',
294: 'Tail Glow',
295: 'Luster Purge',
296: 'Mist Ball',
297: 'Feather Dance',
298: 'Teeter Dance',
299: 'Blaze Kick',
300: 'Mud Sport',
301: 'Ice Ball',
302: 'Needle Arm',
303: 'Slack Off',
304: 'Hyper Voice',
305: 'Poison Fang',
306: 'Crush Claw',
307: 'Blast Burn',
308: 'Hydro Cannon',
309: 'Meteor Mash',
310: 'Astonish',
311: 'Weather Ball',
312: 'Aromatherapy',
313: 'Fake Tears',
314: 'Air Cutter',
315: 'Overheat',
316: 'Odor Sleuth',
317: 'Rock Tomb',
318: 'Silver Wind',
319: 'Metal Sound',
320: 'Grass Whistle',
321: 'Tickle',
322: 'Cosmic Power',
323: 'Water Spout',
324: 'Signal Beam',
325: 'Shadow Punch',
326: 'Extrasensory',
327: 'Sky Uppercut',
328: 'Sand Tomb',
329: 'Sheer Cold',
330: 'Muddy Water',
331: 'Bullet Seed',
332: 'Aerial Ace',
333: 'Icicle Spear',
334: 'Iron Defense',
335: 'Block',
336: 'Howl',
337: 'Dragon Claw',
338: 'Frenzy Plant',
339: 'Bulk Up',
340: 'Bounce',
341: 'Mud Shot',
342: 'Poison Tail',
343: 'Covet',
344: 'Volt Tackle',
345: 'Magical Leaf',
346: 'Water Sport',
347: 'Calm Mind',
348: 'Leaf Blade',
349: 'Dragon Dance',
350: 'Rock Blast',
351: 'Shock Wave',
352: 'Water Pulse',
353: 'Doom Desire',
354: 'Psycho Boost',
355: 'Roost',
356: 'Gravity',
357: 'Miracle Eye',
358: 'Wake-Up Slap',
359: 'Hammer Arm',
360: 'Gyro Ball',
361: 'Healing Wish',
362: 'Brine',
363: 'Natural Gift',
364: 'Feint',
365: 'Pluck',
366: 'Tailwind',
367: 'Acupressure',
368: 'Metal Burst',
369: 'U-turn',
370: 'Close Combat',
371: 'Payback',
372: 'Assurance',
373: 'Embargo',
374: 'Fling',
375: 'Psycho Shift',
376: 'Trump Card',
377: 'Heal Block',
378: 'Wring Out',
379: 'Power Trick',
380: 'Gastro Acid',
381: 'Lucky Chant',
382: 'Me First',
383: 'Copycat',
384: 'Power Swap',
385: 'Guard Swap',
386: 'Punishment',
387: 'Last Resort',
388: 'Worry Seed',
389: 'Sucker Punch',
390: 'Toxic Spikes',
391: 'Heart Swap',
392: 'Aqua Ring',
393: 'Magnet Rise',
394: 'Flare Blitz',
395: 'Force Palm',
396: 'Aura Sphere',
397: 'Rock Polish',
398: 'Poison Jab',
399: 'Dark Pulse',
400: 'Night Slash',
401: 'Aqua Tail',
402: 'Seed Bomb',
403: 'Air Slash',
404: 'X-Scissor',
405: 'Bug Buzz',
406: 'Dragon Pulse',
407: 'Dragon Rush',
408: 'Power Gem',
409: 'Drain Punch',
410: 'Vacuum Wave',
411: 'Focus Blast',
412: 'Energy Ball',
413: 'Brave Bird',
414: 'Earth Power',
415: 'Switcheroo',
416: 'Giga Impact',
417: 'Nasty Plot',
418: 'Bullet Punch',
419: 'Avalanche',
420: 'Ice Shard',
421: 'Shadow Claw',
422: 'Thunder Fang',
423: 'Ice Fang',
424: 'Fire Fang',
425: 'Shadow Sneak',
426: 'Mud Bomb',
427: 'Psycho Cut',
428: 'Zen Headbutt',
429: 'Mirror Shot',
430: 'Flash Cannon',
431: 'Rock Climb',
432: 'Defog',
433: 'Trick Room',
434: 'Draco Meteor',
435: 'Discharge',
436: 'Lava Plume',
437: 'Leaf Storm',
438: 'Power Whip',
439: 'Rock Wrecker',
440: 'Cross Poison',
441: 'Gunk Shot',
442: 'Iron Head',
443: 'Magnet Bomb',
444: 'Stone Edge',
445: 'Captivate',
446: 'Stealth Rock',
447: 'Grass Knot',
448: 'Chatter',
449: 'Judgment',
450: 'Bug Bite',
451: 'Charge Beam',
452: 'Wood Hammer',
453: 'Aqua Jet',
454: 'Attack Order',
455: 'Defend Order',
456: 'Heal Order',
457: 'Head Smash',
458: 'Double Hit',
459: 'Roar of Time',
460: 'Spacial Rend',
461: 'Lunar Dance',
462: 'Crush Grip',
463: 'Magma Storm',
464: 'Dark Void',
465: 'Seed Flare',
466: 'Ominous Wind',
467: 'Shadow Force',
468: 'Hone Claws',
469: 'Wide Guard',
471: 'Power Split',
472: 'Wonder Room',
473: 'Psyshock',
474: 'Venoshock',
475: 'Autotomize',
476: 'Rage Powder',
477: 'Telekinesis',
478: 'Magic Room',
479: 'Smack Down',
480: 'Storm Throw',
481: 'Flame Burst',
482: 'Sludge Wave',
483: 'Quiver Dance',
484: 'Heavy Slam',
485: 'Synchronoise',
486: 'Electro Ball',
487: 'Soak',
488: 'Flame Charge',
489: 'Coil',
490: 'Low Sweep',
491: 'Acid Spray',
492: 'Foul Play',
493: 'Simple Beam',
494: 'Entrainment',
495: 'After You',
496: 'Round',
497: 'Echoed Voice',
498: 'Chip Away',
499: 'Clear Smog',
500: 'Stored Power',
501: 'Quick Guard',
502: 'Ally Switch',
503: 'Scald',
504: 'Shell Smash',
505: 'Heal Pulse',
506: 'Hex',
507: 'Sky Drop',
508: 'Shift Gear',
509: 'Circle Throw',
510: 'Incinerate',
511: 'Quash',
512: 'Acrobatics',
513: 'Reflect Type',
514: 'Retaliate',
515: 'Final Gambit',
516: 'Bestow',
517: 'Inferno',
518: 'Water Pledge',
519: 'Fire Pledge',
520: 'Grass Pledge',
521: 'Volt Switch',
522: 'Struggle Bug',
523: 'Bulldoze',
524: 'Frost Breath',
525: 'Dragon Tail',
526: 'Work Up',
527: 'Electroweb',
528: 'Wild Charge',
529: 'Drill Run',
530: 'Dual Chop',
531: 'Heart Stamp',
532: 'Horn Leech',
533: 'Sacred Sword',
534: 'Razor Shell',
535: 'Heat Crash',
536: 'Leaf Tornado',
537: 'Steamroller',
538: 'Cotton Guard',
539: 'Night Daze',
540: 'Psystrike',
541: 'Tail Slap',
542: 'Hurricane',
543: 'Head Charge',
544: 'Gear Grind',
545: 'Searing Shot',
546: 'Techno Blast',
547: 'Relic Song',
548: 'Secret Sword',
549: 'Glaciate',
550: 'Bolt Strike',
551: 'Blue Flare',
552: 'Fiery Dance',
553: 'Freeze Shock',
554: 'Ice Burn',
555: 'Snarl',
556: 'Icicle Crash',
557: 'V-create',
558: 'Fusion Flare',
559: 'Fusion Bolt'
}
items = {
0x0000: 'Nothing',
0x0001: 'Master Ball',
0x0002: 'Ultra Ball',
0x0003: 'Great Ball',
0x0004: 'Poke Ball',
0x0005: 'Safari Ball',
0x0006: 'Net Ball',
0x0007: 'Dive Ball',
0x0008: 'Nest Ball',
0x0009: 'Repeat Ball',
0x000A: 'Timer Ball',
0x000B: 'Luxury Ball',
0x000C: 'Premier Ball',
0x000D: 'Dusk Ball',
0x000E: 'Heal Ball',
0x000F: 'Quick Ball',
0x0010: 'Cherish Ball',
0x0011: 'Potion',
0x0012: 'Antidote',
0x0013: 'Burn Heal',
0x0014: 'Ice Heal',
0x0015: 'Awakening',
0x0016: 'Parlyz Heal',
0x0017: 'Full Restore',
0x0018: 'Max Potion',
0x0019: 'Hyper Potion',
0x001A: 'Super Potion',
0x001B: 'Full Heal',
0x001C: 'Revive',
0x001D: 'Max Revive',
0x001E: 'Fresh Water',
0x001F: 'Soda Pop',
0x0020: 'Lemonade',
0x0021: 'Moomoo Milk',
0x0022: 'EnergyPowder',
0x0023: 'Energy Root',
0x0024: 'Heal Powder',
0x0025: 'Revival Herb',
0x0026: 'Ether',
0x0027: 'Max Ether',
0x0028: 'Elixir',
0x0029: 'Max Elixir',
0x002A: 'Lava Cookie',
0x002B: 'Berry Juice',
0x002C: 'Sacred Ash',
0x002D: 'HP Up',
0x002E: 'Protein',
0x002F: 'Iron',
0x0030: 'Carbos',
0x0031: 'Calcium',
0x0032: 'Rare Candy',
0x0033: 'PP Up',
0x0034: 'Zinc',
0x0035: 'PP Max',
0x0036: 'Old Gateau',
0x0037: 'Guard Spec.',
0x0038: 'Dire Hit',
0x0039: 'X Attack',
0x003A: 'X Defend',
0x003B: 'X Speed',
0x003C: 'X Accuracy',
0x003D: 'X Special',
0x003E: 'X Sp. Def',
0x003F: 'Poke Doll',
0x0040: 'Fluffy Tail',
0x0041: 'Blue Flute',
0x0042: 'Yellow Flute',
0x0043: 'Red Flute',
0x0044: 'Black Flute',
0x0045: 'White Flute',
0x0046: 'Shoal Salt',
0x0047: 'Shoal Shell',
0x0048: 'Red Shard',
0x0049: 'Blue Shard',
0x004A: 'Yellow Shard',
0x004B: 'Green Shard',
0x004C: 'Super Repel',
0x004D: 'Max Repel',
0x004E: 'Escape Rope',
0x004F: 'Repel',
0x0050: 'Sun Stone',
0x0051: 'Moon Stone',
0x0052: 'Fire Stone',
0x0053: 'Thunderstone',
0x0054: 'Water Stone',
0x0055: 'Leaf Stone',
0x0056: 'TinyMushroom',
0x0057: 'Big Mushroom',
0x0058: 'Pearl',
0x0059: 'Big Pearl',
0x005A: 'Stardust',
0x005B: 'Star Piece',
0x005C: 'Nugget',
0x005D: 'Heart Scale',
0x005E: 'Honey',
0x005F: 'Growth Mulch',
0x0060: 'Damp Mulch',
0x0061: 'Stable Mulch',
0x0062: 'Gooey Mulch',
0x0063: 'Root Fossil',
0x0064: 'Claw Fossil',
0x0065: 'Helix Fossil',
0x0066: 'Dome Fossil',
0x0067: 'Old Amber',
0x0068: 'Armor Fossil',
0x0069: 'Skull Fossil',
0x006A: 'Rare Bone',
0x006B: 'Shiny Stone',
0x006C: 'Dusk Stone',
0x006D: 'Dawn Stone',
0x006E: 'Oval Stone',
0x006F: 'Odd Keystone',
0x0070: 'Griseous Orb',
0x0071: '???',
0x0072: '???',
0x0073: '???',
0x0074: '???',
0x0075: '???',
0x0076: '???',
0x0077: '???',
0x0078: '???',
0x0079: '???',
0x007A: '???',
0x007B: '???',
0x007C: '???',
0x007D: '???',
0x007E: '???',
0x007F: '???',
0x0080: '???',
0x0081: '???',
0x0082: '???',
0x0083: '???',
0x0084: '???',
0x0085: '???',
0x0086: '???',
0x0087: 'Adamant Orb',
0x0088: 'Lustrous Orb',
0x0089: 'Grass Mail',
0x008A: 'Flame Mail',
0x008B: 'Bubble Mail',
0x008C: 'Bloom Mail',
0x008D: 'Tunnel Mail',
0x008E: 'Steel Mail',
0x008F: 'Heart Mail',
0x0090: 'Snow Mail',
0x0091: 'Space Mail',
0x0092: 'Air Mail',
0x0093: 'Mosaic Mail',
0x0094: 'Brick Mail',
0x0095: 'Cheri Berry',
0x0096: 'Chesto Berry',
0x0097: 'Pecha Berry',
0x0098: 'Rawst Berry',
0x0099: 'Aspear Berry',
0x009A: 'Leppa Berry',
0x009B: 'Oran Berry',
0x009C: 'Persim Berry',
0x009D: 'Lum Berry',
0x009E: 'Sitrus Berry',
0x009F: 'Figy Berry',
0x00A0: 'Wiki Berry',
0x00A1: 'Mago Berry',
0x00A2: 'Aguav Berry',
0x00A3: 'Iapapa Berry',
0x00A4: 'Razz Berry',
0x00A5: 'Bluk Berry',
0x00A6: 'Nanab Berry',
0x00A7: 'Wepear Berry',
0x00A8: 'Pinap Berry',
0x00A9: 'Pomeg Berry',
0x00AA: 'Kelpsy Berry',
0x00AB: 'Qualot Berry',
0x00AC: 'Hondew Berry',
0x00AD: 'Grepa Berry',
0x00AE: 'Tamato Berry',
0x00AF: 'Cornn Berry',
0x00B0: 'Magost Berry',
0x00B1: 'Rabuta Berry',
0x00B2: 'Nomel Berry',
0x00B3: 'Spelon Berry',
0x00B4: 'Pamtre Berry',
0x00B5: 'Watmel Berry',
0x00B6: 'Durin Berry',
0x00B7: 'Belue Berry',
0x00B8: 'Occa Berry',
0x00B9: 'Passho Berry',
0x00BA: 'Wacan Berry',
0x00BB: 'Rindo Berry',
0x00BC: 'Yache Berry',
0x00BD: 'Chople Berry',
0x00BE: 'Kebia Berry',
0x00BF: 'Shuca Berry',
0x00C0: 'Coba Berry',
0x00C1: 'Payapa Berry',
0x00C2: 'Tanga Berry',
0x00C3: 'Charti Berry',
0x00C4: 'Kasib Berry',
0x00C5: 'Haban Berry',
0x00C6: 'Colbur Berry',
0x00C7: 'Babiri Berry',
0x00C8: 'Chilan Berry',
0x00C9: 'Liechi Berry',
0x00CA: 'Ganlon Berry',
0x00CB: 'Salac Berry',
0x00CC: 'Petaya Berry',
0x00CD: 'Apicot Berry',
0x00CE: 'Lansat Berry',
0x00CF: 'Starf Berry',
0x00D0: 'Enigma Berry',
0x00D1: 'Micle Berry',
0x00D2: 'Custap Berry',
0x00D3: 'Jaboca Berry',
0x00D4: 'Rowap Berry',
0x00D5: 'BrightPowder',
0x00D6: 'White Herb',
0x00D7: 'Macho Brace',
0x00D8: 'Exp. Share',
0x00D9: 'Quick Claw',
0x00DA: 'Soothe Bell',
0x00DB: 'Mental Herb',
0x00DC: 'Choice Band',
0x00DD: 'King\'s Rock',
0x00DE: 'SilverPowder',
0x00DF: 'Amulet Coin',
0x00E0: 'Cleanse Tag',
0x00E1: 'Soul Dew',
0x00E2: 'DeepSeaTooth',
0x00E3: 'DeepSeaScale',
0x00E4: 'Smoke Ball',
0x00E5: 'Everstone',
0x00E6: 'Focus Band',
0x00E7: 'Lucky Egg',
0x00E8: 'Scope Lens',
0x00E9: 'Metal Coat',
0x00EA: 'Leftovers',
0x00EB: 'Dragon Scale',
0x00EC: 'Light Ball',
0x00ED: 'Soft Sand',
0x00EE: 'Hard Stone',
0x00EF: 'Miracle Seed',
0x00F0: 'BlackGlasses',
0x00F1: 'Black Belt',
0x00F2: 'Magnet',
0x00F3: 'Mystic Water',
0x00F4: 'Sharp Beak',
0x00F5: 'Poison Barb',
0x00F6: 'NeverMeltIce',
0x00F7: 'Spell Tag',
0x00F8: 'TwistedSpoon',
0x00F9: 'Charcoal',
0x00FA: 'Dragon Fang',
0x00FB: 'Silk Scarf',
0x00FC: 'Up-Grade',
0x00FD: 'Shell Bell',
0x00FE: 'Sea Incense',
0x00FF: 'Lax Incense',
0x0100: 'Lucky Punch',
0x0101: 'Metal Powder',
0x0102: 'Thick Club',
0x0103: 'Stick',
0x0104: 'Red Scarf',
0x0105: 'Blue Scarf',
0x0106: 'Pink Scarf',
0x0107: 'Green Scarf',
0x0108: 'Yellow Scarf',
0x0109: 'Wide Lens',
0x010A: 'Muscle Band',
0x010B: 'Wise Glasses',
0x010C: 'Expert Belt',
0x010D: 'Light Clay',
0x010E: 'Life Orb',
0x010F: 'Power Herb',
0x0110: 'Toxic Orb',
0x0111: 'Flame Orb',
0x0112: 'Quick Powder',
0x0113: 'Focus Sash',
0x0114: 'Zoom Lens',
0x0115: 'Metronome',
0x0116: 'Iron Ball',
0x0117: 'Lagging Tail',
0x0118: 'Destiny Knot',
0x0119: 'Black Sludge',
0x011A: 'Icy Rock',
0x011B: 'Smooth Rock',
0x011C: 'Heat Rock',
0x011D: 'Damp Rock',
0x011E: 'Grip Claw',
0x011F: 'Choice Scarf',
0x0120: 'Sticky Barb',
0x0121: 'Power Bracer',
0x0122: 'Power Belt',
0x0123: 'Power Lens',
0x0124: 'Power Band',
0x0125: 'Power Anklet',
0x0126: 'Power Weight',
0x0127: 'Shed Shell',
0x0128: 'Big Root',
0x0129: 'Choice Specs',
0x012A: 'Flame Plate',
0x012B: 'Splash Plate',
0x012C: 'Zap Plate',
0x012D: 'Meadow Plate',
0x012E: 'Icicle Plate',
0x012F: 'Fist Plate',
0x0130: 'Toxic Plate',
0x0131: 'Earth Plate',
0x0132: 'Sky Plate',
0x0133: 'Mind Plate',
0x0134: 'Insect Plate',
0x0135: 'Stone Plate',
0x0136: 'Spooky Plate',
0x0137: 'Draco Plate',
0x0138: 'Dread Plate',
0x0139: 'Iron Plate',
0x013A: 'Odd Incense',
0x013B: 'Rock Incense',
0x013C: 'Full Incense',
0x013D: 'Wave Incense',
0x013E: 'Rose Incense',
0x013F: 'Luck Incense',
0x0140: 'Pure Incense',
0x0141: 'Protector',
0x0142: 'Electirizer',
0x0143: 'Magmarizer',
0x0144: 'Dubious Disc',
0x0145: 'Reaper Cloth',
0x0146: 'Razor Claw',
0x0147: 'Razor Fang',
0x0148: 'TM01',
0x0149: 'TM02',
0x014A: 'TM03',
0x014B: 'TM04',
0x014C: 'TM05',
0x014D: 'TM06',
0x014E: 'TM07',
0x014F: 'TM08',
0x0150: 'TM09',
0x0151: 'TM10',
0x0152: 'TM11',
0x0153: 'TM12',
0x0154: 'TM13',
0x0155: 'TM14',
0x0156: 'TM15',
0x0157: 'TM16',
0x0158: 'TM17',
0x0159: 'TM18',
0x015A: 'TM19',
0x015B: 'TM20',
0x015C: 'TM21',
0x015D: 'TM22',
0x015E: 'TM23',
0x015F: 'TM24',
0x0160: 'TM25',
0x0161: 'TM26',
0x0162: 'TM27',
0x0163: 'TM28',
0x0164: 'TM29',
0x0165: 'TM30',
0x0166: 'TM31',
0x0167: 'TM32',
0x0168: 'TM33',
0x0169: 'TM34',
0x016A: 'TM35',
0x016B: 'TM36',
0x016C: 'TM37',
0x016D: 'TM38',
0x016E: 'TM39',
0x016F: 'TM40',
0x0170: 'TM41',
0x0171: 'TM42',
0x0172: 'TM43',
0x0173: 'TM44',
0x0174: 'TM45',
0x0175: 'TM46',
0x0176: 'TM47',
0x0177: 'TM48',
0x0178: 'TM49',
0x0179: 'TM50',
0x017A: 'TM51',
0x017B: 'TM52',
0x017C: 'TM53',
0x017D: 'TM54',
0x017E: 'TM55',
0x017F: 'TM56',
0x0180: 'TM57',
0x0181: 'TM58',
0x0182: 'TM59',
0x0183: 'TM60',
0x0184: 'TM61',
0x0185: 'TM62',
0x0186: 'TM63',
0x0187: 'TM64',
0x0188: 'TM65',
0x0189: 'TM66',
0x018A: 'TM67',
0x018B: 'TM68',
0x018C: 'TM69',
0x018D: 'TM70',
0x018E: 'TM71',
0x018F: 'TM72',
0x0190: 'TM73',
0x0191: 'TM74',
0x0192: 'TM75',
0x0193: 'TM76',
0x0194: 'TM77',
0x0195: 'TM78',
0x0196: 'TM79',
0x0197: 'TM80',
0x0198: 'TM81',
0x0199: 'TM82',
0x019A: 'TM83',
0x019B: 'TM84',
0x019C: 'TM85',
0x019D: 'TM86',
0x019E: 'TM87',
0x019F: 'TM88',
0x01A0: 'TM89',
0x01A1: 'TM90',
0x01A2: 'TM91',
0x01A3: 'TM92',
0x01A4: 'HM01',
0x01A5: 'HM02',
0x01A6: 'HM03',
0x01A7: 'HM04',
0x01A8: 'HM05',
0x01A9: 'HM06',
0x01AA: 'HM07',
0x01AB: 'HM08',
0x01AC: 'Explorer Kit',
0x01AD: 'Loot Sack',
0x01AE: 'Rule Book',
0x01AF: 'Poke Radar',
0x01B0: 'Point Card',
0x01B1: 'Journal',
0x01B2: 'Seal Case',
0x01B3: 'Fashion Case',
0x01B4: 'Seal Bag',
0x01B5: 'Pal Pad',
0x01B6: 'Works Key',
0x01B7: 'Old Charm',
0x01B8: 'Galactic Key',
0x01B9: 'Red Chain',
0x01BA: 'Town Map',
0x01BB: 'Vs. Seeker',
0x01BC: 'Coin Case',
0x01BD: 'Old Rod',
0x01BE: 'Good Rod',
0x01BF: 'Super Rod',
0x01C0: 'Sprayduck',
0x01C1: 'Poffin Case',
0x01C2: 'Bicycle',
0x01C3: 'Suite Key',
0x01C4: 'Oak\'s Letter',
0x01C5: 'Lunar Wing',
0x01C6: 'Member Card',
0x01C7: 'Azure Flute',
0x01C8: 'S.S. Ticket',
0x01C9: 'Contest Pass',
0x01CA: 'Magma Stone',
0x01CB: 'Parcel',
0x01CC: 'Coupon 1',
0x01CD: 'Coupon 2',
0x01CE: 'Coupon 3',
0x01CF: 'Storage Key',
0x01D0: 'SecretPotion',
0x01D1: 'Vs. Recorder',
0x01D2: 'Gracidea',
0x01D3: 'Secret Key',
0x01D4: 'Apricorn Box',
0x01D5: 'Unown Report',
0x01D6: 'Berry Pots',
0x01D7: 'Dowsing MCHN',
0x01D8: 'Blue Card',
0x01D9: 'Slowpoketail',
0x01DA: 'Clear Bell',
0x01DB: 'Card Key',
0x01DC: 'Basement Key',
0x01DD: 'Squirtbottle',
0x01DE: 'Red Scale',
0x01DF: 'Lost Item',
0x01E0: 'Pass',
0x01E1: 'Machine Part',
0x01E2: 'Silver Wing',
0x01E3: 'Rainbow Wing',
0x01E4: 'Mystery Egg',
0x01E5: 'Red Apricorn',
0x01E6: 'Ylw Apricorn',
0x01E7: 'Blu Apricorn',
0x01E8: 'Grn Apricorn',
0x01E9: 'Pnk Apricorn',
0x01EA: 'Wht Apricorn',
0x01EB: 'Blk Apricorn',
0x01EC: 'Fast Ball',
0x01ED: 'Level Ball',
0x01EE: 'Lure Ball',
0x01EF: 'Heavy Ball',
0x01F0: 'Love Ball',
0x01F1: 'Friend Ball',
0x01F2: 'Moon Ball',
0x01F3: 'Sport Ball',
0x01F4: 'Park Ball',
0x01F5: 'Photo Album',
0x01F6: 'GB Sounds',
0x01F7: 'Tidal Bell',
0x01F8: 'RageCandyBar',
0x01F9: 'Data Card 01',
0x01FA: 'Data Card 02',
0x01FB: 'Data Card 03',
0x01FC: 'Data Card 04',
0x01FD: 'Data Card 05',
0x01FE: 'Data Card 06',
0x01FF: 'Data Card 07',
0x0200: 'Data Card 08',
0x0201: 'Data Card 09',
0x0202: 'Data Card 10',
0x0203: 'Data Card 11',
0x0204: 'Data Card 12',
0x0205: 'Data Card 13',
0x0206: 'Data Card 14',
0x0207: 'Data Card 15',
0x0208: 'Data Card 16',
0x0209: 'Data Card 17',
0x020A: 'Data Card 18',
0x020B: 'Data Card 19',
0x020C: 'Data Card 20',
0x020D: 'Data Card 21',
0x020E: 'Data Card 22',
0x020F: 'Data Card 23',
0x0210: 'Data Card 24',
0x0211: 'Data Card 25',
0x0212: 'Data Card 26',
0x0213: 'Data Card 27',
0x0214: 'Jade Orb',
0x0215: 'Lock Capsule',
0x0216: 'Red Orb',
0x0217: 'Blue Orb',
0x0218: 'Enigma Stone',
0x0219: 'Prism Scale',
0x021A: 'Eviolite',
0x021B: 'Float Stone',
0x021C: 'Rocky Helmet',
0x021D: 'Air Balloon',
0x021E: 'Red Card',
0x021F: 'Ring Target',
0x0220: 'Binding Band',
0x0221: 'Absorb Bulb',
0x0222: 'Cell Battery',
0x0223: 'Eject Button',
0x0224: 'Fire Gem',
0x0225: 'Water Gem',
0x0226: 'Electric Gem',
0x0227: 'Grass Gem',
0x0228: 'Ice Gem',
0x0229: 'Fighting Gem',
0x022A: 'Poison Gem',
0x022B: 'Ground Gem',
0x022C: 'Flying Gem',
0x022D: 'Psychic Gem',
0x022E: 'Bug Gem',
0x022F: 'Rock Gem',
0x0230: 'Ghost Gem',
0x0231: 'Dragon Gem',
0x0232: 'Dark Gem',
0x0233: 'Steel Gem',
0x0234: 'Normal Gem',
0x0235: 'Health Wing',
0x0236: 'Muscle Wing',
0x0237: 'Resist Wing',
0x0238: 'Genius Wing',
0x0239: 'Clever Wing',
0x023A: 'Swift Wing',
0x023B: 'Pretty Wing',
0x023C: 'Cover Fossil',
0x023D: 'Plume Fossil',
0x023E: 'Liberty Pass',
0x023F: 'Pass Orb',
0x0240: 'Dream Ball',
0x0241: 'Poke Toy',
0x0242: 'Prop Case',
0x0243: 'Dragon Skull',
0x0244: 'BalmMushroom',
0x0245: 'Big Nugget',
0x0246: 'Pearl String',
0x0247: 'Comet Shard',
0x0248: 'Relic Copper',
0x0249: 'Relic Silver',
0x024A: 'Relic Gold',
0x024B: 'Relic Vase',
0x024C: 'Relic Band',
0x024D: 'Relic Statue',
0x024E: 'Relic Crown',
0x024F: 'Casteliacone',
0x0250: 'Dire Hit 2',
0x0251: 'X Speed 2',
0x0252: 'X Special 2',
0x0253: 'X Sp. Def 2',
0x0254: 'X Defend 2',
0x0255: 'X Attack 2',
0x0256: 'X Accuracy 2',
0x0257: 'X Speed 3',
0x0258: 'X Special 3',
0x0259: 'X Sp. Def 3',
0x025A: 'X Defend 3',
0x025B: 'X Attack 3',
0x025C: 'X Accuracy 3',
0x025D: 'X Speed 6',
0x025E: 'X Special 6',
0x025F: 'X Sp. Def 6',
0x0260: 'X Defend 6',
0x0261: 'X Attack 6',
0x0262: 'X Accuracy 6',
0x0263: 'Ability Urge',
0x0264: 'Item Drop',
0x0265: 'Item Urge',
0x0266: 'Reset Urge',
0x0267: 'Dire Hit 3',
0x0268: 'Light Stone',
0x0269: 'Dark Stone',
0x026A: 'TM93',
0x026B: 'TM94',
0x026C: 'TM95',
0x026D: 'Xtransceiver',
0x026E: 'God Stone',
0x026F: 'Gram 1',
0x0270: 'Gram 2',
0x0271: 'Gram 3',
0x0272: 'Xtransceiver'
}
hptype = {
0: 'Fighting',
1: 'Flying',
2: 'Poison',
3: 'Ground',
4: 'Rock',
5: 'Bug',
6: 'Ghost',
7: 'Steel',
8: 'Fire',
9: 'Water',
10: 'Grass',
11: 'Electric',
12: 'Psychic',
13: 'Ice',
14: 'Dragon',
15: 'Dark'
}
gorigin = {
0: 'None',
1: 'Sapphire',
2: 'Ruby',
3: 'Emerald',
4: 'Fire Red',
5: 'Leaf Green',
7: 'Heart Gold',
8: 'Soul Silver',
10: 'Diamond',
11: 'Pearl',
12: 'Platinum',
15: 'Colosseum/XD',
20: 'White',
21: 'Black',
22: 'White 2',
23: 'Black 2',
24: 'X',
25: 'Y'
}
ingame_char = [ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010A, 0x010B, 0x010C, 0x010D, 0x010E, 0x010F, 0x0110, 0x0111, 0x0112, 0x0113, 0x0114, 0x0115, 0x0116, 0x0117, 0x0118, 0x0119, 0x011A, 0x011B, 0x011C, 0x011D, 0x011E, 0x011F, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012A, 0x012B, 0x012C, 0x012D, 0x012E, 0x012F, 0x0130, 0x0131, 0x0132, 0x0133, 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013A, 0x013B, 0x013C, 0x013D, 0x013E, 0x013F, 0x0140, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x0149, 0x014A, 0x014B, 0x014C, 0x014D, 0x014E, 0x014F, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015A, 0x015B, 0x015C, 0x015D, 0x015E, 0x015F, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016A, 0x016B, 0x016C, 0x016D, 0x016E, 0x016F, 0x0170, 0x0171, 0x0172, 0x0173, 0x0174, 0x0175, 0x0176, 0x0177, 0x0178, 0x0179, 0x017A, 0x017B, 0x017C, 0x017D, 0x017E, 0x017F, 0x0180, 0x0181, 0x0182, 0x0183, 0x0184, 0x0185, 0x0186, 0x0187, 0x0188, 0x0189, 0x018A, 0x018B, 0x018C, 0x018D, 0x018E, 0x018F, 0x0190, 0x0191, 0x0192, 0x0193, 0x0194, 0x0195, 0x0196, 0x0197, 0x0198, 0x0199, 0x019A, 0x019B, 0x019C, 0x019D, 0x019E, 0x019F, 0x01A0, 0x01A1, 0x01A2, 0x01A3, 0x01A4, 0x01A5, 0x01A6, 0x01A7, 0x01A8, 0x01A9, 0x01AA, 0x01AB, 0x01AC, 0x01AD, 0x01AE, 0x01AF, 0x01B0, 0x01B1, 0x01B2, 0x01B3, 0x01B4, 0x01B5, 0x01B6, 0x01B7, 0x01B8, 0x01B9, 0x01BA, 0x01BB, 0x01BC, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C5, 0x01C6, 0x01C7, 0x01C8, 0x01C9, 0x01CA, 0x01CB, 0x01CC, 0x01CD, 0x01CE, 0x01CF, 0x01D0, 0x01D1, 0x01D2, 0x01D3, 0x01D4, 0x01D5, 0x01D6, 0x01D7, 0x01D8, 0x01D9, 0x01DA, 0x01DB, 0x01DC, 0x01DD, 0x01DE, 0x01DF, 0x01E0, 0x01E1, 0x01E8, 0x01E9, 0x01EA, 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040D, 0x040E, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x045D, 0x045E, 0x045F, 0x0460, 0x0461, 0x0462, 0x0463, 0x0464, 0x0465, 0x0466, 0x0467, 0x0468, 0x0469, 0x046A, 0x046B, 0x046C, 0x046D, 0x046E, 0x046F, 0x0470, 0x0471, 0x0472, 0x0473, 0x0474, 0x0475, 0x0476, 0x0477, 0x0478, 0x0479, 0x047A, 0x047B, 0x047C, 0x047D, 0x047E, 0x047F, 0x0480, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, 0x048A, 0x048B, 0x048C, 0x048D, 0x048E, 0x048F, 0x0490, 0x0491, 0x0492, 0x0493, 0x0494, 0x0495, 0x0496, 0x0497, 0x0498, 0x0499, 0x049A, 0x049B, 0x049C, 0x049D, 0x049E, 0x049F, 0x04A0, 0x04A1, 0x04A2, 0x04A3, 0x04A4, 0x04A5, 0x04A6, 0x04A7, 0x04A8, 0x04A9, 0x04AA, 0x04AB, 0x04AC, 0x04AD, 0x04AE, 0x04AF, 0x04B0, 0x04B1, 0x04B2, 0x04B3, 0x04B4, 0x04B5, 0x04B6, 0x04B7, 0x04B8, 0x04B9, 0x04BA, 0x04BB, 0x04BC, 0x04BD, 0x04BE, 0x04BF, 0x04C0, 0x04C1, 0x04C2, 0x04C3, 0x04C4, 0x04C5, 0x04C6, 0x04C7, 0x04C8, 0x04C9, 0x04CA, 0x04CB, 0x04CC, 0x04CD, 0x04CE, 0x04CF, 0x04D0, 0x04D1, 0x04D2, 0x04D3, 0x04D4, 0x04D5, 0x04D6, 0x04D7, 0x04D8, 0x04D9, 0x04DA, 0x04DB, 0x04DC, 0x04DD, 0x04DE, 0x04DF, 0x04E0, 0x04E1, 0x04E2, 0x04E3, 0x04E4, 0x04E5, 0x04E6, 0x04E7, 0x04E8, 0x04E9, 0x04EA, 0x04EB, 0x04EC, 0x04ED, 0x04EE, 0x04EF, 0x04F0, 0x04F1, 0x04F2, 0x04F3, 0x04F4, 0x04F5, 0x04F6, 0x04F7, 0x04F8, 0x04F9, 0x04FA, 0x04FB, 0x04FC, 0x04FD, 0x04FE, 0x04FF, 0x0500, 0x0501, 0x0502, 0x0503, 0x0504, 0x0505, 0x0506, 0x0507, 0x0508, 0x0509, 0x050A, 0x050B, 0x050C, 0x050D, 0x050E, 0x050F, 0x0510, 0x0511, 0x0512, 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051A, 0x051B, 0x051C, 0x051D, 0x051E, 0x051F, 0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052A, 0x052B, 0x052C, 0x052D, 0x052E, 0x052F, 0x0530, 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538, 0x0539, 0x053A, 0x053B, 0x053C, 0x053D, 0x053E, 0x053F, 0x0540, 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, 0x0548, 0x0549, 0x054A, 0x054B, 0x054C, 0x054D, 0x054E, 0x054F, 0x0550, 0x0551, 0x0552, 0x0553, 0x0554, 0x0555, 0x0556, 0x0557, 0x0558, 0x0559, 0x055A, 0x055B, 0x055C, 0x055D, 0x055E, 0x055F, 0x0560, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, 0x056A, 0x056B, 0x056C, 0x056D, 0x056E, 0x056F, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, 0x0578, 0x0579, 0x057A, 0x057B, 0x057C, 0x057D, 0x057E, 0x057F, 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, 0x058A, 0x058B, 0x058C, 0x058D, 0x058E, 0x058F, 0x0590, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, 0x0598, 0x0599, 0x059A, 0x059B, 0x059C, 0x059D, 0x059E, 0x059F, 0x05A0, 0x05A1, 0x05A2, 0x05A3, 0x05A4, 0x05A5, 0x05A6, 0x05A7, 0x05A8, 0x05A9, 0x05AA, 0x05AB, 0x05AC, 0x05AD, 0x05AE, 0x05AF, 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05C4, 0x05C5, 0x05C6, 0x05C7, 0x05C8, 0x05C9, 0x05CA, 0x05CB, 0x05CC, 0x05CD, 0x05CE, 0x05CF, 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, 0x05E8, 0x05E9, 0x05EA, 0x05EB, 0x05EC, 0x05ED, 0x05EE, 0x05EF, 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x05F5, 0x05F6, 0x05F7, 0x05F8, 0x05F9, 0x05FA, 0x05FB, 0x05FC, 0x05FD, 0x05FE, 0x05FF, 0x0600, 0x0601, 0x0602, 0x0603, 0x0604, 0x0605, 0x0606, 0x0607, 0x0608, 0x0609, 0x060A, 0x060B, 0x060C, 0x060D, 0x060E, 0x060F, 0x0610, 0x0611, 0x0612, 0x0613, 0x0614, 0x0615, 0x0616, 0x0617, 0x0618, 0x0619, 0x061A, 0x061B, 0x061C, 0x061D, 0x061E, 0x061F, 0x0620, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062A, 0x062B, 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x063B, 0x063C, 0x063D, 0x063E, 0x063F, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x0651, 0x0652, 0x0653, 0x0654, 0x0655, 0x0656, 0x0657, 0x0658, 0x0659, 0x065A, 0x065B, 0x065C, 0x065D, 0x065E, 0x065F, 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, 0x0668, 0x0669, 0x066A, 0x066B, 0x066C, 0x066D, 0x066E, 0x066F, 0x0670, 0x0671, 0x0672, 0x0673, 0x0674, 0x0675, 0x0676, 0x0677, 0x0678, 0x0679, 0x067A, 0x067B, 0x067C, 0x067D, 0x067E, 0x067F, 0x0680, 0x0681, 0x0682, 0x0683, 0x0684, 0x0685, 0x0686, 0x0687, 0x0688, 0x0689, 0x068A, 0x068B, 0x068C, 0x068D, 0x068E, 0x068F, 0x0690, 0x0691, 0x0692, 0x0693, 0x0694, 0x0695, 0x0696, 0x0697, 0x0698, 0x0699, 0x069A, 0x069B, 0x069C, 0x069D, 0x069E, 0x069F, 0x06A0, 0x06A1, 0x06A2, 0x06A3, 0x06A4, 0x06A5, 0x06A6, 0x06A7, 0x06A8, 0x06A9, 0x06AA, 0x06AB, 0x06AC, 0x06AD, 0x06AE, 0x06AF, 0x06B0, 0x06B1, 0x06B2, 0x06B3, 0x06B4, 0x06B5, 0x06B6, 0x06B7, 0x06B8, 0x06B9, 0x06BA, 0x06BB, 0x06BC, 0x06BD, 0x06BE, 0x06BF, 0x06C0, 0x06C1, 0x06C2, 0x06C3, 0x06C4, 0x06C5, 0x06C6, 0x06C7, 0x06C8, 0x06C9, 0x06CA, 0x06CB, 0x06CC, 0x06CD, 0x06CE, 0x06CF, 0x06D0, 0x06D1, 0x06D2, 0x06D3, 0x06D4, 0x06D5, 0x06D6, 0x06D7, 0x06D8, 0x06D9, 0x06DA, 0x06DB, 0x06DC, 0x06DD, 0x06DE, 0x06DF, 0x06E0, 0x06E1, 0x06E2, 0x06E3, 0x06E4, 0x06E5, 0x06E6, 0x06E7, 0x06E8, 0x06E9, 0x06EA, 0x06EB, 0x06EC, 0x06ED, 0x06EE, 0x06EF, 0x06F0, 0x06F1, 0x06F2, 0x06F3, 0x06F4, 0x06F5, 0x06F6, 0x06F7, 0x06F8, 0x06F9, 0x06FA, 0x06FB, 0x06FC, 0x06FD, 0x06FE, 0x06FF, 0x0700, 0x0701, 0x0702, 0x0703, 0x0704, 0x0705, 0x0706, 0x0707, 0x0708, 0x0709, 0x070A, 0x070B, 0x070C, 0x070D, 0x070E, 0x070F, 0x0710, 0x0711, 0x0712, 0x0713, 0x0714, 0x0715, 0x0716, 0x0717, 0x0718, 0x0719, 0x071A, 0x071B, 0x071C, 0x071D, 0x071E, 0x071F, 0x0720, 0x0721, 0x0722, 0x0723, 0x0724, 0x0725, 0x0726, 0x0727, 0x0728, 0x0729, 0x072A, 0x072B, 0x072C, 0x072D, 0x072E, 0x072F, 0x0730, 0x0731, 0x0732, 0x0733, 0x0734, 0x0735, 0x0736, 0x0737, 0x0738, 0x0739, 0x073A, 0x073B, 0x073C, 0x073D, 0x073E, 0x073F, 0x0740, 0x0741, 0x0742, 0x0743, 0x0744, 0x0745, 0x0746, 0x0747, 0x0748, 0x0749, 0x074A, 0x074B, 0x074C, 0x074D, 0x074E, 0x074F, 0x0750, 0x0751, 0x0752, 0x0753, 0x0754, 0x0755, 0x0756, 0x0757, 0x0758, 0x0759, 0x075A, 0x075B, 0x075C, 0x075D, 0x075E, 0x075F, 0x0760, 0x0761, 0x0762, 0x0763, 0x0764, 0x0765, 0x0766, 0x0767, 0x0768, 0x0769, 0x076A, 0x076B, 0x076C, 0x076D, 0x076E, 0x076F, 0x0770, 0x0771, 0x0772, 0x0773, 0x0774, 0x0775, 0x0776, 0x0777, 0x0778, 0x0779, 0x077A, 0x077B, 0x077C, 0x077D, 0x077E, 0x077F, 0x0780, 0x0781, 0x0782, 0x0783, 0x0784, 0x0785, 0x0786, 0x0787, 0x0788, 0x0789, 0x078A, 0x078B, 0x078C, 0x078D, 0x078E, 0x078F, 0x0790, 0x0791, 0x0792, 0x0793, 0x0794, 0x0795, 0x0796, 0x0797, 0x0798, 0x0799, 0x079A, 0x079B, 0x079C, 0x079D, 0x079E, 0x079F, 0x07A0, 0x07A1, 0x07A2, 0x07A3, 0x07A4, 0x07A5, 0x07A6, 0x07A7, 0x07A8, 0x07A9, 0x07AA, 0x07AB, 0x07AC, 0x07AD, 0x07AE, 0x07AF, 0x07B0, 0x07B1, 0x07B2, 0x07B3, 0x07B4, 0x07B5, 0x07B6, 0x07B7, 0x07B8, 0x07B9, 0x07BA, 0x07BB, 0x07BC, 0x07BD, 0x07BE, 0x07BF, 0x07C0, 0x07C1, 0x07C2, 0x07C3, 0x07C4, 0x07C5, 0x07C6, 0x07C7, 0x07C8, 0x07C9, 0x07CA, 0x07CB, 0x07CC, 0x07CD, 0x07CE, 0x07CF, 0x07D0, 0x07D1, 0x07D2, 0x07D3, 0x07D4, 0x07D5, 0x07D6, 0x07D7, 0x07D8, 0x07D9, 0x07DA, 0x07DB, 0x07DC, 0x07DD, 0x07DE, 0x07DF, 0x07E0, 0x07E1, 0x07E2, 0x07E3, 0x07E4, 0x07E5, 0x07E6, 0x07E7, 0x07E8, 0x07E9, 0x07EA, 0x07EB, 0x07EC, 0x07ED, 0x07EE, 0x07EF, 0x07F0, 0x07F1, 0x07F2, 0x07F3, 0x07F4, 0x07F5, 0x07F6, 0x07F7, 0x07F8, 0x07F9, 0x07FA, 0x07FB, 0x07FC, 0x07FD, 0x07FE, 0x07FF, 0x0800, 0x0801, 0x0802, 0x0803, 0x0804, 0x0805, 0x0806, 0x0807, 0x0808, 0x0809, 0x080A, 0x080B, 0x080C, 0x080D, 0x080E, 0x080F, 0x0810, 0x0811, 0x0812, 0x0813, 0x0814, 0x0815, 0x0816, 0x0817, 0x0818, 0x0819, 0x081A, 0x081B, 0x081C, 0x081D, 0x081E, 0x081F, 0x0820, 0x0821, 0x0822, 0x0823, 0x0824, 0x0825, 0x0826, 0x0827, 0x0828, 0x0829, 0x082A, 0x082B, 0x082C, 0x082D, 0x082E, 0x082F, 0x0830, 0x0831, 0x0832, 0x0833, 0x0834, 0x0835, 0x0836, 0x0837, 0x0838, 0x0839, 0x083A, 0x083B, 0x083C, 0x083D, 0x083E, 0x083F, 0x0840, 0x0841, 0x0842, 0x0843, 0x0844, 0x0845, 0x0846, 0x0847, 0x0848, 0x0849, 0x084A, 0x084B, 0x084C, 0x084D, 0x084E, 0x084F, 0x0850, 0x0851, 0x0852, 0x0853, 0x0854, 0x0855, 0x0856, 0x0857, 0x0858, 0x0859, 0x085A, 0x085B, 0x085C, 0x085D, 0x085E, 0x085F, 0x0860, 0x0861, 0x0862, 0x0863, 0x0864, 0x0865, 0x0866, 0x0867, 0x0868, 0x0869, 0x086A, 0x086B, 0x086C, 0x086D, 0x086E, 0x086F, 0x0870, 0x0871, 0x0872, 0x0873, 0x0874, 0x0875, 0x0876, 0x0877, 0x0878, 0x0879, 0x087A, 0x087B, 0x087C, 0x087D, 0x087E, 0x087F, 0x0880, 0x0881, 0x0882, 0x0883, 0x0884, 0x0885, 0x0886, 0x0887, 0x0888, 0x0889, 0x088A, 0x088B, 0x088C, 0x088D, 0x088E, 0x088F, 0x0890, 0x0891, 0x0892, 0x0893, 0x0894, 0x0895, 0x0896, 0x0897, 0x0898, 0x0899, 0x089A, 0x089B, 0x089C, 0x089D, 0x089E, 0x089F, 0x08A0, 0x08A1, 0x08A2, 0x08A3, 0x08A4, 0x08A5, 0x08A6, 0x08A7, 0x08A8, 0x08A9, 0x08AA, 0x08AB, 0x08AC, 0x08AD, 0x08AE, 0x08AF, 0x08B0, 0x08B1, 0x08B2, 0x08B3, 0x08B4, 0x08B5, 0x08B6, 0x08B7, 0x08B8, 0x08B9, 0x08BA, 0x08BB, 0x08BC, 0x08BD, 0x08BE, 0x08BF, 0x08C0, 0x08C1, 0x08C2, 0x08C3, 0x08C4, 0x08C5, 0x08C6, 0x08C7, 0x08C8, 0x08C9, 0x08CA, 0x08CB, 0x08CC, 0x08CD, 0x08CE, 0x08CF, 0x08D0, 0x08D1, 0x08D2, 0x08D3, 0x08D4, 0x08D5, 0x08D6, 0x08D7, 0x08D8, 0x08D9, 0x08DA, 0x08DB, 0x08DC, 0x08DD, 0x08DE, 0x08DF, 0x08E0, 0x08E1, 0x08E2, 0x08E3, 0x08E4, 0x08E5, 0x08E6, 0x08E7, 0x08E8, 0x08E9, 0x08EA, 0x08EB, 0x08EC, 0x08ED, 0x08EE, 0x08EF, 0x08F0, 0x08F1, 0x08F2, 0x08F3, 0x08F4, 0x08F5, 0x08F6, 0x08F7, 0x08F8, 0x08F9, 0x08FA, 0x08FB, 0x08FC, 0x08FD, 0x08FE, 0x08FF, 0x0900, 0x0901, 0x0902, 0x0903, 0x0904, 0x0905, 0x0906, 0x0907, 0x0908, 0x0909, 0x090A, 0x090B, 0x090C, 0x090D, 0x090E, 0x090F, 0x0910, 0x0911, 0x0912, 0x0913, 0x0914, 0x0915, 0x0916, 0x0917, 0x0918, 0x0919, 0x091A, 0x091B, 0x091C, 0x091D, 0x091E, 0x091F, 0x0920, 0x0921, 0x0922, 0x0923, 0x0924, 0x0925, 0x0926, 0x0927, 0x0928, 0x0929, 0x092A, 0x092B, 0x092C, 0x092D, 0x092E, 0x092F, 0x0930, 0x0931, 0x0932, 0x0933, 0x0934, 0x0935, 0x0936, 0x0937, 0x0938, 0x0939, 0x093A, 0x093B, 0x093C, 0x093D, 0x093E, 0x093F, 0x0940, 0x0941, 0x0942, 0x0943, 0x0944, 0x0945, 0x0946, 0x0947, 0x0948, 0x0949, 0x094A, 0x094B, 0x094C, 0x094D, 0x094E, 0x094F, 0x0950, 0x0951, 0x0952, 0x0953, 0x0954, 0x0955, 0x0956, 0x0957, 0x0958, 0x0959, 0x095A, 0x095B, 0x095C, 0x095D, 0x095E, 0x095F, 0x0960, 0x0961, 0x0962, 0x0963, 0x0964, 0x0965, 0x0966, 0x0967, 0x0968, 0x0969, 0x096A, 0x096B, 0x096C, 0x096D, 0x096E, 0x096F, 0x0970, 0x0971, 0x0972, 0x0973, 0x0974, 0x0975, 0x0976, 0x0977, 0x0978, 0x0979, 0x097A, 0x097B, 0x097C, 0x097D, 0x097E, 0x097F, 0x0980, 0x0981, 0x0982, 0x0983, 0x0984, 0x0985, 0x0986, 0x0987, 0x0988, 0x0989, 0x098A, 0x098B, 0x098C, 0x098D, 0x098E, 0x098F, 0x0990, 0x0991, 0x0992, 0x0993, 0x0994, 0x0995, 0x0996, 0x0997, 0x0998, 0x0999, 0x099A, 0x099B, 0x099C, 0x099D, 0x099E, 0x099F, 0x09A0, 0x09A1, 0x09A2, 0x09A3, 0x09A4, 0x09A5, 0x09A6, 0x09A7, 0x09A8, 0x09A9, 0x09AA, 0x09AB, 0x09AC, 0x09AD, 0x09AE, 0x09AF, 0x09B0, 0x09B1, 0x09B2, 0x09B3, 0x09B4, 0x09B5, 0x09B6, 0x09B7, 0x09B8, 0x09B9, 0x09BA, 0x09BB, 0x09BC, 0x09BD, 0x09BE, 0x09BF, 0x09C0, 0x09C1, 0x09C2, 0x09C3, 0x09C4, 0x09C5, 0x09C6, 0x09C7, 0x09C8, 0x09C9, 0x09CA, 0x09CB, 0x09CC, 0x09CD, 0x09CE, 0x09CF, 0x09D0, 0x09D1, 0x09D2, 0x09D3, 0x09D4, 0x09D5, 0x09D6, 0x09D7, 0x09D8, 0x09D9, 0x09DA, 0x09DB, 0x09DC, 0x09DD, 0x09DE, 0x09DF, 0x09E0, 0x09E1, 0x09E2, 0x09E3, 0x09E4, 0x09E5, 0x09E6, 0x09E7, 0x09E8, 0x09E9, 0x09EA, 0x09EB, 0x09EC, 0x09ED, 0x09EE, 0x09EF, 0x09F0, 0x09F1, 0x09F2, 0x09F3, 0x09F4, 0x09F5, 0x09F6, 0x09F7, 0x09F8, 0x09F9, 0x09FA, 0x09FB, 0x09FC, 0x09FD, 0x09FE, 0x09FF, 0x0A00, 0x0A01, 0x0A02, 0x0A03, 0x0A04, 0x0A05, 0x0A06, 0x0A07, 0x0A08, 0x0A09, 0x0A0A, 0x0A0B, 0x0A0C, 0x0A0D, 0x0A0E, 0x0A0F, 0x0A10, 0x0A11, 0x0A12, 0x0A13, 0x0A14, 0x0A15, 0x0A16, 0x0A17, 0x0A18, 0x0A19, 0x0A1A, 0x0A1B, 0x0A1C, 0x0A1D, 0x0A1E, 0x0A1F, 0x0A20, 0x0A21, 0x0A22, 0x0A23, 0x0A24, 0x0A25, 0x0A26, 0x0A27, 0x0A28, 0x0A29, 0x0A2A, 0x0A2B, 0x0A2C, 0x0A2D, 0x0A2E, 0x0A2F, 0x0A30, 0x0A31, 0x0A32, 0x0A33, 0x0A34, 0x0A35, 0x0A36, 0x0A37, 0x0A38, 0x0A39, 0x0A3A, 0x0A3B, 0x0A3C, 0x0A3D, 0x0A3E, 0x0A3F, 0x0A40, 0x0A41, 0x0A42, 0x0A43, 0x0A44, 0x0A45, 0x0A46, 0x0A47, 0x0A48, 0x0A49, 0x0A4A, 0x0A4B, 0x0A4C, 0x0A4D, 0x0A4E, 0x0A4F, 0x0A50, 0x0A51, 0x0A52, 0x0A53, 0x0A54, 0x0A55, 0x0A56, 0x0A57, 0x0A58, 0x0A59, 0x0A5A, 0x0A5B, 0x0A5C, 0x0A5D, 0x0A5E, 0x0A5F, 0x0A60, 0x0A61, 0x0A62, 0x0A63, 0x0A64, 0x0A65, 0x0A66, 0x0A67, 0x0A68, 0x0A69, 0x0A6A, 0x0A6B, 0x0A6C, 0x0A6D, 0x0A6E, 0x0A6F, 0x0A70, 0x0A71, 0x0A72, 0x0A73, 0x0A74, 0x0A75, 0x0A76, 0x0A77, 0x0A78, 0x0A79, 0x0A7A, 0x0A7B, 0x0A7C, 0x0A7D, 0x0A7E, 0x0A7F, 0x0A80, 0x0A81, 0x0A82, 0x0A83, 0x0A84, 0x0A85, 0x0A86, 0x0A87, 0x0A88, 0x0A89, 0x0A8A, 0x0A8B, 0x0A8C, 0x0A8D, 0x0A8E, 0x0A8F, 0x0A90, 0x0A91, 0x0A92, 0x0A93, 0x0A94, 0x0A95, 0x0A96, 0x0A97, 0x0A98, 0x0A99, 0x0A9A, 0x0A9B, 0x0A9C, 0x0A9D, 0x0A9E, 0x0A9F, 0x0AA0, 0x0AA1, 0x0AA2, 0x0AA3, 0x0AA4, 0x0AA5, 0x0AA6, 0x0AA7, 0x0AA8, 0x0AA9, 0x0AAA, 0x0AAB, 0x0AAC, 0x0AAD, 0x0AAE, 0x0AAF, 0x0AB0, 0x0AB1, 0x0AB2, 0x0AB3, 0x0AB4, 0x0AB5, 0x0AB6, 0x0AB7, 0x0AB8, 0x0AB9, 0x0ABA, 0x0ABB, 0x0ABC, 0x0ABD, 0x0ABE, 0x0ABF, 0x0AC0, 0x0AC1, 0x0AC2, 0x0AC3, 0x0AC4, 0x0AC5, 0x0AC6, 0x0AC7, 0x0AC8, 0x0AC9, 0x0ACA, 0x0ACB, 0x0ACC, 0x0ACD, 0x0ACE, 0x0ACF, 0x0AD0, 0x0AD1, 0x0AD2, 0x0AD3, 0x0AD4, 0x0AD5, 0x0AD6, 0x0AD7, 0x0AD8, 0x0AD9, 0x0ADA, 0x0ADB, 0x0ADC, 0x0ADD, 0x0ADE, 0x0ADF, 0x0AE0, 0x0AE1, 0x0AE2, 0x0AE3, 0x0AE4, 0x0AE5, 0x0AE6, 0x0AE7, 0x0AE8, 0x0AE9, 0x0AEA, 0x0AEB, 0x0AEC, 0x0AED, 0x0AEE, 0x0AEF, 0x0AF0, 0x0AF1, 0x0AF2, 0x0AF3, 0x0AF4, 0x0AF5, 0x0AF6, 0x0AF7, 0x0AF8, 0x0AF9, 0x0AFA, 0x0AFB, 0x0AFC, 0x0AFD, 0x0AFE, 0x0AFF, 0x0B00, 0x0B01, 0x0B02, 0x0B03, 0x0B04, 0x0B05, 0x0B06, 0x0B07, 0x0B08, 0x0B09, 0x0B0A, 0x0B0B, 0x0B0C, 0x0B0D, 0x0B0E, 0x0B0F, 0x0B10, 0x0B11, 0x0B12, 0x0B13, 0x0B14, 0x0B15, 0x0B16, 0x0B17, 0x0B18, 0x0B19, 0x0B1A, 0x0B1B, 0x0B1C, 0x0B1D, 0x0B1E, 0x0B1F, 0x0B20, 0x0B21, 0x0B22, 0x0B23, 0x0B24, 0x0B25, 0x0B26, 0x0B27, 0x0B28, 0x0B29, 0x0B2A, 0x0B2B, 0x0B2C, 0x0B2D, 0x0B2E, 0x0B2F, 0x0B30, 0x0B31, 0x0B32, 0x0B33, 0x0B34, 0x0B35, 0x0B36, 0x0B37, 0x0B38, 0x0B39, 0x0B3A, 0x0B3B, 0x0B3C, 0x0B3D, 0x0B3E, 0x0B3F, 0x0B40, 0x0B41, 0x0B42, 0x0B43, 0x0B44, 0x0B45, 0x0B46, 0x0B47, 0x0B48, 0x0B49, 0x0B4A, 0x0B4B, 0x0B4C, 0x0B4D, 0x0B4E, 0x0B4F, 0x0B50, 0x0B51, 0x0B52, 0x0B53, 0x0B54, 0x0B55, 0x0B56, 0x0B57, 0x0B58, 0x0B59, 0x0B5A, 0x0B5B, 0x0B5C, 0x0B5D, 0x0B5E, 0x0B5F, 0x0B60, 0x0B61, 0x0B62, 0x0B63, 0x0B64, 0x0B65, 0x0B66, 0x0B67, 0x0B68, 0x0B69, 0x0B6A, 0x0B6B, 0x0B6C, 0x0B6D, 0x0B6E, 0x0B6F, 0x0B70, 0x0B71, 0x0B72, 0x0B73, 0x0B74, 0x0B75, 0x0B76, 0x0B77, 0x0B78, 0x0B79, 0x0B7A, 0x0B7B, 0x0B7C, 0x0B7D, 0x0B7E, 0x0B7F, 0x0B80, 0x0B81, 0x0B82, 0x0B83, 0x0B84, 0x0B85, 0x0B86, 0x0B87, 0x0B88, 0x0B89, 0x0B8A, 0x0B8B, 0x0B8C, 0x0B8D, 0x0B8E, 0x0B8F, 0x0B90, 0x0B91, 0x0B92, 0x0B93, 0x0B94, 0x0B95, 0x0B96, 0x0B97, 0x0B98, 0x0B99, 0x0B9A, 0x0B9B, 0x0B9C, 0x0B9D, 0x0B9E, 0x0B9F, 0x0BA0, 0x0BA1, 0x0BA2, 0x0BA3, 0x0BA4, 0x0BA5, 0x0BA6, 0x0BA7, 0x0BA8, 0x0BA9, 0x0BAA, 0x0BAB, 0x0BAC, 0x0BAD, 0x0BAE, 0x0BAF, 0x0BB0, 0x0BB1, 0x0BB2, 0x0BB3, 0x0BB4, 0x0BB5, 0x0BB6, 0x0BB7, 0x0BB8, 0x0BB9, 0x0BBA, 0x0BBB, 0x0BBC, 0x0BBD, 0x0BBE, 0x0BBF, 0x0BC0, 0x0BC1, 0x0BC2, 0x0BC3, 0x0BC4, 0x0BC5, 0x0BC6, 0x0BC7, 0x0BC8, 0x0BC9, 0x0BCA, 0x0BCB, 0x0BCC, 0x0BCD, 0x0BCE, 0x0BCF, 0x0BD0, 0x0BD1, 0x0BD2, 0x0BD3, 0x0BD4, 0x0BD5, 0x0BD6, 0x0BD7, 0x0BD8, 0x0BD9, 0x0BDA, 0x0BDB, 0x0BDC, 0x0BDD, 0x0BDE, 0x0BDF, 0x0BE0, 0x0BE1, 0x0BE2, 0x0BE3, 0x0BE4, 0x0BE5, 0x0BE6, 0x0BE7, 0x0BE8, 0x0BE9, 0x0BEA, 0x0BEB, 0x0BEC, 0x0BED, 0x0BEE, 0x0BEF, 0x0BF0, 0x0BF1, 0x0BF2, 0x0BF3, 0x0BF4, 0x0BF5, 0x0BF6, 0x0BF7, 0x0BF8, 0x0BF9, 0x0BFA, 0x0BFB, 0x0BFC, 0x0BFD, 0x0BFE, 0x0BFF, 0x0C00, 0x0C01, 0x0C02, 0x0C03, 0x0C04, 0x0C05, 0x0C06, 0x0C07, 0x0C08, 0x0C09, 0x0C0A, 0x0C0B, 0x0C0C, 0x0C0D, 0x0C0E, 0x0C0F, 0x0C10, 0x0C11, 0x0C12, 0x0C13, 0x0C14, 0x0C15, 0x0C16, 0x0C17, 0x0C18, 0x0C19, 0x0C1A, 0x0C1B, 0x0C1C, 0x0C1D, 0x0C1E, 0x0C1F, 0x0C20, 0x0C21, 0x0C22, 0x0C23, 0x0C24, 0x0C25, 0x0C26, 0x0C27, 0x0C28, 0x0C29, 0x0C2A, 0x0C2B, 0x0C2C, 0x0C2D, 0x0C2E, 0x0C2F, 0x0C30, 0x0C31, 0x0C32, 0x0C33, 0x0C34, 0x0C35, 0x0C36, 0x0C37, 0x0C38, 0x0C39, 0x0C3A, 0x0C3B, 0x0C3C, 0x0C3D, 0x0C3E, 0x0C3F, 0x0C40, 0x0C41, 0x0C42, 0x0C43, 0x0C44, 0x0C45, 0x0C46, 0x0C47, 0x0C48, 0x0C49, 0x0C4A, 0x0C4B, 0x0C4C, 0x0C4D, 0x0C4E, 0x0C4F, 0x0C50, 0x0C51, 0x0C52, 0x0C53, 0x0C54, 0x0C55, 0x0C56, 0x0C57, 0x0C58, 0x0C59, 0x0C5A, 0x0C5B, 0x0C5C, 0x0C5D, 0x0C5E, 0x0C5F, 0x0C60, 0x0C61, 0x0C62, 0x0C63, 0x0C64, 0x0C65, 0x0C66, 0x0C67, 0x0C68, 0x0C69, 0x0C6A, 0x0C6B, 0x0C6C, 0x0C6D, 0x0C6E, 0x0C6F, 0x0C70, 0x0C71, 0x0C72, 0x0C73, 0x0C74, 0x0C75, 0x0C76, 0x0C77, 0x0C78, 0x0C79, 0x0C7A, 0x0C7B, 0x0C7C, 0x0C7D, 0x0C7E, 0x0C7F, 0x0C80, 0x0C81, 0x0C82, 0x0C83, 0x0C84, 0x0C85, 0x0C86, 0x0C87, 0x0C88, 0x0C89, 0x0C8A, 0x0C8B, 0x0C8C, 0x0C8D, 0x0C8E, 0x0C8F, 0x0C90, 0x0C91, 0x0C92, 0x0C93, 0x0C94, 0x0C95, 0x0C96, 0x0C97, 0x0C98, 0x0C99, 0x0C9A, 0x0C9B, 0x0C9C, 0x0C9D, 0x0C9E, 0x0C9F, 0x0CA0, 0x0CA1, 0x0CA2, 0x0CA3, 0x0CA4, 0x0CA5, 0x0CA6, 0x0CA7, 0x0CA8, 0x0CA9, 0x0CAA, 0x0CAB, 0x0CAC, 0x0CAD, 0x0CAE, 0x0CAF, 0x0CB0, 0x0CB1, 0x0CB2, 0x0CB3, 0x0CB4, 0x0CB5, 0x0CB6, 0x0CB7, 0x0CB8, 0x0CB9, 0x0CBA, 0x0CBB, 0x0CBC, 0x0CBD, 0x0CBE, 0x0CBF, 0x0CC0, 0x0CC1, 0x0CC2, 0x0CC3, 0x0CC4, 0x0CC5, 0x0CC6, 0x0CC7, 0x0CC8, 0x0CC9, 0x0CCA, 0x0CCB, 0x0CCC, 0x0CCD, 0x0CCE, 0x0CCF, 0x0CD0, 0x0CD1, 0x0CD2, 0x0CD3, 0x0CD4, 0x0CD5, 0x0CD6, 0x0CD7, 0x0CD8, 0x0CD9, 0x0CDA, 0x0CDB, 0x0CDC, 0x0CDD, 0x0CDE, 0x0CDF, 0x0CE0, 0x0CE1, 0x0CE2, 0x0CE3, 0x0CE4, 0x0CE5, 0x0CE6, 0x0CE7, 0x0CE8, 0x0CE9, 0x0CEA, 0x0CEB, 0x0CEC, 0x0CED, 0x0CEE, 0x0CEF, 0x0CF0, 0x0CF1, 0x0CF2, 0x0CF3, 0x0CF4, 0x0CF5, 0x0CF6, 0x0CF7, 0x0CF8, 0x0CF9, 0x0CFA, 0x0CFB, 0x0CFC, 0x0CFD, 0x0CFE, 0x0CFF, 0x0D00, 0x0D01, 0x0D02, 0x0D03, 0x0D04, 0x0D05, 0x0D06, 0x0D07, 0x0D08, 0x0D09, 0x0D0A, 0x0D0B, 0x0D0C, 0x0D0D, 0x0D0E, 0x0D0F, 0x0D10, 0x0D11, 0x0D12, 0x0D13, 0x0D14, 0x0D15, 0x0D16, 0x0D17, 0x0D18, 0x0D19, 0x0D1A, 0x0D1B, 0x0D1C, 0x0D1D, 0x0D1E, 0x0D1F, 0x0D20, 0x0D21, 0x0D22, 0x0D23, 0x0D24, 0x0D25, 0x0D26, 0x0D27, 0x0D28, 0x0D29, 0x0D2A, 0x0D2B, 0x0D2C, 0x0D2D, 0x0D2E, 0x0D31, 0x0D32, 0x0D33, 0x0D34, 0x0D35, 0x0D36, 0x0D37, 0x0D38, 0x0D39, 0x0D3A, 0x0D3B, 0x0D3C, 0x0D3D, 0x0D3E, 0x0D3F, 0x0D40, 0x0D41, 0x0D42, 0x0D43, 0x0D44, 0x0D45, 0x0D46, 0x0D47, 0x0D48, 0x0D49, 0x0D4A, 0x0D4B, 0x0D4C, 0x0D4D, 0x0D4E, 0x0D4F, 0x0D50, 0x0D51, 0x0D61, 0x0D62, 0x0D63, 0x0D64, 0x0D65, 0xE000, 0x25BC, 0x25BD]
unicode_char = [ 0x0000,0x3000,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308F,0x3092,0x3093,0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8,0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0,0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8,0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0,0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8,0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0,0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8,0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8,0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EF,0x30F2,0x30F3,0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18,0xFF19,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,0xFF3A,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58,0xFF59,0xFF5A,0xFF01,0xFF1F,0x3001,0x3002,0x22EF,0x30FB,0xFF0F,0x300C,0x300D,0x300E,0x300F,0xFF08,0xFF09,0x329A,0x329B,0xFF0B,0xFF0D,0x2297,0x2298,0xFF1D,0xFF5A,0xFF1A,0xFF1B,0xFF0E,0xFF0C,0x2664,0x2667,0x2661,0x2662,0x2606,0x25CE,0x25CB,0x25A1,0x25B3,0x25C7,0xFF20,0x266B,0xFF05,0x263C,0x2614,0x2630,0x2744,0x260B,0x2654,0x2655,0x260A,0x21D7,0x21D8,0x263E,0x00A5,0x2648,0x2649,0x264A,0x264B,0x264C,0x264D,0x264E,0x264F,0x2190,0x2191,0x2193,0x2192,0x2023,0xFF06,0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,0x0038,0x0039,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,0x0058,0x0059,0x005A,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,0x0078,0x0079,0x007A,0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,0x00F8,0x00F9,0x00FA,0x00FB,0x00FC,0x00FD,0x00FE,0x00FF,0x0152,0x0153,0x015E,0x015F,0x00AA,0x00BA,0x00B9,0x00B2,0x00B3,0x0024,0x00A1,0x00BF,0x0021,0x003F,0x002C,0x002E,0x2026,0x00B7,0x002F,0x2018,0x2019,0x201C,0x201D,0x201E,0x300A,0x300B,0x0028,0x0029,0x2642,0x2640,0x002B,0x002D,0x002A,0x0023,0x003D,0x0026,0x007E,0x003A,0x003B,0x2660,0x2663,0x2665,0x2666,0x2605,0x25C9,0x25CF,0x25A0,0x25B2,0x25C6,0x0040,0x266A,0x0025,0x2600,0x2601,0x2602,0x2603,0x263A,0x265A,0x265B,0x2639,0x2197,0x2198,0x263D,0x0020,0x2074,0x20A7,0x20A6,0x00B0,0x005F,0xFF3F,0xAC00,0xAC01,0xAC04,0xAC07,0xAC08,0xAC09,0xAC0A,0xAC10,0xAC11,0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,0xAC19,0xAC1A,0xAC1B,0xAC1C,0xAC1D,0xAC20,0xAC24,0xAC2C,0xAC2D,0xAC2F,0xAC30,0xAC31,0xAC38,0xAC39,0xAC3C,0xAC40,0xAC4B,0xAC4D,0xAC54,0xAC58,0xAC5C,0xAC70,0xAC71,0xAC74,0xAC77,0xAC78,0xAC7A,0xAC80,0xAC81,0xAC83,0xAC84,0xAC85,0xAC86,0xAC89,0xAC8A,0xAC8B,0xAC8C,0xAC90,0xAC94,0xAC9C,0xAC9D,0xAC9F,0xACA0,0xACA1,0xACA8,0xACA9,0xACAA,0xACAC,0xACAF,0xACB0,0xACB8,0xACB9,0xACBB,0xACBC,0xACBD,0xACC1,0xACC4,0xACC8,0xACCC,0xACD5,0xACD7,0xACE0,0xACE1,0xACE4,0xACE7,0xACE8,0xACEA,0xACEC,0xACEF,0xACF0,0xACF1,0xACF3,0xACF5,0xACF6,0xACFC,0xACFD,0xAD00,0xAD04,0xAD06,0xAD0C,0xAD0D,0xAD0F,0xAD11,0xAD18,0xAD1C,0xAD20,0xAD29,0xAD2C,0xAD2D,0xAD34,0xAD35,0xAD38,0xAD3C,0xAD44,0xAD45,0xAD47,0xAD49,0xAD50,0xAD54,0xAD58,0xAD61,0xAD63,0xAD6C,0xAD6D,0xAD70,0xAD73,0xAD74,0xAD75,0xAD76,0xAD7B,0xAD7C,0xAD7D,0xAD7F,0xAD81,0xAD82,0xAD88,0xAD89,0xAD8C,0xAD90,0xAD9C,0xAD9D,0xADA4,0xADB7,0xADC0,0xADC1,0xADC4,0xADC8,0xADD0,0xADD1,0xADD3,0xADDC,0xADE0,0xADE4,0xADF8,0xADF9,0xADFC,0xADFF,0xAE00,0xAE01,0xAE08,0xAE09,0xAE0B,0xAE0D,0xAE14,0xAE30,0xAE31,0xAE34,0xAE37,0xAE38,0xAE3A,0xAE40,0xAE41,0xAE43,0xAE45,0xAE46,0xAE4A,0xAE4C,0xAE4D,0xAE4E,0xAE50,0xAE54,0xAE56,0xAE5C,0xAE5D,0xAE5F,0xAE60,0xAE61,0xAE65,0xAE68,0xAE69,0xAE6C,0xAE70,0xAE78,0xAE79,0xAE7B,0xAE7C,0xAE7D,0xAE84,0xAE85,0xAE8C,0xAEBC,0xAEBD,0xAEBE,0xAEC0,0xAEC4,0xAECC,0xAECD,0xAECF,0xAED0,0xAED1,0xAED8,0xAED9,0xAEDC,0xAEE8,0xAEEB,0xAEED,0xAEF4,0xAEF8,0xAEFC,0xAF07,0xAF08,0xAF0D,0xAF10,0xAF2C,0xAF2D,0xAF30,0xAF32,0xAF34,0xAF3C,0xAF3D,0xAF3F,0xAF41,0xAF42,0xAF43,0xAF48,0xAF49,0xAF50,0xAF5C,0xAF5D,0xAF64,0xAF65,0xAF79,0xAF80,0xAF84,0xAF88,0xAF90,0xAF91,0xAF95,0xAF9C,0xAFB8,0xAFB9,0xAFBC,0xAFC0,0xAFC7,0xAFC8,0xAFC9,0xAFCB,0xAFCD,0xAFCE,0xAFD4,0xAFDC,0xAFE8,0xAFE9,0xAFF0,0xAFF1,0xAFF4,0xAFF8,0xB000,0xB001,0xB004,0xB00C,0xB010,0xB014,0xB01C,0xB01D,0xB028,0xB044,0xB045,0xB048,0xB04A,0xB04C,0xB04E,0xB053,0xB054,0xB055,0xB057,0xB059,0xB05D,0xB07C,0xB07D,0xB080,0xB084,0xB08C,0xB08D,0xB08F,0xB091,0xB098,0xB099,0xB09A,0xB09C,0xB09F,0xB0A0,0xB0A1,0xB0A2,0xB0A8,0xB0A9,0xB0AB,0xB0AC,0xB0AD,0xB0AE,0xB0AF,0xB0B1,0xB0B3,0xB0B4,0xB0B5,0xB0B8,0xB0BC,0xB0C4,0xB0C5,0xB0C7,0xB0C8,0xB0C9,0xB0D0,0xB0D1,0xB0D4,0xB0D8,0xB0E0,0xB0E5,0xB108,0xB109,0xB10B,0xB10C,0xB110,0xB112,0xB113,0xB118,0xB119,0xB11B,0xB11C,0xB11D,0xB123,0xB124,0xB125,0xB128,0xB12C,0xB134,0xB135,0xB137,0xB138,0xB139,0xB140,0xB141,0xB144,0xB148,0xB150,0xB151,0xB154,0xB155,0xB158,0xB15C,0xB160,0xB178,0xB179,0xB17C,0xB180,0xB182,0xB188,0xB189,0xB18B,0xB18D,0xB192,0xB193,0xB194,0xB198,0xB19C,0xB1A8,0xB1CC,0xB1D0,0xB1D4,0xB1DC,0xB1DD,0xB1DF,0xB1E8,0xB1E9,0xB1EC,0xB1F0,0xB1F9,0xB1FB,0xB1FD,0xB204,0xB205,0xB208,0xB20B,0xB20C,0xB214,0xB215,0xB217,0xB219,0xB220,0xB234,0xB23C,0xB258,0xB25C,0xB260,0xB268,0xB269,0xB274,0xB275,0xB27C,0xB284,0xB285,0xB289,0xB290,0xB291,0xB294,0xB298,0xB299,0xB29A,0xB2A0,0xB2A1,0xB2A3,0xB2A5,0xB2A6,0xB2AA,0xB2AC,0xB2B0,0xB2B4,0xB2C8,0xB2C9,0xB2CC,0xB2D0,0xB2D2,0xB2D8,0xB2D9,0xB2DB,0xB2DD,0xB2E2,0xB2E4,0xB2E5,0xB2E6,0xB2E8,0xB2EB,0xB2EC,0xB2ED,0xB2EE,0xB2EF,0xB2F3,0xB2F4,0xB2F5,0xB2F7,0xB2F8,0xB2F9,0xB2FA,0xB2FB,0xB2FF,0xB300,0xB301,0xB304,0xB308,0xB310,0xB311,0xB313,0xB314,0xB315,0xB31C,0xB354,0xB355,0xB356,0xB358,0xB35B,0xB35C,0xB35E,0xB35F,0xB364,0xB365,0xB367,0xB369,0xB36B,0xB36E,0xB370,0xB371,0xB374,0xB378,0xB380,0xB381,0xB383,0xB384,0xB385,0xB38C,0xB390,0xB394,0xB3A0,0xB3A1,0xB3A8,0xB3AC,0xB3C4,0xB3C5,0xB3C8,0xB3CB,0xB3CC,0xB3CE,0xB3D0,0xB3D4,0xB3D5,0xB3D7,0xB3D9,0xB3DB,0xB3DD,0xB3E0,0xB3E4,0xB3E8,0xB3FC,0xB410,0xB418,0xB41C,0xB420,0xB428,0xB429,0xB42B,0xB434,0xB450,0xB451,0xB454,0xB458,0xB460,0xB461,0xB463,0xB465,0xB46C,0xB480,0xB488,0xB49D,0xB4A4,0xB4A8,0xB4AC,0xB4B5,0xB4B7,0xB4B9,0xB4C0,0xB4C4,0xB4C8,0xB4D0,0xB4D5,0xB4DC,0xB4DD,0xB4E0,0xB4E3,0xB4E4,0xB4E6,0xB4EC,0xB4ED,0xB4EF,0xB4F1,0xB4F8,0xB514,0xB515,0xB518,0xB51B,0xB51C,0xB524,0xB525,0xB527,0xB528,0xB529,0xB52A,0xB530,0xB531,0xB534,0xB538,0xB540,0xB541,0xB543,0xB544,0xB545,0xB54B,0xB54C,0xB54D,0xB550,0xB554,0xB55C,0xB55D,0xB55F,0xB560,0xB561,0xB5A0,0xB5A1,0xB5A4,0xB5A8,0xB5AA,0xB5AB,0xB5B0,0xB5B1,0xB5B3,0xB5B4,0xB5B5,0xB5BB,0xB5BC,0xB5BD,0xB5C0,0xB5C4,0xB5CC,0xB5CD,0xB5CF,0xB5D0,0xB5D1,0xB5D8,0xB5EC,0xB610,0xB611,0xB614,0xB618,0xB625,0xB62C,0xB634,0xB648,0xB664,0xB668,0xB69C,0xB69D,0xB6A0,0xB6A4,0xB6AB,0xB6AC,0xB6B1,0xB6D4,0xB6F0,0xB6F4,0xB6F8,0xB700,0xB701,0xB705,0xB728,0xB729,0xB72C,0xB72F,0xB730,0xB738,0xB739,0xB73B,0xB744,0xB748,0xB74C,0xB754,0xB755,0xB760,0xB764,0xB768,0xB770,0xB771,0xB773,0xB775,0xB77C,0xB77D,0xB780,0xB784,0xB78C,0xB78D,0xB78F,0xB790,0xB791,0xB792,0xB796,0xB797,0xB798,0xB799,0xB79C,0xB7A0,0xB7A8,0xB7A9,0xB7AB,0xB7AC,0xB7AD,0xB7B4,0xB7B5,0xB7B8,0xB7C7,0xB7C9,0xB7EC,0xB7ED,0xB7F0,0xB7F4,0xB7FC,0xB7FD,0xB7FF,0xB800,0xB801,0xB807,0xB808,0xB809,0xB80C,0xB810,0xB818,0xB819,0xB81B,0xB81D,0xB824,0xB825,0xB828,0xB82C,0xB834,0xB835,0xB837,0xB838,0xB839,0xB840,0xB844,0xB851,0xB853,0xB85C,0xB85D,0xB860,0xB864,0xB86C,0xB86D,0xB86F,0xB871,0xB878,0xB87C,0xB88D,0xB8A8,0xB8B0,0xB8B4,0xB8B8,0xB8C0,0xB8C1,0xB8C3,0xB8C5,0xB8CC,0xB8D0,0xB8D4,0xB8DD,0xB8DF,0xB8E1,0xB8E8,0xB8E9,0xB8EC,0xB8F0,0xB8F8,0xB8F9,0xB8FB,0xB8FD,0xB904,0xB918,0xB920,0xB93C,0xB93D,0xB940,0xB944,0xB94C,0xB94F,0xB951,0xB958,0xB959,0xB95C,0xB960,0xB968,0xB969,0xB96B,0xB96D,0xB974,0xB975,0xB978,0xB97C,0xB984,0xB985,0xB987,0xB989,0xB98A,0xB98D,0xB98E,0xB9AC,0xB9AD,0xB9B0,0xB9B4,0xB9BC,0xB9BD,0xB9BF,0xB9C1,0xB9C8,0xB9C9,0xB9CC,0xB9CE,0xB9CF,0xB9D0,0xB9D1,0xB9D2,0xB9D8,0xB9D9,0xB9DB,0xB9DD,0xB9DE,0xB9E1,0xB9E3,0xB9E4,0xB9E5,0xB9E8,0xB9EC,0xB9F4,0xB9F5,0xB9F7,0xB9F8,0xB9F9,0xB9FA,0xBA00,0xBA01,0xBA08,0xBA15,0xBA38,0xBA39,0xBA3C,0xBA40,0xBA42,0xBA48,0xBA49,0xBA4B,0xBA4D,0xBA4E,0xBA53,0xBA54,0xBA55,0xBA58,0xBA5C,0xBA64,0xBA65,0xBA67,0xBA68,0xBA69,0xBA70,0xBA71,0xBA74,0xBA78,0xBA83,0xBA84,0xBA85,0xBA87,0xBA8C,0xBAA8,0xBAA9,0xBAAB,0xBAAC,0xBAB0,0xBAB2,0xBAB8,0xBAB9,0xBABB,0xBABD,0xBAC4,0xBAC8,0xBAD8,0xBAD9,0xBAFC,0xBB00,0xBB04,0xBB0D,0xBB0F,0xBB11,0xBB18,0xBB1C,0xBB20,0xBB29,0xBB2B,0xBB34,0xBB35,0xBB36,0xBB38,0xBB3B,0xBB3C,0xBB3D,0xBB3E,0xBB44,0xBB45,0xBB47,0xBB49,0xBB4D,0xBB4F,0xBB50,0xBB54,0xBB58,0xBB61,0xBB63,0xBB6C,0xBB88,0xBB8C,0xBB90,0xBBA4,0xBBA8,0xBBAC,0xBBB4,0xBBB7,0xBBC0,0xBBC4,0xBBC8,0xBBD0,0xBBD3,0xBBF8,0xBBF9,0xBBFC,0xBBFF,0xBC00,0xBC02,0xBC08,0xBC09,0xBC0B,0xBC0C,0xBC0D,0xBC0F,0xBC11,0xBC14,0xBC15,0xBC16,0xBC17,0xBC18,0xBC1B,0xBC1C,0xBC1D,0xBC1E,0xBC1F,0xBC24,0xBC25,0xBC27,0xBC29,0xBC2D,0xBC30,0xBC31,0xBC34,0xBC38,0xBC40,0xBC41,0xBC43,0xBC44,0xBC45,0xBC49,0xBC4C,0xBC4D,0xBC50,0xBC5D,0xBC84,0xBC85,0xBC88,0xBC8B,0xBC8C,0xBC8E,0xBC94,0xBC95,0xBC97,0xBC99,0xBC9A,0xBCA0,0xBCA1,0xBCA4,0xBCA7,0xBCA8,0xBCB0,0xBCB1,0xBCB3,0xBCB4,0xBCB5,0xBCBC,0xBCBD,0xBCC0,0xBCC4,0xBCCD,0xBCCF,0xBCD0,0xBCD1,0xBCD5,0xBCD8,0xBCDC,0xBCF4,0xBCF5,0xBCF6,0xBCF8,0xBCFC,0xBD04,0xBD05,0xBD07,0xBD09,0xBD10,0xBD14,0xBD24,0xBD2C,0xBD40,0xBD48,0xBD49,0xBD4C,0xBD50,0xBD58,0xBD59,0xBD64,0xBD68,0xBD80,0xBD81,0xBD84,0xBD87,0xBD88,0xBD89,0xBD8A,0xBD90,0xBD91,0xBD93,0xBD95,0xBD99,0xBD9A,0xBD9C,0xBDA4,0xBDB0,0xBDB8,0xBDD4,0xBDD5,0xBDD8,0xBDDC,0xBDE9,0xBDF0,0xBDF4,0xBDF8,0xBE00,0xBE03,0xBE05,0xBE0C,0xBE0D,0xBE10,0xBE14,0xBE1C,0xBE1D,0xBE1F,0xBE44,0xBE45,0xBE48,0xBE4C,0xBE4E,0xBE54,0xBE55,0xBE57,0xBE59,0xBE5A,0xBE5B,0xBE60,0xBE61,0xBE64,0xBE68,0xBE6A,0xBE70,0xBE71,0xBE73,0xBE74,0xBE75,0xBE7B,0xBE7C,0xBE7D,0xBE80,0xBE84,0xBE8C,0xBE8D,0xBE8F,0xBE90,0xBE91,0xBE98,0xBE99,0xBEA8,0xBED0,0xBED1,0xBED4,0xBED7,0xBED8,0xBEE0,0xBEE3,0xBEE4,0xBEE5,0xBEEC,0xBF01,0xBF08,0xBF09,0xBF18,0xBF19,0xBF1B,0xBF1C,0xBF1D,0xBF40,0xBF41,0xBF44,0xBF48,0xBF50,0xBF51,0xBF55,0xBF94,0xBFB0,0xBFC5,0xBFCC,0xBFCD,0xBFD0,0xBFD4,0xBFDC,0xBFDF,0xBFE1,0xC03C,0xC051,0xC058,0xC05C,0xC060,0xC068,0xC069,0xC090,0xC091,0xC094,0xC098,0xC0A0,0xC0A1,0xC0A3,0xC0A5,0xC0AC,0xC0AD,0xC0AF,0xC0B0,0xC0B3,0xC0B4,0xC0B5,0xC0B6,0xC0BC,0xC0BD,0xC0BF,0xC0C0,0xC0C1,0xC0C5,0xC0C8,0xC0C9,0xC0CC,0xC0D0,0xC0D8,0xC0D9,0xC0DB,0xC0DC,0xC0DD,0xC0E4,0xC0E5,0xC0E8,0xC0EC,0xC0F4,0xC0F5,0xC0F7,0xC0F9,0xC100,0xC104,0xC108,0xC110,0xC115,0xC11C,0xC11D,0xC11E,0xC11F,0xC120,0xC123,0xC124,0xC126,0xC127,0xC12C,0xC12D,0xC12F,0xC130,0xC131,0xC136,0xC138,0xC139,0xC13C,0xC140,0xC148,0xC149,0xC14B,0xC14C,0xC14D,0xC154,0xC155,0xC158,0xC15C,0xC164,0xC165,0xC167,0xC168,0xC169,0xC170,0xC174,0xC178,0xC185,0xC18C,0xC18D,0xC18E,0xC190,0xC194,0xC196,0xC19C,0xC19D,0xC19F,0xC1A1,0xC1A5,0xC1A8,0xC1A9,0xC1AC,0xC1B0,0xC1BD,0xC1C4,0xC1C8,0xC1CC,0xC1D4,0xC1D7,0xC1D8,0xC1E0,0xC1E4,0xC1E8,0xC1F0,0xC1F1,0xC1F3,0xC1FC,0xC1FD,0xC200,0xC204,0xC20C,0xC20D,0xC20F,0xC211,0xC218,0xC219,0xC21C,0xC21F,0xC220,0xC228,0xC229,0xC22B,0xC22D,0xC22F,0xC231,0xC232,0xC234,0xC248,0xC250,0xC251,0xC254,0xC258,0xC260,0xC265,0xC26C,0xC26D,0xC270,0xC274,0xC27C,0xC27D,0xC27F,0xC281,0xC288,0xC289,0xC290,0xC298,0xC29B,0xC29D,0xC2A4,0xC2A5,0xC2A8,0xC2AC,0xC2AD,0xC2B4,0xC2B5,0xC2B7,0xC2B9,0xC2DC,0xC2DD,0xC2E0,0xC2E3,0xC2E4,0xC2EB,0xC2EC,0xC2ED,0xC2EF,0xC2F1,0xC2F6,0xC2F8,0xC2F9,0xC2FB,0xC2FC,0xC300,0xC308,0xC309,0xC30C,0xC30D,0xC313,0xC314,0xC315,0xC318,0xC31C,0xC324,0xC325,0xC328,0xC329,0xC345,0xC368,0xC369,0xC36C,0xC370,0xC372,0xC378,0xC379,0xC37C,0xC37D,0xC384,0xC388,0xC38C,0xC3C0,0xC3D8,0xC3D9,0xC3DC,0xC3DF,0xC3E0,0xC3E2,0xC3E8,0xC3E9,0xC3ED,0xC3F4,0xC3F5,0xC3F8,0xC408,0xC410,0xC424,0xC42C,0xC430,0xC434,0xC43C,0xC43D,0xC448,0xC464,0xC465,0xC468,0xC46C,0xC474,0xC475,0xC479,0xC480,0xC494,0xC49C,0xC4B8,0xC4BC,0xC4E9,0xC4F0,0xC4F1,0xC4F4,0xC4F8,0xC4FA,0xC4FF,0xC500,0xC501,0xC50C,0xC510,0xC514,0xC51C,0xC528,0xC529,0xC52C,0xC530,0xC538,0xC539,0xC53B,0xC53D,0xC544,0xC545,0xC548,0xC549,0xC54A,0xC54C,0xC54D,0xC54E,0xC553,0xC554,0xC555,0xC557,0xC558,0xC559,0xC55D,0xC55E,0xC560,0xC561,0xC564,0xC568,0xC570,0xC571,0xC573,0xC574,0xC575,0xC57C,0xC57D,0xC580,0xC584,0xC587,0xC58C,0xC58D,0xC58F,0xC591,0xC595,0xC597,0xC598,0xC59C,0xC5A0,0xC5A9,0xC5B4,0xC5B5,0xC5B8,0xC5B9,0xC5BB,0xC5BC,0xC5BD,0xC5BE,0xC5C4,0xC5C5,0xC5C6,0xC5C7,0xC5C8,0xC5C9,0xC5CA,0xC5CC,0xC5CE,0xC5D0,0xC5D1,0xC5D4,0xC5D8,0xC5E0,0xC5E1,0xC5E3,0xC5E5,0xC5EC,0xC5ED,0xC5EE,0xC5F0,0xC5F4,0xC5F6,0xC5F7,0xC5FC,0xC5FD,0xC5FE,0xC5FF,0xC600,0xC601,0xC605,0xC606,0xC607,0xC608,0xC60C,0xC610,0xC618,0xC619,0xC61B,0xC61C,0xC624,0xC625,0xC628,0xC62C,0xC62D,0xC62E,0xC630,0xC633,0xC634,0xC635,0xC637,0xC639,0xC63B,0xC640,0xC641,0xC644,0xC648,0xC650,0xC651,0xC653,0xC654,0xC655,0xC65C,0xC65D,0xC660,0xC66C,0xC66F,0xC671,0xC678,0xC679,0xC67C,0xC680,0xC688,0xC689,0xC68B,0xC68D,0xC694,0xC695,0xC698,0xC69C,0xC6A4,0xC6A5,0xC6A7,0xC6A9,0xC6B0,0xC6B1,0xC6B4,0xC6B8,0xC6B9,0xC6BA,0xC6C0,0xC6C1,0xC6C3,0xC6C5,0xC6CC,0xC6CD,0xC6D0,0xC6D4,0xC6DC,0xC6DD,0xC6E0,0xC6E1,0xC6E8,0xC6E9,0xC6EC,0xC6F0,0xC6F8,0xC6F9,0xC6FD,0xC704,0xC705,0xC708,0xC70C,0xC714,0xC715,0xC717,0xC719,0xC720,0xC721,0xC724,0xC728,0xC730,0xC731,0xC733,0xC735,0xC737,0xC73C,0xC73D,0xC740,0xC744,0xC74A,0xC74C,0xC74D,0xC74F,0xC751,0xC752,0xC753,0xC754,0xC755,0xC756,0xC757,0xC758,0xC75C,0xC760,0xC768,0xC76B,0xC774,0xC775,0xC778,0xC77C,0xC77D,0xC77E,0xC783,0xC784,0xC785,0xC787,0xC788,0xC789,0xC78A,0xC78E,0xC790,0xC791,0xC794,0xC796,0xC797,0xC798,0xC79A,0xC7A0,0xC7A1,0xC7A3,0xC7A4,0xC7A5,0xC7A6,0xC7AC,0xC7AD,0xC7B0,0xC7B4,0xC7BC,0xC7BD,0xC7BF,0xC7C0,0xC7C1,0xC7C8,0xC7C9,0xC7CC,0xC7CE,0xC7D0,0xC7D8,0xC7DD,0xC7E4,0xC7E8,0xC7EC,0xC800,0xC801,0xC804,0xC808,0xC80A,0xC810,0xC811,0xC813,0xC815,0xC816,0xC81C,0xC81D,0xC820,0xC824,0xC82C,0xC82D,0xC82F,0xC831,0xC838,0xC83C,0xC840,0xC848,0xC849,0xC84C,0xC84D,0xC854,0xC870,0xC871,0xC874,0xC878,0xC87A,0xC880,0xC881,0xC883,0xC885,0xC886,0xC887,0xC88B,0xC88C,0xC88D,0xC894,0xC89D,0xC89F,0xC8A1,0xC8A8,0xC8BC,0xC8BD,0xC8C4,0xC8C8,0xC8CC,0xC8D4,0xC8D5,0xC8D7,0xC8D9,0xC8E0,0xC8E1,0xC8E4,0xC8F5,0xC8FC,0xC8FD,0xC900,0xC904,0xC905,0xC906,0xC90C,0xC90D,0xC90F,0xC911,0xC918,0xC92C,0xC934,0xC950,0xC951,0xC954,0xC958,0xC960,0xC961,0xC963,0xC96C,0xC970,0xC974,0xC97C,0xC988,0xC989,0xC98C,0xC990,0xC998,0xC999,0xC99B,0xC99D,0xC9C0,0xC9C1,0xC9C4,0xC9C7,0xC9C8,0xC9CA,0xC9D0,0xC9D1,0xC9D3,0xC9D5,0xC9D6,0xC9D9,0xC9DA,0xC9DC,0xC9DD,0xC9E0,0xC9E2,0xC9E4,0xC9E7,0xC9EC,0xC9ED,0xC9EF,0xC9F0,0xC9F1,0xC9F8,0xC9F9,0xC9FC,0xCA00,0xCA08,0xCA09,0xCA0B,0xCA0C,0xCA0D,0xCA14,0xCA18,0xCA29,0xCA4C,0xCA4D,0xCA50,0xCA54,0xCA5C,0xCA5D,0xCA5F,0xCA60,0xCA61,0xCA68,0xCA7D,0xCA84,0xCA98,0xCABC,0xCABD,0xCAC0,0xCAC4,0xCACC,0xCACD,0xCACF,0xCAD1,0xCAD3,0xCAD8,0xCAD9,0xCAE0,0xCAEC,0xCAF4,0xCB08,0xCB10,0xCB14,0xCB18,0xCB20,0xCB21,0xCB41,0xCB48,0xCB49,0xCB4C,0xCB50,0xCB58,0xCB59,0xCB5D,0xCB64,0xCB78,0xCB79,0xCB9C,0xCBB8,0xCBD4,0xCBE4,0xCBE7,0xCBE9,0xCC0C,0xCC0D,0xCC10,0xCC14,0xCC1C,0xCC1D,0xCC21,0xCC22,0xCC27,0xCC28,0xCC29,0xCC2C,0xCC2E,0xCC30,0xCC38,0xCC39,0xCC3B,0xCC3C,0xCC3D,0xCC3E,0xCC44,0xCC45,0xCC48,0xCC4C,0xCC54,0xCC55,0xCC57,0xCC58,0xCC59,0xCC60,0xCC64,0xCC66,0xCC68,0xCC70,0xCC75,0xCC98,0xCC99,0xCC9C,0xCCA0,0xCCA8,0xCCA9,0xCCAB,0xCCAC,0xCCAD,0xCCB4,0xCCB5,0xCCB8,0xCCBC,0xCCC4,0xCCC5,0xCCC7,0xCCC9,0xCCD0,0xCCD4,0xCCE4,0xCCEC,0xCCF0,0xCD01,0xCD08,0xCD09,0xCD0C,0xCD10,0xCD18,0xCD19,0xCD1B,0xCD1D,0xCD24,0xCD28,0xCD2C,0xCD39,0xCD5C,0xCD60,0xCD64,0xCD6C,0xCD6D,0xCD6F,0xCD71,0xCD78,0xCD88,0xCD94,0xCD95,0xCD98,0xCD9C,0xCDA4,0xCDA5,0xCDA7,0xCDA9,0xCDB0,0xCDC4,0xCDCC,0xCDD0,0xCDE8,0xCDEC,0xCDF0,0xCDF8,0xCDF9,0xCDFB,0xCDFD,0xCE04,0xCE08,0xCE0C,0xCE14,0xCE19,0xCE20,0xCE21,0xCE24,0xCE28,0xCE30,0xCE31,0xCE33,0xCE35,0xCE58,0xCE59,0xCE5C,0xCE5F,0xCE60,0xCE61,0xCE68,0xCE69,0xCE6B,0xCE6D,0xCE74,0xCE75,0xCE78,0xCE7C,0xCE84,0xCE85,0xCE87,0xCE89,0xCE90,0xCE91,0xCE94,0xCE98,0xCEA0,0xCEA1,0xCEA3,0xCEA4,0xCEA5,0xCEAC,0xCEAD,0xCEC1,0xCEE4,0xCEE5,0xCEE8,0xCEEB,0xCEEC,0xCEF4,0xCEF5,0xCEF7,0xCEF8,0xCEF9,0xCF00,0xCF01,0xCF04,0xCF08,0xCF10,0xCF11,0xCF13,0xCF15,0xCF1C,0xCF20,0xCF24,0xCF2C,0xCF2D,0xCF2F,0xCF30,0xCF31,0xCF38,0xCF54,0xCF55,0xCF58,0xCF5C,0xCF64,0xCF65,0xCF67,0xCF69,0xCF70,0xCF71,0xCF74,0xCF78,0xCF80,0xCF85,0xCF8C,0xCFA1,0xCFA8,0xCFB0,0xCFC4,0xCFE0,0xCFE1,0xCFE4,0xCFE8,0xCFF0,0xCFF1,0xCFF3,0xCFF5,0xCFFC,0xD000,0xD004,0xD011,0xD018,0xD02D,0xD034,0xD035,0xD038,0xD03C,0xD044,0xD045,0xD047,0xD049,0xD050,0xD054,0xD058,0xD060,0xD06C,0xD06D,0xD070,0xD074,0xD07C,0xD07D,0xD081,0xD0A4,0xD0A5,0xD0A8,0xD0AC,0xD0B4,0xD0B5,0xD0B7,0xD0B9,0xD0C0,0xD0C1,0xD0C4,0xD0C8,0xD0C9,0xD0D0,0xD0D1,0xD0D3,0xD0D4,0xD0D5,0xD0DC,0xD0DD,0xD0E0,0xD0E4,0xD0EC,0xD0ED,0xD0EF,0xD0F0,0xD0F1,0xD0F8,0xD10D,0xD130,0xD131,0xD134,0xD138,0xD13A,0xD140,0xD141,0xD143,0xD144,0xD145,0xD14C,0xD14D,0xD150,0xD154,0xD15C,0xD15D,0xD15F,0xD161,0xD168,0xD16C,0xD17C,0xD184,0xD188,0xD1A0,0xD1A1,0xD1A4,0xD1A8,0xD1B0,0xD1B1,0xD1B3,0xD1B5,0xD1BA,0xD1BC,0xD1C0,0xD1D8,0xD1F4,0xD1F8,0xD207,0xD209,0xD210,0xD22C,0xD22D,0xD230,0xD234,0xD23C,0xD23D,0xD23F,0xD241,0xD248,0xD25C,0xD264,0xD280,0xD281,0xD284,0xD288,0xD290,0xD291,0xD295,0xD29C,0xD2A0,0xD2A4,0xD2AC,0xD2B1,0xD2B8,0xD2B9,0xD2BC,0xD2BF,0xD2C0,0xD2C2,0xD2C8,0xD2C9,0xD2CB,0xD2D4,0xD2D8,0xD2DC,0xD2E4,0xD2E5,0xD2F0,0xD2F1,0xD2F4,0xD2F8,0xD300,0xD301,0xD303,0xD305,0xD30C,0xD30D,0xD30E,0xD310,0xD314,0xD316,0xD31C,0xD31D,0xD31F,0xD320,0xD321,0xD325,0xD328,0xD329,0xD32C,0xD330,0xD338,0xD339,0xD33B,0xD33C,0xD33D,0xD344,0xD345,0xD37C,0xD37D,0xD380,0xD384,0xD38C,0xD38D,0xD38F,0xD390,0xD391,0xD398,0xD399,0xD39C,0xD3A0,0xD3A8,0xD3A9,0xD3AB,0xD3AD,0xD3B4,0xD3B8,0xD3BC,0xD3C4,0xD3C5,0xD3C8,0xD3C9,0xD3D0,0xD3D8,0xD3E1,0xD3E3,0xD3EC,0xD3ED,0xD3F0,0xD3F4,0xD3FC,0xD3FD,0xD3FF,0xD401,0xD408,0xD41D,0xD440,0xD444,0xD45C,0xD460,0xD464,0xD46D,0xD46F,0xD478,0xD479,0xD47C,0xD47F,0xD480,0xD482,0xD488,0xD489,0xD48B,0xD48D,0xD494,0xD4A9,0xD4CC,0xD4D0,0xD4D4,0xD4DC,0xD4DF,0xD4E8,0xD4EC,0xD4F0,0xD4F8,0xD4FB,0xD4FD,0xD504,0xD508,0xD50C,0xD514,0xD515,0xD517,0xD53C,0xD53D,0xD540,0xD544,0xD54C,0xD54D,0xD54F,0xD551,0xD558,0xD559,0xD55C,0xD560,0xD565,0xD568,0xD569,0xD56B,0xD56D,0xD574,0xD575,0xD578,0xD57C,0xD584,0xD585,0xD587,0xD588,0xD589,0xD590,0xD5A5,0xD5C8,0xD5C9,0xD5CC,0xD5D0,0xD5D2,0xD5D8,0xD5D9,0xD5DB,0xD5DD,0xD5E4,0xD5E5,0xD5E8,0xD5EC,0xD5F4,0xD5F5,0xD5F7,0xD5F9,0xD600,0xD601,0xD604,0xD608,0xD610,0xD611,0xD613,0xD614,0xD615,0xD61C,0xD620,0xD624,0xD62D,0xD638,0xD639,0xD63C,0xD640,0xD645,0xD648,0xD649,0xD64B,0xD64D,0xD651,0xD654,0xD655,0xD658,0xD65C,0xD667,0xD669,0xD670,0xD671,0xD674,0xD683,0xD685,0xD68C,0xD68D,0xD690,0xD694,0xD69D,0xD69F,0xD6A1,0xD6A8,0xD6AC,0xD6B0,0xD6B9,0xD6BB,0xD6C4,0xD6C5,0xD6C8,0xD6CC,0xD6D1,0xD6D4,0xD6D7,0xD6D9,0xD6E0,0xD6E4,0xD6E8,0xD6F0,0xD6F5,0xD6FC,0xD6FD,0xD700,0xD704,0xD711,0xD718,0xD719,0xD71C,0xD720,0xD728,0xD729,0xD72B,0xD72D,0xD734,0xD735,0xD738,0xD73C,0xD744,0xD747,0xD749,0xD750,0xD751,0xD754,0xD756,0xD757,0xD758,0xD759,0xD760,0xD761,0xD763,0xD765,0xD769,0xD76C,0xD770,0xD774,0xD77C,0xD77D,0xD781,0xD788,0xD789,0xD78C,0xD790,0xD798,0xD799,0xD79B,0xD79D,0x1100,0x1101,0x1102,0x1103,0x1104,0x1105,0x1106,0x1107,0x1108,0x1109,0x110A,0x110B,0x110C,0x110D,0x110E,0x110F,0x1110,0x1111,0x1112,0x1161,0x1162,0x1163,0x1164,0x1165,0x1166,0x1167,0x1168,0x1169,0x116D,0x116E,0x1172,0x1173,0x1175,0xB894,0xC330,0xC3BC,0xC4D4,0xCB2C,0x000A,0x000D,0x000C]
def from_file(path: str, read_option: str):
f = open(path, read_option)
bs = f.read()
f.close()
return bs
def write_to_file(path: str, data, write_option: str):
f = open(path, write_option)
bs = f.write(data)
f.close()
return bs
def usage(argv):
print(f"usage: {argv[0]} <to-json|to-pkm|to-pkm-b64> <json_file|pkm_file|pkm_b64_file>")
def main(argv):
if len(argv) < 3:
usage(argv)
return 1
if argv[1] == "to-json":
pkm_to_json(from_file(argv[2], "rb"))
elif argv[1] == "to-pkm":
json_to_pkm(from_file(argv[2], "r"), "bin")
elif argv[1] == "to-pkm-b64":
json_to_pkm(from_file(argv[2], "r"), "b64")
else:
usage(argv)
return 1
return 0
if __name__ == "__main__":
main(sys.argv)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment