-
Notifications
You must be signed in to change notification settings - Fork 3
/
ps-demo.p8
628 lines (603 loc) · 35.4 KB
/
ps-demo.p8
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
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
pico-8 cartridge // http://www.pico-8.com
version 29
__lua__
--pico-ps particle system
--max kearney
--created: april 2019
--updated: october 2020
---------------------
-------------------------------------------------- globals
show_demo_info = true
show_dude = false
my_emitters = nil
emitter_type = 1
emitters = {"fire", "water spout", "rain", "stars", "explosion (burst)", "confetti (burst)", "space warp", "amoebas", "portal", "whirly bird", "spiral galaxy monster", "structures (mouse)", "structures (arrows)"}
global_angle = 0
#include ps.lua
-------------------------------------------------- demo code
-- these are functions to help the demo run. you can copy/model from here,
-- but most of this stuff isn't strictly necessary for an emitter to run
function draw_demo()
foreach(my_emitters, function(obj) obj:draw() end)
if (show_demo_info) then
rectfill(0, 0, 128, 6, 1)
line(0, 7, 128, 7, 2)
rectfill(0, 91, 128, 128, 1)
line(0, 90, 128, 90, 2)
print("arrows: move emitters", 1, 92, 6)
print("z: start/stop emitters", 1, 98, 6)
print("q: show/hide info", 1, 104, 6)
print("f: next example", 1, 110, 6)
print("s: prev example", 1, 116, 6)
print("x: spawn emitter", 1, 122, 6)
print("num: "..get_all_particles(), 84, 110, 15)
print("mem: "..stat(0), 84, 116, 15)
print("cpu: "..stat(1), 84, 122, 15)
if (show_dude) then
print("😐♥", 113, 92, 14)
end
else
print("by max kearney", 72, 122, 5)
end
print(emitters[emitter_type], 1, 1, 7)
print("pico-ps", 100, 1, 15)
end
function get_all_particles()
local p_count = 0
for i in all(my_emitters) do
p_count = p_count + #i.particles
end
return p_count
end
function update_demo()
for e in all(my_emitters) do
e.update(e, delta_time)
update_whirly_bird(e)
update_hypno(e)
update_warp(e)
update_portal(e)
update_structures(e)
update_fire(e)
end
get_input()
end
function update_hypno(e)
if (emitters[emitter_type] == "spiral galaxy monster" and (e == my_emitters[2] or e == my_emitters[3])) then
update_angle(10)
ps_set_angle(e, global_angle)
end
end
function update_warp(e)
if (emitters[emitter_type] == "space warp") then
local p = rotate_around(5, vec(64, 64), e.pos)
ps_set_pos(e, p.x, p.y)
end
end
function update_portal(e)
if (emitters[emitter_type] == "portal") then
if (e == my_emitters[1]) then
local p = rotate_around(5, vec(64, 60), e.pos)
p = rotate_around(90, vec(64, 60), p)
ps_set_pos(e, p.x, p.y)
elseif(e == my_emitters[4]) then
local p = rotate_around(6, vec(64, 66), e.pos)
ps_set_pos(e, p.x, p.y)
end
end
end
function update_whirly_bird(e)
if (emitters[emitter_type] == "whirly bird") then
update_angle(5)
ps_set_angle(e, global_angle)
local p = rotate_janky(64, 64, 0.01, e.pos)
ps_set_pos(e, p.x, p.y)
end
end
function update_structures(e)
if (emitters[emitter_type] == "structures (mouse)") then
ps_set_pos(e, stat(32), stat(33))
end
end
function update_fire(e)
if (emitters[emitter_type] == "fire") then
ps_set_angle(e, 90 + (sin(t() * e.flicker) * 27), e.p_angle_spread)
end
end
function rotate_janky(ox, oy, angle, p)
p.x = cos(angle) * (p.x-ox) - sin(angle) * (p.y-oy) + ox
p.y = sin(angle) * (p.x-ox) + cos(angle) * (p.y-oy) + oy
return p
end
function rotate_around(angle, c, p)
angle /= 360 -- convert to 0-1
local rotatedx = cos(angle) * (p.x - c.x) - sin(angle) * (p.y-c.y) + c.x
local rotatedy = sin(angle) * (p.x - c.x) + cos(angle) * (p.y - c.y) + c.y
return vec(rotatedx,rotatedy)
end
function update_angle(speed)
global_angle += speed
if (global_angle > 360) then global_angle = 0 end
end
function get_input()
if (btnp(5,1)) then
if (show_demo_info) then show_demo_info = false
else show_demo_info = true end
end
if (btnp(4, 0)) then
if (my_emitters[1].is_emitting(my_emitters[1])) then
for e in all(my_emitters) do
e.stop_emit(e)
end
else
for e in all(my_emitters) do
e.start_emit(e)
end
end
end
if (btnp(5, 0)) then
spawn_emitter(emitters[emitter_type])
end
local x = 0
local y = 0
if (btn(0,0)) then
x = -1
elseif (btn(1,0)) then
x = 1
end
if (btn(2,0)) then
y = -1
elseif (btn(3,0)) then
y = 1
end
for e in all(my_emitters) do
e.pos.x = e.pos.x + x
e.pos.y = e.pos.y + y
end
if (btnp(4,1)) then
show_dude = not show_dude
end
if (btnp(0,1)) then
emitter_type = emitter_type - 1
if (emitter_type < 1) then
emitter_type = #emitters
end
my_emitters = {}
spawn_emitter(emitters[emitter_type])
elseif (btnp(1,1)) then
emitter_type = emitter_type + 1
if (emitter_type > #emitters) then
emitter_type = 1
end
my_emitters = {}
spawn_emitter(emitters[emitter_type])
end
end
function spawn_emitter(emitter_string)
-- here is an example of using the set functions to create an emitter
if (emitter_string == "space warp") then
-- create the emitter using x, y, frequency, max_p
local warp = emitter.create(70, 70, 11, 520)
-- the emitter.create() function has optional arguments
-- set the stuff you want to change
ps_set_speed(warp, 30, 200)
ps_set_life(warp, 0.8)
ps_set_size(warp, 0, 2, 0.5, 0)
ps_set_colours(warp, {7, 8, 11, 12, 14})
ps_set_rnd_colour(warp, true)
ps_set_pooling(warp, true)
add(my_emitters, warp)
elseif (emitter_string == "rain") then
local rain = emitter.create(64, 12, 2, 200)
ps_set_area(rain, 50, 10)
ps_set_gravity(rain, true)
ps_set_speed(rain, 0)
ps_set_size(rain, 0)
ps_set_life(rain, 1.5, 1)
ps_set_sprites(rain, {91, 92, 93, 94, 95, 96, 97})
add(my_emitters, rain)
elseif(emitter_string == "whirly bird") then
local bird = emitter.create(80, 80, 1, 0)
ps_set_sprites(bird, {22, 23, 25, 27, 28, 29})
ps_set_life(bird, 3)
ps_set_angle(bird, 0)
add(my_emitters, bird)
elseif(emitter_string == "spiral galaxy monster") then
local warp = emitter.create(64, 64, 1, 0)
ps_set_speed(warp, 30, 200)
ps_set_life(warp, 0.8)
ps_set_size(warp, 0, 2, 0.5, 0)
ps_set_colours(warp, {7, 6, 5})
ps_set_area(warp, 10, 10)
add(my_emitters, warp)
local hypno = emitter.create(64, 64, 0.9, 0)
ps_set_colours(hypno, {5, 13, 14, 12, 11})
ps_set_size(hypno, 0, 5)
ps_set_angle(hypno, 0, 90)
ps_set_life(hypno, 4)
ps_set_speed(hypno, 12)
add(my_emitters, hypno)
cray = hypno.clone(hypno)
ps_set_colours(cray, {15, 14, 12, 11, 10})
ps_set_rnd_colour(cray, true)
ps_set_speed(cray, 15)
ps_set_frequency(cray, 0.5)
add(my_emitters, cray)
elseif(emitter_string == "water spout") then
local spout = emitter.create(110, 90, 1, 0, false, true)
ps_set_colours(spout, {12, 1})
ps_set_size(spout, 2, 0, 3)
ps_set_angle(spout, 90, 45)
ps_set_life(spout, 2, 2)
ps_set_speed(spout, 100, 50)
local spray = emitter.create(110, 90, 1, 0, false, true)
ps_set_colours(spray, {7, 6, 5})
ps_set_angle(spray, 90, 45)
ps_set_life(spray, 2, 2)
ps_set_speed(spray, 100, 50)
ps_set_size(spray, 0, 1)
add(my_emitters, spray)
add(my_emitters, spout)
local explo = emitter.create(110, 90, 0.1, 0)
ps_set_size(explo, 2, 0, 2, 0)
ps_set_speed(explo, 10, 10, 10)
ps_set_life(explo, 1, 1)
ps_set_colours(explo, {7, 6, 5})
ps_set_area(explo, 20, 20)
ps_set_angle(explo, 90, 45)
add(my_emitters, explo)
elseif(emitter_string == "stars") then
local front = emitter.create(0, 64, 0.2, 0)
ps_set_area(front, 0, 128)
ps_set_colours(front, {7})
ps_set_size(front, 0)
ps_set_speed(front, 34, 34, 10)
ps_set_life(front, 3.5)
ps_set_angle(front, 0, 0)
add(my_emitters, front)
local midfront = front.clone(front)
ps_set_frequency(midfront, 0.15)
ps_set_life(midfront, 4.5)
ps_set_colours(midfront, {6})
ps_set_speed(midfront, 26, 26, 5)
add(my_emitters, midfront)
local midback = front.clone(front)
ps_set_life(midback, 6.8)
ps_set_colours(midback, {5})
ps_set_speed(midback, 18, 18, 5)
ps_set_frequency(midback, 0.1)
add(my_emitters, midback)
local back = front.clone(front)
ps_set_frequency(back, 0.07)
ps_set_life(back, 11)
ps_set_colours(back, {1})
ps_set_speed(back, 10, 10, 5)
add(my_emitters, back)
local special = emitter.create(64, 64, 0.2, 0)
ps_set_area(special, 128, 128)
ps_set_angle(special, 0, 0)
ps_set_frequency(special, 0.01)
ps_set_sprites(special, {78, 79, 80, 81, 82, 83, 84})
ps_set_speed(special, 30, 30, 15)
ps_set_life(special, 1)
add(my_emitters, special)
elseif(emitter_string == "explosion (burst)") then
local explo = emitter.create(64, 64, 0, 30)
ps_set_size(explo, 4, 0, 3, 0)
ps_set_speed(explo, 0)
ps_set_life(explo, 1)
ps_set_colours(explo, {7, 6, 5})
ps_set_area(explo, 30, 30)
ps_set_burst(explo, true, 10)
add(my_emitters, explo)
local spray = emitter.create(64, 64, 0, 80)
ps_set_size(spray, 0)
ps_set_speed(spray, 20, 10, 20, 10)
ps_set_colours(spray, {7, 6, 5})
ps_set_life(spray, 0, 1.3)
ps_set_burst(spray, true, 30)
add(my_emitters, spray)
local anim = emitter.create(64, 64, 0, 18)
ps_set_speed(anim, 0)
ps_set_life(anim, 1)
ps_set_sprites(anim, {32, 33, 34, 35, 36, 37, 38, 39, 40, 40, 40, 41, 41, 41})
ps_set_area(anim, 30, 30)
ps_set_burst(anim, true, 6)
add(my_emitters, anim)
elseif(emitter_string == "confetti (burst)") then
local left = emitter.create(0, 90, 0, 50, true, true)
ps_set_size(left, 0, 0, 2)
ps_set_speed(left, 50, 50, 50)
ps_set_colours(left, {7, 8, 9, 10, 11, 12, 13, 14, 15})
ps_set_rnd_colour(left, true)
ps_set_life(left, 1, 1, 2)
ps_set_angle(left, 30, 45)
add(my_emitters, left)
local right = left.clone(left)
ps_set_angle(right, 105, 45)
ps_set_pos(right, 128, 90)
add(my_emitters, right)
elseif(emitter_string == "portal") then
local outer = emitter.create(96, 64, 2, 0)
ps_set_speed(outer, 1, 1)
ps_set_sprites(outer, {48, 49, 50, 51})
ps_set_angle(outer, 180, 0)
ps_set_life(outer, 2)
add(my_emitters, outer)
local sparks = emitter.create(64, 64, 0.05, 0, false, true)
ps_set_sprites(sparks, {42, 43, 42, 43, 42, 43, 42, 43})
ps_set_speed(sparks, 30, 30, 30)
ps_set_life(sparks, 0.5, 1)
ps_set_area(sparks, 15, 15)
ps_set_angle(sparks, 0, 180)
add(my_emitters, sparks)
local matter = emitter.create(64, 64, 0.03, 0)
ps_set_sprites(matter, {58, 59, 60, 61, 62, 62, 62, 63, 63, 63})
ps_set_life(matter, 0.5, 0.6)
ps_set_area(matter, 30, 30)
add(my_emitters, matter)
local spinner = emitter.create(64, 84, 0.4, 0)
ps_set_life(spinner, 1, 1)
ps_set_speed(spinner, 5)
ps_set_colours(spinner, {6, 5, 1})
ps_set_size(spinner, 2, 0)
ps_set_angle(spinner, 90)
add(my_emitters, spinner)
local center = emitter.create(64, 64, 1, 0)
ps_set_size(center, 0)
ps_set_colours(center, {7, 12})
ps_set_rnd_colour(center, true)
ps_set_life(center, 1)
ps_set_speed(center, 35, -20)
add(my_emitters, center)
elseif(emitter_string == "structures (mouse)") then
poke(0x5f2d, 1)
local struc = emitter.create(64, 64, 1, 0)
ps_set_speed(struc, 0)
ps_set_sprites(struc, {85, 86, 87, 88, 89, 90})
ps_set_angle(struc, 180, 0)
ps_set_life(struc, 5)
add(my_emitters, struc)
elseif(emitter_string == "structures (arrows)") then
local struc = emitter.create(96, 64, 1, 125)
ps_set_speed(struc, 0)
ps_set_sprites(struc, {54, 55, 45, 47})
ps_set_angle(struc, 180, 0)
ps_set_life(struc, 2)
add(my_emitters, struc)
local structwo = struc.clone(struc)
ps_set_pos(structwo, 32, 64)
ps_set_sprites(structwo, {52, 53, 44, 30})
add(my_emitters, structwo)
local structhree = struc.clone(struc)
ps_set_pos(structhree, 64, 32)
ps_set_sprites(structhree, {56, 57, 46, 31})
add(my_emitters, structhree)
elseif(emitter_string == "amoebas") then
local grav = emitter.create(84, 64, 0.3, 60)
ps_set_speed(grav, 50, -50, 50, -50)
ps_set_life(grav, 1, 1.5)
ps_set_sprites(grav, {75, 76, 77, 72, 71, 72, 73, 74})
ps_set_area(grav, 20, 110)
ps_set_angle(grav, 180)
ps_set_pooling(grav, true)
add(my_emitters, grav)
elseif(emitter_string == "fire") then
local main = emitter.create(64, 64, 4, 110)
ps_set_area(main, 5, 0)
ps_set_colours(main, {8, 9, 10, 5})
ps_set_speed(main, 15, 5, 20)
ps_set_life(main, 0.5, 1)
ps_set_angle(main, 90, 10)
ps_set_size(main, 1.5, 0, 2, 0)
main.flicker = 1.1
add(my_emitters, main)
local left = main.clone(main)
ps_set_pos(left, 44, 60)
left.flicker = 0.8
add(my_emitters, left)
local right = main.clone(main)
ps_set_pos(right, 84, 60)
right.flicker = 0.95
add(my_emitters, right)
end
end
-------------------------------------------------- system functions
function _init()
prev_time = time()
delta_time = time()-prev_time
my_emitters = {}
emitter_type = 1
spawn_emitter(emitters[emitter_type])
end
function _draw()
cls()
draw_demo()
end
function _update60()
update_time()
update_demo()
end
__gfx__
0000000000a99a0000022000000bb000000aa0000009900000088000000ee0000001100009898980006060000060600000600000080000000880000000000000
000000000a9aa9a0002c720000bc7b0000ac7a00909c7909008c780000ec7e00001c710000009000006760000766660006760000898000008998000000888800
00700700a9a7aa9a0027720000b77b0000a77a00909779090087780000e77e000017710000008000667676606676766067676000080000008998000008899880
000770009a7a7aa900022022000bb000a00aa00a0909909000088000000ee0001001100100009000076767000667660006760000000000000880000008999980
000770009aa7a7a9022222200bbbbbb0a0aaaa0a009999000888888000eeee001001100100008000667676606676766000600000000000000000000008999980
00700700a9aa7a9a220220000b0bb0b00a0aa0a0000990008008800800eeee000111111000009000006760000666670000000000000000000000000008899880
000000000a9aa9a000022000000bb000000aa000000990000008800000eeee000001100009008000006060000060600000000000000000000000000000888800
0000000000a99a000020020000b00b0000a00a00009009000080080000e00e000010010000890000000000000000000000000000000000000000000000000000
0000a000000000000880000008880000008000000880000000888800000000000000000000000000000000000000000000000000000000000000000000000000
0089a9000080800008980000890000000890000080900000088888800098980000999900000a9000000aa0000000000000000000000000000000000000000000
0989a980008080800098000008900000890000008900000088888888098989800999999000a9a90000aaaa000007a000000000000000000000f0000000300000
0989898080808080098000000080000008000000088900008888888808989890099999900a9a9a900aaaaaa0007a7a0000077000000070000000000000000000
88898888888080888800000008900000000000000098000088888888098989800999999009a9a9a00aaaaaa000a7a70000077000000000000000f00000003000
888888888888808889800000890000000000000009800000888888880898989009999990009a9a0000aaaa00000a700000000000000000000000000000000000
0888888008888880009800000880000000000000080000000888888000898900009999000009a000000aa0000000000000000000000000000000000000000000
00888800008888000880000000000000000000000000000000888800000000000000000000000000000000000000000000000000000000000000000000000000
000000000077770000aaaa00009999000088880000888800006666000000000000000000000000000000000000000000f0000000900000003000000000000000
00077000077777700a7777a009777790087777800866668006555560006000606000000600000000000000000000000000000000000000000000000000000000
0077770077777777a777777a97777779876666788665566865000056065606560050005000000000000000000000000000f00000009000000030000000900000
0777777077777777a777777a977667798765567886500568650000560060006000000000000005000000a0000007000000000000000000000000000000000000
0777777077777777a777777a97766779876556788650056865000056000006000060000000000000000a00000000a0000000f000000090000000300000009000
0077770077777777a777777a97777779876666788665566865000056060065600000050600500000000000000000000000000000000000000000000000000000
00077000077777700a7777a0097777900877778008666680065555606560060005000000000000000000000000000000000000f0000000900000003000000000
000000000077770000aaaa0000999900008888000088880000666600060000000000000000000000000000000000000000000000000000000000000000000000
0000000c00000001000000050000000de0000000f0000000a000000090000000b000000030000000000000000000000000000000000000000000000000000000
000000c00000001000000050000000d00e0000000f0000000a000000090000000b00000003000000000000000c0cc0c00001100000000000c0000000000000c0
00000c00000001000000050000000d0000e0000000f0000000a000000090000000b00000003000000000000000c11c00001cc1000c0110c000000c0000000000
0000c00000001000000050000000d000000e0000000f0000000a000000090000000b000000030000000110000c1cc1c001c11c10001cc100000c000000000000
000c00000001000000050000000d00000000e0000000f0000000a000000090000000b00000003000000110000c1cc1c001c11c10001cc10000c1c00000010000
00c00000001000000050000000d0000000000e0000000f0000000a000000090000000b00000003000000000000c11c00001cc10000011000000c000000000000
0c00000001000000050000000d000000000000e0000000f0000000a000000090000000b000000030000000000c0cc0c0000110000c000c0000000c0000000000
c00000001000000050000000d00000000000000e0000000f0000000a000000090000000b00000003000000000000000000000000000000000000000000000000
000000000000000007b00b70b7b00b7b73000037b000000b000000000eee000000e0000000000000000000000000000000000000000000000000000000000000
00000000007bb7007b3333b773000037300000030000000000000000eccce0000ece000000e00000000000000000000000000000000000000000000000000000
000bb00007b33b70b300003bb000000b000000000000000000000000ecdce000ecdce0000ede000000d00000000000000000000000e000000000000000070000
00b77b000b3373b00303003000033000000660000006000000060000eccceee00ece0e0000e00000000000000000d000000d00000cdc00000007000000707000
00b77b000b3733b003003030000330000006600000006000000030000eeeccce00e0ece000000e0000000000000000000000e00000c00e000000000000070000
000bb00007b33b70b300003bb000000b000000000000000000000000000ecdce000ecdce0000ece000000e0000000000000000000000cde00000000000000000
00000000007bb7007b3333b773000037300000030000000000000000000eccce0000ece000000e0000000000000000000000000000000e000000000000000000
000000000000000007b00b70b7b00b7b73000037b000000b000000000000eee000000e0000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000007000000070000000600000006000000050000000000000000000000000000000000000000000000000000000
00000000050005000700070006000600050005000700000006000000060000000500000000000000000000000000000000000000000000000000000000000000
007070000060600000606000005050000000000000700000007000000060000000600000005000000010000000000000000000000000000000000000000c0000
0006000000070000000500000000000000000000000700000006000000060000000500000000000000000000000100000001000000010000000c0000000c0000
00707000006060000060600000505000000000000000700000007000000060000000600000005000000010000000000000010000000c0000000c000000070000
00000000050005000700070006000600050005000000070000000600000006000000050000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000007000000070000000600000006000000050000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000700000006000000060000000500000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000c0000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000c0000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00070000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00070000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
__label__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0077077707770777077707000000007707770700077707070707000007770077077000770777077707770000000000000000fff0fff00ff00ff00000fff00ff0
0700070700700707070707000000070007070700070707070707000007770707070707000070070007070000000000000000f0f00f00f000f0f00000f0f0f000
0777077700700770077707000000070007770700077700700777000007070707070707770070077007700000000000000000fff00f00f000f0f0fff0fff0fff0
0007070000700707070707000000070707070700070707070007000007070707070700070070070007070000000000000000f0000f00f000f0f00000f00000f0
077007000777070707070777000007770707077707070707077700000707077007070770ee70077707070000000000000000f000fff00ff0ff000000f000ff00
0000000000000000000000000000000000000000000000000000000000000000000000eeeeeee000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000eeeeeee000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeee00000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeee00000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeee00000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000eeeeeee000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000bbb0000000eee000000bbb0000000000000eeeeeee000fff000000000000000000000000000000000000000000000
000000000000000000000000000000000bbbbbbb000eeeeeee00bbbbbbb0000000000000eee000fffffff0000000000000000000000000000000000000000000
000000000000000000000000ccc000000bbbbbbb000eeeeeee00bbbbbbb0000000000000000000fffffff0000000000000000000000000000000000000000000
0000000000000000000000ccccccc000bbbbbbbbb0eeeeeeeeebbbbbbbbb000bbb00000000000fffffffff000000000000000000000000000000000000000000
0000000000000000000000ccccccc000bbbbbbbbb0eeeeeeeeebbbbbbbbb0bbbbbbb000000000fffffffff000000000000000000000000000000000000000000
000000000000000000000ccccccccc00bbbbbbbbb0eeeeeeeeebbbbbbbbb0bbbbbbb000000000fffffffff000000000000000000000000000000000000000000
000000000000000000000ccccccccc000bbbbbbbbb0eeeeeee00bbbbbbbbbbbbbbbbb000000000fffffff0000000000000000000000000000000000000000000
000000000000000000000ccccccccc000bbbbbbbbbbeeeeeee00bbbbbbbbbbbaaabbb0000000bbfffffff0000000000000000000000000000000000000000000
0000000000000000000000ccccccc000000bbbbbbbbb0eee000000bbbbb0bbaaaaabb0bbb000bbbbfff000ccc000000000000000000000000000000000000000
0000000000000000000000ccccccc0000000bbbbbbbbb06000000bbbbbbb0aaaaaaabbbbbbbbbbbbbbbb0ccccc00000000000000000000000000000000000000
000000000000000000000000ccc000000000bbbbbbbbb66600000bbbbbbb0aaaaaaabbbbbbbbbbbbbbbbccccccc0000000000000000000000000000000000000
000000000000000000000000000000000000bbbbbbbbb0600000bbbbbbbbbaaaaaaabbbbbbbbbbbbbbbbccccccc0000000000000000000000000000000000000
0000000000000000000000000000000000000bbbbbbb00000000bbbbbbbbb0aaaaabbbbbbbbbbbbbbbbbccccccc00000000000000ccc00000000000000000000
0000000000000000000000000000000000000bbbbbbbb0000000bbbbbbbbb0caaacbbbbbbbbbbbbbbbbbbccccc0bbb000000000ccccccc000000000000000000
0000000000000000000000000000000000bbb00bbbbbbbb000cccbbbbbbb0ccccccbbbbbbbbcccbbbbbbbbcccbbbbbbb0000000ccccccc000000000000000000
00000000000000000000000000000000bbbbbbb0bbbbbbb00cccccbbbbbb0ccccccbbbbbbbccccc0bbbbbbbbbbbbbbbb000000ccccccccc00000000000000000
00000000000000000000000000000000bbbbbbbbbbbbbbbbcccccccbbccc0ccccccbbbbbbbccccccbbbbbbbbbbcccbbbb00000ccccccccc00000000000000000
00000000000000000000000000bbb00bbbbbcccbbbbbcccbccccccc0ccccc0ccccccbbbbbcccccccbbbbbbbbbcccccbbb00000ccccccccc00000000000000000
000000000000000000000000bbbbbbbbbbbcccccbbbccccccccccccccccccc0ccccccbbbcccccccc0bbbbbbbcccccccbb000000ccccccc000000000000000000
000000000000000000000000bbbbcccbbbcccccccbccccccccccaaaccccccc0cccccccccc0ccccc00bbbbbbbcccccccb0000000ccccccc000000000000000050
00000000000000000000000bbbbcccccbbcccccccbccccccc0caaaaacccccccccccccccccccccc0ccc0bbbcccccccccb000000000ccc00000000000000000555
00000000000000000000000bbbcccccccbcccccccccccccccc0aaaaacccccccccccccccc0cccccccccc00cccccccccbbb0000000000000000000000000000050
0000000000000000000ccc0bbbccccccc0bccccccccccccccccaaaaaccaaacccccccccc0cccccccccccccccccccccbbbbbb00000000aaa000000000000000000
00000000000000000cccccccbbccccccc000ccccccccccccccccaaaccaaaaacccccc000cccccccccccccccccccc0bbbbbbb000000aaaaaaa0000000000000000
00000000000000000cccccccbbbccccc00000ccccccccccccccccccccaaaaaccccceee0ccccccccccccccccccccbbbbbbbbb00000aaaaaaa0000000000000000
0000000000000000ccccccccc6bbccc000000ccccccc0ccccc6ccccccaaaaa0ccceeeeecccccccccccc00cccccbbbbbbbbbb0bbbaaaaaaaaa000000000000000
0000000000000000cccccccccbbb0000000000ccccc0ccccc000ccccceaaae0000eeeee0ccccccccccccc0cccbbbbbbbbbbbbbbbaaaaaaaaa000000000000000
0000000000000000cccccccccbbbbb000000000ccc0ccccc00000ccc0eeeee00f0eeeee60ccccccc0ccccc00cbbbbbbbbbbbbbbbaaaaaaaaa000000000000000
00000000000000000cccccccbbbbbb00000000ccc0ccccccc0eee00000eee00fff0eee60000ccccccccccccccbbbbbbbbbbbbbbbbaaaaaaa0000000000000000
00000000000bbb000cccccccbbbbbbb000000cccccccccccceeeee0eee000000f00000eee000ccc0ccccccccccbbbbbbb0bbbbbbbaaaaaaa0000000000000000
000000000bbbbbbb000cccbbbbbbbbbccc00ccccccccccccceeeeeeeeee0000000000eeeee000000cccccccccccbbb0cccbbbbbbbbbaaa000000500000000000
000000000bbbbbbb00bbb0bbbbbbbbccccc0cccccccccccc0eeeeeeeeee0000000000eeeee0000000cccccccccccc0cccccbbbbbbb0000000005550000000000
00000000bbbbbbbbbbbbbbbbbbbbbcccccccccccccfffcc000eee0eeeee00000000a0eeeee000eee00ccc00ccccc0cccccccbbbbbb0bbb000000500000000000
00000000bbbbbbbbbbbbbbbbbbbbbccccccc0ccccfffff000cee000eee00d00000aaa0eee000eeeee00eee00ccceeecccccc0bbb00bbbbb00000000000000000
00000000bbbbbbbbbbbbbbbb0bbb0ccccccaaacccfffffe0cccee000000ddd00000a00000d00eeeee0eeeee000eeeeecccccbbbbbbbbbbbb0000000000000000
000000000bbbbbbbbbbbbbbbbbbbbbccccaaaaaccfffffe0eceee00a0000d00000000000ddd0eeeee0eeeee000eeeeeccccbbbbbbbbbbbbb0000000000000000
000000000bbbbbbbbbbbbbbbbbbbbcccccaaaaacccfffee0eeeee0aaa0000000d00000000d000eee00eeeee000eeeeecccbbbbbbbbbbbbbb0000000000000000
0000eee0000bbb00bbbbbbbbbbbbccccccaaaaacccceee000eee000a000d000ddd00ad0000000000000eee00000eeeccc0bbbbbbbbbbbbb00000000000000000
00eeeeeee0000000bbbbbbbbbbbccccccccaaaccccc000000000000000dad000d00aaad0000000c000eee00000000cccccbbbbbbbbbbbb000000000000000000
00eeeeeee000000000bbb0bbbbbccccccccccccccc00eee000d0000000aaa0000000ad000d000ccc0eeeee000000cccccccbbbbbbb0000000000000000000000
0eeeeeeeee0000000000bbbbbbbcccccccccc0ccc00eeeee0ddd00d0000a00d00d000000ddd000c00eeeee0eebbbcccccccbbbbbbb0bbb000000000000000000
0eeeeeeeee00000000bbbbbfffbbccccccccc00eee0eeeee00d00ddd00d00dddddd00d000d0000000eeeeeeebbbbbcccccc00bbbfffbbbbb0000000000000000
0eeeeeeeee00000000bbbbfffffb0ccccccc00eeeeeeeeee000000d00ddd00d00d00ddd00000000000eee0eebbbbbccccc00cccfffffbbbb0000000000000000
00eeeeeee00000000bbbbfffffff0000ccc000eeeee0eee00000000000d000e00700cd00d000ed00000000eebbbbbcccc00cccfffffffbbbb000000000000000
00eeeeeee00000000bbbbfffffff0000600000eeeee0000d0000e000d00000005000007ddd0eeed00d00000eebbbcccc00ccccfffffffbbbb000000000000000
0000eee0000000000bbbbfffffff000000eee00eee0000dad00eee0ddd00050000500000d000ed00ddd000ccc0ccccccc0ccccfffffffbbbb000000000000000
000000000000000000bbbbfffff000000eeeee0000eee0aaa000e000da05000000005000000000000d000cccccccccccc0cccccfffffbbbb0000000000000000
000000000000000000bbbbbfff0000000eeeee000eceee0a000000d000000000c000000000d000000000ecccccccccccc00cccccfffbbbbb0000000000000000
000000000000000bbb00bbbbbb0000000eeeee000cccee0000d00ddd00500a75557f00500add000d0000eccccc0ccccc0000ccc0bbbbbbb0000fff0ccc000000
0000000000000bbbbbcccbbbbbbb00ccc0eee0000eceee000ddd00d0000000500000000000d000ddd000eeccc000cccc0000cfffbbbbbbbbbfffffffcccc0000
0000000000000bbbbcccccbbbbbb0ccccc00aaaee0eee00000d0000005000500000507000000000d00eeeeeeeeeeccccfffcfffffbbbbbbbbfffffffcccc0000
000000000000bbbbcccccccbbbbbcccccccaaaaaee0000d0000000000000b500e0000b00070d000e0eeceeeeeeeeeccfffffffffffbbbbbbfffffffffcccc000
050000000000bbbbcccccccbbbbbcccccccaaaaaee000ddd0000070f00000500bb00500050ddd0eeeeccceeeeeeeeccfffffffffffbbbbbbfffffffffcccc000
555000000000bbbbcccccccbbbbbcccccccaaaaaeeeee0d000db000005000a55a000000000fd006e0eeceeeeeeeeeccfffffffffffbbbbbbfffffffffcccc000
0500000000000bbbbcccccbbbbbb0ccccc0eaaaeeeeeee000dbbb0d00070000b70005a05000000000eeeeeeeeeeeccccfffcfffffbbbbbbbbfffffffcccc0000
0000000000000bbbbbcccbbbbbbcccccccceeee00eeeee0000db0ddd0000000000057000000000000eeeee00eeebbbcccccccfffbbbbbbbbbfffffffcccc0000
00000000000000eeebbbbbbbbbcccccccccceee00eeeee0db00000d000c0500005000000000000d00eeeee00eebbbbbccccccbbbbbbbbbb0000fff0ccc000000
000000000000eeeeeeebbbbbbccccccccccceee000eee0dbbb00d000d0000050500f005000d00ddd00eeeee0eebbbbbccccccbbbbbbb0ccc0000000000000000
000000000000eeeeeeebbbbbbcccccccccccee0eee00000db00ddd0ddd0000a0000000000ddd07d0000eeefffebbbbbccccccbbbbbbbccccc000000000000000
00000000000eeeeeeeeebbbbbcccccccccc000eeeee000000000d000d00000000000500000d0000eee0eefffff0bbb6cccccbbbbbbbccccccc00000000000000
00000000000eeeeeeeeebbbbbbccccc0000000eeeee0eee000000000f00500000500000b000a00eeeeeeefffffccccc0ccc0bbbbbbbccccccc00000000000000
00000000000eeeeeeeeebbbbbbbccc00000000eeeeeeeaee00d0000fff000050000000ddd0aaa0eeece0efffffcccccc00000bbbbbbccccccc00000000000000
000000000000eeeeeeebbbbbbbbbbaaa0000000eee0eaaae0ddd00ddf00000000000d00d000a00eeccc000fffccccccc00000bbbbbbbccccc000000000000000
000000000000eeeeeeebbbbbbbbbaaaaa0000000000eeaee00d0000d000d0000f00ddd000000000eec0000eeeccccccc0000000fffbb0ccc0000000000000000
00000000000000eeebbbbbbbbbbbaaaaa00000eee000eee00000000000ddd00ddd00d0000000000000000eeeeeccccc0000000fffffbbb000000000000000000
00000000000000000bbbbbbbbbbbaaaaa0000eeeee00eee00eee000c000d0000d0000000d00eee00eee00eeeee0ccc0000000fffffffbb000000000000000000
000000000000aaa0bbbbbbbbbbbbbaaaccc00eeeee0ccceeeeeee0ccc000000000e0000dddeeeeeeeeee0eeeee00ccc000000fffffffbbb00000000000000000
0000000000aaaaaaabbbbbbbbbbbbb0ccccc0eeeeeccccceeeeee00c00000d000eee0000d0eeeeeeeeee00eee00ccccc00000fffffffbbb00000000000000000
0000000000aaaaaaabbbbbbbbbbbccccccccc0eee0ccccceeeeee0000000ddd00ded000000eeeeeeeeee00ccc0ccccccbbbbbbfffffbbbb00000000000000000
000000000aaaaaaaaabbbbbb0bbcccccccccc0ccc0ccccc00eee0000eee00d0000d00000000eee00eee00ccccccccccbbbbbbbbfffbbbb000000000000000000
000000000aaaaaaaaabbbbbbbbcccccccccccccccc0ccc0000eee00eeeee000eee00000e00eee000eee0ccccccccccbbbbbbbbbbbbbbbb000000000000000000
000000000aaaaaaaaa0bbb0bbbccccccccccccccccc000000eeeee0eeeee00eeeee000eeeeebbb0eeeeecccccaaaccbbbbbbbbbbbbbb00000000000000000000
0000000000aaaaaaa00000bbbbccccccccc0ccccccc000000eeeee0eeeee00eeeee0000e0ebbbbbeefffccccaaaaacbbbbbbbbbbb00000000000000000000000
0000000000aaaaaaa00000bbbbbcccccbbb0cccccccfff000eeeee00eee000eeeeeeee000ebbbbbefffffcccaaaaaccbbbbbbbbbb00000000000000000000000
000000000000aaa0000000bbbbbbcccbbbbbbcccccfffff000eee0000000000eeeeeeee000bbbbb0fffff0ccaaaaacccbbbbbbbb000000000000000000000000
00000000000000000000000bbbbbbbbbbbbbb0ccc0fffff00000000000fff00000eeeee0eeebbbccfffffccc0aaacccccbbbbbbb000000000000000000000000
00000000000000000000000bbbbbbbbbbbbbbb00ccfffffccc000eee0fffff0000eeeeeeeeee0ccccfffccccc0ccccccc00bbb0000000000ccc0000000000000
000000000000bbb0000000000bbbaaabbbbbbb0ccccfffccccc0eeeeefffff0eee0eee0eeeeecccccccccccccccccccccbbb0000000000ccccccc00000000000
0000000000bbbbbbb00000000bbaaaaabbbbbbcccccccccccccceeeeefffffeeeee0000eeeeecccccccccccccc0cccccbbbbbb00000000ccccccc00000000000
0000000000bbbbbbb00000000baaaaaaabbbb0cccccccccccccceeeeecfff0eeeee0ccc0eee0cccccccccccccc00cccbbbbbbb0000000ccccccccc0000000000
000000000bbbbbbbbb000000bbaaaaaaabbbbbcccccccfffcccc0eeeccccc0eeeeeccccc00000ccccc00ccccc00000bbbbbbbbb000000ccccccccc0000000000
000000000bbbbbbbbb000000bbaaaaaaabbbbbbcccccfffffcc0000ccccccceeeeecccccc0ccc0ccc0bbbccc000000bbbbbbbbbaaa000ccccccccc0000000000
000000000bbbbbbbbb000000bbbaaaaabbbbbbbbcccbfffffcccc00ccccccceeeeeccccccccccc00bbbbbbb0000000bbbbbbbaaaaaaa00ccccccc00000000000
0000000000bbbbbbb00000000bbbaaabbbbbbbbbbbbbfffffccccc0ccccccceeeeecccccccccccc0bbbbbbb00000066bbbbbbaaaaaaa00ccccccc00000000000
0000000000bbbbbbb00000000bbbbbbbbbbbbbbbbbbbbfffccccccc0ccccc60eee0ccccccccccccbbbbbbbbb00000fffbbbbaaaaaaaaa000ccc0000000000000
000000000000bbb000000000000bbb0aaabbbbbbbbbbbbbbccccccc00ccc60cccccccccccccccccbbbbbbbbb000fffffffbbaaaaaaaaa0000000000000000000
00000000000000000000000000000aaaaaaabbbbbbbbbbbbcbbbccc0bbb00ccccccccccc0cccccccbbbbaaab000fffffff00aaaaaaaaa0000000000000000000
00000000000000000000000000000aaaaaaabbbb0bbbbbbbbbbbbcbbbbbbbccccccccccbbbcccccccbbaaaaa00fffffffff00aaaaaaa00000000000000000000
0000000000000000000000000000aaaaaaaaab0bbbbbbbbbbbbbbbbbbbbbbcccccccbbbbbbcccccccbaaaaaaabfffffffff00aaaaaaa00000000000000000000
0000000000000000000000000000aaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbcccccbbbbbbbcccccccbaaaaaaabfffffffff0000aaa0000000000000000000000
0000000000000000000000000000aaaaaaaaabbbbbbb00bbbbbbbbbbbbbbbb0cccbbbbbbbbbcccccbbaaaaaaabbfffffff000000000000000000000000000000
00000000000000000000000000000aaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccbbbbaaaaabbbfffffff000000000000000000000000000000
00000500000000000000000000005aaaaaaabbbbbbbbbbbbbbbbbbbeeebbbbbbbbbbbbbbbbbbbbbbbbbbaaabbbb00fff00000000000000000000000000000000
0000555000000000000000000005550aaa00bbbbbbbbbbbbbbbbbbeeeeebbbbbbbbbbbbbbb0bbbbbbb0bbbbbbb00000000000000000000000000000000000000
000005000000000000000000000050000000cccbbbbb00bbbbbbbeeeeeeebbbbbbbbbbbb000bbbbbbb0bbbbbbb00000000000000000000000000000000000000
0000000000000000000000000000000000cccccccbbb00bbbbbbbeeeeeeebbbbbbbbb00000000bbb00000bbb0000000000000000000000000000000000000000
0000000000000000000000000000000000cccccccb000000bbbbbeeeeeee0bbfffbb000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000ccccccccc000000000bbbeeeeeb0fffffff000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000ccccccccc000000000bbbbeeebb0fffffff000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000ccccccccc0000000000bbbbbbb0fffffffff00000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000ccccccc00000000000bbbbbbb0fffffffff000bbb00000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000ccccccc0000000000000bbb000fffffffff0bbbbbbb000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000ccc0000eee000000000000000fffffff00bbbbbbb00000aaa0000000000000000000000000000000000000000000
00000000000000000000000000000000000000000eeeeeee0000000000000fffffff0bbbbbbbbb00aaaaaaa00000000000000000000000000000000000000000
00000000000000000000000000000000000000000eeeeeee000000000000000fff000bbbbbbbbb00aaaaaaa00000000000000000000000000000000000000000
0000000000000000000000000000000000000000eeeeeeeee00000000000000000000bbbbbbbbb0aaaaaaaaa0000000000000000000000000000000000000000
0000000000000000000000000000000000000000eeeeeeeee000000000000000000000bbbbbbb00aaaaaaaaa0000000000000000000000000000000000000000
0000000000000000000000000000000000000000eeeeeeeee000000000000000000000bbbbbbb00aaaaaaaaa0000000000000000000000000000000000000000
00000000000000000000000000000000000000000eeeeeee000000000000000000000000bbb00000aaaaaaa00000000000000000000000000000000000000000
00000000000000000000000000000000000000000eeeeeee00000000000000000000000000000000aaaaaaa00000000000000000000000000000000000000000
0000000000000000000000000000000000000000000eee000000000000000000000000005550505000aa55505550505000005050555055505550550055505050
00000000000000000000000000000000000000000000000000000000000000000000000050505050000055505050505000005050500050505050505050005050
00000000000000000000000000000000000000000000000000000000000000000000000055005550000050505550050000005500550055505500505055005550
00000000000000000000000000000000000000000000000000000000000000000000000050500050000050505050505000005050500050505050505050000050
00000000000000000000000000000000000000000000000000000000000000000000000055505550000050505050505000005050555050505050505055505550
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000