pico-8 cartridge // http://www.pico-8.com
version 41
__lua__--animation viewer--example implementation--◆caoimhe ni chaoimh◆--oakreef.iefunction_update60()clock+=1--inputifbtnp(⬅️)thenanim_index-=1ifanim_index<1thenanim_index=#anim_listendplr:change_state(anim_list[anim_index])elseifbtnp(➡️)thenanim_index+=1ifanim_index>#anim_listthenanim_index=1endplr:change_state(anim_list[anim_index])endifbtnp(❎)thenplr.fx=notplr.fxend--iterate state for all objectsfori,oinpairs(objects)doo:iter()endendfunction_draw()cls()--draw all objectsfori,oinpairs(objects)doo:draw()end--print current animationprint('animation: '..anim_list[anim_index],20,2,5)--print controlsprint('⬅️➡️ change animation',10,80,5)print('❎ flip character',10,86,5)--show memory and processer usageprint('\x98 '..(stat(0)/20.48)..'%',2,106,1)print('\x8c '..(stat(1)*100)..'%',2,112,1)endfunction_init()--setup basic animation dataobjects={}init_animation_objects()load_example_animation_data()anmt(plr,64,64)add(objects,plr)clock=0--pick animation that will play firstanim_list={}fori,animinpairs(plr.anim)doadd(anim_list,i)endanim_index=1plr.s=anim_list[anim_index]--override draw function--to display origin of objectplr.draw=function(o)o:super('draw')ifclock%4!=0thenpset(o.x,o.y,(clock/4)%8+8)endendendfunctioninit_animation_objects()animmt={}--meta tableanimfnc={}--functionsanimmt.__index=animfnc--java inspired method overridesanimfnc.super=function(o,method_name,...)getmetatable(o).__index[method_name](o,...)end--change animation state and--reset animation timers unless specified otherwiseanimfnc.change_state=function(o,state,reset)ifreset==nilthenreset=trueendifo.s!=statetheno.s=stateifresettheno.at=1o.af=1endendend--get current playing animation animfnc.get_anim=function(o)ifo.s==niloro.s=='inactive'thenreturnnilendreturno.anim[o.s]end--get current playing frameanimfnc.get_frame=function(o)localanim=o:get_anim()ifanim==nilthenreturnnilendreturnanim[o.af]end--iterate object--overwrite this with object behaviouranimfnc.iter=function(o)o:update_anim()end--iterate current animation--loop back to start once finishedanimfnc.update_anim=function(o)o.at+=1localframe=o:get_frame()ifframeando.at>frame[1]theno.at=1o.af+=1localanim=o:get_anim()ifanimando.af>#animtheno.af=1endendend--draw objectanimfnc.draw=function(o)locallayers=o:get_frame()[2]fori=#layers,1,-1dolocall=layers[i]localox=o.fxand1-l[5]-l[3]orl[5]sspr(l[1],l[2],l[3],l[4],o.x+ox,o.y+l[6],l[3],l[4],o.fx)endendend--add animation properties to objectfunctionanmt(obj,x,y)--object propertiesobj.x=xandxor0--positionobj.y=yandyor0obj.fx=false--flip sprite facingobj.s='inactive'--stateobj.at=1--animation timerobj.af=1--animation frameifobj.anim==nilthenobj.anim={}endsetmetatable(obj,animmt)returnobjendfunctionload_example_animation_data()--example data export from animatorplr={anim={stand={{20,{{0,24,10,9,-5,-17},{5,50,9,7,-4,-22},{16,60,2,3,-5,-13},{6,48,2,2,4,-13},{15,40,2,4,-2,-8},{15,28,3,4,1,-8},{10,30,5,5,-5,-4},{14,0,3,5,1,-4},{8,48,2,2,6,-13},{10,40,2,2,-5,-10}}}},walk={{13,{{10,35,4,5,-3,-14},{0,50,5,8,-2,-17},{12,57,4,5,-1,-9},{5,50,9,7,-4,-22},{7,18,6,6,-4,-5},{10,40,2,2,-3,-9},{12,40,1,2,3,-10}}},{17,{{14,53,5,4,-4,-13},{0,12,7,12,-3,-16},{14,5,3,5,3,-4},{5,50,9,7,-4,-21},{13,18,4,5,-5,-4},{10,40,2,2,-5,-9},{10,48,2,2,3,-9}}},{13,{{10,24,3,6,0,-16},{0,42,6,8,-3,-17},{13,23,4,5,-1,-9},{5,50,9,7,-4,-22},{8,0,6,6,-4,-5},{8,48,2,2,2,-11}}},{17,{{14,10,3,5,2,-14},{0,0,8,12,-4,-16},{13,18,4,5,-5,-4},{5,50,9,7,-4,-21},{14,5,3,5,3,-4},{5,57,7,7,0,-15}}}},fire={{5,{{14,15,8,3,-1,-15},{8,48,2,2,6,-15},{8,6,6,6,5,-18},{16,57,5,3,-2,-10},{0,50,5,8,-2,-17},{5,50,9,7,-4,-22},{15,40,2,4,-2,-8},{15,28,3,4,1,-8},{14,0,3,5,1,-4},{10,30,5,5,-5,-4}}},{5,{{15,44,6,3,-2,-15},{6,42,9,6,8,-20},{0,58,5,6,3,-19},{8,48,2,2,3,-15},{0,50,5,8,-3,-17},{5,50,9,7,-5,-22},{14,35,3,5,-3,-9},{14,48,3,5,0,-9},{14,0,3,5,1,-4},{14,0,3,5,-4,-4}}},{5,{{15,32,8,3,-1,-15},{0,33,10,9,9,-21},{7,12,7,6,4,-18},{16,57,5,3,-2,-10},{0,50,5,8,-2,-17},{5,50,9,7,-4,-22},{15,40,2,4,-2,-8},{15,28,3,4,1,-8},{14,0,3,5,1,-4},{10,30,5,5,-5,-4}}},{5,{{14,15,8,3,-1,-15},{8,48,2,2,6,-15},{7,12,7,6,5,-18},{16,57,5,3,-2,-10},{0,50,5,8,-2,-17},{5,50,9,7,-4,-22},{15,40,2,4,-2,-8},{15,28,3,4,1,-8},{14,0,3,5,1,-4},{10,30,5,5,-5,-4}}}}}}end__gfx__00011100001000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001113100111111c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001113c01101c0110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001133101111101c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000113110101c0011100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003113110001110110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131113100500551c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110111000666661100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b3300465551c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b0130494660111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b0013494000b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b00013440000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100005005503b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011130066660003b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cc11004655500030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131cd049460050bbb33b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013d7c049406003333b33000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131dc0440000000003311000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001311100010000111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110001111101c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133b0011c0c0111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001313b01c01101c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013003b101c001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000130003b001110330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011001003003b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111331103b03b3100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001cdd11dc13b03b100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ddccddcd13b03b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d7cc71003b0033b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001dcc1000300003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031cc1000011103b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b11000011c003b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003333b0011c003bb03b1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000011003333b311000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000c0000110003b311000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cca0000c033003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc00003b003b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca0000ca0003b003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca00000003b0103b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc000c03b033b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000c000111000b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000001d1003b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000c0000003b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111c00ccc0003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111cc00caca7c03b03b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131d0c7aaccac333b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131d00c77cc0003b31100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011d31c000cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101131bb1d11003b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001511100b11150033b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000049440003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000113100944994003b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011cc10949f4f0403b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111dc9499fff000033b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131d7949f9ff0003bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001311d0949ff0003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000133110000ff0003b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110030000003b030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055003b0000003b0333b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005066033b0000003b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066655303b00033bbb300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000465003103b00bb00b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600130031d0000b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060010001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000__label__0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005550550055505550555055505550055055000000000055505550555055500000000000000000000000000000000000000000000000000000000000000000000050505050050055505050050005005050505005000000500005005050500000000000000000000000000000000000000000000000000000000000000000000000555050500500505055500500050050505050000000005500050055005500000000000000000000000000000000000000000000000000000000000000000000005050505005005050505005000500505050500500000050000500505050000000000000000000000000000000000000000000000000000000000000000000000050505050555050505050050055505500505000000000500055505050555000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004944000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000944994000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000949f4f040000c000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009499fff00000000cca0000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000949f9ff00500550000cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009411f0006666ca0000ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011310046555ca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013bb13b1d60050cc000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013333b311060c0000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001313b31100000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001311d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013311000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000333b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b033b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b003b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b003b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003b003b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011c001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011c000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110001c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005555500055555000000055050505550550005505550000055505500555055505550555055500550550000000000000000000000000000000000000000000000555005505500555000005000505050505050500050000000505050500500555050500500050050505050000000000000000000000000000000000000000000005500055055000550000050005550555050505000550000005550505005005050555005000500505050500000000000000000000000000000000000000000000055500550550055500000500050505050505050505000000050505050050050505050050005005050505000000000000000000000000000000000000000000000055555000555550000000550505050505050555055500000505050505550505050500500555055005050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005555500000055505000555055500000055050505550555055500550555055505550000000000000000000000000000000000000000000000000000000000000550505500000500050000500505000005000505050505050505050000500500050500000000000000000000000000000000000000000000000000000000000005550555000005500500005005550000050005550555055005550500005005500550000000000000000000000000000000000000000000000000000000000000055050550000050005000050050000000500050505050505050505000050050005050000000000000000000000000000000000000000000000000000000000000055555000000500055505550500000000550505050505050505005500500555050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000111000001110111010001110101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100010100010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111110000011100000011011101110111001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010100010100010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111000001110010011101110111011101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111100000111000001110110010101110101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011101000000010000000100100101010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111110000011100000001001001110111001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000100000100000000010010000100010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111000001110010000101110001011101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000