pico-8 cartridge // http://www.pico-8.com version 34 __lua__ -- compatible with Pico8 v0.2.0 -- requires bit-manipulation operators -- 16 linear repeatable colors local white= 9 -- this is the index of the brightest color (array starts at 0!) local palette= { [0]= 0, 130, 2, 136, 8,14, 9, 15,135, 7, 6,12,13, 1,129,0 } -- speed of color cycling (bigger values = slower) local colorcyclespeed= 1.0 / 2.0 -- displacement up/down local interference_bounce= 0 -- this table contains a precalulcated bitmap with concentric circles -- only contains the upper half of the bitmap (lower half is mirrored) local interference_map = {} -- count frames for timing local framecounter= 0 local cycle= 0 -- color cycling -- precalc map -- upscale 2x2 from 128x128 tileset -- store 8 sequential pixels in a 16.16 value of a lua table local function calc_table() -- linear interpolate 1d vertically between pixel (x,y) and (x,y+1) local function interpy(x,y) local p1= sget( x, y&127 ) local p2= sget( x, (y+1)&127 ) return p1+(p2-p1)*(y&0x0.f) end local table= {} -- calculate bitmap (256 rows) for y=0,255 do -- calculate one row of the bitmap local line = {} local v0= interpy(x,y/2) for x=0,32 do local p0= 0 for j=0,3 do local v1= interpy(x*4+j, y/2) local p= (v0+v1)>>1 -- we store 8 pixels (4bit each) in one 32 bit integer: p0= (p0>>>4) | ((p&-1)<<12) p0= (p0>>>4) | ((v1&-1)<<12) v0= v1 end -- resulting integer p0 contains last pixel in the top (integer) bits -- and the first pixel is in the low (fractional) bits line[x]= p0 end table[y]= line -- put the new line into the bitmap end return table end local function interference_init() cls() interference_map= calc_table() end local function interference_update(frame) cycle= flr(frame*colorcyclespeed) local flash= 10 - (frame/2 % 32) if (flash < 0) flash= 0 local bounce= 16 - flr(frame/3 % 32) if (bounce < 0) bounce= 0 interference_bounce= flr(cos(frame/10.0) * bounce * 0.5) -- interference_bounce= 0 -- update palette -- we have two linear gradients meeting in the middle at white -- for the flash we move the colors "away from the middle", this way everything becomes brighter for i=0,15 do local color if (iwhite) color= white else color= flr(i-flash) if (color=128*6) framecounter=0 interference_update(framecounter) end -- make sure x is inside min..max local function clamp(x, min, max) if (xmax) then x= max end return x end -- draw effect local function interference_draw(time) -- position of the first bitmap (0..128, 0..128) local x1= 64 + flr( cos(time/150) * 63 + 0.5 ) local y1= 64 - flr( sin(time/210) * 63 + 0.5 ) -- position of the second bitmap (0..128, 0..128) local x2= 64 + flr( cos(time/120) * 63 + 0.5 ) local y2= 64 - flr( sin(time/180) * 63 + 0.5 ) if (y1<0) y1=0 if (y2<0) y2=0 if (y1>127) y1=127 if (y2>127) y2=127 -- make sure coordinates are always in a safe range (never get to end of bitmap) x1= clamp(x1, 0, 128) x2= clamp(x2, 0, 128) -- each value in the bitmap contains 8 pixels -- one step in x skips 8 pixels -- pixels in between are accessed by bit shifting local shift1= (x1 & 7)<<2 local shift2= (x2 & 7)<<2 x1= (x1>>3&-1) + 1 x2= (x2>>3&-1) + 1 -- due to color cycling black is not at index 0 but at "cycle" cls(cycle) -- cls(0) local d1,d2= 0x0000.0000, 0x0202.0202 for y=10,127-10 do -- flip dither matrix every row (0101 -> 1010) d1,d2= d2,d1 -- pointer to start of scanline in video memory -- local addr= 0x6000 + 64*y -- + sin(framecounter/32)*10 local addr= 0x6000 + 64 * (y+interference_bounce) -- clamp(y + abs(sin(y/132)/10),0,127) local row1= interference_map[y+y1] -- current row of bitmap1 local row2= interference_map[y+y2] -- current row of bitmap2 (we use only one) local a1,a2= row1[x1-1],row2[x2-1] for x=0,15 do local b1,b2= row1[x+x1],row2[x+x2] -- simulate pixel-precise "scrolling" by shifting in steps of 4 bits -- a,b are 16 input pixels -> fetch 8 pixels according to shift factors local t1= (a1 >>> shift1) | (b1 << (32-shift1)) local t2= (a2 >>> shift2) | (b2 << (32-shift2)) -- add odd/even pixels separately so they don't overflow into the next pixel -- overflows don't have to be handled because we have a repeatable color cycle (...,13,14,15->0,1,2,3,...) local add1= ( (t1 & 0x0f0f.0f0f) +(t2 & 0x0f0f.0f0f) +d1 ) >> 1 local add2= ( (t1>>>4 & 0x0f0f.0f0f) +(t2>>>4 & 0x0f0f.0f0f) +d2 ) >> 1 poke4( addr+(x<<2), (add1 & 0x0f0f.0f0f) | (add2<<4 & 0xf0f0.f0f0) ) -- 4 bytes (8 pixels) forward -- "next" dword becomes "previous" dword a1,a2= b1,b2 end end end function _draw() interference_draw(framecounter) if (btn(4)) then color((3+cycle)&15) -- compensate palette cycling print("cpu: "..stat(1)) -- show palette for i=0,15 do color(i) rectfill(i*8,125,i*8+8,128) end end end __gfx__ 00247adeeec97420001358aceeeedb975321000012345789abccddeeeeeeeeeeeeeeeeeeeeddccba987543210000123579bdeeeeca85310002479ceeeda74200 0248adeedb96310002479bdeeedb9753200000134578abcddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddcba8754310000023579bdeeedb97420001369bdeeda8420 248bdeedb8531001258aceeedca85320000123578abcdeeeeeeeedddcccbbbbbbbbbbcccdddeeeeeeeedcba87532100002358acdeeeca8521001358bdeedb842 48bdeedb8520001368bdeeedb86421000124579bcdeeeeeeddccbaa999888888888889999aabccddeeeeeedcb97542100012468bdeeedb8631000258bdeedb84 7adeedb8520001469cdeedca7531000124689bceeeeeedcbba9887766655555555555666677899abbcdeeeeeecb9864210001357acdeedc9641000258bdeeda7 adeedb852000247aceeedb964200002468abdeeeeedcba987765554433332222222233334455667899abcdeeeeedba864200002469bdeeeca742000258bdeeda deedb852000257adeeeca853100013579bdeeeedcba987655433222211111111111111122222344567789abcdeeeedb975310001358aceeeda752000258bdeed eedb852000258bdeeec974200012479bdeeeedcb98765443221111000000000000000000011112223455688abcdeeeedb974210002479ceeedb852000258bdee edb852000258bdeedb96310001368aceeeedca9865433211100000000000000000000000000000111223456789bcdeeeeca86310001369bdeedb852000258bde eb852000258bdeedb85310002479cdeeedca98654321110000000000000000000000000000000000001122345789bcdeeedc97420001358bdeedb852000258be c952000258bdeedb8520001358bdeeedcb98654311000000000000001111111111111111000000000000011234568abceeeedb8531000258bdeedb852000259c 963000258bdeeda7420001469bdeeedb986542210000000000111111222222222222222121111000000000011234578abdeeedb9641000247adeedb852000369 73100258bdeeda742000247aceeedca865432100000000011222223333434444444433333322211100000000011234679acdeeeca742000247adeedb85200137 4100147bdeeda741000258adeeedb976432100000001112223344445555555666655545444333322111000000001123568abdeeeda852000147adeedb7410014 200147adeeda741000258bdeeeca865321100000011122334455556666767777777766666655443322211100000001234579bceeedb852000147adeeda741002 00136adeedb741001358bdeedca86431000000011223344565667788888989999998888777766554443322110000001123578acdeedb853100147bdeeda63100 00269ceedb842001369bdeedb975321000000112234455667878889999aaaaaaaaaaa999999877666554332111000000123468abdeedb963100248bdeec96200 0258ceeeb852000369ceeedb96532100000112233555778899a9aabbbbbcbccccccbbbbbaaa99888766554332110000001124579bdeeec963000258beeec8520 148bdeec952000259ceeedb864310000001223445668889aaabbcccccdddcdddddddcdccccbbbaa98876664433211000000124579bdeeec952000259ceedb841 37adeec963000258beeeca86431000001122345667899aabccccdddddddeeeeeeeeeeddddddcccbaaa987765443221000000123579bdeeeb852000369ceeda73 59ceeda73100258bdeeca8642100000122345677899abbbcddddeeeeeeeeeeeeeeeeeeeeeeddddcccbaa98776554321100000123579bdeedb85200137adeec95 8beedb84100148bdeeda854210000012334567889aabcdddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddccbaa8876544321100000113569bdeedb84100148bdeeb8 adeec95200147adeedb86421000011234566789abbccddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeedddcbbaa987654322110000123579bdeeda74100259ceeda ceeda6300036adeedb8642100001123456789abcccddeeeeeeeeeeeddddddddccdddddddeeeeeeeeeeeddccbaa98755422110000123579bdeeda6300036adeec eedb74100259ceedb9642100001133466899abccddeeeeeeeeedddddccbbbbbbbbbbcbcccdddeeeeeeeedddcbaa88765432110000123579cdeec95200147bdee eec85200148beeec964210000122455789abbcddeeeeeeeedddcbbbaaaa999888899a9aaabcccddeeeeeeedddcba9876543211000011357aceeeb84100258cee eda6300137bdeeca75310000122456789abccdeeeeeeeeddcbbaa9887776766666667788899abccddeeeeeeeddcbaa876543211000012468aceedb7310036ade eb84100269deeda85310000112456789abccdeeeeeeeddcbaa987765554444333334445566789aabcddeeeeeeddcbaa876543210000012468bdeed96200148be d95200148ceedb86320000113456789abcddeeeeeeddcba988755433322121111111223334556789abcddeeeeeeddbb9986543211000013569bdeec84100259d b7310037adeec96421000012356789abcddeeeeeedcba9876543321110000000000000111223446789abcddeeeeedccaa97654321000012358aceeda7300137b 95200259ceeda7531000012345789accddeeeeedcbba8764432110000000000000000000000122445689acddeeeeeddbba97653211000012468bdeec95200259 7300147beedb8631000012346789abcdeeeeeedcba9765332100000000111111111111100000011234578abcdeeeeedccba97654221000013479ceeeb7410037 5200269deec9642000012345689abcdeeeeeddcb98654321000000112333444554444332110000001245679bbdeeeeeddcb98764321000002358aceed9620025 300148beedb853100001235689abcddeeeedcbb9865321000001134556778888888776654331000001124678abddeeeedcba98664321000012469bdeeb841003 20026adeec964210001234679abcddeeeeddca9764310000012355789aabcbcccccbbaa987543210000123568acceeeeedcba9865431100001357aceeda62002 10148beeda853100012245689bccdeeeeddba87642100001245689abcddeeeeeeeeeeddcba9864321000113468abcdeeeedcba9764321000012468bdeeb84101 00259deec964200001235679abcdeeeedcca875421000123579abcdeeeeeeeeeeeeeeeeeedcba87531100013468abceeeeddcb9875422100001357aceed95200 0037beeda85210001234678abcdeeeeedba87532100013468abdeeeeedddccbbbbbccdeeeeeedba8642100012468abddeeeddba9765321100012368bdeeb7300 0159ceec964200001245789bcdeeeeedcb9753100001357abceeeedcba998777677889abcdeeeecba753100012468acdeeeedcba876432100001357aceec9510 037beedb85310001234678accdeeeedcb9764200002468acdeeedba876543322222335678abdeeedca863100012479acdeeeedcb9865421000012469bdeeb730 148ceec964200001235689bcdeeeeedb9864210012469bdeeedb976422100000000001234579bceeedb964200013579bcdeeeecca875432100001358adeec841 25adeeb85310000235679abcdeeeedba864210002479bdeedca753100000011111100000013579cdeedc964200013579bdeeeedcb9865321000012469ceeda52 37beeda74200001245689acdeeeedcb965310012479cdeedb853100001234556655433200001358adeedb96420002468acdeeedcba975432100002368bdeeb73 48ceec96310001134589abcdeeeedba75310001469ceeeca742000124679aabbbbaa986431000247aceedc96310002478bddeeedcb986542100001357aceec84 5adeeb85310001235789bcdeeeedca86420001369bdeec96310013579bcdeeeeeeeedcba8531001369ceedb8521001358acdeeedcb9875431000012469ceeda5 7beeda7421000124578abddeeeedb97531001358bdeec963100247acdeeeeddddddeeeeeca852100269ceedb8520001468bceeeedcb976432100012358bdeeb7 8ceec96410000234689abdeeeedca8632000247bdeec963101369cdeedcba9888889bcdeeeca73100259ceeda741001257acdeeeddba86543100001358adeec8 9deeb8531000123568abcdeeeddb9743100136aceeda6310137adeedb97543222233568aceedb8410036aceec9630001468bceeeedca876432100012479ceed9 adedb7521000124679acdeeeedca8642000258ceedb7310147beedb863100000000001358adeec9510036adeeb842001257acdeeedcb986432100002469bdeda beeda7420000234589acdeeeedba853100147adeec8410137beeda631000123333221000259ceec8410148beed9631001479bdeeedcb986542100001358bdeeb ceec9631000123567abcdeeeedb9742000259beeda520037beec95200135789aa99764200147beec8410259deeb852001368aceeeedba87632100001357adeec ceec85310001245689bcdeeedca853100136adeeb730026aeec84101369bddeeeeedca7410037beeb730037bded9620002579cdeeedca97543110001247aceec deeb8521000124578acddeeedba753100158beed9510149ded9410158cdeeddccddeeeca630037ceea510149ceeb741001479bdeeedcb985431100002469ceed deda7521000124578acdeeeedb9742000259ceeb730037ceda51026adeeca8766679bdeeb730038ded830037beec952001368bceeedcba86432100001369bded eeda7420000234689bcdeeeedb864100147adeda61015adeb62016beec963211011358beec83015adeb62015adeda63100258aceeeedba87542100001358bdee eed96420000135689bcdeeedda853100158beec840027ced83015aeeb73100011100026adec72027ced830038ceeb841002479cdeeedca87542100001358bdee eec96310001235689bcdeeedca753100259ceeb720049deb61038deb7200246777531015adea50049eea51026beec952001469bdeeedca87542100001357adee eec96310001235689bddeeedca75200036adeda62016bed93016cec720148bddddca62015bed82027cec72015aded962001369bdeeedcb98542100001357acee eec8531000124578abddeeedba75200137aded951027cec71039de93015adeeddeeec72017ceb5005bed930049deda63001369bdeeedca97643110001247acee eeb8531000123569acdeeeedb964100137beed940039deb5005bec6104aeec9778adec7103aed72039eea40038cedb73001258adeeeecb98552100001247acee eeb8521000124578abceeeedb974200148ceec83004aeea4017dea3028dea5211148deb4017de93028deb51027ceeb74101358bdeeedcb976432100012479cee eeb8521000124579acdeeeedb964100148beec73015aed93028dd8204bec510110039ed7105ceb4017ceb61027beeb74100258aceeeecb986432100012469cee eeb8521000124679acdeeeedb863100148ceeb72015bed82039ed7106de9203775106ce9204beb5016cec72026beec84100247aceeeecb986432100012469cee eeb8521000124679acdeeeecb863100158ceeb72016bed8203aec6117dd7117dda304bea303aec5006cec72026beec84100247acdeeecb986532100012469cee eeb8521000124679acdeeeecb863100158ceeb62016bed8203aec6017dd7117dea304bea303aec5006cec72016beec84100247acdeeecb986532100012469cee eeb8521000124679acdeeeedb863100148ceeb72015bed82039ed6117de8105aa7205cea304bec5006cec72026beec84100247acdeeecb986532100012469cee eeb8521000124579acdeeeedb963100148ceeb72015aed83029ed7105cea401332027de8105beb4016cec61026beeb84100258aceeeecb986432100012469cee eeb8521000124578abdeeeedb964100147beec83004aee93027de93039ed83000026bec6016dea3027deb51027ceeb73101358bdeeedcb976432100012479cee eeb8531000123568abceeeedca74200147beec830039deb5016ceb5016ced964457bed93029ed82039dea41038ceeb73101369bdeeedca97542100001247acee eec96310001234689bddeeedb974200136aded951038cec6104aed82027ceecbbcdeda4005bec6104aed930049deda62001368bdeeedcb97542100001357acee eec96310001235689bcdeeedca85310136adeea62026bed83027ceb61037bdeeeeec941039de93016cec72015aded952001479cdeeedca87542100001357acee eec96320001134679bcdeeedca853100259ceeb73004aeea5004aeea5101479aaa8630038cec61039deb61026beec95200247acdeeedca97432100001358adee eed96420001134679acdeeeeca863100148beec840038cec82016beda510012333100038ced83016bed940037ceeb84100247acdeedcb986532100001358bdee eeda7421000134679acdeeeedb964200137adeda51015aeea51037cedb7310000001259ded940049deb720159deda63101358aceeedcb986532100012468bdee deda7521000123579abddeeedc9752000359ceeb730038ced940038ceeca754334569beed941027ced940026beec952001369bdeeedcb976431000012469bded deeb85210001235689bcdeeedca853100148beed951015adec730037bdeedcbaabbdeeec841026beeb620149deeb841001479cdeeedca975321000012469ceed ceec96310001234679bcdeeeecb964100036adeeb730027beeb7300258bdeeeeeeeedc9630026adec830026bdeda63000258bceeeecba87432100001357aceec ceec96420000134578abddeeedca742100248beec9520138ceeb731002579bbcccba86310026aded9410159ceeb841001469bdeeedcb986432100002358adeec beeda7421000123568abcdeeedca864100137aceec8410149ceec8520002345555432100147bded9520038beed963001247acdeeedca976421100002468bdeeb adedb85210001234689acdeeeedb9742000258bdeda7300158ceeda7420000000000001369ceed9520036adeeb742001368adeeeddba875431000012469beeda 9deeb96310000124678acddeeedca8531001369ceeda6200148beedc9753211000123469bdeec95200259ceec9630002479cdeeedcb986432100001257aceed9 8ceec97420000124568abcdeeeedb9642100147adeec96200147adeeecb9876666679acdeedb84100259ceeda741001368acdeeedca876432100011358adeec8 7beeda75210001235679acdeeeedca8541001258bdeec953001358bdeeeedccccccddeeedb963100259ceedb8520012479cdeeedcb9865331000012469bdeeb7 5adeeb85310000134568abcdeeeedb97521001369cdeec9631001368acdeeeeeeeeeedcb9742000359ceedb9531002369acdeeedba9865321000013579ceeda5 48ceec964210001235679abddeeedca86421001369bdeeca63200023579abbcccccba976420001369ceeeb9631001357abdeeedcba875331100011358adeec84 37beeda85210001234678abcdeeeedca76310001469cdeeda853100012345677776543210001258aceedb96310012479bdeeeedba9764321000012469bdeeb73 25adeeb963100001234678acddeeeddb975310002469bdeedb9743100000112222111000012469bdeedb96310002468bcdeeedcba975431100001357aceeda52 148ceeca74210001134578abcdeeeedcb864310002468bdeeedb975321000000000000123579bceeedb96310002467acdeeeddca9764321000012368bdeec841 037beedb863100001234679abddeeeedba864210002358aceeedcba8654322221222345689bddeeeca853100013579bdeeeedcba8653311000012579ceeeb730 0159ceec974210001134568aacddeeeedba8642100012579bdeeeedcba987766666789abcdeeeedb975310001357abcdeeeddba9764321000012458adeec9510 0037beedb853100001235579abcdeeeeedca86421000124689bdeeeeeddccbbbbbbccddeeeeddb97642100023579bdeeeeddba98654220000013479bdeeb7300 00259deec9642100001244688abcdeeeedcba864310000134689bcdeeeeeeeeeeeeeeeeeedcba86431000124579bcdeeeedcb98654311000012458aceed95200 10148beedb8531000011335789abddeeeeecba8753200000235679abcddeeeeeeeeeeddcba986432000012467abcdeeeedcba87553210000013579bdeeb84101 20026adeeca742100001234578aabcdeeeedcba9754210000122456899abbbccccbbba9986543100001234679bddeeeedcba87653211000012368adeeda62002 300148beedb8632100001235678abcddeeeeedca97643110000012345667778888877655432100000123578abceeeeedcba986543210000113579cdeeb841003 5200269deeca75310000112456789abcdeeeeedcb987542110000011223344444443322211000011234679bcddeeeeddca976543210000012468bdeed9620025 7300147beeeb96421000012245678abcddeeeeedcba88654211000000000111111111000000011234679abcdeeeeedccb987543210000012357aceeeb7410037 95200259ceeda85321000012345689abccdeeeeeddcba87654321100000000000000000001112446789abddeeeeedcba9876432110000113579bdeec95200259 b7310037adeeca75310000112345679aabcddeeeeeddcba8776533221111100000011112233456789accdeeeeeddcba9876432110000013468bdeeda7300137b d95200148ceedb9742100001123456799abcddeeeeeddccba98776544332322222233344456789aaccddeeeeeddcba9776432110000012458aceeec84100259d eb84100269deedb8642100001123456789abcddeeeeeeedccba998876665554444556677789abbcdddeeeeedddbba88654321100000123579bdeed96200148be eda6300137bdeeca85421000001234567899bbcdeeeeeeeeddccbba9999888777788989aaabccddeeeeeeeddcba987654321100000123579bdeedb7310036ade eec85200148beeeca75321000001233566899abccddeeeeeeeeddcccbbbabaaaaaabbbccccddeeeeeeeeddccba987654321100000123468aceeeb84100258cee eedb74100259ceedb975311000001224466789abcccdeeeeeeeeeeeddddddccccccddddddeeeeeeeeeddcbbaa986554321100000113468aceeec95200147bdee ceeda6300036adeedb9753210000111234567789abbccddeeeeeeeeeeeeeeeeddeeeeeeeeeeeeeedddcbbaa9876553321100000113468acdeeda6300036adeec adeec95200147adeedb97532100000122344567889abbcddddeeeeeeeeeeeeeeeeeeeeeeeeeeedddccbaa99766543221000000113468abdeeda74100259ceeda 8beedb84100148bdeedb9653210000011233456678999bbcccddddeeeeeeeeeeeeeeeeeeddddcccbba99877654432110000001234689bdeedb84100148bdeeb8 59ceeda73100258bdeedb9753110000001122345567889aabbbcccdddddedeeeeeedddddccccbbaa988876543321110000001234689bdeedb85200137adeec95 37adeec963000258beeedb9753210000001122344556778899aabbbcccccccccccccccccbbbaa9988766544332210000000123468abdeeeb852000369ceeda73 148bdeec952000259ceeedb975421100000011223345566788899aaaababbbbbbbbbabaa99998876665433321100000001123568abdeeec952000259ceedb841 0258ceeeb852000369ceeedb9764321000000111223444566677888889999999999999898877766544333211100000001134578acdeeec963000258beeec8520 00269ceedb842001369bdeedca8653210000000011223344456556777878788888877777666544443222111000000011234579acdeedb963100248bdeec96200 00136adeedb741001358bdeedca86533210000000011123334344455556566666666555455433323211110000000011235689bceeedb853100147bdeeda63100 200147adeeda741000258bdeeecb98643211000000000112222333444445444555444443333222111100000000011234578abdeeedb852000147adeeda741002 4100147bdeeda741000258adeeedba87543210000000000111111222223233333333222222111110000000000112335679bcdeeeda852000147adeedb7410014 73100258bdeeda742000247aceeedcb98654321000000000000111111111222222221111110000000000000112345678abdeeeeca742000247adeedb85200137 963000258bdeeda7420001469bdeeedca97653321100000000000000001011111111000000000000000011122445789bcdeeedb9641000247adeedb852000369 c952000258bdeedb8520001358bdeeeecba8765432211100000000000000000000000000000000000111123345789acdeeeedb8531000258bdeedb852000259c eb852000258bdeedb85310002479cdeeedcba876543322110000000000000000000000000000000111233456789abddeeedc97420001358bdeedb852000258be edb852000258bdeedb96310001368aceeeedcba98765433221110000000000000000000001111222234556789abcdeeeeca86310001369bdeedb852000258bde eedb852000258bdeeec974200012479bdeeeedcba987655443322111111111111111111112223344556789abcddeeeedb974210002479ceeedb852000258bdee deedb852000257adeeeca853100013579bdeeeeddcba9887655443333322222222222333344455667899abcdeeeeedb975310001358aceeeda752000258bdeed adeedb852000247aceeedb964200002468abdeeeeedccba998776655554444444444455556667889aabcddeeeeedba864200002469bdeeeca742000258bdeeda 7adeedb8520001469cdeedca7531000124689bceeeeeeddcbbaa998877777666666777788899aabbcddeeeeeecb9864210001357acdeedc9641000258bdeeda7 48bdeedb8520001368bdeeedb86421000124579bcdeeeeeedddccbbbaaaa99999999aaaaabbccddeeeeeeedcb97542100012468bdeeedb8631000258bdeedb84 248bdeedb8531001258aceeedca85320000123578abcdeeeeeeeeddddccccccccccccccddddeeeeeeeedcba87532100002358acdeeeca8521001358bdeedb842 0248adeedb96310002479bdeeedb9753200000134578abcddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddcba8754310000023579bdeeedb97420001369bdeeda8420 00247adeeec97420001358aceeeedb975321000012345789abccddeeeeeeeeeeeeeeeeeeeeddccba987543210000123579bdeeeeca85310002479ceeeda74200