pico-8 cartridge // http://www.pico-8.com
version 42
__lua__-- tablet v-- cork game jam 2024-- caoimhe-- https://oakreef.ie-- made with advanced micro olatformer starter kit-- https://www.lexaloffle.com/bbs/?tid=28793--config----------------------------------sfxsnd={jump=0,}--music tracksmus={}-->8-->8--maths----------------------------------point to box intersection.functionintersects_point_box(px,py,x,y,w,h)ifflr(px)>=flr(x)andflr(px)<flr(x+w)andflr(py)>=flr(y)andflr(py)<flr(y+h)thenreturntrueelsereturnfalseendend--box to box intersectionfunctionintersects_box_box(x1,y1,w1,h1,x2,y2,w2,h2)localxd=x1-x2localxs=w1*0.5+w2*0.5ifabs(xd)>=xsthenreturnfalseendlocalyd=y1-y2localys=h1*0.5+h2*0.5ifabs(yd)>=ysthenreturnfalseendreturntrueend--check if pushing into side tile and resolve.--requires self.dx,self.x,self.y, and --assumes tile flag 0 == solid--assumes sprite size of 8x8functioncollide_side(self)localoffset=self.w/3fori=-(self.w/3),(self.w/3),2doifself.dx<0thenifself.x<4thenself.x=4self.dx=0returntrueendend--if self.dx>0 theniffget(mget((self.x+(offset))/8,(self.y+i)/8),0)thenself.dx=0self.x=(flr(((self.x+(offset))/8))*8)-(offset)returntrueend--elseif self.dx<0 theniffget(mget((self.x-(offset))/8,(self.y+i)/8),0)thenself.dx=0self.x=(flr((self.x-(offset))/8)*8)+8+(offset)returntrueend-- endend--didn't hit a solid tile.returnfalseend--check if pushing into floor tile and resolve.--requires self.dx,self.x,self.y,self.grounded,self.airtime and --assumes tile flag 0 or 1 == solidfunctioncollide_floor(self)--only check for ground when falling.ifself.dy<0thenreturnfalseendlocallanded=false--check for collision at multiple points along the bottom--of the sprite: left, center, and right.fori=-(self.w/3),(self.w/3),2dolocaltile=mget((self.x+i)/8,(self.y+(self.h/2))/8)iffget(tile,0)or(fget(tile,1)andself.dy>=0)thenself.dy=0self.y=(flr((self.y+(self.h/2))/8)*8)-(self.h/2)self.grounded=trueself.airtime=0landed=trueendendreturnlandedend--check if pushing into roof tile and resolve.--requires self.dy,self.x,self.y, and --assumes tile flag 0 == solidfunctioncollide_roof(self)--check for collision at multiple points along the top--of the sprite: left, center, and right.fori=-(self.w/3),(self.w/3),2doiffget(mget((self.x+i)/8,(self.y-(self.h/2))/8),0)thenself.dy=0self.y=flr((self.y-(self.h/2))/8)*8+8+(self.h/2)self.jump_hold_time=0endendend--make 2d vectorfunctionm_vec(x,y)localv={x=x,y=y,--get the length of the vectorget_length=function(self)returnsqrt(self.x^2+self.y^2)end,--get the normal of the vectorget_norm=function(self)locall=self:get_length()returnm_vec(self.x/l,self.y/l),l;end,}returnvend--square root.functionsqr(a)returna*aend--round to the nearest whole number.functionround(a)returnflr(a+0.5)end-->8--utils--------------------------------cptspr={1,2,3,20,21,22,23,65,66,67,68,69,70,71,72,73,74,128,129,130,144,145,146,161}--print with corrupt charactersfunctionprintx(str,x,y,col)print(str,x,y,col)localst=-1localnd=-1fori=1,#strdoifstr[i]=='#'then--print('#',x+i*4-4,y,8)ifst==-1thenst=ind=ielsend=iendelseifst!=-1thenrectfill(x+(st-1)*4-1,y-1,x+(st+nd-st)*4-1,y+5,4)forj=0,nd-stdosrand(i+j+st+nd+#str)locals=rnd(cptspr)localxf=flr(rnd(4))localyf=flr(rnd(2))fori=0,15dopal(i,rnd({0,1,2,3,4,5,6,7}))endsspr(s%16*8+xf,flr(s/16)*8+yf,4,6,x+(st+j-1)*4-1,y-1)pal()endst=-1nd=-1endendendsrand(time())end--print string with outline.functionprinto(str,startx,starty,col,col_bg)print(str,startx+1,starty,col_bg)print(str,startx-1,starty,col_bg)print(str,startx,starty+1,col_bg)print(str,startx,starty-1,col_bg)print(str,startx+1,starty-1,col_bg)print(str,startx-1,starty-1,col_bg)print(str,startx-1,starty+1,col_bg)print(str,startx+1,starty+1,col_bg)print(str,startx,starty,col)end--print string centered with --outline.functionprintc(str,x,y,col,col_bg,special_chars)locallen=(#str*4)+(special_chars*3)localstartx=x-(len/2)localstarty=y-2printo(str,startx,starty,col,col_bg)end--objects----------------------------------make the playerfunctionm_player(x,y)--todo: refactor with m_vec.localp={x=x,y=y,dx=0,dy=0,w=8,h=16,max_dx=0.6,--max x speedmax_dy=2,--max y speedjump_speed=-1.5,--jump veloclityacc=0.05,--accelerationdcc=0.9,--deccelerationair_dcc=0.98,--air deccelerationgrav=0.15,attacking=0,--helper for more complex--button press tracking.--todo: generalize button index.attack_button={update=function(self)--start with assumption--that not a new press.self.is_pressed=falseifbtn(4)thenifnotself.is_downthenself.is_pressed=trueendself.is_down=trueself.ticks_down+=1elseself.is_down=falseself.is_pressed=falseself.ticks_down=0endend,--stateis_pressed=false,--pressed this frameis_down=false,--currently downticks_down=0,--how long down},jump_button={update=function(self)--start with assumption--that not a new press.self.is_pressed=falseifbtn(5)thenifnotself.is_downthenself.is_pressed=trueendself.is_down=trueself.ticks_down+=1elseself.is_down=falseself.is_pressed=falseself.ticks_down=0endend,--stateis_pressed=false,--pressed this frameis_down=false,--currently downticks_down=0,--how long down},jump_hold_time=0,--how long jump is heldmin_jump_press=5,--min time jump can be heldmax_jump_press=10,--max time jump can be heldjump_btn_released=true,--can we jump again?grounded=false,--on groundairtime=0,--time since grounded--animation definitions.--use with set_anim()anims={["stand"]={ticks=1,--how long is each frame shown.frames={2},--what frames are shown.},["walk"]={ticks=8,frames={3,4,5,6},},["jump"]={ticks=1,frames={1},},["slide"]={ticks=1,frames={7},},},atk_len=18,atk_anims={{8,16,8,4,-3,-3},{17,16,10,3,-3,-3},{17,16,12,3,-2,-2},{32,16,8,6,-3,-3},{40,16,8,6,-3,-3},},curanim="walk",--currently playing animationcurframe=1,--curent frame of animation.animtick=0,--ticks until next frame should show.flipx=false,--show sprite be flipped.--request new animation to play.set_anim=function(self,anim)if(anim==self.curanim)return--early out.locala=self.anims[anim]self.animtick=a.ticks--ticks count down.self.curanim=animself.curframe=1end,--call once per tick.update=function(self)--todo: kill enemies.--track button presseslocalbl=btn(0)--leftlocalbr=btn(1)--right--move left/rightifself.attacking>self.atk_len-6ornot(blorbr)thenifself.groundedthenself.dx*=self.dccelseself.dx*=self.air_dccendelseifblthenself.dx-=self.accbr=false--handle double presselseifbrthenself.dx+=self.accend--limit walk speedself.dx=mid(-self.max_dx,self.dx,self.max_dx)--move in xself.x+=self.dx--hit wallscollide_side(self)--jump buttonsself.jump_button:update()self.attack_button:update()--jump is complex.--we allow jump if:-- on ground-- recently on ground-- pressed btn right before landing--also, jump velocity is--not instant. it applies over--multiple frames.ifself.jump_button.is_downthen--is player on ground recently.--allow for jump right after --walking off ledge.localon_ground=(self.groundedorself.airtime<5)--was btn presses recently?--allow for pressing right before--hitting ground.localnew_jump_btn=self.jump_button.ticks_down<10--is player continuing a jump--or starting a new one?ifself.jump_hold_time>0or(on_groundandnew_jump_btn)thenif(self.jump_hold_time==0)sfx(snd.jump)--new jump sndself.jump_hold_time+=1--keep applying jump velocity--until max jump time.ifself.jump_hold_time<self.max_jump_pressthenself.dy=self.jump_speed--keep going up while heldendendelseself.jump_hold_time=0endifself.attacking>0thenself.attacking-=1elseifself.attack_button.is_pressedthenself.attacking=self.atk_lenendend--move in yself.dy+=self.gravself.dy=mid(-self.max_dy,self.dy,self.max_dy)self.y+=self.dy--floorifnotcollide_floor(self)thenself:set_anim("jump")self.grounded=falseself.airtime+=1end--roofcollide_roof(self)--handle playing correct animation when--on the ground.ifself.groundedthenifbrthenifself.dx<0then--pressing right but still moving left.self:set_anim("slide")elseself:set_anim("walk")endelseifblthenifself.dx>0then--pressing left but still moving right.self:set_anim("slide")elseself:set_anim("walk")endelseself:set_anim("stand")endend--flipifbrthenself.flipx=falseelseifblthenself.flipx=trueend--anim tickself.animtick-=1ifself.animtick<=0thenself.curframe+=1locala=self.anims[self.curanim]self.animtick=a.ticks--reset timerifself.curframe>#a.framesthenself.curframe=1--loopendendend,--draw the playerdraw=function(self)locala=self.anims[self.curanim]localframe=a.frames[self.curframe]spr(frame,self.x-(self.w/2),self.y-(self.h/2),self.w/8,self.h/8,self.flipx,false)ifself.attacking==0thensspr(0,16,6,8,self.x-3,self.y-3,6,8,self.flipx)elselocall=self.atk_lenlocala=self.atk_anims[flr((l-self.attacking)/(l/#self.atk_anims))+1]localxf=self.flipxanda[4]-a[5]-14ora[5]sspr(a[1],a[2],a[3],a[4],self.x+xf,self.y+a[6],a[3],a[4],self.flipx)endend,}returnpend--make the camera.functionm_cam(target)localc={tar=target,--target to follow.pos=m_vec(target.x,target.y),--how far from center of screen target must--be before camera starts following.--allows for movement in center without camera--constantly moving.pull_threshold=16,--min and max positions of camera.--the edges of the level.pos_min=m_vec(64,64),pos_max=m_vec(960,64),shake_remaining=0,shake_force=0,update=function(self)self.shake_remaining=max(0,self.shake_remaining-1)--follow target outside of--pull range.ifself:pull_max_x()<self.tar.xthenself.pos.x+=min(self.tar.x-self:pull_max_x(),4)endifself:pull_min_x()>self.tar.xthenself.pos.x+=min((self.tar.x-self:pull_min_x()),4)endifself:pull_max_y()<self.tar.ythenself.pos.y+=min(self.tar.y-self:pull_max_y(),4)endifself:pull_min_y()>self.tar.ythenself.pos.y+=min((self.tar.y-self:pull_min_y()),4)end--lock to edgeif(self.pos.x<self.pos_min.x)self.pos.x=self.pos_min.xif(self.pos.x>self.pos_max.x)self.pos.x=self.pos_max.xif(self.pos.y<self.pos_min.y)self.pos.y=self.pos_min.yif(self.pos.y>self.pos_max.y)self.pos.y=self.pos_max.yend,cam_pos=function(self)--calculate camera shake.localshk=m_vec(0,0)ifself.shake_remaining>0thenshk.x=rnd(self.shake_force)-(self.shake_force/2)shk.y=rnd(self.shake_force)-(self.shake_force/2)endreturnself.pos.x-64+shk.x,self.pos.y-64+shk.yend,pull_max_x=function(self)returnself.pos.x+self.pull_thresholdend,pull_min_x=function(self)returnself.pos.x-self.pull_thresholdend,pull_max_y=function(self)returnself.pos.y+self.pull_thresholdend,pull_min_y=function(self)returnself.pos.y-self.pull_thresholdend,shake=function(self,ticks,force)self.shake_remaining=ticksself.shake_force=forceend}returncend-->8--game flow----------------------------------reset the game to its initial--state. use this instead of--_init()functionreset()ticks=0p1=m_player(8,100)p1:set_anim("walk")cam=m_cam(p1)end-->8--p8 functions--------------------------------function_init()reset()endfunction_update60()ticks+=1p1:update()cam:update()--demo camera shake-- if(btnp(4))cam:shake(15,2)endfunction_draw()cls(0)camera(cam:cam_pos())map(0,0,0,0,128,128)p1:draw()--hudcamera(0,0)clip(0,0,128,32)rectfill(0,0,127,32,4)fori,linpairs(text[1])dolocaly=32+8*i-time()*4ify>-6andy<36thenprintx(l,2,32+8*i-time()*4,0)endendclip()palt(7,true)palt(0,false)sspr(0,88,128,8,0,32)palt()end-->8--texttext={{" tablet v","","they stood at the forest's edge","gazing at the top of the cedar","tree, gazing at the entrance to","the forest. where humbaba would","walk there was a trail, the","roads led straight on, the path","was excellent. then they saw","the cedar mountain, the","dwelling of the gods, the","throne dais of imini.","across the face of the mountain","the cedar brought forth","luxurious foliage, its shade","was good, extremely pleasant.","the thornbushes were matted","together, the w##d# were a","thicket ### #### among the","cedars, ### ## ## ## #### ","#### the boxwood, the forest","was surrounded by a ravine two","leagues long, ########### ## ","## #### #### ############### ","and again for two-thirds,","#### #### ## #### ########## ","############################# ","############ ################ ","##### ############ ########## ","##### suddenly the swords ### ","and after the sheaths ####### ","#####the axes were smeared### ","##################dagger and sword","","","","",""," alone","","","","","","humbaba spoke to gilgamesh saying:","\"he does not come###### ","####################################### ","################################## ","###################################### ","###########enlil####################### ","enkidu spoke to humbaba, saying:","\"humbaba #### one alone","#####strangers###### ","a slippery path is not feared","by two people who help each","other.","","","","twice three times...","a three-ply rope cannot be cut","the mighty lion--two cubs can roll him over."}}__gfx__0123456700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089abcdef00011100000111000001110000011100000111000001110000011100000000000000000000000000000000000000000000000000000000000000000000700700001414000014140000141400001414000014140000141400001414000000000000000000000000000000000000000000000000000000000000000000000770000014440000144400001444000014440000144400001444000014440000000000000000000000000000000000000000000000000000000000000000000007700000114400001144000011440000114400001144000011440000114400000000000000000000000000000000000000000000000000000000000000000000700700022122000221220002212200002122000021220002212200022122000000000000000000000000000000000000000000000000000000000000000000000000000221220002212200022122000021220000212200022122000221220000000000000000000000000000000000000000000000000000000000000000000000000000222200002222000022220000222200002222000022220000222200000000000000000000000000000000000000000000000000000000000000000000000000001220000012204000122040001224000012200000122400001220000000000000000000000000000000000000000000000000000000000000000000000000000012200000122004001220040012240000122000001224000012200000000000000000000000000000000000000000000000000000000000000000000000000000122200001222000012220000122200001222000012220000122200000000000000000000000000000000000000000000000000000000000000000000000000004022000012220000122200001222000012220000122200001222000000000000000000000000000000000000000000000000000000000000000000000000000040050000422200002222200004550000222220000455000004050000000000000000000000000000000000000000000000000000000000000000000000000004005000004005000440005000540000055000400054000000040500000000000000000000000000000000000000000000000000000000000000000000000000044055000040050004000050005440000500004000544000004000500000000000000000000000000000000000000000000000000000000000000000000000000000000000440550044000550004400005500044000440000044005500000000000000000000000000000000000000000000000000000000000000002200000022000000a224449aaaaaa000220000002200000000000000000000000000000000000000000000000000000000000000000000000000000000000000220000002200090002200900000000002200000a22000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000004449aaa0000000000000000040000aa04000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000090000000000000000000000490aa004090000000000000000000000000000000000000000000000000000000000000000000000000000000000000490000000000000000000000000000000049a000049aaaa0000000000000000000000000000000000000000000000000000000000000000000000000000000009aa0000000000000000000000000000000009000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ff11ff10bbbbbbbbbbbbbb0000013bbbb310000bbbbbbbb000013bb00000000b3b100000010010000100100000000000000000000000000000000888288820049944994bb3b3b3bb3b3b3bb00013b3bb3331000b3b3b3b300133b3b00000000bb3310000101100000011010000100000000000000000000000008288828828001100110b3b333333b3b3b3b000013bbbb3100003b3b3b3b000133bb00001010b3b100001010101111010101000000100000000000000000000088828888888200000000bb333131131333bb01013b3bb33310101333313100133b3b01013130bb3310001001110110111001000000000000000000000000008888888999882800000000b3b310100101333b131333bbbb33313103131010000133bb13133331b3b33100011000100100011001000000000000000000000008118899a00a988800000000bb310000000013bb33333b3bb3b3b3b30101000000001b3bb3b3b3b3bb3310001010110000110101000000000000000000000000811889900000998200000000b3b310000001333bb3b3b3bbbb3b3b3b00000000000133bb3b3b3b3bb3b33100101101011010110100000100000000000000000088889a000000a92800000000bb310000000013bbbbbbbbb00bbbbbbb0000000000001b3bbbbbbbbbbb31000011000110011000110000000000000000000000008880900000099a8810000000000000010001333bb3331000000000000000000000000000cccccccc00000000000000000000000000000000000000000000000000079000000998821010001000010101000013b33b3100000000000000000000000000000c0c00c0000000000000000000000000000000000000000000000000007990000009982810000000100000010000133bb3310000000000000000000000000000000001000000000000000000000000000000000000000000000000000799000000aa88801010100000101001000001133110000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000099888011000000000100010000010110100000000000000000000000000000001010010000000000000000000000000000000000000000000000000000000000998820100100010000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a828011000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000a98882100000000100000100000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000009988281010000000000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099888810010000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998882100000000010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a882810100000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a98888100000000100010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099988820000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999882200000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000998828000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a888800000000000000000000000000000000000000000000000000000000500500500000000000000000000000000000000000000000000000001ff11ff11ff11ff10000000000000000000000000000000000000000000090000000000055060000000000000000000000000000000000000000000000000000499449944994499400000000000000000000000000000000000000000009a900000000006055000000000000000000000000000000000000000000000000000001100110011981180000000000000000000000000000000000000000000a7a000000000060050000000000000000000000000000000000000000000000000000000000000009888800000000000000000000000000055500000000000009f900000000000006000000000000000000000000000000000000000000000000000000000000000a8822000000000000000000000000005555500000000000014000000000000006000000000000000000000000000000000000000000000000000000000000000998880000000000000000000000000005055000500000000140000033500000060000000000000000000000000000000000000000000000000000000000000000a98800000000000000000000000000555500055005000000100003555300000000000000000000000000000000000000000000000000000000000000000000009988000ffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff6666666666666666ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6fffff6f6f6f6ffff6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6ff6ff6f6f6f6f6ff6f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff66fff6f6f6f6ff66ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0f6f6f6f60ffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6f6f6f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6f6f6f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066666666f6f6f6f606666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffff6f6f6f6f66fff6ff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffff6f6f6f6f66ffff6f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffff6f6f6f6f66ffffff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffff6f6f6f6f66ffffff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffff6f6f6f6f66ffffff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffff6f6f6f6f66ffffff60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066666666f6f6f6f6066666600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6f6f6f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6f6f6f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6f6f6f6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6f6f6f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066666666660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006ffffffffffff600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000666666666666666600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000444444444000000000000044444444444444444444444440000004444444444444444444444444444444444444444444444444444444444444444444444444000004000000444400000000004444444444444444440000044444000000044444444000000000000000000000004444444444444000000444444444440000000444000444444444444444404400000000000000000044444444444444444000000000440444444444404444444000000000000000444440000000000004444400444404444440444444444044444444444444444444444404444400444444444444444440444444444404444444444444444404444444404444444444404444700444400444440444444444000000000000444444444044444444440000444444444444440000000000044444444444444444400000000044444444444404007770444440400000000000000777777777770000004444444444444444444400044000000007777777777000000000000000000077777777000000000000000777770000000077777777777777777777777777777000000000000000000000077000777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777773737373737373737373737373737373777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777373737373737373737373737373737377777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777773737373737373737373737373737373777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777373737373737373737373737373737377777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777773737373737373737373737373737373777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777373737373737373737373737373737377777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737373737373737373737373737373737777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777773737373737373737373737373737373777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777377777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777737__label__4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000400040004044400040004444404044444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444044040404040444044440444444040444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440440004004404440044404444440404444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444404404040404044404444044444400044444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444044040400040004000440444444404444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000404040004040444444004000440044004004444440004000444440004040400044444000440040004000440040004404440044444000400444004000444444044040404440404444404444044040404040404444404044044444440440404044444440444040404040444044440440444044444440444040404440444444440440004004400044444000440440404040404044444000440444444404400040044444400440404004400440004404444440004444400440404044400444444404404040444440444444404404404040404040444440404404444444044040404444444044404040404044444044044444444044444044404040404044444444044040400040004444400444044004400440004444404044044444440440404000444440444004404040004004440444444004444440004000400040004444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444440040004000400040044400444440004000444440004040400044444000440040004444440040004444400040404000444444004000400440004000444444444044404044404404404040444444404044044444440440404044444444044040404044444040404444444404404040444444404440444040404040404444444004444444440000000000000444444444444444444444444400000044444444444444444444444444444444444444444444444444444444444444444444444440000040000004444000000000044444444444444444400000444440000000444444440000000000000000000000044444444444440000004444444444400000004440004444444444444444044000000000000000000444444444444444440000000004404444444444044444440000000000000004444400000000000044444004444044444404444444440444444444444444444444444044444004444444444444444404444444444044444444444444444044444444044444444444044440004444004444404444444440000000000004444444440444444444400004444444444444400000000000444444444444444444000000000444444444444040000004444404000000000000001011010110000000044444444444444444444000440000000000000000000000000000000000000110000110000000000000000000000000000000000001010110110110101000000000000000000000000000000000000010000000000000000001011010110110101101011011011010110110000011000110000000001100011110001100000000000000000000000000000000000000000000000000000000011000110110001100110001111000110110001000010010000100100000000000000000000100100001001000000000000000000000000000000000100000000000000000010010010000000000000000000101001011000000110100000000000000000010110000101100000010000000000000000000000010101000100000000000000011010101000100000000000000101101010111101010100000000000000001010101110101011000000100000000000000000100000010000001000000000110101011000000000000000000010011001110110111001000000000000000010011101100111010000000000000000000000000010100100000000000000001011100110101000000000000000011001100010010001100000000000000000011000100110001001000000000000000000000000010001010000000000000001000110110000000000000000000101101011000011010100000000000000001010110010101100000000000000000000000000000001010000000000000000001101011001000100000000000011011011010110101101000000000000000010110101101101010000010000000000000000000000000100000100000000001010110111000000000000000000001111000110011000110000000000000000110001101100011000000000000000000000000001000001000000000000000001100011100000000000000000000100000000000010010000000000000000000010010000100100001001000000000010000000000000010000000000100100001001001000000000000000000010100000000000011010000000000000000001011000010110000101100000000000101000100001010100000000000110100001101010100010000000000001010100000000110101010000000000000000101010111010101110101011000000001000000010000001000000001101010111010101100000000000000000001001000000001011100100000000000000001001110110011101100111010000000010101000001010010000000010111001101110011010100000000000000001100000000001000110000000000000000001100010011000100110001000000000110000000001000100000000010001100100011011000000000000000100010100000000001101010000000000000000101011001010110010101100000000001001000100000101000000000011010100110101100100010000000000001101000000001010110100000000000000001011010110110101101101010000000011000000000000010000000010101101101011011100000000000000000000110000000001100011000000000000000011000110110001101100011000000000100000000100000100000000011000110110001110000000000000000000000000100100000000000000000000000000000000000000000000100100001001001000000000000001001001000010010000000000100000000000000000000000000110100000000000000000000000000000000000000000010110000101100010100010000101010001101000011010000000001010001000000000000000001101010100000000000000000000000000000000000000001010101110101011100000001000000111010101110101010000000010000000000000000000000010111001000000000000000000000000000000000000000010011101100111011010100000101001101110011011100100000000101010000000000000000000010001100000000000000000000000000000000000000000011000100110001011000000000100010100011001000110000000001100000000000000000000000011010100000000000000000000000000000000000000001010110010101100100100010000010100110101001101010000000010010001000000000000000010101101000000000000000000000000000000000000000010110101101101011100000000000001101011011010110100000000110000000000000000000000011000110000000000000000000000000000000000000000110001101100011010000000010000010110001101100011000000001000000000000000000001000010010000000000000000000000000000000000000000000000000000000000100000000000000100000000000000000000000010000000000000000000101001011000000000000000000000000000000000000000000000000000000000001010001000010101000000000000000000000000101000100000000000000101101010110000000000000000000000000000000000000000000000000000000010000000100000010000000000000000000000001000000000000000000010011001110100000000000000000000000000000000000000000000000000000000101010000010100100000000000000000000000010101000000000000000011001100010000000000000000000000000000000000000000000000000000000001100000000010001000000000000000000000000110000000000000000000101101011000000000000000000000000000000000000000000000000000000000010010001000001010000000000000000000000001001000100000000000011011011010100000000000000000000000000000000000000000000000000000000110000000000000100000000000000000000000011000000000000000000001111000110000000000000000000000000000000000000000000000000000000001000000001000001000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000100000000000000000000000000000000010100010000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010101000000000000000000000000000000000001010100000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000100000000000000000000000000000000100100010000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111000000000000000000000000001010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014140000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144400000000000000000000000000101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001144000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000221220000000000000000000000000010010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002212200000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042222000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000492000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009aa2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012aa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000422aa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004404400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0011000000000000000000000000000000000000000000000000000000000000000000000bb3b3b3bb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bb1ff100000000000000000000000000000000000000000000000000000000000000000000b3b333333b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b499400000000000000000000000000000000000000000000000000000000000000000000bb3331311333313113333131133331311333313113333131131333bb011000000000000000000000000000000000000000000000000000000000000000055500b3b3101003131010031310100313101003131010031310100101333b000000000000000000000000000000000000000000000000000000000000000000555550bb3100000101000001010000010100000101000001010000000013bb000000000000000000000000000000000000000000000000000000000000000000050550b3b3100000000000000000000000000000000000000000000001333b000000000000000000000000000000000000000000000000000000000000000000555500bb3100000000000000000000000000000000000000000000000013bb00000000000000000000000000000000000000000000000000000000000000000bbbbbbb001001000000000000000000000000000000000000000000000013bb0000000000000000000000000000000000000000000000000000000000000000bb3b3b3b00011010000000000000000000000000000000000000000000133b3b0000000000000000000000000000000000000000000000000000000000000000b3b33333110101010000000000000000000000000000000000000000000133bb0000000000000000000000000000000000000000000000000000000000000000bb33313110111001000000000000000000000000000000000000000000133b3b0000000000000000000000000000000000000000000000000000000000000000b3b31010010001100000000000000000000000000000000000000000000133bb0000000000000000000000000000000000000000000000000000000000000000bb31000000110101000000000000000000000000000000000000000000001b3b0000000000000000000000000000000000000000000000000000000000335000b3b31000101011010000000000000000000000000000000000000000000133bb0000000000000000000000000000000000000000000000000000000003555300bb31000001100011000000000000000000000000000000000000000000001b3b000000000000000000000000000000000000000000000000000000000bbbbbbb0010010000000000000000000000000000000000000000000000000000100100cccc0000000000000000000000000000000000000000000000000000bb3b3b3b01011000000000000000000000000000000000000000000000000000000110100c0c0000000000000000000000000000000000000000000000000000b3b33333101010110000000000000000000000000000000000000000000000001101010100000000000000000000000000000000000000000000000000000000bb333131100111010000000000000000000000000000000000000000000000001011100101000000000000000000000000000000000000000000000000000000b3b31010011000100000000000000000000000000000000000000000000000000100011000100000000000000000000000000000000000000000000000000000bb310000101011000000000000000000000000000000000000000000000000000011010100005000000000000000000000000000000000000000000000500000b3b31000101101010000000000000000000000000000000000000000000000001010110101005300000000000000000000000000000000000000000005500500bb31000011000110000000000000000000000000000000000000000000000000011000110000bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3b1000000000000001001000000000000000000000000000000000000000000001001000000b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bb331000000000000001101000000000000000000000000000000000000000000001101000003b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3bb3b10000000000001101010100000000000000000000000000000000000000001101010100003131133331311333313113333131133331311333313113333131bb331000000000001011100100000000000000000000000000000000000000001011100100001010031310100313101003131010031310100313101003131010b3b33100000000000100011000000000000000000000000000000000000000000100011000000000010100000101000001010000010100000101000001010000bb331000000000000011010100000000000000000000000000000000000000000011010100000000000000000000000000000000000000000000000000000000b3b33100000000001010110100000000000000000000000000000000000000001010110100000000000000000000000000000000000000000000000000000000bb31000000000000011000110000000000000000000000000000000000000000011000110000__gff__00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101010101010101000000010000000000010100000000000000000000001000000000000000000000000000000202010100000000000000000000000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000__map__71717171717171717171717171717171717100000000004949490000000000004b4b00004a494a4a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000737373737373737373737373737373737070707070707070704970707070704a4900000000004a4b4a49494949490000004a4a4a004a4949000000000000004a4a0000004a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007373737373737373737373737373737370707070707070707070707070707049000000000049494a494b4a00004a4949494a4b4a4a4a494a4a00000000004a4a4a0000004a4a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000737373737373737373737373737373737070707049707049494a70707070704a004a494b4b0000004949494949494b4a4a0000004b4b4a4a00490000004a4a4a000000004a4a4a00000000004949000000000000004a0000000000000000000000000000000000000000000000000000000000000000000000000000000000007373737373737373737373737373737370707070707049004a4949707070704a004a494b4b00004b000049494a49494949495149494a4a0000494949004a4a00000000004a4a4a4a4a00004949490000000000004a4a00007700000000000074770000000000000000005f0000000000000000000000000000000000000000007373737373737373737373737373737349707049497049494a004a7070704a494a000049494b0000514b004a50000000004a4a4a00004949495000494900005100000000004a4a4a4a494949004a000000004a4a4a000000747400000000777700815f00000000005f919100000000000000000000000000000000000000000073737373737373737373737373737373494970704970704a494a0070514a4a004a0000494949005051004a4a50004b0000005100000000000050000061000051000000000000004a4a494900004a0000004a4a4a0000000000747400007774779191915f5f5f815f91915f0000000000000000000000000000000000000000007373737373737373737373737373737370704a4b494a4a50494949605151004a0000000000494950514a4a00500000000000510000000000005000006100005100000000000000514b500000000000005000490000000000770074774b77770000008191915f5f81910000000000000000000000000000000000000000000000737373737373737373737373737373734a500000614a4a500049005051614a490000000000000050510000005000004b4b0051000000000000500000610000510000000000000051005000000000000050004900000000000000005700400000000000009181826f000000000000000000000000000000000000000000000000737373737373737373737373737373730060004b610000500051005061510000000000000000005000000000500000000000510000000000000000006100000000000000000000514b60000000000073500049004e4f0000000000574b400000000000005e5f6f6f0000000000000000000000000000000000000000000000007373737373737373737373737373737300604b00510000500051006051510000404040000000000000000000500000004b00000000000000000000000000000000000000000000610000000000000000500049005e5f0000000000574b400000000000005e825f6f000000000000000000000000000000000000000000000000737373737373737373737373737373730050000061000000005100505151000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f00000000005700400000000000005e00006f0000000000000000000000000000000000000000000000007373737373737373737373737373737300504b0051000000000000606100004040404000000073414545454545424040404040404040404040404c404040404040404c4c40404040454040404040404040404040407f40404040404040404040404c4c4c4c4c4c4040404040444444444444444c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c40404000600000000000737400000000510000000000000076414a000000000046000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007373737373737373737373737373737300760000000076414200760051517600000000007441497000000000004a575757575757575757575757575757575757575757575757575757575757575757575757575357575757575757575757575757575757575757575757575757575757575757575757575773737373737373737373737373737373737373737373737349454545454545535245454545454545454545454548704a00000000004a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000__sfx__01060000250512b051330513d05100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000