cosmopolitan/build/rle.py

2187 lines
69 KiB
Python
Raw Permalink Normal View History

2020-06-15 14:18:57 +00:00
# OVERVIEW
#
# Run Length Decoder Scratch Pad
#
# DESCRIPTION
#
# The Cosmopolitan library includes many compressed lookup tables that
# are easy to edit by hand. The toilsome part is usually just creating
# them. This script should provide some insight on how it can be done.
C = ['\xe2\x88\x85', '\xe2\x98\xba', '\xe2\x98\xbb', '\xe2\x99\xa5',
'\xe2\x99\xa6', '\xe2\x99\xa3', '\xe2\x99\xa0', '\xe2\x80\xa2',
'\xe2\x97\x98', '\xe2\x97\x8b', '\xe2\x97\x99', '\xe2\x99\x82',
'\xe2\x99\x80', '\xe2\x99\xaa', '\xe2\x99\xab', '\xe2\x98\xbc',
'\xe2\x96\xba', '\xe2\x97\x84', '\xe2\x86\x95', '\xe2\x80\xbc',
'\xc2\xb6', '\xc2\xa7', '\xe2\x96\xac', '\xe2\x86\xa8',
'\xe2\x86\x91', '\xe2\x86\x93', '\xe2\x86\x92', '\xe2\x86\x90',
'\xe2\x88\x9f', '\xe2\x86\x94', '\xe2\x96\xb2', '\xe2\x96\xbc',
' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+',
',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C',
'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[',
'\xE2\x88\x96', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
't', 'u', 'v', 'w', 'x', 'y', 'z', '{',
'|', '}', '~', '\xe2\x8c\x82',
'\xc3\x87', '\xc3\xbc', '\xc3\xa9', '\xc3\xa2',
'\xc3\xa4', '\xc3\xa0', '\xc3\xa5', '\xc3\xa7',
'\xc3\xaa', '\xc3\xab', '\xc3\xa8', '\xc3\xaf',
'\xc3\xae', '\xc3\xac', '\xc3\x84', '\xc3\x85',
'\xc3\x89', '\xc3\xa6', '\xc3\x86', '\xc3\xb4',
'\xc3\xb6', '\xc3\xb2', '\xc3\xbb', '\xc3\xb9',
'\xc3\xbf', '\xc3\x96', '\xc3\x9c', '\xc2\xa2',
'\xc2\xa3', '\xc2\xa5', '\xe2\x82\xac', '\xc6\x92',
'\xc3\xa1', '\xc2\xa1', '\xc3\xb3', '\xc3\xba',
'\xc3\xb1', '\xc3\x91', '\xc2\xaa', '\xc2\xba',
'\xc2\xbf', '\xe2\x8c\x90', '\xc2\xac', '\xc2\xbd',
'\xc2\xbc', '\xc2\xa1', '\xc2\xab', '\xc2\xbb',
'\xe2\x96\x91', '\xe2\x96\x92', '\xe2\x96\x93', '\xe2\x94\x82',
'\xe2\x94\xa4', '\xe2\x95\xa1', '\xe2\x95\xa2', '\xe2\x95\x96',
'\xe2\x95\x95', '\xe2\x95\xa3', '\xe2\x95\x91', '\xe2\x95\x97',
'\xe2\x95\x9d', '\xe2\x95\x9c', '\xe2\x95\x9b', '\xe2\x94\x90',
'\xe2\x94\x94', '\xe2\x94\xb4', '\xe2\x94\xac', '\xe2\x94\x9c',
'\xe2\x94\x80', '\xe2\x94\xbc', '\xe2\x95\x9e', '\xe2\x95\x9f',
'\xe2\x95\x9a', '\xe2\x95\x94', '\xe2\x95\xa9', '\xe2\x95\xa6',
'\xe2\x95\xa0', '\xe2\x95\x90', '\xe2\x95\xac', '\xe2\x95\xa7',
'\xe2\x95\xa8', '\xe2\x95\xa4', '\xe2\x95\xa5', '\xe2\x95\x99',
'\xe2\x95\x98', '\xe2\x95\x92', '\xe2\x95\x93', '\xe2\x95\xab',
'\xe2\x95\xaa', '\xe2\x94\x98', '\xe2\x94\x8c', '\xe2\x96\x88',
'\xe2\x96\x84', '\xe2\x96\x8c', '\xe2\x96\x90', '\xe2\x96\x80',
'\xce\xb1', '\xc3\x9f', '\xce\x93', '\xcf\x80',
'\xce\xa3', '\xcf\x83', '\xce\xbc', '\xcf\x84',
'\xce\xa6', '\xce\x98', '\xce\xa9', '\xce\xb4',
'\xe2\x88\x9e', '\xcf\x86', '\xce\xb5', '\xe2\x88\xa9',
'\xe2\x89\xa1', '\xc2\xb1', '\xe2\x89\xa5', '\xe2\x89\xa4',
'\xe2\x8c\xa0', '\xe2\x8c\xa1', '\xc3\xb7', '\xe2\x89\x88',
'\xc2\xb0', '\xe2\x88\x99', '\xc2\xb7', '\xe2\x88\x9a',
'\xe2\x81\xbf', '\xc2\xb2', '\xe2\x96\xa0', '\xce\xbb']
A = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x80,0x00,0x40,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x02,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
0x02,0x02,0x02,0x80,0x00,0x00,0x00,0x40,
0x80,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x22,
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
0x22,0x22,0x22,0x00,0x00,0x00,0x00,0x00,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40]
xed_prefix_table_bit = [
0x00, 0x00, 0x00, 0x00,
0x40, 0x40, 0x40, 0x40,
0xff, 0xff, 0x00, 0x00,
0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0d, 0x00,
]
# please rise for the x86 national flag
xed_has_modrm_2d = [
# 0x00
1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 3,
1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 0, 0, 3, 0, 1, 1, 1, 1, 0, 0, 3, 0,
1, 1, 1, 1, 0, 0, 3, 0, 1, 1, 1, 1, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 1, 3, 3, 3, 3, 0, 1, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3, 0, 3, 3, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
# 0x0f
1, 1, 1, 1, 3, 0, 0, 0, 0, 0, 3, 0, 3, 1, 0, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 3, 0, 3, 3, 3, 3, 3, 3, 3, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 3, 3, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
]
def tabify(s):
res = []
for line in s.split("\n"):
if not line:
continue
directive, number = line.split()
number = int(number)
if directive == ".zero":
res = res + [0] * number
elif directive == ".byte":
res.append(number)
else:
assert False
return res
kHasSib = tabify("""\
.zero 32
.zero 4
.byte 1
.zero 3
.zero 4
.byte 1
.zero 3
.zero 4
.byte 1
.zero 3
.zero 8
.zero 4
.byte 1
.zero 3
.zero 4
.byte 1
.zero 3
.zero 4
.byte 1
.zero 3
.zero 8
""")
assert len(kHasSib) == 96, len(kHasSib)
kHasDisp = tabify("""\
.zero 6
.byte 2
.zero 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.byte 2
.zero 8
.zero 5
.byte 4
.zero 2
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.zero 8
.zero 5
.byte 4
.zero 2
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.zero 8
""")
assert len(kHasDisp) == 96, len(kHasDisp)
xed_disp_bits_2d = tabify("""\
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 2
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 5
.byte 5
.byte 5
.byte 5
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 6
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 1
.byte 1
.byte 1
.byte 1
.byte 4
.byte 4
.byte 4
.byte 4
.byte 3
.byte 3
.byte 2
.byte 1
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 0
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 0
.byte 4
.byte 4
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 4
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 3
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 0
.byte 0
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
.byte 4
""")
assert len(xed_disp_bits_2d) == 512
xed_imm_bits_2d = tabify("""\
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 7
.byte 1
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 7
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 6
.byte 7
.byte 5
.byte 5
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 5
.byte 5
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 8
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 5
.byte 7
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 9
.byte 9
.byte 9
.byte 9
.byte 9
.byte 9
.byte 9
.byte 10
.byte 10
.byte 10
.byte 10
.byte 10
.byte 10
.byte 10
.byte 10
.byte 9
.byte 9
.byte 8
.byte 1
.byte 1
.byte 1
.byte 9
.byte 2
.byte 11
.byte 1
.byte 8
.byte 1
.byte 1
.byte 9
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 9
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 9
.byte 9
.byte 9
.byte 1
.byte 1
.byte 8
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 0
.byte 1
.byte 0
.byte 0
.byte 1
.byte 1
.byte 3
.byte 4
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 0
.byte 1
.byte 0
.byte 1
.byte 1
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 0
.byte 1
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 9
.byte 9
.byte 9
.byte 1
.byte 1
.byte 1
.byte 1
.byte 12
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 1
.byte 0
.byte 0
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 9
.byte 1
.byte 9
.byte 9
.byte 9
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1
.byte 1""")
tables = [('xed_prefix_table_bit', xed_prefix_table_bit),
('xed_has_modrm_2d', xed_has_modrm_2d),
('xed_has_disp_regular', kHasDisp),
('xed_has_sib_table', kHasSib),
('xed_disp_bits_2d', xed_disp_bits_2d),
('xed_imm_bits_2d', xed_imm_bits_2d)]
# int main(int argc, char *argv[]) {
# int l = 0;
# for (unsigned i = 0; i < 256; ++i) {
# int t = 0;
# if (isspace(i)) t |= 0x01;
# if (isalpha(i)) t |= 0x02;
# if (isdigit(i)) t |= 0x04;
# if (isxdigit(i)) t |= 0x08;
# if (isprint(i)) t |= 0x10;
# if (islower(i)) t |= 0x20;
# if (isupper(i)) t |= 0x40;
# if (isblank(i)) t |= 0x80;
# printf("0x%02x,", t);
# if (++l % 8 == 0) printf("\n");
# }
# return 0;
# }
kCtype = [
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x81,0x01,0x01,0x01,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,
0x1c,0x1c,0x10,0x10,0x10,0x10,0x10,0x10,
0x10,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x52,
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,
0x52,0x52,0x52,0x10,0x10,0x10,0x10,0x10,
0x10,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x32,
0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,
0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,
0x32,0x32,0x32,0x10,0x10,0x10,0x10,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,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,
]
tables = [('kCtype', kCtype)]
kWidthTab1 = [
16, 16, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 16, 16, 32, 16, 16, 16, 33, 34, 35, 36, 37, 38, 39,
16, 16, 40, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 41,
42, 16, 16, 43, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 44, 16, 45, 46, 47, 48, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 49, 16, 16, 50,
51, 16, 52, 53, 54, 16, 16, 16, 16, 16, 16, 55, 16, 16, 16,
16, 16, 56, 57, 58, 59, 60, 61, 62, 63, 16, 16, 64, 16, 65,
66, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 67, 68, 16, 16, 16, 69, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 70, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
71, 72, 16, 16, 16, 16, 16, 16, 16, 73, 16, 16, 16, 16, 16,
74, 16, 16, 16, 16, 16, 16, 16, 75, 76, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 255,
255, 255, 255, 191, 182, 0, 0, 0, 0, 0, 0, 0, 63, 0, 255,
23, 0, 0, 0, 0, 0, 248, 255, 255, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 192, 191, 159, 61, 0, 0, 0,
128, 2, 0, 0, 0, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 192, 255, 1, 0, 0, 0, 0, 0, 0, 248, 15,
0, 0, 0, 192, 251, 239, 62, 0, 0, 0, 0, 0, 14, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255,
255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 20, 254, 33, 254, 0,
12, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 16, 30, 32, 0,
0, 12, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 16, 134, 57,
2, 0, 0, 0, 35, 0, 6, 0, 0, 0, 0, 0, 0, 16, 190,
33, 0, 0, 12, 0, 0, 252, 2, 0, 0, 0, 0, 0, 0, 144,
30, 32, 64, 0, 12, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
0, 1, 32, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 192, 193, 61, 96, 0, 12, 0, 0, 0, 2, 0, 0, 0, 0,
0, 0, 144, 64, 48, 0, 0, 12, 0, 0, 0, 3, 0, 0, 0,
0, 0, 0, 24, 30, 32, 0, 0, 12, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 4, 92, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 242, 7, 128, 127, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 242, 27, 0, 63, 0, 0, 0, 0, 0, 0,
0, 0, 0, 3, 0, 0, 160, 2, 0, 0, 0, 0, 0, 0, 254,
127, 223, 224, 255, 254, 255, 255, 255, 31, 64, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 224, 253, 102, 0, 0, 0, 195, 1,
0, 30, 0, 100, 32, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 28, 0, 0,
0, 12, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 176, 63,
64, 254, 15, 32, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 2,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135,
1, 4, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128,
9, 0, 0, 0, 0, 0, 0, 64, 127, 229, 31, 248, 159, 0, 0,
0, 0, 0, 0, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 15,
0, 0, 0, 0, 0, 208, 23, 4, 0, 0, 0, 0, 248, 15, 0,
3, 0, 0, 0, 60, 59, 0, 0, 0, 0, 0, 0, 64, 163, 3,
0, 0, 0, 0, 0, 0, 240, 207, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 255, 253,
33, 16, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255,
255, 255, 255, 255, 251, 0, 248, 0, 0, 0, 124, 0, 0, 0, 0,
0, 0, 223, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 128, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0,
0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 247, 63, 0,
0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
68, 8, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 255, 255,
3, 0, 0, 0, 0, 0, 192, 63, 0, 0, 128, 255, 3, 0, 0,
0, 0, 0, 7, 0, 0, 0, 0, 0, 200, 19, 0, 0, 0, 0,
32, 0, 0, 0, 0, 0, 0, 0, 0, 126, 102, 0, 8, 16, 0,
0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 157, 193, 2, 0,
0, 0, 0, 48, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 64, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255,
255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 192, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 110, 240, 0, 0, 0, 0, 0, 135, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 96, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 255,
127, 0, 0, 0, 0, 0, 0, 128, 3, 0, 0, 0, 0, 0, 120,
38, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 128, 239,
31, 0, 0, 0, 0, 0, 0, 0, 8, 0, 3, 0, 0, 0, 0,
0, 192, 127, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 128, 211, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 128, 248, 7, 0, 0, 3, 0,
0, 0, 0, 0, 0, 16, 1, 0, 0, 0, 192, 31, 31, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 92, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 133, 13, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 176, 1, 0, 0, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 167, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 191, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 224, 188, 15, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 126, 6, 0, 0, 0, 0, 248,
121, 128, 0, 126, 14, 0, 0, 0, 0, 0, 252, 127, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 127, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 255,
255, 252, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 126, 180, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 128, 7, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 15, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 128, 3, 248, 255, 231, 15, 0, 0, 0, 60, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
255, 255, 127, 248, 255, 255, 255, 255, 255, 31, 32, 0, 16, 0, 0,
248, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 255,
255, 249, 219, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0,
]
kWidthTab2 = [
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 19, 16, 20, 21, 22, 16, 16, 16, 23, 16,
16, 24, 25, 26, 27, 28, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 29, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 30,
16, 16, 16, 16, 31, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 32, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 16, 16, 16, 33,
34, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 35, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 36, 17, 17, 37, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 38, 39,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 40, 41, 42, 43, 44, 45, 46, 16, 16, 47, 16, 16, 16, 16,
16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 6, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 30, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 48,
0, 0, 0, 0, 0, 0, 255, 15, 0, 0, 0, 0, 128, 0, 0,
8, 0, 2, 12, 0, 96, 48, 64, 16, 0, 0, 4, 44, 36, 32,
12, 0, 0, 0, 1, 0, 0, 0, 80, 184, 0, 0, 0, 0, 0,
0, 0, 224, 0, 0, 0, 1, 128, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255, 255, 251, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 63, 0, 0, 0, 255, 15, 255, 255, 255, 255, 255, 255, 255, 127,
254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 224, 255, 255, 255, 255, 127,
254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255,
255, 255, 7, 255, 255, 255, 255, 15, 0, 255, 255, 255, 255, 255, 127,
255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 31, 255, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 15, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 255, 255, 255,
255, 247, 255, 127, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 127, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 0, 0, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 7,
0, 255, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 254, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 255, 255, 255, 255,
255, 15, 255, 1, 3, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255,
1, 224, 191, 255, 255, 255, 255, 255, 255, 255, 255, 223, 255, 255, 15,
0, 255, 255, 255, 255, 255, 135, 15, 0, 255, 255, 17, 255, 255, 255,
255, 255, 255, 255, 255, 127, 253, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 159,
255, 255, 255, 255, 255, 255, 255, 63, 0, 120, 255, 255, 255, 0, 0,
4, 0, 0, 96, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0,
0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 63, 16, 7, 0,
0, 24, 240, 1, 0, 0, 255, 255, 255, 255, 255, 127, 255, 31, 255,
255, 255, 15, 0, 0, 255, 255, 255, 0, 0, 0, 0, 0, 1, 0,
255, 255, 127, 0, 0, 0,
]
kZlibDistCode = [
0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20,
20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23,
23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29]
# kZlibLengthCode = [
# 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12,
# 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
# 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19,
# 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
# 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
# 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23,
# 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24,
# 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
# 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
# 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
# 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
# 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27,
# 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27,
# 27, 27, 27, 27, 27, 27, 27, 27, 28]
# duk_hex_dectab = [
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x00-0x0f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x10-0x1f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x20-0x2f */
# 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,0xff,0xff,0xff,0xff,0xff,0xff, # 0x30-0x3f */
# 0xff, 10, 11, 12, 13, 14, 15,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x40-0x4f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x50-0x5f */
# 0xff, 10, 11, 12, 13, 14, 15,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x60-0x6f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x70-0x7f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x80-0x8f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0x90-0x9f */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xa0-0xaf */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xb0-0xbf */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xc0-0xcf */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xd0-0xdf */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, # 0xe0-0xef */
# 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff # 0xf0-0xff */
# ]
# tables = [('duk__base64_dectab_fast', duk__base64_dectab_fast)]
def kXtermXlat1(c):
if c >= 3:
return (c - 3) / 10
return 0
def kXtermXlat2(c):
if c <= 52: return 0
if c <= 115: return 1
if c <= 155: return 2
if c <= 195: return 3
if c <= 235: return 4
return 5
tables = [('kXtermXlat', ([kXtermXlat1(i) for i in range(256)] +
[kXtermXlat2(i) for i in range(256)]))]
kBoop = [int(s,16) for s in """
00 00 00 00 00 00 00 00 00 00 01 01 01 01 01 01
01 00 00 00 00 00 00 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 00 00 00 00 00 00 01 02 02 02 02 02 02 02 02
02 02 01 01 01 01 01 01 01 02 02 02 02 02 02 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 02 02 02 02 02 02 01
03 03 03 03 03 03 03 03 03 03 01 01 01 01 01 01
01 03 03 03 03 03 03 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 03 03 03 03 03 03 01 04 04 04 04 04 04 04 04
04 04 01 01 01 01 01 01 01 04 04 04 04 04 04 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 04 04 04 04 04 04 01
05 05 05 05 05 05 05 05 05 05 01 01 01 01 01 01
01 05 05 05 05 05 05 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 05 05 05 05 05 05 01 06 06 06 06 06 06 06 06
06 06 01 01 01 01 01 01 01 06 06 06 06 06 06 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 06 06 06 06 06 06 01
07 01 01 07 08 07 07 07 07 07 07 01 07 07 01 07
07 07 07 07 07 07 07 07 07 07 01 01 01 01 01 01
07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
07 07 07 07 07 07 07 07 07 07 07 01 07 01 07 01
07 07 07 07 07 07 07 07 07 07 07 07 07 07 07 07
07 07 07 07 07 07 07 07 07 07 01 01 01 07 01 09
09 09 09 09 09 09 09 09 09 01 01 01 01 01 01 01
09 09 09 09 09 09 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
09 09 09 09 09 09 01 0a 0a 0a 0a 0a 0a 0a 0a 0a
0a 01 01 01 01 01 01 01 0a 0a 0a 0a 0a 0a 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 0a 0a 0a 0a 0a 0a 01 0b
01 01 0b 0c 0b 0b 0b 0b 0b 0b 01 0b 0b 01 0b 0b
0b 0b 0b 0b 0b 0b 0b 0b 0b 01 01 01 01 01 01 0b
0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b
0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 01 0b 01 0b 01 0b
0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b
0b 0b 0b 0b 0b 0b 0b 0b 0b 01 01 01 0b 01 0d 0d
0d 0d 0d 0d 0d 0d 0d 0d 01 01 01 01 01 01 01 0d
0d 0d 0d 0d 0d 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 0d
0d 0d 0d 0d 0d 01 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e
01 01 01 01 01 01 01 0e 0e 0e 0e 0e 0e 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 0e 0e 0e 0e 0e 0e 01 0f 01
01 0f 10 01 0f 0f 0f 0f 0f 01 0f 0f 0f 0f 0f 0f
0f 0f 0f 0f 0f 0f 0f 0f 01 01 01 01 0f 01 0f 0f
0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f
0f 0f 0f 0f 0f 0f 0f 0f 0f 01 0f 01 0f 01 0f 0f
0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f
0f 0f 0f 0f 0f 0f 0f 0f 01 01 01 0f 01 11 11 11
11 11 11 11 11 11 11 01 01 01 01 01 01 01 11 11
11 11 11 11 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 11 11
11 11 11 11 01 12 12 12 12 12 12 12 12 12 12 01
01 01 01 01 01 01 12 12 12 12 12 12 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 12 12 12 12 12 12 01 13 01 01
13 14 01 13 13 13 13 13 01 13 13 13 13 13 13 13
13 13 13 13 13 13 13 01 01 01 01 13 01 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 13 01 13 01 13 01 13 13 13
13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
13 13 13 13 13 13 13 01 01 01 13 01 15 15 15 15
15 15 15 15 15 15 01 01 01 01 01 01 01 15 15 15
15 15 15 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 15 15 15
15 15 15 01 16 16 16 16 16 16 16 16 16 16 01 01
01 01 01 01 01 16 16 16 16 16 16 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 16 16 16 16 16 16 01 17 17 17 17
17 17 17 17 17 17 01 01 01 01 01 01 01 17 17 17
17 17 17 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 17 17 17
17 17 17 01 18 18 18 18 18 18 18 18 18 18 01 01
01 01 01 01 01 18 18 18 18 18 18 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 18 18 18 18 18 18 01 19 01 01 19
1a 1b 19 19 19 19 19 1b 19 19 0f 19 19 19 19 19
19 19 19 19 19 19 01 01 1b 01 19 1c 19 19 19 19
19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 0f 01 0f 01 19 01 19 19 19 19
19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
19 19 19 19 19 19 01 01 01 19 01 1d 1d 1d 1d 1d
1d 1d 1d 1d 1d 01 01 01 01 01 01 01 1d 1d 1d 1d
1d 1d 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 1d 1d 1d 1d
1d 1d 01 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 01 01 01
01 01 01 01 1e 1e 1e 1e 1e 1e 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 1e 1e 1e 1e 1e 1e 01 1b 01 01 1b 1f
1b 1b 1b 1b 1b 1b 1b 1b 1b 01 1b 1b 1b 1b 1b 1b
1b 1b 1b 1b 1b 01 01 1b 01 1b 1c 1b 1b 1b 1b 1b
1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b
1b 1b 1b 1b 1b 01 01 01 01 1b 01 1b 1b 1b 1b 1b
1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b
1b 1b 1b 1b 1b 01 01 01 1b 01 20 20 20 20 20 20
20 20 20 20 01 01 01 01 01 01 01 20 20 20 20 20
20 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 20 20 20 20 20
20 01 1b 1b 1b 1b 1b 1b 1b 1b 1b 1b 01 01 01 01
01 01 01 1b 1b 1b 1b 1b 1b 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 1b 1b 1b 1b 1b 1b 01 21 01 21 21 01 21
21 21 21 21 21 21 21 21 21 01 01 01 01 01 01 01
21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
21 21 21 21 21 21 21 21 21 21 22 01 01 01 01 01
21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
21 21 21 21 21 21 21 21 21 21 01 23 23 23 23 23
23 23 23 23 23 01 24 01 24 24 24 24 24 24 24 24
24 24 24 01 01 01 01 01 01 24 24 24 24 24 24 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 24 24 24 24 24 24 01
25 01 25 25 25 25 25 25 25 25 25 25 25 01 01 01
01 01 01 25 25 25 25 25 25 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 26
01 01 01 25 25 25 25 25 25 01 27 01 01 27 28 1b
27 27 27 27 27 1b 27 27 13 27 27 27 27 27 27 27
27 27 27 27 01 01 1b 01 27 1c 27 27 27 27 27 27
27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
27 27 27 27 13 01 13 01 27 01 27 27 27 27 27 27
27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
27 27 27 27 01 01 01 27 01 29 29 29 29 29 29 29
29 29 29 01 01 01 01 01 01 01 29 29 29 29 29 29
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 29 29 29 29 29 29
01 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 01 01 01 01 01
01 01 2a 2a 2a 2a 2a 2a 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 2a 2a 2a 2a 2a 2a 01 2b 01 01 2b 2c 2b 2b
2b 2b 2b 2d 2b 2d 2d 2e 2d 2d 2d 2d 2d 2d 2d 2d
2d 2d 2b 2f 01 2b 01 2b 2f 2d 2d 2d 2d 2d 2d 2d
2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d
2d 2d 2d 30 01 01 01 2b 01 2d 2d 2d 2d 2d 2d 2d
2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d
2d 2d 2d 01 01 01 2b 01 31 31 31 31 31 31 31 31
31 31 01 01 01 01 01 01 01 31 31 31 31 31 31 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 31 31 31 31 31 31 01
32 32 32 32 32 32 32 32 32 32 01 01 01 01 01 01
01 32 32 32 32 32 32 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 32 32 32 32 32 32 01 33 33 33 33 33 33 33 33
33 33 01 01 01 01 01 01 01 33 33 33 33 33 33 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 33 33 33 33 33 33 01
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01 01 01
01 2f 2f 2f 2f 2f 2f 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 2f 2f 2f 2f 2f 2f 01 34 34 34 34 34 34 34 34
34 34 01 01 01 01 01 01 01 34 34 34 34 34 34 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 34 34 34 34 34 34 01
35 35 35 35 35 35 35 35 35 35 01 01 01 01 01 01
01 35 35 35 35 35 35 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 35 35 35 35 35 35 01 36 36 36 36 36 36 36 36
36 36 01 01 01 01 01 01 01 36 36 36 36 36 36 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 36 36 36 36 36 36 01
37 37 37 37 37 37 37 37 37 37 01 01 01 01 01 01
01 37 37 37 37 37 37 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 37 37 37 37 37 37 01 38 38 38 38 38 38 38 38
38 38 01 01 01 01 01 01 01 38 38 38 38 38 38 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 38 38 38 38 38 38 01
39 39 39 39 39 39 39 39 39 39 01 01 01 01 01 01
01 39 39 39 39 39 39 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 39 39 39 39 39 39 01 3a 01 01 3a 3b 3a 3a 3a
3a 3a 3a 01 3a 3a 01 3a 3a 3a 3a 3a 3a 3a 3a 3a
3a 3a 01 01 01 01 01 01 3a 3a 3a 3a 3a 3a 3a 3a
3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a
3a 3a 3a 01 3a 01 3a 01 3a 3a 3a 3a 3a 3a 3a 3a
3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a 3a
3a 3a 01 01 01 3a 01 3c 3c 3c 3c 3c 3c 3c 3c 3c
3c 01 01 01 01 01 01 01 3c 3c 3c 3c 3c 3c 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 3c 3c 3c 3c 3c 3c 01 3d
3d 3d 3d 3d 3d 3d 3d 3d 3d 01 01 01 01 01 01 01
3d 3d 3d 3d 3d 3d 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
3d 3d 3d 3d 3d 3d 01 3e 01 01 3e 3f 3e 3e 3e 3e
3e 3e 01 3e 3e 01 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e
3e 01 01 01 01 01 01 3e 3e 3e 3e 3e 3e 3e 3e 3e
3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e
3e 3e 01 3e 01 3e 01 3e 3e 3e 3e 3e 3e 3e 3e 3e
3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e 3e
3e 01 01 01 3e 01 40 01 40 40 40 40 40 40 40 40
40 40 40 01 01 01 01 01 01 40 40 40 40 40 40 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 40 40 40 40 40 40 01
41 01 41 41 41 41 41 41 41 41 41 41 41 01 01 01
01 01 01 41 41 41 41 41 41 01 01 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 42
01 01 01 41 41 41 41 41 41 01 43 43 43 43 43 43
43 43 43 43 01 44 01 45 44 46 44 44 44 44 44 44
44 44 44 2e 44 44 44 44 44 44 44 44 44 44 01 44
01 44 01 01 44 47 47 47 47 47 47 47 47 47 47 47
47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 01
01 01 01 44 01 47 47 47 47 47 47 47 47 47 47 47
47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 01
01 01 44 01 04 01 48 04 49 04 04 04 04 04 04 04
04 04 4a 04 04 04 04 04 04 04 04 04 04 01 04 01
04 01 4b 04 04 04 04 04 04 04 04 04 04 04 04 04
04 04 04 04 04 04 04 04 04 04 04 04 04 04 01 01
01 01 04 01 04 04 04 04 04 04 04 04 04 04 04 04
04 04 04 04 04 04 04 04 04 04 04 04 04 04 01 01
01 04 01 4c 01 01 4c 4d 4c 4c 4c 4c 4c 4c 4c 4c
4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 01 4c
01 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c
4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 01 01 01
01 4c 01 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c
4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 4c 01 01 01
4c 01 02 01 01 02 4e 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 02 02 01 02 01
02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 01
02 01 02 02 02 02 02 02 02 02 02 02 02 02 02 02
02 02 02 02 02 02 02 02 02 02 02 02 01 01 01 02
01 06 01 48 06 4f 06 06 06 06 06 06 06 06 06 4a
06 06 06 06 06 06 06 06 06 06 06 50 01 06 01 4b
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 01 01 01 01 06
01 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 01 01 01 06 01
0a 01 51 0a 52 0a 0a 0a 0a 0a 0a 01 0a 0a 53 0a
0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 54 01 55 01 56 01
0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a
0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 01 0a 01 0a 01
0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a
0a 0a 0a 0a 0a 0a 0a 0a 0a 0a 01 01 01 0a 01 0e
01 57 0e 58 0e 0e 0e 0e 0e 0e 01 0e 0e 59 0e 0e
0e 0e 0e 0e 0e 0e 0e 0e 0e 5a 01 01 01 5b 01 0e
0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e
0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 01 0e 01 0e 01 0e
0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e 0e
0e 0e 0e 0e 0e 0e 0e 0e 0e 01 01 01 0e 01 12 01
5c 12 5d 5e 12 12 12 12 12 01 12 12 12 12 12 12
12 12 12 12 12 12 12 12 01 01 5f 01 12 01 12 12
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
12 12 12 12 12 12 12 12 12 01 12 01 12 01 12 12
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
12 12 12 12 12 12 12 12 01 01 01 12 01 16 01 60
16 61 62 16 16 16 16 16 01 16 16 16 16 16 16 16
16 16 16 16 16 16 16 01 01 01 01 16 01 16 16 16
16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
16 16 16 16 16 16 16 16 01 16 01 16 01 16 16 16
16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
16 16 16 16 16 16 16 01 01 01 16 01 06 01 48 06
4f 06 06 06 06 06 06 06 06 06 63 06 06 06 06 06
06 06 06 06 06 06 50 01 06 01 4b 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 06 06 06 01 01 01 01 06 01 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 06 06 06 01 01 01 06 01 64 01 48 64 65
64 64 64 64 64 66 64 66 66 4a 66 66 66 66 66 66
66 66 66 66 64 50 01 64 01 67 06 66 66 66 66 66
66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
66 66 66 66 66 22 01 01 01 64 01 66 66 66 66 66
66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
66 66 66 66 66 01 01 01 64 01 18 01 48 18 68 18
18 18 18 18 18 18 18 18 4a 18 18 18 18 18 18 18
18 18 18 18 50 01 18 01 69 6a 18 18 18 18 18 18
18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
18 18 18 18 01 01 01 01 18 01 18 18 18 18 18 18
18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
18 18 18 18 01 01 01 18 01 1e 01 5c 1e 6b 6c 1e
1e 1e 1e 1e 1b 1e 1e 12 1e 1e 1e 1e 1e 1e 1e 1e
1e 1e 1e 01 01 6d 01 1e 1c 1e 1e 1e 1e 1e 1e 1e
1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e
1e 1e 1e 12 01 12 01 1e 01 1e 1e 1e 1e 1e 1e 1e
1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e
1e 1e 1e 01 01 01 1e 01 6e 01 01 01 01 01 01 01
6f 01 6f 6f 70 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 71
01 01 01 01 72 01 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f
6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f
01 01 01 01 01 01 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f
6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f 6f
01 73 01 01 01 01 01 01 01 01 01 01 01 74 75 75
75 75 75 75 75 75 75 75 01 01 01 01 01 76 01 45
01 01 01 01 01 01 01 01 01 01 01 77 01 01 01 01
01 01 01 01 01 01 78 01 01 01 01 79 01 2a 01 60
2a 7a 7b 2a 2a 2a 2a 2a 1b 2a 2a 16 2a 2a 2a 2a
2a 2a 2a 2a 2a 2a 2a 01 01 1b 01 2a 1c 2a 2a 2a
2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
2a 2a 2a 2a 2a 2a 2a 16 01 16 01 2a 01 2a 2a 2a
2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
2a 2a 2a 2a 2a 2a 2a 01 01 01 2a 01 06 01 48 06
4f 06 06 06 06 06 7c 06 7c 7c 4a 7c 7c 7c 7c 7c
7c 7c 7c 7c 7c 06 50 01 06 01 4b 06 7c 7c 7c 7c
7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c
7c 7c 7c 7c 7c 7c 22 01 01 01 06 01 7c 7c 7c 7c
7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c 7c
7c 7c 7c 7c 7c 7c 01 01 01 06 01 06 01 7d 06 4f
06 06 06 06 06 7e 06 7e 7e 7f 7e 7e 7e 7e 7e 7e
7e 7e 7e 7e 80 50 01 06 01 81 06 7e 7e 7e 7e 7e
7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e
7e 7e 7e 7e 7e 01 01 01 01 06 01 7e 7e 7e 7e 7e
7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e 7e
7e 7e 7e 7e 7e 01 01 01 06 01 06 01 48 06 4f 06
06 06 06 06 06 06 06 06 4a 82 82 82 82 82 82 82
82 82 82 06 50 01 06 01 4b 06 06 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 06 01 01 01 01 06 01 06 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 06 01 01 01 06 01 06 01 83 06 4f 06 06
06 06 06 06 06 06 06 84 85 85 85 85 85 85 85 85
85 85 06 50 01 06 01 86 06 06 06 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 01 01 01 01 06 01 06 06 06 06 06 06 06
06 06 06 06 06 06 06 06 06 06 06 06 06 06 06 06
06 06 06 01 01 01 06 01 18 01 7d 18 68 18 18 18
18 18 87 18 87 87 7f 87 87 87 87 87 87 87 87 87
87 88 50 01 18 01 89 6a 87 87 87 87 87 87 87 87
87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87
87 87 01 01 01 01 18 01 87 87 87 87 87 87 87 87
87 87 87 87 87 87 87 87 87 87 87 87 87 87 87 87
87 87 01 01 01 18 01 18 01 48 18 68 18 18 18 18
18 18 18 18 18 4a 8a 8a 8a 8a 8a 8a 8a 8a 8a 8a
18 50 01 18 01 69 6a 18 18 18 18 18 18 18 18 18
18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
18 01 01 01 01 18 01 18 18 18 18 18 18 18 18 18
18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
18 01 01 01 18 01 18 01 83 18 68 18 18 18 18 18
18 18 18 18 84 8b 8b 8b 8b 8b 8b 8b 8b 8b 8b 18
50 01 18 01 8c 6a 18 18 18 18 18 18 18 18 18 18
18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
01 01 01 01 18 01 18 18 18 18 18 18 18 18 18 18
18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
01 01 01 18 01 04 01 48 04 49 04 04 04 04 04 8d
04 8d 8d 4a 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8e 04
01 04 01 4b 04 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d
8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 01
01 01 01 04 01 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d
8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 8d 01
01 01 04 01 32 01 45 32 8f 32 32 32 32 32 32 32
32 32 90 32 32 32 32 32 32 32 32 32 32 32 2f 01
32 01 32 91 32 32 32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01
01 01 32 01 32 32 32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 01 01
01 32 01 45 01 2f 01 45 2f 92 2f 2f 2f 2f 2f 2f
2f 2f 2f 90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01
01 01 01 2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01
01 01 2f 01 2f 01 45 2f 92 2f 2f 2f 2f 2f 93 2f
93 93 90 93 93 93 93 93 93 93 93 93 93 2f 2f 01
2f 01 2f 2f 93 93 93 93 93 93 93 93 93 93 93 93
93 93 93 93 93 93 93 93 93 93 93 93 93 93 30 01
01 01 2f 01 93 93 93 93 93 93 93 93 93 93 93 93
93 93 93 93 93 93 93 93 93 93 93 93 93 93 01 01
01 2f 01 2f 01 6e 2f 92 2f 2f 2f 2f 2f 94 2f 94
94 90 94 94 94 94 94 94 94 94 94 94 95 96 01 2f
01 2f 2f 94 94 94 94 94 94 94 94 94 94 94 94 94
94 94 94 94 94 94 94 94 94 94 94 94 94 01 01 01
01 2f 01 94 94 94 94 94 94 94 94 94 94 94 94 94
94 94 94 94 94 94 94 94 94 94 94 94 94 01 01 01
2f 01 2f 01 45 2f 92 2f 2f 2f 2f 2f 2f 2f 2f 2f
90 97 97 97 97 97 97 97 97 97 97 2f 2f 01 2f 01
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01
2f 01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 2f
01 2f 01 73 2f 92 2f 2f 2f 2f 2f 2f 2f 2f 2f 90
98 98 98 98 98 98 98 98 98 98 2f 99 01 2f 01 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 01 2f
01 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f
2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 01 01 01 2f 01
9a 01 45 9a 9b 9a 9a 9a 9a 9a 9a 2f 9a 9a 90 9a
9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 2f 01 2f 01 2f 2f
9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a
9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 3a 01 3a 01 9a 01
9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 9a
9a 9a 9a 9a 9a 9a 9a 9a 9a 9a 01 01 01 9a 01 35
01 51 35 9c 35 35 35 35 35 35 2f 35 35 90 35 35
35 35 35 35 35 35 35 35 35 9d 01 9e 01 2f 2f 35
35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
35 35 35 35 35 35 35 35 35 3d 01 3d 01 35 01 35
35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
35 35 35 35 35 35 35 35 35 01 01 01 35 01 9f 01
45 9f a0 9f 9f 9f 9f 9f 9f 2f 9f 9f 90 9f 9f 9f
9f 9f 9f 9f 9f 9f 9f 9f 2f 01 2f 01 2f 2f 9f 9f
9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f
9f 9f 9f 9f 9f 9f 9f 9f 3e 01 3e 01 9f 01 9f 9f
9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f 9f
9f 9f 9f 9f 9f 9f 9f 9f 01 01 01 9f 01 37 01 57
37 a1 37 37 37 37 37 37 2f 37 37 90 37 37 37 37
37 37 37 37 37 37 37 a2 01 2f 01 2f 2f 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 39 01 39 01 37 01 37 37 37
37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 01 01 01 37 01 39 01 57 39
a3 39 39 39 39 39 39 01 39 39 01 39 39 39 39 39
39 39 39 39 39 39 a4 01 01 01 01 01 39 39 39 39
39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
39 39 39 39 39 39 39 01 39 01 39 01 39 39 39 39
39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
39 39 39 39 39 39 01 01 01 39 01 3d 01 51 3d a5
3d 3d 3d 3d 3d 3d 01 3d 3d 01 3d 3d 3d 3d 3d 3d
3d 3d 3d 3d 3d a6 01 a7 01 01 01 3d 3d 3d 3d 3d
3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d
3d 3d 3d 3d 3d 3d 01 3d 01 3d 01 3d 3d 3d 3d 3d
3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d
3d 3d 3d 3d 3d 01 01 01 3d 01 45 01 01 01 01 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 a8 a9 01 73 01 01 01 01 01 01 01 01 01 01 01
01 aa aa aa aa aa aa aa aa aa aa 01 ab 01 32 01
6e 32 8f 32 32 32 32 32 ac 32 ac ac 90 ac ac ac
ac ac ac ac ac ac ac ad 96 01 32 01 32 91 ac ac
ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
ac ac ac ac ac ac ac ac 01 01 01 01 32 01 ac ac
ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac ac
ac ac ac ac ac ac ac ac 01 01 01 32 01 32 01 45
32 8f 32 32 32 32 32 32 32 32 32 90 ae ae ae ae
ae ae ae ae ae ae 32 2f 01 32 01 32 91 32 32 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 01 01 01 01 32 01 32 32 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 32 01 01 01 32 01 32 01 73 32
8f 32 32 32 32 32 32 32 32 32 90 af af af af af
af af af af af 32 99 01 32 01 32 91 32 32 32 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 01 01 01 01 32 01 32 32 32 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
32 32 32 32 32 32 01 01 01 32 01 00
""".split()]
tables = [('kBoop', kBoop)]
lines = []
def put(l):
lines.append(l)
oc = 0
toto = 0
for name, table in tables:
toto += len(table)
it = iter(table)
c2 = next(it)
i2 = 0
put(".L%s.rodata:" % (name))
while c2 is not None:
c1, i1, run = c2, i2, 0
while c1 == c2:
run += 1
i2 += 1
c2 = next(it, None)
s = ' '
if 0 <= i1 < 256 and 0 <= i2 <= 256:
s = "%s " % C[i1] if i2 - i1 == 1 else "%s-%s" % (C[i1], C[i2-1])
put("\t.byte\t%d,0x%02x\t\t# %02x-%02x %s" % (run, c1, i1, i2-1, s))
oc += 2
put("\t.endobj\t.L%s.rodata" % (name))
put("\t.byte\t0,0\t\t# terminator")
oc += 2
align = 8
pad = align - oc % align
if pad != align:
put("\t.byte\t%s\t\t# padding" % (",".join(["0"] * pad)))
oc += pad
print "\t.initbss 300,_init_%s" % (name)
for name, table in tables:
print "%s:" % (name)
print "\t.zero\t%d" % (len(table))
print "\t.endobj\t%s,globl,hidden" % (name)
print "\t.previous"
print
print "\t.initro 300,_init_%s\t# %d bytes (%d%%)" % (
name, oc, int(round((oc / float(toto)) * 100)))
print "\n".join(lines)
print "\t.previous"
print
print "\t.init.start 300,_init_%s" % tables[0][0]
print "\tcall\trldecode"
if pad != align:
while pad:
for op, add in (("lodsq", 8),
("lodsl", 4),
("lodsw", 2),
("lodsb", 1)):
if pad >= add:
print "\t%s" % (op)
pad -= add
print "\t.init.end 300,_init_%s" % tables[0][0]