2 * models for the xss chess screensavers
5 * glChess - A 3D chess interface
7 * Copyright (C) 2006 John-Paul Gignac <jjgignac@users.sf.net>
9 * Copyright (C) 2002 Robert Ancell <bob27@users.sourceforge.net>
10 * Michael Duelli <duelli@users.sourceforge.net>
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 /* chessmodels.c: Contains the code for piece model creation */
31 #endif /* HAVE_CONFIG_H */
48 #endif /* HAVE_JWZGLES */
50 #include "chessmodels.h"
53 #define ENDOFDATA 65535
57 #define VERTICES 65533
59 #define TRIANGLES 65531
60 #define POLARQUADSTRIP 65530
61 #define QUADSTRIP 65529
63 /* Special spin-related commands */
67 #define STEPDOWN 65525
68 #define SETBACKREF 65524
71 static unsigned short classic_pawn_data[] = {
73 350,0,SEAM,350,200,SEAM,250,300,SEAM,250,400,SEAM,150,600,SEAM,100,880,
74 SEAM,180,880,SEAM,100,920,SEAM,200,1160,SEAM,100,1340,0,1340,
78 static unsigned short classic_rook_data[] = {
80 380,0,SEAM,380,200,SEAM,260,500,SEAM,200,1020,SEAM,280,1020,SEAM,280,1360,SEAM,220,1360,SEAM,220,1300,0,1300,
84 static unsigned short classic_knight_data[] = {
86 410,0,SEAM,410,200,SEAM,200,360,SEAM,200,480,260,580,
89 260,580,260, -260,580,260, -260,580,-80, 260,580,-80, 80,1620,400,
90 100,1680,340, -100,1680,340, -80,1620,400, 100,1680,340, 100,1680,300,
91 -100,1680,300, -100,1680,340, 100,1680,300, 50,1680,160, -50,1680,160,
92 -100,1680,300, 50,1680,160, 100,1680,20, -100,1680,20, -50,1680,160,
93 100,1680,20, 100,1680,-20, -100,1680,-20, -100,1680,20, 100,1680,-20,
94 40,1680,-110, -40,1680,-110, -100,1680,-20, 40,1680,-110,
95 100,1680,-200, -100,1680,-200, -40,1680,-110, 100,1680,-200,
96 100,1680,-440, -100,1680,-440, -100,1680,-200, -100,1680,-440,
97 100,1680,-440, 100,1500,-440, -100,1500,-440, -100,1500,-440,
98 100,1500,-440, 55,1480,-280, -55,1480,-280, -100,1680,300, -50,1680,160,
99 -100,1400,130, -120,1380,240, -50,1680,160, -80,1680,20, -120,1380,20,
100 -100,1400,130, -83,1660,20, -80,1680,20, -100,1680,-20, -100,1660,-38,
101 -120,1380,20, -88,1620,20, -100,1620,-74, -120,1360,-20, -120,1360,-20,
102 -100,1620,-74, -100,1580,-110, -60,1400,-140, -100,1680,-200,
103 -55,1480,-280, -60,1400,-140, -100,1580,-110, -100,1680,-200,
104 -100,1680,-440, -100,1500,-440, -55,1480,-280, 100,1680,300,
105 120,1380,240, 100,1400,130, 50,1680,160, 50,1680,160, 100,1400,130,
106 120,1380,20, 80,1680,20, 83,1660,20, 100,1660,-38, 100,1680,-20,
107 80,1680,20, 120,1380,20, 120,1360,-20, 100,1620,-74, 88,1620,20,
108 120,1360,-20, 60,1400,-140, 100,1580,-110, 100,1620,-74, 100,1680,-200,
109 100,1580,-110, 60,1400,-140, 55,1480,-280, 100,1680,-200, 55,1480,-280,
110 100,1500,-440, 100,1680,-440, 88,1620,20, 100,1620,-74, 80,1640,-56,
111 61,1640,20, 61,1640,20, 80,1640,-56, 100,1660,-38, 83,1660,20,
112 -88,1620,20, -61,1640,20, -80,1640,-56, -100,1620,-74, -61,1640,20,
113 -83,1660,20, -100,1660,-38, -80,1640,-56, 35,1780,-80, 35,1780,-440,
114 -35,1780,-440, -35,1780,-80, 35,1780,-80, 35,1680,-80, 35,1680,-440,
115 35,1780,-440, -35,1780,-80, -35,1780,-440, -35,1680,-440, -35,1680,-80,
116 35,1780,-80, -35,1780,-80, -35,1680,-80, 35,1680,-80, 35,1780,-440,
117 35,1680,-440, -35,1680,-440, -35,1780,-440, -100,1400,130, -120,1380,20,
118 120,1380,20, 100,1400,130, -100,1400,130, 100,1400,130, 120,1380,240,
119 -120,1380,240, -260,580,-80, -55,1480,-280, 0,1500,-360, 0,780,-400,
120 260,580,-80, 0,780,-400, 0,1500,-360, 55,1480,-280, -50,1380,40,
121 -200,880,400, 200,880,400, 50,1380,40, -200,880,400, -260,580,260,
122 260,580,260, 200,880,400, -50,1380,40, -140,1220,-40, -260,580,260,
123 -200,880,400, -140,1220,-40, -114,1220,-222, -260,580,-80, -260,580,260,
124 -55,1480,-280, -114,1220,-222, -140,1220,-40, -60,1400,-140,
125 50,1380,40, 200,880,400, 260,580,260, 140,1220,-40, 140,1220,-40,
126 260,580,260, 260,580,-80, 114,1220,-222, 55,1480,-280, 60,1400,-140,
127 140,1220,-40, 114,1220,-222, 260,580,-80, 144,580,-260, 0,780,-400,
128 144,580,-260, -144,580,-260, 0,780,-400, -260,580,-80, 0,780,-400,
129 -144,580,-260, 0,1400,400, 80,1620,400, -80,1620,400, 0,1400,400,
130 -80,1620,400, -120,1380,240, -120,1380,240, -80,1620,400, -100,1680,340,
131 -120,1380,240, -100,1680,340, -100,1680,300, 0,1400,400, 120,1380,240,
132 80,1620,400, 120,1380,240, 100,1680,340, 80,1620,400, 120,1380,240,
133 100,1680,300, 100,1680,340, 0,1400,400, -120,1380,240, 120,1380,240,
134 -60,1400,-140, -140,1220,-40, -45,1380,-20, -45,1380,-20, -140,1220,-40,
135 -50,1380,40, 60,1400,-140, 45,1380,-20, 140,1220,-40, 45,1380,-20,
136 50,1380,40, 140,1220,-40, 60,1400,-140, 120,1360,-20, 45,1380,-20,
137 50,1380,40, 45,1380,-20, 120,1360,-20, 50,1380,40, 120,1360,-20,
138 120,1380,20, -60,1400,-140, -45,1380,-20, -120,1360,-20, -50,1380,40,
139 -120,1360,-20, -45,1380,-20, -50,1380,40, -120,1380,20, -120,1360,-20,
140 88,1620,20, 61,1640,20, 83,1660,20, 100,1620,-74, 100,1660,-38,
141 80,1640,-56, -88,1620,20, -83,1660,20, -61,1640,20, -100,1620,-74,
142 -80,1640,-56, -100,1660,-38, -40,1680,-110, -100,1680,-200,
143 -100,1580,-110, -100,1680,-20, -40,1680,-110, -100,1580,-110,
144 40,1680,-110, 100,1580,-110, 100,1680,-200, 100,1680,-20, 100,1580,-110,
147 QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
148 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
149 40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
150 60,61,62,63, 64,65,66,67, 68,69,70,71, 72,73,74,75, 76,77,78,79,
151 80,81,82,83, 84,85,86,87, 88,89,90,91, 92,93,94,95, 96,97,98,99,
152 100,101,102,103, 104,105,106,107, 108,109,110,111, 112,113,114,115,
153 116,117,118,119, 120,121,122,123, 124,125,126,127, 128,129,130,131,
154 132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147,
155 148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163,
156 164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179,
159 TRIANGLES, 184,185,186, 187,188,189, 190,191,192, 193,194,195,
160 196,197,198, 199,200,201, 202,203,204, 205,206,207, 208,209,210,
161 211,212,213, 214,215,216, 217,218,219, 220,221,222, 223,224,225,
162 226,227,228, 229,230,231, 232,233,234, 235,236,237, 238,239,240,
163 241,242,243, 244,245,246, 247,248,249, 250,251,252, 253,254,255,
164 256,257,258, 259,260,261, 262,263,264, 265,266,267, 268,269,270,
169 static unsigned short classic_bishop_data[] = {
171 400,0,SEAM,400,200,SEAM,250,300,SEAM,250,400,SEAM,150,700,SEAM,120,940,
172 SEAM,250,940,SEAM,170,1100,SEAM,170,1220,SEAM,220,1320,SEAM,220,1480,
173 SEAM,100,1600,SEAM,80,1700,SEAM,120,1770,SEAM,80,1840,0,1840,
177 static unsigned short classic_queen_data[] = {
179 480,0,SEAM,480,220,SEAM,340,400,SEAM,340,500,SEAM,180,800,SEAM,140,1180,
180 SEAM,290,1180,SEAM,180,1360,SEAM,180,1520,SEAM,200,1780,SEAM,270,1920,
181 SEAM,240,2000,SEAM,170,2000,SEAM,95,2080,SEAM,70,2080,SEAM,90,2140,
186 static unsigned short classic_king_data[] = {
188 500,0,SEAM,500,200,SEAM,350,300,SEAM,350,460,SEAM,200,760,SEAM,140,1260,
189 SEAM,300,1260,SEAM,200,1460,SEAM,200,1560,SEAM,280,1910,SEAM,160,1970,
190 SEAM,160,2010,0,2010,
193 -30,2010,35, 30,2010,35, 30,2310,35, -30,2310,35, -90,2110,35,
194 -30,2110,35, -30,2210,35, -90,2210,35, 90,2110,35, 90,2210,35,
195 30,2210,35, 30,2110,35, 30,2010,-35, -30,2010,-35, -30,2310,-35,
196 30,2310,-35, -30,2110,-35, -90,2110,-35, -90,2210,-35, -30,2210,-35,
197 30,2110,-35, 30,2210,-35, 90,2210,-35, 90,2110,-35, -90,2110,35,
198 -90,2210,35, -90,2210,-35, -90,2110,-35, -30,2010,35, -30,2110,35,
199 -30,2110,-35, -30,2010,-35, -30,2210,30, -30,2310,30, -30,2310,-30,
200 -30,2210,-30, 90,2110,-35, 90,2210,-35, 90,2210,35, 90,2110,35,
201 30,2010,-35, 30,2110,-35, 30,2110,35, 30,2010,35, 30,2210,-35,
202 30,2310,-35, 30,2310,35, 30,2210,35, -90,2210,-35, -90,2210,35,
203 -30,2210,35, -30,2210,-35, 30,2210,-35, 30,2210,35, 90,2210,35,
204 90,2210,-35, -30,2310,-35, -30,2310,35, 30,2310,35, 30,2310,-35,
206 QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
207 20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
208 40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
213 static unsigned short knight_data[] = {
214 VERTICES, SETBACKREF,0, 7910,8863,0, 7790,8863,1326, 7433,8863,2611,
215 6850,8863,3817, 6059,8863,4907, 5084,8863,5847, 3955,8863,6611,
216 2705,8863,7173, 1373,8863,7517, 0,8863,7633, -1373,8863,7517,
217 -2705,8863,7173, -3955,8863,6611, -5084,8863,5847, -6059,8863,4907,
218 -6850,8863,3817, -7433,8863,2611, -7790,8863,1326, -7910,8863,0,
219 -7790,8863,-1326, -7433,8863,-2611, -6850,8863,-3817,
220 -6059,8863,-4907, -5066,8863,-5896, -3955,8863,-6611,
221 -2705,8863,-7173, -1373,8863,-7517, 0,8863,-7633, 1373,8863,-7517,
222 2705,8863,-7173, 3955,8863,-6611, 5066,8863,-5896, 6059,8863,-4907,
223 6850,8863,-3817, 7433,8863,-2611, 7790,8863,-1326, -1183,11744,7939,
224 -1183,12003,7939, -1183,14019,6547, -1183,16307,5288,
225 -1183,16555,5281, -1183,20128,2191, -1134,20304,2131,
226 -1183,20516,2156, -1417,21874,1842, -1417,23109,2185,
227 -1417,23961,3121, -1417,24001,4252, 0,23917,5637, -1418,23893,5418,
228 -1151,23389,6664, -1151,23501,6906, -1151,23806,6987,
229 -1151,24102,6987, -1151,24209,7189, -1151,24371,7513,
230 -1151,24605,7715, -1151,24939,7674, -1313,25568,7149,
231 -1313,25695,7149, -1598,26707,7610, 0,26837,7841, 0,27354,8076,
232 -1598,27262,7839, -1598,27842,7723, 0,27919,7998, 0,28449,7606,
233 -1598,28309,7303, -1302,28414,6723, 0,28544,6980, 0,28540,6197,
234 -1187,28523,5990, -1304,28447,4204, -1158,28789,1627,
235 -561,28931,-1220, -357,29608,-1244, -357,30527,-1441,
236 -357,31249,-1837, -357,31511,-2627, -357,31511,-3484,
237 -357,31118,-4143, -357,30264,-4538, -436,29406,-5256, 0,29409,-5243,
238 -2207,29018,-6763, -914,28658,-6964, 0,26292,-7237, -1305,26324,-7143,
239 -806,23401,-6784, -812,20723,-6228, -796,16757,-6210,
240 -1559,24934,7435, -1566,24633,7460, -1531,24429,7334,
241 -1475,24293,7131, -1440,24203,7004, -1372,23935,7015,
242 -1364,23606,6868, -1389,23515,6705, -1687,28010,6952,
243 -1687,27926,7343, -1687,27629,7491, -1687,27324,7552,
244 -1687,27032,7432, -1687,26791,7148, -1642,27135,7165,
245 -1642,27254,7304, -1642,27397,7364, -1642,27546,7334,
246 -1642,27693,7261, -1642,27737,7088, -1611,10591,8159,
247 -888,9327,-8560, -4491,13292,1032, -3840,15084,786, -3412,17397,397,
248 -2937,20005,-35, -5108,11669,1240, -6344,10251,1395, -6345,10246,1248,
249 -5109,11664,1092, -2964,20022,-132, -3413,17393,250, -3841,15079,638,
250 -4491,13288,885, -3743,13207,-535, -3085,15092,-710, -2727,17642,-878,
251 -2569,20636,-797, -4348,11575,-324, -5584,10108,-169,
252 -5403,10079,-1732, -4167,11644,-1888, -2465,20842,-2651,
253 -2522,18130,-2392, -2905,15407,-2077, -3562,13227,-1951,
254 -3901,13568,-3294, -3243,15993,-3519, -2861,18863,-3735,
255 -2776,22447,-4309, -4486,11792,-3132, -5783,9930,-2931,
256 -5783,9930,-3054, -4486,11792,-3255, -2776,22438,-4430,
257 -2861,18863,-3858, -3243,15993,-3641, -3901,13568,-3417,
258 -6199,9466,4558, -5766,10642,5726, -5228,11829,6090, -4801,12891,6048,
259 -4155,14560,5246, -3546,16847,3719, -3334,17643,2937,
260 -2860,20062,1230, -4822,12054,7102, -5325,10909,7208,
261 -5732,9938,6026, -4026,14701,5522, -2852,20170,1447, -3319,17801,3175,
262 -3538,16955,3935, -4090,13256,1679, -2874,20073,676, -3706,15083,1464,
263 -3301,17348,1117, -5931,10206,1996, -4695,11624,1840,
264 -4445,11658,2844, -5681,10240,3000, -3074,17398,2202,
265 -3456,15117,2468, -3840,13290,2683, -4642,13358,4019,
266 -4257,15194,3908, -6017,10188,3746, -5237,11714,4039,
267 -5621,11218,5077, -5026,12862,5058, -5134,10861,-3154,
268 -4193,12680,-3336, -2832,20609,-4118, -3052,17428,-3750,
269 -3572,14780,-3529, -3579,14774,-3623, -3059,17422,-3843,
270 -2839,20596,-4211, -4200,12674,-3429, -5141,10855,-3248,
271 -3908,13562,-3510, -3250,15987,-3735, -2868,18857,-3952,
272 -4492,11786,-3348, -5789,9924,-3148, -4817,11321,-3298,
273 -5465,10389,-3198, -4054,13118,-3470, -4346,12230,-3389,
274 -2853,19681,-4056, -2825,21511,-4367, -3155,16705,-3789,
275 -2963,18140,-3897, -3744,14168,-3567, -3415,15381,-3679,
276 -845,13482,-6604, -945,10997,-7893, -981,11110,-7735,
277 -859,13469,-6526, -899,9307,-8439, -813,16486,-6146, -832,20681,-6100,
278 -826,23358,-6656, -882,10149,-8148, -913,12323,-7139,
279 -822,14910,-6353, -817,18235,-6210, -827,21937,-6382,
280 -846,21937,-6341, -841,14912,-6313, -931,12326,-7098,
281 -901,10152,-8107, -844,23359,-6615, -851,20681,-6059,
282 -831,16487,-6105, -919,9307,-8399, -869,13482,-6492, -999,11113,-7694,
283 -860,9726,-8255, -942,10578,-7958, -962,11715,-7413, -900,12896,-6796,
284 -863,14065,-6404, -818,15760,-6221, -828,17367,-6171,
285 -854,19800,-5994, -848,21309,-6200, -843,22566,-6482,
286 -3407,15409,-3785, -3736,14196,-3673, -2911,18365,-4048,
287 -3147,16733,-3895, -2726,21608,-4455, -2808,19905,-4191,
288 -4338,12259,-3495, -4046,13146,-3576, -5457,10418,-3304,
289 -4809,11349,-3404, -4484,11815,-3454, -2715,22288,-4534,
290 -2832,19035,-4066, -3242,16015,-3841, -3900,13590,-3616,
291 -5133,10883,-3354, -4171,12742,-3524, -2803,20773,-4339,
292 -3051,17450,-3949, -3571,14803,-3729, -4979,11072,-3368,
293 -5619,10185,-3279, -4119,12924,-3556, -4411,12037,-3475,
294 -2801,20363,-4269, -2721,21826,-4489, -3099,17092,-3922,
295 -2887,18618,-4038, -3653,14499,-3701, -3325,15712,-3813,
296 -3489,15106,-3757, -3818,13893,-3645, -3011,17758,-3971,
297 -3194,16374,-3868, -2755,21085,-4385, -2815,19494,-4139,
298 -4265,12481,-3515, -3973,13368,-3596, -5304,10595,-3318,
299 -4664,11477,-3407, -5441,10207,-3361, -5350,10338,-3375,
300 -5139,10672,-3428, -5058,10742,-3431, -4831,11101,-3457,
301 -4742,11228,-3470, -4516,11559,-3504, -4423,11693,-3518,
302 -4277,12079,-3558, -4232,12180,-3571, -4138,12522,-3597,
303 -4094,12603,-3609, -3979,12935,-3675, -3943,13043,-3671,
304 -3852,13383,-3699, -3813,13496,-3705, -3692,13947,-3767,
305 -3653,14073,-3790, -3506,14587,-3772, -3467,14685,-3777,
306 -3349,15192,-3888, -3308,15317,-3887, -3162,15800,-3957,
307 -3119,15954,-3961, -3009,16528,-3946, -3002,16637,-3937,
308 -2914,17260,-4014, -2909,17347,-4006, -2834,17893,-4049,
309 -2813,18060,-4060, -2760,18849,-4232, -2746,18968,-4242,
310 -850,22569,-6438, -855,21313,-6156, -861,19804,-5949,
311 -834,17371,-6127, -824,15765,-6176, -869,14070,-6360,
312 -906,12901,-6751, -968,11720,-7368, -948,10645,-7895, -865,9731,-8211,
313 -1006,11164,-7630, -875,13487,-6447, -926,9310,-8354,
314 -837,16490,-6061, -857,20684,-6015, -867,23379,-6515,
315 -907,10157,-8062, -937,12331,-7053, -847,14917,-6268,
316 -842,18236,-6111, -852,21941,-6297, -885,9891,-8156, -985,10905,-7724,
317 -947,11969,-7255, -885,13125,-6649, -858,14493,-6314,
318 -839,16049,-6111, -836,17735,-6083, -859,20244,-5982,
319 -891,21559,-6157, -848,22883,-6508, -851,22255,-6367,
320 -856,20999,-6085, -867,19042,-6000, -836,16930,-6094,
321 -835,15341,-6222, -880,13646,-6405, -916,12540,-6953,
322 -981,11337,-7564, -927,10370,-7988, -932,9518,-8285, -931,9583,-8174,
323 -863,9671,-8145, -892,9982,-8037, -903,10075,-7996, -952,10454,-7865,
324 -961,10550,-7832, -1008,10963,-7617, -1018,11105,-7567,
325 -996,11458,-7405, -992,11582,-7342, -972,12080,-7057,
326 -968,12210,-6984, -935,12620,-6792, -931,12759,-6714,
327 -914,13199,-6441, -910,13346,-6359, -915,13767,-6194,
328 -910,13941,-6175, -890,14633,-6107, -886,14783,-6091,
329 -864,15476,-6035, -859,15645,-6017, -870,16062,-5957,
330 -873,16231,-5936, -853,17048,-5965, -861,17185,-5974,
331 -879,17812,-5997, -885,17961,-5997, -851,18486,-6138,
332 -865,18526,-5933, -872,18761,-5875, -870,19337,-5971,
333 -864,19470,-5784, -937,19590,-5786, -833,19023,-6126,
334 -851,20344,-5894, -851,20576,-5912, -855,21086,-5973,
335 -854,21224,-6003, -871,21651,-6070, -852,21853,-6116,
336 -850,22332,-6224, -849,22490,-6259, -831,22924,-6338,
337 -834,23240,-6364, -2743,19661,-4287, -2740,19863,-4312,
338 -2723,20501,-4469, -2705,20711,-4503, -2661,21262,-4565,
339 -2658,21427,-4593, -2687,22088,-4631, -2695,22209,-4643,
340 -2774,23170,-4392, -2633,23103,-4527, -2681,22439,-4516,
341 -2656,22665,-4573, -2552,22727,-4653, -2534,23015,-4628,
342 -2607,23397,-4556, -2759,23681,-4398, -2740,24136,-4370,
343 -2610,24100,-4580, -2412,24481,-5089, -2671,24389,-4569,
344 -2397,24935,-5652, -2562,25022,-5528, -939,23708,-6566,
345 -1009,24359,-6776, -1095,24912,-6886, -1049,24117,-6493,
346 -990,23894,-6415, -2290,23837,-4814, -2312,23612,-4723,
347 -2183,24804,-5574, -2191,24632,-5391, -1156,24771,-6650,
348 -1154,24624,-6586, -1104,24526,-6656, -1281,9161,-8432,
349 -2524,9161,-8046, -3691,9161,-7572, -4745,9161,-6945,
350 -5662,9127,-6096, -3697,9192,-7581, -2531,9192,-8056,
351 -4753,9183,-6951, -5664,9161,-6101, -5664,9185,-6101,
352 -4753,9207,-6951, -2531,9216,-8055, -3697,9216,-7581,
353 -3684,9232,-7560, -2518,9232,-8034, -4740,9223,-6930,
354 -5651,9200,-6080, -2828,20259,1366, -2798,20256,1187, -2820,20237,692,
355 -2843,20292,-25, -2874,20473,735, -2975,20508,90, -2474,20772,-759,
356 -2660,20879,-691, -2471,21553,-1445, -2498,22175,-1940,
357 -2471,24346,-2830, -2556,22373,-1903, -2528,21595,-1351,
358 -2493,24314,-2936, -2576,22239,-2123, -2548,21461,-1571,
359 -2823,20635,1307, -2741,20503,1328, -1490,23972,5392,
360 -1489,24080,4226, -1489,24040,3095, -1489,23188,2159,
361 -1489,21953,1816, -2479,22156,182, -1515,23830,2117, -1605,24415,3131,
362 -1599,24460,4263, -1580,24357,5431, -1448,23885,6743,
363 -1252,24770,5442, -1271,24873,4274, -1277,24828,3142,
364 -1389,24618,2016, -1479,24733,1993, -1301,25010,3165,
365 -1295,25055,4297, -1391,24890,5460, -1512,25216,5507,
366 -1602,25353,4317, -1608,25308,3186, -1979,23458,-29, -1320,25312,1928,
367 -1495,25055,546, -2438,25790,-488, -1605,25585,5599, -1583,26793,6150,
368 -1850,26272,4298, -1578,27435,7117, -1658,27625,6884,
369 -1671,27398,6846, -1678,27176,6937, -1715,27784,6626,
370 -1744,27323,6551, -1753,26904,6776, -1884,28809,-1688,
371 -1555,28655,1620, -1658,28252,4204, -1581,28263,5997,
372 -1567,28312,6790, -1935,27827,4220, -1818,28249,1603,
373 -1570,27742,6195, -1532,27288,6120, -2038,27074,4245, -1418,28416,228,
374 -413,30264,-4539, -424,31094,-4152, -418,31478,-3497,
375 -410,31453,-2653, -410,31190,-1863, -410,30468,-1467,
376 -410,29550,-1270, -411,31041,-1902, -448,31253,-2696,
377 -449,31323,-3466, -425,31182,-3496, -411,31060,-2738,
378 -387,30899,-1932, -316,30806,-1957, -335,30952,-2766,
379 -353,31089,-3521, -322,31007,-3540, -303,30871,-2786,
380 -284,30725,-1976, -304,30630,-1993, -323,30776,-2802,
381 -342,30912,-3557, -396,30843,-3565, -378,30707,-2811,
382 -358,30561,-2001, -414,30477,-2013, -433,30623,-2822,
383 -452,30759,-3576, -474,30560,-3616, -456,30424,-2861,
384 -436,30278,-2052, -349,30194,-2077, -368,30340,-2886,
385 -386,30477,-3641, -309,30389,-3665, -291,30253,-2911,
386 -271,30107,-2102, -267,29996,-2124, -286,30142,-2933,
387 -305,30278,-3688, -376,30179,-3700, -357,30043,-2945,
388 -338,29897,-2136, -420,29789,-2150, -439,29935,-2959,
389 -458,30071,-3713, -500,29883,-3751, -463,29601,-2187,
390 -470,30974,-4049, -462,30153,-4391, -466,30563,-4220,
391 -410,30009,-1368, -725,29372,-3225, -677,29335,-5130,
392 -908,29205,-3300, -632,29533,-4803, -2587,28768,-3408,
393 -2730,28611,-3456, -2404,28568,-6916, -2413,28849,-6612,
394 -1904,26715,1801, -1394,25919,831, -2224,27270,-3994,
395 -2730,28438,-3011, -2587,28570,-2864, -2826,28152,-3163,
396 -2476,28668,-6523, -2476,28433,-6776, -2787,28338,-3507,
397 -2216,27658,-3972, -2207,27950,-5907, -2311,28216,-6128,
398 -2320,27876,-3971, -2311,28118,-6301, -2311,27845,-6252,
399 -2320,27703,-3749, -2320,27084,-3798, -2320,26986,-4070,
400 -2698,26705,-4014, -2557,26974,-3547, -2557,27739,-3485,
401 -2572,27738,-6362, -2436,28204,-6533, -2436,28421,-6303,
402 -2556,28092,-3822, -2431,28142,-6975, -2544,27863,-6726,
403 -2266,28229,-1686, -1939,28156,-1065, -2569,27943,-2270,
404 -2381,27545,-1682, -2799,27594,-3104, -2750,27866,-2738,
405 -2539,27578,-6309, -2720,26853,-3133, -2788,26461,-3776,
406 -1061,27543,-7078, -1780,27941,135, -1859,27747,-527, -1756,27784,691,
407 -1855,27001,736, -1950,26711,19, -1964,27006,-630, -2342,26955,-1898,
408 -2595,25515,-3113, -2147,27855,132, -2126,27722,601, -2213,27691,-428,
409 -2210,27061,639, -2290,26816,34, -2302,27065,-515, -2347,27680,100,
410 -2335,27602,376, -2386,27584,-229, -2385,27213,398, -2432,27069,42,
411 -2439,27215,-281, -2481,27452,103, -1786,24263,399, -2278,24851,-562,
412 -2372,25143,-1163, 7383,9172,0, 7270,9172,-1487, 6937,9172,-2929,
413 6393,9172,-4281, 1282,9172,-8433, 0,9172,-8563, 1301,9439,8159,
414 2371,9313,7844, 3857,9286,7355, 4477,9172,6559, 5704,9174,5179,
415 6393,9172,4281, 6937,9172,2929, 7270,9172,1487, -7270,9172,-1487,
416 -6937,9172,-2929, -6393,9172,-4281, -1282,9172,-8433, 0,9339,8274,
417 -1301,9439,8159, -2371,9313,7844, -3857,9286,7355, -4477,9172,6559,
418 -5704,9174,5179, -6393,9172,4281, -6937,9172,2929, -7270,9172,1487,
419 -796,9467,8260, 0,9503,8356, 0,9667,8438, -796,9666,8325,
420 -807,10584,8327, -7383,9172,0, 796,9467,8260, 796,9666,8325,
421 807,10584,8327, 0,10584,8457, 0,11744,8130, 1183,11744,7939,
422 1183,12003,7939, 0,12003,8130, 0,14019,6737, 1183,14019,6547,
423 1183,16307,5288, 0,16307,5479, 0,16555,5472, 1183,16555,5281,
424 1183,20128,2191, 0,20128,2382, 0,20304,2322, 1134,20304,2131,
425 1183,20516,2156, 0,20516,2346, 0,21898,2060, 1417,21874,1842,
426 1417,23109,2185, 0,23133,2404, 0,23985,3339, 1417,23961,3121,
427 1417,24001,4252, 0,24025,4470, 1418,23893,5418, 1151,23389,6664,
428 0,23394,6882, 0,23506,7125, 1151,23501,6906, 1151,23806,6987,
429 0,23811,7205, 0,24107,7205, 1151,24102,6987, 1151,24209,7189,
430 0,24213,7407, 0,24376,7731, 1151,24371,7513, 1151,24605,7715,
431 0,24610,7933, 0,24944,7892, 1151,24939,7674, 1313,25568,7149,
432 0,25562,7367, 0,25689,7367, 1313,25695,7149, 1598,26707,7610,
433 1598,27262,7839, 1598,27842,7723, 1598,28309,7303, 1302,28414,6723,
434 1187,28523,5990, 1304,28447,4204, 0,28469,4435, 0,28654,1893,
435 1158,28789,1627, 561,28931,-1220, 0,29310,-864, 0,29574,-1062,
436 357,29608,-1244, 357,30527,-1441, 0,30496,-1259, 0,31221,-1655,
437 357,31249,-1837, 357,31511,-2627, 0,31485,-2445, 0,31485,-3302,
438 357,31511,-3484, 357,31118,-4143, 0,31089,-3961, 0,30233,-4356,
439 357,30264,-4538, 436,29406,-5256, 0,29018,-6407, 2207,29018,-6763,
440 914,28658,-6964, 0,28472,-7040, 1305,26324,-7143, 806,23401,-6784,
441 0,23246,-6890, 0,20735,-6319, 812,20723,-6228, 796,16757,-6210,
442 0,17171,-6133, 1559,24934,7435, 1566,24633,7460, 1531,24429,7334,
443 1475,24293,7131, 1440,24203,7004, 1372,23935,7015, 1364,23606,6868,
444 1389,23515,6705, 1687,28010,6952, 1687,27926,7343, 1687,27629,7491,
445 1687,27324,7552, 1687,27032,7432, 1687,26791,7148, 1642,27135,7165,
446 1642,27254,7304, 1642,27397,7364, 1642,27546,7334, 1642,27693,7261,
447 1642,27737,7088, 1611,10591,8159, 888,9327,-8560, 4491,13292,1032,
448 3840,15084,786, 3412,17397,397, 2937,20005,-35, 5108,11669,1240,
449 6344,10251,1395, 6345,10246,1248, 5109,11664,1092, 2964,20022,-132,
450 3413,17393,250, 3841,15079,638, 4491,13288,885, 3743,13207,-535,
451 3085,15092,-710, 2727,17642,-878, 2569,20636,-797, 4348,11575,-324,
452 5584,10108,-169, 5403,10079,-1732, 4167,11644,-1888,
453 2465,20842,-2651, 2522,18130,-2392, 2905,15407,-2077,
454 3562,13227,-1951, 3901,13568,-3294, 3243,15993,-3519,
455 2861,18863,-3735, 2776,22447,-4309, 4486,11792,-3132, 5783,9930,-2931,
456 5783,9930,-3054, 4486,11792,-3255, 2776,22438,-4430, 2861,18863,-3858,
457 3243,15993,-3641, 3901,13568,-3417, 6199,9466,4558, 5766,10642,5726,
458 5228,11829,6090, 4801,12891,6048, 4155,14560,5246, 3546,16847,3719,
459 3334,17643,2937, 2860,20062,1230, 4822,12054,7102, 5325,10909,7208,
460 5732,9938,6026, 4026,14701,5522, 2852,20170,1447, 3319,17801,3175,
461 3538,16955,3935, 4090,13256,1679, 2874,20073,676, 3706,15083,1464,
462 3301,17348,1117, 5931,10206,1996, 4695,11624,1840, 4445,11658,2844,
463 5681,10240,3000, 3074,17398,2202, 3456,15117,2468, 3840,13290,2683,
464 4642,13358,4019, 4257,15194,3908, 6017,10188,3746, 5237,11714,4039,
465 5621,11218,5077, 5026,12862,5058, 5134,10861,-3154, 4193,12680,-3336,
466 2832,20609,-4118, 3052,17428,-3750, 3572,14780,-3529,
467 3579,14774,-3623, 3059,17422,-3843, 2839,20596,-4211,
468 4200,12674,-3429, 5141,10855,-3248, 3908,13562,-3510,
469 3250,15987,-3735, 2868,18857,-3952, 4492,11786,-3348, 5789,9924,-3148,
470 4817,11321,-3298, 5465,10389,-3198, 4054,13118,-3470,
471 4346,12230,-3389, 2853,19681,-4056, 2825,21511,-4367,
472 3155,16705,-3789, 2963,18140,-3897, 3744,14168,-3567,
473 3415,15381,-3679, 0,14037,-6616, 845,13482,-6604, 945,10997,-7893,
474 0,11066,-7866, 981,11110,-7735, 859,13469,-6526, 899,9307,-8439,
475 813,16486,-6146, 832,20681,-6100, 826,23358,-6656, 882,10149,-8148,
476 913,12323,-7139, 822,14910,-6353, 817,18235,-6210, 827,21937,-6382,
477 846,21937,-6341, 841,14912,-6313, 931,12326,-7098, 901,10152,-8107,
478 844,23359,-6615, 851,20681,-6059, 831,16487,-6105, 919,9307,-8399,
479 869,13482,-6492, 999,11113,-7694, 860,9726,-8255, 942,10578,-7958,
480 962,11715,-7413, 900,12896,-6796, 863,14065,-6404, 818,15760,-6221,
481 828,17367,-6171, 854,19800,-5994, 848,21309,-6200, 843,22566,-6482,
482 3407,15409,-3785, 3736,14196,-3673, 2911,18365,-4048,
483 3147,16733,-3895, 2726,21608,-4455, 2808,19905,-4191,
484 4338,12259,-3495, 4046,13146,-3576, 5457,10418,-3304,
485 4809,11349,-3404, 4484,11815,-3454, 2715,22288,-4534,
486 2832,19035,-4066, 3242,16015,-3841, 3900,13590,-3616,
487 5133,10883,-3354, 4171,12742,-3524, 2803,20773,-4339,
488 3051,17450,-3949, 3571,14803,-3729, 4979,11072,-3368,
489 5619,10185,-3279, 4119,12924,-3556, 4411,12037,-3475,
490 2801,20363,-4269, 2721,21826,-4489, 3099,17092,-3922,
491 2887,18618,-4038, 3653,14499,-3701, 3325,15712,-3813,
492 3489,15106,-3757, 3818,13893,-3645, 3011,17758,-3971,
493 3194,16374,-3868, 2755,21085,-4385, 2815,19494,-4139,
494 4265,12481,-3515, 3973,13368,-3596, 5304,10595,-3318,
495 4664,11477,-3407, 5441,10207,-3361, 5350,10338,-3375,
496 5139,10672,-3428, 5058,10742,-3431, 4831,11101,-3457,
497 4742,11228,-3470, 4516,11559,-3504, 4423,11693,-3518,
498 4277,12079,-3558, 4232,12180,-3571, 4138,12522,-3597,
499 4094,12603,-3609, 3979,12935,-3675, 3943,13043,-3671,
500 3852,13383,-3699, 3813,13496,-3705, 3692,13947,-3767,
501 3653,14073,-3790, 3506,14587,-3772, 3467,14685,-3777,
502 3349,15192,-3888, 3308,15317,-3887, 3162,15800,-3957,
503 3119,15954,-3961, 3009,16528,-3946, 3002,16637,-3937,
504 2914,17260,-4014, 2909,17347,-4006, 2834,17893,-4049,
505 2813,18060,-4060, 2760,18849,-4232, 2746,18968,-4242, 850,22569,-6438,
506 855,21313,-6156, 860,19804,-5949, 834,17371,-6127, 824,15765,-6176,
507 869,14070,-6360, 906,12901,-6751, 968,11720,-7368, 948,10645,-7895,
508 865,9731,-8211, 1006,11164,-7630, 875,13487,-6447, 926,9310,-8354,
509 837,16490,-6061, 857,20684,-6015, 867,23379,-6515, 907,10157,-8062,
510 937,12331,-7053, 847,14917,-6268, 842,18236,-6111, 852,21941,-6297,
511 885,9891,-8156, 985,10905,-7724, 947,11969,-7255, 885,13125,-6649,
512 858,14493,-6314, 839,16049,-6111, 836,17735,-6083, 859,20244,-5982,
513 891,21559,-6157, 848,22883,-6508, 851,22255,-6367, 856,20999,-6085,
514 867,19042,-6000, 836,16930,-6094, 835,15341,-6222, 880,13646,-6405,
515 916,12540,-6953, 981,11337,-7564, 927,10370,-7988, 932,9518,-8285,
516 931,9583,-8174, 863,9671,-8145, 892,9982,-8037, 903,10075,-7996,
517 952,10454,-7865, 961,10550,-7832, 1008,10963,-7617, 1018,11105,-7567,
518 996,11458,-7405, 992,11582,-7342, 972,12080,-7057, 968,12210,-6984,
519 935,12620,-6792, 931,12759,-6714, 914,13199,-6441, 910,13346,-6359,
520 915,13767,-6194, 910,13941,-6175, 890,14633,-6107, 886,14783,-6091,
521 864,15476,-6035, 859,15645,-6017, 870,16062,-5957, 873,16231,-5936,
522 853,17048,-5965, 861,17185,-5974, 879,17812,-5997, 885,17961,-5997,
523 851,18486,-6138, 865,18526,-5933, 872,18761,-5875, 870,19337,-5971,
524 864,19470,-5784, 937,19590,-5786, 833,19023,-6126, 851,20344,-5894,
525 851,20576,-5912, 855,21086,-5973, 854,21224,-6003, 871,21651,-6070,
526 852,21853,-6116, 850,22332,-6224, 849,22490,-6259, 831,22924,-6338,
527 834,23240,-6364, 2743,19661,-4287, 2740,19863,-4312, 2723,20501,-4469,
528 2705,20711,-4503, 2661,21262,-4565, 2658,21427,-4593,
529 2687,22088,-4631, 2695,22209,-4643, 2774,23170,-4392,
530 2633,23103,-4527, 2681,22439,-4516, 2656,22665,-4573,
531 2552,22727,-4653, 2534,23015,-4628, 2607,23397,-4556,
532 2759,23681,-4398, 2740,24136,-4370, 2610,24100,-4580,
533 2412,24481,-5089, 2671,24389,-4569, 2397,24935,-5652,
534 2562,25022,-5528, 939,23708,-6566, 1009,24359,-6776, 1095,24912,-6886,
535 1049,24117,-6493, 990,23894,-6415, 2290,23837,-4814, 2312,23612,-4723,
536 2183,24804,-5574, 2191,24632,-5391, 1156,24771,-6650,
537 1154,24624,-6586, 1104,24526,-6656, 0,9161,-8562, 1281,9161,-8432,
538 2524,9161,-8046, 3691,9161,-7572, 4745,9161,-6945, 5662,9127,-6096,
539 3697,9192,-7581, 2531,9192,-8056, 4753,9183,-6951, 5664,9161,-6101,
540 5664,9185,-6101, 4753,9207,-6951, 2531,9216,-8055, 3697,9216,-7581,
541 3684,9232,-7560, 2518,9232,-8034, 4740,9223,-6930, 5651,9200,-6080,
542 2828,20259,1366, 2798,20256,1187, 2820,20237,692, 2843,20292,-25,
543 2874,20473,735, 2975,20508,90, 2474,20772,-759, 2660,20879,-691,
544 2471,21553,-1445, 2498,22175,-1940, 2471,24346,-2830,
545 2556,22373,-1903, 2528,21595,-1351, 2493,24314,-2936,
546 2576,22239,-2123, 2548,21461,-1571, 2823,20635,1307, 2741,20503,1328,
547 1490,23972,5392, 1489,24080,4226, 1489,24040,3095, 1489,23188,2159,
548 1489,21953,1816, 2479,22156,182, 1515,23830,2117, 1605,24415,3131,
549 1599,24460,4263, 1580,24357,5431, 1448,23885,6743, 1252,24770,5442,
550 1271,24873,4274, 1277,24828,3142, 1389,24618,2016, 1479,24733,1993,
551 1301,25010,3165, 1295,25055,4297, 1391,24890,5460, 1512,25216,5507,
552 1602,25353,4317, 1608,25308,3186, 1979,23458,-29, 1320,25312,1928,
553 1495,25055,546, 2438,25790,-488, 1605,25585,5599, 1583,26793,6150,
554 1850,26272,4298, 1578,27435,7117, 1658,27625,6884, 1671,27398,6846,
555 1678,27176,6937, 1715,27784,6626, 1744,27323,6551, 1753,26904,6776,
556 1884,28809,-1688, 1555,28655,1620, 1658,28252,4204, 1581,28263,5997,
557 1567,28312,6790, 1935,27827,4220, 1818,28249,1603, 1570,27742,6195,
558 1532,27288,6120, 2038,27074,4245, 1418,28416,228, 413,30264,-4539,
559 424,31094,-4152, 418,31478,-3497, 410,31453,-2653, 410,31190,-1863,
560 410,30468,-1467, 410,29550,-1270, 411,31041,-1902, 448,31253,-2696,
561 449,31323,-3466, 425,31182,-3496, 411,31060,-2738, 387,30899,-1932,
562 316,30806,-1957, 335,30952,-2766, 353,31089,-3521, 322,31007,-3540,
563 303,30871,-2786, 284,30725,-1976, 304,30630,-1993, 323,30776,-2802,
564 342,30912,-3557, 396,30843,-3565, 378,30707,-2811, 358,30561,-2001,
565 414,30477,-2013, 433,30623,-2822, 452,30759,-3576, 474,30560,-3616,
566 456,30424,-2861, 436,30278,-2052, 349,30194,-2077, 368,30340,-2886,
567 386,30477,-3641, 309,30389,-3665, 291,30253,-2911, 271,30107,-2102,
568 267,29996,-2124, 286,30142,-2933, 305,30278,-3688, 376,30179,-3700,
569 357,30043,-2945, 338,29897,-2136, 420,29789,-2150, 439,29935,-2959,
570 458,30071,-3713, 500,29883,-3751, 463,29601,-2187, 470,30974,-4049,
571 462,30153,-4391, 466,30563,-4220, 410,30009,-1368, 725,29372,-3225,
572 677,29335,-5130, 908,29205,-3300, 632,29533,-4803, 2587,28768,-3408,
573 2730,28611,-3456, 2404,28568,-6916, 2413,28849,-6612,
574 1904,26715,1801, 1394,25919,831, 2224,27270,-3994, 2730,28438,-3011,
575 2587,28570,-2864, 2826,28152,-3163, 2476,28668,-6523,
576 2476,28433,-6776, 2787,28338,-3507, 2216,27658,-3972,
577 2207,27950,-5907, 2311,28216,-6128, 2320,27876,-3971,
578 2311,28118,-6301, 2311,27845,-6252, 2320,27703,-3749,
579 2320,27084,-3798, 2320,26986,-4070, 2698,26705,-4014,
580 2557,26974,-3547, 2557,27739,-3485, 2572,27738,-6362,
581 2436,28204,-6533, 2436,28421,-6303, 2556,28092,-3822,
582 2431,28142,-6975, 2544,27863,-6726, 2266,28229,-1686,
583 1939,28156,-1065, 2569,27943,-2270, 2381,27545,-1682,
584 2799,27594,-3104, 2750,27866,-2738, 2539,27578,-6309,
585 2720,26853,-3133, 2788,26461,-3776, 1061,27543,-7078, 1780,27941,135,
586 1859,27747,-527, 1756,27784,691, 1855,27001,736, 1950,26711,19,
587 1964,27006,-630, 2342,26955,-1898, 2595,25515,-3113, 2147,27855,132,
588 2126,27722,601, 2213,27691,-428, 2210,27061,639, 2290,26816,34,
589 2302,27065,-515, 2347,27680,100, 2335,27602,376, 2386,27584,-229,
590 2385,27213,398, 2432,27069,42, 2439,27215,-281, 2481,27452,103,
591 1786,24263,399, 2278,24851,-562, 2372,25143,-1163, -2567,23141,-2607,
592 -2513,23156,-2494, 2513,23156,-2494, 2567,23141,-2607,
594 TRIANGLES, 657,656,159, 100,506,99, 1003,900,995, 1048,1009,901,
595 1051,901,1009, 1070,1073,1071, 1070,803,808, 1071,1077,1070,
596 1072,1006,1073, 1072,808,915, 1073,808,1072, 1077,1071,1076,
597 1078,1283,1127, 1081,1078,1079, 1081,1079,1080, 1083,1082,1086,
598 1083,747,1274, 1084,888,1085, 1085,878,1086, 1085,1086,1095,
599 1086,747,1083, 1093,1095,1086, 1094,1095,1093, 658,657,149,
600 1101,637,32, 1103,638,1108, 1105,637,1101, 1106,637,1105,
601 1108,638,1111, 111,36,158, 111,653,665, 111,665,36, 1110,858,1112,
602 1111,988,1110, 1111,638,891, 1111,891,988, 1112,858,1113,
603 1113,637,1106, 1117,779,784, 112,214,207, 112,651,210, 1124,1297,1154,
604 1125,1123,1128, 1125,1302,1154, 1127,1077,1078, 1129,791,796,
605 1130,1118,1137, 1136,1130,1137, 1137,1118,1119, 1137,1119,1121,
606 1137,1121,1126, 1142,758,759, 1142,759,760, 1142,760,761,
607 1147,1146,1154, 1150,755,756, 1150,756,757, 1154,1302,1124,
608 1155,1147,1154, 1155,1297,1156, 1155,1154,1297, 1156,1240,1155,
609 1156,1298,1157, 1157,1240,1156, 1157,1299,1273, 1157,1282,1281,
610 1158,1151,1152, 1161,768,1164, 1162,773,1161, 1162,1161,1163,
611 1163,1161,1164, 1165,1172,762, 1168,726,1178, 1168,1267,1266,
612 1169,1178,725, 1171,1172,1165, 1171,720,1172, 1171,1165,1175,
613 1178,1169,1174, 1178,1174,1278, 1179,1229,1228, 118,660,168,
614 1180,1229,1179, 1185,726,1226, 1186,1183,1184, 1186,1184,1191,
615 119,660,118, 1191,1184,1192, 1192,1184,1197, 1197,1184,1198,
616 1198,1184,1203, 1203,1184,1204, 121,116,451, 1210,1209,1230,
617 1215,1210,1230, 1216,1215,1230, 1221,1216,1230, 1222,1185,1226,
618 1222,1221,1230, 1223,1222,1226, 1224,1223,1225, 1225,1223,1226,
619 1226,726,1231, 1227,1188,1189, 1227,1189,1194, 1227,1194,1195,
620 1227,1195,1200, 1227,1200,1201, 1227,1201,1206, 1228,1224,1225,
621 1228,1225,1234, 1229,1207,1212, 1229,1212,1213, 1229,1213,1218,
622 1229,1218,1219, 1229,1219,1224, 1229,1180,1227, 1229,1224,1228,
623 1230,729,1185, 1230,1185,1222, 1231,1225,1226, 1232,1179,1234,
624 1233,744,1232, 1234,1179,1228, 1234,1225,1231, 1235,744,1233,
625 1237,744,1238, 1239,1155,1240, 1240,1157,1239, 1243,1168,1266,
626 1248,1241,1249, 1250,1249,1252, 1252,1249,1253, 1254,1248,1251,
627 1256,1241,1255, 1259,1244,1270, 1264,745,1237, 1265,1260,1272,
628 1267,1168,1178, 1267,1178,1277, 1269,1282,1270, 1270,1282,1273,
629 1271,1268,1269, 1271,1269,1270, 1273,1283,1274, 1274,1078,1081,
630 1274,1081,1083, 1274,747,1275, 1275,745,1264, 1275,1264,1265,
631 1275,1265,1272, 1275,1272,1274, 1276,1178,1278, 1277,1178,1276,
632 1280,1157,1281, 1281,1269,1277, 1282,1157,1273, 1282,1269,1281,
633 1283,1078,1274, 1292,1290,1296, 1295,1292,1296, 1296,1290,1291,
634 1296,1291,1293, 1296,1293,1294, 1296,1294,1295, 1297,1298,1156,
635 1297,1124,1298, 1298,1124,1299, 1299,1124,1273, 1299,1157,1298,
636 660,659,168, 133,128,463, 137,182,141, 138,185,137, 139,184,138,
637 140,183,139, 141,181,142, 141,182,144, 142,181,143, 143,649,142,
638 143,197,195, 144,196,181, 144,199,194, 145,183,140, 145,201,183,
639 145,140,405, 146,184,139, 146,139,183, 146,203,184, 147,185,138,
640 147,138,184, 147,205,185, 148,198,182, 148,137,185, 149,657,159,
641 150,149,159, 151,150,157, 152,151,157, 153,152,157, 157,150,158,
642 157,38,160, 157,37,38, 158,150,159, 160,153,157, 160,39,163,
643 160,38,39, 162,41,161, 163,39,40, 168,659,171, 172,155,156,
644 176,153,154, 176,154,155, 177,658,149, 179,149,150, 179,150,151,
645 180,152,153, 181,197,143, 181,141,144, 181,196,190, 182,199,144,
646 182,137,148, 182,198,189, 183,200,146, 184,202,147, 185,204,148,
647 186,204,185, 186,267,204, 186,185,205, 187,202,184, 187,265,202,
648 187,184,203, 188,200,183, 188,263,200, 188,183,201, 189,275,199,
649 189,261,255, 190,277,197, 190,259,254, 191,276,198, 191,148,204,
650 192,205,147, 192,147,202, 192,268,205, 193,203,146, 193,146,200,
651 193,266,203, 194,278,196, 194,262,249, 196,259,190, 196,144,194,
652 196,278,248, 197,181,190, 197,260,195, 197,277,247, 198,261,189,
653 198,148,191, 198,276,246, 199,182,189, 199,262,194, 199,275,245,
654 200,274,193, 201,273,188, 202,272,192, 203,271,187, 204,270,191,
655 205,269,186, 206,215,209, 206,216,90, 207,215,206, 207,214,208,
656 208,231,215, 208,230,228, 209,233,216, 209,232,227, 210,229,214,
657 210,651,226, 211,235,217, 211,234,225, 212,237,218, 212,236,224,
658 212,386,236, 213,238,223, 213,421,88, 214,230,208, 214,112,210,
659 214,229,222, 215,207,208, 215,232,209, 215,231,221, 216,206,209,
660 216,234,211, 216,233,220, 217,90,211, 217,386,212, 218,89,212,
661 218,238,213, 218,237,219, 219,342,238, 219,340,331, 220,346,234,
662 220,336,329, 221,348,232, 221,334,328, 222,350,230, 222,332,327,
663 223,341,326, 224,343,237, 224,339,325, 225,345,235, 225,337,324,
664 226,351,229, 226,651,445, 227,347,233, 227,335,322, 228,349,231,
665 228,333,321, 229,332,222, 229,210,226, 229,351,320, 230,214,222,
666 230,333,228, 230,350,319, 231,334,221, 231,208,228, 231,349,318,
667 232,215,221, 232,335,227, 232,348,317, 233,336,220, 233,209,227,
668 233,347,316, 234,216,220, 234,337,225, 234,346,315, 235,211,225,
669 235,345,314, 236,339,224, 236,383,313, 236,344,383, 237,340,219,
670 237,212,224, 237,343,312, 238,218,219, 238,341,223, 238,342,311,
671 239,269,205, 239,205,268, 240,270,204, 240,204,267, 241,271,203,
672 241,203,266, 242,272,202, 242,202,265, 243,273,201, 243,201,264,
673 244,274,200, 244,200,263, 250,145,407, 251,266,193, 251,193,274,
674 252,268,192, 252,192,272, 253,191,270, 256,263,188, 256,188,273,
675 257,265,187, 257,187,271, 258,267,186, 258,186,269, 259,196,248,
676 22,650,435, 260,197,247, 261,198,246, 262,199,245, 21,650,22,
677 275,189,255, 276,191,253, 277,190,254, 278,194,249, 323,226,445,
678 330,217,235, 330,235,338, 332,229,320, 333,230,319, 334,231,318,
679 335,232,317, 336,233,316, 337,234,315, 338,235,314, 339,236,313,
680 664,653,661, 340,237,312, 341,238,311, 342,219,331, 343,224,325,
681 344,236,386, 345,225,324, 346,220,329, 347,227,322, 348,221,328,
682 349,228,321, 665,653,664, 350,222,327, 351,226,323, 380,217,330,
683 405,408,145, 405,412,406, 406,408,405, 407,145,408, 408,341,407,
684 411,406,412, 413,412,461, 414,413,416, 415,414,416, 416,413,608,
685 418,87,421, 418,416,608, 419,223,326, 420,213,223, 420,223,419,
686 421,417,418, 421,213,420, 421,430,428, 421,87,88, 428,430,429,
687 430,421,420, 435,650,439, 439,650,440, 440,650,447, 442,651,437,
688 444,195,323, 444,323,445, 445,651,442, 446,195,444, 447,650,195,
689 447,195,446, 453,452,471, 455,453,471, 460,455,471, 461,617,413,
690 462,457,459, 465,43,44, 471,452,464, 471,464,470, 486,485,492,
691 488,458,1301, 488,631,458, 488,1301,459, 488,480,481, 488,481,489,
692 489,574,490, 490,631,489, 490,574,491, 490,632,631, 491,632,490,
693 495,105,106, 495,106,107, 495,107,108, 495,108,109, 495,109,110,
694 495,110,496, 497,495,496, 498,105,495, 498,495,497, 499,506,505,
695 505,68,71, 506,68,505, 506,67,68, 508,503,512, 509,499,505,
696 512,74,502, 512,502,601, 513,563,514, 518,517,520, 518,564,76,
697 519,75,564, 519,74,75, 523,522,561, 525,518,520, 526,518,525,
698 528,523,561, 529,528,561, 531,518,526, 532,518,531, 534,529,561,
699 535,534,561, 537,518,532, 538,518,537, 540,535,561, 546,541,563,
700 547,546,563, 552,547,563, 553,552,563, 556,519,564, 558,553,563,
701 559,557,558, 559,558,562, 560,74,519, 560,519,556, 560,556,557,
702 560,557,559, 560,559,565, 561,514,563, 562,563,513, 562,558,563,
703 562,513,568, 564,543,544, 564,544,549, 564,549,550, 564,550,555,
704 564,555,556, 565,74,560, 565,559,568, 566,84,567, 567,84,569,
705 568,559,562, 568,513,566, 571,85,598, 571,84,85, 572,84,571,
706 573,491,574, 574,489,573, 583,575,582, 585,582,588, 586,583,584,
707 587,583,586, 589,575,590, 598,85,609, 599,598,609, 653,111,654,
708 600,601,502, 600,502,577, 603,602,605, 604,578,593, 604,616,603,
709 604,603,605, 606,594,599, 606,599,609, 607,633,491, 607,616,604,
710 607,491,616, 607,458,633, 608,87,418, 608,617,607, 608,606,609,
711 608,413,617, 609,87,608, 609,86,87, 610,512,611, 611,512,601,
712 611,603,615, 612,508,512, 612,512,610, 615,616,491, 615,491,614,
713 615,603,616, 625,624,630, 627,625,630, 628,627,630, 629,628,630,
714 630,624,626, 630,626,629, 631,488,489, 632,458,631, 632,491,633,
715 633,458,632, 639,651,112, 641,774,640, 32,637,33, 667,640,668,
716 668,640,669, 669,640,774, 67,506,100, 672,669,774, 676,673,820,
717 677,676,823, 680,677,826, 688,685,1131, 712,711,754, 720,719,1172,
718 721,720,1171, 725,1178,726, 729,726,1185, 729,1230,730, 73,512,503,
719 730,1230,1184, 74,512,73, 743,82,83, 745,744,1237, 745,743,744,
720 745,1275,746, 746,85,743, 746,743,745, 746,609,85, 746,1275,86,
721 747,86,1275, 748,747,1086, 748,883,751, 748,1086,878, 751,882,752,
722 752,881,870, 76,564,75, 762,1172,763, 763,1172,719, 769,768,1161,
723 770,769,1161, 771,770,1161, 772,771,1161, 773,772,1161, 774,641,642,
724 775,638,639, 781,647,782, 655,654,111, 800,848,801, 801,847,802,
725 801,848,810, 802,846,803, 802,847,809, 803,846,808, 804,845,800,
726 805,844,804, 805,636,806, 806,844,805, 806,860,844, 807,845,804,
727 807,804,844, 807,862,845, 808,1073,1070, 809,863,846, 809,866,856,
728 810,865,847, 810,868,855, 811,800,845, 811,867,848, 812,644,645,
729 812,645,840, 813,812,842, 814,813,842, 816,815,843, 817,816,839,
730 818,817,839, 819,818,835, 820,813,814, 820,814,815, 820,815,816,
731 820,816,823, 821,672,774, 821,813,820, 822,642,643, 822,643,644,
732 822,644,812, 822,812,813, 822,813,821, 823,676,820, 824,681,825,
733 826,677,823, 83,742,743, 831,646,647, 831,647,781, 834,646,831,
734 844,859,807, 845,861,811, 846,864,808, 846,802,809, 846,863,851,
735 847,866,809, 847,801,810, 847,865,850, 848,868,810, 848,800,811,
736 848,867,849, 849,934,868, 849,932,923, 85,84,743, 850,936,866,
737 850,930,922, 851,938,864, 851,928,921, 852,861,845, 852,926,861,
738 852,845,862, 853,859,844, 853,924,859, 853,844,860, 854,811,861,
739 854,935,867, 855,937,865, 855,933,917, 856,939,863, 856,931,916,
740 857,862,807, 857,807,859, 857,927,862, 858,637,1113, 858,860,806,
741 858,925,860, 859,943,857, 86,609,746, 860,942,853, 861,941,854,
742 862,940,852, 863,928,851, 863,809,856, 863,939,909, 864,846,851,
743 864,938,908, 865,930,850, 865,810,855, 865,937,907, 866,847,850,
744 866,931,856, 866,936,906, 867,932,849, 867,811,854, 867,935,905,
745 868,848,849, 868,933,855, 868,934,904, 870,880,871, 871,879,775,
746 873,879,871, 873,895,879, 873,871,880, 874,880,870, 874,897,880,
747 874,870,881, 875,638,775, 875,775,879, 876,881,752, 876,899,881,
748 876,752,882, 877,882,751, 877,1051,882, 877,751,883, 878,883,748,
749 878,903,883, 879,894,875, 88,218,213, 880,896,873, 881,898,874,
750 882,900,876, 883,902,877, 884,902,883, 884,1005,902, 884,883,903,
751 885,898,881, 885,1001,898, 885,881,899, 886,896,880, 886,999,896,
752 886,880,897, 887,894,879, 887,997,894, 887,879,895, 888,878,1085,
753 888,903,878, 888,1006,903, 889,901,877, 889,1004,901, 889,877,902,
754 89,217,212, 89,218,88, 890,899,876, 890,1002,899, 890,876,900,
755 891,638,875, 891,875,894, 892,897,874, 892,1000,897, 892,874,898,
756 893,895,873, 893,998,895, 893,873,896, 894,1016,891, 895,1015,887,
757 896,1014,893, 897,1013,886, 898,1012,892, 899,1011,885, 656,655,159,
758 90,216,211, 90,217,89, 900,1010,890, 900,882,995, 901,1051,877,
759 902,1008,889, 903,1007,884, 91,57,58, 910,940,862, 910,862,927,
760 911,941,861, 911,861,926, 912,942,860, 912,860,925, 913,943,859,
761 913,859,924, 914,927,857, 914,857,943, 918,854,941, 919,924,853,
762 919,853,942, 920,926,852, 920,852,940, 928,863,909, 929,864,908,
763 93,92,484, 930,865,907, 931,866,906, 932,867,905, 933,868,904,
764 934,849,923, 935,854,918, 936,850,922, 937,855,917, 938,851,921,
765 939,856,916, 94,93,484, 96,95,476, 97,96,476, 976,903,1006,
766 976,1007,903, 977,902,1005, 977,1008,902, 978,901,1004, 978,1048,901,
767 979,900,1003, 979,1010,900, 98,97,476, 980,899,1002, 980,1011,899,
768 981,898,1001, 981,1012,898, 982,897,1000, 982,1013,897, 983,1014,896,
769 983,896,999, 984,1015,895, 984,895,998, 985,1016,894, 985,894,997,
770 986,893,1014, 986,998,893, 987,892,1012, 987,1000,892, 988,891,1016,
771 988,858,1110, 989,890,1010, 989,1002,890, 99,506,499, 990,889,1008,
772 990,1004,889, 991,888,1084, 991,1006,888, 992,887,1015, 992,997,887,
773 993,886,1013, 993,999,886, 994,885,1011, 994,1001,885, 995,882,1045,
774 996,884,1007, 996,1005,884,
776 QUADS, 648,666,130,131, 648,649,20,19, 657,658,15,14,
777 1000,987,1032,1031, 1001,994,1036,1035, 1002,989,1040,1039,
778 1003,995,1044,1043, 1004,990,1053,1052, 1005,996,1057,1056,
779 1006,991,1061,1060, 1007,976,1059,1058, 1008,977,1055,1054,
780 1009,906,973,1047, 101,64,67,100, 1010,979,1042,1041,
781 1011,980,1038,1037, 1012,981,1034,1033, 1013,982,1030,1029,
782 1014,983,1026,1025, 1015,984,1022,1021, 1016,985,1018,1017,
783 102,63,64,101, 103,60,63,102, 104,59,60,103, 1045,882,1051,1009,
784 1045,1009,1047,1046, 1048,978,1050,1049, 105,104,103,106,
785 106,103,102,107, 1061,991,1071,1075, 1062,939,1004,1052,
786 1062,1052,1053,1063, 1063,909,939,1062, 1064,928,1008,1054,
787 1064,1054,1055,1065, 1065,921,928,1064, 1066,938,1005,1056,
788 1066,1056,1057,1067, 1067,908,938,1066, 1068,929,1007,1058,
789 1068,1058,1059,1069, 1069,915,929,1068, 107,102,101,108,
790 1071,991,1084,1076, 1072,915,976,1006, 1073,1006,1060,1074,
791 1074,1060,1061,1075, 1075,1071,1073,1074, 1078,1077,1076,1079,
792 108,101,100,109, 1080,1079,1085,1095, 1081,1080,1082,1083,
793 1082,1080,1092,1091, 1084,1085,1087,1088, 1085,1079,1089,1087,
794 1086,1082,1091,1093, 1088,1087,1089,1090, 1089,1079,1076,1090,
795 109,100,99,110, 1090,1076,1084,1088, 1092,1080,1095,1094,
796 1093,1091,1092,1094, 1096,27,26,431, 1097,638,1103,1098,
797 658,659,16,15, 110,99,499,496, 1100,1099,1102,1104,
798 1101,1100,1104,1105, 1102,1099,1098,1103, 1106,1105,1104,1107,
799 1107,1104,1102,1109, 1109,1102,1103,1108, 1110,1109,1108,1111,
800 1112,1107,1109,1110, 1113,1106,1107,1112, 1115,819,828,1116,
801 1117,784,791,1120, 1118,1116,1117,1119, 1119,1117,1120,1121,
802 1120,791,1129,1122, 1121,1120,1122,1126, 1122,1123,1125,1126,
803 1126,1125,1154,1137, 1127,1124,1302,1303, 1128,1123,1122,1129,
804 1128,803,1070,1303, 1129,796,803,1128, 113,114,123,124,
805 1130,1115,1116,1118, 1131,1114,1115,1130, 1132,1133,1140,1141,
806 1133,1134,1139,1140, 1134,1135,1138,1139, 1136,688,1131,1130,
807 1138,1135,1136,1137, 1138,1137,1154,1146, 1139,1138,1146,1145,
808 114,115,122,123, 1140,1139,1145,1144, 1141,1140,1144,1143,
809 1142,761,1132,1141, 1143,758,1142,1141, 1143,1144,1149,1150,
810 1144,1145,1148,1149, 1145,1146,1147,1148, 1148,1147,1155,1153,
811 1149,1148,1153,1152, 115,116,121,122, 115,114,166,167,
812 1150,757,758,1143, 1150,1149,1152,1151, 1151,754,755,1150,
813 1158,712,754,1151, 1158,1152,1160,1159, 1160,1152,1153,1155,
814 1160,1155,1239,1177, 1165,762,773,1162, 1165,1162,1163,1166,
815 1166,1163,1164,1167, 1167,1159,1176,1166, 1169,1170,1173,1174,
816 1173,1170,1171,1175, 1174,1173,1177,1239, 1175,1165,1166,1176,
817 1176,1159,1160,1177, 1177,1173,1175,1176, 1182,1183,1186,1187,
818 1187,1186,1191,1190, 1188,1181,1182,1187, 1189,1188,1187,1190,
819 119,118,117,120, 1190,1191,1192,1193, 1193,1192,1197,1196,
820 1194,1189,1190,1193, 1195,1194,1193,1196, 1196,1197,1198,1199,
821 1199,1198,1203,1202, 659,660,17,16, 659,658,177,171, 120,117,113,124,
822 1200,1195,1196,1199, 1201,1200,1199,1202, 1202,1203,1204,1205,
823 1204,1184,1230,1209, 1205,1204,1209,1208, 1206,1201,1202,1205,
824 1207,1206,1205,1208, 1208,1209,1210,1211, 1211,1210,1215,1214,
825 1212,1207,1208,1211, 1213,1212,1211,1214, 1214,1215,1216,1217,
826 1217,1216,1221,1220, 1218,1213,1214,1217, 1219,1218,1217,1220,
827 122,121,128,127, 1220,1221,1222,1223, 1224,1219,1220,1223,
828 1227,1180,1181,1188, 1227,1206,1207,1229, 123,122,127,126,
829 1231,726,1168,1233, 1233,1168,1243,1235, 1234,1231,1233,1232,
830 1236,1235,1243,1242, 1236,1242,1244,1247, 1237,1238,1245,1246,
831 1238,744,1235,1236, 1239,1157,1280,1279, 124,123,126,125,
832 1244,1242,1271,1270, 1245,1238,1236,1247, 1246,1245,1262,1261,
833 1247,1244,1259,1263, 1249,1241,1256,1253, 125,126,135,136,
834 1251,1248,1249,1250, 1251,1250,1262,1263, 1254,1251,1263,1259,
835 1255,1241,1248,1254, 1257,1256,1255,1258, 1258,1255,1254,1259,
836 126,127,134,135, 1260,1253,1256,1257, 1261,1252,1253,1260,
837 1262,1250,1252,1261, 1262,1245,1247,1263, 1264,1237,1246,1265,
838 1265,1246,1261,1260, 1268,1243,1266,1269, 1269,1266,1267,1277,
839 127,128,133,134, 1271,1242,1243,1268, 1272,1260,1257,1274,
840 1273,1258,1259,1270, 1273,1124,1127,1283, 1274,1257,1258,1273,
841 1278,1174,1239,1279, 128,121,451,454, 1284,1276,1278,1285,
842 1285,1278,1279,1287, 1286,1277,1276,1284, 1287,1279,1280,1288,
843 1288,1280,1281,1289, 1289,1281,1277,1286, 129,120,124,125,
844 1290,1284,1285,1291, 1291,1285,1287,1293, 1292,1286,1284,1290,
845 1293,1287,1288,1294, 1294,1288,1289,1295, 1295,1289,1286,1292,
846 660,666,18,17, 130,666,660,119, 130,119,120,129, 1301,458,461,1300,
847 1301,1300,462,459, 1303,1070,1077,1127, 1303,1302,1125,1128,
848 131,130,129,132, 132,129,125,136, 134,133,140,139, 135,134,139,138,
849 136,135,138,137, 140,133,463,462, 141,132,136,137, 142,131,132,141,
850 154,153,160,163, 158,36,37,157, 159,655,111,158, 161,156,155,162,
851 161,41,42,448, 162,155,154,163, 163,40,41,162, 164,113,117,169,
852 164,169,170,174, 165,116,115,167, 165,156,449,450, 166,114,113,164,
853 167,166,173,172, 169,117,118,168, 170,169,168,171, 172,156,165,167,
854 173,166,164,174, 174,170,178,175, 175,178,179,180, 176,155,172,173,
855 176,173,174,175, 177,149,179,178, 178,170,171,177, 179,151,152,180,
856 180,153,176,175, 649,648,131,142, 649,650,21,20, 201,145,250,264,
857 206,90,753,869, 207,206,869,872, 263,256,400,399, 264,250,404,403,
858 265,257,306,305, 266,251,310,309, 267,258,298,297, 268,252,302,301,
859 269,239,300,299, 270,240,296,295, 271,241,308,307, 272,242,304,303,
860 273,243,402,401, 274,244,398,397, 279,260,247,280, 280,247,320,353,
861 281,277,254,282, 282,254,327,355, 283,259,248,284, 284,248,319,357,
862 285,278,249,286, 286,249,321,359, 287,262,245,288, 288,245,318,361,
863 289,275,255,290, 19,18,666,648, 290,255,328,363, 291,261,246,292,
864 292,246,317,365, 293,276,253,294, 294,253,322,367, 296,240,316,369,
865 298,258,329,371, 650,649,143,195, 300,239,315,373, 302,252,324,375,
866 304,242,314,377, 306,257,330,379, 308,241,344,382, 661,653,652,662,
867 310,251,313,385, 311,250,407,341, 312,256,273,340, 313,251,274,339,
868 314,242,265,338, 315,239,268,337, 316,240,267,336, 317,246,276,335,
869 318,245,275,334, 319,248,278,333, 662,667,668,663, 320,247,277,332,
870 321,249,262,349, 322,253,270,347, 323,195,260,351, 324,252,272,345,
871 325,244,263,343, 327,254,259,350, 328,255,261,348, 329,258,269,346,
872 663,668,669,670, 330,257,271,380, 331,243,264,342, 332,277,281,354,
873 333,278,285,358, 334,275,289,362, 335,276,293,366, 336,267,297,370,
874 337,268,301,374, 338,265,305,378, 339,274,397,387, 664,661,662,663,
875 340,273,401,391, 342,264,403,393, 343,263,399,389, 344,241,266,383,
876 345,272,303,376, 346,269,299,372, 347,270,295,368, 348,261,291,364,
877 349,262,287,360, 665,664,663,670, 350,259,283,356, 351,260,279,352,
878 352,279,280,353, 353,320,351,352, 354,281,282,355, 355,327,332,354,
879 356,283,284,357, 357,319,350,356, 358,285,286,359, 359,321,333,358,
880 36,665,670,671, 360,287,288,361, 361,318,349,360, 362,289,290,363,
881 363,328,334,362, 364,291,292,365, 365,317,348,364, 366,293,294,367,
882 367,322,335,366, 368,295,296,369, 369,316,347,368, 37,36,671,674,
883 370,297,298,371, 371,329,336,370, 372,299,300,373, 373,315,346,372,
884 374,301,302,375, 375,324,337,374, 376,303,304,377, 377,314,345,376,
885 378,305,306,379, 379,330,338,378, 38,37,674,675, 380,271,307,381,
886 381,307,308,382, 382,344,380,381, 383,266,309,384, 384,309,310,385,
887 385,313,383,384, 386,217,380,344, 388,325,339,387, 388,387,397,398,
888 39,38,675,678, 390,312,343,389, 390,389,399,400, 392,331,340,391,
889 392,391,401,402, 394,311,342,393, 394,393,403,404, 395,341,408,409,
890 396,326,341,395, 396,395,409,410, 398,244,325,388, 40,39,678,679,
891 400,256,312,390, 402,243,331,392, 404,250,311,394, 405,140,462,1300,
892 406,326,396,410, 408,406,410,409, 41,40,679,682, 411,412,413,414,
893 411,414,424,425, 412,405,1300,461, 417,415,416,418, 419,326,406,411,
894 419,411,425,423, 42,41,682,683, 420,414,415,430, 422,420,419,423,
895 424,414,420,422, 424,422,423,425, 426,417,421,428, 427,415,417,426,
896 427,426,428,429, 43,42,683,686, 430,415,427,429, 431,651,639,1096,
897 431,26,25,432, 432,25,24,433, 432,433,436,437, 433,24,23,434,
898 434,23,22,435, 436,433,434,438, 436,438,441,443, 437,651,431,432,
899 437,436,443,442, 438,434,435,439, 438,439,440,441, 44,43,686,687,
900 441,440,447,446, 442,443,444,445, 443,441,446,444, 448,42,43,465,
901 449,156,161,448, 449,448,465,464, 45,44,687,690, 450,449,464,452,
902 451,116,165,450, 451,450,452,453, 454,451,453,455, 456,454,455,460,
903 456,457,462,463, 459,457,456,460, 46,45,690,691, 461,458,607,617,
904 463,128,454,456, 465,44,470,464, 466,98,476,475, 466,49,50,98,
905 467,47,49,466, 468,46,47,467, 469,45,46,468, 47,46,691,694,
906 470,44,45,469, 470,469,472,471, 472,469,468,473, 473,468,467,474,
907 474,467,466,475, 476,95,477,475, 478,474,475,477, 479,473,474,478,
908 48,695,696,697, 480,472,473,479, 481,480,479,482, 482,479,478,483,
909 483,478,477,484, 486,483,484,485, 487,482,483,486, 487,486,494,489,
910 488,459,460,471, 488,471,472,480, 489,481,482,487, 49,47,694,48,
911 492,58,59,493, 493,59,104,501, 494,486,492,493, 494,493,510,511,
912 497,496,499,500, 498,497,500,501, 652,640,667,662, 652,653,10,9,
913 50,49,48,697, 500,499,509,510, 501,104,105,498, 502,74,565,567,
914 504,72,73,503, 505,71,72,504, 505,504,507,509, 507,504,503,508,
915 509,507,511,510, 51,50,697,698, 510,493,501,500, 511,507,508,573,
916 513,81,82,566, 514,80,81,513, 515,79,80,514, 515,514,561,522,
917 516,78,79,515, 516,515,522,521, 517,77,78,516, 518,76,77,517,
918 52,51,698,701, 520,517,516,521, 521,522,523,524, 524,523,528,527,
919 525,520,521,524, 526,525,524,527, 527,528,529,530, 53,52,701,702,
920 530,529,534,533, 531,526,527,530, 532,531,530,533, 533,534,535,536,
921 536,535,540,539, 537,532,533,536, 538,537,536,539, 539,540,541,542,
922 54,53,702,705, 541,540,561,563, 542,541,546,545, 543,538,539,542,
923 544,543,542,545, 545,546,547,548, 548,547,552,551, 549,544,545,548,
924 55,54,705,706, 550,549,548,551, 551,552,553,554, 554,553,558,557,
925 555,550,551,554, 556,555,554,557, 56,55,706,709, 564,518,538,543,
926 566,82,743,84, 567,565,568,566, 569,84,572,570, 57,56,709,710,
927 570,572,579,581, 573,489,494,511, 573,508,612,613, 577,502,567,569,
928 577,569,570,576, 577,576,605,602, 578,576,570,581, 579,572,571,580,
929 58,57,710,713, 580,571,598,599, 581,579,596,597, 582,575,589,588,
930 583,582,585,584, 586,584,596,595, 587,586,595,594, 588,589,592,593,
931 589,590,591,592, 59,58,713,714, 590,575,583,587, 590,587,594,591,
932 591,594,606,608, 592,591,608,607, 593,578,581,597, 593,592,607,604,
933 595,580,599,594, 596,579,580,595, 596,584,585,597, 597,585,588,593,
934 653,654,11,10, 60,59,714,61, 600,577,602,603, 601,600,603,611,
935 605,576,578,604, 61,716,717,62, 610,611,620,618, 611,615,623,620,
936 612,610,618,619, 613,612,619,621, 614,491,573,613, 614,613,621,622,
937 615,614,622,623, 618,620,626,624, 619,618,624,625, 62,717,718,65,
938 620,623,629,626, 621,619,625,627, 622,621,627,628, 623,622,628,629,
939 63,60,61,62, 639,638,1097,1096, 64,63,62,65, 647,634,793,782,
940 1,647,646,2, 2,646,645,3, 65,718,719,66, 3,645,644,4, 4,644,643,5,
941 5,643,642,6, 6,642,641,7, 7,641,640,8, 8,640,652,9, 28,27,1096,1097,
942 29,28,1097,1098, 66,719,720,69, 30,29,1098,1099, 31,30,1099,1100,
943 32,31,1100,1101, 33,637,636,34, 34,636,635,35, 35,635,634,0,
944 0,634,647,1, 67,64,65,66, 670,669,672,671, 671,672,673,674,
945 673,672,821,820, 674,673,676,675, 675,676,677,678, 678,677,680,679,
946 679,680,681,682, 68,67,66,69, 681,680,826,825, 682,681,684,683,
947 683,684,685,686, 684,681,824,1114, 685,684,1114,1131,
948 686,685,688,687, 687,688,689,690, 689,688,1136,1135, 69,720,721,70,
949 690,689,692,691, 691,692,693,694, 692,689,1135,1134,
950 693,692,1134,1133, 694,693,695,48, 695,693,1133,1132,
951 696,695,1132,761, 697,696,699,698, 698,699,700,701, 699,696,761,760,
952 654,655,12,11, 70,721,722,723, 700,699,760,759, 701,700,703,702,
953 702,703,704,705, 703,700,759,758, 704,703,758,757, 705,704,707,706,
954 706,707,708,709, 707,704,757,756, 708,707,756,755, 709,708,711,710,
955 71,68,69,70, 710,711,712,713, 711,708,755,754, 713,712,715,714,
956 714,715,716,61, 715,712,1158,1159, 716,715,767,766, 717,716,766,765,
957 718,717,765,764, 719,718,764,763, 72,71,70,723, 722,721,1171,1170,
958 723,722,725,724, 724,725,726,727, 725,722,1170,1169, 727,726,729,728,
959 728,729,730,731, 73,72,723,724, 731,730,733,732, 732,733,734,735,
960 733,730,1184,1183, 734,733,1183,1182, 735,734,737,736,
961 736,737,738,739, 737,734,1182,1181, 738,737,1181,1180,
962 739,738,741,740, 74,73,724,727, 740,741,742,83, 741,738,1180,1179,
963 742,741,1179,1232, 743,742,1232,744, 749,748,751,750, 75,74,727,728,
964 750,751,752,753, 753,752,870,869, 76,75,728,731, 762,763,772,773,
965 763,764,771,772, 764,765,770,771, 765,766,769,770, 766,767,768,769,
966 767,715,1159,1167, 768,767,1167,1164, 77,76,731,732, 774,642,822,821,
967 775,639,872,871, 776,780,783,787, 776,777,829,827, 778,779,828,830,
968 78,77,732,735, 780,781,782,783, 780,776,827,832, 781,780,832,831,
969 783,782,793,792, 784,779,778,785, 785,778,777,786, 786,777,776,787,
970 787,783,792,788, 788,792,795,799, 789,786,787,788, 79,78,735,736,
971 790,785,786,789, 791,784,785,790, 792,793,794,795, 793,634,635,794,
972 794,635,636,805, 795,794,805,804, 796,791,790,797, 797,790,789,798,
973 798,789,788,799, 799,795,804,800, 655,656,13,12, 80,79,736,739,
974 801,798,799,800, 802,797,798,801, 803,796,797,802, 806,636,637,858,
975 81,80,739,740, 815,814,842,843, 817,818,825,826, 818,819,824,825,
976 82,81,740,83, 823,816,817,826, 824,819,1115,1114, 827,829,836,837,
977 828,779,1117,1116, 828,819,835,830, 829,777,778,830, 831,832,833,834,
978 833,832,827,837, 834,833,841,840, 835,818,839,836, 836,829,830,835,
979 837,836,839,838, 839,816,843,838, 840,645,646,834, 841,833,837,838,
980 842,812,840,841, 842,841,838,843, 86,747,748,749, 869,870,871,872,
981 872,639,112,207, 88,87,86,749, 89,88,749,750, 656,657,14,13,
982 90,89,750,753, 91,58,492,485, 910,927,952,953, 911,926,956,957,
983 912,925,944,945, 913,924,948,949, 914,943,950,951, 915,808,864,929,
984 918,941,958,959, 919,942,946,947, 92,91,485,484, 92,56,57,91,
985 920,940,954,955, 924,919,992,1015, 925,858,988,1016, 926,920,993,1013,
986 927,914,986,1014, 928,909,990,1008, 929,908,996,1007, 93,55,56,92,
987 930,907,979,1003, 931,906,1009,1048, 932,905,981,1001,
988 933,904,980,1002, 934,923,994,1011, 935,918,987,1012,
989 936,922,995,1045, 937,917,989,1010, 938,921,977,1005,
990 939,916,978,1004, 94,54,55,93, 940,910,983,999, 941,911,982,1000,
991 942,912,985,997, 943,913,984,998, 944,925,1016,1017,
992 945,944,1017,1018, 946,942,997,1019, 947,946,1019,1020,
993 948,924,1015,1021, 949,948,1021,1022, 95,94,484,477, 95,53,54,94,
994 950,943,998,1023, 951,950,1023,1024, 952,927,1014,1025,
995 953,952,1025,1026, 954,940,999,1027, 955,954,1027,1028,
996 956,926,1013,1029, 957,956,1029,1030, 958,941,1000,1031,
997 959,958,1031,1032, 96,52,53,95, 960,935,1012,1033, 961,960,1033,1034,
998 961,905,935,960, 962,932,1001,1035, 963,962,1035,1036,
999 963,923,932,962, 964,934,1011,1037, 965,964,1037,1038,
1000 965,904,934,964, 966,933,1002,1039, 967,966,1039,1040,
1001 967,917,933,966, 968,937,1010,1041, 969,968,1041,1042,
1002 969,907,937,968, 97,51,52,96, 970,930,1003,1043, 971,970,1043,1044,
1003 971,922,930,970, 972,936,1045,1046, 973,972,1046,1047,
1004 973,906,936,972, 974,931,1048,1049, 975,974,1049,1050,
1005 975,916,931,974, 976,915,1069,1059, 977,921,1065,1055,
1006 978,916,975,1050, 979,907,969,1042, 98,50,51,97, 980,904,965,1038,
1007 981,905,961,1034, 982,911,957,1030, 983,910,953,1026,
1008 984,913,949,1022, 985,912,945,1018, 986,914,951,1024,
1009 987,918,959,1032, 989,917,967,1040, 990,909,1063,1053,
1010 992,919,947,1020, 993,920,955,1028, 994,923,963,1036,
1011 995,922,971,1044, 996,908,1067,1057, 997,992,1020,1019,
1012 998,986,1024,1023, 999,993,1028,1027,
1014 /* The base of the knight */
1016 9510,0, 9510,756, SEAM, 9134,1129, 9447,1487,
1017 9447,1951, 9103,2371, STEPDOWN, 8211,3083,
1018 7167,4242, 6662,5664, 7040,7142, STEPUP, SEAM, 7935,8560,
1024 static unsigned short bishop_data[] = {
1025 VERTICES, SETBACKREF,0, 5233,26960,0, 5154,26960,909, 4918,26960,1790,
1026 4532,26960,2617, 4009,26960,3364, 3364,26960,4009, 2617,26960,4532,
1027 1790,26960,4918, 909,26960,5154, 0,26833,5233, -909,26960,5154,
1028 -1790,26960,4918, -2617,26960,4532, -3364,26960,4009,
1029 -4009,26960,3364, -4532,26960,2617, -4918,26960,1790,
1030 -5154,26960,909, -5233,26960,0, -5154,26960,-909, -4918,26960,-1790,
1031 -4532,26960,-2617, -4009,26960,-3364, -3364,26960,-4009,
1032 -2617,26960,-4532, -1790,26960,-4918, -909,26960,-5154, 0,26833,-5233,
1033 909,26960,-5154, 1790,26960,-4918, 2617,26960,-4532, 3364,26960,-4009,
1034 4009,26960,-3364, 4532,26960,-2617, 4918,26960,-1790, 5154,26960,-909,
1035 SETBACKREF,1, 3812,31178,0, 3765,31144,729, 3624,31040,1435,
1036 3395,30872,2153, 3084,30642,2820, 2701,30360,3389, 2076,29899,4102,
1037 1492,30015,4340, 845,30033,4442, 0,30044,4511, -657,30063,4443,
1038 -1481,30081,4214, -2190,30081,3884, -2830,30081,3435,
1039 -3383,30081,2883, -3831,30081,2242, -4162,30081,1534,
1040 -4364,30081,779, -4432,30081,0, -4364,30081,-779, -4162,30081,-1534,
1041 -3831,30081,-2242, -3383,30081,-2883, -2830,30081,-3435,
1042 -2190,30081,-3884, -1481,30081,-4214, -657,30063,-4443, 0,30044,-4511,
1043 845,30033,-4442, 1492,30015,-4340, 2076,29899,-4102, 2701,30360,-3388,
1044 3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729,
1045 240,28546,-4957, 884,29021,-4784, 1490,29467,-4537, 2076,29899,-4102,
1046 2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153,
1047 3624,31040,-1435, 3765,31144,-729, 2177,28477,4637, 1021,27605,5037,
1048 1021,27605,-5042, 2170,28478,-4644, 0,26833,-5233, 0,26833,5233,
1049 -3153,28619,-3758, 240,28546,4957, 884,29021,4784, 2076,29899,4102,
1050 2701,30360,3389, 3084,30642,2820, 3395,30872,2153, 3624,31040,1435,
1051 3765,31144,729, -719,28582,4883, 4863,28569,977, 4560,28569,1925,
1052 4064,28569,2815, 3465,28569,3723, 2622,28569,4448, 2621,28583,-4401,
1053 3473,28588,-3691, 4064,28569,-2815, 4560,28569,-1925, 4863,28569,-977,
1054 4965,28569,0, -1678,28619,4610, -3153,28619,3758, -2453,28619,4248,
1055 -4248,28619,2453, -3758,28619,3153, -4831,28619,852, -4906,28619,0,
1056 -4831,28619,-852, -4610,28619,-1678, -4248,28619,-2453,
1057 -3758,28619,-3153, -1678,28619,-4610, -2453,28619,-4248,
1058 -644,27895,5037, -644,27895,-5037, -4610,28619,1678, -719,28582,-4883,
1059 2170,28478,-4644, 1021,27605,-5042, 1021,27605,5037, 2177,28477,4637,
1060 0,26833,-5233, 0,26833,5233, -644,27895,-5037, -644,27895,5037,
1061 -644,27895,5037, -644,27895,-5037, 1490,29467,-4537, 884,29021,-4784,
1062 240,28546,-4957, 240,28546,4957, 884,29021,4784, 3812,31178,0,
1063 4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203,
1064 3193,29244,-3817, 2711,28880,-4315, 4349,30116,-867, 4197,30001,-1705,
1065 3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817,
1066 2711,28880,-4315, 1608,28047,-4906, 1608,28047,4901, 2711,28880,4310,
1067 3193,29244,3812, 3610,29558,3198, 3948,29813,2487, 4197,30001,1701,
1068 4349,30116,862, 4401,30155,-176, 1490,29467,4537, 1490,29467,4537,
1069 4401,30155,-176, 4349,30116,862, 4197,30001,1701, 3948,29813,2487,
1070 3610,29558,3198, 3193,29244,3812, 2711,28880,4310, 1608,28047,4901,
1073 TRIANGLES, 8,127,9, 7,128,154, 2,98,3, 121,96,10, 121,10,9, 121,138,96,
1074 122,27,26, 27,126,28, 66,135,65, 162,42,43, 165,164,141, 80,140,95,
1075 103,151,150, 102,125,152, 101,155,128, 100,157,156, 124,137,122,
1076 33,105,34, 29,153,125, 26,124,122,
1078 QUADS, 22,118,87,23, 21,117,118,22, 20,116,117,21, 19,115,116,20,
1079 18,114,115,19, 17,113,114,18, 16,123,113,17, 15,111,123,16, 14,112,111,15,
1080 13,109,112,14, 12,110,109,13, 11,108,110,12, 7,154,127,8, 110,108,47,48,
1081 135,136,64,65, 136,137,63,64, 138,139,44,45, 139,162,43,44, 109,110,48,49,
1082 147,161,107,106, 166,165,141,142, 167,166,142,143, 168,167,143,144,
1083 169,168,144,145, 112,109,49,50, 170,169,145,146, 171,81,84,172,
1084 111,112,50,51, 72,88,133,134, 73,89,88,72, 74,163,89,73, 75,90,163,74,
1085 76,91,90,75, 77,92,91,76, 78,93,92,77, 79,94,93,78, 80,95,94,79,
1086 81,170,146,84, 82,171,172,83, 86,82,83,85, 130,129,131,132, 123,111,51,52,
1087 113,123,52,53, 114,113,53,54, 115,114,54,55, 116,115,55,56, 117,116,56,57,
1088 118,117,57,58, 87,118,58,59, 120,87,59,60, 119,120,60,61, 107,161,160,97,
1089 106,107,0,35, 105,148,147,106, 105,106,35,34, 104,149,148,105,
1090 104,105,33,32, 103,150,149,104, 103,104,32,31, 102,152,151,103,
1091 102,103,31,30, 101,128,7,6, 100,101,6,5, 100,156,155,101, 99,100,5,4,
1092 99,158,157,100, 98,99,4,3, 98,159,158,99, 97,98,2,1, 97,160,159,98,
1093 96,108,11,10, 96,138,45,46, 124,119,61,62, 47,108,96,46, 63,137,124,62,
1094 0,107,97,1, 29,125,102,30, 28,126,153,29, 25,119,124,26, 24,120,119,25,
1097 /* Everything above the slit */
1099 8870,0,8870,731,SEAM,8519,1091,8811,1438,8811,1886,8626,2292,
1100 STEPDOWN,6989,2980,5927,4133,5548,5735,
1101 STEPUP,5388,7642,5228,7807,STEPDOWN,4427,8149,4057,8434,
1102 3493,9185,2816,13524,SEAM,2690,18532,5301,18690,
1103 STEPUP,6810,19005,6861,19277,6804,19625,STEPDOWN,6502,19845,
1104 SEAM,4305,20394,STEPUP,4796,20522,4924,20759,4778,20979,
1105 STEPDOWN,SEAM,3727,21207,SEAM,3726,22181,STEPUP,SEAM,4546,22705,
1106 SEAM,3846,23385,4718,24227,5226,25516,STEPUP,BACKREF,0,
1108 /* Everything below the slit */
1110 BACKREF,1,STEPDOWN,3548,31590,STEPDOWN,2724,32633,SEAM,1581,33500,
1111 2013,33901,STEPUP,2281,34500,2281,34936,STEPDOWN,1947,35372,
1112 STEPDOWN,1233,35734,STEPDOWN,0,35891,
1117 static unsigned short king_data[] = {
1119 11378,0,11378,856,SEAM,10928,1152,
1120 11302,1684,11302,2209,11065,2684,
1121 STEPDOWN,8964,3490,7603,4841,7116,6717,
1122 STEPUP,6911,8950,6705,9144,STEPDOWN,5678,9545,5204,9878,
1123 4481,10758,3696,14808,SEAM,3065,26979,
1124 5813,27155,STEPUP,7145,27507,7424,27812,7352,28288,7131,28533,
1125 5477,28882,5397,29010,5406,29363,4903,29934,
1126 STEPDOWN,SEAM,3944,30227,
1127 SEAM,3974,31478,4703,31849,STEPUP,4832,32092,4756,32370,
1128 SEAM,3975,32620,6899,39055,6877,39351,2833,39514,
1129 2786,39612,2786,39807,2734,39856,STEPDOWN,STEPDOWN,2590,39905,0,39969,
1132 QUADSTRIP,-1613,39866,0,-1543,39866,702,-1651,40481,0,-1580,40590,702,
1133 -1531,40917,0,-1465,41008,702,
1134 QUADSTRIP,-1531,40917,0,-1465,41008,702,-2956,41104,0,-2829,41187,702,
1135 -3075,41520,0,-2943,41585,702,-3075,43849,0,-2943,43805,702,
1136 -2862,44347,0,-2739,44282,702,-1116,44636,0,-1068,44554,702,
1137 QUADSTRIP,-1116,44636,0,-1068,44554,702,-1102,45692,0,-1054,45576,702,
1138 -973,45829,0,-973,45747,702,973,45829,0,973,45747,702,1102,45692,0,
1139 1054,45576,702,1116,44636,0,1068,44554,702,
1140 QUADSTRIP,1116,44636,0,1068,44554,702,2862,44347,0,2739,44282,702,
1141 3075,43849,0,2943,43805,702,3075,41520,0,2943,41585,702,2956,41104,0,
1142 2829,41187,702,1531,40917,0,1465,41008,702,
1143 QUADSTRIP,1531,40917,0,1465,41008,702,1651,40481,0,1580,40590,702,
1144 1613,39866,0,1543,39866,702,
1145 QUADSTRIP,-1543,39866,702,1543,39866,702,-1580,40590,702,
1146 1580,40590,702,-1465,41008,702,1465,41008,702,-2829,41187,702,
1147 2829,41187,702,-2943,41585,702,2943,41585,702,-2943,43805,702,
1148 2943,43805,702,-2739,44282,702,2739,44282,702,-1068,44554,702,
1149 1068,44554,702,-1054,45576,702,1054,45576,702,-973,45747,702,
1151 QUADSTRIP,-1543,39866,-702,BACKREF,0,0,-1580,40590,-702,BACKREF,0,2,
1152 -1465,41008,-702,BACKREF,0,4,
1153 QUADSTRIP,-1465,41008,-702,BACKREF,0,6,-2829,41187,-702,BACKREF,0,8,
1154 -2943,41585,-702,BACKREF,0,10,-2943,43805,-702,BACKREF,0,12,
1155 -2739,44282,-702,BACKREF,0,14,-1068,44554,-702,BACKREF,0,16,
1156 QUADSTRIP,-1068,44554,-702,BACKREF,0,18,-1054,45576,-702,
1157 BACKREF,0,20,-973,45747,-702,BACKREF,0,22,973,45747,-702,BACKREF,0,24,
1158 1054,45576,-702,BACKREF,0,26,1068,44554,-702,BACKREF,0,28,
1159 QUADSTRIP,1068,44554,-702,BACKREF,0,30,2739,44282,-702,
1160 BACKREF,0,32,2943,43805,-702,BACKREF,0,34,2943,41585,-702,BACKREF,0,36,
1161 2829,41187,-702,BACKREF,0,38,1465,41008,-702,BACKREF,0,40,
1162 QUADSTRIP,1465,41008,-702,BACKREF,0,42,1580,40590,-702,
1163 BACKREF,0,44,1543,39866,-702,BACKREF,0,46,
1164 QUADSTRIP,1543,39866,-702,-1543,39866,-702,1580,40590,-702,
1165 -1580,40590,-702,1465,41008,-702,-1465,41008,-702,2829,41187,-702,
1166 -2829,41187,-702,2943,41585,-702,-2943,41585,-702,2943,43805,-702,
1167 -2943,43805,-702,2739,44282,-702,-2739,44282,-702,1068,44554,-702,
1168 -1068,44554,-702,1054,45576,-702,-1054,45576,-702,973,45747,-702,
1173 static unsigned short queen_data[] = {
1175 11092,0,11092,914,SEAM,10653,1284,
1176 11018,1798,11018,2358,10787,2866,
1177 STEPDOWN,8739,3726,7412,5168,6937,7171,
1178 STEPUP,6737,9556,6537,9762,STEPDOWN,5536,10191,5073,10546,
1179 4368,11485,3678,15137,SEAM,3259,26879,
1180 5966,27091,STEPUP,7332,27515,7619,27882,7545,28455,7317,28751,
1181 5654,29177,5538,29326,5542,29982,5377,30278,
1182 STEPDOWN,SEAM,4194,30585,
1183 SEAM,4226,31822,5002,32218,STEPUP,5139,32477,5058,32774,
1184 SEAM,4227,33040,STEPDOWN,4421,34778,5042,36612,5874,38429,
1185 STEPUP,SEAM,PATTERN,3,6018,39660,6018,39660,6804,39977,
1186 SEAM,PATTERN,3,5015,41139,5015,41139,5673,41460,
1188 STEPDOWN,SEAM,1381,41188,
1189 1396,42332,STEPDOWN,1082,43072,481,43476,0,43543,
1193 static unsigned short pawn_data[] = {
1196 SEAM,7102,910,7345,1199,7345,1572,7191,1910,
1197 STEPDOWN,5826,2484,4941,3446,4625,4781,
1198 STEPUP,4492,6371,4358,6508,
1199 STEPDOWN,3691,6794,2912,7657,2473,10091,
1201 STEPUP,4518,15697,4695,15900,4649,16218,4509,16382,
1202 STEPDOWN,SEAM,3150,16755,STEPUP,3858,17678,4303,18752,4455,19905,
1203 4303,21058,3858,22132,
1204 STEPDOWN,3150,23055,2227,23763,STEPDOWN,1153,24208,0,24360,
1208 static unsigned short rook_data[] = {
1210 9374,0,9374,756,SEAM,9003,1062,9311,1487,
1211 9311,1951,9116,2371,8521,3083,6701,5807,SEAM,6009,7595,
1212 6167,7812,6138,8066,5926,8460,5216,12608,
1217 /* SEAM,PATTERN,5,6103,26819,6143,27971,6143,27971,6143,27971,6103,26819, */
1218 /* SEAM,PATTERN,5, 5020,26819,5053,27971,5053,27971,5053,27971, 5020,26819, */
1224 5020,26819,5020,26114,4906,25858,0,25666,
1226 POLARQUADSTRIP,20,BACKREF,0,1,1,6143,27971,BACKREF,0,2,2,6143,27971,
1227 BACKREF,0,3,3,6143,27971,BACKREF,0,4,4,6143,27971,
1228 POLARQUADSTRIP,20,BACKREF,0,6,6,6143,27971,BACKREF,0,7,7,6143,27971,
1229 BACKREF,0,8,8,6143,27971,BACKREF,0,9,9,6143,27971,
1230 POLARQUADSTRIP,20,BACKREF,0,11,11,6143,27971,BACKREF,0,12,12,6143,27971,
1231 BACKREF,0,13,13,6143,27971,BACKREF,0,14,14,6143,27971,
1232 POLARQUADSTRIP,20,BACKREF,0,16,16,6143,27971,BACKREF,0,17,17,6143,27971,
1233 BACKREF,0,18,18,6143,27971,BACKREF,0,19,19,6143,27971,
1235 POLARQUADSTRIP,20,1,5053,27971,BACKREF,1,1,2,5053,27971,BACKREF,1,2,
1236 3,5053,27971,BACKREF,1,3,4,5053,27971,BACKREF,1,4,
1237 POLARQUADSTRIP,20,6,5053,27971,BACKREF,1,6,7,5053,27971,BACKREF,1,7,
1238 8,5053,27971,BACKREF,1,8,9,5053,27971,BACKREF,1,9,
1239 POLARQUADSTRIP,20,11,5053,27971,BACKREF,1,11,12,5053,27971,BACKREF,1,12,
1240 13,5053,27971,BACKREF,1,13,14,5053,27971,BACKREF,1,14,
1241 POLARQUADSTRIP,20,16,5053,27971,BACKREF,1,16,17,5053,27971,BACKREF,1,17,
1242 18,5053,27971,BACKREF,1,18,19,5053,27971,BACKREF,1,19,
1244 POLARQUADSTRIP,20,1,5020,26819,1,6103,26819,
1245 0,5020,26819,0,6103,26819,19,5020,26819,19,6103,26819,
1246 POLARQUADSTRIP,20,6,5020,26819,6,6103,26819,
1247 5,5020,26819,5,6103,26819,4,5020,26819,4,6103,26819,
1248 POLARQUADSTRIP,20,11,5020,26819,11,6103,26819,
1249 10,5020,26819,10,6103,26819,9,5020,26819,9,6103,26819,
1250 POLARQUADSTRIP,20,16,5020,26819,16,6103,26819,
1251 15,5020,26819,15,6103,26819,14,5020,26819,14,6103,26819,
1253 POLARQUADSTRIP,20,1,5053,27971,1,6143,27971,1,5020,26819,1,6103,26819,
1254 POLARQUADSTRIP,20,4,5020,26819,4,6103,26819,4,5053,27971,4,6143,27971,
1255 POLARQUADSTRIP,20,6,5053,27971,6,6143,27971,6,5020,26819,6,6103,26819,
1256 POLARQUADSTRIP,20,9,5020,26819,9,6103,26819,9,5053,27971,9,6143,27971,
1257 POLARQUADSTRIP,20,11,5053,27971,11,6143,27971,11,5020,26819,11,6103,26819,
1258 POLARQUADSTRIP,20,14,5020,26819,14,6103,26819,14,5053,27971,14,6143,27971,
1259 POLARQUADSTRIP,20,16,5053,27971,16,6143,27971,16,5020,26819,16,6103,26819,
1260 POLARQUADSTRIP,20,19,5020,26819,19,6103,26819,19,5053,27971,19,6143,27971,
1262 POLARQUADSTRIP,20,1,6143,27971,1,5053,27971,2,6143,27971,2,5053,27971,
1263 3,6143,27971,3,5053,27971,4,6143,27971,4,5053,27971,
1264 POLARQUADSTRIP,20,6,6143,27971,6,5053,27971,7,6143,27971,7,5053,27971,
1265 8,6143,27971,8,5053,27971,9,6143,27971,9,5053,27971,
1266 POLARQUADSTRIP,20,11,6143,27971,11,5053,27971,12,6143,27971,12,5053,27971,
1267 13,6143,27971,13,5053,27971,14,6143,27971,14,5053,27971,
1268 POLARQUADSTRIP,20,16,6143,27971,16,5053,27971,17,6143,27971,17,5053,27971,
1269 18,6143,27971,18,5053,27971,19,6143,27971,19,5053,27971,
1274 static double piece_size;
1277 enumerate_ring_vertices( int steps, unsigned short *data, void *h,
1278 void (*process_vertex)(void *h,double x,double y,double z))
1281 unsigned short *pts = data;
1282 double dtheta = M_PI * 2 / steps;
1284 if( data[0] == PATTERN) {
1289 if( pts[0] == 0) steps = 1;
1291 for( i=0; i < steps; i++) {
1292 double r = pts[(i % patlen)*2] * piece_size;
1293 double y = pts[(i % patlen)*2+1] * piece_size;
1294 double theta = dtheta * i;
1296 process_vertex( h, r * cos(theta), y, r * sin(theta));
1299 return pts + patlen * 2 - data;
1303 enumerate_vertices( unsigned short *data, void *h,
1304 void (*process_vertex)(void *h,double x,double y,double z))
1307 if( data[0] == SPIN) {
1312 while(data[0] <= SEAM) {
1313 if( data[0] == SETBACKREF || data[0] == BACKREF) {
1316 } else if( data[0] == STEPUP) {
1320 } else if( data[0] == STEPDOWN) {
1324 } else if( data[0] == SEAM) {
1326 /* Visit seam vertices twice */
1327 enumerate_ring_vertices( steps, data,
1329 data += enumerate_ring_vertices( steps, data,
1332 data += enumerate_ring_vertices( steps, data,
1336 } else if( data[0] == POLARQUADSTRIP) {
1337 int steps = data[1];
1341 dtheta = M_PI * 2 / steps;
1343 while(data[0] <= SEAM) {
1344 if( data[0] != BACKREF) {
1345 double theta = dtheta * data[0];
1346 double r = data[1] * piece_size;
1347 double y = data[2] * piece_size;
1348 process_vertex( h, r * cos(theta), y, r * sin(theta));
1352 } else if( data[0] == QUADSTRIP || data[0] == VERTICES) {
1355 while(data[0] <= SEAM) {
1356 if( data[0] == SETBACKREF) {
1361 if( data[0] != BACKREF) {
1362 double x = (signed short)data[0] * piece_size;
1363 double y = data[1] * piece_size;
1364 double z = (signed short)data[2] * piece_size;
1365 process_vertex( h, x, y, z);
1369 } else if( data[0] == QUADS || data[0] == TRIANGLES) {
1371 while( data[0] <= SEAM) data++;
1379 enumerate_ring_faces( int basevertex, int steps,
1380 int prevbase, int prevsteps, void *h, int *count_ret,
1381 void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1386 for( i=0; i < prevsteps; i++) {
1390 prevbase + (i ? i-1 : prevsteps-1),
1392 if (count_ret) (*count_ret)++;
1394 } else if( steps == prevsteps) {
1395 for( i=0; i < steps; i++) {
1399 prevbase + (i ? i-1 : steps-1),
1400 basevertex + (i ? i-1 : steps-1));
1401 if (count_ret) (*count_ret)++;
1406 while( j < prevsteps && steps*(1+2*j) < prevsteps*(1+2*i)) {
1408 basevertex + (i%steps),
1409 prevbase + ((j+1)%prevsteps),
1412 if (count_ret) (*count_ret)++;
1415 if( i == steps) break;
1418 basevertex + ((i+1)%steps),
1419 prevbase + (j%prevsteps),
1421 if (count_ret) (*count_ret)++;
1427 enumerate_faces( unsigned short *data, void *h, int *count_ret,
1428 void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1430 int basevertex = 0, startofvertices = 0;
1434 if( data[0] == SPIN) {
1436 int prevsteps = -1,prevbase = 0;
1441 while( data[0] <= SEAM) {
1442 if( data[0] == SETBACKREF) {
1443 backrefs[data[1]] = basevertex;
1448 if( data[0] == STEPUP) {
1452 } else if( data[0] == STEPDOWN) {
1458 if( data[0] == BACKREF) {
1459 if( prevsteps != -1) {
1460 enumerate_ring_faces( backrefs[data[1]], steps,
1461 prevbase, prevsteps, h,
1462 count_ret, process_face);
1465 prevbase = backrefs[data[1]];
1469 if( data[0] == SEAM) {
1474 if( data[0] == PATTERN) {
1475 data += 2 + data[1]*2;
1477 if( data[0] == 0) steps = 1;
1481 if( prevsteps != -1) {
1482 enumerate_ring_faces( basevertex, steps,
1483 prevbase, prevsteps, h,
1484 count_ret, process_face);
1487 if( isseam) basevertex += steps;
1488 prevbase = basevertex;
1489 basevertex += steps;
1494 } else if( data[0] == POLARQUADSTRIP || data[0] == QUADSTRIP) {
1495 int v0=-1,v1=0,v2,v3;
1496 if( data[0] == POLARQUADSTRIP) data += 2;
1498 while(data[0] <= SEAM) {
1499 if( data[0] == BACKREF) {
1500 v2 = backrefs[data[1]]+data[2];
1505 if( data[3] == BACKREF) {
1506 v3 = backrefs[data[4]]+data[5];
1513 process_face( h, v0, v1, v3, v2);
1514 if (count_ret) (*count_ret)++;
1519 } else if( data[0] == VERTICES) {
1521 startofvertices = basevertex;
1522 while( data[0] <= SEAM) {
1523 if( data[0] == SETBACKREF) {
1524 backrefs[data[1]] = basevertex;
1531 } else if( data[0] == QUADS) {
1533 while( data[0] <= SEAM) {
1535 data[0] + startofvertices,
1536 data[1] + startofvertices,
1537 data[2] + startofvertices,
1538 data[3] + startofvertices);
1539 if (count_ret) (*count_ret)++;
1542 } else if( data[0] == TRIANGLES) {
1544 while( data[0] <= SEAM) {
1546 data[0] + startofvertices,
1547 data[1] + startofvertices,
1548 data[2] + startofvertices, -1);
1549 if (count_ret) (*count_ret)++;
1559 normalize( float v[3]) {
1560 float d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
1563 /* The direction is undefined - normalize it anyway */
1576 normcrossprod( float v1[3], float v2[3], float out[3])
1578 out[0] = v1[1] * v2[2] - v1[2] * v2[1];
1579 out[1] = v1[2] * v2[0] - v1[0] * v2[2];
1580 out[2] = v1[0] * v2[1] - v1[1] * v2[0];
1584 #define vectordiff(v1,v2,out) \
1585 ((out)[0] = (v1)[0] - (v2)[0], \
1586 (out)[1] = (v1)[1] - (v2)[1], \
1587 (out)[2] = (v1)[2] - (v2)[2])
1589 #define vectoradd(v1,v2) \
1590 ((v1)[0] += (v2)[0], \
1591 (v1)[1] += (v2)[1], \
1594 static int numverts;
1595 static float *vertices;
1596 static float *normals;
1599 count_vertex( void *dummy, double x, double y, double z)
1605 add_normal( void *dummy, int v1, int v2, int v3, int v4)
1607 float surfnormal[3],d1[3],d2[3];
1610 vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1611 vectordiff( vertices + 3 * v3, vertices + 3 * v1, d2);
1612 normcrossprod( d1, d2, surfnormal);
1613 vectoradd( normals + 3 * v1, surfnormal);
1614 vectoradd( normals + 3 * v2, surfnormal);
1615 vectoradd( normals + 3 * v3, surfnormal);
1617 vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1618 vectordiff( vertices + 3 * v4, vertices + 3 * v1, d2);
1619 normcrossprod( d1, d2, surfnormal);
1620 vectoradd( normals + 3 * v1, surfnormal);
1621 vectordiff( vertices + 3 * v3, vertices + 3 * v2, d1);
1622 vectordiff( vertices + 3 * v1, vertices + 3 * v2, d2);
1623 normcrossprod( d1, d2, surfnormal);
1624 vectoradd( normals + 3 * v2, surfnormal);
1625 vectordiff( vertices + 3 * v4, vertices + 3 * v3, d1);
1626 vectordiff( vertices + 3 * v2, vertices + 3 * v3, d2);
1627 normcrossprod( d1, d2, surfnormal);
1628 vectoradd( normals + 3 * v3, surfnormal);
1629 vectordiff( vertices + 3 * v1, vertices + 3 * v4, d1);
1630 vectordiff( vertices + 3 * v3, vertices + 3 * v4, d2);
1631 normcrossprod( d1, d2, surfnormal);
1632 vectoradd( normals + 3 * v4, surfnormal);
1637 collect_vertex( void *curvert, double x, double y, double z)
1639 (*(float**)curvert)[0] = x;
1640 (*(float**)curvert)[1] = y;
1641 (*(float**)curvert)[2] = z;
1642 (*(float**)curvert) += 3;
1646 draw_face( void *dummy, int v1, int v2, int v3, int v4)
1648 glBegin( v4 == -1 ? GL_TRIANGLES : GL_QUADS);
1649 glNormal3f( normals[v1*3], normals[v1*3+1], normals[v1*3+2]);
1650 glVertex3f( vertices[v1*3], vertices[v1*3+1], vertices[v1*3+2]);
1651 glNormal3f( normals[v2*3], normals[v2*3+1], normals[v2*3+2]);
1652 glVertex3f( vertices[v2*3], vertices[v2*3+1], vertices[v2*3+2]);
1653 glNormal3f( normals[v3*3], normals[v3*3+1], normals[v3*3+2]);
1654 glVertex3f( vertices[v3*3], vertices[v3*3+1], vertices[v3*3+2]);
1656 glNormal3f( normals[v4*3], normals[v4*3+1], normals[v4*3+2]);
1657 glVertex3f( vertices[v4*3], vertices[v4*3+1], vertices[v4*3+2]);
1663 draw_piece( unsigned short *piece_data)
1669 /* Count how many vertices this piece has */
1670 enumerate_vertices( piece_data, NULL, count_vertex);
1672 /* Allocate memory for the vertices and for the vertex normals */
1673 vertices = malloc( sizeof(float) * 3 * numverts);
1674 normals = malloc( sizeof(float) * 3 * numverts);
1675 if( !vertices || !normals) exit(1);
1677 /* Collect the vertex coordinates */
1679 enumerate_vertices( piece_data, &curvert, collect_vertex);
1681 /* Zero out the normals */
1682 for( i=0; i < numverts * 3; i++) {
1686 /* Add up all the face normals at each vertex */
1687 enumerate_faces( piece_data, NULL, NULL, add_normal);
1689 /* Normalize the vertex normals */
1690 for( i=0; i < numverts; i++) {
1691 normalize( normals + i * 3);
1694 /* Now draw the faces */
1695 enumerate_faces( piece_data, NULL, &count, draw_face);
1700 if (count <= 1) abort();
1704 void chessmodels_gen_lists( int classic, int poly_count[PIECES]) {
1706 Bool queen_only_p = classic < 0;
1707 if (classic < 0) classic = 0;
1709 piece_size = classic ? 0.095 / 100 : 0.3 / 8192;
1711 glGenLists (20); /* this is horrible! List numbers are hardcoded! */
1713 glNewList(QUEEN, GL_COMPILE);
1714 poly_count[QUEEN] = draw_piece( classic ? classic_queen_data : queen_data);
1717 if (queen_only_p) return;
1719 glNewList(KING, GL_COMPILE);
1720 poly_count[KING] = draw_piece( classic ? classic_king_data : king_data);
1723 glNewList(BISHOP, GL_COMPILE);
1724 poly_count[BISHOP] = draw_piece( classic ? classic_bishop_data : bishop_data);
1727 glNewList(KNIGHT, GL_COMPILE);
1728 poly_count[KNIGHT] = draw_piece( classic ? classic_knight_data : knight_data);
1731 glNewList(ROOK, GL_COMPILE);
1732 poly_count[ROOK] = draw_piece( classic ? classic_rook_data : rook_data);
1735 glNewList(PAWN, GL_COMPILE);
1736 poly_count[PAWN] = draw_piece( classic ? classic_pawn_data : pawn_data);