`,]']S}Wup8d%qy)6o;]AsVl3" wBppwIwIw""w"p Bpwwwwwww38w0Ѓ>"!w@"pwwDwD w wpw""pwww"pwBpw038ГI>I"ww!www www8ww wpw""pwwwww pwww038Й8>DM"wwww"ww@AA p"pw!"pwBpwpwwwwwww38w09w0D9D>" wBp8pw9pwww"p Bpwwwwwwwwwwwwwwwwwwww ww"ww"ww qww wwwwwwwwpww"ww"pw"pwwwwwwwwwwwwwwwwwwwwwwwwwwwww}wwwwwwwwwwpww wwpwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwzwwwwwwwwwwpww wwpwpwwwwwwwwwwwwwwwwwwwwwwwPwwUwwUwwPvwwPewwwwwwwwpwwUwweUpweUpwwwwwwwww O>N>O?O?O>N>O?O?O>N>O?O?O>N>O?O?wwpffgVevg\vg\vgVevpffwwww |gv|Ve|Ve|gvww UUP|\gv\gv\|\PUUff`UUV\eV|eV|eV\e`UUff`PA "! $! "B!pe$" B """ `"A !" "$"""B g"@""B !"""@`p"" "!@!" """ `"" " ""!"" `P!"""B! !"" P" !" ! "!" `$! "@B "!" `ffff`O!!!!%!!!!B11111C!!!!B155G%%%%%%%%%%F555511C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B111111C!!!!!!!!!!!!!!!!!!!!!B1111C!!!!!!!!!!!!!!!!!!!!!B111C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!%%%%!!B20CB1124G%%%%%%%F560C!!!!!!!!!!!!B11111111C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" !!!!!!!!!!!!!!!!!!!!!"01C!!!!!!!!!!!!!!!!!!!"01111C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!%%%%%F55602455G%%F56 !!!!!!!!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"0111C!!!!!!!!!!!!!!!!!"011111111C!!!!B111112) !!!!!!!!!B11111C!!!!!!!!!!!!!!!B1111C!!%%%%%F555555555C!!!!!B11111C!!!!!!!!!!%%%%F64556 !!!!!!!!!!!!"0111111C!!!!!!!!!!!!!!B1111111112 !!!!!B111111111112 !!!!"I01111111112011111C!!!!!!!!!" !!!%F5560C!!!!"0111C!!!!!!!%%F601111C!!!!!!!" !!!!B1111111111 !!!!!"011112(:0111111XXX")011116( !!!B20C!!!!!!!B2A@0XXX11112 !!!!"01111120XX2I0111201C!!!!!" !!!@011112( !!!!B2 !!!!@'0C!!B2PQA!!!!!!@7TUUUV XXXXX":0C!"05G%!!!!!!!!!!!!" !!!!!" !" "9$%%%!!!!!!!!!!"JA!!!@ !!!!!" !" "84G%%%%!!%!!!!!@YYYA!!!!!!!!" !!!%%%%%%%%%%& !!!!!!!!!!!!" !!!!!"XX$%!@ !" @$%%%%%%%%!!!!!!" !!!!!%%%%%%!!" !!!!!"$%%%%%& !!!!!!!!!!!!@XXXXXXXXXXXA!!!%%%%%%%%%%& !!!!!!!!!!!!" !!!!!"b XX"E%%!!!"0C&A!!!"45G%%%%%%%!!!!!" !!!!%%%%%%%%!"X!!!!!"$%%%%%& !!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%& !!!!!!!!!!!!@A!!!!!@ !!" XXXA!%%%%%%%%%!!!@ & !!!!@$%%%%%%!!!!!!@XXXA!!!%%%%%%%%%%XX!!!!!"4G%F556 !!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%DYYXXXXXXXXXXXXXA!!!!!!!!!!!!!!!!!!!!!!%!%%!!!!%!!!!!!!!!!!!" XX" !!" !!!!%%%%%%%%%%%!!!!!!@ DA!!!!!%%D$%%%%%%!!!!!!!!!!!!!!%%%%%%%%%%YX!!!!!"$%& !!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%!!!!!!!!!!!!!@XXA!!@XA!!@XXXXXA!!!%%%%%%%%%%%%%!!!!!!!!!!" %%%%!!!%%%%%%%&$%%%%%%!!!!!!!!!!!!!!%%%%%%%%%%YX!!!!!"$F6) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%!!!!!!!!!" !!!!!!!%%%%%%%&$%%%%%!!!!!!!!!!!!!!!!%%%%%%%%%Y1111112469 !!!!!!!!!!!!!!!B1111111C!!!!!!%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%%!!!!!!!!" !!!!!!!%%%%%%%& !%%!!!!!!!!!!!!!!!!!!!%%%%%%%%YI !!!!!!!!!!B1C!!"01111111555555555G%!!B1111C!!!!!!!!!!!!!!!!!!!!!!!F5555G%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%!!!!!!!!!" !!!!!!%%%%%%%%& !!!!!!!!!!!!!!!!!!!!!!%%%%%%%%Y((( !!!!!!!!!!" !!"01112 !!!!!!B1C!!!!!!!!!!!!!%&455G%%%%%%F551111111111111C!!!!!!!!!!!!B11555555555555G!!!!!B1112 !!!!!!%%%%%%%%& XA!!!!!!!!!!!!B111111C!!!!!%%%%%&HI !!!!!!!!!!"0112)0C!!!!!"011C!!!!!!!!B556$%%%%%F6 !!!!!!!!!!!B2$!!!!!" !!!!!%%%%%F555&01XXA!!!!!!!!!!!!!B2011XXXYY5556)01C!!!!!!B12801111120111C!!!!"45555560C!!!!!!!B11201C!!!" !!!!!%%F55670C!!!!!!!!!!!!!B2 !!!!B120C!!!"0C!!!!!B201112 !!!!!%F6 !!!!!!!!!!!!!"01XXX2 !!!!X01112 !!!!B"J !!!!!B6)A!!!!!!!!!!!!!"X!!!!XY%%%%%D0111112A!!!!!"9A!!!!!!!!!!!!!B2:X!!!!XY%%%%%%%%XX!!!!!!!" !!!!!!!@A!!!!!!"P1C!!!!!!!!!!!!!!!"X!!!!XY%%%%%%%%XA!!!!!!!"A!!!!!!!!"A!!!!!!!@0111C!!!!!!!!!!!"XXXA!@JXXXA!!!!XX%%%%%%%%@ !!!!!!!!@e:A!!!!!!!!!!@ !!!!!!!!!"0111C!!!!!!!"A!!!!!!!!!!!"aA!!!!!!@A!!!!!!!!!XX!%%%%%%!!@XXXA!!!!!!!!!!!@ XXX"A!!!!!!!!!!!!!" !!!!!!!!!@` 11C!B112X!!!!!!!!!!!!" !!!!!!!%%%DE%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!%%%%!!!!!!!!!!!!!!!!!!!!@ A!!!" XXXXXXXX" !!!!!!!!!!!!!!"eA!!!!!!!!!!!@012X!!!!!!!!!!!!" !!!!!!!!%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@" !!!!@" X" A!!!!!!!!@A!" !!!!!!!!!!!!!!@` !!!!!!!!!!!!!!!!!!!@:A!!!!!!!!!!!!" !!!!!!!!%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXXXA!!!!!@XA!@XA!!!!!!!!!!@A!!@XXXXXXX" XA!!!!!!!!!!!!!!!!@A!!!@A!!!!!!!!!!!!!!!!!!!!!!@A!!!!!!!!!!!!!!@XXXXXXA!!!!!!%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!!!!B1111XXX11C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B1111C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!!B1120120C!!B1111111111111C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B11C!!!!!!!!!!!"011C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B1111C!!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!B2) XX201XXX111C!!!!!!!!!!!!!!!!!!!!!!!!!!!B1111112 !!!!!!!!!!B201111C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B2 !!!!!!!!!!!!!!!!!!!!!!XX!!!!!!!"8012012011C!!!!!!!!!!!!!!!!!!!!!!!!"0111111111120111C!!!!!!!!!!!!!!!!!!!!!B1111120C!!!!!!B11C!!!!!!!!B112X!!!!!!B2H011C!!!!!!!!!!!!!!!!B1111201C!!!!!!!!!!!!!!!!!!B201111112 !!!!B111201C!!!B2(01C!!!!!!!!!!!!!!" !!!!!!!!!!!!!!!B112011112 !!!") !!!!!!!!!!!!!!"0C!!!!!!!!!!!!B12(0C!!"I01C!!!!!!!!!!!B2 !!!!!!!!!!!!"8 !!"`J !!!!!!!!BX12XXX0C!!!!!!!!!!B2H !!" !!!!!!!!" !!!@ !!!!!!!!B12X !!@XXXYYYYY0C!!!!!!!" !!@A!!!!!!" !!!!!!!!"X !!!!@JA!!@aA!!!!!!!!!!!" !!!!!%%%%%%%%%%%%%%%D011C!!B1"A!!!!!!!!!!!!!!!@ !!!!!!!B2jXA!!!!!@A!!!!!!!!!!!!%DE%%%!!!!!!!!!!!!" !!!!%%%%%%%%%%%%%%%%%Dj !B2 !!!!!!!!!!!!!!!!!!!!"gggg0C!!!!!!"SX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%!!!!!!!!!!!!" !!!!%%%%%%%%%%%%%%%%%%" !" %%%%%%%!!!!!!!!!!!!!" !!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%!!!!!!!!!!!" !!!!%%%%%%%%%%%%%%%%%!" !"E%%%%%%%%%!!!!!!!!!!!" !!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%!!!!!!!!B112 !!!%%%%%%%%%%%%%%%%!!!" !"$%%%%%%%%%%!!!!!!!!!!!@gggg !!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%!!!!!B1112h !!!!%%%%%%%%!!!!!!!!!!@"012$%%%%%%%%%%%!!!!!!!!!!!" !!!!!!@"0C!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%!!!!!B2 !!!!!!!!!!!!!!!!!!!!!!!":h$%%%%%%%%%%%%%!!!!!!!!!" !!!!!!!"S !!!!!!!!!!!!!!!!!!!!!!!!!!B15555G%%%F551111C"A!!!!!!!!!!!!!!!!!!!!!!!"$%%%%%%%%%%%%%!!!!!!!!!"gggg !!!!!!!"0C!!!!!!!!!!!!!!!!!!!!!!!B124555602 !!!!!!!!!!!!!!!!!!!!!!!!!!!@X"e$%%%%%%%%%%%%%!!!!!!!!!" !!!!!!!@"01C!!!!!!!!!!!!!!!!!B1112A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"ggggggS$%%%%%%%%%%%%%!!!!!!!!!" !!!!!!!!@X":0C!!!!!!!!!!!!B1112A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@" A!%%%%%%%%%%%%!!!!!!!!!"gggg !!!!!!!!!!"0111C!!!!!!!B2A!@ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@" !!!!%%%%%%%!!!!!!!!!!!!@ !!!!!!!!!!@"011111112A!!!!"A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" A!!!!%%%%%%%!!!!!!!!!!!!!" !!!!!!!!!!!@" !!!!!!!!@A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XX" A!!!!!!!%%%%!!!!!!!!!!!!!!" !!!!!!!!!!!!"gggg !!!!!!!!!!!@A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXX" XXXXXA!!!!!!!!!!!!!!!!!!!!!!!!!!"gggg !!!!!!!!!!!!"A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXX" XXXXXXA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"A!!!!!!!!!!!!@" XX"A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXXXXXA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" !!!!!!!!!!!!!!@XXXA!!"A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"gggg !!!!!!!!!!!!!!!!!!!!!@XXXA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B2gggg !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B2A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B11C!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!B2011C!!!!!!!!!!!!!!!!!!!!!!!B11C!!!!!!!B111111C!!!!!!!!!!!!!!!!!"gggg !!!!!!!!!B111XXXX11C!!!!!!!!!!!!!!!!!!!B201111C!!!!!!!B111111111120111XX112 !!!!!!!!!!!!!!!B12A!!!!!111120C!!!!!!B1111111111120C!!!!B12020C!!!!!!!!!B11112 !!!!!!0XXXX11201111201111111112A!!!!!!A!!!!!!!!A!!!!!!!!!! XX"kaA!!!!!!!!!!!!!XXXXA!!!!!!!!!!!!!!!!@A!!!!!!@ XX"JA!!!!!" !!!@A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXXA!!!!!!@XXXXA!!!!!@A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXXXXXX" XXXXXA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@XXXXXXXXXA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@@AEHMOOOOOOOOOOOOOOOOOOOOOOOs ) OOFFXGQGYGHHH$IcIISJJJEKKvKK{L/LLL LMWMMMNNO^' '  pw 0000444477;;;;>>>>????????????      &*,.//////////////////c23Dݵ544"̰@@.HCKGMJNOOOOOOOOOOOOOOOOOOOOOO`@ MNNNNN0NPNNNMLMMNMNNNNNNNNNNMLLK@H@DKHNKOOOOOOOOOOOOOOOOOOOOOOOs O,         a aaa a aaa a aaa a aaa a aaa a aaa a aaa a aaa a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a auPP     00````` @`aa a AaafFFf 0M - f000 $ơ$Ɓ$?""""333333333#""""""""""""""""""""""""""3333333333#"""""""""""""""""""""""""33333333333"""""""""""""""""""""""""33333333333#""""""""""""""""""""""""33333333333#""""""""""""""""""""""""333333333333""""""""""""""""""""""""CD3DCD3D3333""""""""""""""""""""""""DDDDDDDD4333""""""""""""""""""""""""""""""""""""43333#""""""""""""""""""""""""""""""""""433333#"""""""""""""""""""""""""""""""""D333333"""""""""""""""""""""""""""""""""D333333#""""""""""""""""""""""""""""""""4333333#""""""""""""""""""""""""""""""""44333333""""""""""""""""""""""""""""""""DDD33333"""""""""""""""""""""""""""""""" @DDD4333""""""""""""""""""""""""""""""""""""""2333333333333C4333333333333#"""""""""""""""""""""""""""23333333333333D43333333333333#""""""""""""""""""""""""""33333333333333DD33333333333333"""""""""""""""""""""""""233333333333333CD33333333333333#""""""""""""""""""""""""233333333333333C433333333333333#""""""""""""""""""""""""333333333333333D4433333333333333""""""""""""""""""""""""3333CD3DCD3D33DDDDD3CD3DCD3D3333""""""""""""""""""""""""3333DDDDDDDDDDD @DDDDDDDDDDD4333""""""""""""""""""""""23333C43333333"""""""""""""""""233333D43333333"""""""""""""""""333333DD3333333""""""""""""""""2333333CD3333333""""""""""""""""2333333C43333333""""""""""""""""3333333D44333333""""""""""""""""333333DD DDD3CD3D""""""""""""""""3333DDD@DDDDDDD""""""""""23333C """""""""233333D"""""""""333333D""""""""2333333C""""""""2333333C""""""""3333333D""""""""333333DD """"""""3333DDD """"" ADD D003(0II0II!"""" "  BWUe33333#""""""wW333333#"""""pV3333333"""""``3333333#""""Pf3333333#""""pP33333333""""`pCD3D3333""""P`DDDD4333""""D333""""""""""""e4333""""""""""""U4333""""""""""""pD333""""""""""""VD333""""""""""""`D333""""""""""""PD333""""""""""""`4333""""""""""""p43333#""""""""""""""""""""""p`433333#"""""""""""""""""""""`UD333333"""""""""""""""""""""eD333333#""""""""""""""""""""4333333#"""""""""""""""""""" g44333333""""""""""""""""""""pDDD33333""""""""""""""""""""P@DDD4333"""""""""""""""""""" D333""""""""""""""""""""""""""""4333""""""""""""""""""""""""""""4333""""""""""""""""""""""""""""D333""""""""""""""""""""""""""""D333""""""""""""""""""""""""""""D333""""""""""""""""""""""""""""D333""""""""""""""""""""""""""""4333""""""""""""""""""""""""""""333C433333333#""""""""""""""""""""""333D4333333333#"""""""""""""""""""""333DD3333333333"""""""""""""""""""""333CD3333333333#""""""""""""""""""""333C43333333333#""""""""""""""""""""333D 443333333333""""""""""""""""""""333DDDD3CD3D3333""""""""""""""""""""333D@DDDDDDD4333""""""""""""""""""""333CDDDDDDDD333""""""""""""""""""""333DCD34CCDD4333""""""""""""""""""""333D3333333D4333""""""""""""""""""""333C3333333DD333""""""""""""""""""""333C3333333CD333""""""""""""""""""""333D3333333CD333""""""""""""""""""""333D 3333333DD333""""""""""""""""""""333D3333333D4333""""""""""""""""""""3333DDDDDDDD""""""""3333DDDD333""""""""""""""""""""3333CD34CD34""""""""3333CCDD4333""""""""""""""""""""333333333333""""""""3333333D4333""""""""""""""""""""233333333333""""""""2333333DD333""""""""""""""""""""233333333333""""""""2333333CD333"""""""""""""""""""""33333333333"""""""""333333CD333"""""""""""""""""""""23333333333"""""""""233333DD333""""""""""""""""""""""2333333333""""""""""23333D4333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333CD333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333D4333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333D4333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333CD333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333CD333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333DD333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333DD333""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""333D4333""""""""""""""""""""D-- title: Celeste -- author: hayattgd -- desc: Maybe this was Clone of Celeste... so just enjoy! -- script: lua -- menu: RETURN DEBUG GODMODE --some words reference-- ----Vector2 = {x=x, y=y} --Ex: {x=0, y=23} ----(x)y = {x=y} --Ex:(a)number = {a=123} menuFunc = { function() player.Reset() end, function() world.Debug = not world.Debug trace("Debug mode:"..tostring(world.Debug)) end, function() world.GODMODE = not world.GODMODE trace("GODMODE mode:"..tostring(world.GODMODE)) end } world = { grav = 0.14, t = 0, Debug = false, GODMODE = false, stop = false, mus = 0, } scr = { f2f = { s = 0, c = 0, d = -1 }, FadeInOut = function() world.stop = true scr.f2f.s = world.t scr.f2f.d = 1 end, ShowStatus = function() rect(69.5,25,100,60,14) rect(72,28.5,94,54,0) spr(500,77,31.5,0) print(":"..player.totalsb,85,33,12) print("TIME:"..math.floor(time()*0.001/60)..":"..math.floor(time()*0.1)*0.01%60//1,77,41,12) end, Tick = function() scr.f2f.c = world.t if scr.f2f.d ~= -1 then if scr.f2f.d == 1 then if scr.f2f.c == scr.f2f.s + 22 then scr.f2f.d = -1 world.stop = false cls(13) elseif scr.f2f.c == scr.f2f.s + 20 then cls(14) elseif scr.f2f.c == scr.f2f.s + 18 then cls(15) elseif scr.f2f.c == scr.f2f.s + 8 then cls(0) elseif scr.f2f.c == scr.f2f.s + 6 then cls(15) elseif scr.f2f.c == scr.f2f.s + 4 then cls(14) elseif scr.f2f.c == scr.f2f.s + 2 then cls(13) end end end end } mapt = { x = 0, y = 0, spx = 0, --spawnpoint world x spy = 0, --and y spmx = 0, --and map x spmy = 0, --and y mus = { 0,0,1,0,0,0,0,0, --8 0,0,1,0,0,0,0,1, --16 0,0,0,1,1,0,0,0, --24 0,0,0,0,0,0,0,0, --32 0,0,0,0,0,0,1,0, --40 0,0,0,0,0,0,0,0, --48 }, GetMapId = function(x,y) return x % 8 + y * 8 + 1 end, GetPosId = function(x,y) return x % 29 + y * 29 + 1 end, ----Map Elements Dynamic = {}, ChangeMap = function(x,y) --Returns true if success world.stop = true mapt.x = x mapt.y = y mapt.InitMap() local mapmus = mapt.mus[mapt.GetMapId(x,y)] if world.mus ~= mapmus then world.mus = mapmus music() music(mapmus,0,0) end if not world.GODMODE then scr.FadeInOut() else world.stop = false end end, SetSpawnPoint = function() for x = 0, 29 do for y = 0, 16 do if mget(x + mapt.x * 30, y + mapt.y * 17) == 14 then mapt.spx = x * 8 - 4 mapt.spy = -y * 8 + 12 mapt.spmx = mapt.x mapt.spmy = mapt.y end end end end, SetupDynamicTile = function() mapt.Dynamic = { multiDash = {}, --Vector2 + (t)number(pos + interval) strawBerry = {}, --Vector2 + (e)bool(pos + exist) campFire = {}, --Vector2 breakPoint = {}, --Vector2 weakBlock = {}, --Key=posid Value=Vector2 + (t)number(pos + interval) } for x = 0, 29 do for y = 0, 16 do local tile = mget(x + mapt.x * 30, y + mapt.y * 17) if tile == 8 then table.insert(mapt.Dynamic.multiDash,{x=x,y=-y,t=0}) end if tile == 74 then table.insert(mapt.Dynamic.breakPoint,{x=x,y=-y}) end if tile == 58 then table.insert(mapt.Dynamic.strawBerry,{x=x,y=-y,e=true}) end if tile == 96 or tile == 97 or tile == 98 or tile == 99 then table.insert(mapt.Dynamic.campFire,{x=x,y=y}) end if tile == 90 then mset(x,y,103) end if tile == 103 then mapt.Dynamic.weakBlock[mapt.GetPosId(x,y)] = {x=x,y=y,t=0} end end end end, InitMap = function() mapt.SetSpawnPoint() mapt.SetupDynamicTile() end, --Map ProcessBehaviour ProcessBehaviour = function() local plrIsCollide = function(x,y) return math.abs(x*8+0.5 - player.x) < 5 and math.abs(y*8+0.5 - player.y+8) < 17 end for k,v in ipairs(mapt.Dynamic.multiDash) do --MultiDash if v.t == 0 then spr(496+(world.t/10%3//1),v.x*8,v.y*-8,0) if plrIsCollide(v.x,v.y) then if player.dashremain == 0 then circ(v.x*8,v.y*-8,0,0) player.dashremain = 1 v.t = 300 end end else v.t = v.t - 1 end end for k,v in ipairs(mapt.Dynamic.strawBerry) do --StrawBerry if v.e then spr(500+(world.t/10%8//1),v.x*8,v.y*-8,0) if plrIsCollide(v.x,v.y) then v.e = false player.totalsb = player.totalsb + 1 end end end for k,v in ipairs(mapt.Dynamic.campFire) do --CampFire local tile = mget(v.x+mapt.x*30,v.y+mapt.y*17) if tile ~= 99 then mset(v.x+mapt.x*30,v.y+mapt.y*17,96+(world.t/7%4)) else mset(v.x+mapt.x*30,v.y+mapt.y*17,96) end end for k,v in ipairs(mapt.Dynamic.breakPoint) do --BreakPoint if plrIsCollide(v.x,v.y) then scr.ShowStatus() end end for k,v in pairs(mapt.Dynamic.weakBlock) do --WeakBlock if v.x then if v.t == 0 then mset(v.x+mapt.x*30,v.y+mapt.y*17,103) elseif v.t == 1 then v.t = -300 elseif v.t > 1 then v.t = v.t - 1 elseif v.t < 0 then v.t = v.t + 1 mset(v.x+mapt.x*30,v.y+mapt.y*17,90) end end end end --map was 29*16... --so you can get --worlds first cell with --x*30 and y*17 } player = { x = 0, y = 0, vx = 0, vy = 0, totalsb = 0, speed = 0.4, dashspeed = 5, jumpPwr = 2.5, flipped = 0, dashremain = 1, onGround = false, onWall = false, animvar = { base = 256, step = 2, start = 0, max = 511, current = 1, playing = 0 }, hair = { start = 0, final = 0, color = 2, sprite = 288 }, Reset = function() mapt.ChangeMap(mapt.spmx, mapt.spmy) player.x = mapt.spx player.y = mapt.spy player.vx = 0 player.vy = 0 player.dashremain = 1 player.flipped = 0 end, ProcessBehaviour = function() --Usefull :O but when it broke just so very useless and uselesssy as trash like so very useless trash var bad local hitGround = ColTileAt(player.x + 8, player.y - 15 + player.vy) or ColTileAt(player.x + 4, player.y - 15 + player.vy) --Y local hitRoof = ColTileAt(player.x + 8, player.y - 1 + player.vy) or ColTileAt(player.x + 4, player.y - 1 + player.vy) --Y local hitRight = ColTileAt(player.x + 12 + player.vx, player.y - 10.75) or ColTileAt(player.x + 12 + player.vx, player.y - 3.25) local hitLeft = ColTileAt(player.x + 2 + player.vx, player.y - 10.75) or ColTileAt(player.x + 2 + player.vx, player.y - 3.25) player.onGround = hitGround --Anim var local DashResetted = false --Gravity / Physics thing if not (hitGround or world.GODMODE) then player.vy = player.vy - world.grav end local friction = 0.65 if hitGround then friction = 0.6 end player.vx = math.floor(player.vx * friction * 1000) * 0.001 --Standard Move if btn(3) then player.vx = player.vx + player.speed flipped = 0 end if btn(2) then player.vx = player.vx - player.speed flipped = 1 end if btnp(4) or btnp(0) then if (hitGround or hitLeft or hitRight) or world.GODMODE then player.vy = player.jumpPwr sfx(7) end end --Dash Move if (hitGround or world.GODMODE) and player.dashremain < 1 then player.dashremain = 1 DashResetted = true end if btnp(5) and player.dashremain > 0 then player.dashremain = player.dashremain - 1 if btn(2) then player.vx = player.vx + -player.dashspeed elseif btn(3) then player.vx = player.vx + player.dashspeed end local ydir = 0 if btn(1) then ydir = -player.dashspeed elseif btn(0) then ydir = player.dashspeed end player.vy = player.vy * 0.2 + ydir * 0.6 sfx(14) end --Apply Physics if (hitGround or hitRoof) and not world.GODMODE then if hitGround and player.vy < 0 then local GroundIs = function(id) return GetScrTile(player.x + 4, player.y - 15 + player.vy) == id or GetScrTile(player.x + 8, player.y - 15 + player.vy) == id end if GroundIs(101) then player.vy = 3.2 sfx(9) elseif GroundIs(103) then local pos = mapt.GetPosId(math.floor(player.x/8+1),math.floor(-player.y/8+2.4)) local block = mapt.Dynamic.weakBlock[pos] if block then if block.t == 0 then sfx(12) block.t = 16 end end player.vy = 0 else player.vy = 0 end end if hitRoof then local RoofIs = function(id) return GetScrTile(player.x + 4, player.y - 1 + player.vy) == id or GetScrTile(player.x + 8, player.y - 1 + player.vy) == id end if RoofIs(26) then player.y = player.y + 12 else player.vy = 0 end end end if (hitRight and player.vx > 0) or (hitLeft and player.vx < 0) then if not world.GODMODE then player.vx = 0 end end player.x = player.x + player.vx player.y = player.y + player.vy --Behaviour ----Damage if fget(GetScrTile(player.x + 7, player.y - 12),1) then if not world.GODMODE then player.Reset() end end ----Map Transition if player.y < -136 then --Down mapt.ChangeMap(mapt.x,mapt.y+1) player.y = 0 end if player.y > 0 then --Up mapt.ChangeMap(mapt.x,mapt.y-1) player.y = -135 end if player.x > 235 then --Right mapt.ChangeMap(mapt.x+1,mapt.y) player.x = 0 end if player.x < 0 then --Left mapt.ChangeMap(mapt.x-1,mapt.y) player.x = 235 end --Render if not world.stop then player.ForegroundRender(DashResetted) end end, ForegroundRender = function(DashResetted) local headx = 0 local heady = 0 local bodyId = 256 --hair if DashResetted then player.hair.sprite = 290 player.hair.color = 12 player.hair.start = time() player.hair.final = time() + 140 elseif player.dashremain == 0 then player.hair.sprite = 304 player.hair.color = 11 elseif player.hair.final < time() then player.hair.sprite = 288 player.hair.color = 2 end ----Animation thing if player.onGround then --Reset Anim (Idle?) if player.vx > -0.1 and 0.1 > player.vx then if player.vy > -0.1 and 0.1 > player.vy then heady = -1 player.animvar.playing = 0 player.animvar.base = 256 player.animvar.max = 1 player.animvar.step = 0 player.animvar.start = time() player.animvar.current = 1 end end --Running anim if player.vx < -0.8 or 0.8 < player.vx then player.animvar.base = 258 player.animvar.step = 2 player.animvar.max = 4 if player.animvar.playing ~= 1 then player.animvar.playing = 1 player.animvar.start = time() elseif time() > player.animvar.start + 60 then player.animvar.current = player.animvar.current + 1 player.animvar.start = time() end local limitedframe = player.animvar.current%player.animvar.max if limitedframe == 1 then headx = 1 heady = -1 elseif limitedframe == 2 then headx = 2 heady = -1 elseif limitedframe == 3 then headx = 2 elseif limitedframe == 4 then headx = 4 heady = 1 else headx = 1 end end else if player.vx < 1.2 then heady = -1 headx = 1 player.animvar.playing = 2 player.animvar.base = 266 player.animvar.max = 1 player.animvar.step = 0 player.animvar.start = time() player.animvar.current = 1 else headx = 1 player.animvar.playing = 3 player.animvar.base = 258 player.animvar.max = 1 player.animvar.step = 0 player.animvar.start = time() player.animvar.current = 1 end end --Apply animvar into bodyId local limitedframe = player.animvar.current%player.animvar.max bodyId = player.animvar.base+player.animvar.step*limitedframe ----Draw if flipped == 1 then headx = -headx end --hair for x = 6, 9 do for y = 2, 5 do line(player.x + x, -player.y + y, player.x - Clamp(player.vx * 5, -5, 5) + x, -player.y + Clamp(player.vy * 5, -8, 6) + y, player.hair.color) end end --body spr(bodyId, player.x, -player.y, 7, 1, flipped, 0, 2, 2) --head spr(player.hair.sprite, player.x + headx, -player.y + heady, 7, 1, flipped, 0, 2, 1) --circ(player.x + 7, -player.y + 8, 2, 12) --circle is for position debugging end, BackgroundRender = function() --Draw --Effects if player.dashremain == 0 then circ(player.x + 4 - player.vx * 10, -player.y + 8 + player.vy * 10, 15, 15) circ(player.x + 4 - player.vx * 10, -player.y + 8 + player.vy * 10, 10, 14) circ(player.x + 4 - player.vx * 10, -player.y + 8 + player.vy * 10, 5, 13) end end } function ColTileAt(x, y) return fget(GetScrTile(x,y),0) end function GetScrTile(x,y) return mget((x + mapt.x * 240) //8, (-y + mapt.y * 136) //8) end function Clamp(value, min, max) return math.min(math.max(value, min), max) end function BOOT() music(mus,0,0) player.Reset() end function TIC() if not world.stop then cls(0) end if not world.stop then player.BackgroundRender() map(mapt.x * 30,mapt.y * 17,30,17,0,0,0) player.ProcessBehaviour() mapt.ProcessBehaviour() end scr.Tick() world.t = world.t + 1 end function OVR() --Debug if world.Debug then print("DEBUGMODE",0,0,4,false,1,true) print("plr:"..player.x..", "..player.y,0,6,12,false,1,true) print("scr:"..scr.f2f.d,0,12,12,false,1,true) print("world:"..tostring(world.stop),0,18,12,false,1,true) print("map:"..tostring(mapt.GetMapId(mapt.x,mapt.y)),0,24,12,false,1,true) end end function MENU(i) menuFunc[i+1]() end