Skip to content

Commit 4bfc33b

Browse files
committed
Implement atan2() with integer operations and a lookup table
1 parent a1bee0a commit 4bfc33b

File tree

2 files changed

+153
-12
lines changed

2 files changed

+153
-12
lines changed

lpico8lib.c

+17-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// ZEPTO-8 — Fantasy console emulator
33
//
4-
// Copyright © 2016–2023 Sam Hocevar <[email protected]>
4+
// Copyright © 2016–2024 Sam Hocevar <[email protected]>
55
//
66
// This program is free software. It comes without any warranty, to
77
// the extent permitted by applicable law. You can redistribute it
@@ -10,11 +10,8 @@
1010
// See http://www.wtfpl.net/ for more details.
1111
//
1212

13-
14-
#include <cmath>
1513
#include <cctype>
1614
#include <cstring>
17-
#include <algorithm>
1815

1916
#define lpico8lib_c
2017
#define LUA_LIB
@@ -25,9 +22,7 @@
2522
#include "llimits.h"
2623
#include "lobject.h"
2724

28-
#include "sintable.h"
29-
30-
#define TAU 6.2831853071795864769252867665590057683936
25+
#include "trigtables.h"
3126

3227
static int pico8_max(lua_State *l) {
3328
lua_pushnumber(l, lua_Number::max(lua_tonumber(l, 1), lua_tonumber(l, 2)));
@@ -83,10 +78,21 @@ static int pico8_sin(lua_State *l) {
8378
static int pico8_atan2(lua_State *l) {
8479
lua_Number x = lua_tonumber(l, 1);
8580
lua_Number y = lua_tonumber(l, 2);
86-
// This could simply be atan2(-y,x) but since PICO-8 decided that
87-
// atan2(0,0) = 0.75 we need to do the same in our version.
88-
double a = 0.75 + std::atan2((double)x, (double)y) / TAU;
89-
lua_pushnumber(l, cast_num(a >= 1 ? a - 1 : a));
81+
int32_t bits = 0x4000;
82+
if (x) {
83+
// Use std::abs() instead of fix32::abs() to emulate PICO-8’s behaviour
84+
// with e.g. atan2(0x8000, 0x8000.0001)
85+
auto q = (std::abs(int64_t(y.bits())) << 16) / std::abs(int64_t(x.bits()));
86+
if (q > 0x10000)
87+
bits -= atantable[(int64_t(1) << 32) / q >> 5];
88+
else
89+
bits = atantable[q >> 5];
90+
}
91+
if (x.bits() < 0) bits = 0x8000 - bits;
92+
if (y.bits() > 0) bits = -bits & 0xffff;
93+
// Emulate a bug in PICO-8 with e.g. atan2(1, 0x8000)
94+
if (x && y.bits() == int32_t(0x80000000)) bits = -bits & 0xffff;
95+
lua_pushnumber(l, lua_Number::frombits(bits));
9096
return 1;
9197
}
9298

sintable.h trigtables.h

+136-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// ZEPTO-8 — Fantasy console emulator
33
//
4-
// Copyright © 2016–2023 Sam Hocevar <[email protected]>
4+
// Copyright © 2016–2024 Sam Hocevar <[email protected]>
55
//
66
// This program is free software. It comes without any warranty, to
77
// the extent permitted by applicable law. You can redistribute it
@@ -274,3 +274,138 @@ static uint16_t sintable[] =
274274
0x01fb, 0x01eb, 0x01dc, 0x01cc, 0x01bc, 0x01ac, 0x019d, 0x018d, 0x017d, 0x016d, 0x015e, 0x014e, 0x013e, 0x012e, 0x011e, 0x010f,
275275
0x00ff, 0x00ef, 0x00df, 0x00cf, 0x00bf, 0x00af, 0x00a0, 0x0090, 0x0080, 0x0070, 0x0060, 0x0050, 0x0040, 0x0030, 0x0020, 0x0010,
276276
};
277+
278+
// This table was generated using the following PICO-8 code:
279+
// for i=0,1,0x.002 do printh('0x'..sub(tostr(atan2(1,-i),1),8,13)) end
280+
static uint16_t atantable[] =
281+
{
282+
0x0000, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001f, 0x0024, 0x0029, 0x002e, 0x0033, 0x0038, 0x003d, 0x0042, 0x0047, 0x004c,
283+
0x0051, 0x0057, 0x005c, 0x0061, 0x0066, 0x006b, 0x0070, 0x0075, 0x007a, 0x007f, 0x0084, 0x008a, 0x008f, 0x0094, 0x0099, 0x009e,
284+
0x00a3, 0x00a8, 0x00ad, 0x00b2, 0x00b7, 0x00bc, 0x00c2, 0x00c7, 0x00cc, 0x00d1, 0x00d6, 0x00db, 0x00e0, 0x00e5, 0x00ea, 0x00ef,
285+
0x00f4, 0x00fa, 0x00ff, 0x0104, 0x0109, 0x010e, 0x0113, 0x0118, 0x011d, 0x0122, 0x0127, 0x012c, 0x0131, 0x0137, 0x013c, 0x0141,
286+
0x0146, 0x014b, 0x0150, 0x0155, 0x015a, 0x015f, 0x0164, 0x0169, 0x016f, 0x0174, 0x0179, 0x017e, 0x0183, 0x0188, 0x018d, 0x0192,
287+
0x0197, 0x019c, 0x01a1, 0x01a6, 0x01ac, 0x01b1, 0x01b6, 0x01bb, 0x01c0, 0x01c5, 0x01ca, 0x01cf, 0x01d4, 0x01d9, 0x01de, 0x01e3,
288+
0x01e9, 0x01ee, 0x01f3, 0x01f8, 0x01fd, 0x0202, 0x0207, 0x020c, 0x0211, 0x0216, 0x021b, 0x0220, 0x0226, 0x022b, 0x0230, 0x0235,
289+
0x023a, 0x023f, 0x0244, 0x0249, 0x024e, 0x0253, 0x0258, 0x025d, 0x0262, 0x0268, 0x026d, 0x0272, 0x0277, 0x027c, 0x0281, 0x0286,
290+
0x028b, 0x0290, 0x0295, 0x029a, 0x029f, 0x02a4, 0x02a9, 0x02af, 0x02b4, 0x02b9, 0x02be, 0x02c3, 0x02c8, 0x02cd, 0x02d2, 0x02d7,
291+
0x02dc, 0x02e1, 0x02e6, 0x02eb, 0x02f0, 0x02f6, 0x02fb, 0x0300, 0x0305, 0x030a, 0x030f, 0x0314, 0x0319, 0x031e, 0x0323, 0x0328,
292+
0x032d, 0x0332, 0x0337, 0x033c, 0x0341, 0x0347, 0x034c, 0x0351, 0x0356, 0x035b, 0x0360, 0x0365, 0x036a, 0x036f, 0x0374, 0x0379,
293+
0x037e, 0x0383, 0x0388, 0x038d, 0x0392, 0x0397, 0x039c, 0x03a2, 0x03a7, 0x03ac, 0x03b1, 0x03b6, 0x03bb, 0x03c0, 0x03c5, 0x03ca,
294+
0x03cf, 0x03d4, 0x03d9, 0x03de, 0x03e3, 0x03e8, 0x03ed, 0x03f2, 0x03f7, 0x03fc, 0x0401, 0x0407, 0x040c, 0x0411, 0x0416, 0x041b,
295+
0x0420, 0x0425, 0x042a, 0x042f, 0x0434, 0x0439, 0x043e, 0x0443, 0x0448, 0x044d, 0x0452, 0x0457, 0x045c, 0x0461, 0x0466, 0x046b,
296+
0x0470, 0x0475, 0x047a, 0x047f, 0x0484, 0x0489, 0x048e, 0x0494, 0x0499, 0x049e, 0x04a3, 0x04a8, 0x04ad, 0x04b2, 0x04b7, 0x04bc,
297+
0x04c1, 0x04c6, 0x04cb, 0x04d0, 0x04d5, 0x04da, 0x04df, 0x04e4, 0x04e9, 0x04ee, 0x04f3, 0x04f8, 0x04fd, 0x0502, 0x0507, 0x050c,
298+
0x0511, 0x0516, 0x051b, 0x0520, 0x0525, 0x052a, 0x052f, 0x0534, 0x0539, 0x053e, 0x0543, 0x0548, 0x054d, 0x0552, 0x0557, 0x055c,
299+
0x0561, 0x0566, 0x056b, 0x0570, 0x0575, 0x057a, 0x057f, 0x0584, 0x0589, 0x058e, 0x0593, 0x0598, 0x059d, 0x05a2, 0x05a7, 0x05ac,
300+
0x05b1, 0x05b6, 0x05bb, 0x05c0, 0x05c5, 0x05ca, 0x05cf, 0x05d4, 0x05d9, 0x05de, 0x05e3, 0x05e8, 0x05ed, 0x05f2, 0x05f7, 0x05fc,
301+
0x0601, 0x0606, 0x060b, 0x0610, 0x0615, 0x061a, 0x061f, 0x0624, 0x0629, 0x062e, 0x0633, 0x0638, 0x063d, 0x0642, 0x0647, 0x064c,
302+
0x0651, 0x0656, 0x065b, 0x0660, 0x0665, 0x066a, 0x066e, 0x0673, 0x0678, 0x067d, 0x0682, 0x0687, 0x068c, 0x0691, 0x0696, 0x069b,
303+
0x06a0, 0x06a5, 0x06aa, 0x06af, 0x06b4, 0x06b9, 0x06be, 0x06c3, 0x06c8, 0x06cd, 0x06d2, 0x06d7, 0x06dc, 0x06e1, 0x06e5, 0x06ea,
304+
0x06ef, 0x06f4, 0x06f9, 0x06fe, 0x0703, 0x0708, 0x070d, 0x0712, 0x0717, 0x071c, 0x0721, 0x0726, 0x072b, 0x0730, 0x0735, 0x0739,
305+
0x073e, 0x0743, 0x0748, 0x074d, 0x0752, 0x0757, 0x075c, 0x0761, 0x0766, 0x076b, 0x0770, 0x0775, 0x077a, 0x077e, 0x0783, 0x0788,
306+
0x078d, 0x0792, 0x0797, 0x079c, 0x07a1, 0x07a6, 0x07ab, 0x07b0, 0x07b5, 0x07b9, 0x07be, 0x07c3, 0x07c8, 0x07cd, 0x07d2, 0x07d7,
307+
0x07dc, 0x07e1, 0x07e6, 0x07eb, 0x07ef, 0x07f4, 0x07f9, 0x07fe, 0x0803, 0x0808, 0x080d, 0x0812, 0x0817, 0x081c, 0x0820, 0x0825,
308+
0x082a, 0x082f, 0x0834, 0x0839, 0x083e, 0x0843, 0x0848, 0x084c, 0x0851, 0x0856, 0x085b, 0x0860, 0x0865, 0x086a, 0x086f, 0x0873,
309+
0x0878, 0x087d, 0x0882, 0x0887, 0x088c, 0x0891, 0x0896, 0x089a, 0x089f, 0x08a4, 0x08a9, 0x08ae, 0x08b3, 0x08b8, 0x08bd, 0x08c1,
310+
0x08c6, 0x08cb, 0x08d0, 0x08d5, 0x08da, 0x08df, 0x08e3, 0x08e8, 0x08ed, 0x08f2, 0x08f7, 0x08fc, 0x0901, 0x0905, 0x090a, 0x090f,
311+
0x0914, 0x0919, 0x091e, 0x0922, 0x0927, 0x092c, 0x0931, 0x0936, 0x093b, 0x093f, 0x0944, 0x0949, 0x094e, 0x0953, 0x0958, 0x095c,
312+
0x0961, 0x0966, 0x096b, 0x0970, 0x0975, 0x0979, 0x097e, 0x0983, 0x0988, 0x098d, 0x0992, 0x0996, 0x099b, 0x09a0, 0x09a5, 0x09aa,
313+
0x09ae, 0x09b3, 0x09b8, 0x09bd, 0x09c2, 0x09c6, 0x09cb, 0x09d0, 0x09d5, 0x09da, 0x09de, 0x09e3, 0x09e8, 0x09ed, 0x09f2, 0x09f6,
314+
0x09fb, 0x0a00, 0x0a05, 0x0a0a, 0x0a0e, 0x0a13, 0x0a18, 0x0a1d, 0x0a22, 0x0a26, 0x0a2b, 0x0a30, 0x0a35, 0x0a39, 0x0a3e, 0x0a43,
315+
0x0a48, 0x0a4d, 0x0a51, 0x0a56, 0x0a5b, 0x0a60, 0x0a64, 0x0a69, 0x0a6e, 0x0a73, 0x0a77, 0x0a7c, 0x0a81, 0x0a86, 0x0a8b, 0x0a8f,
316+
0x0a94, 0x0a99, 0x0a9e, 0x0aa2, 0x0aa7, 0x0aac, 0x0ab1, 0x0ab5, 0x0aba, 0x0abf, 0x0ac4, 0x0ac8, 0x0acd, 0x0ad2, 0x0ad7, 0x0adb,
317+
0x0ae0, 0x0ae5, 0x0ae9, 0x0aee, 0x0af3, 0x0af8, 0x0afc, 0x0b01, 0x0b06, 0x0b0b, 0x0b0f, 0x0b14, 0x0b19, 0x0b1e, 0x0b22, 0x0b27,
318+
0x0b2c, 0x0b30, 0x0b35, 0x0b3a, 0x0b3f, 0x0b43, 0x0b48, 0x0b4d, 0x0b51, 0x0b56, 0x0b5b, 0x0b60, 0x0b64, 0x0b69, 0x0b6e, 0x0b72,
319+
0x0b77, 0x0b7c, 0x0b80, 0x0b85, 0x0b8a, 0x0b8f, 0x0b93, 0x0b98, 0x0b9d, 0x0ba1, 0x0ba6, 0x0bab, 0x0baf, 0x0bb4, 0x0bb9, 0x0bbd,
320+
0x0bc2, 0x0bc7, 0x0bcb, 0x0bd0, 0x0bd5, 0x0bd9, 0x0bde, 0x0be3, 0x0be7, 0x0bec, 0x0bf1, 0x0bf5, 0x0bfa, 0x0bff, 0x0c03, 0x0c08,
321+
0x0c0d, 0x0c11, 0x0c16, 0x0c1b, 0x0c1f, 0x0c24, 0x0c29, 0x0c2d, 0x0c32, 0x0c37, 0x0c3b, 0x0c40, 0x0c45, 0x0c49, 0x0c4e, 0x0c53,
322+
0x0c57, 0x0c5c, 0x0c60, 0x0c65, 0x0c6a, 0x0c6e, 0x0c73, 0x0c78, 0x0c7c, 0x0c81, 0x0c86, 0x0c8a, 0x0c8f, 0x0c93, 0x0c98, 0x0c9d,
323+
0x0ca1, 0x0ca6, 0x0cab, 0x0caf, 0x0cb4, 0x0cb8, 0x0cbd, 0x0cc2, 0x0cc6, 0x0ccb, 0x0ccf, 0x0cd4, 0x0cd9, 0x0cdd, 0x0ce2, 0x0ce6,
324+
0x0ceb, 0x0cf0, 0x0cf4, 0x0cf9, 0x0cfd, 0x0d02, 0x0d07, 0x0d0b, 0x0d10, 0x0d14, 0x0d19, 0x0d1e, 0x0d22, 0x0d27, 0x0d2b, 0x0d30,
325+
0x0d34, 0x0d39, 0x0d3e, 0x0d42, 0x0d47, 0x0d4b, 0x0d50, 0x0d54, 0x0d59, 0x0d5e, 0x0d62, 0x0d67, 0x0d6b, 0x0d70, 0x0d74, 0x0d79,
326+
0x0d7d, 0x0d82, 0x0d87, 0x0d8b, 0x0d90, 0x0d94, 0x0d99, 0x0d9d, 0x0da2, 0x0da6, 0x0dab, 0x0daf, 0x0db4, 0x0db9, 0x0dbd, 0x0dc2,
327+
0x0dc6, 0x0dcb, 0x0dcf, 0x0dd4, 0x0dd8, 0x0ddd, 0x0de1, 0x0de6, 0x0dea, 0x0def, 0x0df3, 0x0df8, 0x0dfc, 0x0e01, 0x0e05, 0x0e0a,
328+
0x0e0f, 0x0e13, 0x0e18, 0x0e1c, 0x0e21, 0x0e25, 0x0e2a, 0x0e2e, 0x0e33, 0x0e37, 0x0e3c, 0x0e40, 0x0e45, 0x0e49, 0x0e4e, 0x0e52,
329+
0x0e56, 0x0e5b, 0x0e5f, 0x0e64, 0x0e68, 0x0e6d, 0x0e71, 0x0e76, 0x0e7a, 0x0e7f, 0x0e83, 0x0e88, 0x0e8c, 0x0e91, 0x0e95, 0x0e9a,
330+
0x0e9e, 0x0ea3, 0x0ea7, 0x0eac, 0x0eb0, 0x0eb4, 0x0eb9, 0x0ebd, 0x0ec2, 0x0ec6, 0x0ecb, 0x0ecf, 0x0ed4, 0x0ed8, 0x0edc, 0x0ee1,
331+
0x0ee5, 0x0eea, 0x0eee, 0x0ef3, 0x0ef7, 0x0efc, 0x0f00, 0x0f04, 0x0f09, 0x0f0d, 0x0f12, 0x0f16, 0x0f1b, 0x0f1f, 0x0f23, 0x0f28,
332+
0x0f2c, 0x0f31, 0x0f35, 0x0f3a, 0x0f3e, 0x0f42, 0x0f47, 0x0f4b, 0x0f50, 0x0f54, 0x0f58, 0x0f5d, 0x0f61, 0x0f66, 0x0f6a, 0x0f6e,
333+
0x0f73, 0x0f77, 0x0f7c, 0x0f80, 0x0f84, 0x0f89, 0x0f8d, 0x0f91, 0x0f96, 0x0f9a, 0x0f9f, 0x0fa3, 0x0fa7, 0x0fac, 0x0fb0, 0x0fb5,
334+
0x0fb9, 0x0fbd, 0x0fc2, 0x0fc6, 0x0fca, 0x0fcf, 0x0fd3, 0x0fd7, 0x0fdc, 0x0fe0, 0x0fe5, 0x0fe9, 0x0fed, 0x0ff2, 0x0ff6, 0x0ffa,
335+
0x0fff, 0x1003, 0x1007, 0x100c, 0x1010, 0x1014, 0x1019, 0x101d, 0x1021, 0x1026, 0x102a, 0x102e, 0x1033, 0x1037, 0x103b, 0x1040,
336+
0x1044, 0x1048, 0x104d, 0x1051, 0x1055, 0x105a, 0x105e, 0x1062, 0x1067, 0x106b, 0x106f, 0x1073, 0x1078, 0x107c, 0x1080, 0x1085,
337+
0x1089, 0x108d, 0x1092, 0x1096, 0x109a, 0x109e, 0x10a3, 0x10a7, 0x10ab, 0x10b0, 0x10b4, 0x10b8, 0x10bc, 0x10c1, 0x10c5, 0x10c9,
338+
0x10ce, 0x10d2, 0x10d6, 0x10da, 0x10df, 0x10e3, 0x10e7, 0x10eb, 0x10f0, 0x10f4, 0x10f8, 0x10fd, 0x1101, 0x1105, 0x1109, 0x110e,
339+
0x1112, 0x1116, 0x111a, 0x111f, 0x1123, 0x1127, 0x112b, 0x1130, 0x1134, 0x1138, 0x113c, 0x1140, 0x1145, 0x1149, 0x114d, 0x1151,
340+
0x1156, 0x115a, 0x115e, 0x1162, 0x1166, 0x116b, 0x116f, 0x1173, 0x1177, 0x117c, 0x1180, 0x1184, 0x1188, 0x118c, 0x1191, 0x1195,
341+
0x1199, 0x119d, 0x11a1, 0x11a6, 0x11aa, 0x11ae, 0x11b2, 0x11b6, 0x11bb, 0x11bf, 0x11c3, 0x11c7, 0x11cb, 0x11cf, 0x11d4, 0x11d8,
342+
0x11dc, 0x11e0, 0x11e4, 0x11e9, 0x11ed, 0x11f1, 0x11f5, 0x11f9, 0x11fd, 0x1202, 0x1206, 0x120a, 0x120e, 0x1212, 0x1216, 0x121a,
343+
0x121f, 0x1223, 0x1227, 0x122b, 0x122f, 0x1233, 0x1237, 0x123c, 0x1240, 0x1244, 0x1248, 0x124c, 0x1250, 0x1254, 0x1259, 0x125d,
344+
0x1261, 0x1265, 0x1269, 0x126d, 0x1271, 0x1275, 0x127a, 0x127e, 0x1282, 0x1286, 0x128a, 0x128e, 0x1292, 0x1296, 0x129a, 0x129f,
345+
0x12a3, 0x12a7, 0x12ab, 0x12af, 0x12b3, 0x12b7, 0x12bb, 0x12bf, 0x12c3, 0x12c7, 0x12cc, 0x12d0, 0x12d4, 0x12d8, 0x12dc, 0x12e0,
346+
0x12e4, 0x12e8, 0x12ec, 0x12f0, 0x12f4, 0x12f8, 0x12fc, 0x1301, 0x1305, 0x1309, 0x130d, 0x1311, 0x1315, 0x1319, 0x131d, 0x1321,
347+
0x1325, 0x1329, 0x132d, 0x1331, 0x1335, 0x1339, 0x133d, 0x1341, 0x1345, 0x1349, 0x134d, 0x1351, 0x1355, 0x135a, 0x135e, 0x1362,
348+
0x1366, 0x136a, 0x136e, 0x1372, 0x1376, 0x137a, 0x137e, 0x1382, 0x1386, 0x138a, 0x138e, 0x1392, 0x1396, 0x139a, 0x139e, 0x13a2,
349+
0x13a6, 0x13aa, 0x13ae, 0x13b2, 0x13b6, 0x13ba, 0x13be, 0x13c2, 0x13c6, 0x13ca, 0x13ce, 0x13d2, 0x13d6, 0x13da, 0x13de, 0x13e2,
350+
0x13e6, 0x13e9, 0x13ed, 0x13f1, 0x13f5, 0x13f9, 0x13fd, 0x1401, 0x1405, 0x1409, 0x140d, 0x1411, 0x1415, 0x1419, 0x141d, 0x1421,
351+
0x1425, 0x1429, 0x142d, 0x1431, 0x1435, 0x1439, 0x143d, 0x1440, 0x1444, 0x1448, 0x144c, 0x1450, 0x1454, 0x1458, 0x145c, 0x1460,
352+
0x1464, 0x1468, 0x146c, 0x1470, 0x1473, 0x1477, 0x147b, 0x147f, 0x1483, 0x1487, 0x148b, 0x148f, 0x1493, 0x1497, 0x149b, 0x149e,
353+
0x14a2, 0x14a6, 0x14aa, 0x14ae, 0x14b2, 0x14b6, 0x14ba, 0x14be, 0x14c1, 0x14c5, 0x14c9, 0x14cd, 0x14d1, 0x14d5, 0x14d9, 0x14dd,
354+
0x14e0, 0x14e4, 0x14e8, 0x14ec, 0x14f0, 0x14f4, 0x14f8, 0x14fb, 0x14ff, 0x1503, 0x1507, 0x150b, 0x150f, 0x1513, 0x1516, 0x151a,
355+
0x151e, 0x1522, 0x1526, 0x152a, 0x152d, 0x1531, 0x1535, 0x1539, 0x153d, 0x1541, 0x1544, 0x1548, 0x154c, 0x1550, 0x1554, 0x1558,
356+
0x155b, 0x155f, 0x1563, 0x1567, 0x156b, 0x156e, 0x1572, 0x1576, 0x157a, 0x157e, 0x1581, 0x1585, 0x1589, 0x158d, 0x1591, 0x1594,
357+
0x1598, 0x159c, 0x15a0, 0x15a4, 0x15a7, 0x15ab, 0x15af, 0x15b3, 0x15b7, 0x15ba, 0x15be, 0x15c2, 0x15c6, 0x15c9, 0x15cd, 0x15d1,
358+
0x15d5, 0x15d8, 0x15dc, 0x15e0, 0x15e4, 0x15e8, 0x15eb, 0x15ef, 0x15f3, 0x15f7, 0x15fa, 0x15fe, 0x1602, 0x1606, 0x1609, 0x160d,
359+
0x1611, 0x1614, 0x1618, 0x161c, 0x1620, 0x1623, 0x1627, 0x162b, 0x162f, 0x1632, 0x1636, 0x163a, 0x163e, 0x1641, 0x1645, 0x1649,
360+
0x164c, 0x1650, 0x1654, 0x1658, 0x165b, 0x165f, 0x1663, 0x1666, 0x166a, 0x166e, 0x1671, 0x1675, 0x1679, 0x167d, 0x1680, 0x1684,
361+
0x1688, 0x168b, 0x168f, 0x1693, 0x1696, 0x169a, 0x169e, 0x16a1, 0x16a5, 0x16a9, 0x16ac, 0x16b0, 0x16b4, 0x16b7, 0x16bb, 0x16bf,
362+
0x16c2, 0x16c6, 0x16ca, 0x16cd, 0x16d1, 0x16d5, 0x16d8, 0x16dc, 0x16e0, 0x16e3, 0x16e7, 0x16eb, 0x16ee, 0x16f2, 0x16f6, 0x16f9,
363+
0x16fd, 0x1700, 0x1704, 0x1708, 0x170b, 0x170f, 0x1713, 0x1716, 0x171a, 0x171d, 0x1721, 0x1725, 0x1728, 0x172c, 0x1730, 0x1733,
364+
0x1737, 0x173a, 0x173e, 0x1742, 0x1745, 0x1749, 0x174c, 0x1750, 0x1754, 0x1757, 0x175b, 0x175e, 0x1762, 0x1766, 0x1769, 0x176d,
365+
0x1770, 0x1774, 0x1778, 0x177b, 0x177f, 0x1782, 0x1786, 0x1789, 0x178d, 0x1791, 0x1794, 0x1798, 0x179b, 0x179f, 0x17a2, 0x17a6,
366+
0x17aa, 0x17ad, 0x17b1, 0x17b4, 0x17b8, 0x17bb, 0x17bf, 0x17c2, 0x17c6, 0x17c9, 0x17cd, 0x17d1, 0x17d4, 0x17d8, 0x17db, 0x17df,
367+
0x17e2, 0x17e6, 0x17e9, 0x17ed, 0x17f0, 0x17f4, 0x17f7, 0x17fb, 0x17fe, 0x1802, 0x1806, 0x1809, 0x180d, 0x1810, 0x1814, 0x1817,
368+
0x181b, 0x181e, 0x1822, 0x1825, 0x1829, 0x182c, 0x1830, 0x1833, 0x1837, 0x183a, 0x183e, 0x1841, 0x1845, 0x1848, 0x184c, 0x184f,
369+
0x1853, 0x1856, 0x185a, 0x185d, 0x1860, 0x1864, 0x1867, 0x186b, 0x186e, 0x1872, 0x1875, 0x1879, 0x187c, 0x1880, 0x1883, 0x1887,
370+
0x188a, 0x188e, 0x1891, 0x1894, 0x1898, 0x189b, 0x189f, 0x18a2, 0x18a6, 0x18a9, 0x18ad, 0x18b0, 0x18b3, 0x18b7, 0x18ba, 0x18be,
371+
0x18c1, 0x18c5, 0x18c8, 0x18cc, 0x18cf, 0x18d2, 0x18d6, 0x18d9, 0x18dd, 0x18e0, 0x18e3, 0x18e7, 0x18ea, 0x18ee, 0x18f1, 0x18f5,
372+
0x18f8, 0x18fb, 0x18ff, 0x1902, 0x1906, 0x1909, 0x190c, 0x1910, 0x1913, 0x1917, 0x191a, 0x191d, 0x1921, 0x1924, 0x1928, 0x192b,
373+
0x192e, 0x1932, 0x1935, 0x1938, 0x193c, 0x193f, 0x1943, 0x1946, 0x1949, 0x194d, 0x1950, 0x1953, 0x1957, 0x195a, 0x195d, 0x1961,
374+
0x1964, 0x1968, 0x196b, 0x196e, 0x1972, 0x1975, 0x1978, 0x197c, 0x197f, 0x1982, 0x1986, 0x1989, 0x198c, 0x1990, 0x1993, 0x1996,
375+
0x199a, 0x199d, 0x19a0, 0x19a4, 0x19a7, 0x19aa, 0x19ae, 0x19b1, 0x19b4, 0x19b8, 0x19bb, 0x19be, 0x19c2, 0x19c5, 0x19c8, 0x19cc,
376+
0x19cf, 0x19d2, 0x19d5, 0x19d9, 0x19dc, 0x19df, 0x19e3, 0x19e6, 0x19e9, 0x19ed, 0x19f0, 0x19f3, 0x19f6, 0x19fa, 0x19fd, 0x1a00,
377+
0x1a04, 0x1a07, 0x1a0a, 0x1a0d, 0x1a11, 0x1a14, 0x1a17, 0x1a1b, 0x1a1e, 0x1a21, 0x1a24, 0x1a28, 0x1a2b, 0x1a2e, 0x1a31, 0x1a35,
378+
0x1a38, 0x1a3b, 0x1a3e, 0x1a42, 0x1a45, 0x1a48, 0x1a4b, 0x1a4f, 0x1a52, 0x1a55, 0x1a58, 0x1a5c, 0x1a5f, 0x1a62, 0x1a65, 0x1a69,
379+
0x1a6c, 0x1a6f, 0x1a72, 0x1a76, 0x1a79, 0x1a7c, 0x1a7f, 0x1a83, 0x1a86, 0x1a89, 0x1a8c, 0x1a8f, 0x1a93, 0x1a96, 0x1a99, 0x1a9c,
380+
0x1a9f, 0x1aa3, 0x1aa6, 0x1aa9, 0x1aac, 0x1ab0, 0x1ab3, 0x1ab6, 0x1ab9, 0x1abc, 0x1ac0, 0x1ac3, 0x1ac6, 0x1ac9, 0x1acc, 0x1acf,
381+
0x1ad3, 0x1ad6, 0x1ad9, 0x1adc, 0x1adf, 0x1ae3, 0x1ae6, 0x1ae9, 0x1aec, 0x1aef, 0x1af2, 0x1af6, 0x1af9, 0x1afc, 0x1aff, 0x1b02,
382+
0x1b05, 0x1b09, 0x1b0c, 0x1b0f, 0x1b12, 0x1b15, 0x1b18, 0x1b1c, 0x1b1f, 0x1b22, 0x1b25, 0x1b28, 0x1b2b, 0x1b2e, 0x1b32, 0x1b35,
383+
0x1b38, 0x1b3b, 0x1b3e, 0x1b41, 0x1b44, 0x1b48, 0x1b4b, 0x1b4e, 0x1b51, 0x1b54, 0x1b57, 0x1b5a, 0x1b5d, 0x1b61, 0x1b64, 0x1b67,
384+
0x1b6a, 0x1b6d, 0x1b70, 0x1b73, 0x1b76, 0x1b79, 0x1b7d, 0x1b80, 0x1b83, 0x1b86, 0x1b89, 0x1b8c, 0x1b8f, 0x1b92, 0x1b95, 0x1b98,
385+
0x1b9c, 0x1b9f, 0x1ba2, 0x1ba5, 0x1ba8, 0x1bab, 0x1bae, 0x1bb1, 0x1bb4, 0x1bb7, 0x1bba, 0x1bbd, 0x1bc1, 0x1bc4, 0x1bc7, 0x1bca,
386+
0x1bcd, 0x1bd0, 0x1bd3, 0x1bd6, 0x1bd9, 0x1bdc, 0x1bdf, 0x1be2, 0x1be5, 0x1be8, 0x1beb, 0x1bee, 0x1bf2, 0x1bf5, 0x1bf8, 0x1bfb,
387+
0x1bfe, 0x1c01, 0x1c04, 0x1c07, 0x1c0a, 0x1c0d, 0x1c10, 0x1c13, 0x1c16, 0x1c19, 0x1c1c, 0x1c1f, 0x1c22, 0x1c25, 0x1c28, 0x1c2b,
388+
0x1c2e, 0x1c31, 0x1c34, 0x1c37, 0x1c3a, 0x1c3d, 0x1c40, 0x1c43, 0x1c46, 0x1c49, 0x1c4c, 0x1c4f, 0x1c52, 0x1c55, 0x1c58, 0x1c5b,
389+
0x1c5e, 0x1c61, 0x1c64, 0x1c67, 0x1c6a, 0x1c6d, 0x1c70, 0x1c73, 0x1c76, 0x1c79, 0x1c7c, 0x1c7f, 0x1c82, 0x1c85, 0x1c88, 0x1c8b,
390+
0x1c8e, 0x1c91, 0x1c94, 0x1c97, 0x1c9a, 0x1c9d, 0x1ca0, 0x1ca3, 0x1ca6, 0x1ca9, 0x1cac, 0x1caf, 0x1cb2, 0x1cb5, 0x1cb8, 0x1cbb,
391+
0x1cbe, 0x1cc1, 0x1cc3, 0x1cc6, 0x1cc9, 0x1ccc, 0x1ccf, 0x1cd2, 0x1cd5, 0x1cd8, 0x1cdb, 0x1cde, 0x1ce1, 0x1ce4, 0x1ce7, 0x1cea,
392+
0x1ced, 0x1cf0, 0x1cf3, 0x1cf5, 0x1cf8, 0x1cfb, 0x1cfe, 0x1d01, 0x1d04, 0x1d07, 0x1d0a, 0x1d0d, 0x1d10, 0x1d13, 0x1d16, 0x1d18,
393+
0x1d1b, 0x1d1e, 0x1d21, 0x1d24, 0x1d27, 0x1d2a, 0x1d2d, 0x1d30, 0x1d33, 0x1d35, 0x1d38, 0x1d3b, 0x1d3e, 0x1d41, 0x1d44, 0x1d47,
394+
0x1d4a, 0x1d4d, 0x1d4f, 0x1d52, 0x1d55, 0x1d58, 0x1d5b, 0x1d5e, 0x1d61, 0x1d64, 0x1d66, 0x1d69, 0x1d6c, 0x1d6f, 0x1d72, 0x1d75,
395+
0x1d78, 0x1d7b, 0x1d7d, 0x1d80, 0x1d83, 0x1d86, 0x1d89, 0x1d8c, 0x1d8e, 0x1d91, 0x1d94, 0x1d97, 0x1d9a, 0x1d9d, 0x1da0, 0x1da2,
396+
0x1da5, 0x1da8, 0x1dab, 0x1dae, 0x1db1, 0x1db3, 0x1db6, 0x1db9, 0x1dbc, 0x1dbf, 0x1dc2, 0x1dc4, 0x1dc7, 0x1dca, 0x1dcd, 0x1dd0,
397+
0x1dd3, 0x1dd5, 0x1dd8, 0x1ddb, 0x1dde, 0x1de1, 0x1de3, 0x1de6, 0x1de9, 0x1dec, 0x1def, 0x1df1, 0x1df4, 0x1df7, 0x1dfa, 0x1dfd,
398+
0x1dff, 0x1e02, 0x1e05, 0x1e08, 0x1e0b, 0x1e0d, 0x1e10, 0x1e13, 0x1e16, 0x1e19, 0x1e1b, 0x1e1e, 0x1e21, 0x1e24, 0x1e26, 0x1e29,
399+
0x1e2c, 0x1e2f, 0x1e32, 0x1e34, 0x1e37, 0x1e3a, 0x1e3d, 0x1e3f, 0x1e42, 0x1e45, 0x1e48, 0x1e4a, 0x1e4d, 0x1e50, 0x1e53, 0x1e55,
400+
0x1e58, 0x1e5b, 0x1e5e, 0x1e60, 0x1e63, 0x1e66, 0x1e69, 0x1e6b, 0x1e6e, 0x1e71, 0x1e74, 0x1e76, 0x1e79, 0x1e7c, 0x1e7f, 0x1e81,
401+
0x1e84, 0x1e87, 0x1e8a, 0x1e8c, 0x1e8f, 0x1e92, 0x1e94, 0x1e97, 0x1e9a, 0x1e9d, 0x1e9f, 0x1ea2, 0x1ea5, 0x1ea8, 0x1eaa, 0x1ead,
402+
0x1eb0, 0x1eb2, 0x1eb5, 0x1eb8, 0x1eba, 0x1ebd, 0x1ec0, 0x1ec3, 0x1ec5, 0x1ec8, 0x1ecb, 0x1ecd, 0x1ed0, 0x1ed3, 0x1ed5, 0x1ed8,
403+
0x1edb, 0x1ede, 0x1ee0, 0x1ee3, 0x1ee6, 0x1ee8, 0x1eeb, 0x1eee, 0x1ef0, 0x1ef3, 0x1ef6, 0x1ef8, 0x1efb, 0x1efe, 0x1f00, 0x1f03,
404+
0x1f06, 0x1f08, 0x1f0b, 0x1f0e, 0x1f10, 0x1f13, 0x1f16, 0x1f18, 0x1f1b, 0x1f1e, 0x1f20, 0x1f23, 0x1f26, 0x1f28, 0x1f2b, 0x1f2e,
405+
0x1f30, 0x1f33, 0x1f36, 0x1f38, 0x1f3b, 0x1f3d, 0x1f40, 0x1f43, 0x1f45, 0x1f48, 0x1f4b, 0x1f4d, 0x1f50, 0x1f53, 0x1f55, 0x1f58,
406+
0x1f5a, 0x1f5d, 0x1f60, 0x1f62, 0x1f65, 0x1f68, 0x1f6a, 0x1f6d, 0x1f6f, 0x1f72, 0x1f75, 0x1f77, 0x1f7a, 0x1f7c, 0x1f7f, 0x1f82,
407+
0x1f84, 0x1f87, 0x1f8a, 0x1f8c, 0x1f8f, 0x1f91, 0x1f94, 0x1f97, 0x1f99, 0x1f9c, 0x1f9e, 0x1fa1, 0x1fa4, 0x1fa6, 0x1fa9, 0x1fab,
408+
0x1fae, 0x1fb0, 0x1fb3, 0x1fb6, 0x1fb8, 0x1fbb, 0x1fbd, 0x1fc0, 0x1fc3, 0x1fc5, 0x1fc8, 0x1fca, 0x1fcd, 0x1fcf, 0x1fd2, 0x1fd5,
409+
0x1fd7, 0x1fda, 0x1fdc, 0x1fdf, 0x1fe1, 0x1fe4, 0x1fe6, 0x1fe9, 0x1fec, 0x1fee, 0x1ff1, 0x1ff3, 0x1ff6, 0x1ff8, 0x1ffb, 0x1ffd,
410+
0x2000,
411+
};

0 commit comments

Comments
 (0)