pal_from_spr/pal_from_spr.p8

445 lines
29 KiB
Plaintext
Raw Permalink Normal View History

2023-10-01 17:55:51 +00:00
pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
-- sprite-sampled palette
-- kistaro@gmail.com
function _init()
-- lock top 16 rows to default palette
pal({[0]=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, 2)
poke(0x5f5f, 0x10)
poke2(0x5f70, 0xffff)
2023-10-01 19:00:14 +00:00
mode = "boxes"
active = "draw"
2023-10-01 19:00:14 +00:00
scx = 0
scy = 0
dcx = 0
dcy = 0
init_box_pals()
2023-10-01 20:15:40 +00:00
init_rows_pals()
end
function boxspr(x, y)
return 1+x+16*(y\2)+(y%2*0.5)
end
function init_box_pals()
box_pals = {}
2023-10-01 20:15:40 +00:00
for x=0,box_cols-1 do
local pal_col = {}
2023-10-01 20:15:40 +00:00
for y=0,box_rows-1 do
pal_col[y] = load_box_palette(boxspr(x,y))
end
box_pals[x] = pal_col
end
end
2023-10-01 20:15:40 +00:00
function init_rows_pals()
rows_pals = {}
for x=0,rows_cols-1 do
local pal_col = {}
2023-10-01 20:15:40 +00:00
for y=0,rows_rows-1 do
pal_col[y] = load_row_palette(
8+16*x,
16+2*y
)
end
2023-10-01 20:15:40 +00:00
rows_pals[x] = pal_col
end
2023-10-01 17:55:51 +00:00
end
function _update()
2023-10-01 19:00:14 +00:00
if (btnp(🅾️)) mode = (mode == "boxes") and "rows" or "boxes"
if (btnp(❎)) active = (active == "draw") and "screen" or "draw"
if active == "draw" then
2023-10-01 19:00:14 +00:00
if (btnp(⬆️)) dcy -= 1
if (btnp(⬇️)) dcy += 1
if (btnp(⬅️)) dcx -= 1
if (btnp(➡️)) dcx += 1
else
if (btnp(⬆️)) scy -= 1
if (btnp(⬇️)) scy += 1
if (btnp(⬅️)) scx -= 1
if (btnp(➡️)) scx += 1
2023-10-01 19:00:14 +00:00
end
dcx %= (mode == "boxes") and box_cols or rows_cols
scx %= (mode == "boxes") and box_cols or rows_cols
2023-10-01 19:00:14 +00:00
dcy %= (mode == "boxes") and box_rows or rows_rows
scy %= (mode == "boxes") and box_rows or rows_rows
2023-10-01 17:55:51 +00:00
end
function _draw()
cls()
draw_hud()
2023-10-01 20:15:40 +00:00
local pals = (mode == "boxes") and box_pals or rows_pals
pals[dcx][dcy]:do_both(0)
pals[scx][scy]:do_both(1)
2023-10-01 17:55:51 +00:00
draw_bars()
end
function draw_hud()
2023-10-01 20:15:40 +00:00
pal(0)
pal(1)
2023-10-01 19:00:14 +00:00
if (mode == "boxes") return draw_box_hud()
draw_rows_hud()
end
function print_shadow(s,x,y,c)
print(s,x+1,y+1,1)
print(s,x,y,c or 7)
end
2023-10-01 20:15:40 +00:00
function lpad(str,w)
str=tostr(str)
while (#str < w) str = " "..str
return str
end
2023-10-01 19:00:14 +00:00
box_rows = 4
box_cols = 4
function draw_box_hud()
2023-10-01 19:22:52 +00:00
spr(1,3,0,4,2)
2023-10-01 19:00:14 +00:00
local toff = time() * 4 \ 1 % 2
spr(107 + (active == "draw" and toff or 0),
2023-10-01 19:22:52 +00:00
3+8*dcx,4*dcy,1,0.5)
spr(109 + (active == "screen" and toff or 0),
3+8*scx,4*scy,1,0.5)
2023-10-01 19:00:14 +00:00
2023-10-07 19:59:12 +00:00
print_shadow("draw",42,1,(active == "draw" and toff ~= 0) and 7 or 12)
print_shadow(lpad(boxspr(scx,scy),3),46,9,6)
sspr(8+8*dcx,4*dcy,8,4,59,4,16,8)
2023-10-01 19:00:14 +00:00
2023-10-07 19:59:12 +00:00
print_shadow("scr",77,1,(active == "screen" and toff ~= 0) and 7 or 14)
2023-10-01 20:15:40 +00:00
print_shadow(lpad(boxspr(dcx,dcy),3),77,9,6)
sspr(8+8*scx,4*scy,8,4,91,4,16,8)
2023-10-01 19:22:52 +00:00
end
rows_rows = 8
rows_cols = 2
function draw_rows_hud()
spr(33,0,0,2,2)
spr(35,22,0,2,2)
local toff = time() * 4 \ 1 % 2
spr(103 + (active == "draw" and toff or 0),
2023-10-01 19:22:52 +00:00
17 + 22*dcx, 2*dcy, 0.25, 0.25)
spr(105 + (active == "screen" and toff or 0),
17 + 22*scx, 2*scy, 0.25, 0.25)
2023-10-01 19:22:52 +00:00
2023-10-07 19:59:12 +00:00
print_shadow("draw",44,0,(active == "draw" and toff ~= 0) and 7 or 12)
sspr(8+16*dcx,16+2*dcy,16,2,61,1,32,4)
2023-10-01 19:22:52 +00:00
2023-10-07 19:59:12 +00:00
print_shadow("scr",48,8,(active == "screen" and toff ~= 0) and 7 or 14)
sspr(8+16*scx,16+2*scy,16,2,61,9,32,4)
2023-10-01 17:55:51 +00:00
end
function draw_bars()
for i=0,15 do
2023-10-01 19:00:14 +00:00
local i6 = i * 6
rectfill(0,16+i6,128,i6+21,i)
end
for i=0,15 do
for y=16,120,8 do
spr(i+112,9+i*7,y,0.625,1)
end
end
for y=16,120,8 do
spr(111,120,y)
2023-10-01 17:55:51 +00:00
end
end
-->8
-- palette structure
palette = {
-- cols: table. identical
-- format to table-type
-- pal call
-- tr: transparency table.
-- keys: [0]..[15]
-- (color indexes)
-- vals: true/false/nil
-- for transparency of
-- that color. false
-- sets opaque, nil
-- means "do not set".
-- tables with no absent
-- values can be compiled
-- for faster do_palt.
-- cpl_tr: compiled tr. set by
-- compile_palt iff all
-- tr values in range
-- are nonnil. do_palt
-- is faster this way
}
palette_mt = {__index=palette}
function palette.new(x)
x = x or {}
if (not x.cols) x.cols = {}
if (not x.tr) x.tr = {}
setmetatable(x, palette_mt)
2023-10-01 19:49:03 +00:00
return x
2023-10-01 17:55:51 +00:00
end
function palette:do_pal(p)
pal(self.cols, p)
end
function palette:do_palt()
if (self.cpl_tr) return palt(self.cpl_tr)
local tr = self.tr
for i=0,15 do
if (tr[i] ~= nil) palt(i, tr[i])
end
end
function palette:do_both(p)
self:do_palt()
self:do_pal(p)
end
function palette:compile_palt()
self.cpl_tr = nil
local bits, tr = 0, self.tr
2023-10-01 20:15:40 +00:00
for i = 0,15 do
2023-10-01 17:55:51 +00:00
if (tr[i] == nil) return
bits <<= 1
if (tr[i]) bits += 1
end
self.cpl_tr = bits
return bits
end
2023-10-01 19:47:57 +00:00
-->8
-- load palettes
function load_box_palette(sidx)
local sint,sfrac=sidx\1,sidx%1
local x0,y0=sint%16*8,sint\16*8+sfrac*8\1
2023-10-01 19:48:31 +00:00
local cols,tr={},{}
2023-10-01 19:47:57 +00:00
for i=0,15 do
local x,y=x0+i%4,y0+i\4
local c,f= sget(x,y),sget(x+4,y)
if (f&0x1 ~= 0) c += 128
if (f&0x2 ~= 0) tr[i]=true
if (f&0x4 ~= 0) tr[i]=false
if (f&0x8 == 0) cols[i] = c
end
local ret=palette.new{cols=cols,tr=tr}
ret:compile_palt()
return ret
end
function load_row_palette(sx, sy)
local cols,tr={},{}
for i=0,15 do
local c,f = sget(sx+i,sy),sget(sx+i,sy+1)
if (f&0x1 ~= 0) c += 128
if (f&0x2 ~= 0) tr[i]=true
if (f&0x4 ~= 0) tr[i]=false
if (f&0x8 == 0) cols[i] = c
end
local ret=palette.new{cols=cols,tr=tr}
ret:compile_palt()
return ret
end
2023-10-01 17:55:51 +00:00
__gfx__
2023-10-01 20:15:40 +00:00
00000000012300000123111101230000012311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000456700004567111145670440456711110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0070070089ab000089ab111189ab024089ab11980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000cdef0000cdef1111cdef0000cdef11990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 19:00:14 +00:00
00077000012324440123355501232444012335550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 20:15:40 +00:00
00700700456744444567555545674004456755550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000089ab444489ab555589ab420489ab55ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000cdef4444cdef5555cdef4444cdef55ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 20:27:43 +00:00
00000000077700000123242401232424113324240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000077770000456724244567acacddff24240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000007777000089ab353589ab3535113335350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000077770000cdef3535cdefbdbdddff35350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000083425440055242400552424001124240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000001dd54544667724246677acac22ee24240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000068ba44540055353500553535001135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000cac75444667735356677bdbd22ee35350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 19:22:52 +00:00
000000000123456789abcdef0123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 20:42:49 +00:00
00000000000000000000000011111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 19:22:52 +00:00
000000000124456789abcdef0124456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 20:42:49 +00:00
00000000244444444444444435555555555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000007777777777777770123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000024242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000008341dd568bacac700556677005566770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000254445444454544424242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000123456789abcdef11dd66ff11dd66ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000355555555555555524242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000005678bc005678bc0022eeaa0022eeaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000244444443555555524242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000fedcba98765432100123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000244444444444444433333333444455550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000aabb88441111880123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000010101010101898944442222555533330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 19:00:14 +00:00
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 17:55:51 +00:00
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2023-10-01 19:00:14 +00:00
000000000000000000000000000000000000000000000000000000000c00000007000000e0000000700000000c0c0c0c07070707e0e0e0e07070707001230123
00000000000000000000000000000000000000000000000000000000c0000000700000000e00000007000000c0000000700000000000000e0000000745674567
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000007e00000007000000089ab89ab
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0c0c0707070700e0e0e0e07070707cdefcdef
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001230123
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045674567
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089ab89ab
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdefcdef
5500055500111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
00055555111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff00000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
5500055500111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
00055555111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff00000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
2023-10-07 19:59:12 +00:00
__label__
000ecececec012311110123000001231111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000c567000e4567111145670440456711110000000cc00ccc0ccc0c0c000000000000000000000ee00ee0eee0000000000000000000000000000000000000000
000e9ab000c89ab111189ab024089ab11980000000c1c0c1c1c1c1c1c10000000000000000000e011e011e1e1000000000000000000000000000000000000000
000cececececdef1111cdef0000cdef11990000000c1c1cc01ccc1c1c10000000000000000000eee0e100ee01000000000000000000000000000000000000000
000012324440123355501232444012335550000000c1c1c1c0c1c1ccc1000112233000000000001e1e100e1e0000011223300000000000000000000000000000
000456744444567555545674004456755550000000ccc1c1c1c1c1ccc10001122330000000000ee010ee0e1e1000011223300000000000000000000000000000
00089ab444489ab555589ab420489ab55ca000000001110101010101110445566770000000000011000110101004455667700000000000000000000000000000
000cdef4444cdef5555cdef4444cdef55ba000000000000000000000000445566770000000000000000000000004455667700000000000000000000000000000
000077700000123242401232424113324240000000000000000000000008899aabb0000000000000000000000008899aabb00000000000000000000000000000
00077770000456724244567acacddff24240000000000000000000660008899aabb0000000000000000006600008899aabb00000000000000000000000000000
0007777000089ab353589ab353511333535000000000000000000006100ccddeeff000000000000000000061000ccddeeff00000000000000000000000000000
00077770000cdef3535cdefbdbdddff3535000000000000000000006100ccddeeff000000000000000000061000ccddeeff00000000000000000000000000000
00008342544005524240055242400112424000000000000000000006100000000000000000000000000000610000000000000000000000000000000000000000
0001dd54544667724246677acac22ee2424000000000000000000066600000000000000000000000000006660000000000000000000000000000000000000000
00068ba4454005535350055353500113535000000000000000000001110000000000000000000000000000111000000000000000000000000000000000000000
000cac75444667735356677bdbd22ee3535000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
1111111111115511111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11189ab89ab
11111111151115111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11cdefcdef
111111111551111111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff111231123
11111111151115111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff1145674567
1111111111115511111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11189ab89ab
11111111151115111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11cdefcdef
222222222552222222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff221232123
22222222252225222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff2245674567
2222222222225522111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff22289ab89ab
22222222252225222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff22cdefcdef
222222222552222222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff221232123
22222222252225222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff2245674567
3333333333335533111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33389ab89ab
33333333353335333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33cdefcdef
333333333553333333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff331233123
33333333353335333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff3345674567
3333333333335533111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33389ab89ab
33333333353335333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33cdefcdef
444444444554444444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff441234123
44444444454445444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff4445674567
4444444444445544111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff44489ab89ab
44444444454445444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff44cdefcdef
444444444554444444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff441234123
44444444454445444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff4445674567
5555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55589ab89ab
55555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55cdefcdef
555555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff551235123
55555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff5545674567
5555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55589ab89ab
55555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55cdefcdef
666666666556666666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff661236123
66666666656665666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff6645674567
6666666666665566111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff66689ab89ab
66666666656665666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff66cdefcdef
666666666556666666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff661236123
66666666656665666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff6645674567
7777777777775577111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77789ab89ab
77777777757775777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77cdefcdef
777777777557777777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff771237123
77777777757775777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff7745674567
7777777777775577111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77789ab89ab
77777777757775777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77cdefcdef
888888888558888888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff881238123
88888888858885888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff8845674567
8888888888885588111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff88889ab89ab
88888888858885888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff88cdefcdef
888888888558888888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff881238123
88888888858885888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff8845674567
9999999999995599111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99989ab89ab
99999999959995999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99cdefcdef
999999999559999999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff991239123
99999999959995999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff9945674567
9999999999995599111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99989ab89ab
99999999959995999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99cdefcdef
aaaaaaaaa55aaaaaaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa123a123
aaaaaaaaa5aaa5aaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa45674567
aaaaaaaaaaaa55aa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaaa89ab89ab
aaaaaaaaa5aaa5aaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaacdefcdef
aaaaaaaaa55aaaaaaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa123a123
aaaaaaaaa5aaa5aaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa45674567
bbbbbbbbbbbb55bb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbb89ab89ab
bbbbbbbbb5bbb5bbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbcdefcdef
bbbbbbbbb55bbbbbbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbb123b123
bbbbbbbbb5bbb5bbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbb45674567
bbbbbbbbbbbb55bb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbb89ab89ab
bbbbbbbbb5bbb5bbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbcdefcdef
ccccccccc55ccccccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc123c123
ccccccccc5ccc5ccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc45674567
cccccccccccc55cc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffccc89ab89ab
ccccccccc5ccc5ccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcccdefcdef
ccccccccc55ccccccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc123c123
ccccccccc5ccc5ccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc45674567
dddddddddddd55dd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddd89ab89ab
ddddddddd5ddd5ddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddcdefcdef
ddddddddd55ddddddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffdd123d123
ddddddddd5ddd5ddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffdd45674567
dddddddddddd55dd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddd89ab89ab
ddddddddd5ddd5ddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddcdefcdef
eeeeeeeee55eeeeeee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee123e123
eeeeeeeee5eee5eee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee45674567
eeeeeeeeeeee55ee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffeee89ab89ab
eeeeeeeee5eee5eee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffeecdefcdef
eeeeeeeee55eeeeeee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee123e123
eeeeeeeee5eee5eee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee45674567
ffffffffffff55ff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeeffffffffff89ab89ab
fffffffff5fff5fff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffffcdefcdef
fffffffff55fffffff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffff123f123
fffffffff5fff5fff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffff45674567
ffffffffffff55ff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeeffffffffff89ab89ab
fffffffff5fff5fff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffffcdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef