TombEngine/TR5Main/Game/trmath.cpp

1487 lines
72 KiB
C++
Raw Normal View History

#include "framework.h"
#include "trmath.h"
2020-04-24 19:15:05 +02:00
#include <cmath>
// LUT for cos and sin
// 8192 entries, even entry = Sin, odd entry = Cos
// take TR angle (between 0 and 65535), shift R by 3 (to get between 0 and 8191), and with 8190 (to get between 0 and 8190)
// if you want Cos, add 1 to the index
// you then get value between -4096 and 4096, which you can divide by 4096f to get between -1 and 1
short rcossin_tbl[8192] =
{
0, 4096, 6, 4096, 13, 4096, 19, 4096,
25, 4096, 31, 4096, 38, 4096, 44, 4096,
50, 4096, 57, 4096, 63, 4096, 69, 4095,
75, 4095, 82, 4095, 88, 4095, 94, 4095,
101, 4095, 107, 4095, 113, 4094, 119, 4094,
126, 4094, 132, 4094, 138, 4094, 144, 4093,
151, 4093, 157, 4093, 163, 4093, 170, 4092,
176, 4092, 182, 4092, 188, 4092, 195, 4091,
201, 4091, 207, 4091, 214, 4090, 220, 4090,
226, 4090, 232, 4089, 239, 4089, 245, 4089,
251, 4088, 257, 4088, 264, 4088, 270, 4087,
276, 4087, 283, 4086, 289, 4086, 295, 4085,
301, 4085, 308, 4084, 314, 4084, 320, 4083,
326, 4083, 333, 4082, 339, 4082, 345, 4081,
351, 4081, 358, 4080, 364, 4080, 370, 4079,
376, 4079, 383, 4078, 389, 4077, 395, 4077,
401, 4076, 408, 4076, 414, 4075, 420, 4074,
426, 4074, 433, 4073, 439, 4072, 445, 4072,
451, 4071, 458, 4070, 464, 4070, 470, 4069,
476, 4068, 483, 4067, 489, 4067, 495, 4066,
501, 4065, 508, 4064, 514, 4064, 520, 4063,
526, 4062, 533, 4061, 539, 4060, 545, 4060,
551, 4059, 557, 4058, 564, 4057, 570, 4056,
576, 4055, 582, 4054, 589, 4053, 595, 4053,
601, 4052, 607, 4051, 613, 4050, 620, 4049,
626, 4048, 632, 4047, 638, 4046, 644, 4045,
651, 4044, 657, 4043, 663, 4042, 669, 4041,
675, 4040, 682, 4039, 688, 4038, 694, 4037,
700, 4036, 706, 4035, 713, 4034, 719, 4032,
725, 4031, 731, 4030, 737, 4029, 744, 4028,
750, 4027, 756, 4026, 762, 4024, 768, 4023,
774, 4022, 781, 4021, 787, 4020, 793, 4019,
799, 4017, 805, 4016, 811, 4015, 818, 4014,
824, 4012, 830, 4011, 836, 4010, 842, 4008,
848, 4007, 854, 4006, 861, 4005, 867, 4003,
873, 4002, 879, 4001, 885, 3999, 891, 3998,
897, 3996, 904, 3995, 910, 3994, 916, 3992,
922, 3991, 928, 3989, 934, 3988, 940, 3987,
946, 3985, 953, 3984, 959, 3982, 965, 3981,
971, 3979, 977, 3978, 983, 3976, 989, 3975,
995, 3973, 1001, 3972, 1007, 3970, 1014, 3969,
1020, 3967, 1026, 3965, 1032, 3964, 1038, 3962,
1044, 3961, 1050, 3959, 1056, 3958, 1062, 3956,
1068, 3954, 1074, 3953, 1080, 3951, 1086, 3949,
1092, 3948, 1099, 3946, 1105, 3944, 1111, 3943,
1117, 3941, 1123, 3939, 1129, 3937, 1135, 3936,
1141, 3934, 1147, 3932, 1153, 3930, 1159, 3929,
1165, 3927, 1171, 3925, 1177, 3923, 1183, 3921,
1189, 3920, 1195, 3918, 1201, 3916, 1207, 3914,
1213, 3912, 1219, 3910, 1225, 3909, 1231, 3907,
1237, 3905, 1243, 3903, 1249, 3901, 1255, 3899,
1261, 3897, 1267, 3895, 1273, 3893, 1279, 3891,
1285, 3889, 1291, 3887, 1297, 3885, 1303, 3883,
1309, 3881, 1315, 3879, 1321, 3877, 1327, 3875,
1332, 3873, 1338, 3871, 1344, 3869, 1350, 3867,
1356, 3865, 1362, 3863, 1368, 3861, 1374, 3859,
1380, 3857, 1386, 3854, 1392, 3852, 1398, 3850,
1404, 3848, 1409, 3846, 1415, 3844, 1421, 3842,
1427, 3839, 1433, 3837, 1439, 3835, 1445, 3833,
1451, 3831, 1457, 3828, 1462, 3826, 1468, 3824,
1474, 3822, 1480, 3819, 1486, 3817, 1492, 3815,
1498, 3812, 1503, 3810, 1509, 3808, 1515, 3805,
1521, 3803, 1527, 3801, 1533, 3798, 1538, 3796,
1544, 3794, 1550, 3791, 1556, 3789, 1562, 3787,
1567, 3784, 1573, 3782, 1579, 3779, 1585, 3777,
1591, 3775, 1596, 3772, 1602, 3770, 1608, 3767,
1614, 3765, 1620, 3762, 1625, 3760, 1631, 3757,
1637, 3755, 1643, 3752, 1648, 3750, 1654, 3747,
1660, 3745, 1666, 3742, 1671, 3739, 1677, 3737,
1683, 3734, 1689, 3732, 1694, 3729, 1700, 3727,
1706, 3724, 1711, 3721, 1717, 3719, 1723, 3716,
1729, 3713, 1734, 3711, 1740, 3708, 1746, 3705,
1751, 3703, 1757, 3700, 1763, 3697, 1768, 3695,
1774, 3692, 1780, 3689, 1785, 3686, 1791, 3684,
1797, 3681, 1802, 3678, 1808, 3675, 1813, 3673,
1819, 3670, 1825, 3667, 1830, 3664, 1836, 3661,
1842, 3659, 1847, 3656, 1853, 3653, 1858, 3650,
1864, 3647, 1870, 3644, 1875, 3642, 1881, 3639,
1886, 3636, 1892, 3633, 1898, 3630, 1903, 3627,
1909, 3624, 1914, 3621, 1920, 3618, 1925, 3615,
1931, 3612, 1936, 3609, 1942, 3606, 1947, 3603,
1953, 3600, 1958, 3597, 1964, 3594, 1970, 3591,
1975, 3588, 1981, 3585, 1986, 3582, 1992, 3579,
1997, 3576, 2002, 3573, 2008, 3570, 2013, 3567,
2019, 3564, 2024, 3561, 2030, 3558, 2035, 3555,
2041, 3551, 2046, 3548, 2052, 3545, 2057, 3542,
2062, 3539, 2068, 3536, 2073, 3532, 2079, 3529,
2084, 3526, 2090, 3523, 2095, 3520, 2100, 3516,
2106, 3513, 2111, 3510, 2117, 3507, 2122, 3504,
2127, 3500, 2133, 3497, 2138, 3494, 2143, 3490,
2149, 3487, 2154, 3484, 2159, 3481, 2165, 3477,
2170, 3474, 2175, 3471, 2181, 3467, 2186, 3464,
2191, 3461, 2197, 3457, 2202, 3454, 2207, 3450,
2213, 3447, 2218, 3444, 2223, 3440, 2228, 3437,
2234, 3433, 2239, 3430, 2244, 3426, 2249, 3423,
2255, 3420, 2260, 3416, 2265, 3413, 2270, 3409,
2276, 3406, 2281, 3402, 2286, 3399, 2291, 3395,
2296, 3392, 2302, 3388, 2307, 3385, 2312, 3381,
2317, 3378, 2322, 3374, 2328, 3370, 2333, 3367,
2338, 3363, 2343, 3360, 2348, 3356, 2353, 3352,
2359, 3349, 2364, 3345, 2369, 3342, 2374, 3338,
2379, 3334, 2384, 3331, 2389, 3327, 2394, 3323,
2399, 3320, 2405, 3316, 2410, 3312, 2415, 3309,
2420, 3305, 2425, 3301, 2430, 3297, 2435, 3294,
2440, 3290, 2445, 3286, 2450, 3282, 2455, 3279,
2460, 3275, 2465, 3271, 2470, 3267, 2475, 3264,
2480, 3260, 2485, 3256, 2490, 3252, 2495, 3248,
2500, 3244, 2505, 3241, 2510, 3237, 2515, 3233,
2520, 3229, 2525, 3225, 2530, 3221, 2535, 3217,
2540, 3214, 2545, 3210, 2550, 3206, 2555, 3202,
2559, 3198, 2564, 3194, 2569, 3190, 2574, 3186,
2579, 3182, 2584, 3178, 2589, 3174, 2594, 3170,
2598, 3166, 2603, 3162, 2608, 3158, 2613, 3154,
2618, 3150, 2623, 3146, 2628, 3142, 2632, 3138,
2637, 3134, 2642, 3130, 2647, 3126, 2652, 3122,
2656, 3118, 2661, 3114, 2666, 3110, 2671, 3106,
2675, 3102, 2680, 3097, 2685, 3093, 2690, 3089,
2694, 3085, 2699, 3081, 2704, 3077, 2709, 3073,
2713, 3068, 2718, 3064, 2723, 3060, 2727, 3056,
2732, 3052, 2737, 3048, 2741, 3043, 2746, 3039,
2751, 3035, 2755, 3031, 2760, 3026, 2765, 3022,
2769, 3018, 2774, 3014, 2779, 3009, 2783, 3005,
2788, 3001, 2792, 2997, 2797, 2992, 2802, 2988,
2806, 2984, 2811, 2979, 2815, 2975, 2820, 2971,
2824, 2967, 2829, 2962, 2833, 2958, 2838, 2953,
2843, 2949, 2847, 2945, 2852, 2940, 2856, 2936,
2861, 2932, 2865, 2927, 2870, 2923, 2874, 2918,
2878, 2914, 2883, 2910, 2887, 2905, 2892, 2901,
2896, 2896, 2901, 2892, 2905, 2887, 2910, 2883,
2914, 2878, 2918, 2874, 2923, 2870, 2927, 2865,
2932, 2861, 2936, 2856, 2940, 2852, 2945, 2847,
2949, 2843, 2953, 2838, 2958, 2833, 2962, 2829,
2967, 2824, 2971, 2820, 2975, 2815, 2979, 2811,
2984, 2806, 2988, 2802, 2992, 2797, 2997, 2792,
3001, 2788, 3005, 2783, 3009, 2779, 3014, 2774,
3018, 2769, 3022, 2765, 3026, 2760, 3031, 2755,
3035, 2751, 3039, 2746, 3043, 2741, 3048, 2737,
3052, 2732, 3056, 2727, 3060, 2723, 3064, 2718,
3068, 2713, 3073, 2709, 3077, 2704, 3081, 2699,
3085, 2694, 3089, 2690, 3093, 2685, 3097, 2680,
3102, 2675, 3106, 2671, 3110, 2666, 3114, 2661,
3118, 2656, 3122, 2652, 3126, 2647, 3130, 2642,
3134, 2637, 3138, 2632, 3142, 2628, 3146, 2623,
3150, 2618, 3154, 2613, 3158, 2608, 3162, 2603,
3166, 2598, 3170, 2594, 3174, 2589, 3178, 2584,
3182, 2579, 3186, 2574, 3190, 2569, 3194, 2564,
3198, 2559, 3202, 2555, 3206, 2550, 3210, 2545,
3214, 2540, 3217, 2535, 3221, 2530, 3225, 2525,
3229, 2520, 3233, 2515, 3237, 2510, 3241, 2505,
3244, 2500, 3248, 2495, 3252, 2490, 3256, 2485,
3260, 2480, 3264, 2475, 3267, 2470, 3271, 2465,
3275, 2460, 3279, 2455, 3282, 2450, 3286, 2445,
3290, 2440, 3294, 2435, 3297, 2430, 3301, 2425,
3305, 2420, 3309, 2415, 3312, 2410, 3316, 2405,
3320, 2399, 3323, 2394, 3327, 2389, 3331, 2384,
3334, 2379, 3338, 2374, 3342, 2369, 3345, 2364,
3349, 2359, 3352, 2353, 3356, 2348, 3360, 2343,
3363, 2338, 3367, 2333, 3370, 2328, 3374, 2322,
3378, 2317, 3381, 2312, 3385, 2307, 3388, 2302,
3392, 2296, 3395, 2291, 3399, 2286, 3402, 2281,
3406, 2276, 3409, 2270, 3413, 2265, 3416, 2260,
3420, 2255, 3423, 2249, 3426, 2244, 3430, 2239,
3433, 2234, 3437, 2228, 3440, 2223, 3444, 2218,
3447, 2213, 3450, 2207, 3454, 2202, 3457, 2197,
3461, 2191, 3464, 2186, 3467, 2181, 3471, 2175,
3474, 2170, 3477, 2165, 3481, 2159, 3484, 2154,
3487, 2149, 3490, 2143, 3494, 2138, 3497, 2133,
3500, 2127, 3504, 2122, 3507, 2117, 3510, 2111,
3513, 2106, 3516, 2100, 3520, 2095, 3523, 2090,
3526, 2084, 3529, 2079, 3532, 2073, 3536, 2068,
3539, 2062, 3542, 2057, 3545, 2052, 3548, 2046,
3551, 2041, 3555, 2035, 3558, 2030, 3561, 2024,
3564, 2019, 3567, 2013, 3570, 2008, 3573, 2002,
3576, 1997, 3579, 1992, 3582, 1986, 3585, 1981,
3588, 1975, 3591, 1970, 3594, 1964, 3597, 1958,
3600, 1953, 3603, 1947, 3606, 1942, 3609, 1936,
3612, 1931, 3615, 1925, 3618, 1920, 3621, 1914,
3624, 1909, 3627, 1903, 3630, 1898, 3633, 1892,
3636, 1886, 3639, 1881, 3642, 1875, 3644, 1870,
3647, 1864, 3650, 1858, 3653, 1853, 3656, 1847,
3659, 1842, 3661, 1836, 3664, 1830, 3667, 1825,
3670, 1819, 3673, 1813, 3675, 1808, 3678, 1802,
3681, 1797, 3684, 1791, 3686, 1785, 3689, 1780,
3692, 1774, 3695, 1768, 3697, 1763, 3700, 1757,
3703, 1751, 3705, 1746, 3708, 1740, 3711, 1734,
3713, 1729, 3716, 1723, 3719, 1717, 3721, 1711,
3724, 1706, 3727, 1700, 3729, 1694, 3732, 1689,
3734, 1683, 3737, 1677, 3739, 1671, 3742, 1666,
3745, 1660, 3747, 1654, 3750, 1648, 3752, 1643,
3755, 1637, 3757, 1631, 3760, 1625, 3762, 1620,
3765, 1614, 3767, 1608, 3770, 1602, 3772, 1596,
3775, 1591, 3777, 1585, 3779, 1579, 3782, 1573,
3784, 1567, 3787, 1562, 3789, 1556, 3791, 1550,
3794, 1544, 3796, 1538, 3798, 1533, 3801, 1527,
3803, 1521, 3805, 1515, 3808, 1509, 3810, 1503,
3812, 1498, 3815, 1492, 3817, 1486, 3819, 1480,
3822, 1474, 3824, 1468, 3826, 1462, 3828, 1457,
3831, 1451, 3833, 1445, 3835, 1439, 3837, 1433,
3839, 1427, 3842, 1421, 3844, 1415, 3846, 1409,
3848, 1404, 3850, 1398, 3852, 1392, 3854, 1386,
3857, 1380, 3859, 1374, 3861, 1368, 3863, 1362,
3865, 1356, 3867, 1350, 3869, 1344, 3871, 1338,
3873, 1332, 3875, 1327, 3877, 1321, 3879, 1315,
3881, 1309, 3883, 1303, 3885, 1297, 3887, 1291,
3889, 1285, 3891, 1279, 3893, 1273, 3895, 1267,
3897, 1261, 3899, 1255, 3901, 1249, 3903, 1243,
3905, 1237, 3907, 1231, 3909, 1225, 3910, 1219,
3912, 1213, 3914, 1207, 3916, 1201, 3918, 1195,
3920, 1189, 3921, 1183, 3923, 1177, 3925, 1171,
3927, 1165, 3929, 1159, 3930, 1153, 3932, 1147,
3934, 1141, 3936, 1135, 3937, 1129, 3939, 1123,
3941, 1117, 3943, 1111, 3944, 1105, 3946, 1099,
3948, 1092, 3949, 1086, 3951, 1080, 3953, 1074,
3954, 1068, 3956, 1062, 3958, 1056, 3959, 1050,
3961, 1044, 3962, 1038, 3964, 1032, 3965, 1026,
3967, 1020, 3969, 1014, 3970, 1007, 3972, 1001,
3973, 995, 3975, 989, 3976, 983, 3978, 977,
3979, 971, 3981, 965, 3982, 959, 3984, 953,
3985, 946, 3987, 940, 3988, 934, 3989, 928,
3991, 922, 3992, 916, 3994, 910, 3995, 904,
3996, 897, 3998, 891, 3999, 885, 4001, 879,
4002, 873, 4003, 867, 4005, 861, 4006, 854,
4007, 848, 4008, 842, 4010, 836, 4011, 830,
4012, 824, 4014, 818, 4015, 811, 4016, 805,
4017, 799, 4019, 793, 4020, 787, 4021, 781,
4022, 774, 4023, 768, 4024, 762, 4026, 756,
4027, 750, 4028, 744, 4029, 737, 4030, 731,
4031, 725, 4032, 719, 4034, 713, 4035, 706,
4036, 700, 4037, 694, 4038, 688, 4039, 682,
4040, 675, 4041, 669, 4042, 663, 4043, 657,
4044, 651, 4045, 644, 4046, 638, 4047, 632,
4048, 626, 4049, 620, 4050, 613, 4051, 607,
4052, 601, 4053, 595, 4053, 589, 4054, 582,
4055, 576, 4056, 570, 4057, 564, 4058, 557,
4059, 551, 4060, 545, 4060, 539, 4061, 533,
4062, 526, 4063, 520, 4064, 514, 4064, 508,
4065, 501, 4066, 495, 4067, 489, 4067, 483,
4068, 476, 4069, 470, 4070, 464, 4070, 458,
4071, 451, 4072, 445, 4072, 439, 4073, 433,
4074, 426, 4074, 420, 4075, 414, 4076, 408,
4076, 401, 4077, 395, 4077, 389, 4078, 383,
4079, 376, 4079, 370, 4080, 364, 4080, 358,
4081, 351, 4081, 345, 4082, 339, 4082, 333,
4083, 326, 4083, 320, 4084, 314, 4084, 308,
4085, 301, 4085, 295, 4086, 289, 4086, 283,
4087, 276, 4087, 270, 4088, 264, 4088, 257,
4088, 251, 4089, 245, 4089, 239, 4089, 232,
4090, 226, 4090, 220, 4090, 214, 4091, 207,
4091, 201, 4091, 195, 4092, 188, 4092, 182,
4092, 176, 4092, 170, 4093, 163, 4093, 157,
4093, 151, 4093, 144, 4094, 138, 4094, 132,
4094, 126, 4094, 119, 4094, 113, 4095, 107,
4095, 101, 4095, 94, 4095, 88, 4095, 82,
4095, 75, 4095, 69, 4096, 63, 4096, 57,
4096, 50, 4096, 44, 4096, 38, 4096, 31,
4096, 25, 4096, 19, 4096, 13, 4096, 6,
4096, 0, 4096, -6, 4096, -13, 4096, -19,
4096, -25, 4096, -31, 4096, -38, 4096, -44,
4096, -50, 4096, -57, 4096, -63, 4095, -69,
4095, -75, 4095, -82, 4095, -88, 4095, -94,
4095, -101, 4095, -107, 4094, -113, 4094, -119,
4094, -126, 4094, -132, 4094, -138, 4093, -144,
4093, -151, 4093, -157, 4093, -163, 4092, -170,
4092, -176, 4092, -182, 4092, -188, 4091, -195,
4091, -201, 4091, -207, 4090, -214, 4090, -220,
4090, -226, 4089, -232, 4089, -239, 4089, -245,
4088, -251, 4088, -257, 4088, -264, 4087, -270,
4087, -276, 4086, -283, 4086, -289, 4085, -295,
4085, -301, 4084, -308, 4084, -314, 4083, -320,
4083, -326, 4082, -333, 4082, -339, 4081, -345,
4081, -351, 4080, -358, 4080, -364, 4079, -370,
4079, -376, 4078, -383, 4077, -389, 4077, -395,
4076, -401, 4076, -408, 4075, -414, 4074, -420,
4074, -426, 4073, -433, 4072, -439, 4072, -445,
4071, -451, 4070, -458, 4070, -464, 4069, -470,
4068, -476, 4067, -483, 4067, -489, 4066, -495,
4065, -501, 4064, -508, 4064, -514, 4063, -520,
4062, -526, 4061, -533, 4060, -539, 4060, -545,
4059, -551, 4058, -557, 4057, -564, 4056, -570,
4055, -576, 4054, -582, 4053, -589, 4053, -595,
4052, -601, 4051, -607, 4050, -613, 4049, -620,
4048, -626, 4047, -632, 4046, -638, 4045, -644,
4044, -651, 4043, -657, 4042, -663, 4041, -669,
4040, -675, 4039, -682, 4038, -688, 4037, -694,
4036, -700, 4035, -706, 4034, -713, 4032, -719,
4031, -725, 4030, -731, 4029, -737, 4028, -744,
4027, -750, 4026, -756, 4024, -762, 4023, -768,
4022, -774, 4021, -781, 4020, -787, 4019, -793,
4017, -799, 4016, -805, 4015, -811, 4014, -818,
4012, -824, 4011, -830, 4010, -836, 4008, -842,
4007, -848, 4006, -854, 4005, -861, 4003, -867,
4002, -873, 4001, -879, 3999, -885, 3998, -891,
3996, -897, 3995, -904, 3994, -910, 3992, -916,
3991, -922, 3989, -928, 3988, -934, 3987, -940,
3985, -946, 3984, -953, 3982, -959, 3981, -965,
3979, -971, 3978, -977, 3976, -983, 3975, -989,
3973, -995, 3972, -1001, 3970, -1007, 3969, -1014,
3967, -1020, 3965, -1026, 3964, -1032, 3962, -1038,
3961, -1044, 3959, -1050, 3958, -1056, 3956, -1062,
3954, -1068, 3953, -1074, 3951, -1080, 3949, -1086,
3948, -1092, 3946, -1099, 3944, -1105, 3943, -1111,
3941, -1117, 3939, -1123, 3937, -1129, 3936, -1135,
3934, -1141, 3932, -1147, 3930, -1153, 3929, -1159,
3927, -1165, 3925, -1171, 3923, -1177, 3921, -1183,
3920, -1189, 3918, -1195, 3916, -1201, 3914, -1207,
3912, -1213, 3910, -1219, 3909, -1225, 3907, -1231,
3905, -1237, 3903, -1243, 3901, -1249, 3899, -1255,
3897, -1261, 3895, -1267, 3893, -1273, 3891, -1279,
3889, -1285, 3887, -1291, 3885, -1297, 3883, -1303,
3881, -1309, 3879, -1315, 3877, -1321, 3875, -1327,
3873, -1332, 3871, -1338, 3869, -1344, 3867, -1350,
3865, -1356, 3863, -1362, 3861, -1368, 3859, -1374,
3857, -1380, 3854, -1386, 3852, -1392, 3850, -1398,
3848, -1404, 3846, -1409, 3844, -1415, 3842, -1421,
3839, -1427, 3837, -1433, 3835, -1439, 3833, -1445,
3831, -1451, 3828, -1457, 3826, -1462, 3824, -1468,
3822, -1474, 3819, -1480, 3817, -1486, 3815, -1492,
3812, -1498, 3810, -1503, 3808, -1509, 3805, -1515,
3803, -1521, 3801, -1527, 3798, -1533, 3796, -1538,
3794, -1544, 3791, -1550, 3789, -1556, 3787, -1562,
3784, -1567, 3782, -1573, 3779, -1579, 3777, -1585,
3775, -1591, 3772, -1596, 3770, -1602, 3767, -1608,
3765, -1614, 3762, -1620, 3760, -1625, 3757, -1631,
3755, -1637, 3752, -1643, 3750, -1648, 3747, -1654,
3745, -1660, 3742, -1666, 3739, -1671, 3737, -1677,
3734, -1683, 3732, -1689, 3729, -1694, 3727, -1700,
3724, -1706, 3721, -1711, 3719, -1717, 3716, -1723,
3713, -1729, 3711, -1734, 3708, -1740, 3705, -1746,
3703, -1751, 3700, -1757, 3697, -1763, 3695, -1768,
3692, -1774, 3689, -1780, 3686, -1785, 3684, -1791,
3681, -1797, 3678, -1802, 3675, -1808, 3673, -1813,
3670, -1819, 3667, -1825, 3664, -1830, 3661, -1836,
3659, -1842, 3656, -1847, 3653, -1853, 3650, -1858,
3647, -1864, 3644, -1870, 3642, -1875, 3639, -1881,
3636, -1886, 3633, -1892, 3630, -1898, 3627, -1903,
3624, -1909, 3621, -1914, 3618, -1920, 3615, -1925,
3612, -1931, 3609, -1936, 3606, -1942, 3603, -1947,
3600, -1953, 3597, -1958, 3594, -1964, 3591, -1970,
3588, -1975, 3585, -1981, 3582, -1986, 3579, -1992,
3576, -1997, 3573, -2002, 3570, -2008, 3567, -2013,
3564, -2019, 3561, -2024, 3558, -2030, 3555, -2035,
3551, -2041, 3548, -2046, 3545, -2052, 3542, -2057,
3539, -2062, 3536, -2068, 3532, -2073, 3529, -2079,
3526, -2084, 3523, -2090, 3520, -2095, 3516, -2100,
3513, -2106, 3510, -2111, 3507, -2117, 3504, -2122,
3500, -2127, 3497, -2133, 3494, -2138, 3490, -2143,
3487, -2149, 3484, -2154, 3481, -2159, 3477, -2165,
3474, -2170, 3471, -2175, 3467, -2181, 3464, -2186,
3461, -2191, 3457, -2197, 3454, -2202, 3450, -2207,
3447, -2213, 3444, -2218, 3440, -2223, 3437, -2228,
3433, -2234, 3430, -2239, 3426, -2244, 3423, -2249,
3420, -2255, 3416, -2260, 3413, -2265, 3409, -2270,
3406, -2276, 3402, -2281, 3399, -2286, 3395, -2291,
3392, -2296, 3388, -2302, 3385, -2307, 3381, -2312,
3378, -2317, 3374, -2322, 3370, -2328, 3367, -2333,
3363, -2338, 3360, -2343, 3356, -2348, 3352, -2353,
3349, -2359, 3345, -2364, 3342, -2369, 3338, -2374,
3334, -2379, 3331, -2384, 3327, -2389, 3323, -2394,
3320, -2399, 3316, -2405, 3312, -2410, 3309, -2415,
3305, -2420, 3301, -2425, 3297, -2430, 3294, -2435,
3290, -2440, 3286, -2445, 3282, -2450, 3279, -2455,
3275, -2460, 3271, -2465, 3267, -2470, 3264, -2475,
3260, -2480, 3256, -2485, 3252, -2490, 3248, -2495,
3244, -2500, 3241, -2505, 3237, -2510, 3233, -2515,
3229, -2520, 3225, -2525, 3221, -2530, 3217, -2535,
3214, -2540, 3210, -2545, 3206, -2550, 3202, -2555,
3198, -2559, 3194, -2564, 3190, -2569, 3186, -2574,
3182, -2579, 3178, -2584, 3174, -2589, 3170, -2594,
3166, -2598, 3162, -2603, 3158, -2608, 3154, -2613,
3150, -2618, 3146, -2623, 3142, -2628, 3138, -2632,
3134, -2637, 3130, -2642, 3126, -2647, 3122, -2652,
3118, -2656, 3114, -2661, 3110, -2666, 3106, -2671,
3102, -2675, 3097, -2680, 3093, -2685, 3089, -2690,
3085, -2694, 3081, -2699, 3077, -2704, 3073, -2709,
3068, -2713, 3064, -2718, 3060, -2723, 3056, -2727,
3052, -2732, 3048, -2737, 3043, -2741, 3039, -2746,
3035, -2751, 3031, -2755, 3026, -2760, 3022, -2765,
3018, -2769, 3014, -2774, 3009, -2779, 3005, -2783,
3001, -2788, 2997, -2792, 2992, -2797, 2988, -2802,
2984, -2806, 2979, -2811, 2975, -2815, 2971, -2820,
2967, -2824, 2962, -2829, 2958, -2833, 2953, -2838,
2949, -2843, 2945, -2847, 2940, -2852, 2936, -2856,
2932, -2861, 2927, -2865, 2923, -2870, 2918, -2874,
2914, -2878, 2910, -2883, 2905, -2887, 2901, -2892,
2896, -2896, 2892, -2901, 2887, -2905, 2883, -2910,
2878, -2914, 2874, -2918, 2870, -2923, 2865, -2927,
2861, -2932, 2856, -2936, 2852, -2940, 2847, -2945,
2843, -2949, 2838, -2953, 2833, -2958, 2829, -2962,
2824, -2967, 2820, -2971, 2815, -2975, 2811, -2979,
2806, -2984, 2802, -2988, 2797, -2992, 2792, -2997,
2788, -3001, 2783, -3005, 2779, -3009, 2774, -3014,
2769, -3018, 2765, -3022, 2760, -3026, 2755, -3031,
2751, -3035, 2746, -3039, 2741, -3043, 2737, -3048,
2732, -3052, 2727, -3056, 2723, -3060, 2718, -3064,
2713, -3068, 2709, -3073, 2704, -3077, 2699, -3081,
2694, -3085, 2690, -3089, 2685, -3093, 2680, -3097,
2675, -3102, 2671, -3106, 2666, -3110, 2661, -3114,
2656, -3118, 2652, -3122, 2647, -3126, 2642, -3130,
2637, -3134, 2632, -3138, 2628, -3142, 2623, -3146,
2618, -3150, 2613, -3154, 2608, -3158, 2603, -3162,
2598, -3166, 2594, -3170, 2589, -3174, 2584, -3178,
2579, -3182, 2574, -3186, 2569, -3190, 2564, -3194,
2559, -3198, 2555, -3202, 2550, -3206, 2545, -3210,
2540, -3214, 2535, -3217, 2530, -3221, 2525, -3225,
2520, -3229, 2515, -3233, 2510, -3237, 2505, -3241,
2500, -3244, 2495, -3248, 2490, -3252, 2485, -3256,
2480, -3260, 2475, -3264, 2470, -3267, 2465, -3271,
2460, -3275, 2455, -3279, 2450, -3282, 2445, -3286,
2440, -3290, 2435, -3294, 2430, -3297, 2425, -3301,
2420, -3305, 2415, -3309, 2410, -3312, 2405, -3316,
2399, -3320, 2394, -3323, 2389, -3327, 2384, -3331,
2379, -3334, 2374, -3338, 2369, -3342, 2364, -3345,
2359, -3349, 2353, -3352, 2348, -3356, 2343, -3360,
2338, -3363, 2333, -3367, 2328, -3370, 2322, -3374,
2317, -3378, 2312, -3381, 2307, -3385, 2302, -3388,
2296, -3392, 2291, -3395, 2286, -3399, 2281, -3402,
2276, -3406, 2270, -3409, 2265, -3413, 2260, -3416,
2255, -3420, 2249, -3423, 2244, -3426, 2239, -3430,
2234, -3433, 2228, -3437, 2223, -3440, 2218, -3444,
2213, -3447, 2207, -3450, 2202, -3454, 2197, -3457,
2191, -3461, 2186, -3464, 2181, -3467, 2175, -3471,
2170, -3474, 2165, -3477, 2159, -3481, 2154, -3484,
2149, -3487, 2143, -3490, 2138, -3494, 2133, -3497,
2127, -3500, 2122, -3504, 2117, -3507, 2111, -3510,
2106, -3513, 2100, -3516, 2095, -3520, 2090, -3523,
2084, -3526, 2079, -3529, 2073, -3532, 2068, -3536,
2062, -3539, 2057, -3542, 2052, -3545, 2046, -3548,
2041, -3551, 2035, -3555, 2030, -3558, 2024, -3561,
2019, -3564, 2013, -3567, 2008, -3570, 2002, -3573,
1997, -3576, 1992, -3579, 1986, -3582, 1981, -3585,
1975, -3588, 1970, -3591, 1964, -3594, 1958, -3597,
1953, -3600, 1947, -3603, 1942, -3606, 1936, -3609,
1931, -3612, 1925, -3615, 1920, -3618, 1914, -3621,
1909, -3624, 1903, -3627, 1898, -3630, 1892, -3633,
1886, -3636, 1881, -3639, 1875, -3642, 1870, -3644,
1864, -3647, 1858, -3650, 1853, -3653, 1847, -3656,
1842, -3659, 1836, -3661, 1830, -3664, 1825, -3667,
1819, -3670, 1813, -3673, 1808, -3675, 1802, -3678,
1797, -3681, 1791, -3684, 1785, -3686, 1780, -3689,
1774, -3692, 1768, -3695, 1763, -3697, 1757, -3700,
1751, -3703, 1746, -3705, 1740, -3708, 1734, -3711,
1729, -3713, 1723, -3716, 1717, -3719, 1711, -3721,
1706, -3724, 1700, -3727, 1694, -3729, 1689, -3732,
1683, -3734, 1677, -3737, 1671, -3739, 1666, -3742,
1660, -3745, 1654, -3747, 1648, -3750, 1643, -3752,
1637, -3755, 1631, -3757, 1625, -3760, 1620, -3762,
1614, -3765, 1608, -3767, 1602, -3770, 1596, -3772,
1591, -3775, 1585, -3777, 1579, -3779, 1573, -3782,
1567, -3784, 1562, -3787, 1556, -3789, 1550, -3791,
1544, -3794, 1538, -3796, 1533, -3798, 1527, -3801,
1521, -3803, 1515, -3805, 1509, -3808, 1503, -3810,
1498, -3812, 1492, -3815, 1486, -3817, 1480, -3819,
1474, -3822, 1468, -3824, 1462, -3826, 1457, -3828,
1451, -3831, 1445, -3833, 1439, -3835, 1433, -3837,
1427, -3839, 1421, -3842, 1415, -3844, 1409, -3846,
1404, -3848, 1398, -3850, 1392, -3852, 1386, -3854,
1380, -3857, 1374, -3859, 1368, -3861, 1362, -3863,
1356, -3865, 1350, -3867, 1344, -3869, 1338, -3871,
1332, -3873, 1327, -3875, 1321, -3877, 1315, -3879,
1309, -3881, 1303, -3883, 1297, -3885, 1291, -3887,
1285, -3889, 1279, -3891, 1273, -3893, 1267, -3895,
1261, -3897, 1255, -3899, 1249, -3901, 1243, -3903,
1237, -3905, 1231, -3907, 1225, -3909, 1219, -3910,
1213, -3912, 1207, -3914, 1201, -3916, 1195, -3918,
1189, -3920, 1183, -3921, 1177, -3923, 1171, -3925,
1165, -3927, 1159, -3929, 1153, -3930, 1147, -3932,
1141, -3934, 1135, -3936, 1129, -3937, 1123, -3939,
1117, -3941, 1111, -3943, 1105, -3944, 1099, -3946,
1092, -3948, 1086, -3949, 1080, -3951, 1074, -3953,
1068, -3954, 1062, -3956, 1056, -3958, 1050, -3959,
1044, -3961, 1038, -3962, 1032, -3964, 1026, -3965,
1020, -3967, 1014, -3969, 1007, -3970, 1001, -3972,
995, -3973, 989, -3975, 983, -3976, 977, -3978,
971, -3979, 965, -3981, 959, -3982, 953, -3984,
946, -3985, 940, -3987, 934, -3988, 928, -3989,
922, -3991, 916, -3992, 910, -3994, 904, -3995,
897, -3996, 891, -3998, 885, -3999, 879, -4001,
873, -4002, 867, -4003, 861, -4005, 854, -4006,
848, -4007, 842, -4008, 836, -4010, 830, -4011,
824, -4012, 818, -4014, 811, -4015, 805, -4016,
799, -4017, 793, -4019, 787, -4020, 781, -4021,
774, -4022, 768, -4023, 762, -4024, 756, -4026,
750, -4027, 744, -4028, 737, -4029, 731, -4030,
725, -4031, 719, -4032, 713, -4034, 706, -4035,
700, -4036, 694, -4037, 688, -4038, 682, -4039,
675, -4040, 669, -4041, 663, -4042, 657, -4043,
651, -4044, 644, -4045, 638, -4046, 632, -4047,
626, -4048, 620, -4049, 613, -4050, 607, -4051,
601, -4052, 595, -4053, 589, -4053, 582, -4054,
576, -4055, 570, -4056, 564, -4057, 557, -4058,
551, -4059, 545, -4060, 539, -4060, 533, -4061,
526, -4062, 520, -4063, 514, -4064, 508, -4064,
501, -4065, 495, -4066, 489, -4067, 483, -4067,
476, -4068, 470, -4069, 464, -4070, 458, -4070,
451, -4071, 445, -4072, 439, -4072, 433, -4073,
426, -4074, 420, -4074, 414, -4075, 408, -4076,
401, -4076, 395, -4077, 389, -4077, 383, -4078,
376, -4079, 370, -4079, 364, -4080, 358, -4080,
351, -4081, 345, -4081, 339, -4082, 333, -4082,
326, -4083, 320, -4083, 314, -4084, 308, -4084,
301, -4085, 295, -4085, 289, -4086, 283, -4086,
276, -4087, 270, -4087, 264, -4088, 257, -4088,
251, -4088, 245, -4089, 239, -4089, 232, -4089,
226, -4090, 220, -4090, 214, -4090, 207, -4091,
201, -4091, 195, -4091, 188, -4092, 182, -4092,
176, -4092, 170, -4092, 163, -4093, 157, -4093,
151, -4093, 144, -4093, 138, -4094, 132, -4094,
126, -4094, 119, -4094, 113, -4094, 107, -4095,
101, -4095, 94, -4095, 88, -4095, 82, -4095,
75, -4095, 69, -4095, 63, -4096, 57, -4096,
50, -4096, 44, -4096, 38, -4096, 31, -4096,
25, -4096, 19, -4096, 13, -4096, 6, -4096,
0, -4096, -6, -4096, -13, -4096, -19, -4096,
-25, -4096, -31, -4096, -38, -4096, -44, -4096,
-50, -4096, -57, -4096, -63, -4096, -69, -4095,
-75, -4095, -82, -4095, -88, -4095, -94, -4095,
-101, -4095, -107, -4095, -113, -4094, -119, -4094,
-126, -4094, -132, -4094, -138, -4094, -144, -4093,
-151, -4093, -157, -4093, -163, -4093, -170, -4092,
-176, -4092, -182, -4092, -188, -4092, -195, -4091,
-201, -4091, -207, -4091, -214, -4090, -220, -4090,
-226, -4090, -232, -4089, -239, -4089, -245, -4089,
-251, -4088, -257, -4088, -264, -4088, -270, -4087,
-276, -4087, -283, -4086, -289, -4086, -295, -4085,
-301, -4085, -308, -4084, -314, -4084, -320, -4083,
-326, -4083, -333, -4082, -339, -4082, -345, -4081,
-351, -4081, -358, -4080, -364, -4080, -370, -4079,
-376, -4079, -383, -4078, -389, -4077, -395, -4077,
-401, -4076, -408, -4076, -414, -4075, -420, -4074,
-426, -4074, -433, -4073, -439, -4072, -445, -4072,
-451, -4071, -458, -4070, -464, -4070, -470, -4069,
-476, -4068, -483, -4067, -489, -4067, -495, -4066,
-501, -4065, -508, -4064, -514, -4064, -520, -4063,
-526, -4062, -533, -4061, -539, -4060, -545, -4060,
-551, -4059, -557, -4058, -564, -4057, -570, -4056,
-576, -4055, -582, -4054, -589, -4053, -595, -4053,
-601, -4052, -607, -4051, -613, -4050, -620, -4049,
-626, -4048, -632, -4047, -638, -4046, -644, -4045,
-651, -4044, -657, -4043, -663, -4042, -669, -4041,
-675, -4040, -682, -4039, -688, -4038, -694, -4037,
-700, -4036, -706, -4035, -713, -4034, -719, -4032,
-725, -4031, -731, -4030, -737, -4029, -744, -4028,
-750, -4027, -756, -4026, -762, -4024, -768, -4023,
-774, -4022, -781, -4021, -787, -4020, -793, -4019,
-799, -4017, -805, -4016, -811, -4015, -818, -4014,
-824, -4012, -830, -4011, -836, -4010, -842, -4008,
-848, -4007, -854, -4006, -861, -4005, -867, -4003,
-873, -4002, -879, -4001, -885, -3999, -891, -3998,
-897, -3996, -904, -3995, -910, -3994, -916, -3992,
-922, -3991, -928, -3989, -934, -3988, -940, -3987,
-946, -3985, -953, -3984, -959, -3982, -965, -3981,
-971, -3979, -977, -3978, -983, -3976, -989, -3975,
-995, -3973, -1001, -3972, -1007, -3970, -1014, -3969,
-1020, -3967, -1026, -3965, -1032, -3964, -1038, -3962,
-1044, -3961, -1050, -3959, -1056, -3958, -1062, -3956,
-1068, -3954, -1074, -3953, -1080, -3951, -1086, -3949,
-1092, -3948, -1099, -3946, -1105, -3944, -1111, -3943,
-1117, -3941, -1123, -3939, -1129, -3937, -1135, -3936,
-1141, -3934, -1147, -3932, -1153, -3930, -1159, -3929,
-1165, -3927, -1171, -3925, -1177, -3923, -1183, -3921,
-1189, -3920, -1195, -3918, -1201, -3916, -1207, -3914,
-1213, -3912, -1219, -3910, -1225, -3909, -1231, -3907,
-1237, -3905, -1243, -3903, -1249, -3901, -1255, -3899,
-1261, -3897, -1267, -3895, -1273, -3893, -1279, -3891,
-1285, -3889, -1291, -3887, -1297, -3885, -1303, -3883,
-1309, -3881, -1315, -3879, -1321, -3877, -1327, -3875,
-1332, -3873, -1338, -3871, -1344, -3869, -1350, -3867,
-1356, -3865, -1362, -3863, -1368, -3861, -1374, -3859,
-1380, -3857, -1386, -3854, -1392, -3852, -1398, -3850,
-1404, -3848, -1409, -3846, -1415, -3844, -1421, -3842,
-1427, -3839, -1433, -3837, -1439, -3835, -1445, -3833,
-1451, -3831, -1457, -3828, -1462, -3826, -1468, -3824,
-1474, -3822, -1480, -3819, -1486, -3817, -1492, -3815,
-1498, -3812, -1503, -3810, -1509, -3808, -1515, -3805,
-1521, -3803, -1527, -3801, -1533, -3798, -1538, -3796,
-1544, -3794, -1550, -3791, -1556, -3789, -1562, -3787,
-1567, -3784, -1573, -3782, -1579, -3779, -1585, -3777,
-1591, -3775, -1596, -3772, -1602, -3770, -1608, -3767,
-1614, -3765, -1620, -3762, -1625, -3760, -1631, -3757,
-1637, -3755, -1643, -3752, -1648, -3750, -1654, -3747,
-1660, -3745, -1666, -3742, -1671, -3739, -1677, -3737,
-1683, -3734, -1689, -3732, -1694, -3729, -1700, -3727,
-1706, -3724, -1711, -3721, -1717, -3719, -1723, -3716,
-1729, -3713, -1734, -3711, -1740, -3708, -1746, -3705,
-1751, -3703, -1757, -3700, -1763, -3697, -1768, -3695,
-1774, -3692, -1780, -3689, -1785, -3686, -1791, -3684,
-1797, -3681, -1802, -3678, -1808, -3675, -1813, -3673,
-1819, -3670, -1825, -3667, -1830, -3664, -1836, -3661,
-1842, -3659, -1847, -3656, -1853, -3653, -1858, -3650,
-1864, -3647, -1870, -3644, -1875, -3642, -1881, -3639,
-1886, -3636, -1892, -3633, -1898, -3630, -1903, -3627,
-1909, -3624, -1914, -3621, -1920, -3618, -1925, -3615,
-1931, -3612, -1936, -3609, -1942, -3606, -1947, -3603,
-1953, -3600, -1958, -3597, -1964, -3594, -1970, -3591,
-1975, -3588, -1981, -3585, -1986, -3582, -1992, -3579,
-1997, -3576, -2002, -3573, -2008, -3570, -2013, -3567,
-2019, -3564, -2024, -3561, -2030, -3558, -2035, -3555,
-2041, -3551, -2046, -3548, -2052, -3545, -2057, -3542,
-2062, -3539, -2068, -3536, -2073, -3532, -2079, -3529,
-2084, -3526, -2090, -3523, -2095, -3520, -2100, -3516,
-2106, -3513, -2111, -3510, -2117, -3507, -2122, -3504,
-2127, -3500, -2133, -3497, -2138, -3494, -2143, -3490,
-2149, -3487, -2154, -3484, -2159, -3481, -2165, -3477,
-2170, -3474, -2175, -3471, -2181, -3467, -2186, -3464,
-2191, -3461, -2197, -3457, -2202, -3454, -2207, -3450,
-2213, -3447, -2218, -3444, -2223, -3440, -2228, -3437,
-2234, -3433, -2239, -3430, -2244, -3426, -2249, -3423,
-2255, -3420, -2260, -3416, -2265, -3413, -2270, -3409,
-2276, -3406, -2281, -3402, -2286, -3399, -2291, -3395,
-2296, -3392, -2302, -3388, -2307, -3385, -2312, -3381,
-2317, -3378, -2322, -3374, -2328, -3370, -2333, -3367,
-2338, -3363, -2343, -3360, -2348, -3356, -2353, -3352,
-2359, -3349, -2364, -3345, -2369, -3342, -2374, -3338,
-2379, -3334, -2384, -3331, -2389, -3327, -2394, -3323,
-2399, -3320, -2405, -3316, -2410, -3312, -2415, -3309,
-2420, -3305, -2425, -3301, -2430, -3297, -2435, -3294,
-2440, -3290, -2445, -3286, -2450, -3282, -2455, -3279,
-2460, -3275, -2465, -3271, -2470, -3267, -2475, -3264,
-2480, -3260, -2485, -3256, -2490, -3252, -2495, -3248,
-2500, -3244, -2505, -3241, -2510, -3237, -2515, -3233,
-2520, -3229, -2525, -3225, -2530, -3221, -2535, -3217,
-2540, -3214, -2545, -3210, -2550, -3206, -2555, -3202,
-2559, -3198, -2564, -3194, -2569, -3190, -2574, -3186,
-2579, -3182, -2584, -3178, -2589, -3174, -2594, -3170,
-2598, -3166, -2603, -3162, -2608, -3158, -2613, -3154,
-2618, -3150, -2623, -3146, -2628, -3142, -2632, -3138,
-2637, -3134, -2642, -3130, -2647, -3126, -2652, -3122,
-2656, -3118, -2661, -3114, -2666, -3110, -2671, -3106,
-2675, -3102, -2680, -3097, -2685, -3093, -2690, -3089,
-2694, -3085, -2699, -3081, -2704, -3077, -2709, -3073,
-2713, -3068, -2718, -3064, -2723, -3060, -2727, -3056,
-2732, -3052, -2737, -3048, -2741, -3043, -2746, -3039,
-2751, -3035, -2755, -3031, -2760, -3026, -2765, -3022,
-2769, -3018, -2774, -3014, -2779, -3009, -2783, -3005,
-2788, -3001, -2792, -2997, -2797, -2992, -2802, -2988,
-2806, -2984, -2811, -2979, -2815, -2975, -2820, -2971,
-2824, -2967, -2829, -2962, -2833, -2958, -2838, -2953,
-2843, -2949, -2847, -2945, -2852, -2940, -2856, -2936,
-2861, -2932, -2865, -2927, -2870, -2923, -2874, -2918,
-2878, -2914, -2883, -2910, -2887, -2905, -2892, -2901,
-2896, -2896, -2901, -2892, -2905, -2887, -2910, -2883,
-2914, -2878, -2918, -2874, -2923, -2870, -2927, -2865,
-2932, -2861, -2936, -2856, -2940, -2852, -2945, -2847,
-2949, -2843, -2953, -2838, -2958, -2833, -2962, -2829,
-2967, -2824, -2971, -2820, -2975, -2815, -2979, -2811,
-2984, -2806, -2988, -2802, -2992, -2797, -2997, -2792,
-3001, -2788, -3005, -2783, -3009, -2779, -3014, -2774,
-3018, -2769, -3022, -2765, -3026, -2760, -3031, -2755,
-3035, -2751, -3039, -2746, -3043, -2741, -3048, -2737,
-3052, -2732, -3056, -2727, -3060, -2723, -3064, -2718,
-3068, -2713, -3073, -2709, -3077, -2704, -3081, -2699,
-3085, -2694, -3089, -2690, -3093, -2685, -3097, -2680,
-3102, -2675, -3106, -2671, -3110, -2666, -3114, -2661,
-3118, -2656, -3122, -2652, -3126, -2647, -3130, -2642,
-3134, -2637, -3138, -2632, -3142, -2628, -3146, -2623,
-3150, -2618, -3154, -2613, -3158, -2608, -3162, -2603,
-3166, -2598, -3170, -2594, -3174, -2589, -3178, -2584,
-3182, -2579, -3186, -2574, -3190, -2569, -3194, -2564,
-3198, -2559, -3202, -2555, -3206, -2550, -3210, -2545,
-3214, -2540, -3217, -2535, -3221, -2530, -3225, -2525,
-3229, -2520, -3233, -2515, -3237, -2510, -3241, -2505,
-3244, -2500, -3248, -2495, -3252, -2490, -3256, -2485,
-3260, -2480, -3264, -2475, -3267, -2470, -3271, -2465,
-3275, -2460, -3279, -2455, -3282, -2450, -3286, -2445,
-3290, -2440, -3294, -2435, -3297, -2430, -3301, -2425,
-3305, -2420, -3309, -2415, -3312, -2410, -3316, -2405,
-3320, -2399, -3323, -2394, -3327, -2389, -3331, -2384,
-3334, -2379, -3338, -2374, -3342, -2369, -3345, -2364,
-3349, -2359, -3352, -2353, -3356, -2348, -3360, -2343,
-3363, -2338, -3367, -2333, -3370, -2328, -3374, -2322,
-3378, -2317, -3381, -2312, -3385, -2307, -3388, -2302,
-3392, -2296, -3395, -2291, -3399, -2286, -3402, -2281,
-3406, -2276, -3409, -2270, -3413, -2265, -3416, -2260,
-3420, -2255, -3423, -2249, -3426, -2244, -3430, -2239,
-3433, -2234, -3437, -2228, -3440, -2223, -3444, -2218,
-3447, -2213, -3450, -2207, -3454, -2202, -3457, -2197,
-3461, -2191, -3464, -2186, -3467, -2181, -3471, -2175,
-3474, -2170, -3477, -2165, -3481, -2159, -3484, -2154,
-3487, -2149, -3490, -2143, -3494, -2138, -3497, -2133,
-3500, -2127, -3504, -2122, -3507, -2117, -3510, -2111,
-3513, -2106, -3516, -2100, -3520, -2095, -3523, -2090,
-3526, -2084, -3529, -2079, -3532, -2073, -3536, -2068,
-3539, -2062, -3542, -2057, -3545, -2052, -3548, -2046,
-3551, -2041, -3555, -2035, -3558, -2030, -3561, -2024,
-3564, -2019, -3567, -2013, -3570, -2008, -3573, -2002,
-3576, -1997, -3579, -1992, -3582, -1986, -3585, -1981,
-3588, -1975, -3591, -1970, -3594, -1964, -3597, -1958,
-3600, -1953, -3603, -1947, -3606, -1942, -3609, -1936,
-3612, -1931, -3615, -1925, -3618, -1920, -3621, -1914,
-3624, -1909, -3627, -1903, -3630, -1898, -3633, -1892,
-3636, -1886, -3639, -1881, -3642, -1875, -3644, -1870,
-3647, -1864, -3650, -1858, -3653, -1853, -3656, -1847,
-3659, -1842, -3661, -1836, -3664, -1830, -3667, -1825,
-3670, -1819, -3673, -1813, -3675, -1808, -3678, -1802,
-3681, -1797, -3684, -1791, -3686, -1785, -3689, -1780,
-3692, -1774, -3695, -1768, -3697, -1763, -3700, -1757,
-3703, -1751, -3705, -1746, -3708, -1740, -3711, -1734,
-3713, -1729, -3716, -1723, -3719, -1717, -3721, -1711,
-3724, -1706, -3727, -1700, -3729, -1694, -3732, -1689,
-3734, -1683, -3737, -1677, -3739, -1671, -3742, -1666,
-3745, -1660, -3747, -1654, -3750, -1648, -3752, -1643,
-3755, -1637, -3757, -1631, -3760, -1625, -3762, -1620,
-3765, -1614, -3767, -1608, -3770, -1602, -3772, -1596,
-3775, -1591, -3777, -1585, -3779, -1579, -3782, -1573,
-3784, -1567, -3787, -1562, -3789, -1556, -3791, -1550,
-3794, -1544, -3796, -1538, -3798, -1533, -3801, -1527,
-3803, -1521, -3805, -1515, -3808, -1509, -3810, -1503,
-3812, -1498, -3815, -1492, -3817, -1486, -3819, -1480,
-3822, -1474, -3824, -1468, -3826, -1462, -3828, -1457,
-3831, -1451, -3833, -1445, -3835, -1439, -3837, -1433,
-3839, -1427, -3842, -1421, -3844, -1415, -3846, -1409,
-3848, -1404, -3850, -1398, -3852, -1392, -3854, -1386,
-3857, -1380, -3859, -1374, -3861, -1368, -3863, -1362,
-3865, -1356, -3867, -1350, -3869, -1344, -3871, -1338,
-3873, -1332, -3875, -1327, -3877, -1321, -3879, -1315,
-3881, -1309, -3883, -1303, -3885, -1297, -3887, -1291,
-3889, -1285, -3891, -1279, -3893, -1273, -3895, -1267,
-3897, -1261, -3899, -1255, -3901, -1249, -3903, -1243,
-3905, -1237, -3907, -1231, -3909, -1225, -3910, -1219,
-3912, -1213, -3914, -1207, -3916, -1201, -3918, -1195,
-3920, -1189, -3921, -1183, -3923, -1177, -3925, -1171,
-3927, -1165, -3929, -1159, -3930, -1153, -3932, -1147,
-3934, -1141, -3936, -1135, -3937, -1129, -3939, -1123,
-3941, -1117, -3943, -1111, -3944, -1105, -3946, -1099,
-3948, -1092, -3949, -1086, -3951, -1080, -3953, -1074,
-3954, -1068, -3956, -1062, -3958, -1056, -3959, -1050,
-3961, -1044, -3962, -1038, -3964, -1032, -3965, -1026,
-3967, -1020, -3969, -1014, -3970, -1007, -3972, -1001,
-3973, -995, -3975, -989, -3976, -983, -3978, -977,
-3979, -971, -3981, -965, -3982, -959, -3984, -953,
-3985, -946, -3987, -940, -3988, -934, -3989, -928,
-3991, -922, -3992, -916, -3994, -910, -3995, -904,
-3996, -897, -3998, -891, -3999, -885, -4001, -879,
-4002, -873, -4003, -867, -4005, -861, -4006, -854,
-4007, -848, -4008, -842, -4010, -836, -4011, -830,
-4012, -824, -4014, -818, -4015, -811, -4016, -805,
-4017, -799, -4019, -793, -4020, -787, -4021, -781,
-4022, -774, -4023, -768, -4024, -762, -4026, -756,
-4027, -750, -4028, -744, -4029, -737, -4030, -731,
-4031, -725, -4032, -719, -4034, -713, -4035, -706,
-4036, -700, -4037, -694, -4038, -688, -4039, -682,
-4040, -675, -4041, -669, -4042, -663, -4043, -657,
-4044, -651, -4045, -644, -4046, -638, -4047, -632,
-4048, -626, -4049, -620, -4050, -613, -4051, -607,
-4052, -601, -4053, -595, -4053, -589, -4054, -582,
-4055, -576, -4056, -570, -4057, -564, -4058, -557,
-4059, -551, -4060, -545, -4060, -539, -4061, -533,
-4062, -526, -4063, -520, -4064, -514, -4064, -508,
-4065, -501, -4066, -495, -4067, -489, -4067, -483,
-4068, -476, -4069, -470, -4070, -464, -4070, -458,
-4071, -451, -4072, -445, -4072, -439, -4073, -433,
-4074, -426, -4074, -420, -4075, -414, -4076, -408,
-4076, -401, -4077, -395, -4077, -389, -4078, -383,
-4079, -376, -4079, -370, -4080, -364, -4080, -358,
-4081, -351, -4081, -345, -4082, -339, -4082, -333,
-4083, -326, -4083, -320, -4084, -314, -4084, -308,
-4085, -301, -4085, -295, -4086, -289, -4086, -283,
-4087, -276, -4087, -270, -4088, -264, -4088, -257,
-4088, -251, -4089, -245, -4089, -239, -4089, -232,
-4090, -226, -4090, -220, -4090, -214, -4091, -207,
-4091, -201, -4091, -195, -4092, -188, -4092, -182,
-4092, -176, -4092, -170, -4093, -163, -4093, -157,
-4093, -151, -4093, -144, -4094, -138, -4094, -132,
-4094, -126, -4094, -119, -4094, -113, -4095, -107,
-4095, -101, -4095, -94, -4095, -88, -4095, -82,
-4095, -75, -4095, -69, -4096, -63, -4096, -57,
-4096, -50, -4096, -44, -4096, -38, -4096, -31,
-4096, -25, -4096, -19, -4096, -13, -4096, -6,
-4096, 0, -4096, 6, -4096, 13, -4096, 19,
-4096, 25, -4096, 31, -4096, 38, -4096, 44,
-4096, 50, -4096, 57, -4096, 63, -4095, 69,
-4095, 75, -4095, 82, -4095, 88, -4095, 94,
-4095, 101, -4095, 107, -4094, 113, -4094, 119,
-4094, 126, -4094, 132, -4094, 138, -4093, 144,
-4093, 151, -4093, 157, -4093, 163, -4092, 170,
-4092, 176, -4092, 182, -4092, 188, -4091, 195,
-4091, 201, -4091, 207, -4090, 214, -4090, 220,
-4090, 226, -4089, 232, -4089, 239, -4089, 245,
-4088, 251, -4088, 257, -4088, 264, -4087, 270,
-4087, 276, -4086, 283, -4086, 289, -4085, 295,
-4085, 301, -4084, 308, -4084, 314, -4083, 320,
-4083, 326, -4082, 333, -4082, 339, -4081, 345,
-4081, 351, -4080, 358, -4080, 364, -4079, 370,
-4079, 376, -4078, 383, -4077, 389, -4077, 395,
-4076, 401, -4076, 408, -4075, 414, -4074, 420,
-4074, 426, -4073, 433, -4072, 439, -4072, 445,
-4071, 451, -4070, 458, -4070, 464, -4069, 470,
-4068, 476, -4067, 483, -4067, 489, -4066, 495,
-4065, 501, -4064, 508, -4064, 514, -4063, 520,
-4062, 526, -4061, 533, -4060, 539, -4060, 545,
-4059, 551, -4058, 557, -4057, 564, -4056, 570,
-4055, 576, -4054, 582, -4053, 589, -4053, 595,
-4052, 601, -4051, 607, -4050, 613, -4049, 620,
-4048, 626, -4047, 632, -4046, 638, -4045, 644,
-4044, 651, -4043, 657, -4042, 663, -4041, 669,
-4040, 675, -4039, 682, -4038, 688, -4037, 694,
-4036, 700, -4035, 706, -4034, 713, -4032, 719,
-4031, 725, -4030, 731, -4029, 737, -4028, 744,
-4027, 750, -4026, 756, -4024, 762, -4023, 768,
-4022, 774, -4021, 781, -4020, 787, -4019, 793,
-4017, 799, -4016, 805, -4015, 811, -4014, 818,
-4012, 824, -4011, 830, -4010, 836, -4008, 842,
-4007, 848, -4006, 854, -4005, 861, -4003, 867,
-4002, 873, -4001, 879, -3999, 885, -3998, 891,
-3996, 897, -3995, 904, -3994, 910, -3992, 916,
-3991, 922, -3989, 928, -3988, 934, -3987, 940,
-3985, 946, -3984, 953, -3982, 959, -3981, 965,
-3979, 971, -3978, 977, -3976, 983, -3975, 989,
-3973, 995, -3972, 1001, -3970, 1007, -3969, 1014,
-3967, 1020, -3965, 1026, -3964, 1032, -3962, 1038,
-3961, 1044, -3959, 1050, -3958, 1056, -3956, 1062,
-3954, 1068, -3953, 1074, -3951, 1080, -3949, 1086,
-3948, 1092, -3946, 1099, -3944, 1105, -3943, 1111,
-3941, 1117, -3939, 1123, -3937, 1129, -3936, 1135,
-3934, 1141, -3932, 1147, -3930, 1153, -3929, 1159,
-3927, 1165, -3925, 1171, -3923, 1177, -3921, 1183,
-3920, 1189, -3918, 1195, -3916, 1201, -3914, 1207,
-3912, 1213, -3910, 1219, -3909, 1225, -3907, 1231,
-3905, 1237, -3903, 1243, -3901, 1249, -3899, 1255,
-3897, 1261, -3895, 1267, -3893, 1273, -3891, 1279,
-3889, 1285, -3887, 1291, -3885, 1297, -3883, 1303,
-3881, 1309, -3879, 1315, -3877, 1321, -3875, 1327,
-3873, 1332, -3871, 1338, -3869, 1344, -3867, 1350,
-3865, 1356, -3863, 1362, -3861, 1368, -3859, 1374,
-3857, 1380, -3854, 1386, -3852, 1392, -3850, 1398,
-3848, 1404, -3846, 1409, -3844, 1415, -3842, 1421,
-3839, 1427, -3837, 1433, -3835, 1439, -3833, 1445,
-3831, 1451, -3828, 1457, -3826, 1462, -3824, 1468,
-3822, 1474, -3819, 1480, -3817, 1486, -3815, 1492,
-3812, 1498, -3810, 1503, -3808, 1509, -3805, 1515,
-3803, 1521, -3801, 1527, -3798, 1533, -3796, 1538,
-3794, 1544, -3791, 1550, -3789, 1556, -3787, 1562,
-3784, 1567, -3782, 1573, -3779, 1579, -3777, 1585,
-3775, 1591, -3772, 1596, -3770, 1602, -3767, 1608,
-3765, 1614, -3762, 1620, -3760, 1625, -3757, 1631,
-3755, 1637, -3752, 1643, -3750, 1648, -3747, 1654,
-3745, 1660, -3742, 1666, -3739, 1671, -3737, 1677,
-3734, 1683, -3732, 1689, -3729, 1694, -3727, 1700,
-3724, 1706, -3721, 1711, -3719, 1717, -3716, 1723,
-3713, 1729, -3711, 1734, -3708, 1740, -3705, 1746,
-3703, 1751, -3700, 1757, -3697, 1763, -3695, 1768,
-3692, 1774, -3689, 1780, -3686, 1785, -3684, 1791,
-3681, 1797, -3678, 1802, -3675, 1808, -3673, 1813,
-3670, 1819, -3667, 1825, -3664, 1830, -3661, 1836,
-3659, 1842, -3656, 1847, -3653, 1853, -3650, 1858,
-3647, 1864, -3644, 1870, -3642, 1875, -3639, 1881,
-3636, 1886, -3633, 1892, -3630, 1898, -3627, 1903,
-3624, 1909, -3621, 1914, -3618, 1920, -3615, 1925,
-3612, 1931, -3609, 1936, -3606, 1942, -3603, 1947,
-3600, 1953, -3597, 1958, -3594, 1964, -3591, 1970,
-3588, 1975, -3585, 1981, -3582, 1986, -3579, 1992,
-3576, 1997, -3573, 2002, -3570, 2008, -3567, 2013,
-3564, 2019, -3561, 2024, -3558, 2030, -3555, 2035,
-3551, 2041, -3548, 2046, -3545, 2052, -3542, 2057,
-3539, 2062, -3536, 2068, -3532, 2073, -3529, 2079,
-3526, 2084, -3523, 2090, -3520, 2095, -3516, 2100,
-3513, 2106, -3510, 2111, -3507, 2117, -3504, 2122,
-3500, 2127, -3497, 2133, -3494, 2138, -3490, 2143,
-3487, 2149, -3484, 2154, -3481, 2159, -3477, 2165,
-3474, 2170, -3471, 2175, -3467, 2181, -3464, 2186,
-3461, 2191, -3457, 2197, -3454, 2202, -3450, 2207,
-3447, 2213, -3444, 2218, -3440, 2223, -3437, 2228,
-3433, 2234, -3430, 2239, -3426, 2244, -3423, 2249,
-3420, 2255, -3416, 2260, -3413, 2265, -3409, 2270,
-3406, 2276, -3402, 2281, -3399, 2286, -3395, 2291,
-3392, 2296, -3388, 2302, -3385, 2307, -3381, 2312,
-3378, 2317, -3374, 2322, -3370, 2328, -3367, 2333,
-3363, 2338, -3360, 2343, -3356, 2348, -3352, 2353,
-3349, 2359, -3345, 2364, -3342, 2369, -3338, 2374,
-3334, 2379, -3331, 2384, -3327, 2389, -3323, 2394,
-3320, 2399, -3316, 2405, -3312, 2410, -3309, 2415,
-3305, 2420, -3301, 2425, -3297, 2430, -3294, 2435,
-3290, 2440, -3286, 2445, -3282, 2450, -3279, 2455,
-3275, 2460, -3271, 2465, -3267, 2470, -3264, 2475,
-3260, 2480, -3256, 2485, -3252, 2490, -3248, 2495,
-3244, 2500, -3241, 2505, -3237, 2510, -3233, 2515,
-3229, 2520, -3225, 2525, -3221, 2530, -3217, 2535,
-3214, 2540, -3210, 2545, -3206, 2550, -3202, 2555,
-3198, 2559, -3194, 2564, -3190, 2569, -3186, 2574,
-3182, 2579, -3178, 2584, -3174, 2589, -3170, 2594,
-3166, 2598, -3162, 2603, -3158, 2608, -3154, 2613,
-3150, 2618, -3146, 2623, -3142, 2628, -3138, 2632,
-3134, 2637, -3130, 2642, -3126, 2647, -3122, 2652,
-3118, 2656, -3114, 2661, -3110, 2666, -3106, 2671,
-3102, 2675, -3097, 2680, -3093, 2685, -3089, 2690,
-3085, 2694, -3081, 2699, -3077, 2704, -3073, 2709,
-3068, 2713, -3064, 2718, -3060, 2723, -3056, 2727,
-3052, 2732, -3048, 2737, -3043, 2741, -3039, 2746,
-3035, 2751, -3031, 2755, -3026, 2760, -3022, 2765,
-3018, 2769, -3014, 2774, -3009, 2779, -3005, 2783,
-3001, 2788, -2997, 2792, -2992, 2797, -2988, 2802,
-2984, 2806, -2979, 2811, -2975, 2815, -2971, 2820,
-2967, 2824, -2962, 2829, -2958, 2833, -2953, 2838,
-2949, 2843, -2945, 2847, -2940, 2852, -2936, 2856,
-2932, 2861, -2927, 2865, -2923, 2870, -2918, 2874,
-2914, 2878, -2910, 2883, -2905, 2887, -2901, 2892,
-2896, 2896, -2892, 2901, -2887, 2905, -2883, 2910,
-2878, 2914, -2874, 2918, -2870, 2923, -2865, 2927,
-2861, 2932, -2856, 2936, -2852, 2940, -2847, 2945,
-2843, 2949, -2838, 2953, -2833, 2958, -2829, 2962,
-2824, 2967, -2820, 2971, -2815, 2975, -2811, 2979,
-2806, 2984, -2802, 2988, -2797, 2992, -2792, 2997,
-2788, 3001, -2783, 3005, -2779, 3009, -2774, 3014,
-2769, 3018, -2765, 3022, -2760, 3026, -2755, 3031,
-2751, 3035, -2746, 3039, -2741, 3043, -2737, 3048,
-2732, 3052, -2727, 3056, -2723, 3060, -2718, 3064,
-2713, 3068, -2709, 3073, -2704, 3077, -2699, 3081,
-2694, 3085, -2690, 3089, -2685, 3093, -2680, 3097,
-2675, 3102, -2671, 3106, -2666, 3110, -2661, 3114,
-2656, 3118, -2652, 3122, -2647, 3126, -2642, 3130,
-2637, 3134, -2632, 3138, -2628, 3142, -2623, 3146,
-2618, 3150, -2613, 3154, -2608, 3158, -2603, 3162,
-2598, 3166, -2594, 3170, -2589, 3174, -2584, 3178,
-2579, 3182, -2574, 3186, -2569, 3190, -2564, 3194,
-2559, 3198, -2555, 3202, -2550, 3206, -2545, 3210,
-2540, 3214, -2535, 3217, -2530, 3221, -2525, 3225,
-2520, 3229, -2515, 3233, -2510, 3237, -2505, 3241,
-2500, 3244, -2495, 3248, -2490, 3252, -2485, 3256,
-2480, 3260, -2475, 3264, -2470, 3267, -2465, 3271,
-2460, 3275, -2455, 3279, -2450, 3282, -2445, 3286,
-2440, 3290, -2435, 3294, -2430, 3297, -2425, 3301,
-2420, 3305, -2415, 3309, -2410, 3312, -2405, 3316,
-2399, 3320, -2394, 3323, -2389, 3327, -2384, 3331,
-2379, 3334, -2374, 3338, -2369, 3342, -2364, 3345,
-2359, 3349, -2353, 3352, -2348, 3356, -2343, 3360,
-2338, 3363, -2333, 3367, -2328, 3370, -2322, 3374,
-2317, 3378, -2312, 3381, -2307, 3385, -2302, 3388,
-2296, 3392, -2291, 3395, -2286, 3399, -2281, 3402,
-2276, 3406, -2270, 3409, -2265, 3413, -2260, 3416,
-2255, 3420, -2249, 3423, -2244, 3426, -2239, 3430,
-2234, 3433, -2228, 3437, -2223, 3440, -2218, 3444,
-2213, 3447, -2207, 3450, -2202, 3454, -2197, 3457,
-2191, 3461, -2186, 3464, -2181, 3467, -2175, 3471,
-2170, 3474, -2165, 3477, -2159, 3481, -2154, 3484,
-2149, 3487, -2143, 3490, -2138, 3494, -2133, 3497,
-2127, 3500, -2122, 3504, -2117, 3507, -2111, 3510,
-2106, 3513, -2100, 3516, -2095, 3520, -2090, 3523,
-2084, 3526, -2079, 3529, -2073, 3532, -2068, 3536,
-2062, 3539, -2057, 3542, -2052, 3545, -2046, 3548,
-2041, 3551, -2035, 3555, -2030, 3558, -2024, 3561,
-2019, 3564, -2013, 3567, -2008, 3570, -2002, 3573,
-1997, 3576, -1992, 3579, -1986, 3582, -1981, 3585,
-1975, 3588, -1970, 3591, -1964, 3594, -1958, 3597,
-1953, 3600, -1947, 3603, -1942, 3606, -1936, 3609,
-1931, 3612, -1925, 3615, -1920, 3618, -1914, 3621,
-1909, 3624, -1903, 3627, -1898, 3630, -1892, 3633,
-1886, 3636, -1881, 3639, -1875, 3642, -1870, 3644,
-1864, 3647, -1858, 3650, -1853, 3653, -1847, 3656,
-1842, 3659, -1836, 3661, -1830, 3664, -1825, 3667,
-1819, 3670, -1813, 3673, -1808, 3675, -1802, 3678,
-1797, 3681, -1791, 3684, -1785, 3686, -1780, 3689,
-1774, 3692, -1768, 3695, -1763, 3697, -1757, 3700,
-1751, 3703, -1746, 3705, -1740, 3708, -1734, 3711,
-1729, 3713, -1723, 3716, -1717, 3719, -1711, 3721,
-1706, 3724, -1700, 3727, -1694, 3729, -1689, 3732,
-1683, 3734, -1677, 3737, -1671, 3739, -1666, 3742,
-1660, 3745, -1654, 3747, -1648, 3750, -1643, 3752,
-1637, 3755, -1631, 3757, -1625, 3760, -1620, 3762,
-1614, 3765, -1608, 3767, -1602, 3770, -1596, 3772,
-1591, 3775, -1585, 3777, -1579, 3779, -1573, 3782,
-1567, 3784, -1562, 3787, -1556, 3789, -1550, 3791,
-1544, 3794, -1538, 3796, -1533, 3798, -1527, 3801,
-1521, 3803, -1515, 3805, -1509, 3808, -1503, 3810,
-1498, 3812, -1492, 3815, -1486, 3817, -1480, 3819,
-1474, 3822, -1468, 3824, -1462, 3826, -1457, 3828,
-1451, 3831, -1445, 3833, -1439, 3835, -1433, 3837,
-1427, 3839, -1421, 3842, -1415, 3844, -1409, 3846,
-1404, 3848, -1398, 3850, -1392, 3852, -1386, 3854,
-1380, 3857, -1374, 3859, -1368, 3861, -1362, 3863,
-1356, 3865, -1350, 3867, -1344, 3869, -1338, 3871,
-1332, 3873, -1327, 3875, -1321, 3877, -1315, 3879,
-1309, 3881, -1303, 3883, -1297, 3885, -1291, 3887,
-1285, 3889, -1279, 3891, -1273, 3893, -1267, 3895,
-1261, 3897, -1255, 3899, -1249, 3901, -1243, 3903,
-1237, 3905, -1231, 3907, -1225, 3909, -1219, 3910,
-1213, 3912, -1207, 3914, -1201, 3916, -1195, 3918,
-1189, 3920, -1183, 3921, -1177, 3923, -1171, 3925,
-1165, 3927, -1159, 3929, -1153, 3930, -1147, 3932,
-1141, 3934, -1135, 3936, -1129, 3937, -1123, 3939,
-1117, 3941, -1111, 3943, -1105, 3944, -1099, 3946,
-1092, 3948, -1086, 3949, -1080, 3951, -1074, 3953,
-1068, 3954, -1062, 3956, -1056, 3958, -1050, 3959,
-1044, 3961, -1038, 3962, -1032, 3964, -1026, 3965,
-1020, 3967, -1014, 3969, -1007, 3970, -1001, 3972,
-995, 3973, -989, 3975, -983, 3976, -977, 3978,
-971, 3979, -965, 3981, -959, 3982, -953, 3984,
-946, 3985, -940, 3987, -934, 3988, -928, 3989,
-922, 3991, -916, 3992, -910, 3994, -904, 3995,
-897, 3996, -891, 3998, -885, 3999, -879, 4001,
-873, 4002, -867, 4003, -861, 4005, -854, 4006,
-848, 4007, -842, 4008, -836, 4010, -830, 4011,
-824, 4012, -818, 4014, -811, 4015, -805, 4016,
-799, 4017, -793, 4019, -787, 4020, -781, 4021,
-774, 4022, -768, 4023, -762, 4024, -756, 4026,
-750, 4027, -744, 4028, -737, 4029, -731, 4030,
-725, 4031, -719, 4032, -713, 4034, -706, 4035,
-700, 4036, -694, 4037, -688, 4038, -682, 4039,
-675, 4040, -669, 4041, -663, 4042, -657, 4043,
-651, 4044, -644, 4045, -638, 4046, -632, 4047,
-626, 4048, -620, 4049, -613, 4050, -607, 4051,
-601, 4052, -595, 4053, -589, 4053, -582, 4054,
-576, 4055, -570, 4056, -564, 4057, -557, 4058,
-551, 4059, -545, 4060, -539, 4060, -533, 4061,
-526, 4062, -520, 4063, -514, 4064, -508, 4064,
-501, 4065, -495, 4066, -489, 4067, -483, 4067,
-476, 4068, -470, 4069, -464, 4070, -458, 4070,
-451, 4071, -445, 4072, -439, 4072, -433, 4073,
-426, 4074, -420, 4074, -414, 4075, -408, 4076,
-401, 4076, -395, 4077, -389, 4077, -383, 4078,
-376, 4079, -370, 4079, -364, 4080, -358, 4080,
-351, 4081, -345, 4081, -339, 4082, -333, 4082,
-326, 4083, -320, 4083, -314, 4084, -308, 4084,
-301, 4085, -295, 4085, -289, 4086, -283, 4086,
-276, 4087, -270, 4087, -264, 4088, -257, 4088,
-251, 4088, -245, 4089, -239, 4089, -232, 4089,
-226, 4090, -220, 4090, -214, 4090, -207, 4091,
-201, 4091, -195, 4091, -188, 4092, -182, 4092,
-176, 4092, -170, 4092, -163, 4093, -157, 4093,
-151, 4093, -144, 4093, -138, 4094, -132, 4094,
-126, 4094, -119, 4094, -113, 4094, -107, 4095,
-101, 4095, -94, 4095, -88, 4095, -82, 4095,
-75, 4095, -69, 4095, -63, 4096, -57, 4096,
-50, 4096, -44, 4096, -38, 4096, -31, 4096,
-25, 4096, -19, 4096, -13, 4096, -6, 4096
};
unsigned int atanOctantTab[] = {
0, // Left Top Y<X 0-45 Base 0
-16384, // Left Top Y>X 45-90 Base -90
-65535, // Left Bot Y<X 315-360 Base -360
49152, // Left Bot Y>X 270-315 Base 270
-32768, // Right Top Y<X 135-180 Base -180
16384, // Right Top Y>X 90-135 Base 90
32768, // Right Bot Y<X 180-225 Base 180
-49152, // Right Bot Y>X 225-270 Base -270
};
unsigned short atanTab[] = {
0x0000, 0x0005, 0x000A, 0x000F, 0x0014, 0x0019, 0x001F, 0x0024,
0x0029, 0x002E, 0x0033, 0x0038, 0x003D, 0x0042, 0x0047, 0x004C,
0x0051, 0x0057, 0x005C, 0x0061, 0x0066, 0x006B, 0x0070, 0x0075,
0x007A, 0x007F, 0x0084, 0x008A, 0x008F, 0x0094, 0x0099, 0x009E,
0x00A3, 0x00A8, 0x00AD, 0x00B2, 0x00B7, 0x00BC, 0x00C2, 0x00C7,
0x00CC, 0x00D1, 0x00D6, 0x00DB, 0x00E0, 0x00E5, 0x00EA, 0x00EF,
0x00F4, 0x00FA, 0x00FF, 0x0104, 0x0109, 0x010E, 0x0113, 0x0118,
0x011D, 0x0122, 0x0127, 0x012C, 0x0131, 0x0137, 0x013C, 0x0141,
0x0146, 0x014B, 0x0150, 0x0155, 0x015A, 0x015F, 0x0164, 0x0169,
0x016F, 0x0174, 0x0179, 0x017E, 0x0183, 0x0188, 0x018D, 0x0192,
0x0197, 0x019C, 0x01A1, 0x01A6, 0x01AC, 0x01B1, 0x01B6, 0x01BB,
0x01C0, 0x01C5, 0x01CA, 0x01CF, 0x01D4, 0x01D9, 0x01DE, 0x01E3,
0x01E9, 0x01EE, 0x01F3, 0x01F8, 0x01FD, 0x0202, 0x0207, 0x020C,
0x0211, 0x0216, 0x021B, 0x0220, 0x0226, 0x022B, 0x0230, 0x0235,
0x023A, 0x023F, 0x0244, 0x0249, 0x024E, 0x0253, 0x0258, 0x025D,
0x0262, 0x0268, 0x026D, 0x0272, 0x0277, 0x027C, 0x0281, 0x0286,
0x028B, 0x0290, 0x0295, 0x029A, 0x029F, 0x02A4, 0x02A9, 0x02AF,
0x02B4, 0x02B9, 0x02BE, 0x02C3, 0x02C8, 0x02CD, 0x02D2, 0x02D7,
0x02DC, 0x02E1, 0x02E6, 0x02EB, 0x02F0, 0x02F6, 0x02FB, 0x0300,
0x0305, 0x030A, 0x030F, 0x0314, 0x0319, 0x031E, 0x0323, 0x0328,
0x032D, 0x0332, 0x0337, 0x033C, 0x0341, 0x0347, 0x034C, 0x0351,
0x0356, 0x035B, 0x0360, 0x0365, 0x036A, 0x036F, 0x0374, 0x0379,
0x037E, 0x0383, 0x0388, 0x038D, 0x0392, 0x0397, 0x039C, 0x03A2,
0x03A7, 0x03AC, 0x03B1, 0x03B6, 0x03BB, 0x03C0, 0x03C5, 0x03CA,
0x03CF, 0x03D4, 0x03D9, 0x03DE, 0x03E3, 0x03E8, 0x03ED, 0x03F2,
0x03F7, 0x03FC, 0x0401, 0x0407, 0x040C, 0x0411, 0x0416, 0x041B,
0x0420, 0x0425, 0x042A, 0x042F, 0x0434, 0x0439, 0x043E, 0x0443,
0x0448, 0x044D, 0x0452, 0x0457, 0x045C, 0x0461, 0x0466, 0x046B,
0x0470, 0x0475, 0x047A, 0x047F, 0x0484, 0x0489, 0x048E, 0x0494,
0x0499, 0x049E, 0x04A3, 0x04A8, 0x04AD, 0x04B2, 0x04B7, 0x04BC,
0x04C1, 0x04C6, 0x04CB, 0x04D0, 0x04D5, 0x04DA, 0x04DF, 0x04E4,
0x04E9, 0x04EE, 0x04F3, 0x04F8, 0x04FD, 0x0502, 0x0507, 0x050C,
0x0511, 0x0516, 0x051B, 0x0520, 0x0525, 0x052A, 0x052F, 0x0534,
0x0539, 0x053E, 0x0543, 0x0548, 0x054D, 0x0552, 0x0557, 0x055C,
0x0561, 0x0566, 0x056B, 0x0570, 0x0575, 0x057A, 0x057F, 0x0584,
0x0589, 0x058E, 0x0593, 0x0598, 0x059D, 0x05A2, 0x05A7, 0x05AC,
0x05B1, 0x05B6, 0x05BB, 0x05C0, 0x05C5, 0x05CA, 0x05CF, 0x05D4,
0x05D9, 0x05DE, 0x05E3, 0x05E8, 0x05ED, 0x05F2, 0x05F7, 0x05FC,
0x0601, 0x0606, 0x060B, 0x0610, 0x0615, 0x061A, 0x061F, 0x0624,
0x0629, 0x062E, 0x0633, 0x0638, 0x063D, 0x0642, 0x0647, 0x064C,
0x0651, 0x0656, 0x065B, 0x0660, 0x0665, 0x066A, 0x066E, 0x0673,
0x0678, 0x067D, 0x0682, 0x0687, 0x068C, 0x0691, 0x0696, 0x069B,
0x06A0, 0x06A5, 0x06AA, 0x06AF, 0x06B4, 0x06B9, 0x06BE, 0x06C3,
0x06C8, 0x06CD, 0x06D2, 0x06D7, 0x06DC, 0x06E1, 0x06E5, 0x06EA,
0x06EF, 0x06F4, 0x06F9, 0x06FE, 0x0703, 0x0708, 0x070D, 0x0712,
0x0717, 0x071C, 0x0721, 0x0726, 0x072B, 0x0730, 0x0735, 0x0739,
0x073E, 0x0743, 0x0748, 0x074D, 0x0752, 0x0757, 0x075C, 0x0761,
0x0766, 0x076B, 0x0770, 0x0775, 0x077A, 0x077E, 0x0783, 0x0788,
0x078D, 0x0792, 0x0797, 0x079C, 0x07A1, 0x07A6, 0x07AB, 0x07B0,
0x07B5, 0x07B9, 0x07BE, 0x07C3, 0x07C8, 0x07CD, 0x07D2, 0x07D7,
0x07DC, 0x07E1, 0x07E6, 0x07EB, 0x07EF, 0x07F4, 0x07F9, 0x07FE,
0x0803, 0x0808, 0x080D, 0x0812, 0x0817, 0x081C, 0x0820, 0x0825,
0x082A, 0x082F, 0x0834, 0x0839, 0x083E, 0x0843, 0x0848, 0x084C,
0x0851, 0x0856, 0x085B, 0x0860, 0x0865, 0x086A, 0x086F, 0x0873,
0x0878, 0x087D, 0x0882, 0x0887, 0x088C, 0x0891, 0x0896, 0x089A,
0x089F, 0x08A4, 0x08A9, 0x08AE, 0x08B3, 0x08B8, 0x08BD, 0x08C1,
0x08C6, 0x08CB, 0x08D0, 0x08D5, 0x08DA, 0x08DF, 0x08E3, 0x08E8,
0x08ED, 0x08F2, 0x08F7, 0x08FC, 0x0901, 0x0905, 0x090A, 0x090F,
0x0914, 0x0919, 0x091E, 0x0922, 0x0927, 0x092C, 0x0931, 0x0936,
0x093B, 0x093F, 0x0944, 0x0949, 0x094E, 0x0953, 0x0958, 0x095C,
0x0961, 0x0966, 0x096B, 0x0970, 0x0975, 0x0979, 0x097E, 0x0983,
0x0988, 0x098D, 0x0992, 0x0996, 0x099B, 0x09A0, 0x09A5, 0x09AA,
0x09AE, 0x09B3, 0x09B8, 0x09BD, 0x09C2, 0x09C6, 0x09CB, 0x09D0,
0x09D5, 0x09DA, 0x09DE, 0x09E3, 0x09E8, 0x09ED, 0x09F2, 0x09F6,
0x09FB, 0x0A00, 0x0A05, 0x0A0A, 0x0A0E, 0x0A13, 0x0A18, 0x0A1D,
0x0A22, 0x0A26, 0x0A2B, 0x0A30, 0x0A35, 0x0A39, 0x0A3E, 0x0A43,
0x0A48, 0x0A4D, 0x0A51, 0x0A56, 0x0A5B, 0x0A60, 0x0A64, 0x0A69,
0x0A6E, 0x0A73, 0x0A77, 0x0A7C, 0x0A81, 0x0A86, 0x0A8B, 0x0A8F,
0x0A94, 0x0A99, 0x0A9E, 0x0AA2, 0x0AA7, 0x0AAC, 0x0AB1, 0x0AB5,
0x0ABA, 0x0ABF, 0x0AC4, 0x0AC8, 0x0ACD, 0x0AD2, 0x0AD7, 0x0ADB,
0x0AE0, 0x0AE5, 0x0AE9, 0x0AEE, 0x0AF3, 0x0AF8, 0x0AFC, 0x0B01,
0x0B06, 0x0B0B, 0x0B0F, 0x0B14, 0x0B19, 0x0B1E, 0x0B22, 0x0B27,
0x0B2C, 0x0B30, 0x0B35, 0x0B3A, 0x0B3F, 0x0B43, 0x0B48, 0x0B4D,
0x0B51, 0x0B56, 0x0B5B, 0x0B60, 0x0B64, 0x0B69, 0x0B6E, 0x0B72,
0x0B77, 0x0B7C, 0x0B80, 0x0B85, 0x0B8A, 0x0B8F, 0x0B93, 0x0B98,
0x0B9D, 0x0BA1, 0x0BA6, 0x0BAB, 0x0BAF, 0x0BB4, 0x0BB9, 0x0BBD,
0x0BC2, 0x0BC7, 0x0BCB, 0x0BD0, 0x0BD5, 0x0BD9, 0x0BDE, 0x0BE3,
0x0BE7, 0x0BEC, 0x0BF1, 0x0BF5, 0x0BFA, 0x0BFF, 0x0C03, 0x0C08,
0x0C0D, 0x0C11, 0x0C16, 0x0C1B, 0x0C1F, 0x0C24, 0x0C29, 0x0C2D,
0x0C32, 0x0C37, 0x0C3B, 0x0C40, 0x0C45, 0x0C49, 0x0C4E, 0x0C53,
0x0C57, 0x0C5C, 0x0C60, 0x0C65, 0x0C6A, 0x0C6E, 0x0C73, 0x0C78,
0x0C7C, 0x0C81, 0x0C86, 0x0C8A, 0x0C8F, 0x0C93, 0x0C98, 0x0C9D,
0x0CA1, 0x0CA6, 0x0CAB, 0x0CAF, 0x0CB4, 0x0CB8, 0x0CBD, 0x0CC2,
0x0CC6, 0x0CCB, 0x0CCF, 0x0CD4, 0x0CD9, 0x0CDD, 0x0CE2, 0x0CE6,
0x0CEB, 0x0CF0, 0x0CF4, 0x0CF9, 0x0CFD, 0x0D02, 0x0D07, 0x0D0B,
0x0D10, 0x0D14, 0x0D19, 0x0D1E, 0x0D22, 0x0D27, 0x0D2B, 0x0D30,
0x0D34, 0x0D39, 0x0D3E, 0x0D42, 0x0D47, 0x0D4B, 0x0D50, 0x0D54,
0x0D59, 0x0D5E, 0x0D62, 0x0D67, 0x0D6B, 0x0D70, 0x0D74, 0x0D79,
0x0D7D, 0x0D82, 0x0D87, 0x0D8B, 0x0D90, 0x0D94, 0x0D99, 0x0D9D,
0x0DA2, 0x0DA6, 0x0DAB, 0x0DAF, 0x0DB4, 0x0DB9, 0x0DBD, 0x0DC2,
0x0DC6, 0x0DCB, 0x0DCF, 0x0DD4, 0x0DD8, 0x0DDD, 0x0DE1, 0x0DE6,
0x0DEA, 0x0DEF, 0x0DF3, 0x0DF8, 0x0DFC, 0x0E01, 0x0E05, 0x0E0A,
0x0E0F, 0x0E13, 0x0E18, 0x0E1C, 0x0E21, 0x0E25, 0x0E2A, 0x0E2E,
0x0E33, 0x0E37, 0x0E3C, 0x0E40, 0x0E45, 0x0E49, 0x0E4E, 0x0E52,
0x0E56, 0x0E5B, 0x0E5F, 0x0E64, 0x0E68, 0x0E6D, 0x0E71, 0x0E76,
0x0E7A, 0x0E7F, 0x0E83, 0x0E88, 0x0E8C, 0x0E91, 0x0E95, 0x0E9A,
0x0E9E, 0x0EA3, 0x0EA7, 0x0EAC, 0x0EB0, 0x0EB4, 0x0EB9, 0x0EBD,
0x0EC2, 0x0EC6, 0x0ECB, 0x0ECF, 0x0ED4, 0x0ED8, 0x0EDC, 0x0EE1,
0x0EE5, 0x0EEA, 0x0EEE, 0x0EF3, 0x0EF7, 0x0EFC, 0x0F00, 0x0F04,
0x0F09, 0x0F0D, 0x0F12, 0x0F16, 0x0F1B, 0x0F1F, 0x0F23, 0x0F28,
0x0F2C, 0x0F31, 0x0F35, 0x0F3A, 0x0F3E, 0x0F42, 0x0F47, 0x0F4B,
0x0F50, 0x0F54, 0x0F58, 0x0F5D, 0x0F61, 0x0F66, 0x0F6A, 0x0F6E,
0x0F73, 0x0F77, 0x0F7C, 0x0F80, 0x0F84, 0x0F89, 0x0F8D, 0x0F91,
0x0F96, 0x0F9A, 0x0F9F, 0x0FA3, 0x0FA7, 0x0FAC, 0x0FB0, 0x0FB5,
0x0FB9, 0x0FBD, 0x0FC2, 0x0FC6, 0x0FCA, 0x0FCF, 0x0FD3, 0x0FD7,
0x0FDC, 0x0FE0, 0x0FE5, 0x0FE9, 0x0FED, 0x0FF2, 0x0FF6, 0x0FFA,
0x0FFF, 0x1003, 0x1007, 0x100C, 0x1010, 0x1014, 0x1019, 0x101D,
0x1021, 0x1026, 0x102A, 0x102E, 0x1033, 0x1037, 0x103B, 0x1040,
0x1044, 0x1048, 0x104D, 0x1051, 0x1055, 0x105A, 0x105E, 0x1062,
0x1067, 0x106B, 0x106F, 0x1073, 0x1078, 0x107C, 0x1080, 0x1085,
0x1089, 0x108D, 0x1092, 0x1096, 0x109A, 0x109E, 0x10A3, 0x10A7,
0x10AB, 0x10B0, 0x10B4, 0x10B8, 0x10BC, 0x10C1, 0x10C5, 0x10C9,
0x10CE, 0x10D2, 0x10D6, 0x10DA, 0x10DF, 0x10E3, 0x10E7, 0x10EB,
0x10F0, 0x10F4, 0x10F8, 0x10FD, 0x1101, 0x1105, 0x1109, 0x110E,
0x1112, 0x1116, 0x111A, 0x111F, 0x1123, 0x1127, 0x112B, 0x1130,
0x1134, 0x1138, 0x113C, 0x1140, 0x1145, 0x1149, 0x114D, 0x1151,
0x1156, 0x115A, 0x115E, 0x1162, 0x1166, 0x116B, 0x116F, 0x1173,
0x1177, 0x117C, 0x1180, 0x1184, 0x1188, 0x118C, 0x1191, 0x1195,
0x1199, 0x119D, 0x11A1, 0x11A6, 0x11AA, 0x11AE, 0x11B2, 0x11B6,
0x11BB, 0x11BF, 0x11C3, 0x11C7, 0x11CB, 0x11CF, 0x11D4, 0x11D8,
0x11DC, 0x11E0, 0x11E4, 0x11E9, 0x11ED, 0x11F1, 0x11F5, 0x11F9,
0x11FD, 0x1202, 0x1206, 0x120A, 0x120E, 0x1212, 0x1216, 0x121A,
0x121F, 0x1223, 0x1227, 0x122B, 0x122F, 0x1233, 0x1237, 0x123C,
0x1240, 0x1244, 0x1248, 0x124C, 0x1250, 0x1254, 0x1259, 0x125D,
0x1261, 0x1265, 0x1269, 0x126D, 0x1271, 0x1275, 0x127A, 0x127E,
0x1282, 0x1286, 0x128A, 0x128E, 0x1292, 0x1296, 0x129A, 0x129F,
0x12A3, 0x12A7, 0x12AB, 0x12AF, 0x12B3, 0x12B7, 0x12BB, 0x12BF,
0x12C3, 0x12C7, 0x12CC, 0x12D0, 0x12D4, 0x12D8, 0x12DC, 0x12E0,
0x12E4, 0x12E8, 0x12EC, 0x12F0, 0x12F4, 0x12F8, 0x12FC, 0x1301,
0x1305, 0x1309, 0x130D, 0x1311, 0x1315, 0x1319, 0x131D, 0x1321,
0x1325, 0x1329, 0x132D, 0x1331, 0x1335, 0x1339, 0x133D, 0x1341,
0x1345, 0x1349, 0x134D, 0x1351, 0x1355, 0x135A, 0x135E, 0x1362,
0x1366, 0x136A, 0x136E, 0x1372, 0x1376, 0x137A, 0x137E, 0x1382,
0x1386, 0x138A, 0x138E, 0x1392, 0x1396, 0x139A, 0x139E, 0x13A2,
0x13A6, 0x13AA, 0x13AE, 0x13B2, 0x13B6, 0x13BA, 0x13BE, 0x13C2,
0x13C6, 0x13CA, 0x13CE, 0x13D2, 0x13D6, 0x13DA, 0x13DE, 0x13E2,
0x13E6, 0x13E9, 0x13ED, 0x13F1, 0x13F5, 0x13F9, 0x13FD, 0x1401,
0x1405, 0x1409, 0x140D, 0x1411, 0x1415, 0x1419, 0x141D, 0x1421,
0x1425, 0x1429, 0x142D, 0x1431, 0x1435, 0x1439, 0x143D, 0x1440,
0x1444, 0x1448, 0x144C, 0x1450, 0x1454, 0x1458, 0x145C, 0x1460,
0x1464, 0x1468, 0x146C, 0x1470, 0x1473, 0x1477, 0x147B, 0x147F,
0x1483, 0x1487, 0x148B, 0x148F, 0x1493, 0x1497, 0x149B, 0x149E,
0x14A2, 0x14A6, 0x14AA, 0x14AE, 0x14B2, 0x14B6, 0x14BA, 0x14BE,
0x14C1, 0x14C5, 0x14C9, 0x14CD, 0x14D1, 0x14D5, 0x14D9, 0x14DD,
0x14E0, 0x14E4, 0x14E8, 0x14EC, 0x14F0, 0x14F4, 0x14F8, 0x14FB,
0x14FF, 0x1503, 0x1507, 0x150B, 0x150F, 0x1513, 0x1516, 0x151A,
0x151E, 0x1522, 0x1526, 0x152A, 0x152D, 0x1531, 0x1535, 0x1539,
0x153D, 0x1541, 0x1544, 0x1548, 0x154C, 0x1550, 0x1554, 0x1558,
0x155B, 0x155F, 0x1563, 0x1567, 0x156B, 0x156E, 0x1572, 0x1576,
0x157A, 0x157E, 0x1581, 0x1585, 0x1589, 0x158D, 0x1591, 0x1594,
0x1598, 0x159C, 0x15A0, 0x15A4, 0x15A7, 0x15AB, 0x15AF, 0x15B3,
0x15B7, 0x15BA, 0x15BE, 0x15C2, 0x15C6, 0x15C9, 0x15CD, 0x15D1,
0x15D5, 0x15D8, 0x15DC, 0x15E0, 0x15E4, 0x15E8, 0x15EB, 0x15EF,
0x15F3, 0x15F7, 0x15FA, 0x15FE, 0x1602, 0x1606, 0x1609, 0x160D,
0x1611, 0x1614, 0x1618, 0x161C, 0x1620, 0x1623, 0x1627, 0x162B,
0x162F, 0x1632, 0x1636, 0x163A, 0x163E, 0x1641, 0x1645, 0x1649,
0x164C, 0x1650, 0x1654, 0x1658, 0x165B, 0x165F, 0x1663, 0x1666,
0x166A, 0x166E, 0x1671, 0x1675, 0x1679, 0x167D, 0x1680, 0x1684,
0x1688, 0x168B, 0x168F, 0x1693, 0x1696, 0x169A, 0x169E, 0x16A1,
0x16A5, 0x16A9, 0x16AC, 0x16B0, 0x16B4, 0x16B7, 0x16BB, 0x16BF,
0x16C2, 0x16C6, 0x16CA, 0x16CD, 0x16D1, 0x16D5, 0x16D8, 0x16DC,
0x16E0, 0x16E3, 0x16E7, 0x16EB, 0x16EE, 0x16F2, 0x16F6, 0x16F9,
0x16FD, 0x1700, 0x1704, 0x1708, 0x170B, 0x170F, 0x1713, 0x1716,
0x171A, 0x171D, 0x1721, 0x1725, 0x1728, 0x172C, 0x1730, 0x1733,
0x1737, 0x173A, 0x173E, 0x1742, 0x1745, 0x1749, 0x174C, 0x1750,
0x1754, 0x1757, 0x175B, 0x175E, 0x1762, 0x1766, 0x1769, 0x176D,
0x1770, 0x1774, 0x1778, 0x177B, 0x177F, 0x1782, 0x1786, 0x1789,
0x178D, 0x1791, 0x1794, 0x1798, 0x179B, 0x179F, 0x17A2, 0x17A6,
0x17AA, 0x17AD, 0x17B1, 0x17B4, 0x17B8, 0x17BB, 0x17BF, 0x17C2,
0x17C6, 0x17C9, 0x17CD, 0x17D1, 0x17D4, 0x17D8, 0x17DB, 0x17DF,
0x17E2, 0x17E6, 0x17E9, 0x17ED, 0x17F0, 0x17F4, 0x17F7, 0x17FB,
0x17FE, 0x1802, 0x1806, 0x1809, 0x180D, 0x1810, 0x1814, 0x1817,
0x181B, 0x181E, 0x1822, 0x1825, 0x1829, 0x182C, 0x1830, 0x1833,
0x1837, 0x183A, 0x183E, 0x1841, 0x1845, 0x1848, 0x184C, 0x184F,
0x1853, 0x1856, 0x185A, 0x185D, 0x1860, 0x1864, 0x1867, 0x186B,
0x186E, 0x1872, 0x1875, 0x1879, 0x187C, 0x1880, 0x1883, 0x1887,
0x188A, 0x188E, 0x1891, 0x1894, 0x1898, 0x189B, 0x189F, 0x18A2,
0x18A6, 0x18A9, 0x18AD, 0x18B0, 0x18B3, 0x18B7, 0x18BA, 0x18BE,
0x18C1, 0x18C5, 0x18C8, 0x18CC, 0x18CF, 0x18D2, 0x18D6, 0x18D9,
0x18DD, 0x18E0, 0x18E3, 0x18E7, 0x18EA, 0x18EE, 0x18F1, 0x18F5,
0x18F8, 0x18FB, 0x18FF, 0x1902, 0x1906, 0x1909, 0x190C, 0x1910,
0x1913, 0x1917, 0x191A, 0x191D, 0x1921, 0x1924, 0x1928, 0x192B,
0x192E, 0x1932, 0x1935, 0x1938, 0x193C, 0x193F, 0x1943, 0x1946,
0x1949, 0x194D, 0x1950, 0x1953, 0x1957, 0x195A, 0x195D, 0x1961,
0x1964, 0x1968, 0x196B, 0x196E, 0x1972, 0x1975, 0x1978, 0x197C,
0x197F, 0x1982, 0x1986, 0x1989, 0x198C, 0x1990, 0x1993, 0x1996,
0x199A, 0x199D, 0x19A0, 0x19A4, 0x19A7, 0x19AA, 0x19AE, 0x19B1,
0x19B4, 0x19B8, 0x19BB, 0x19BE, 0x19C2, 0x19C5, 0x19C8, 0x19CC,
0x19CF, 0x19D2, 0x19D5, 0x19D9, 0x19DC, 0x19DF, 0x19E3, 0x19E6,
0x19E9, 0x19ED, 0x19F0, 0x19F3, 0x19F6, 0x19FA, 0x19FD, 0x1A00,
0x1A04, 0x1A07, 0x1A0A, 0x1A0D, 0x1A11, 0x1A14, 0x1A17, 0x1A1B,
0x1A1E, 0x1A21, 0x1A24, 0x1A28, 0x1A2B, 0x1A2E, 0x1A31, 0x1A35,
0x1A38, 0x1A3B, 0x1A3E, 0x1A42, 0x1A45, 0x1A48, 0x1A4B, 0x1A4F,
0x1A52, 0x1A55, 0x1A58, 0x1A5C, 0x1A5F, 0x1A62, 0x1A65, 0x1A69,
0x1A6C, 0x1A6F, 0x1A72, 0x1A76, 0x1A79, 0x1A7C, 0x1A7F, 0x1A83,
0x1A86, 0x1A89, 0x1A8C, 0x1A8F, 0x1A93, 0x1A96, 0x1A99, 0x1A9C,
0x1A9F, 0x1AA3, 0x1AA6, 0x1AA9, 0x1AAC, 0x1AB0, 0x1AB3, 0x1AB6,
0x1AB9, 0x1ABC, 0x1AC0, 0x1AC3, 0x1AC6, 0x1AC9, 0x1ACC, 0x1ACF,
0x1AD3, 0x1AD6, 0x1AD9, 0x1ADC, 0x1ADF, 0x1AE3, 0x1AE6, 0x1AE9,
0x1AEC, 0x1AEF, 0x1AF2, 0x1AF6, 0x1AF9, 0x1AFC, 0x1AFF, 0x1B02,
0x1B05, 0x1B09, 0x1B0C, 0x1B0F, 0x1B12, 0x1B15, 0x1B18, 0x1B1C,
0x1B1F, 0x1B22, 0x1B25, 0x1B28, 0x1B2B, 0x1B2E, 0x1B32, 0x1B35,
0x1B38, 0x1B3B, 0x1B3E, 0x1B41, 0x1B44, 0x1B48, 0x1B4B, 0x1B4E,
0x1B51, 0x1B54, 0x1B57, 0x1B5A, 0x1B5D, 0x1B61, 0x1B64, 0x1B67,
0x1B6A, 0x1B6D, 0x1B70, 0x1B73, 0x1B76, 0x1B79, 0x1B7D, 0x1B80,
0x1B83, 0x1B86, 0x1B89, 0x1B8C, 0x1B8F, 0x1B92, 0x1B95, 0x1B98,
0x1B9C, 0x1B9F, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BAB, 0x1BAE, 0x1BB1,
0x1BB4, 0x1BB7, 0x1BBA, 0x1BBD, 0x1BC1, 0x1BC4, 0x1BC7, 0x1BCA,
0x1BCD, 0x1BD0, 0x1BD3, 0x1BD6, 0x1BD9, 0x1BDC, 0x1BDF, 0x1BE2,
0x1BE5, 0x1BE8, 0x1BEB, 0x1BEE, 0x1BF2, 0x1BF5, 0x1BF8, 0x1BFB,
0x1BFE, 0x1C01, 0x1C04, 0x1C07, 0x1C0A, 0x1C0D, 0x1C10, 0x1C13,
0x1C16, 0x1C19, 0x1C1C, 0x1C1F, 0x1C22, 0x1C25, 0x1C28, 0x1C2B,
0x1C2E, 0x1C31, 0x1C34, 0x1C37, 0x1C3A, 0x1C3D, 0x1C40, 0x1C43,
0x1C46, 0x1C49, 0x1C4C, 0x1C4F, 0x1C52, 0x1C55, 0x1C58, 0x1C5B,
0x1C5E, 0x1C61, 0x1C64, 0x1C67, 0x1C6A, 0x1C6D, 0x1C70, 0x1C73,
0x1C76, 0x1C79, 0x1C7C, 0x1C7F, 0x1C82, 0x1C85, 0x1C88, 0x1C8B,
0x1C8E, 0x1C91, 0x1C94, 0x1C97, 0x1C9A, 0x1C9D, 0x1CA0, 0x1CA3,
0x1CA6, 0x1CA9, 0x1CAC, 0x1CAF, 0x1CB2, 0x1CB5, 0x1CB8, 0x1CBB,
0x1CBE, 0x1CC1, 0x1CC3, 0x1CC6, 0x1CC9, 0x1CCC, 0x1CCF, 0x1CD2,
0x1CD5, 0x1CD8, 0x1CDB, 0x1CDE, 0x1CE1, 0x1CE4, 0x1CE7, 0x1CEA,
0x1CED, 0x1CF0, 0x1CF3, 0x1CF5, 0x1CF8, 0x1CFB, 0x1CFE, 0x1D01,
0x1D04, 0x1D07, 0x1D0A, 0x1D0D, 0x1D10, 0x1D13, 0x1D16, 0x1D18,
0x1D1B, 0x1D1E, 0x1D21, 0x1D24, 0x1D27, 0x1D2A, 0x1D2D, 0x1D30,
0x1D33, 0x1D35, 0x1D38, 0x1D3B, 0x1D3E, 0x1D41, 0x1D44, 0x1D47,
0x1D4A, 0x1D4D, 0x1D4F, 0x1D52, 0x1D55, 0x1D58, 0x1D5B, 0x1D5E,
0x1D61, 0x1D64, 0x1D66, 0x1D69, 0x1D6C, 0x1D6F, 0x1D72, 0x1D75,
0x1D78, 0x1D7B, 0x1D7D, 0x1D80, 0x1D83, 0x1D86, 0x1D89, 0x1D8C,
0x1D8E, 0x1D91, 0x1D94, 0x1D97, 0x1D9A, 0x1D9D, 0x1DA0, 0x1DA2,
0x1DA5, 0x1DA8, 0x1DAB, 0x1DAE, 0x1DB1, 0x1DB3, 0x1DB6, 0x1DB9,
0x1DBC, 0x1DBF, 0x1DC2, 0x1DC4, 0x1DC7, 0x1DCA, 0x1DCD, 0x1DD0,
0x1DD3, 0x1DD5, 0x1DD8, 0x1DDB, 0x1DDE, 0x1DE1, 0x1DE3, 0x1DE6,
0x1DE9, 0x1DEC, 0x1DEF, 0x1DF1, 0x1DF4, 0x1DF7, 0x1DFA, 0x1DFD,
0x1DFF, 0x1E02, 0x1E05, 0x1E08, 0x1E0B, 0x1E0D, 0x1E10, 0x1E13,
0x1E16, 0x1E19, 0x1E1B, 0x1E1E, 0x1E21, 0x1E24, 0x1E26, 0x1E29,
0x1E2C, 0x1E2F, 0x1E32, 0x1E34, 0x1E37, 0x1E3A, 0x1E3D, 0x1E3F,
0x1E42, 0x1E45, 0x1E48, 0x1E4A, 0x1E4D, 0x1E50, 0x1E53, 0x1E55,
0x1E58, 0x1E5B, 0x1E5E, 0x1E60, 0x1E63, 0x1E66, 0x1E69, 0x1E6B,
0x1E6E, 0x1E71, 0x1E74, 0x1E76, 0x1E79, 0x1E7C, 0x1E7F, 0x1E81,
0x1E84, 0x1E87, 0x1E8A, 0x1E8C, 0x1E8F, 0x1E92, 0x1E94, 0x1E97,
0x1E9A, 0x1E9D, 0x1E9F, 0x1EA2, 0x1EA5, 0x1EA8, 0x1EAA, 0x1EAD,
0x1EB0, 0x1EB2, 0x1EB5, 0x1EB8, 0x1EBA, 0x1EBD, 0x1EC0, 0x1EC3,
0x1EC5, 0x1EC8, 0x1ECB, 0x1ECD, 0x1ED0, 0x1ED3, 0x1ED5, 0x1ED8,
0x1EDB, 0x1EDE, 0x1EE0, 0x1EE3, 0x1EE6, 0x1EE8, 0x1EEB, 0x1EEE,
0x1EF0, 0x1EF3, 0x1EF6, 0x1EF8, 0x1EFB, 0x1EFE, 0x1F00, 0x1F03,
0x1F06, 0x1F08, 0x1F0B, 0x1F0E, 0x1F10, 0x1F13, 0x1F16, 0x1F18,
0x1F1B, 0x1F1E, 0x1F20, 0x1F23, 0x1F26, 0x1F28, 0x1F2B, 0x1F2E,
0x1F30, 0x1F33, 0x1F36, 0x1F38, 0x1F3B, 0x1F3D, 0x1F40, 0x1F43,
0x1F45, 0x1F48, 0x1F4B, 0x1F4D, 0x1F50, 0x1F53, 0x1F55, 0x1F58,
0x1F5A, 0x1F5D, 0x1F60, 0x1F62, 0x1F65, 0x1F68, 0x1F6A, 0x1F6D,
0x1F6F, 0x1F72, 0x1F75, 0x1F77, 0x1F7A, 0x1F7C, 0x1F7F, 0x1F82,
0x1F84, 0x1F87, 0x1F8A, 0x1F8C, 0x1F8F, 0x1F91, 0x1F94, 0x1F97,
0x1F99, 0x1F9C, 0x1F9E, 0x1FA1, 0x1FA4, 0x1FA6, 0x1FA9, 0x1FAB,
0x1FAE, 0x1FB0, 0x1FB3, 0x1FB6, 0x1FB8, 0x1FBB, 0x1FBD, 0x1FC0,
0x1FC3, 0x1FC5, 0x1FC8, 0x1FCA, 0x1FCD, 0x1FCF, 0x1FD2, 0x1FD5,
0x1FD7, 0x1FDA, 0x1FDC, 0x1FDF, 0x1FE1, 0x1FE4, 0x1FE6, 0x1FE9,
0x1FEC, 0x1FEE, 0x1FF1, 0x1FF3, 0x1FF6, 0x1FF8, 0x1FFB, 0x1FFD,
0x2000, 0x2000
};
// fix "improperly terminated macro invocation"
// fix "expression must have integral or unscoped enum type"
2020-04-28 12:24:10 -03:00
short ANGLE(float angle)
{
2020-05-27 20:08:19 +02:00
return angle * 65536.0f / 360.0f;
2019-12-15 16:19:01 +01:00
}
float TO_DEGREES(short angle)
2019-12-15 16:19:01 +01:00
{
2020-05-27 20:08:19 +02:00
return (unsigned short) angle * 360.0f / 65536.0f;
}
float TO_RAD(short angle)
2020-04-28 12:24:10 -03:00
{
2020-05-27 20:08:19 +02:00
return angle * 360.0f / 65536.0f * RADIAN;
2020-04-28 12:24:10 -03:00
}
2020-05-27 19:37:01 +02:00
const float frand()
{
2020-05-23 14:26:06 +02:00
float result = float((float)rand() / RAND_MAX);
return result;
}
const float frandMinMax(float min, float max)
{
2020-05-27 19:37:01 +02:00
return frand() * (max - min) + min;
}
2020-05-27 19:37:01 +02:00
const float lerp(float v0, float v1, float t)
{
return (1 - t) * v0 + t * v1;
}
2020-04-24 19:15:05 +02:00
2020-04-25 16:23:53 +02:00
// FIXME: game code still expects << 2 >> W2V_SHIFT so we multiply by 16384.0f
int phd_sin(short a)
2020-04-24 19:15:05 +02:00
{
2020-04-25 16:23:53 +02:00
return (sin(TO_RAD(a)) * 16384.0f);
2020-04-24 19:15:05 +02:00
}
2020-04-25 16:23:53 +02:00
int phd_cos(short a)
2020-04-24 19:15:05 +02:00
{
2020-04-25 16:23:53 +02:00
return (cos(TO_RAD(a)) * 16384.0f);
2020-04-24 19:15:05 +02:00
}
int mGetAngle(int x1, int y1, int x2, int y2)
{
2020-04-25 07:24:00 +02:00
int x = x2 - x1;
int y = y2 - y1;
2020-04-24 19:15:05 +02:00
2020-04-25 07:24:00 +02:00
if (!x && !y)
2020-04-24 19:15:05 +02:00
return 0;
2020-04-25 07:24:00 +02:00
int octant = 0;
2020-04-24 19:15:05 +02:00
if (x < 0)
{
octant += 4;
x = -x;
}
if (y < 0)
{
octant += 2;
y = -y;
}
if (y > x)
{
octant++;
2020-04-25 07:24:00 +02:00
int n = x;
2020-04-24 19:15:05 +02:00
x = y;
y = n;
}
2020-04-25 07:24:00 +02:00
while ((short)y != y)
{
y >>= 1;
2020-04-24 19:15:05 +02:00
x >>= 1;
}
2020-04-25 07:24:00 +02:00
int n = atanTab[(y << 11) / x] + atanOctantTab[octant];
int angle;
2020-04-24 19:15:05 +02:00
2020-04-25 07:24:00 +02:00
if (n < 0)
angle = -n;
2020-04-24 19:15:05 +02:00
else
angle = n;
2020-04-25 07:24:00 +02:00
return (-angle) & 0xFFFF;
2020-04-24 19:15:05 +02:00
}
2020-04-25 16:23:53 +02:00
int phd_atan(int x, int y)
2020-04-24 19:15:05 +02:00
{
2020-04-25 07:24:00 +02:00
if ((x == 0) && (y == 0))
return 0;
int octant = 0;
if (x < 0)
{
octant += 4;
x = -x;
}
if (y < 0)
{
octant += 2;
y = -y;
}
2020-04-24 19:15:05 +02:00
2020-04-25 07:24:00 +02:00
if (y > x)
{
octant++;
int n = x;
x = y;
y = n;
}
2020-04-24 19:15:05 +02:00
2020-04-25 07:24:00 +02:00
while ((short)y != y)
{
y >>= 1;
x >>= 1;
}
if (!x)
x = 1;
int n = atanTab[(y << 11) / x] + atanOctantTab[octant];
short angle;
if (n < 0)
angle = -n;
else
angle = n;
2020-04-24 19:15:05 +02:00
2020-04-25 07:24:00 +02:00
return angle;
2020-04-25 16:23:53 +02:00
}
void phd_GetVectorAngles(int x, int y, int z, short* angles)
{
angles[0] = phd_atan(z, x);
while ((short)x != x || (short)y != y || (short)z != z)
{
x >>= 2;
y >>= 2;
z >>= 2;
}
int d = sqrt(SQUARE(x) + SQUARE(z));
short angle = phd_atan(d, y);
if (y > 0 && angle > 0 || y < 0 && angle < 0)
angle = -angle;
angles[1] = angle;
}
2020-07-25 18:02:35 +02:00
void phd_RotBoundingBoxNoPersp(PHD_3DPOS* pos, BOUNDING_BOX* bounds, BOUNDING_BOX* tbounds)
2020-04-25 16:23:53 +02:00
{
Matrix world = Matrix::CreateFromYawPitchRoll(
TO_RAD(pos->yRot),
TO_RAD(pos->xRot),
TO_RAD(pos->zRot)
);
2020-07-25 18:02:35 +02:00
Vector3 bMin = Vector3(bounds->X1, bounds->Y1, bounds->Z1);
Vector3 bMax = Vector3(bounds->X2, bounds->Y2, bounds->Z2);
2020-04-25 16:23:53 +02:00
bMin = Vector3::Transform(bMin, world);
bMax = Vector3::Transform(bMax, world);
2020-07-25 18:02:35 +02:00
tbounds->X1 = bMin.x;
tbounds->X2 = bMax.x;
tbounds->Y1 = bMin.y;
tbounds->Y2 = bMax.y;
tbounds->Z1 = bMin.z;
tbounds->Z2 = bMax.z;
2020-04-24 19:15:05 +02:00
}