-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFINALCODE.ino.ino
503 lines (406 loc) · 74.6 KB
/
FINALCODE.ino.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <WiFiMulti.h>
#include <pt.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <WiFiClient.h>
#define LED_BUILTIN 13
//CCS811 init stuff and pulse sensor
#include <Wire.h>
#include "SparkFunCCS811.h" //Click here to get the library: http://librarymanager/All#SparkFun_CCS811
#define CCS811_ADDR 0x5B //Default I2C Address
//#define CCS811_ADDR 0x5A //Alternate I2C Address
CCS811 mySensor(CCS811_ADDR);
#include <PulseSensorPlayground.h> // Includes the PulseSensorPlayground Library.
WiFiMulti wifiMulti;
// Variables
const int PulseWire = A0; // PulseSensor PURPLE WIRE connected to ANALOG PIN 0
int Threshold = 700; // Determine which Signal to "count as a beat" and which to ignore.
// Use the "Gettting Started Project" to fine-tune Threshold Value beyond default setting.
// Otherwise leave the default "550" value.
PulseSensorPlayground pulseSensor; // Creates an instance of the PulseSensorPlayground object called "pulseSensor"
#define AUTH_KEY 9081349
//screen init stuff
#define SCREEN_I2C_ADDR 0x3C // or 0x3C
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RST_PIN -1 // Reset pin (-1 if not available)
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RST_PIN);
// OLED Animation: activity
// Code auto-generated by https://wokwi.com/animator, graphics by icons8.com
#define FRAME_DELAY (42)
#define FRAME_WIDTH (64)
#define FRAME_HEIGHT (64)
#define HB_FRAME_COUNT (sizeof(hb_frames) / sizeof(hb_frames[0]))
const byte PROGMEM hb_frames[][512] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,1,254,51,131,129,156,31,224,3,252,59,131,131,140,63,240,3,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,0,14,51,131,129,156,31,224,0,12,59,131,131,140,63,240,0,0,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,199,0,96,0,0,0,0,65,199,0,112,0,0,0,0,225,199,0,240,0,0,0,0,225,195,0,248,0,0,0,0,97,131,0,248,0,0,0,0,113,131,129,248,0,0,0,0,115,131,129,220,0,0,0,0,51,131,129,156,31,224,0,0,59,131,131,140,63,240,0,0,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,199,0,96,0,0,0,0,1,199,0,112,0,0,0,0,1,199,0,240,0,0,0,0,1,195,0,248,0,0,0,0,1,131,0,248,0,0,0,0,1,131,129,248,0,0,0,0,3,131,129,220,0,0,0,0,3,131,129,156,31,224,0,0,3,131,131,140,63,240,0,0,3,1,131,142,127,240,0,0,7,1,131,142,240,0,0,0,7,1,195,7,224,0,0,0,7,1,199,7,192,0,0,0,6,1,199,7,192,0,0,0,6,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,0,0,7,0,96,0,0,0,0,0,7,0,112,0,0,0,0,0,7,0,240,0,0,0,0,0,3,0,248,0,0,0,0,0,3,0,248,0,0,0,0,0,3,129,248,0,0,0,0,0,3,129,220,0,0,0,0,0,3,129,156,31,224,0,0,0,3,131,140,63,240,0,0,0,1,131,142,127,240,0,0,0,1,131,142,240,0,0,0,0,1,195,7,224,0,0,0,0,1,199,7,192,0,0,0,0,1,199,7,192,0,0,0,0,1,198,3,128,0,0,0,0,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,96,0,0,0,0,0,7,0,112,0,0,0,0,0,7,0,240,0,0,0,0,0,3,0,248,0,0,0,0,0,3,0,248,0,0,0,0,0,3,129,248,0,0,0,0,0,3,129,220,0,0,0,0,0,3,129,156,31,224,0,0,0,3,131,140,63,240,0,0,0,1,131,142,127,240,0,0,0,1,131,142,240,0,0,0,0,1,195,7,224,0,0,0,0,1,199,7,192,0,0,0,0,1,199,7,192,0,0,0,0,1,198,3,128,0,0,0,0,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,248,0,0,0,0,0,0,1,248,0,0,0,0,0,0,1,220,0,0,0,0,0,0,1,156,31,224,0,0,0,0,3,140,63,240,0,0,0,0,3,142,127,240,0,0,0,0,3,142,240,0,0,0,0,0,3,7,224,0,0,0,0,0,7,7,192,0,0,0,0,0,199,7,192,0,0,0,0,1,198,3,128,0,0,0,0,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,248,0,0,0,0,0,0,1,248,0,0,0,0,0,0,1,220,0,0,0,0,0,0,1,156,31,224,0,0,0,0,3,140,63,240,0,0,0,0,3,142,127,240,0,0,0,0,3,142,240,0,0,0,0,0,3,7,224,0,0,0,0,0,7,7,192,0,0,0,0,0,7,7,192,0,0,0,0,0,6,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,224,0,0,0,0,0,0,63,240,0,0,0,0,0,6,127,240,0,0,0,0,0,14,240,0,0,0,0,0,0,7,224,0,0,0,0,0,0,7,192,0,0,0,0,0,0,7,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,192,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,224,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,224,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,7,254,0,0,0,0,0,0,15,252,0,0,0,0,0,0,15,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,192,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,224,0,0,0,0,0,0,3,225,192,0,0,0,0,0,7,225,128,0,0,0,0,0,7,113,128,0,0,0,0,0,14,115,128,0,0,0,0,7,254,51,128,0,0,0,0,15,252,59,128,0,0,0,0,15,252,59,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,224,0,0,0,0,0,1,192,192,0,0,0,0,0,1,193,192,0,0,0,0,0,3,225,192,0,0,0,0,0,3,225,192,0,0,0,0,0,7,225,128,0,0,0,0,0,7,113,128,0,0,0,0,0,14,115,128,0,0,0,0,7,254,51,128,0,0,0,0,15,252,59,128,0,0,0,0,15,252,59,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,0,0,0,0,1,193,199,0,0,0,0,0,3,225,199,0,0,0,0,0,3,225,195,0,0,0,0,0,7,225,131,0,0,0,0,0,7,113,131,128,0,0,0,0,14,115,131,128,0,0,0,7,254,51,131,128,0,0,0,15,252,59,131,128,0,0,0,15,252,59,1,128,0,0,0,0,0,31,1,128,0,0,0,0,0,31,1,192,0,0,0,0,0,31,1,192,0,0,0,0,0,14,0,128,0,0,0,0,0,14,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,0,0,0,0,1,193,199,0,0,0,0,0,3,225,199,0,0,0,0,0,3,225,195,0,0,0,0,0,7,225,131,0,0,0,0,0,7,113,131,128,0,0,0,0,14,115,131,128,0,0,0,7,254,51,131,128,0,0,0,15,252,59,131,128,0,0,0,15,252,59,1,128,0,0,0,0,0,31,1,128,0,0,0,0,0,31,1,192,0,0,0,0,0,31,1,192,0,0,0,0,0,14,1,192,0,0,0,0,0,14,1,192,0,0,0,0,0,6,0,192,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,0,0,0,0,1,193,199,0,0,0,0,0,3,225,199,0,64,0,0,0,3,225,195,0,224,0,0,0,7,225,131,0,192,0,0,0,7,113,131,129,192,0,0,0,14,115,131,129,192,0,0,7,254,51,131,129,128,0,0,15,252,59,131,131,128,0,0,15,252,59,1,131,128,0,0,0,0,31,1,131,128,0,0,0,0,31,1,195,0,0,0,0,0,31,1,199,0,0,0,0,0,14,1,199,0,0,0,0,0,14,1,198,0,0,0,0,0,6,0,206,0,0,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,0,0,15,252,59,131,131,140,0,0,15,252,59,1,131,142,0,0,0,0,31,1,131,142,0,0,0,0,31,1,195,6,0,0,0,0,31,1,199,0,0,0,0,0,14,1,199,0,0,0,0,0,14,1,198,0,0,0,0,0,6,0,206,0,0,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,0,0,15,252,59,131,131,140,32,0,15,252,59,1,131,142,112,0,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,128,15,252,59,131,131,140,63,192,15,252,59,1,131,142,127,128,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,230,0,0,0,0,0,0,0,231,0,0,0,0,0,1,192,199,0,96,0,0,0,1,193,199,0,112,0,0,0,3,225,199,0,240,0,0,0,3,225,195,0,248,0,0,0,7,225,131,0,248,0,0,0,7,113,131,129,248,0,0,0,14,115,131,129,220,0,0,7,254,51,131,129,156,31,224,15,252,59,131,131,140,63,240,15,252,59,1,131,142,127,240,0,0,31,1,131,142,240,0,0,0,31,1,195,7,224,0,0,0,31,1,199,7,192,0,0,0,14,1,199,7,192,0,0,0,14,1,198,3,128,0,0,0,6,0,206,3,128,0,0,0,0,0,206,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
#define ATT_FRAME_COUNT (sizeof(attention_frames) / sizeof(attention_frames[0]))
const byte PROGMEM attention_frames[][512] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,3,192,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,3,192,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,3,192,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,3,192,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,3,192,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,30,0,0,0,0,0,7,255,31,192,0,0,0,0,31,248,15,248,0,0,0,0,63,0,0,254,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,63,0,0,6,0,0,0,0,248,0,0,7,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,96,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,28,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,3,192,0,0,48,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,63,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,3,192,0,0,0,7,0,0,3,192,0,0,0,7,0,0,3,192,0,0,96,14,0,0,3,192,0,0,96,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,63,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,3,192,0,0,0,7,0,0,3,192,0,0,0,7,0,0,3,192,0,0,0,14,0,0,3,192,0,0,0,14,0,0,3,192,0,0,0,14,0,0,3,192,0,0,0,12,0,0,3,192,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,1,128,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,192,0,0,0,0,0,127,255,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,224,0,0,0,0,0,0,126,0,0,0,0,0,0,0,248,0,0,0,0,0,0,1,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,1,192,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,7,128,0,0,0,0,0,0,3,224,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,127,0,0,0,0,0,0,0,31,192,0,0,0,0,0,0,3,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,3,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,127,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,3,255,0,0,0,0,0,0,31,240,0,0,0,0,0,0,127,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,224,0,0,0,0,0,0,126,0,0,0,0,0,0,0,248,0,0,0,0,0,0,1,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,1,192,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,7,128,0,0,0,0,0,0,3,224,0,0,0,0,0,0,0,248,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,31,224,0,0,0,0,0,0,3,192,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,63,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,3,0,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,192,0,0,0,0,0,127,255,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,63,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,0,0,0,15,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,224,0,0,0,0,0,0,1,192,0,0,0,0,0,0,3,128,0,0,0,0,0,0,3,128,0,0,0,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,14,0,0,0,0,0,0,16,14,0,0,0,0,0,0,112,12,0,0,0,0,0,0,48,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,0,0,0,0,0,0,31,248,0,0,0,0,0,0,63,0,0,0,0,0,0,0,248,0,0,0,0,0,0,3,224,0,0,0,0,0,0,7,128,0,0,0,96,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,14,0,0,0,0,0,0,96,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,12,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,0,0,0,0,0,0,7,255,1,192,0,0,0,0,31,248,1,248,0,0,0,0,63,0,0,254,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,3,192,3,128,0,0,0,0,1,192,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,12,0,0,0,0,0,0,48,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,62,0,0,0,0,0,7,255,63,192,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,254,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,24,0,0,0,0,0,0,24,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,14,0,0,0,0,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,3,192,0,0,56,12,0,0,3,192,0,0,48,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,0,0,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,0,0,0,0,224,3,128,0,0,0,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,254,0,0,0,0,0,7,255,255,224,0,0,0,0,31,248,31,248,0,0,0,0,63,0,0,252,0,0,0,0,248,0,0,31,0,0,0,3,224,0,0,7,192,0,0,7,128,0,0,1,224,0,0,15,0,0,0,0,240,0,0,30,0,0,0,0,120,0,0,60,0,0,0,0,60,0,0,120,0,0,0,0,30,0,0,240,0,0,0,0,15,0,0,224,0,0,0,0,7,0,1,192,0,0,0,0,3,128,3,128,0,0,0,0,1,192,3,128,0,3,192,0,1,192,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,12,0,0,3,192,0,0,48,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,28,0,0,3,192,0,0,56,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,24,0,0,3,192,0,0,24,28,0,0,3,192,0,0,56,28,0,0,3,128,0,0,56,28,0,0,0,0,0,0,56,28,0,0,0,0,0,0,56,12,0,0,0,0,0,0,48,14,0,0,0,0,0,0,112,14,0,0,3,192,0,0,112,14,0,0,3,192,0,0,112,7,0,0,3,192,0,0,224,7,0,0,3,192,0,0,224,3,128,0,1,128,0,1,192,3,128,0,0,0,0,1,192,1,192,0,0,0,0,3,128,0,224,0,0,0,0,7,0,0,240,0,0,0,0,15,0,0,120,0,0,0,0,30,0,0,60,0,0,0,0,60,0,0,30,0,0,0,0,120,0,0,15,0,0,0,0,240,0,0,7,128,0,0,1,224,0,0,3,224,0,0,7,192,0,0,0,248,0,0,31,0,0,0,0,127,0,0,254,0,0,0,0,31,224,7,248,0,0,0,0,7,255,255,224,0,0,0,0,0,127,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
typedef struct {
int current_time_running;
int TVOCs;
int CO2;
int myBPM;
} SensorData;
enum ConnectionStates {
CONNECTED,
DISCONNECTED,
NO_NET
};
enum HealthStates {
GOOD,
BAD,
HORRIBLE
};
static struct pt displaythread;
static struct pt datathread;
static struct pt wifithread;
SensorData current_data;
ConnectionStates conn_state = DISCONNECTED;
HealthStates hp_state = GOOD;
void setup() {
Serial.begin(9600);
wifi_init();
sensors_init();
setClock();
PT_INIT(&displaythread);
PT_INIT(&datathread);
PT_INIT(&wifithread);
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_I2C_ADDR);
}
void loop() {
datathreadfunc(&datathread);
displaythreadfunc(&displaythread);
wifithreadfunc(&wifithread);
if (WiFi.status() != WL_CONNECTED) {
wifi_init();
}
}
void setClock() {
configTime(0, 0, "pool.ntp.org");
Serial.print(F("Waiting for NTP time sync: "));
time_t nowSecs = time(nullptr);
while (nowSecs < 8 * 3600 * 2) {
delay(500);
Serial.print(F("."));
yield();
nowSecs = time(nullptr);
}
Serial.println();
struct tm timeinfo;
gmtime_r(&nowSecs, &timeinfo);
Serial.print(F("Current time: "));
Serial.print(asctime(&timeinfo));
}
static int wifithreadfunc(struct pt *pt)
{
static unsigned long lastTime = 0;
PT_BEGIN(pt);
http_send_data();
PT_WAIT_UNTIL(pt, millis() - lastTime >= 500);
lastTime = millis(); // Update the lastTime variable to the current time
PT_END(pt);
}
void wifi_init() {
WiFi.mode(WIFI_STA);
// Add list of WiFi networks
wifiMulti.addAP("Lunenburg", "c0p3nHag3n");
wifiMulti.addAP("MySpectrumWiFie0-2G", "warmcity372");
wifiMulti.addAP("Discord", "warmcity372");
// Attempt to connect to Wi-Fi using wifiMulti
Serial.println("Connecting to WiFi...");
while (wifiMulti.run() != WL_CONNECTED) {
Serial.println("Connection failed, retrying...");
delay(1000); // Wait for a second before retrying
blinkLED(); // Blink the built-in LED to indicate connection attempt
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
conn_state = CONNECTED;
check_conn();
}
void blinkLED() {
pinMode(LED_BUILTIN, OUTPUT); // Ensure the LED pin is set as output
digitalWrite(LED_BUILTIN, HIGH); // Turn the LED on
delay(500); // Wait for half a second
digitalWrite(LED_BUILTIN, LOW); // Turn the LED off
delay(500); // Wait for half a second
}
void http_send_data() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://lifehat.info/esp/data");
StaticJsonDocument<200> data;
data["auth"] = 9081349;
data["bpm"] = current_data.myBPM;
data["voc"] = current_data.TVOCs;
data["co2"] = current_data.CO2;
String jsonString;
serializeJson(data, jsonString);
Serial.println(jsonString);
http.addHeader("Content-Type", "application/json");
int httpCode = http.POST(jsonString);
if (httpCode > 0) {
String response = http.getString();
Serial.println(response);
} else {
Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
}
static int datathreadfunc(struct pt *pt)
{ static unsigned long lastTime = 0;
PT_BEGIN(pt);
if (mySensor.dataAvailable()) { //if new data exists, update struct, if not use current one
current_data = get_sensor_data();
}
PT_WAIT_UNTIL(pt, millis() - lastTime >= 500);
lastTime = millis(); // Update the lastTime variable to the current time
PT_END(pt);
}
bool sensors_init() {
// Configure the PulseSensor object, by assigning our variables to it.
pulseSensor.analogInput(PulseWire);
pulseSensor.setThreshold(Threshold);
// Double-check the "pulseSensor" object was created and "began" seeing a signal.
if (pulseSensor.begin()) {
Serial.println("We created a pulseSensor Object !"); //This prints one time at Arduino power-up, or on Arduino reset.
}
Wire.begin(); //Inialize I2C Harware
//It is recommended to check return status on .begin(), but it is not
//required.
CCS811Core::status returnCode = mySensor.begin();
if (returnCode != CCS811Core::SENSOR_SUCCESS)
{
Serial.println(".begin() returned with an error.");
while (1); //Hang if there was a problem.
}
return true;
}
#define BPM_MIN 60 // Minimum BPM
#define BPM_MAX 120
unsigned long lastBeatTime = 0; // Time of the last beat
int currentBPM = 60; // Starting BPM
int get_bpm() {
if (pulseSensor.sawStartOfBeat()) { // Constantly test to see if "a beat happened".
int myBPM = pulseSensor.getBeatsPerMinute(); // Calls function on our pulseSensor object that returns BPM as an "int".
// "myBPM" hold this BPM value now.
return myBPM; // Print the value inside of myBPM.
}
}
SensorData get_sensor_data() {
mySensor.readAlgorithmResults();
SensorData data;
data.current_time_running = millis();
data.TVOCs = mySensor.getTVOC();
data.CO2 = mySensor.getCO2();
data.myBPM = get_bpm();
Serial.println(String(data.current_time_running) + " Seconds Running, " + String(data.TVOCs) + " TVOCS, " + String(data.CO2) + " CO2, " + String(data.myBPM) + " BPM ");
return data;
}
static int displaythreadfunc(struct pt *pt)
{ static unsigned long lastTime = 0;
PT_BEGIN(pt);
display_att();
display_hb(current_data.myBPM);
display_voc(current_data.TVOCs);
display_co2(current_data.CO2);
// Wait for 20 seconds
PT_WAIT_UNTIL(pt, millis() - lastTime >= 20000);
lastTime = millis(); // Update the lastTime variable to the current time
PT_END(pt);
}
void display_att() {
int att_frame = 0;
bool att_counter = false;
unsigned long previousMillis = 0; // Variable to store the last time the action was performed
while(1) {
display.clearDisplay();
display.drawBitmap(32, 0, attention_frames[att_frame], FRAME_WIDTH, FRAME_HEIGHT, 1);
display.display();
att_frame = (att_frame + 1) % ATT_FRAME_COUNT;
if (att_frame == 0 && att_counter) {
break;
} else if (att_frame == 0) {
att_counter = true;
}
// Non-blocking delay
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= (FRAME_DELAY + 30)) {
previousMillis = currentMillis; // Update the last recorded time
}
}
}
void display_hb(int hb) {
bool hb_counter = false;
int hb_frame = 0;
unsigned long previousMillis = 0; // Variable to store the last time the action was performed
while(1) {
display.clearDisplay();
display.drawBitmap(32, 13, hb_frames[hb_frame], FRAME_WIDTH, FRAME_HEIGHT, 1);
String number = String(hb);
float textDivision;
if (number.length() == 2) {
textDivision = 2.5;
} else if (number.length() == 3) {
textDivision = 3;
}
int textSize = 3; // Text size
// Calculate text width
int textWidth = textSize * number.length();
// Calculate center position
int x = (SCREEN_WIDTH - textWidth) / textDivision;
// Set cursor position and display text
display.setTextSize(textSize);
display.setTextColor(WHITE);
display.setCursor(x, 0); // Adjust y-coordinate as needed
display.print(number);
display.display();
hb_frame = (hb_frame + 1) % HB_FRAME_COUNT;
if (hb_frame == 0 && hb_counter) {
break;
} else if (hb_frame == 0) {
hb_counter = true;
}
// Non-blocking delay
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= FRAME_DELAY + 30) {
previousMillis = currentMillis; // Update the last recorded time
}
}
}
void display_voc(int voc) {
display.clearDisplay();
String number = String(voc); // Example number
int textSize = 3; // Text size
// Calculate text width
int textWidth = textSize * number.length();
float textDivision;
// Calculate center position
if (number.length() == 4) {
textDivision = 4;
} else if (number.length() == 3) {
textDivision = 3;
} else if (number.length() == 2) {
textDivision = 2.5;
} else if (number.length() == 5) {
textDivision = 5;
}
int x = (SCREEN_WIDTH - textWidth) / textDivision;
// Display "VOC" at the bottom
display.setTextSize(5); // Set text size to 2
display.setTextColor(WHITE); // Set text color to WHITE
display.setCursor((SCREEN_WIDTH - 15) / 5, SCREEN_HEIGHT - 40); // Position the cursor at the top
display.print("VOC");
// Display a number at the top
display.setTextSize(3); // Set text size to 3 for the number
display.setCursor(x, 0); // Position the cursor at the bottom
display.print(number);
display.display();
// Non-blocking delay
unsigned long previousMillis = millis();
while (millis() - previousMillis < 3000) {
// The loop will continue to run until the 3000ms delay has passed
// You can add other non-blocking actions here
}
}
void display_co2(int co2) {
display.clearDisplay();
String number = String(co2); // Example number
int textSize = 3; // Text size
// Calculate text width
int textWidth = textSize * number.length();
float textDivision;
// Calculate center position
if (number.length() == 4) {
textDivision = 4;
} else if (number.length() == 3) {
textDivision = 3;
} else if (number.length() == 2) {
textDivision = 2.5;
} else if (number.length() == 5) {
textDivision = 5;
}
int x = (SCREEN_WIDTH - textWidth) / textDivision;
// Display "CO2" at the bottom
display.setTextSize(5); // Set text size to 2
display.setTextColor(WHITE); // Set text color to WHITE
display.setCursor((SCREEN_WIDTH - 15) / 5, SCREEN_HEIGHT - 40); // Position the cursor at the top
display.print("CO2");
// Display a number at the top
display.setTextSize(3); // Set text size to 3 for the number
display.setCursor(x, 0); // Position the cursor at the bottom
display.print(number);
display.display();
// Non-blocking delay
unsigned long previousMillis = millis();
while (millis() - previousMillis < 3000) {
// The loop will continue to run until the 3000ms delay has passed
// You can add other non-blocking actions here
}
display.clearDisplay();
display.display();
}