View difference between Paste ID: g3RdYB9W and bHhcsqgg
SHOW: | | - or go back to the newest paste.
1
false
2
{
3
  render = {
4
    "local mon = peripheral.find(\"monitor\") if mon then mon.setTextScale(0.5) end",
5
    "local sx,sy = term.getSize()",
6
    "letters = {}",
7
    "letters[1] = {",
8
    "  path = \"/S\", --path to paint file",
9
    "  x = -8,      --start x",
10
    "  xsize = 17,  --horizontal size of paint file",
11
    "  xmult = 1    --multiplies the x coord",
12
    "}",
13
    "letters[2] = {",
14
    "  path = \"/o\",",
15
    "  x = letters[1].x+letters[1].xsize,",
16
    "  xsize = 17,",
17
    "  xmult = 1",
18
    "}",
19
    "letters[3] = {",
20
    "  path = \"/n\",",
21
    "  x = letters[2].x+letters[2].xsize,",
22
    "  xsize = 17,",
23
    "  xmult = 1",
24
    "}",
25
    "letters[4] = {",
26
    "  path = \"/a\",",
27
    "  x = letters[3].x+letters[3].xsize,",
28
    "  xsize = 17,",
29
    "  xmult = 1",
30
    "}",
31
    "letters[5] = {",
32
    "  path = \"/r\",",
33
    "  x = letters[4].x+letters[4].xsize,",
34
    "  xsize = 17,",
35
    "  xmult = 1",
36
    "}",
37
    "letters[6] = {",
38
    "  path = \"/X\",",
39
    "  x = letters[5].x+letters[5].xsize+10,",
40
    "  xsize = 33,",
41
    "  xmult = 1.23",
42
    "}",
43
    "--letters[8].x = (sx/2)-(letters[8].xsize/2)",
44
    "local totalWidth = 0",
45
    "for a = 1, #letters do",
46
    "  totalWidth = totalWidth + letters[a].xsize",
47
    "  if a > 1 then",
48
    "    totalWidth = totalWidth + letters[a].x-letters[a-1].x",
49
    "  end",
50
    "end",
51
    "",
52
    "clearLines = function(start,stop)",
53
    "  local cx,cy = term.getCursorPos()",
54
    "  for y = start,stop do",
55
    "    term.setCursorPos(1,y)",
56
    "    term.clearLine()",
57
    "  end",
58
    "  term.setCursorPos(cx,cy)",
59
    "end",
60
    "p = {}",
61
    "l = {}",
62
    "for a = 1, #letters do",
63
    "  p[a] = paintutils.loadImage(letters[a].path)",
64
    "  l[a] = letters[a]",
65
    "end",
66
    "",
67
    "_G.render = function(x,spacing,reverse)",
68
    "  term.setBackgroundColor(colors.black)",
69
    "  clearLines(1,35)",
70
    "  for a = reverse and #p or 1, reverse and 1 or #p, reverse and -1 or 1 do",
71
    "    local drawX = (x+l[a].x)-((spacing*l[a].xmult)*(a-(#letters/2)))",
72
    "    if a == 8 then --draw \"X\"",
73
    "--      drawX = 1",
74
    "    end",
75
    "    paintutils.drawImage(p[a],drawX,l[a].y or 2)",
76
    "  end",
77
    "end",
78
    "--render(1,1)",
79
  },
80
  o = {
81
    "",
82
    "",
83
    "         000000000000000",
84
    "         077777777777770",
85
    "         078888888888880",
86
    "         078800000007880",
87
    "         07880     07880",
88
    "         07880     07880",
89
    "         07880     07880",
90
    "         07880     07880",
91
    "         07880     07880",
92
    "         07880     07880",
93
    "         07880     07880",
94
    "         07880     07880",
95
    "         078800000007880",
96
    "         078877777777880",
97
    "         078888888888880",
98
    "         000000000000000",
99
  },
100
  S = {
101
    "",
102
    "",
103
    "         000000000000000",
104
    "         077777777777770",
105
    "         078888888888880",
106
    "         078800000008880",
107
    "         07880     00000",
108
    "         07880          ",
109
    "         078800000000000",
110
    "         078877777777770",
111
    "         078888888888880",
112
    "         000000000007880",
113
    "                   07880",
114
    "         00000     07880",
115
    "         077700000007880",
116
    "         078877777777880",
117
    "         078888888888880",
118
    "         000000000000000",
119
  },
120
  n = {
121
    "",
122
    "",
123
    "         000000000 00000",
124
    "         077777770 07770",
125
    "         078888880 07880",
126
    "         078888880 07880",
127
    "         078800070 07880",
128
    "         07880 070 07880",
129
    "         07880 070 07880",
130
    "         07880 070 07880",
131
    "         07880 070 07880",
132
    "         07880 070 07880",
133
    "         07880 070 07880",
134
    "         07880 070007880",
135
    "         07880 078777880",
136
    "         07880 078888880",
137
    "         07880 078888880",
138
    "         00000 000000000",
139
  },
140
  a = {
141
    "",
142
    "",
143
    "         000000000000000",
144
    "         077777777777770",
145
    "         078888888888880",
146
    "         078800000007880",
147
    "         07880     07880",
148
    "         07880     07880",
149
    "         078800000007880",
150
    "         078877777777880",
151
    "         078888888888880",
152
    "         078800000007880",
153
    "         07880     07880",
154
    "         07880     07880",
155
    "         07880     07880",
156
    "         07880     07880",
157
    "         07880     07880",
158
    "         00000     00000",
159
  },
160
  sonarx = {
161
    "{{{m=1,x=10,t=128,c=\" \",b=1,y=3},{m=1,x=11,t=128,c=\" \",b=1,y=3},{m=1,x=12,t=128,c=\" \",b=1,y=3},{m=1,x=13,t=128,c=\" \",b=1,y=3},{m=1,x=14,t=128,c=\" \",b=1,y=3},{m=1,x=15,t=128,c=\" \",b=1,y=3},{m=1,x=16,t=128,c=\" \",b=1,y=3},{m=1,x=17,t=128,c=\" \",b=1,y=3},{m=1,x=18,t=128,c=\" \",b=1,y=3},{m=1,x=19,t=128,c=\" \",b=1,y=3},{m=1,x=20,t=128,c=\" \",b=1,y=3},{m=1,x=21,t=128,c=\" \",b=1,y=3},{m=1,x=22,t=128,c=\" \",b=1,y=3},{m=1,x=23,t=128,c=\" \",b=1,y=3},{m=1,x=24,t=128,c=\" \",b=1,y=3},{m=1,x=10,t=128,c=\" \",b=1,y=4},{m=1,x=11,t=128,c=\" \",b=128,y=4},{m=1,x=12,t=128,c=\" \",b=128,y=4},{m=1,x=13,t=128,c=\" \",b=128,y=4},{m=1,x=14,t=128,c=\" \",b=128,y=4},{m=1,x=15,t=128,c=\" \",b=128,y=4},{m=1,x=16,t=128,c=\" \",b=128,y=4},{m=1,x=17,t=128,c=\" \",b=128,y=4},{m=1,x=18,t=128,c=\" \",b=128,y=4},{m=1,x=19,t=128,c=\" \",b=128,y=4},{m=1,x=20,t=128,c=\" \",b=128,y=4},{m=1,x=21,t=128,c=\" \",b=128,y=4},{m=1,x=22,t=128,c=\" \",b=128,y=4},{m=1,x=23,t=128,c=\" \",b=128,y=4},{m=1,x=24,t=128,c=\" \",b=1,y=4},{m=1,x=10,t=128,c=\" \",b=1,y=5},{m=1,x=11,t=128,c=\" \",b=128,y=5},{m=1,x=12,t=128,c=\" \",b=256,y=5},{m=1,x=13,t=128,c=\" \",b=256,y=5},{m=1,x=14,t=128,c=\" \",b=256,y=5},{m=1,x=15,t=128,c=\" \",b=256,y=5},{m=1,x=16,t=128,c=\" \",b=256,y=5},{m=1,x=17,t=128,c=\" \",b=256,y=5},{m=1,x=18,t=128,c=\" \",b=256,y=5},{m=1,x=19,t=128,c=\" \",b=256,y=5},{m=1,x=20,t=128,c=\" \",b=256,y=5},{m=1,x=21,t=128,c=\" \",b=256,y=5},{m=1,x=22,t=128,c=\" \",b=256,y=5},{m=1,x=23,t=128,c=\" \",b=256,y=5},{m=1,x=24,t=128,c=\" \",b=1,y=5},{m=1,x=10,t=128,c=\" \",b=1,y=6},{m=1,x=11,t=128,c=\" \",b=128,y=6},{m=1,x=12,t=128,c=\" \",b=256,y=6},{m=1,x=13,t=128,c=\" \",b=256,y=6},{m=1,x=14,t=128,c=\" \",b=1,y=6},{m=1,x=15,t=128,c=\" \",b=1,y=6},{m=1,x=16,t=128,c=\" \",b=1,y=6},{m=1,x=17,t=128,c=\" \",b=1,y=6},{m=1,x=18,t=128,c=\" \",b=1,y=6},{m=1,x=19,t=128,c=\" \",b=1,y=6},{m=1,x=20,t=128,c=\" \",b=1,y=6},{m=1,x=21,t=128,c=\" \",b=256,y=6},{m=1,x=22,t=128,c=\" \",b=256,y=6},{m=1,x=23,t=128,c=\" \",b=256,y=6},{m=1,x=24,t=128,c=\" \",b=1,y=6},{m=1,x=10,t=128,c=\" \",b=1,y=7},{m=1,x=11,t=128,c=\" \",b=128,y=7},{m=1,x=12,t=128,c=\" \",b=256,y=7},{m=1,x=13,t=128,c=\" \",b=256,y=7},{m=1,x=14,t=128,c=\" \",b=1,y=7},{m=1,x=20,t=128,c=\" \",b=1,y=7},{m=1,x=21,t=128,c=\" \",b=1,y=7},{m=1,x=22,t=128,c=\" \",b=1,y=7},{m=1,x=23,t=128,c=\" \",b=1,y=7},{m=1,x=24,t=128,c=\" \",b=1,y=7},{m=1,x=10,t=128,c=\" \",b=1,y=8},{m=1,x=11,t=128,c=\" \",b=128,y=8},{m=1,x=12,t=128,c=\" \",b=256,y=8},{m=1,x=13,t=128,c=\" \",b=256,y=8},{m=1,x=14,t=128,c=\" \",b=1,y=8},{m=1,x=10,t=128,c=\" \",b=1,y=9},{m=1,x=11,t=128,c=\" \",b=128,y=9},{m=1,x=12,t=128,c=\" \",b=256,y=9},{m=1,x=13,t=128,c=\" \",b=256,y=9},{m=1,x=14,t=128,c=\" \",b=1,y=9},{m=1,x=15,t=128,c=\" \",b=1,y=9},{m=1,x=16,t=128,c=\" \",b=1,y=9},{m=1,x=17,t=128,c=\" \",b=1,y=9},{m=1,x=18,t=128,c=\" \",b=1,y=9},{m=1,x=19,t=128,c=\" \",b=1,y=9},{m=1,x=20,t=128,c=\" \",b=1,y=9},{m=1,x=21,t=128,c=\" \",b=1,y=9},{m=1,x=22,t=128,c=\" \",b=1,y=9},{m=1,x=23,t=128,c=\" \",b=1,y=9},{m=1,x=24,t=128,c=\" \",b=1,y=9},{m=1,x=10,t=128,c=\" \",b=1,y=10},{m=1,x=11,t=128,c=\" \",b=128,y=10},{m=1,x=12,t=128,c=\" \",b=256,y=10},{m=1,x=13,t=128,c=\" \",b=256,y=10},{m=1,x=14,t=128,c=\" \",b=128,y=10},{m=1,x=15,t=128,c=\" \",b=128,y=10},{m=1,x=16,t=128,c=\" \",b=128,y=10},{m=1,x=17,t=128,c=\" \",b=128,y=10},{m=1,x=18,t=128,c=\" \",b=128,y=10},{m=1,x=19,t=128,c=\" \",b=128,y=10},{m=1,x=20,t=128,c=\" \",b=128,y=10},{m=1,x=21,t=128,c=\" \",b=128,y=10},{m=1,x=22,t=128,c=\" \",b=128,y=10},{m=1,x=23,t=128,c=\" \",b=128,y=10},{m=1,x=24,t=128,c=\" \",b=1,y=10},{m=1,x=10,t=128,c=\" \",b=1,y=11},{m=1,x=11,t=128,c=\" \",b=128,y=11},{m=1,x=12,t=128,c=\" \",b=256,y=11},{m=1,x=13,t=128,c=\" \",b=256,y=11},{m=1,x=14,t=128,c=\" \",b=256,y=11},{m=1,x=15,t=128,c=\" \",b=256,y=11},{m=1,x=16,t=128,c=\" \",b=256,y=11},{m=1,x=17,t=128,c=\" \",b=256,y=11},{m=1,x=18,t=128,c=\" \",b=256,y=11},{m=1,x=19,t=128,c=\" \",b=256,y=11},{m=1,x=20,t=128,c=\" \",b=256,y=11},{m=1,x=21,t=128,c=\" \",b=256,y=11},{m=1,x=22,t=128,c=\" \",b=256,y=11},{m=1,x=23,t=128,c=\" \",b=256,y=11},{m=1,x=24,t=128,c=\" \",b=1,y=11},{m=1,x=10,t=128,c=\" \",b=1,y=12},{m=1,x=11,t=128,c=\" \",b=1,y=12},{m=1,x=12,t=128,c=\" \",b=1,y=12},{m=1,x=13,t=128,c=\" \",b=1,y=12},{m=1,x=14,t=128,c=\" \",b=1,y=12},{m=1,x=15,t=128,c=\" \",b=1,y=12},{m=1,x=16,t=128,c=\" \",b=1,y=12},{m=1,x=17,t=128,c=\" \",b=1,y=12},{m=1,x=18,t=128,c=\" \",b=1,y=12},{m=1,x=19,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=1,y=12},{m=1,x=21,t=128,c=\" \",b=128,y=12},{m=1,x=22,t=128,c=\" \",b=256,y=12},{m=1,x=23,t=128,c=\" \",b=256,y=12},{m=1,x=24,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=1,y=13},{m=1,x=21,t=128,c=\" \",b=128,y=13},{m=1,x=22,t=128,c=\" \",b=256,y=13},{m=1,x=23,t=128,c=\" \",b=256,y=13},{m=1,x=24,t=128,c=\" \",b=1,y=13},{m=1,x=10,t=128,c=\" \",b=1,y=14},{m=1,x=11,t=128,c=\" \",b=1,y=14},{m=1,x=12,t=128,c=\" \",b=1,y=14},{m=1,x=13,t=128,c=\" \",b=1,y=14},{m=1,x=14,t=128,c=\" \",b=1,y=14},{m=1,x=20,t=128,c=\" \",b=1,y=14},{m=1,x=21,t=128,c=\" \",b=128,y=14},{m=1,x=22,t=128,c=\" \",b=256,y=14},{m=1,x=23,t=128,c=\" \",b=256,y=14},{m=1,x=24,t=128,c=\" \",b=1,y=14},{m=1,x=10,t=128,c=\" \",b=1,y=15},{m=1,x=11,t=128,c=\" \",b=128,y=15},{m=1,x=12,t=128,c=\" \",b=128,y=15},{m=1,x=13,t=128,c=\" \",b=128,y=15},{m=1,x=14,t=128,c=\" \",b=1,y=15},{m=1,x=15,t=128,c=\" \",b=1,y=15},{m=1,x=16,t=128,c=\" \",b=1,y=15},{m=1,x=17,t=128,c=\" \",b=1,y=15},{m=1,x=18,t=128,c=\" \",b=1,y=15},{m=1,x=19,t=128,c=\" \",b=1,y=15},{m=1,x=20,t=128,c=\" \",b=1,y=15},{m=1,x=21,t=128,c=\" \",b=128,y=15},{m=1,x=22,t=128,c=\" \",b=256,y=15},{m=1,x=23,t=128,c=\" \",b=256,y=15},{m=1,x=24,t=128,c=\" \",b=1,y=15},{m=1,x=10,t=128,c=\" \",b=1,y=16},{m=1,x=11,t=128,c=\" \",b=128,y=16},{m=1,x=12,t=128,c=\" \",b=256,y=16},{m=1,x=13,t=128,c=\" \",b=256,y=16},{m=1,x=14,t=128,c=\" \",b=128,y=16},{m=1,x=15,t=128,c=\" \",b=128,y=16},{m=1,x=16,t=128,c=\" \",b=128,y=16},{m=1,x=17,t=128,c=\" \",b=128,y=16},{m=1,x=18,t=128,c=\" \",b=128,y=16},{m=1,x=19,t=128,c=\" \",b=128,y=16},{m=1,x=20,t=128,c=\" \",b=128,y=16},{m=1,x=21,t=128,c=\" \",b=128,y=16},{m=1,x=22,t=128,c=\" \",b=256,y=16},{m=1,x=23,t=128,c=\" \",b=256,y=16},{m=1,x=24,t=128,c=\" \",b=1,y=16},{m=1,x=10,t=128,c=\" \",b=1,y=17},{m=1,x=11,t=128,c=\" \",b=128,y=17},{m=1,x=12,t=128,c=\" \",b=256,y=17},{m=1,x=13,t=128,c=\" \",b=256,y=17},{m=1,x=14,t=128,c=\" \",b=256,y=17},{m=1,x=15,t=128,c=\" \",b=256,y=17},{m=1,x=16,t=128,c=\" \",b=256,y=17},{m=1,x=17,t=128,c=\" \",b=256,y=17},{m=1,x=18,t=128,c=\" \",b=256,y=17},{m=1,x=19,t=128,c=\" \",b=256,y=17},{m=1,x=20,t=128,c=\" \",b=256,y=17},{m=1,x=21,t=128,c=\" \",b=256,y=17},{m=1,x=22,t=128,c=\" \",b=256,y=17},{m=1,x=23,t=128,c=\" \",b=256,y=17},{m=1,x=24,t=128,c=\" \",b=1,y=17},{m=1,x=10,t=128,c=\" \",b=1,y=18},{m=1,x=11,t=128,c=\" \",b=1,y=18},{m=1,x=12,t=128,c=\" \",b=1,y=18},{m=1,x=13,t=128,c=\" \",b=1,y=18},{m=1,x=14,t=128,c=\" \",b=1,y=18},{m=1,x=15,t=128,c=\" \",b=1,y=18},{m=1,x=16,t=128,c=\" \",b=1,y=18},{m=1,x=17,t=128,c=\" \",b=1,y=18},{m=1,x=18,t=128,c=\" \",b=1,y=18},{m=1,x=19,t=128,c=\" \",b=1,y=18},{m=1,x=20,t=128,c=\" \",b=1,y=18},{m=1,x=21,t=128,c=\" \",b=1,y=18},{m=1,x=22,t=128,c=\" \",b=1,y=18},{m=1,x=23,t=128,c=\" \",b=1,y=18},{m=1,x=24,t=128,c=\" \",b=1,y=18}},{{m=1,x=10,t=128,c=\" \",y=3,b=1},{m=1,x=11,t=128,c=\" \",y=3,b=1},{m=1,x=12,t=128,c=\" \",y=3,b=1},{m=1,x=13,t=128,c=\" \",y=3,b=1},{m=1,x=14,t=128,c=\" \",y=3,b=1},{m=1,x=15,t=128,c=\" \",y=3,b=1},{m=1,x=16,t=128,c=\" \",y=3,b=1},{m=1,x=17,t=128,c=\" \",y=3,b=1},{m=1,x=18,t=128,c=\" \",y=3,b=1},{m=1,x=19,t=128,c=\" \",y=3,b=1},{m=1,x=20,t=128,c=\" \",y=3,b=1},{m=1,x=21,t=128,c=\" \",y=3,b=1},{m=1,x=22,t=128,c=\" \",y=3,b=1},{m=1,x=23,t=128,c=\" \",y=3,b=1},{m=1,x=24,t=128,c=\" \",y=3,b=1},{m=1,x=10,t=128,c=\" \",y=4,b=1},{m=1,x=11,t=128,c=\" \",y=4,b=128},{m=1,x=12,t=128,c=\" \",y=4,b=128},{m=1,x=13,t=128,c=\" \",y=4,b=128},{m=1,x=14,t=128,c=\" \",y=4,b=128},{m=1,x=15,t=128,c=\" \",y=4,b=128},{m=1,x=16,t=128,c=\" \",y=4,b=128},{m=1,x=17,t=128,c=\" \",y=4,b=128},{m=1,x=18,t=128,c=\" \",y=4,b=128},{m=1,x=19,t=128,c=\" \",y=4,b=128},{m=1,x=20,t=128,c=\" \",y=4,b=128},{m=1,x=21,t=128,c=\" \",y=4,b=128},{m=1,x=22,t=128,c=\" \",y=4,b=128},{m=1,x=23,t=128,c=\" \",y=4,b=128},{m=1,x=24,t=128,c=\" \",y=4,b=1},{m=1,x=10,t=128,c=\" \",y=5,b=1},{m=1,x=11,t=128,c=\" \",y=5,b=128},{m=1,x=12,t=128,c=\" \",y=5,b=256},{m=1,x=13,t=128,c=\" \",y=5,b=256},{m=1,x=14,t=128,c=\" \",y=5,b=256},{m=1,x=15,t=128,c=\" \",y=5,b=256},{m=1,x=16,t=128,c=\" \",y=5,b=256},{m=1,x=17,t=128,c=\" \",y=5,b=256},{m=1,x=18,t=128,c=\" \",y=5,b=256},{m=1,x=19,t=128,c=\" \",y=5,b=256},{m=1,x=20,t=128,c=\" \",y=5,b=256},{m=1,x=21,t=128,c=\" \",y=5,b=256},{m=1,x=22,t=128,c=\" \",y=5,b=256},{m=1,x=23,t=128,c=\" \",y=5,b=256},{m=1,x=24,t=128,c=\" \",y=5,b=1},{m=1,x=10,t=128,c=\" \",y=6,b=1},{m=1,x=11,t=128,c=\" \",y=6,b=128},{m=1,x=12,t=128,c=\" \",y=6,b=256},{m=1,x=13,t=128,c=\" \",y=6,b=256},{m=1,x=14,t=128,c=\" \",y=6,b=1},{m=1,x=15,t=128,c=\" \",y=6,b=1},{m=1,x=16,t=128,c=\" \",y=6,b=1},{m=1,x=17,t=128,c=\" \",y=6,b=1},{m=1,x=18,t=128,c=\" \",y=6,b=1},{m=1,x=19,t=128,c=\" \",y=6,b=1},{m=1,x=20,t=128,c=\" \",y=6,b=1},{m=1,x=21,t=128,c=\" \",y=6,b=128},{m=1,x=22,t=128,c=\" \",y=6,b=256},{m=1,x=23,t=128,c=\" \",y=6,b=256},{m=1,x=24,t=128,c=\" \",y=6,b=1},{m=1,x=10,t=128,c=\" \",y=7,b=1},{m=1,x=11,t=128,c=\" \",y=7,b=128},{m=1,x=12,t=128,c=\" \",y=7,b=256},{m=1,x=13,t=128,c=\" \",y=7,b=256},{m=1,x=14,t=128,c=\" \",y=7,b=1},{m=1,x=20,t=128,c=\" \",y=7,b=1},{m=1,x=21,t=128,c=\" \",y=7,b=128},{m=1,x=22,t=128,c=\" \",y=7,b=256},{m=1,x=23,t=128,c=\" \",y=7,b=256},{m=1,x=24,t=128,c=\" \",y=7,b=1},{m=1,x=10,t=128,c=\" \",y=8,b=1},{m=1,x=11,t=128,c=\" \",y=8,b=128},{m=1,x=12,t=128,c=\" \",y=8,b=256},{m=1,x=13,t=128,c=\" \",y=8,b=256},{m=1,x=14,t=128,c=\" \",y=8,b=1},{m=1,x=20,t=128,c=\" \",y=8,b=1},{m=1,x=21,t=128,c=\" \",y=8,b=128},{m=1,x=22,t=128,c=\" \",y=8,b=256},{m=1,x=23,t=128,c=\" \",y=8,b=256},{m=1,x=24,t=128,c=\" \",y=8,b=1},{m=1,x=10,t=128,c=\" \",y=9,b=1},{m=1,x=11,t=128,c=\" \",y=9,b=128},{m=1,x=12,t=128,c=\" \",y=9,b=256},{m=1,x=13,t=128,c=\" \",y=9,b=256},{m=1,x=14,t=128,c=\" \",y=9,b=1},{m=1,x=20,t=128,c=\" \",y=9,b=1},{m=1,x=21,t=128,c=\" \",y=9,b=128},{m=1,x=22,t=128,c=\" \",y=9,b=256},{m=1,x=23,t=128,c=\" \",y=9,b=256},{m=1,x=24,t=128,c=\" \",y=9,b=1},{m=1,x=10,t=128,c=\" \",y=10,b=1},{m=1,x=11,t=128,c=\" \",y=10,b=128},{m=1,x=12,t=128,c=\" \",y=10,b=256},{m=1,x=13,t=128,c=\" \",y=10,b=256},{m=1,x=14,t=128,c=\" \",y=10,b=1},{m=1,x=20,t=128,c=\" \",y=10,b=1},{m=1,x=21,t=128,c=\" \",y=10,b=128},{m=1,x=22,t=128,c=\" \",y=10,b=256},{m=1,x=23,t=128,c=\" \",y=10,b=256},{m=1,x=24,t=128,c=\" \",y=10,b=1},{m=1,x=10,t=128,c=\" \",y=11,b=1},{m=1,x=11,t=128,c=\" \",y=11,b=128},{m=1,x=12,t=128,c=\" \",y=11,b=256},{m=1,x=13,t=128,c=\" \",y=11,b=256},{m=1,x=14,t=128,c=\" \",y=11,b=1},{m=1,x=20,t=128,c=\" \",y=11,b=1},{m=1,x=21,t=128,c=\" \",y=11,b=128},{m=1,x=22,t=128,c=\" \",y=11,b=256},{m=1,x=23,t=128,c=\" \",y=11,b=256},{m=1,x=24,t=128,c=\" \",y=11,b=1},{m=1,x=10,t=128,c=\" \",y=12,b=1},{m=1,x=11,t=128,c=\" \",y=12,b=128},{m=1,x=12,t=128,c=\" \",y=12,b=256},{m=1,x=13,t=128,c=\" \",y=12,b=256},{m=1,x=14,t=128,c=\" \",y=12,b=1},{m=1,x=20,t=128,c=\" \",y=12,b=1},{m=1,x=21,t=128,c=\" \",y=12,b=128},{m=1,x=22,t=128,c=\" \",y=12,b=256},{m=1,x=23,t=128,c=\" \",y=12,b=256},{m=1,x=24,t=128,c=\" \",y=12,b=1},{m=1,x=10,t=128,c=\" \",y=13,b=1},{m=1,x=11,t=128,c=\" \",y=13,b=128},{m=1,x=12,t=128,c=\" \",y=13,b=256},{m=1,x=13,t=128,c=\" \",y=13,b=256},{m=1,x=14,t=128,c=\" \",y=13,b=1},{m=1,x=20,t=128,c=\" \",y=13,b=1},{m=1,x=21,t=128,c=\" \",y=13,b=128},{m=1,x=22,t=128,c=\" \",y=13,b=256},{m=1,x=23,t=128,c=\" \",y=13,b=256},{m=1,x=24,t=128,c=\" \",y=13,b=1},{m=1,x=10,t=128,c=\" \",y=14,b=1},{m=1,x=11,t=128,c=\" \",y=14,b=128},{m=1,x=12,t=128,c=\" \",y=14,b=256},{m=1,x=13,t=128,c=\" \",y=14,b=256},{m=1,x=14,t=128,c=\" \",y=14,b=1},{m=1,x=20,t=128,c=\" \",y=14,b=1},{m=1,x=21,t=128,c=\" \",y=14,b=128},{m=1,x=22,t=128,c=\" \",y=14,b=256},{m=1,x=23,t=128,c=\" \",y=14,b=256},{m=1,x=24,t=128,c=\" \",y=14,b=1},{m=1,x=10,t=128,c=\" \",y=15,b=1},{m=1,x=11,t=128,c=\" \",y=15,b=128},{m=1,x=12,t=128,c=\" \",y=15,b=256},{m=1,x=13,t=128,c=\" \",y=15,b=256},{m=1,x=14,t=128,c=\" \",y=15,b=1},{m=1,x=15,t=128,c=\" \",y=15,b=1},{m=1,x=16,t=128,c=\" \",y=15,b=1},{m=1,x=17,t=128,c=\" \",y=15,b=1},{m=1,x=18,t=128,c=\" \",y=15,b=1},{m=1,x=19,t=128,c=\" \",y=15,b=1},{m=1,x=20,t=128,c=\" \",y=15,b=1},{m=1,x=21,t=128,c=\" \",y=15,b=128},{m=1,x=22,t=128,c=\" \",y=15,b=256},{m=1,x=23,t=128,c=\" \",y=15,b=256},{m=1,x=24,t=128,c=\" \",y=15,b=1},{m=1,x=10,t=128,c=\" \",y=16,b=1},{m=1,x=11,t=128,c=\" \",y=16,b=128},{m=1,x=12,t=128,c=\" \",y=16,b=256},{m=1,x=13,t=128,c=\" \",y=16,b=256},{m=1,x=14,t=128,c=\" \",y=16,b=128},{m=1,x=15,t=128,c=\" \",y=16,b=128},{m=1,x=16,t=128,c=\" \",y=16,b=128},{m=1,x=17,t=128,c=\" \",y=16,b=128},{m=1,x=18,t=128,c=\" \",y=16,b=128},{m=1,x=19,t=128,c=\" \",y=16,b=128},{m=1,x=20,t=128,c=\" \",y=16,b=128},{m=1,x=21,t=128,c=\" \",y=16,b=128},{m=1,x=22,t=128,c=\" \",y=16,b=256},{m=1,x=23,t=128,c=\" \",y=16,b=256},{m=1,x=24,t=128,c=\" \",y=16,b=1},{m=1,x=10,t=128,c=\" \",y=17,b=1},{m=1,x=11,t=128,c=\" \",y=17,b=128},{m=1,x=12,t=128,c=\" \",y=17,b=256},{m=1,x=13,t=128,c=\" \",y=17,b=256},{m=1,x=14,t=128,c=\" \",y=17,b=256},{m=1,x=15,t=128,c=\" \",y=17,b=256},{m=1,x=16,t=128,c=\" \",y=17,b=256},{m=1,x=17,t=128,c=\" \",y=17,b=256},{m=1,x=18,t=128,c=\" \",y=17,b=256},{m=1,x=19,t=128,c=\" \",y=17,b=256},{m=1,x=20,t=128,c=\" \",y=17,b=256},{m=1,x=21,t=128,c=\" \",y=17,b=256},{m=1,x=22,t=128,c=\" \",y=17,b=256},{m=1,x=23,t=128,c=\" \",y=17,b=256},{m=1,x=24,t=128,c=\" \",y=17,b=1},{m=1,x=10,t=128,c=\" \",y=18,b=1},{m=1,x=11,t=128,c=\" \",y=18,b=1},{m=1,x=12,t=128,c=\" \",y=18,b=1},{m=1,x=13,t=128,c=\" \",y=18,b=1},{m=1,x=14,t=128,c=\" \",y=18,b=1},{m=1,x=15,t=128,c=\" \",y=18,b=1},{m=1,x=16,t=128,c=\" \",y=18,b=1},{m=1,x=17,t=128,c=\" \",y=18,b=1},{m=1,x=18,t=128,c=\" \",y=18,b=1},{m=1,x=19,t=128,c=\" \",y=18,b=1},{m=1,x=20,t=128,c=\" \",y=18,b=1},{m=1,x=21,t=128,c=\" \",y=18,b=1},{m=1,x=22,t=128,c=\" \",y=18,b=1},{m=1,x=23,t=128,c=\" \",y=18,b=1},{m=1,x=24,t=128,c=\" \",y=18,b=1}},{{m=1,x=10,t=128,c=\" \",y=3,b=1},{m=1,x=11,t=128,c=\" \",y=3,b=1},{m=1,x=12,t=128,c=\" \",y=3,b=1},{m=1,x=13,t=128,c=\" \",y=3,b=1},{m=1,x=14,t=128,c=\" \",y=3,b=1},{m=1,x=15,t=128,c=\" \",y=3,b=1},{m=1,x=16,t=128,c=\" \",y=3,b=1},{m=1,x=17,t=128,c=\" \",y=3,b=1},{m=1,x=18,t=128,c=\" \",y=3,b=1},{m=1,x=20,t=128,c=\" \",y=3,b=1},{m=1,x=21,t=128,c=\" \",y=3,b=1},{m=1,x=22,t=128,c=\" \",y=3,b=1},{m=1,x=23,t=128,c=\" \",y=3,b=1},{m=1,x=24,t=128,c=\" \",y=3,b=1},{m=1,x=10,t=128,c=\" \",y=4,b=1},{m=1,x=11,t=128,c=\" \",y=4,b=128},{m=1,x=12,t=128,c=\" \",y=4,b=128},{m=1,x=13,t=128,c=\" \",y=4,b=128},{m=1,x=14,t=128,c=\" \",y=4,b=128},{m=1,x=15,t=128,c=\" \",y=4,b=128},{m=1,x=16,t=128,c=\" \",y=4,b=128},{m=1,x=17,t=128,c=\" \",y=4,b=128},{m=1,x=18,t=128,c=\" \",y=4,b=1},{m=1,x=20,t=128,c=\" \",y=4,b=1},{m=1,x=21,t=128,c=\" \",y=4,b=128},{m=1,x=22,t=128,c=\" \",y=4,b=128},{m=1,x=23,t=128,c=\" \",y=4,b=128},{m=1,x=24,t=128,c=\" \",y=4,b=1},{m=1,x=10,t=128,c=\" \",y=5,b=1},{m=1,x=11,t=128,c=\" \",y=5,b=128},{m=1,x=12,t=128,c=\" \",y=5,b=256},{m=1,x=13,t=128,c=\" \",y=5,b=256},{m=1,x=14,t=128,c=\" \",y=5,b=256},{m=1,x=15,t=128,c=\" \",y=5,b=256},{m=1,x=16,t=128,c=\" \",y=5,b=256},{m=1,x=17,t=128,c=\" \",y=5,b=256},{m=1,x=18,t=128,c=\" \",y=5,b=1},{m=1,x=20,t=128,c=\" \",y=5,b=1},{m=1,x=21,t=128,c=\" \",y=5,b=128},{m=1,x=22,t=128,c=\" \",y=5,b=256},{m=1,x=23,t=128,c=\" \",y=5,b=256},{m=1,x=24,t=128,c=\" \",y=5,b=1},{m=1,x=10,t=128,c=\" \",y=6,b=1},{m=1,x=11,t=128,c=\" \",y=6,b=128},{m=1,x=12,t=128,c=\" \",y=6,b=256},{m=1,x=13,t=128,c=\" \",y=6,b=256},{m=1,x=14,t=128,c=\" \",y=6,b=256},{m=1,x=15,t=128,c=\" \",y=6,b=256},{m=1,x=16,t=128,c=\" \",y=6,b=256},{m=1,x=17,t=128,c=\" \",y=6,b=256},{m=1,x=18,t=128,c=\" \",y=6,b=1},{m=1,x=20,t=128,c=\" \",y=6,b=1},{m=1,x=21,t=128,c=\" \",y=6,b=128},{m=1,x=22,t=128,c=\" \",y=6,b=256},{m=1,x=23,t=128,c=\" \",y=6,b=256},{m=1,x=24,t=128,c=\" \",y=6,b=1},{m=1,x=10,t=128,c=\" \",y=7,b=1},{m=1,x=11,t=128,c=\" \",y=7,b=128},{m=1,x=12,t=128,c=\" \",y=7,b=256},{m=1,x=13,t=128,c=\" \",y=7,b=256},{m=1,x=14,t=128,c=\" \",y=7,b=1},{m=1,x=15,t=128,c=\" \",y=7,b=1},{m=1,x=16,t=128,c=\" \",y=7,b=1},{m=1,x=17,t=128,c=\" \",y=7,b=128},{m=1,x=18,t=128,c=\" \",y=7,b=1},{m=1,x=20,t=128,c=\" \",y=7,b=1},{m=1,x=21,t=128,c=\" \",y=7,b=128},{m=1,x=22,t=128,c=\" \",y=7,b=256},{m=1,x=23,t=128,c=\" \",y=7,b=256},{m=1,x=24,t=128,c=\" \",y=7,b=1},{m=1,x=10,t=128,c=\" \",y=8,b=1},{m=1,x=11,t=128,c=\" \",y=8,b=128},{m=1,x=12,t=128,c=\" \",y=8,b=256},{m=1,x=13,t=128,c=\" \",y=8,b=256},{m=1,x=14,t=128,c=\" \",y=8,b=1},{m=1,x=16,t=128,c=\" \",y=8,b=1},{m=1,x=17,t=128,c=\" \",y=8,b=128},{m=1,x=18,t=128,c=\" \",y=8,b=1},{m=1,x=20,t=128,c=\" \",y=8,b=1},{m=1,x=21,t=128,c=\" \",y=8,b=128},{m=1,x=22,t=128,c=\" \",y=8,b=256},{m=1,x=23,t=128,c=\" \",y=8,b=256},{m=1,x=24,t=128,c=\" \",y=8,b=1},{m=1,x=10,t=128,c=\" \",y=9,b=1},{m=1,x=11,t=128,c=\" \",y=9,b=128},{m=1,x=12,t=128,c=\" \",y=9,b=256},{m=1,x=13,t=128,c=\" \",y=9,b=256},{m=1,x=14,t=128,c=\" \",y=9,b=1},{m=1,x=16,t=128,c=\" \",y=9,b=1},{m=1,x=17,t=128,c=\" \",y=9,b=128},{m=1,x=18,t=128,c=\" \",y=9,b=1},{m=1,x=20,t=128,c=\" \",y=9,b=1},{m=1,x=21,t=128,c=\" \",y=9,b=128},{m=1,x=22,t=128,c=\" \",y=9,b=256},{m=1,x=23,t=128,c=\" \",y=9,b=256},{m=1,x=24,t=128,c=\" \",y=9,b=1},{m=1,x=10,t=128,c=\" \",y=10,b=1},{m=1,x=11,t=128,c=\" \",y=10,b=128},{m=1,x=12,t=128,c=\" \",y=10,b=256},{m=1,x=13,t=128,c=\" \",y=10,b=256},{m=1,x=14,t=128,c=\" \",y=10,b=1},{m=1,x=16,t=128,c=\" \",y=10,b=1},{m=1,x=17,t=128,c=\" \",y=10,b=128},{m=1,x=18,t=128,c=\" \",y=10,b=1},{m=1,x=20,t=128,c=\" \",y=10,b=1},{m=1,x=21,t=128,c=\" \",y=10,b=128},{m=1,x=22,t=128,c=\" \",y=10,b=256},{m=1,x=23,t=128,c=\" \",y=10,b=256},{m=1,x=24,t=128,c=\" \",y=10,b=1},{m=1,x=10,t=128,c=\" \",y=11,b=1},{m=1,x=11,t=128,c=\" \",y=11,b=128},{m=1,x=12,t=128,c=\" \",y=11,b=256},{m=1,x=13,t=128,c=\" \",y=11,b=256},{m=1,x=14,t=128,c=\" \",y=11,b=1},{m=1,x=16,t=128,c=\" \",y=11,b=1},{m=1,x=17,t=128,c=\" \",y=11,b=128},{m=1,x=18,t=128,c=\" \",y=11,b=1},{m=1,x=20,t=128,c=\" \",y=11,b=1},{m=1,x=21,t=128,c=\" \",y=11,b=128},{m=1,x=22,t=128,c=\" \",y=11,b=256},{m=1,x=23,t=128,c=\" \",y=11,b=256},{m=1,x=24,t=128,c=\" \",y=11,b=1},{m=1,x=10,t=128,c=\" \",y=12,b=1},{m=1,x=11,t=128,c=\" \",y=12,b=128},{m=1,x=12,t=128,c=\" \",y=12,b=256},{m=1,x=13,t=128,c=\" \",y=12,b=256},{m=1,x=14,t=128,c=\" \",y=12,b=1},{m=1,x=16,t=128,c=\" \",y=12,b=1},{m=1,x=17,t=128,c=\" \",y=12,b=128},{m=1,x=18,t=128,c=\" \",y=12,b=1},{m=1,x=20,t=128,c=\" \",y=12,b=1},{m=1,x=21,t=128,c=\" \",y=12,b=128},{m=1,x=22,t=128,c=\" \",y=12,b=256},{m=1,x=23,t=128,c=\" \",y=12,b=256},{m=1,x=24,t=128,c=\" \",y=12,b=1},{m=1,x=10,t=128,c=\" \",y=13,b=1},{m=1,x=11,t=128,c=\" \",y=13,b=128},{m=1,x=12,t=128,c=\" \",y=13,b=256},{m=1,x=13,t=128,c=\" \",y=13,b=256},{m=1,x=14,t=128,c=\" \",y=13,b=1},{m=1,x=16,t=128,c=\" \",y=13,b=1},{m=1,x=17,t=128,c=\" \",y=13,b=128},{m=1,x=18,t=128,c=\" \",y=13,b=1},{m=1,x=20,t=128,c=\" \",y=13,b=1},{m=1,x=21,t=128,c=\" \",y=13,b=128},{m=1,x=22,t=128,c=\" \",y=13,b=256},{m=1,x=23,t=128,c=\" \",y=13,b=256},{m=1,x=24,t=128,c=\" \",y=13,b=1},{m=1,x=10,t=128,c=\" \",y=14,b=1},{m=1,x=11,t=128,c=\" \",y=14,b=128},{m=1,x=12,t=128,c=\" \",y=14,b=256},{m=1,x=13,t=128,c=\" \",y=14,b=256},{m=1,x=14,t=128,c=\" \",y=14,b=1},{m=1,x=16,t=128,c=\" \",y=14,b=1},{m=1,x=17,t=128,c=\" \",y=14,b=128},{m=1,x=18,t=128,c=\" \",y=14,b=1},{m=1,x=19,t=128,c=\" \",y=14,b=1},{m=1,x=20,t=128,c=\" \",y=14,b=1},{m=1,x=21,t=128,c=\" \",y=14,b=128},{m=1,x=22,t=128,c=\" \",y=14,b=256},{m=1,x=23,t=128,c=\" \",y=14,b=256},{m=1,x=24,t=128,c=\" \",y=14,b=1},{m=1,x=10,t=128,c=\" \",y=15,b=1},{m=1,x=11,t=128,c=\" \",y=15,b=128},{m=1,x=12,t=128,c=\" \",y=15,b=256},{m=1,x=13,t=128,c=\" \",y=15,b=256},{m=1,x=14,t=128,c=\" \",y=15,b=1},{m=1,x=16,t=128,c=\" \",y=15,b=1},{m=1,x=17,t=128,c=\" \",y=15,b=128},{m=1,x=18,t=128,c=\" \",y=15,b=256},{m=1,x=19,t=128,c=\" \",y=15,b=128},{m=1,x=20,t=128,c=\" \",y=15,b=128},{m=1,x=21,t=128,c=\" \",y=15,b=128},{m=1,x=22,t=128,c=\" \",y=15,b=256},{m=1,x=23,t=128,c=\" \",y=15,b=256},{m=1,x=24,t=128,c=\" \",y=15,b=1},{m=1,x=10,t=128,c=\" \",y=16,b=1},{m=1,x=11,t=128,c=\" \",y=16,b=128},{m=1,x=12,t=128,c=\" \",y=16,b=256},{m=1,x=13,t=128,c=\" \",y=16,b=256},{m=1,x=14,t=128,c=\" \",y=16,b=1},{m=1,x=16,t=128,c=\" \",y=16,b=1},{m=1,x=17,t=128,c=\" \",y=16,b=128},{m=1,x=18,t=128,c=\" \",y=16,b=256},{m=1,x=19,t=128,c=\" \",y=16,b=256},{m=1,x=20,t=128,c=\" \",y=16,b=256},{m=1,x=21,t=128,c=\" \",y=16,b=256},{m=1,x=22,t=128,c=\" \",y=16,b=256},{m=1,x=23,t=128,c=\" \",y=16,b=256},{m=1,x=24,t=128,c=\" \",y=16,b=1},{m=1,x=10,t=128,c=\" \",y=17,b=1},{m=1,x=11,t=128,c=\" \",y=17,b=128},{m=1,x=12,t=128,c=\" \",y=17,b=256},{m=1,x=13,t=128,c=\" \",y=17,b=256},{m=1,x=14,t=128,c=\" \",y=17,b=1},{m=1,x=16,t=128,c=\" \",y=17,b=1},{m=1,x=17,t=128,c=\" \",y=17,b=128},{m=1,x=18,t=128,c=\" \",y=17,b=256},{m=1,x=19,t=128,c=\" \",y=17,b=256},{m=1,x=20,t=128,c=\" \",y=17,b=256},{m=1,x=21,t=128,c=\" \",y=17,b=256},{m=1,x=22,t=128,c=\" \",y=17,b=256},{m=1,x=23,t=128,c=\" \",y=17,b=256},{m=1,x=24,t=128,c=\" \",y=17,b=1},{m=1,x=10,t=128,c=\" \",y=18,b=1},{m=1,x=11,t=128,c=\" \",y=18,b=1},{m=1,x=12,t=128,c=\" \",y=18,b=1},{m=1,x=13,t=128,c=\" \",y=18,b=1},{m=1,x=14,t=128,c=\" \",y=18,b=1},{m=1,x=16,t=128,c=\" \",y=18,b=1},{m=1,x=17,t=128,c=\" \",y=18,b=1},{m=1,x=18,t=128,c=\" \",y=18,b=1},{m=1,x=19,t=128,c=\" \",y=18,b=1},{m=1,x=20,t=128,c=\" \",y=18,b=1},{m=1,x=21,t=128,c=\" \",y=18,b=1},{m=1,x=22,t=128,c=\" \",y=18,b=1},{m=1,x=23,t=128,c=\" \",y=18,b=1},{m=1,x=24,t=128,c=\" \",y=18,b=1}},{{m=1,x=10,t=128,c=\" \",b=1,y=3},{m=1,x=11,t=128,c=\" \",b=1,y=3},{m=1,x=12,t=128,c=\" \",b=1,y=3},{m=1,x=13,t=128,c=\" \",b=1,y=3},{m=1,x=14,t=128,c=\" \",b=1,y=3},{m=1,x=15,t=128,c=\" \",b=1,y=3},{m=1,x=16,t=128,c=\" \",b=1,y=3},{m=1,x=17,t=128,c=\" \",b=1,y=3},{m=1,x=18,t=128,c=\" \",b=1,y=3},{m=1,x=19,t=128,c=\" \",b=1,y=3},{m=1,x=20,t=128,c=\" \",b=1,y=3},{m=1,x=21,t=128,c=\" \",b=1,y=3},{m=1,x=22,t=128,c=\" \",b=1,y=3},{m=1,x=23,t=128,c=\" \",b=1,y=3},{m=1,x=24,t=128,c=\" \",b=1,y=3},{m=1,x=10,t=128,c=\" \",b=1,y=4},{m=1,x=11,t=128,c=\" \",b=128,y=4},{m=1,x=12,t=128,c=\" \",b=128,y=4},{m=1,x=13,t=128,c=\" \",b=128,y=4},{m=1,x=14,t=128,c=\" \",b=128,y=4},{m=1,x=15,t=128,c=\" \",b=128,y=4},{m=1,x=16,t=128,c=\" \",b=128,y=4},{m=1,x=17,t=128,c=\" \",b=128,y=4},{m=1,x=18,t=128,c=\" \",b=128,y=4},{m=1,x=19,t=128,c=\" \",b=128,y=4},{m=1,x=20,t=128,c=\" \",b=128,y=4},{m=1,x=21,t=128,c=\" \",b=128,y=4},{m=1,x=22,t=128,c=\" \",b=128,y=4},{m=1,x=23,t=128,c=\" \",b=128,y=4},{m=1,x=24,t=128,c=\" \",b=1,y=4},{m=1,x=10,t=128,c=\" \",b=1,y=5},{m=1,x=11,t=128,c=\" \",b=128,y=5},{m=1,x=12,t=128,c=\" \",b=256,y=5},{m=1,x=13,t=128,c=\" \",b=256,y=5},{m=1,x=14,t=128,c=\" \",b=256,y=5},{m=1,x=15,t=128,c=\" \",b=256,y=5},{m=1,x=16,t=128,c=\" \",b=256,y=5},{m=1,x=17,t=128,c=\" \",b=256,y=5},{m=1,x=18,t=128,c=\" \",b=256,y=5},{m=1,x=19,t=128,c=\" \",b=256,y=5},{m=1,x=20,t=128,c=\" \",b=256,y=5},{m=1,x=21,t=128,c=\" \",b=256,y=5},{m=1,x=22,t=128,c=\" \",b=256,y=5},{m=1,x=23,t=128,c=\" \",b=256,y=5},{m=1,x=24,t=128,c=\" \",b=1,y=5},{m=1,x=10,t=128,c=\" \",b=1,y=6},{m=1,x=11,t=128,c=\" \",b=128,y=6},{m=1,x=12,t=128,c=\" \",b=256,y=6},{m=1,x=13,t=128,c=\" \",b=256,y=6},{m=1,x=14,t=128,c=\" \",b=1,y=6},{m=1,x=15,t=128,c=\" \",b=1,y=6},{m=1,x=16,t=128,c=\" \",b=1,y=6},{m=1,x=17,t=128,c=\" \",b=1,y=6},{m=1,x=18,t=128,c=\" \",b=1,y=6},{m=1,x=19,t=128,c=\" \",b=1,y=6},{m=1,x=20,t=128,c=\" \",b=1,y=6},{m=1,x=21,t=128,c=\" \",b=128,y=6},{m=1,x=22,t=128,c=\" \",b=256,y=6},{m=1,x=23,t=128,c=\" \",b=256,y=6},{m=1,x=24,t=128,c=\" \",b=1,y=6},{m=1,x=10,t=128,c=\" \",b=1,y=7},{m=1,x=11,t=128,c=\" \",b=128,y=7},{m=1,x=12,t=128,c=\" \",b=256,y=7},{m=1,x=13,t=128,c=\" \",b=256,y=7},{m=1,x=14,t=128,c=\" \",b=1,y=7},{m=1,x=20,t=128,c=\" \",b=1,y=7},{m=1,x=21,t=128,c=\" \",b=128,y=7},{m=1,x=22,t=128,c=\" \",b=256,y=7},{m=1,x=23,t=128,c=\" \",b=256,y=7},{m=1,x=24,t=128,c=\" \",b=1,y=7},{m=1,x=10,t=128,c=\" \",b=1,y=8},{m=1,x=11,t=128,c=\" \",b=128,y=8},{m=1,x=12,t=128,c=\" \",b=256,y=8},{m=1,x=13,t=128,c=\" \",b=256,y=8},{m=1,x=14,t=128,c=\" \",b=1,y=8},{m=1,x=20,t=128,c=\" \",b=1,y=8},{m=1,x=21,t=128,c=\" \",b=128,y=8},{m=1,x=22,t=128,c=\" \",b=256,y=8},{m=1,x=23,t=128,c=\" \",b=256,y=8},{m=1,x=24,t=128,c=\" \",b=1,y=8},{m=1,x=10,t=128,c=\" \",b=1,y=9},{m=1,x=11,t=128,c=\" \",b=128,y=9},{m=1,x=12,t=128,c=\" \",b=256,y=9},{m=1,x=13,t=128,c=\" \",b=256,y=9},{m=1,x=14,t=128,c=\" \",b=1,y=9},{m=1,x=15,t=128,c=\" \",b=1,y=9},{m=1,x=16,t=128,c=\" \",b=1,y=9},{m=1,x=17,t=128,c=\" \",b=1,y=9},{m=1,x=18,t=128,c=\" \",b=1,y=9},{m=1,x=19,t=128,c=\" \",b=1,y=9},{m=1,x=20,t=128,c=\" \",b=1,y=9},{m=1,x=21,t=128,c=\" \",b=128,y=9},{m=1,x=22,t=128,c=\" \",b=256,y=9},{m=1,x=23,t=128,c=\" \",b=256,y=9},{m=1,x=24,t=128,c=\" \",b=1,y=9},{m=1,x=10,t=128,c=\" \",b=1,y=10},{m=1,x=11,t=128,c=\" \",b=128,y=10},{m=1,x=12,t=128,c=\" \",b=256,y=10},{m=1,x=13,t=128,c=\" \",b=256,y=10},{m=1,x=14,t=128,c=\" \",b=128,y=10},{m=1,x=15,t=128,c=\" \",b=128,y=10},{m=1,x=16,t=128,c=\" \",b=128,y=10},{m=1,x=17,t=128,c=\" \",b=128,y=10},{m=1,x=18,t=128,c=\" \",b=128,y=10},{m=1,x=19,t=128,c=\" \",b=128,y=10},{m=1,x=20,t=128,c=\" \",b=128,y=10},{m=1,x=21,t=128,c=\" \",b=128,y=10},{m=1,x=22,t=128,c=\" \",b=256,y=10},{m=1,x=23,t=128,c=\" \",b=256,y=10},{m=1,x=24,t=128,c=\" \",b=1,y=10},{m=1,x=10,t=128,c=\" \",b=1,y=11},{m=1,x=11,t=128,c=\" \",b=128,y=11},{m=1,x=12,t=128,c=\" \",b=256,y=11},{m=1,x=13,t=128,c=\" \",b=256,y=11},{m=1,x=14,t=128,c=\" \",b=256,y=11},{m=1,x=15,t=128,c=\" \",b=256,y=11},{m=1,x=16,t=128,c=\" \",b=256,y=11},{m=1,x=17,t=128,c=\" \",b=256,y=11},{m=1,x=18,t=128,c=\" \",b=256,y=11},{m=1,x=19,t=128,c=\" \",b=256,y=11},{m=1,x=20,t=128,c=\" \",b=256,y=11},{m=1,x=21,t=128,c=\" \",b=256,y=11},{m=1,x=22,t=128,c=\" \",b=256,y=11},{m=1,x=23,t=128,c=\" \",b=256,y=11},{m=1,x=24,t=128,c=\" \",b=1,y=11},{m=1,x=10,t=128,c=\" \",b=1,y=12},{m=1,x=11,t=128,c=\" \",b=128,y=12},{m=1,x=12,t=128,c=\" \",b=256,y=12},{m=1,x=13,t=128,c=\" \",b=256,y=12},{m=1,x=14,t=128,c=\" \",b=1,y=12},{m=1,x=15,t=128,c=\" \",b=1,y=12},{m=1,x=16,t=128,c=\" \",b=1,y=12},{m=1,x=17,t=128,c=\" \",b=1,y=12},{m=1,x=18,t=128,c=\" \",b=1,y=12},{m=1,x=19,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=1,y=12},{m=1,x=21,t=128,c=\" \",b=128,y=12},{m=1,x=22,t=128,c=\" \",b=256,y=12},{m=1,x=23,t=128,c=\" \",b=256,y=12},{m=1,x=24,t=128,c=\" \",b=1,y=12},{m=1,x=10,t=128,c=\" \",b=1,y=13},{m=1,x=11,t=128,c=\" \",b=128,y=13},{m=1,x=12,t=128,c=\" \",b=256,y=13},{m=1,x=13,t=128,c=\" \",b=256,y=13},{m=1,x=14,t=128,c=\" \",b=1,y=13},{m=1,x=20,t=128,c=\" \",b=1,y=13},{m=1,x=21,t=128,c=\" \",b=128,y=13},{m=1,x=22,t=128,c=\" \",b=256,y=13},{m=1,x=23,t=128,c=\" \",b=256,y=13},{m=1,x=24,t=128,c=\" \",b=1,y=13},{m=1,x=10,t=128,c=\" \",b=1,y=14},{m=1,x=11,t=128,c=\" \",b=128,y=14},{m=1,x=12,t=128,c=\" \",b=256,y=14},{m=1,x=13,t=128,c=\" \",b=256,y=14},{m=1,x=14,t=128,c=\" \",b=1,y=14},{m=1,x=20,t=128,c=\" \",b=1,y=14},{m=1,x=21,t=128,c=\" \",b=128,y=14},{m=1,x=22,t=128,c=\" \",b=256,y=14},{m=1,x=23,t=128,c=\" \",b=256,y=14},{m=1,x=24,t=128,c=\" \",b=1,y=14},{m=1,x=10,t=128,c=\" \",b=1,y=15},{m=1,x=11,t=128,c=\" \",b=128,y=15},{m=1,x=12,t=128,c=\" \",b=256,y=15},{m=1,x=13,t=128,c=\" \",b=256,y=15},{m=1,x=14,t=128,c=\" \",b=1,y=15},{m=1,x=20,t=128,c=\" \",b=1,y=15},{m=1,x=21,t=128,c=\" \",b=128,y=15},{m=1,x=22,t=128,c=\" \",b=256,y=15},{m=1,x=23,t=128,c=\" \",b=256,y=15},{m=1,x=24,t=128,c=\" \",b=1,y=15},{m=1,x=10,t=128,c=\" \",b=1,y=16},{m=1,x=11,t=128,c=\" \",b=128,y=16},{m=1,x=12,t=128,c=\" \",b=256,y=16},{m=1,x=13,t=128,c=\" \",b=256,y=16},{m=1,x=14,t=128,c=\" \",b=1,y=16},{m=1,x=20,t=128,c=\" \",b=1,y=16},{m=1,x=21,t=128,c=\" \",b=128,y=16},{m=1,x=22,t=128,c=\" \",b=256,y=16},{m=1,x=23,t=128,c=\" \",b=256,y=16},{m=1,x=24,t=128,c=\" \",b=1,y=16},{m=1,x=10,t=128,c=\" \",b=1,y=17},{m=1,x=11,t=128,c=\" \",b=128,y=17},{m=1,x=12,t=128,c=\" \",b=256,y=17},{m=1,x=13,t=128,c=\" \",b=256,y=17},{m=1,x=14,t=128,c=\" \",b=1,y=17},{m=1,x=20,t=128,c=\" \",b=1,y=17},{m=1,x=21,t=128,c=\" \",b=128,y=17},{m=1,x=22,t=128,c=\" \",b=256,y=17},{m=1,x=23,t=128,c=\" \",b=256,y=17},{m=1,x=24,t=128,c=\" \",b=1,y=17},{m=1,x=10,t=128,c=\" \",b=1,y=18},{m=1,x=11,t=128,c=\" \",b=1,y=18},{m=1,x=12,t=128,c=\" \",b=1,y=18},{m=1,x=13,t=128,c=\" \",b=1,y=18},{m=1,x=14,t=128,c=\" \",b=1,y=18},{m=1,x=20,t=128,c=\" \",b=1,y=18},{m=1,x=21,t=128,c=\" \",b=1,y=18},{m=1,x=22,t=128,c=\" \",b=1,y=18},{m=1,x=23,t=128,c=\" \",b=1,y=18},{m=1,x=24,t=128,c=\" \",b=1,y=18}},{{m=1,x=10,t=128,c=\" \",b=1,y=3},{m=1,x=11,t=128,c=\" \",b=1,y=3},{m=1,x=12,t=128,c=\" \",b=1,y=3},{m=1,x=13,t=128,c=\" \",b=1,y=3},{m=1,x=14,t=128,c=\" \",b=1,y=3},{m=1,x=15,t=128,c=\" \",b=1,y=3},{m=1,x=16,t=128,c=\" \",b=1,y=3},{m=1,x=17,t=128,c=\" \",b=1,y=3},{m=1,x=18,t=128,c=\" \",b=1,y=3},{m=1,x=19,t=128,c=\" \",b=1,y=3},{m=1,x=20,t=128,c=\" \",b=1,y=3},{m=1,x=21,t=128,c=\" \",b=1,y=3},{m=1,x=22,t=128,c=\" \",b=1,y=3},{m=1,x=23,t=128,c=\" \",b=1,y=3},{m=1,x=24,t=128,c=\" \",b=1,y=3},{m=1,x=10,t=128,c=\" \",b=1,y=4},{m=1,x=11,t=128,c=\" \",b=128,y=4},{m=1,x=12,t=128,c=\" \",b=128,y=4},{m=1,x=13,t=128,c=\" \",b=128,y=4},{m=1,x=14,t=128,c=\" \",b=128,y=4},{m=1,x=15,t=128,c=\" \",b=128,y=4},{m=1,x=16,t=128,c=\" \",b=128,y=4},{m=1,x=17,t=128,c=\" \",b=128,y=4},{m=1,x=18,t=128,c=\" \",b=128,y=4},{m=1,x=19,t=128,c=\" \",b=128,y=4},{m=1,x=20,t=128,c=\" \",b=128,y=4},{m=1,x=21,t=128,c=\" \",b=128,y=4},{m=1,x=22,t=128,c=\" \",b=128,y=4},{m=1,x=23,t=128,c=\" \",b=128,y=4},{m=1,x=24,t=128,c=\" \",b=1,y=4},{m=1,x=10,t=128,c=\" \",b=1,y=5},{m=1,x=11,t=128,c=\" \",b=128,y=5},{m=1,x=12,t=128,c=\" \",b=256,y=5},{m=1,x=13,t=128,c=\" \",b=256,y=5},{m=1,x=14,t=128,c=\" \",b=256,y=5},{m=1,x=15,t=128,c=\" \",b=256,y=5},{m=1,x=16,t=128,c=\" \",b=256,y=5},{m=1,x=17,t=128,c=\" \",b=256,y=5},{m=1,x=18,t=128,c=\" \",b=256,y=5},{m=1,x=19,t=128,c=\" \",b=256,y=5},{m=1,x=20,t=128,c=\" \",b=256,y=5},{m=1,x=21,t=128,c=\" \",b=256,y=5},{m=1,x=22,t=128,c=\" \",b=256,y=5},{m=1,x=23,t=128,c=\" \",b=256,y=5},{m=1,x=24,t=128,c=\" \",b=1,y=5},{m=1,x=10,t=128,c=\" \",b=1,y=6},{m=1,x=11,t=128,c=\" \",b=128,y=6},{m=1,x=12,t=128,c=\" \",b=256,y=6},{m=1,x=13,t=128,c=\" \",b=256,y=6},{m=1,x=14,t=128,c=\" \",b=1,y=6},{m=1,x=15,t=128,c=\" \",b=1,y=6},{m=1,x=16,t=128,c=\" \",b=1,y=6},{m=1,x=17,t=128,c=\" \",b=1,y=6},{m=1,x=18,t=128,c=\" \",b=1,y=6},{m=1,x=19,t=128,c=\" \",b=1,y=6},{m=1,x=20,t=128,c=\" \",b=1,y=6},{m=1,x=21,t=128,c=\" \",b=128,y=6},{m=1,x=22,t=128,c=\" \",b=256,y=6},{m=1,x=23,t=128,c=\" \",b=256,y=6},{m=1,x=24,t=128,c=\" \",b=1,y=6},{m=1,x=10,t=128,c=\" \",b=1,y=7},{m=1,x=11,t=128,c=\" \",b=128,y=7},{m=1,x=12,t=128,c=\" \",b=256,y=7},{m=1,x=13,t=128,c=\" \",b=256,y=7},{m=1,x=14,t=128,c=\" \",b=1,y=7},{m=1,x=20,t=128,c=\" \",b=1,y=7},{m=1,x=21,t=128,c=\" \",b=128,y=7},{m=1,x=22,t=128,c=\" \",b=256,y=7},{m=1,x=23,t=128,c=\" \",b=256,y=7},{m=1,x=24,t=128,c=\" \",b=1,y=7},{m=1,x=10,t=128,c=\" \",b=1,y=8},{m=1,x=11,t=128,c=\" \",b=128,y=8},{m=1,x=12,t=128,c=\" \",b=256,y=8},{m=1,x=13,t=128,c=\" \",b=256,y=8},{m=1,x=14,t=128,c=\" \",b=1,y=8},{m=1,x=20,t=128,c=\" \",b=1,y=8},{m=1,x=21,t=128,c=\" \",b=128,y=8},{m=1,x=22,t=128,c=\" \",b=256,y=8},{m=1,x=23,t=128,c=\" \",b=256,y=8},{m=1,x=24,t=128,c=\" \",b=1,y=8},{m=1,x=10,t=128,c=\" \",b=1,y=9},{m=1,x=11,t=128,c=\" \",b=128,y=9},{m=1,x=12,t=128,c=\" \",b=256,y=9},{m=1,x=13,t=128,c=\" \",b=256,y=9},{m=1,x=14,t=128,c=\" \",b=1,y=9},{m=1,x=15,t=128,c=\" \",b=1,y=9},{m=1,x=16,t=128,c=\" \",b=1,y=9},{m=1,x=17,t=128,c=\" \",b=1,y=9},{m=1,x=18,t=128,c=\" \",b=1,y=9},{m=1,x=19,t=128,c=\" \",b=1,y=9},{m=1,x=20,t=128,c=\" \",b=1,y=9},{m=1,x=21,t=128,c=\" \",b=128,y=9},{m=1,x=22,t=128,c=\" \",b=256,y=9},{m=1,x=23,t=128,c=\" \",b=256,y=9},{m=1,x=24,t=128,c=\" \",b=1,y=9},{m=1,x=10,t=128,c=\" \",b=1,y=10},{m=1,x=11,t=128,c=\" \",b=128,y=10},{m=1,x=12,t=128,c=\" \",b=256,y=10},{m=1,x=13,t=128,c=\" \",b=256,y=10},{m=1,x=14,t=128,c=\" \",b=128,y=10},{m=1,x=15,t=128,c=\" \",b=128,y=10},{m=1,x=16,t=128,c=\" \",b=128,y=10},{m=1,x=17,t=128,c=\" \",b=128,y=10},{m=1,x=18,t=128,c=\" \",b=128,y=10},{m=1,x=19,t=128,c=\" \",b=128,y=10},{m=1,x=20,t=128,c=\" \",b=128,y=10},{m=1,x=21,t=128,c=\" \",b=128,y=10},{m=1,x=22,t=128,c=\" \",b=256,y=10},{m=1,x=23,t=128,c=\" \",b=256,y=10},{m=1,x=24,t=128,c=\" \",b=1,y=10},{m=1,x=10,t=128,c=\" \",b=1,y=11},{m=1,x=11,t=128,c=\" \",b=128,y=11},{m=1,x=12,t=128,c=\" \",b=256,y=11},{m=1,x=13,t=128,c=\" \",b=256,y=11},{m=1,x=14,t=128,c=\" \",b=256,y=11},{m=1,x=15,t=128,c=\" \",b=256,y=11},{m=1,x=16,t=128,c=\" \",b=256,y=11},{m=1,x=17,t=128,c=\" \",b=256,y=11},{m=1,x=18,t=128,c=\" \",b=256,y=11},{m=1,x=19,t=128,c=\" \",b=256,y=11},{m=1,x=20,t=128,c=\" \",b=256,y=11},{m=1,x=21,t=128,c=\" \",b=256,y=11},{m=1,x=22,t=128,c=\" \",b=256,y=11},{m=1,x=23,t=128,c=\" \",b=256,y=11},{m=1,x=24,t=128,c=\" \",b=1,y=11},{m=1,x=10,t=128,c=\" \",b=1,y=12},{m=1,x=11,t=128,c=\" \",b=128,y=12},{m=1,x=12,t=128,c=\" \",b=256,y=12},{m=1,x=13,t=128,c=\" \",b=256,y=12},{m=1,x=14,t=128,c=\" \",b=1,y=12},{m=1,x=15,t=128,c=\" \",b=1,y=12},{m=1,x=16,t=128,c=\" \",b=1,y=12},{m=1,x=17,t=128,c=\" \",b=1,y=12},{m=1,x=18,t=128,c=\" \",b=1,y=12},{m=1,x=19,t=128,c=\" \",b=1,y=12},{m=1,x=20,t=128,c=\" \",b=128,y=12},{m=1,x=21,t=128,c=\" \",b=256,y=12},{m=1,x=22,t=128,c=\" \",b=1,y=12},{m=1,x=23,t=128,c=\" \",b=1,y=12},{m=1,x=24,t=128,c=\" \",b=1,y=12},{m=1,x=10,t=128,c=\" \",b=1,y=13},{m=1,x=11,t=128,c=\" \",b=128,y=13},{m=1,x=12,t=128,c=\" \",b=256,y=13},{m=1,x=13,t=128,c=\" \",b=256,y=13},{m=1,x=14,t=128,c=\" \",b=1,y=13},{m=1,x=19,t=128,c=\" \",b=1,y=13},{m=1,x=20,t=128,c=\" \",b=128,y=13},{m=1,x=21,t=128,c=\" \",b=256,y=13},{m=1,x=22,t=128,c=\" \",b=1,y=13},{m=1,x=10,t=128,c=\" \",b=1,y=14},{m=1,x=11,t=128,c=\" \",b=128,y=14},{m=1,x=12,t=128,c=\" \",b=256,y=14},{m=1,x=13,t=128,c=\" \",b=256,y=14},{m=1,x=14,t=128,c=\" \",b=1,y=14},{m=1,x=19,t=128,c=\" \",b=1,y=14},{m=1,x=20,t=128,c=\" \",b=128,y=14},{m=1,x=21,t=128,c=\" \",b=256,y=14},{m=1,x=22,t=128,c=\" \",b=1,y=14},{m=1,x=23,t=128,c=\" \",b=1,y=14},{m=1,x=24,t=128,c=\" \",b=1,y=14},{m=1,x=10,t=128,c=\" \",b=1,y=15},{m=1,x=11,t=128,c=\" \",b=128,y=15},{m=1,x=12,t=128,c=\" \",b=256,y=15},{m=1,x=13,t=128,c=\" \",b=256,y=15},{m=1,x=14,t=128,c=\" \",b=1,y=15},{m=1,x=19,t=128,c=\" \",b=1,y=15},{m=1,x=20,t=128,c=\" \",b=128,y=15},{m=1,x=21,t=128,c=\" \",b=256,y=15},{m=1,x=22,t=128,c=\" \",b=128,y=15},{m=1,x=23,t=128,c=\" \",b=128,y=15},{m=1,x=24,t=128,c=\" \",b=1,y=15},{m=1,x=10,t=128,c=\" \",b=1,y=16},{m=1,x=11,t=128,c=\" \",b=128,y=16},{m=1,x=12,t=128,c=\" \",b=256,y=16},{m=1,x=13,t=128,c=\" \",b=256,y=16},{m=1,x=14,t=128,c=\" \",b=1,y=16},{m=1,x=19,t=128,c=\" \",b=1,y=16},{m=1,x=20,t=128,c=\" \",b=128,y=16},{m=1,x=21,t=128,c=\" \",b=256,y=16},{m=1,x=22,t=128,c=\" \",b=256,y=16},{m=1,x=23,t=128,c=\" \",b=256,y=16},{m=1,x=24,t=128,c=\" \",b=1,y=16},{m=1,x=10,t=128,c=\" \",b=1,y=17},{m=1,x=11,t=128,c=\" \",b=128,y=17},{m=1,x=12,t=128,c=\" \",b=256,y=17},{m=1,x=13,t=128,c=\" \",b=256,y=17},{m=1,x=14,t=128,c=\" \",b=1,y=17},{m=1,x=19,t=128,c=\" \",b=1,y=17},{m=1,x=20,t=128,c=\" \",b=128,y=17},{m=1,x=21,t=128,c=\" \",b=256,y=17},{m=1,x=22,t=128,c=\" \",b=256,y=17},{m=1,x=23,t=128,c=\" \",b=256,y=17},{m=1,x=24,t=128,c=\" \",b=1,y=17},{m=1,x=10,t=128,c=\" \",b=1,y=18},{m=1,x=11,t=128,c=\" \",b=1,y=18},{m=1,x=12,t=128,c=\" \",b=1,y=18},{m=1,x=13,t=128,c=\" \",b=1,y=18},{m=1,x=14,t=128,c=\" \",b=1,y=18},{m=1,x=19,t=128,c=\" \",b=1,y=18},{m=1,x=20,t=128,c=\" \",b=1,y=18},{m=1,x=21,t=128,c=\" \",b=1,y=18},{m=1,x=22,t=128,c=\" \",b=1,y=18},{m=1,x=23,t=128,c=\" \",b=1,y=18},{m=1,x=24,t=128,c=\" \",b=1,y=18}},{{m=1,b=1,t=128,c=\" \",y=2,x=2},{m=1,b=1,t=128,c=\" \",y=2,x=3},{m=1,b=1,t=128,c=\" \",y=2,x=4},{m=1,b=1,t=128,c=\" \",y=2,x=5},{m=1,b=1,t=128,c=\" \",y=2,x=6},{m=1,b=1,t=128,c=\" \",y=2,x=7},{m=1,b=1,t=128,c=\" \",y=2,x=8},{m=1,b=1,t=128,c=\" \",y=2,x=9},{m=1,b=1,t=128,c=\" \",y=2,x=10},{m=1,b=1,t=128,c=\" \",y=2,x=11},{m=1,b=1,t=128,c=\" \",y=2,x=12},{m=1,b=1,t=128,c=\" \",y=2,x=13},{m=1,b=1,t=128,c=\" \",y=2,x=22},{m=1,b=1,t=128,c=\" \",y=2,x=23},{m=1,b=1,t=128,c=\" \",y=2,x=24},{m=1,b=1,t=128,c=\" \",y=2,x=25},{m=1,b=1,t=128,c=\" \",y=2,x=26},{m=1,b=1,t=128,c=\" \",y=2,x=27},{m=1,b=1,t=128,c=\" \",y=2,x=28},{m=1,b=1,t=128,c=\" \",y=2,x=29},{m=1,b=1,t=128,c=\" \",y=2,x=30},{m=1,b=1,t=128,c=\" \",y=2,x=31},{m=1,b=1,t=128,c=\" \",y=2,x=32},{m=1,b=1,t=128,c=\" \",y=2,x=33},{m=1,b=1,t=128,c=\" \",y=3,x=2},{m=1,b=128,t=128,c=\" \",y=3,x=3},{m=1,b=128,t=128,c=\" \",y=3,x=4},{m=1,b=128,t=128,c=\" \",y=3,x=5},{m=1,b=128,t=128,c=\" \",y=3,x=6},{m=1,b=128,t=128,c=\" \",y=3,x=7},{m=1,b=128,t=128,c=\" \",y=3,x=8},{m=1,b=128,t=128,c=\" \",y=3,x=9},{m=1,b=128,t=128,c=\" \",y=3,x=10},{m=1,b=128,t=128,c=\" \",y=3,x=11},{m=1,b=128,t=128,c=\" \",y=3,x=12},{m=1,b=1,t=128,c=\" \",y=3,x=13},{m=1,b=1,t=128,c=\" \",y=3,x=14},{m=1,b=1,t=128,c=\" \",y=3,x=21},{m=1,b=1,t=128,c=\" \",y=3,x=22},{m=1,b=128,t=128,c=\" \",y=3,x=23},{m=1,b=128,t=128,c=\" \",y=3,x=24},{m=1,b=128,t=128,c=\" \",y=3,x=25},{m=1,b=128,t=128,c=\" \",y=3,x=26},{m=1,b=128,t=128,c=\" \",y=3,x=27},{m=1,b=128,t=128,c=\" \",y=3,x=28},{m=1,b=128,t=128,c=\" \",y=3,x=29},{m=1,b=128,t=128,c=\" \",y=3,x=30},{m=1,b=128,t=128,c=\" \",y=3,x=31},{m=1,b=128,t=128,c=\" \",y=3,x=32},{m=1,b=1,t=128,c=\" \",y=3,x=33},{m=1,b=1,t=128,c=\" \",y=4,x=2},{m=1,b=128,t=128,c=\" \",y=4,x=3},{m=1,b=256,t=128,c=\" \",y=4,x=4},{m=1,b=256,t=128,c=\" \",y=4,x=5},{m=1,b=128,t=128,c=\" \",y=4,x=6},{m=1,b=128,t=128,c=\" \",y=4,x=7},{m=1,b=128,t=128,c=\" \",y=4,x=8},{m=1,b=256,t=128,c=\" \",y=4,x=9},{m=1,b=256,t=128,c=\" \",y=4,x=10},{m=1,b=256,t=128,c=\" \",y=4,x=11},{m=1,b=128,t=128,c=\" \",y=4,x=12},{m=1,b=128,t=128,c=\" \",y=4,x=13},{m=1,b=1,t=128,c=\" \",y=4,x=14},{m=1,b=1,t=128,c=\" \",y=4,x=21},{m=1,b=128,t=128,c=\" \",y=4,x=22},{m=1,b=128,t=128,c=\" \",y=4,x=23},{m=1,b=256,t=128,c=\" \",y=4,x=24},{m=1,b=256,t=128,c=\" \",y=4,x=25},{m=1,b=256,t=128,c=\" \",y=4,x=26},{m=1,b=128,t=128,c=\" \",y=4,x=27},{m=1,b=128,t=128,c=\" \",y=4,x=28},{m=1,b=128,t=128,c=\" \",y=4,x=29},{m=1,b=256,t=128,c=\" \",y=4,x=30},{m=1,b=256,t=128,c=\" \",y=4,x=31},{m=1,b=256,t=128,c=\" \",y=4,x=32},{m=1,b=1,t=128,c=\" \",y=4,x=33},{m=1,b=1,t=128,c=\" \",y=5,x=2},{m=1,b=128,t=128,c=\" \",y=5,x=3},{m=1,b=256,t=128,c=\" \",y=5,x=4},{m=1,b=256,t=128,c=\" \",y=5,x=5},{m=1,b=256,t=128,c=\" \",y=5,x=6},{m=1,b=128,t=128,c=\" \",y=5,x=7},{m=1,b=128,t=128,c=\" \",y=5,x=8},{m=1,b=128,t=128,c=\" \",y=5,x=9},{m=1,b=256,t=128,c=\" \",y=5,x=10},{m=1,b=256,t=128,c=\" \",y=5,x=11},{m=1,b=256,t=128,c=\" \",y=5,x=12},{m=1,b=128,t=128,c=\" \",y=5,x=13},{m=1,b=1,t=128,c=\" \",y=5,x=14},{m=1,b=1,t=128,c=\" \",y=5,x=21},{m=1,b=128,t=128,c=\" \",y=5,x=22},{m=1,b=256,t=128,c=\" \",y=5,x=23},{m=1,b=256,t=128,c=\" \",y=5,x=24},{m=1,b=256,t=128,c=\" \",y=5,x=25},{m=1,b=128,t=128,c=\" \",y=5,x=26},{m=1,b=128,t=128,c=\" \",y=5,x=27},{m=1,b=128,t=128,c=\" \",y=5,x=28},{m=1,b=256,t=128,c=\" \",y=5,x=29},{m=1,b=256,t=128,c=\" \",y=5,x=30},{m=1,b=256,t=128,c=\" \",y=5,x=31},{m=1,b=256,t=128,c=\" \",y=5,x=32},{m=1,b=1,t=128,c=\" \",y=5,x=33},{m=1,b=1,t=128,c=\" \",y=6,x=2},{m=1,b=128,t=128,c=\" \",y=6,x=3},{m=1,b=256,t=128,c=\" \",y=6,x=4},{m=1,b=256,t=128,c=\" \",y=6,x=5},{m=1,b=256,t=128,c=\" \",y=6,x=6},{m=1,b=256,t=128,c=\" \",y=6,x=7},{m=1,b=128,t=128,c=\" \",y=6,x=8},{m=1,b=128,t=128,c=\" \",y=6,x=9},{m=1,b=128,t=128,c=\" \",y=6,x=10},{m=1,b=256,t=128,c=\" \",y=6,x=11},{m=1,b=256,t=128,c=\" \",y=6,x=12},{m=1,b=256,t=128,c=\" \",y=6,x=13},{m=1,b=1,t=128,c=\" \",y=6,x=14},{m=1,b=1,t=128,c=\" \",y=6,x=15},{m=1,b=1,t=128,c=\" \",y=6,x=20},{m=1,b=1,t=128,c=\" \",y=6,x=21},{m=1,b=128,t=128,c=\" \",y=6,x=22},{m=1,b=256,t=128,c=\" \",y=6,x=23},{m=1,b=256,t=128,c=\" \",y=6,x=24},{m=1,b=128,t=128,c=\" \",y=6,x=25},{m=1,b=128,t=128,c=\" \",y=6,x=26},{m=1,b=128,t=128,c=\" \",y=6,x=27},{m=1,b=256,t=128,c=\" \",y=6,x=28},{m=1,b=256,t=128,c=\" \",y=6,x=29},{m=1,b=256,t=128,c=\" \",y=6,x=30},{m=1,b=256,t=128,c=\" \",y=6,x=31},{m=1,b=256,t=128,c=\" \",y=6,x=32},{m=1,b=1,t=128,c=\" \",y=6,x=33},{m=1,b=1,t=128,c=\" \",y=7,x=2},{m=1,b=1,t=128,c=\" \",y=7,x=3},{m=1,b=256,t=128,c=\" \",y=7,x=4},{m=1,b=256,t=128,c=\" \",y=7,x=5},{m=1,b=256,t=128,c=\" \",y=7,x=6},{m=1,b=256,t=128,c=\" \",y=7,x=7},{m=1,b=256,t=128,c=\" \",y=7,x=8},{m=1,b=128,t=128,c=\" \",y=7,x=9},{m=1,b=128,t=128,c=\" \",y=7,x=10},{m=1,b=128,t=128,c=\" \",y=7,x=11},{m=1,b=256,t=128,c=\" \",y=7,x=12},{m=1,b=256,t=128,c=\" \",y=7,x=13},{m=1,b=128,t=128,c=\" \",y=7,x=14},{m=1,b=1,t=128,c=\" \",y=7,x=15},{m=1,b=1,t=128,c=\" \",y=7,x=16},{m=1,b=1,t=128,c=\" \",y=7,x=19},{m=1,b=1,t=128,c=\" \",y=7,x=20},{m=1,b=128,t=128,c=\" \",y=7,x=21},{m=1,b=256,t=128,c=\" \",y=7,x=22},{m=1,b=256,t=128,c=\" \",y=7,x=23},{m=1,b=128,t=128,c=\" \",y=7,x=24},{m=1,b=128,t=128,c=\" \",y=7,x=25},{m=1,b=128,t=128,c=\" \",y=7,x=26},{m=1,b=256,t=128,c=\" \",y=7,x=27},{m=1,b=256,t=128,c=\" \",y=7,x=28},{m=1,b=256,t=128,c=\" \",y=7,x=29},{m=1,b=256,t=128,c=\" \",y=7,x=30},{m=1,b=256,t=128,c=\" \",y=7,x=31},{m=1,b=1,t=128,c=\" \",y=7,x=32},{m=1,b=1,t=128,c=\" \",y=7,x=33},{m=1,b=1,t=128,c=\" \",y=8,x=3},{m=1,b=1,t=128,c=\" \",y=8,x=4},{m=1,b=1,t=128,c=\" \",y=8,x=5},{m=1,b=1,t=128,c=\" \",y=8,x=6},{m=1,b=1,t=128,c=\" \",y=8,x=7},{m=1,b=1,t=128,c=\" \",y=8,x=8},{m=1,b=1,t=128,c=\" \",y=8,x=9},{m=1,b=1,t=128,c=\" \",y=8,x=10},{m=1,b=1,t=128,c=\" \",y=8,x=11},{m=1,b=1,t=128,c=\" \",y=8,x=12},{m=1,b=128,t=128,c=\" \",y=8,x=13},{m=1,b=256,t=128,c=\" \",y=8,x=14},{m=1,b=128,t=128,c=\" \",y=8,x=15},{m=1,b=1,t=128,c=\" \",y=8,x=16},{m=1,b=1,t=128,c=\" \",y=8,x=17},{m=1,b=1,t=128,c=\" \",y=8,x=18},{m=1,b=1,t=128,c=\" \",y=8,x=19},{m=1,b=128,t=128,c=\" \",y=8,x=20},{m=1,b=256,t=128,c=\" \",y=8,x=21},{m=1,b=256,t=128,c=\" \",y=8,x=22},{m=1,b=1,t=128,c=\" \",y=8,x=23},{m=1,b=1,t=128,c=\" \",y=8,x=24},{m=1,b=1,t=128,c=\" \",y=8,x=25},{m=1,b=1,t=128,c=\" \",y=8,x=26},{m=1,b=1,t=128,c=\" \",y=8,x=27},{m=1,b=1,t=128,c=\" \",y=8,x=28},{m=1,b=1,t=128,c=\" \",y=8,x=29},{m=1,b=1,t=128,c=\" \",y=8,x=30},{m=1,b=1,t=128,c=\" \",y=8,x=31},{m=1,b=1,t=128,c=\" \",y=8,x=32},{m=1,b=1,t=128,c=\" \",y=9,x=12},{m=1,b=1,t=128,c=\" \",y=9,x=13},{m=1,b=128,t=128,c=\" \",y=9,x=14},{m=1,b=256,t=128,c=\" \",y=9,x=15},{m=1,b=256,t=128,c=\" \",y=9,x=16},{m=1,b=1,t=128,c=\" \",y=9,x=17},{m=1,b=1,t=128,c=\" \",y=9,x=18},{m=1,b=256,t=128,c=\" \",y=9,x=19},{m=1,b=256,t=128,c=\" \",y=9,x=20},{m=1,b=256,t=128,c=\" \",y=9,x=21},{m=1,b=1,t=128,c=\" \",y=9,x=22},{m=1,b=1,t=128,c=\" \",y=9,x=23},{m=1,b=1,t=128,c=\" \",y=10,x=13},{m=1,b=1,t=128,c=\" \",y=10,x=14},{m=1,b=256,t=128,c=\" \",y=10,x=15},{m=1,b=256,t=128,c=\" \",y=10,x=16},{m=1,b=256,t=128,c=\" \",y=10,x=17},{m=1,b=256,t=128,c=\" \",y=10,x=18},{m=1,b=256,t=128,c=\" \",y=10,x=19},{m=1,b=256,t=128,c=\" \",y=10,x=20},{m=1,b=1,t=128,c=\" \",y=10,x=21},{m=1,b=1,t=128,c=\" \",y=10,x=22},{m=1,b=1,t=128,c=\" \",y=11,x=14},{m=1,b=1,t=128,c=\" \",y=11,x=15},{m=1,b=256,t=128,c=\" \",y=11,x=16},{m=1,b=256,t=128,c=\" \",y=11,x=17},{m=1,b=256,t=128,c=\" \",y=11,x=18},{m=1,b=256,t=128,c=\" \",y=11,x=19},{m=1,b=1,t=128,c=\" \",y=11,x=20},{m=1,b=1,t=128,c=\" \",y=11,x=21},{m=1,b=1,t=128,c=\" \",y=12,x=13},{m=1,b=1,t=128,c=\" \",y=12,x=14},{m=1,b=256,t=128,c=\" \",y=12,x=15},{m=1,b=256,t=128,c=\" \",y=12,x=16},{m=1,b=256,t=128,c=\" \",y=12,x=17},{m=1,b=256,t=128,c=\" \",y=12,x=18},{m=1,b=256,t=128,c=\" \",y=12,x=19},{m=1,b=256,t=128,c=\" \",y=12,x=20},{m=1,b=1,t=128,c=\" \",y=12,x=21},{m=1,b=1,t=128,c=\" \",y=12,x=22},{m=1,b=1,t=128,c=\" \",y=13,x=12},{m=1,b=1,t=128,c=\" \",y=13,x=13},{m=1,b=128,t=128,c=\" \",y=13,x=14},{m=1,b=256,t=128,c=\" \",y=13,x=15},{m=1,b=256,t=128,c=\" \",y=13,x=16},{m=1,b=1,t=128,c=\" \",y=13,x=17},{m=1,b=1,t=128,c=\" \",y=13,x=18},{m=1,b=256,t=128,c=\" \",y=13,x=19},{m=1,b=256,t=128,c=\" \",y=13,x=20},{m=1,b=128,t=128,c=\" \",y=13,x=21},{m=1,b=1,t=128,c=\" \",y=13,x=22},{m=1,b=1,t=128,c=\" \",y=13,x=23},{m=1,b=1,t=128,c=\" \",y=14,x=3},{m=1,b=1,t=128,c=\" \",y=14,x=4},{m=1,b=1,t=128,c=\" \",y=14,x=5},{m=1,b=1,t=128,c=\" \",y=14,x=6},{m=1,b=1,t=128,c=\" \",y=14,x=7},{m=1,b=1,t=128,c=\" \",y=14,x=8},{m=1,b=1,t=128,c=\" \",y=14,x=9},{m=1,b=1,t=128,c=\" \",y=14,x=10},{m=1,b=1,t=128,c=\" \",y=14,x=11},{m=1,b=1,t=128,c=\" \",y=14,x=12},{m=1,b=128,t=128,c=\" \",y=14,x=13},{m=1,b=256,t=128,c=\" \",y=14,x=14},{m=1,b=256,t=128,c=\" \",y=14,x=15},{m=1,b=1,t=128,c=\" \",y=14,x=16},{m=1,b=1,t=128,c=\" \",y=14,x=17},{m=1,b=1,t=128,c=\" \",y=14,x=18},{m=1,b=1,t=128,c=\" \",y=14,x=19},{m=1,b=256,t=128,c=\" \",y=14,x=20},{m=1,b=256,t=128,c=\" \",y=14,x=21},{m=1,b=128,t=128,c=\" \",y=14,x=22},{m=1,b=1,t=128,c=\" \",y=14,x=23},{m=1,b=1,t=128,c=\" \",y=14,x=24},{m=1,b=1,t=128,c=\" \",y=14,x=25},{m=1,b=1,t=128,c=\" \",y=14,x=26},{m=1,b=1,t=128,c=\" \",y=14,x=27},{m=1,b=1,t=128,c=\" \",y=14,x=28},{m=1,b=1,t=128,c=\" \",y=14,x=29},{m=1,b=1,t=128,c=\" \",y=14,x=30},{m=1,b=1,t=128,c=\" \",y=14,x=31},{m=1,b=1,t=128,c=\" \",y=14,x=32},{m=1,b=1,t=128,c=\" \",y=15,x=2},{m=1,b=1,t=128,c=\" \",y=15,x=3},{m=1,b=128,t=128,c=\" \",y=15,x=4},{m=1,b=128,t=128,c=\" \",y=15,x=5},{m=1,b=128,t=128,c=\" \",y=15,x=6},{m=1,b=128,t=128,c=\" \",y=15,x=7},{m=1,b=128,t=128,c=\" \",y=15,x=8},{m=1,b=128,t=128,c=\" \",y=15,x=9},{m=1,b=128,t=128,c=\" \",y=15,x=10},{m=1,b=128,t=128,c=\" \",y=15,x=11},{m=1,b=128,t=128,c=\" \",y=15,x=12},{m=1,b=256,t=128,c=\" \",y=15,x=13},{m=1,b=256,t=128,c=\" \",y=15,x=14},{m=1,b=1,t=128,c=\" \",y=15,x=15},{m=1,b=1,t=128,c=\" \",y=15,x=16},{m=1,b=1,t=128,c=\" \",y=15,x=19},{m=1,b=1,t=128,c=\" \",y=15,x=20},{m=1,b=256,t=128,c=\" \",y=15,x=21},{m=1,b=256,t=128,c=\" \",y=15,x=22},{m=1,b=128,t=128,c=\" \",y=15,x=23},{m=1,b=128,t=128,c=\" \",y=15,x=24},{m=1,b=128,t=128,c=\" \",y=15,x=25},{m=1,b=128,t=128,c=\" \",y=15,x=26},{m=1,b=128,t=128,c=\" \",y=15,x=27},{m=1,b=128,t=128,c=\" \",y=15,x=28},{m=1,b=128,t=128,c=\" \",y=15,x=29},{m=1,b=128,t=128,c=\" \",y=15,x=30},{m=1,b=128,t=128,c=\" \",y=15,x=31},{m=1,b=1,t=128,c=\" \",y=15,x=32},{m=1,b=1,t=128,c=\" \",y=15,x=33},{m=1,b=1,t=128,c=\" \",y=16,x=2},{m=1,b=128,t=128,c=\" \",y=16,x=3},{m=1,b=256,t=128,c=\" \",y=16,x=4},{m=1,b=256,t=128,c=\" \",y=16,x=5},{m=1,b=256,t=128,c=\" \",y=16,x=6},{m=1,b=256,t=128,c=\" \",y=16,x=7},{m=1,b=128,t=128,c=\" \",y=16,x=8},{m=1,b=128,t=128,c=\" \",y=16,x=9},{m=1,b=128,t=128,c=\" \",y=16,x=10},{m=1,b=256,t=128,c=\" \",y=16,x=11},{m=1,b=256,t=128,c=\" \",y=16,x=12},{m=1,b=256,t=128,c=\" \",y=16,x=13},{m=1,b=1,t=128,c=\" \",y=16,x=14},{m=1,b=1,t=128,c=\" \",y=16,x=15},{m=1,b=1,t=128,c=\" \",y=16,x=20},{m=1,b=1,t=128,c=\" \",y=16,x=21},{m=1,b=128,t=128,c=\" \",y=16,x=22},{m=1,b=256,t=128,c=\" \",y=16,x=23},{m=1,b=256,t=128,c=\" \",y=16,x=24},{m=1,b=128,t=128,c=\" \",y=16,x=25},{m=1,b=128,t=128,c=\" \",y=16,x=26},{m=1,b=128,t=128,c=\" \",y=16,x=27},{m=1,b=256,t=128,c=\" \",y=16,x=28},{m=1,b=256,t=128,c=\" \",y=16,x=29},{m=1,b=256,t=128,c=\" \",y=16,x=30},{m=1,b=256,t=128,c=\" \",y=16,x=31},{m=1,b=128,t=128,c=\" \",y=16,x=32},{m=1,b=1,t=128,c=\" \",y=16,x=33},{m=1,b=1,t=128,c=\" \",y=17,x=2},{m=1,b=128,t=128,c=\" \",y=17,x=3},{m=1,b=256,t=128,c=\" \",y=17,x=4},{m=1,b=256,t=128,c=\" \",y=17,x=5},{m=1,b=256,t=128,c=\" \",y=17,x=6},{m=1,b=128,t=128,c=\" \",y=17,x=7},{m=1,b=128,t=128,c=\" \",y=17,x=8},{m=1,b=128,t=128,c=\" \",y=17,x=9},{m=1,b=256,t=128,c=\" \",y=17,x=10},{m=1,b=256,t=128,c=\" \",y=17,x=11},{m=1,b=256,t=128,c=\" \",y=17,x=12},{m=1,b=128,t=128,c=\" \",y=17,x=13},{m=1,b=1,t=128,c=\" \",y=17,x=14},{m=1,b=1,t=128,c=\" \",y=17,x=21},{m=1,b=128,t=128,c=\" \",y=17,x=22},{m=1,b=256,t=128,c=\" \",y=17,x=23},{m=1,b=256,t=128,c=\" \",y=17,x=24},{m=1,b=256,t=128,c=\" \",y=17,x=25},{m=1,b=128,t=128,c=\" \",y=17,x=26},{m=1,b=128,t=128,c=\" \",y=17,x=27},{m=1,b=128,t=128,c=\" \",y=17,x=28},{m=1,b=256,t=128,c=\" \",y=17,x=29},{m=1,b=256,t=128,c=\" \",y=17,x=30},{m=1,b=256,t=128,c=\" \",y=17,x=31},{m=1,b=256,t=128,c=\" \",y=17,x=32},{m=1,b=1,t=128,c=\" \",y=17,x=33},{m=1,b=1,t=128,c=\" \",y=18,x=2},{m=1,b=128,t=128,c=\" \",y=18,x=3},{m=1,b=256,t=128,c=\" \",y=18,x=4},{m=1,b=256,t=128,c=\" \",y=18,x=5},{m=1,b=128,t=128,c=\" \",y=18,x=6},{m=1,b=128,t=128,c=\" \",y=18,x=7},{m=1,b=128,t=128,c=\" \",y=18,x=8},{m=1,b=256,t=128,c=\" \",y=18,x=9},{m=1,b=256,t=128,c=\" \",y=18,x=10},{m=1,b=256,t=128,c=\" \",y=18,x=11},{m=1,b=128,t=128,c=\" \",y=18,x=12},{m=1,b=128,t=128,c=\" \",y=18,x=13},{m=1,b=1,t=128,c=\" \",y=18,x=14},{m=1,b=1,t=128,c=\" \",y=18,x=21},{m=1,b=128,t=128,c=\" \",y=18,x=22},{m=1,b=128,t=128,c=\" \",y=18,x=23},{m=1,b=256,t=128,c=\" \",y=18,x=24},{m=1,b=256,t=128,c=\" \",y=18,x=25},{m=1,b=256,t=128,c=\" \",y=18,x=26},{m=1,b=128,t=128,c=\" \",y=18,x=27},{m=1,b=128,t=128,c=\" \",y=18,x=28},{m=1,b=128,t=128,c=\" \",y=18,x=29},{m=1,b=256,t=128,c=\" \",y=18,x=30},{m=1,b=256,t=128,c=\" \",y=18,x=31},{m=1,b=256,t=128,c=\" \",y=18,x=32},{m=1,b=1,t=128,c=\" \",y=18,x=33},{m=1,b=1,t=128,c=\" \",y=19,x=2},{m=1,b=128,t=128,c=\" \",y=19,x=3},{m=1,b=256,t=128,c=\" \",y=19,x=4},{m=1,b=128,t=128,c=\" \",y=19,x=5},{m=1,b=128,t=128,c=\" \",y=19,x=6},{m=1,b=128,t=128,c=\" \",y=19,x=7},{m=1,b=256,t=128,c=\" \",y=19,x=8},{m=1,b=256,t=128,c=\" \",y=19,x=9},{m=1,b=256,t=128,c=\" \",y=19,x=10},{m=1,b=128,t=128,c=\" \",y=19,x=11},{m=1,b=128,t=128,c=\" \",y=19,x=12},{m=1,b=1,t=128,c=\" \",y=19,x=13},{m=1,b=1,t=128,c=\" \",y=19,x=14},{m=1,b=1,t=128,c=\" \",y=19,x=21},{m=1,b=1,t=128,c=\" \",y=19,x=22},{m=1,b=128,t=128,c=\" \",y=19,x=23},{m=1,b=128,t=128,c=\" \",y=19,x=24},{m=1,b=256,t=128,c=\" \",y=19,x=25},{m=1,b=256,t=128,c=\" \",y=19,x=26},{m=1,b=128,t=128,c=\" \",y=19,x=27},{m=1,b=128,t=128,c=\" \",y=19,x=28},{m=1,b=128,t=128,c=\" \",y=19,x=29},{m=1,b=128,t=128,c=\" \",y=19,x=30},{m=1,b=256,t=128,c=\" \",y=19,x=31},{m=1,b=256,t=128,c=\" \",y=19,x=32},{m=1,b=1,t=128,c=\" \",y=19,x=33},{m=1,b=1,t=128,c=\" \",y=20,x=2},{m=1,b=1,t=128,c=\" \",y=20,x=3},{m=1,b=1,t=128,c=\" \",y=20,x=4},{m=1,b=1,t=128,c=\" \",y=20,x=5},{m=1,b=1,t=128,c=\" \",y=20,x=6},{m=1,b=1,t=128,c=\" \",y=20,x=7},{m=1,b=1,t=128,c=\" \",y=20,x=8},{m=1,b=1,t=128,c=\" \",y=20,x=9},{m=1,b=1,t=128,c=\" \",y=20,x=10},{m=1,b=1,t=128,c=\" \",y=20,x=11},{m=1,b=1,t=128,c=\" \",y=20,x=12},{m=1,b=1,t=128,c=\" \",y=20,x=13},{m=1,b=1,t=128,c=\" \",y=20,x=22},{m=1,b=1,t=128,c=\" \",y=20,x=23},{m=1,b=1,t=128,c=\" \",y=20,x=24},{m=1,b=1,t=128,c=\" \",y=20,x=25},{m=1,b=1,t=128,c=\" \",y=20,x=26},{m=1,b=1,t=128,c=\" \",y=20,x=27},{m=1,b=1,t=128,c=\" \",y=20,x=28},{m=1,b=1,t=128,c=\" \",y=20,x=29},{m=1,b=1,t=128,c=\" \",y=20,x=30},{m=1,b=1,t=128,c=\" \",y=20,x=31},{m=1,b=1,t=128,c=\" \",y=20,x=32},{m=1,b=1,t=128,c=\" \",y=20,x=33}}}",
162
  },
163
  pain = {
164
    "--[[",
165
    "	PAIN picture editor for ComputerCraft",
166
    "	Get it with",
167
    "	 pastebin get wJQ7jav0 pain",
168
    "	 std pb wJQ7jav0 pain",
169
    "     std ld pain pain",
170
    "	",
171
    "	This is a stable release. You fool!",
172
    "--]]",
173
    "",
174
    "local displayHelp = function()",
175
    "	local progname = fs.getName(shell.getRunningProgram())",
176
    "	print(progname..\" <filename>\")",
177
    "	print(\"Press F1 in program for more.\")",
178
    "end",
179
    "",
180
    "local pMode = 0",
181
    "",
182
    "local tArg = {...}",
183
    "if (not tArg[1]) and shell then",
184
    "	return displayHelp()",
185
    "end",
186
    "",
187
    "if tArg[2] == \"view\" then",
188
    "	pMode = 1",
189
    "elseif tArg[2] == \"moo\" then",
190
    "	return print(\"This PAIN does not have Super Cow Powers.\")",
191
    "end",
192
    "",
193
    "local fileName",
194
    "if not term.isColor() then",
195
    "	error(\"Only for Advanced computers\")",
196
    "end",
197
    "local barmsg = \"Press F1 for help.\"",
198
    "local tse = textutils.serialise",
199
    "local tun = textutils.unserialise",
200
    "local paintEncoded",
201
    "local lastPaintEncoded",
202
    "local frame = 1",
203
    "local doRender = false",
204
    "local metaHistory = {}",
205
    "local bepimode = false      --this is a family-friendly program! now stand still while I murder you",
206
    "local evenDrawGrid = true   --will you evenDraw(the)Grid ?",
207
    "local renderBlittle = false --whether or not to render all in blittle",
208
    "local firstTerm, blittleTerm = term.current()",
209
    "local firstBG = term.getBackgroundColor()",
210
    "local firstTX = term.getTextColor()",
211
    "",
212
    "local grid",
213
    "",
214
    "local yield = function()",
215
    "	os.queueEvent(\"yield\")",
216
    "	os.pullEvent(\"yield\")",
217
    "end",
218
    "",
219
    "local paint = {",
220
    "	scrollX = 0,",
221
    "	scrollY = 0,",
222
    "	t = colors.gray,",
223
    "	b = colors.white,",
224
    "	m = 1,	--in case you want to use PAIN as a level editor or something",
225
    "	c = \" \",",
226
    "	doGray = false,",
227
    "}",
228
    "",
229
    "local scr_x, scr_y = term.getSize()",
230
    "local scrollX, scrollY = 0, 0",
231
    "",
232
    "local keysDown = {}",
233
    "local miceDown = {}",
234
    "",
235
    "local doRenderBar = 1 -- 1 and 0. Not true or false",
236
    "",
237
    "local fixstr = function(str)",
238
    "	return str:gsub(\"\\\\(%d%d%d)\",string.char)",
239
    "end",
240
    "",
241
    "local choice = function(input,breakkeys)",
242
    "	repeat",
243
    "		event, key = os.pullEvent(\"key\")",
244
    "		if type(key) == \"number\" then key = keys.getName(key) end",
245
    "		if key == nil then key = \" \" end",
246
    "		if type(breakkeys) == \"table\" then",
247
    "			for a = 1, #breakkeys do",
248
    "				if key == breakkeys[a] then",
249
    "					return \"\"",
250
    "				end",
251
    "			end",
252
    "		end",
253
    "	until string.find(input, key)",
254
    "	return key",
255
    "end",
256
    "local explode = function(div,str)",
257
    "    if (div=='') then return false end",
258
    "    local pos,arr = 0,{}",
259
    "    for st,sp in function() return string.find(str,div,pos,true) end do",
260
    "        table.insert(arr,str:sub(pos,st-1))",
261
    "        pos = sp + 1",
262
    "    end",
263
    "    table.insert(arr,str:sub(pos))",
264
    "    return arr",
265
    "end",
266
    "",
267
    "local function cutString(max_line_length, str) --from stack overflow",
268
    "   local lines = {}",
269
    "   local line",
270
    "   str:gsub('(%s*)(%S+)', ",
271
    "      function(spc, word) ",
272
    "         if not line or #line + #spc + #word > max_line_length then",
273
    "            table.insert(lines, line)",
274
    "            line = word",
275
    "         else",
276
    "            line = line..spc..word",
277
    "         end",
278
    "      end",
279
    "   )",
280
    "   table.insert(lines, line)",
281
    "   return lines",
282
    "end",
283
    "",
284
    "local cutUp = function(len,tbl)",
285
    "	local output = {}",
286
    "	local e = 0",
287
    "	local s",
288
    "	for a = 1, #tbl do",
289
    "		if #(tbl[a]:gsub(\" \",\"\")) == 0 then",
290
    "			s = {\"\"}",
291
    "		else",
292
    "			s = cutString(len,tbl[a])",
293
    "		end",
294
    "		for b = 1, #s do",
295
    "			table.insert(output,s[b])",
296
    "		end",
297
    "	end",
298
    "	return output",
299
    "end",
300
    "",
301
    "local getEvents = function(...)",
302
    "	local output",
303
    "	while true do",
304
    "		output = {os.pullEvent()}",
305
    "		for a = 1, #arg do",
306
    "			if type(arg[a]) == \"boolean\" then",
307
    "				if doRender == arg[a] then",
308
    "					return {}",
309
    "				end",
310
    "			elseif output[1] == arg[a] then",
311
    "				return unpack(output)",
312
    "			end",
313
    "		end",
314
    "	end",
315
    "end",
316
    "",
317
    "local sanitize = function(sani,tize)",
318
    "	local _,x = string.find(sani,tize)",
319
    "	if x then",
320
    "		return sani:sub(x+1)",
321
    "	else",
322
    "		return sani",
323
    "	end",
324
    "end",
325
    "local ro = function(input, max)",
326
    "	return math.floor(input % max)",
327
    "end",
328
    "",
329
    "local guiHelp = function()",
330
    "	term.redirect(firstTerm)",
331
    "	scr_x, scr_y = term.current().getSize()",
332
    "	local _helpText = [[",
333
    "",
334
    " 'PAIN' Help Page",
335
    "Programmed by LDDestroier/EldidiStroyrr",
336
    "",
337
    "(use UP/DOWN or scrollwheel, exit with Q)",
338
    "If you want to use PAIN to its full capacity, then READ EVERYTHING HERE! It's not TOO long, and it's completely worth it!",
339
    "",
340
    "Syntax:",
341
    ">pain <filename> [view]",
342
    "",
343
    "[view]: disable all writing capability to view a file",
344
    "",
345
    "You can see what colors are selected based on the word \"PAIN\" on the hotbar.",
346
    "",
347
    "Hotkeys:",
348
    " left/right ctrl: toggle the menu",
349
    "",
350
    " left click:",
351
    "  +shift = drag and let go to make a line",
352
    "  -alone = place pixel",
353
    "",
354
    " right click: delete pixel",
355
    "",
356
    " middle click OR \"t\": place text down with current colors",
357
    "",
358
    " \"[\" or mouse scroll down:",
359
    "  +shift = change to previous text color",
360
    "  -alone = change to previous background color",
361
    "",
362
    " \"]\" or mouse scroll up:",
363
    "  +shift = change to next text color",
364
    "  -alone = change to next background color",
365
    "",
366
    " spacebar:",
367
    "  +shift = toggle grid",
368
    "  -alone = toggle bar visibility",
369
    "",
370
    " arrowkeys:",
371
    "  +shift = move entire picture",
372
    "  +tab = move one pixel at a time",
373
    "  -alone = looks around the canvas smoothly",
374
    "",
375
    " \"+\" (or equals):",
376
    "  +left alt = swap the current frame with the next frame",
377
    "  -alone = change to next frame",
378
    "",
379
    " \"-\":",
380
    "  +left alt = swap the current frame with the previous frame",
381
    "  -alone = change to previous frame",
382
    "",
383
    " \"a\": set the coordinates to 0,0",
384
    "",
385
    " \"b\": toggle redirect to blittle, to preview in teletext characters",
386
    "",
387
    " \"c\": input coordinates to move the canvas to",
388
    "",
389
    " \"g\": toggle grayscale mode. everything is in shades of gray. if you Save, it saves in grayscale.",
390
    "",
391
    " \"f\":",
392
    "  +shift = fill all empty pixels with background color",
393
    "  -alone = absolutely nothing",
394
    "",
395
    " \"m\": set metadata for pixels (for game makers, otherwise safe to ignore)",
396
    "",
397
    "",
398
    " Le Menu (access with CTRL):",
399
    "",
400
    " -left click on a menu item to select it.",
401
    " -if you click on the menubar, let go on an option to select it.",
402
    "",
403
    " \"Save\"",
404
    " Saves all frames to a specially formatted PAIN paint file. The format PAIN uses is very inefficient despite my best efforts, so Export if you don't use text or multiple frame.",
405
    "",
406
    " \"Export\"",
407
    " Exports current frame to the basic paint format, which doesn't save text, but is WAY more space-efficient. Specify a path, too.",
408
    "",
409
    " \"Del. Frame\"",
410
    " Deletes the current frame. Tells you off if you try to delete the only frame.",
411
    "",
412
    " \"Clear\"",
413
    " Deletes all pixels on the current frame.",
414
    "",
415
    " \"Exit\"",
416
    " Durr I dunno, I think it exits.",
417
    "",
418
    "",
419
    "I hope my PAIN causes you joy.",
420
    "]]",
421
    "	_helpText = explode(\"\\n\",_helpText)",
422
    "	helpText = cutUp(scr_x,_helpText)",
423
    "	local helpscroll = 0",
424
    "	term.setBackgroundColor(colors.gray)",
425
    "	term.setTextColor(colors.white)",
426
    "	term.clear()",
427
    "	local evt, key",
428
    "	while true do",
429
    "		term.clear()",
430
    "		for a = 1, scr_y do",
431
    "			term.setCursorPos(1,a)",
432
    "			term.clearLine()",
433
    "			term.write(helpText[a-helpscroll] or \"\")",
434
    "		end",
435
    "		repeat",
436
    "			evt,key = os.pullEvent()",
437
    "		until evt == \"key\" or evt == \"mouse_scroll\"",
438
    "		if evt == \"key\" then",
439
    "			if key == keys.up then",
440
    "				helpscroll = helpscroll + 1",
441
    "			elseif key == keys.down then",
442
    "				helpscroll = helpscroll - 1",
443
    "			elseif key == keys.pageUp then",
444
    "				helpscroll = helpscroll + scr_y",
445
    "			elseif key == keys.pageDown then",
446
    "				helpscroll = helpscroll - scr_y",
447
    "			elseif (key == keys.q) or (key == keys.space) then",
448
    "				doRender = true",
449
    "				if renderBlittle then term.redirect(blittleTerm) end",
450
    "				scr_x, scr_y = term.current().getSize()",
451
    "				return",
452
    "			end",
453
    "		elseif evt == \"mouse_scroll\" then",
454
    "			helpscroll = helpscroll - key",
455
    "		end",
456
    "		if helpscroll > 0 then",
457
    "			helpscroll = 0",
458
    "		elseif helpscroll < -(#helpText-(scr_y-3)) then",
459
    "			helpscroll = -(#helpText-(scr_y-3))",
460
    "		end",
461
    "	end",
462
    "end",
463
    "",
464
    "local tableRemfind = function(tbl, str)",
465
    "	local out = tbl",
466
    "	for a = 1, #tbl do",
467
    "		if tbl[a] == str then",
468
    "			table.remove(out,a)",
469
    "			return out,a",
470
    "		end",
471
    "	end",
472
    "	return {}",
473
    "end",
474
    "",
475
    "local stringShift = function(str,amt)",
476
    "	return str:sub(ro(amt-1,#str)+1)..str:sub(1,ro(amt-1,#str))",
477
    "end",
478
    "",
479
    "local deepCopy",
480
    "deepCopy = function(obj)",
481
    "	if type(obj) ~= 'table' then return obj end",
482
    "	local res = {}",
483
    "	for k, v in pairs(obj) do res[deepCopy(k)] = deepCopy(v) end",
484
    "	return res",
485
    "end",
486
    "",
487
    "local renderBottomBar = function(txt)",
488
    "	term.setCursorPos(1,scr_y)",
489
    "	term.setBackgroundColor(colors.lightGray)",
490
    "	term.setTextColor(colors.black)",
491
    "	term.clearLine()",
492
    "	term.write(txt)",
493
    "end",
494
    "",
495
    "local bottomPrompt = function(txt,history,cho,breakkeys)",
496
    "	renderBottomBar(txt)",
497
    "	local out",
498
    "	sleep(0)",
499
    "	if cho then",
500
    "		out = choice(cho,breakkeys)",
501
    "	else",
502
    "		out = read(_,history)",
503
    "	end",
504
    "	return out",
505
    "end",
506
    "",
507
    "local getDotsInLine = function( startX, startY, endX, endY ) --stolen from the paintutils API...hehehe",
508
    "    local out = {}",
509
    "    ",
510
    "    startX = math.floor(startX)",
511
    "    startY = math.floor(startY)",
512
    "    endX = math.floor(endX)",
513
    "    endY = math.floor(endY)",
514
    "",
515
    "    if startX == endX and startY == endY then",
516
    "        out = {{x=startX,y=startY}}",
517
    "        return out",
518
    "    end",
519
    "    ",
520
    "    local minX = math.min( startX, endX )",
521
    "    if minX == startX then",
522
    "        minY = startY",
523
    "        maxX = endX",
524
    "        maxY = endY",
525
    "    else",
526
    "        minY = endY",
527
    "        maxX = startX",
528
    "        maxY = startY",
529
    "    end",
530
    "        ",
531
    "    local xDiff = maxX - minX",
532
    "    local yDiff = maxY - minY",
533
    "            ",
534
    "    if xDiff > math.abs(yDiff) then",
535
    "        local y = minY",
536
    "        local dy = yDiff / xDiff",
537
    "        for x=minX,maxX do",
538
    "            table.insert(out,{x=x,y=math.floor(y+0.5)})",
539
    "            y = y + dy",
540
    "        end",
541
    "    else",
542
    "        local x = minX",
543
    "        local dx = xDiff / yDiff",
544
    "        if maxY >= minY then",
545
    "            for y=minY,maxY do",
546
    "                table.insert(out,{x=math.floor(x+0.5),y=y})",
547
    "                x = x + dx",
548
    "            end",
549
    "        else",
550
    "            for y=minY,maxY,-1 do",
551
    "                table.insert(out,{x=math.floor(x+0.5),y=y})",
552
    "                x = x - dx",
553
    "            end",
554
    "        end",
555
    "    end",
556
    "    return out",
557
    "end",
558
    "",
559
    "local movePaintEncoded = function(pe,xdiff,ydiff)",
560
    "	local outpootis = deepCopy(pe)",
561
    "	for a = 1, #outpootis do",
562
    "		outpootis[a].x = outpootis[a].x+xdiff",
563
    "		outpootis[a].y = outpootis[a].y+ydiff",
564
    "	end",
565
    "	return outpootis",
566
    "end",
567
    "",
568
    "local clearRedundant = function(dots)",
569
    "	local input = {}",
570
    "	local pheight = 0",
571
    "	local pwidth = 0",
572
    "	for a = 1, #dots do",
573
    "		if dots[a].y > pheight then",
574
    "			pheight = dots[a].y",
575
    "		end",
576
    "		if dots[a].x > pwidth then",
577
    "			pwidth = dots[a].x",
578
    "		end",
579
    "	end",
580
    "	for a = 1, #dots do",
581
    "		if not input[dots[a].y] then input[dots[a].y] = {} end",
582
    "		input[dots[a].y][dots[a].x] = dots[a]",
583
    "	end",
584
    "	local output = {}",
585
    "	local frame = 0",
586
    "	for y = 1, pheight do",
587
    "		for x = 1, pwidth do",
588
    "			if input[y] then",
589
    "				if input[y][x] then",
590
    "					table.insert(output,input[y][x])",
591
    "				end",
592
    "			end",
593
    "			if frame >= 50 then",
594
    "				--yield()",
595
    "				frame = 0",
596
    "			end",
597
    "		end",
598
    "	end",
599
    "	return output",
600
    "end",
601
    "",
602
    "local grayOut = function(color)",
603
    "	local c = deepCopy(_G.colors)",
604
    "	local grays = {",
605
    "		[c.white] = c.white,",
606
    "		[c.orange] = c.lightGray,",
607
    "		[c.magenta] = c.lightGray,",
608
    "		[c.lightBlue] = c.lightGray,",
609
    "		[c.yellow] = c.white,",
610
    "		[c.lime] = c.lightGray,",
611
    "		[c.pink] = c.lightGray,",
612
    "		[c.gray] = c.gray,",
613
    "		[c.lightGray] = c.lightGray,",
614
    "		[c.cyan] = c.lightGray,",
615
    "		[c.purple] = c.gray,",
616
    "		[c.blue] = c.gray,",
617
    "		[c.brown] = c.gray,",
618
    "		[c.green] = c.lightGray,",
619
    "		[c.red] = c.gray,",
620
    "		[c.black] = c.black,",
621
    "	}",
622
    "	local newColor = grays[color] or 1",
623
    "	return newColor",
624
    "end",
625
    "",
626
    "local getOnscreenCoords = function(tbl,_x,_y)",
627
    "	local screenTbl = {}",
628
    "	for a = 1, #tbl do",
629
    "		if tbl[a].x+paint.scrollX > 0 and tbl[a].x+paint.scrollX <= scr_x then",
630
    "			if tbl[a].y+paint.scrollY > 0 and tbl[a].y+paint.scrollY <= scr_y then",
631
    "				table.insert(screenTbl,{tbl[a].x+paint.scrollX,tbl[a].y+paint.scrollY})",
632
    "			end",
633
    "		end",
634
    "	end",
635
    "	if not _x and _y then",
636
    "		return screenTbl",
637
    "	else",
638
    "		for a = 1, #screenTbl do",
639
    "			if screenTbl[a][1] == _x and screenTbl[a][2] == _y then",
640
    "				return true",
641
    "			end",
642
    "		end",
643
    "		return false",
644
    "	end",
645
    "end",
646
    "",
647
    "local fillTool = function(info,cx,cy,color,layer) --takes a frame, not the whole paintEncoded",
648
    "	local x,y",
649
    "	local output = {}",
650
    "	for a = 1, #info do",
651
    "		if (info[a].x == cx) and (info[a].y == cy) then",
652
    "			x = cx",
653
    "			y = cy",
654
    "			replaceColor = info[a].b",
655
    "			break",
656
    "		end",
657
    "	end",
658
    "	if not x and y then",
659
    "		return",
660
    "	end",
661
    "	if color == replaceColor then",
662
    "		return",
663
    "	end",
664
    "	table.insert(output,{",
665
    "		[\"x\"] = x,",
666
    "		[\"y\"] = y,",
667
    "		[\"b\"] = color,",
668
    "		[\"t\"] = color,",
669
    "		[\"c\"] = \" \",",
670
    "		[\"m\"] = paint.m",
671
    "	})",
672
    "	local loops = 0",
673
    "	local tAffectedPoints = {",
674
    "		[1] = {",
675
    "			x = x+tTerm.scroll.x,",
676
    "			z = z+tTerm.scroll.z",
677
    "		}",
678
    "	}",
679
    "	while #tAffectedPoints > 0 do",
680
    "		if loops%200 == 0 then",
681
    "			sleep(0.05)",
682
    "		end",
683
    "		for i=-1,1,2 do",
684
    "			local x = tAffectedPoints[1][\"x\"]+i",
685
    "			local z = tAffectedPoints[1][\"z\"]",
686
    "			if tBlueprint[layer][x][z] == replaceColor and x >= tTerm.viewable.sX and x <= tTerm.viewable.eX and z >= tTerm.viewable.sZ and z <= tTerm.viewable.eZ then",
687
    "				drawPoint(x,z,color,layer,true,true)",
688
    "				table.insert(tAffectedPoints,{[\"x\"] = x,[\"z\"] = z})",
689
    "			end",
690
    "			x = tAffectedPoints[1][\"x\"]",
691
    "			z = tAffectedPoints[1][\"z\"]+i",
692
    "			if tBlueprint[layer][x][z] == replaceColor and x >= tTerm.viewable.sX and x <= tTerm.viewable.eX and z >= tTerm.viewable.sZ and z <= tTerm.viewable.eZ then",
693
    "				drawPoint(x,z,color,layer,true,true)",
694
    "				table.insert(tAffectedPoints,{[\"x\"] = x,[\"z\"] = z})",
695
    "			end",
696
    "		end",
697
    "		table.remove(tAffectedPoints,1)",
698
    "		loops = loops+1",
699
    "	end",
700
    "end",
701
    "",
702
    "local saveFile = function(path,info)",
703
    "	local output = {}",
704
    "	for a = 1, #info do",
705
    "		output[a] = clearRedundant(info[a])",
706
    "		if a % 8 == 0 then yield() end",
707
    "	end",
708
    "	local fileout = textutils.serialize(output):gsub(\"  \",\"\"):gsub(\"\\n\",\"\"):gsub(\" = \",\"=\"):gsub(\",}\",\"}\")",
709
    "	if #fileout >= fs.getFreeSpace(fs.getDir(path)) then",
710
    "		barmsg = \"Not enough space.\"",
711
    "		return",
712
    "	end",
713
    "	local file = fs.open(path,\"w\")",
714
    "	file.write(fileout)",
715
    "	file.close()",
716
    "end",
717
    "local renderBar = function(msg,dontSetVisible)",
718
    "	local tsv = term.current().setVisible",
719
    "	if (doRenderBar == 0) or renderBlittle then return end",
720
    "	if tsv and (not dontSetVisible) then tsv(false) end",
721
    "	term.setCursorPos(1,scr_y)",
722
    "	term.setBackgroundColor(colors.lightGray)",
723
    "	term.setTextColor(colors.black)",
724
    "	term.clearLine()",
725
    "	term.setBackgroundColor(paint.b)",
726
    "	term.setTextColor(paint.t)",
727
    "	term.setCursorPos(2,scr_y)",
728
    "	term.write(\"PAIN\")",
729
    "	term.setBackgroundColor(colors.lightGray)",
730
    "	term.setTextColor(colors.black)",
731
    "	term.setCursorPos(7,scr_y)",
732
    "	term.write(msg..\" Frame: \"..frame..\"/\"..#paintEncoded)",
733
    "	term.write(\" (X:\"..paint.scrollX..\" Y:\"..paint.scrollY..\")\")",
734
    "	if tsv and (not dontSetVisible) then tsv(true) end",
735
    "end",
736
    "",
737
    "local rendback = {",
738
    "	b = colors.black,",
739
    "	t = colors.gray,",
740
    "}",
741
    "",
742
    "local getTablePaint = function(pe)",
743
    "	local output = {}",
744
    "	for a = 1, #pe do",
745
    "		if not output[pe[a].y] then output[pe[a].y] = {} end",
746
    "		output[pe[a].y][pe[a].x] = pe[a]",
747
    "	end",
748
    "	return output",
749
    "end",
750
    "",
751
    "local renderPainyThings = function(xscroll,yscroll,doGrid)",
752
    "	if bepimode then",
753
    "		grid = {",
754
    "			\"Bepis\",",
755
    "			\"episB\",",
756
    "			\"pisBe\",",
757
    "			\"isBep\",",
758
    "			\"sBepi\",",
759
    "		}",
760
    "	else",
761
    "		grid = {",
762
    "			\"%%..\",",
763
    "			\"%%..\",",
764
    "			\"%%..\",",
765
    "			\"..%%\",",
766
    "			\"..%%\",",
767
    "			\"..%%\",",
768
    "		}",
769
    "	end",
770
    "	term.setBackgroundColor(rendback.b)",
771
    "	term.setTextColor(rendback.t)",
772
    "	local badchar = \"/\"",
773
    "	local blittlelabel = \"blittle max\"",
774
    "	local screenlabel = \"screen max\"",
775
    "	if doGrid then",
776
    "		for y = 1, scr_y-(renderBlittle and 0 or doRenderBar) do",
777
    "			term.setCursorPos(1,y)",
778
    "			--the single most convoluted line I've ever written that works, and I love it",
779
    "			term.write(stringShift(grid[ro(y+(yscroll+2),#grid)+1],xscroll+1):rep(math.ceil(scr_x/#grid[ro(y+(yscroll+2),#grid)+1])):sub(1,scr_x))",
780
    "			term.setCursorPos(1,y)",
781
    "			if ((scr_y+1)-yscroll) == y then --regular limit",
782
    "				term.write( (string.rep(\"@\", ( (scr_x)     ) - (#screenlabel+2)  ) ..screenlabel:gsub(\" \",\"@\"):upper()..\"@@\"):sub(xscroll>0 and xscroll or 0) )",
783
    "			elseif (((scr_y*3)+1)-yscroll) == y then --blittle limit",
784
    "				term.write( (string.rep(\"@\", ( ((scr_x*2))   ) - (#blittlelabel+2) )..blittlelabel:gsub(\" \",\"@\"):upper()..\"@@\"):sub(xscroll>0 and xscroll or 0) )",
785
    "			end",
786
    "			--Stupid easter eggs, ho!--",
787
    "			if 1000-yscroll == y then",
788
    "				term.setCursorPos(1000-xscroll,y)",
789
    "				term.write(\" What ARE you doing? Stop messing around! \")",
790
    "			end",
791
    "			if 2016-yscroll == y then",
792
    "				term.setCursorPos(200-xscroll,y)",
793
    "				term.write(\" MOTHER 3 is the best RPG ever. \")",
794
    "			end",
795
    "			if 2017-yscroll == y then",
796
    "				term.setCursorPos(200-xscroll,y)",
797
    "				term.write(\" Wouldn't you agree? \")",
798
    "			end",
799
    "			if 800-yscroll == y then",
800
    "				term.setCursorPos(1700-xscroll,y)",
801
    "				term.write(\" Which would you say is better? \")",
802
    "			end",
803
    "			if 801-yscroll == y then",
804
    "				term.setCursorPos(1700-xscroll,y)",
805
    "				term.write(\" Cave Story or Braid? \")",
806
    "			end",
807
    "			if 802-yscroll == y then",
808
    "				term.setCursorPos(1700-xscroll,y)",
809
    "				term.write(\" It depends what you're looking for. \")",
810
    "			end",
811
    "			--Is this the end?--",
812
    "			if (xscroll > scr_x) and (xscroll < (scr_x*2)+1) then --blittle limit",
813
    "				for y = 1, scr_y do",
814
    "					if y+yscroll <= (scr_y*3) then",
815
    "						if not (y == scr_y and doRenderBar == 1) then",
816
    "							term.setCursorPos((scr_x+1)-(xscroll-scr_x),y)",
817
    "							term.write(\"@\")",
818
    "						end",
819
    "					end",
820
    "				end",
821
    "			elseif (xscroll > 0) then --regular limit",
822
    "				for y = 1, scr_y do",
823
    "					if y+yscroll <= scr_y then",
824
    "						if not (y == scr_y and doRenderBar == 1) then",
825
    "							term.setCursorPos((scr_x+1)-xscroll,y)",
826
    "							term.write(\"@\")",
827
    "						end",
828
    "					end",
829
    "				end",
830
    "			end",
831
    "		end",
832
    "		--render areas that won't save",
833
    "		if xscroll < 0 then",
834
    "			for y = 1, scr_y do",
835
    "				if not (y == scr_y and doRenderBar == 1) then",
836
    "					term.setCursorPos(1,y)",
837
    "					term.write(badchar:rep(-xscroll))",
838
    "				end",
839
    "			end",
840
    "		end",
841
    "		if yscroll < 0 then",
842
    "			for y = 1, -yscroll do",
843
    "				if not (y == scr_y and doRenderBar == 1) then",
844
    "					term.setCursorPos(1,y)",
845
    "					term.write(badchar:rep(scr_x))",
846
    "				end",
847
    "			end",
848
    "		end",
849
    "	else",
850
    "		term.clear()",
851
    "	end",
852
    "end",
853
    "",
854
    "renderPAIN = function(dots,xscroll,yscroll,doPain)",
855
    "	local tsv = term.current().setVisible",
856
    "	if tsv then tsv(false) end",
857
    "	local beforeTX,beforeBG = term.getTextColor(), term.getBackgroundColor()",
858
    "	local cx,cy = term.getCursorPos()",
859
    "	local FUCK, SHIT = pcall(function()",
860
    "		if doPain then",
861
    "			renderPainyThings(xscroll,yscroll,evenDrawGrid)",
862
    "			renderBar(barmsg,true)",
863
    "		end",
864
    "		for a = 1, #dots do",
865
    "			local d = dots[a]",
866
    "			if doPain then",
867
    "				if not ((d.y-yscroll >= 1 and d.y-yscroll <= scr_y-(renderBlittle and 0 or (doRenderBar or 0))) and (d.x-xscroll >= 1 and d.x-xscroll <= scr_x)) then",
868
    "					d = nil",
869
    "				end",
870
    "			end",
871
    "			if d then",
872
    "				term.setCursorPos(d.x-(xscroll or 0),d.y-(yscroll or 0))",
873
    "				term.setTextColor((paint.doGray and grayOut(d.t)) or d.t)",
874
    "				term.setBackgroundColor((paint.doGray and grayOut(d.b)) or d.b)",
875
    "				term.write(d.c)",
876
    "			end",
877
    "		end",
878
    "	end)",
879
    "	term.setBackgroundColor(beforeBG)",
880
    "	term.setTextColor(beforeTX)",
881
    "	term.setCursorPos(cx,cy)",
882
    "	if tsv then tsv(true) end",
883
    "	if not FUCK then error(SHIT) end --GODDAMN IT",
884
    "end",
885
    "",
886
    "renderPAINFS = function(filename,xscroll,yscroll,frameNo,doPain)",
887
    "	local tun, tse = textutils.unserialize, textutils.serialize",
888
    "	local file = fs.open(filename,\"r\")",
889
    "	local contents = file.readAll()",
890
    "	local amntFrames",
891
    "	file.close()",
892
    "	local tcontents = tun(contents)",
893
    "	if type(tcontents) ~= \"table\" then",
894
    "		tcontents = importFromNFP(contents)",
895
    "	else",
896
    "		amntFrames = #tcontents",
897
    "		tcontents = tcontents[frameNo or 1]",
898
    "	end",
899
    "	renderPAIN(tcontents,xscroll,yscroll,doPain)",
900
    "	return amntFrames",
901
    "end",
902
    "",
903
    "local getBlittle = function()",
904
    "	if not blittle then",
905
    "		local geet = http.get(\"http://pastebin.com/raw/ujchRSnU\")",
906
    "		if not geet then",
907
    "			return false",
908
    "		else",
909
    "			geet = geet.readAll()",
910
    "			local file = fs.open(\"/.templittle/blittle\",\"w\")",
911
    "			file.write(geet)",
912
    "			file.close()",
913
    "			os.loadAPI(\"/.templittle/blittle\")",
914
    "			fs.delete(\"/.templittle/\")",
915
    "			if not blittleTerm then",
916
    "				blittleTerm = blittle.createWindow()",
917
    "			end",
918
    "			return blittleTerm, firstTerm",
919
    "		end",
920
    "	else",
921
    "		if not blittleTerm then",
922
    "			blittleTerm = blittle.createWindow()",
923
    "		end",
924
    "		return blittleTerm, firstTerm",
925
    "	end",
926
    "end",
927
    "",
928
    "local putDownText = function(x,y)",
929
    "	term.setCursorPos(x,y)",
930
    "	term.setTextColor((paint.doGray and grayOut(paint.t)) or paint.t)",
931
    "	term.setBackgroundColor((paint.doGray and grayOut(paint.b)) or paint.b)",
932
    "	local msg = read()",
933
    "	if #msg > 0 then",
934
    "		for a = 1, #msg do",
935
    "			table.insert(paintEncoded[frame],{x=a+(x+paint.scrollX)-1,y=y+paint.scrollY,t=paint.t,b=paint.b,c=msg:sub(a,a),m=paint.m})",
936
    "		end",
937
    "	end",
938
    "end",
939
    "",
940
    "local deleteDot = function(x,y)",
941
    "	local good = false",
942
    "	for a = #paintEncoded[frame],1,-1 do",
943
    "		local b = paintEncoded[frame][a]",
944
    "		if (x == b.x) and (y == b.y) then",
945
    "			table.remove(paintEncoded[frame],a)",
946
    "			good = true",
947
    "		end",
948
    "	end",
949
    "	return good",
950
    "end",
951
    "",
952
    "CTB = function(_color) --Color To Blit",
953
    "	local blitcolors = {",
954
    "		[colors.white] = \"0\",",
955
    "		[colors.orange] = \"1\",",
956
    "		[colors.magenta] = \"2\",",
957
    "		[colors.lightBlue] = \"3\",",
958
    "		[colors.yellow] = \"4\",",
959
    "		[colors.lime] = \"5\",",
960
    "		[colors.pink] = \"6\",",
961
    "		[colors.gray] = \"7\",",
962
    "		[colors.lightGray] = \"8\",",
963
    "		[colors.cyan] = \"9\",",
964
    "		[colors.purple] = \"a\",",
965
    "		[colors.blue] = \"b\",",
966
    "		[colors.brown] = \"c\",",
967
    "		[colors.green] = \"d\",",
968
    "		[colors.red] = \"e\",",
969
    "		[colors.black] = \"f\",",
970
    "	}",
971
    "	return blitcolors[_color] or \"f\"",
972
    "end",
973
    "",
974
    "BTC = function(_color) --Blit To Color",
975
    "	local blitcolors = {",
976
    "		[\"0\"] = colors.white,",
977
    "		[\"1\"] = colors.orange,",
978
    "		[\"2\"] = colors.magenta,",
979
    "		[\"3\"] = colors.lightBlue,",
980
    "		[\"4\"] = colors.yellow,",
981
    "		[\"5\"] = colors.lime,",
982
    "		[\"6\"] = colors.pink,",
983
    "		[\"7\"] = colors.gray,",
984
    "		[\"8\"] = colors.lightGray,",
985
    "		[\"9\"] = colors.cyan,",
986
    "		[\"a\"] = colors.purple,",
987
    "		[\"b\"] = colors.blue,",
988
    "		[\"c\"] = colors.brown,",
989
    "		[\"d\"] = colors.green,",
990
    "		[\"e\"] = colors.red,",
991
    "		[\"f\"] = colors.black,",
992
    "	}",
993
    "	return blitcolors[_color]",
994
    "end",
995
    "",
996
    "exportToNFP = function(input)",
997
    "	local doop = {}",
998
    "	local p = input",
999
    "	local pheight = 0",
1000
    "	local pwidth = 0",
1001
    "	for a = 1, #p do",
1002
    "		if p[a].y > pheight then",
1003
    "			pheight = p[a].y",
1004
    "		end",
1005
    "		if p[a].x > pwidth then",
1006
    "			pwidth = p[a].x",
1007
    "		end",
1008
    "	end",
1009
    "	for k,v in pairs(p) do",
1010
    "		if not doop[v.y] then doop[v.y] = {} end",
1011
    "		doop[v.y][v.x] = CTB(v.b)",
1012
    "	end",
1013
    "	for y = 1, pheight do",
1014
    "		if doop[y] then",
1015
    "			for x = 1, pwidth do",
1016
    "				if doop[y][x] then",
1017
    "					nfpoutput = nfpoutput..doop[y][x]",
1018
    "				else",
1019
    "					nfpoutput = nfpoutput..\" \"",
1020
    "				end",
1021
    "			end",
1022
    "		end",
1023
    "		nfpoutput = nfpoutput..\"\\n\"",
1024
    "	end",
1025
    "	return nfpoutput",
1026
    "end",
1027
    "",
1028
    "importFromNFP = function(theInput)",
1029
    "	local output = {}",
1030
    "	local input = explode(\"\\n\",theInput)",
1031
    "	for a = 1, #input do",
1032
    "		line = input[a]",
1033
    "		for b = 1, #line do",
1034
    "			if (line:sub(b,b) ~= \" \") and BTC(line:sub(b,b)) then",
1035
    "				table.insert(output,{",
1036
    "					x = b,",
1037
    "					y = a,",
1038
    "					t = colors.white,",
1039
    "					b = BTC(line:sub(b,b)) or colors.black,",
1040
    "					c = \" \",",
1041
    "				})",
1042
    "			end",
1043
    "		end",
1044
    "	end",
1045
    "	return output",
1046
    "end",
1047
    "",
1048
    "local getTheDoots = function(pe)",
1049
    "	local hasBadDots = false",
1050
    "	local baddestX,baddestY = 1,1",
1051
    "	barmsg = \"Checking...\"",
1052
    "	for b = 1, #pe do",
1053
    "		local doot = pe[b]",
1054
    "		if doot.x <= 0 or doot.y <= 0 then",
1055
    "			hasBadDots = true",
1056
    "			if doot.x < baddestX then",
1057
    "				baddestX = doot.x",
1058
    "			end",
1059
    "			if doot.y < baddestY then",
1060
    "				baddestY = doot.y",
1061
    "			end",
1062
    "		end",
1063
    "		if b % 64 == 0 then yield() end",
1064
    "	end",
1065
    "	return baddestX, baddestY",
1066
    "end",
1067
    "",
1068
    "local function deepcompare(t1,t2,ignore_mt)",
1069
    "	local ty1 = type(t1)",
1070
    "	local ty2 = type(t2)",
1071
    "	if ty1 ~= ty2 then return false end",
1072
    "	-- non-table types can be directly compared",
1073
    "	if ty1 ~= 'table' and ty2 ~= 'table' then return t1 == t2 end",
1074
    "	-- as well as tables which have the metamethod __eq",
1075
    "	local mt = getmetatable(t1)",
1076
    "	if not ignore_mt and mt and mt.__eq then return t1 == t2 end",
1077
    "	for k1,v1 in pairs(t1) do",
1078
    "		local v2 = t2[k1]",
1079
    "		if v2 == nil or not deepcompare(v1,v2) then return false end",
1080
    "	end",
1081
    "	for k2,v2 in pairs(t2) do",
1082
    "		local v1 = t1[k2]",
1083
    "		if v1 == nil or not deepcompare(v1,v2) then return false end",
1084
    "	end",
1085
    "	return true",
1086
    "end",
1087
    "",
1088
    "local displayMenu = function()",
1089
    "	menuOptions = {\"Save\",\"Export\",\"Del.frame\",\"Clear\",\"Exit\"}",
1090
    "	local diss = \" \"..table.concat(menuOptions,\" \")",
1091
    "	local cleary = scr_y-math.floor(#diss/scr_x)",
1092
    "	for a = cleary,scr_y do",
1093
    "		term.setCursorPos(1,a)",
1094
    "		term.setBackgroundColor(colors.lightGray)",
1095
    "		term.clearLine()",
1096
    "	end",
1097
    "	local menuPoses = {}",
1098
    "	local menuFunctions = {",
1099
    "		[1] = function() --Save",
1100
    "			local hasBadDots = false",
1101
    "			for a = 1, #paintEncoded do",
1102
    "				local radx,rady = getTheDoots(paintEncoded[a])",
1103
    "				if radx ~= 1 or rady ~= 1 then",
1104
    "					hasBadDots = true",
1105
    "				end",
1106
    "			end",
1107
    "			if hasBadDots then",
1108
    "				local ting = bottomPrompt(\"Dot(s) are OoB! Save or fix? (Y/N/F)\",_,\"ynf\",{keys.leftCtrl,keys.rightCtrl})",
1109
    "				if ting == \"f\" then",
1110
    "					for a = 1, #paintEncoded do",
1111
    "						local baddestX, baddestY = getTheDoots(paintEncoded[a])",
1112
    "						paintEncoded[a] = movePaintEncoded(paintEncoded[a],-(baddestX-1),-(baddestY-1))",
1113
    "					end",
1114
    "				elseif ting ~= \"y\" then",
1115
    "					barmsg = \"\"",
1116
    "					return false",
1117
    "				end",
1118
    "			end",
1119
    "			local output = deepCopy(paintEncoded)",
1120
    "			if paint.doGray then",
1121
    "				for a = 1, #paintEncoded do",
1122
    "					for b = 1, #paintEncoded[a] do",
1123
    "						output[a][b].b = grayOut(paintEncoded[a][b].b)",
1124
    "						output[a][b].t = grayOut(paintEncoded[a][b].t)",
1125
    "						if not output[a][b].m then output[a][b].m = 1 end",
1126
    "					end",
1127
    "					if a % 2 == 0 then yield() end",
1128
    "				end",
1129
    "			end",
1130
    "			saveFile(fileName,output)",
1131
    "			lastPaintEncoded = deepCopy(paintEncoded)",
1132
    "			term.setCursorPos(9,scr_y)",
1133
    "			barmsg = \"Saved as '\"..fileName..\"'\"",
1134
    "			doRender = true",
1135
    "		end,",
1136
    "		[2] = function() --Export",
1137
    "			nfpoutput = \"\"",
1138
    "			local exportName = bottomPrompt(\"Export to: /\")",
1139
    "			if fs.combine(\"\",exportName) == \"\" then return end",
1140
    "			if fs.isReadOnly(exportName) then",
1141
    "				barmsg = \"That's read-only.\"",
1142
    "				doRender = true",
1143
    "				return",
1144
    "			end",
1145
    "			if fs.exists(exportName) then",
1146
    "				if bottomPrompt(\"Overwrite? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl}) ~= \"y\" then return end",
1147
    "			end",
1148
    "			local output = exportToNFP(paintEncoded[frame])",
1149
    "			local file = fs.open(exportName,\"w\")",
1150
    "			file.write(output)",
1151
    "			file.close()",
1152
    "			doRender = true",
1153
    "			barmsg = \"Exported as '\"..exportName..\"'\"",
1154
    "			return",
1155
    "		end,",
1156
    "		[3] = function() --Del.Frame",
1157
    "			local outcum = bottomPrompt(\"Thou art sure? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl})",
1158
    "			if outcum == \"y\" then",
1159
    "				if #paintEncoded == 1 then",
1160
    "					barmsg = \"Ha! You can't do that.\"",
1161
    "					return",
1162
    "				end",
1163
    "				table.remove(paintEncoded,frame)",
1164
    "				barmsg = \"Deleted frame \"..frame..\".\"",
1165
    "				if paintEncoded[frame-1] then",
1166
    "					frame = frame - 1",
1167
    "				else",
1168
    "					frame = frame + 1",
1169
    "				end",
1170
    "				if #paintEncoded < frame then",
1171
    "					repeat",
1172
    "						frame = frame - 1",
1173
    "					until #paintEncoded >= frame",
1174
    "				end",
1175
    "				--renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)",
1176
    "			end",
1177
    "			doRender = true",
1178
    "		end,",
1179
    "		[4] = function() --Clear",
1180
    "			local outcum = bottomPrompt(\"Clear the frame? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl})",
1181
    "			if outcum == \"y\" then",
1182
    "				paintEncoded[frame] = {}",
1183
    "				barmsg = \"Cleared frame \"..frame..\".\"",
1184
    "				--renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)",
1185
    "			end",
1186
    "			doRender = true",
1187
    "		end,",
1188
    "		[5] = function() --Exit",
1189
    "			if not deepcompare(lastPaintEncoded,paintEncoded) then",
1190
    "				local outcum = bottomPrompt(\"Abandon unsaved work? (Y/N)\",_,\"yn\",{keys.leftCtrl,keys.rightCtrl})",
1191
    "				sleep(0)",
1192
    "				if outcum == \"y\" then",
1193
    "					return \"exit\"",
1194
    "				else",
1195
    "					doRender = true",
1196
    "					return nil",
1197
    "				end",
1198
    "			else",
1199
    "				return \"exit\"",
1200
    "			end",
1201
    "		end,",
1202
    "	}",
1203
    "	local cursor = 1",
1204
    "	local redrawmenu = true",
1205
    "	local initial = os.time()",
1206
    "	local clickdelay = 0.003",
1207
    "	while true do",
1208
    "		if redrawmenu then",
1209
    "			term.setCursorPos(2,cleary)",
1210
    "			term.clearLine()",
1211
    "			for a = 1, #menuOptions do",
1212
    "				if a == cursor then",
1213
    "					term.setTextColor(colors.black)",
1214
    "					term.setBackgroundColor(colors.white)",
1215
    "				else",
1216
    "					term.setTextColor(colors.black)",
1217
    "					term.setBackgroundColor(colors.lightGray)",
1218
    "				end",
1219
    "				menuPoses[a] = {term.getCursorPos()}",
1220
    "				write(menuOptions[a])",
1221
    "				term.setBackgroundColor(colors.lightGray)",
1222
    "				if a ~= #menuOptions then",
1223
    "					write(\" \")",
1224
    "				end",
1225
    "			end",
1226
    "			redrawmenu = false",
1227
    "		end",
1228
    "		local event,key,x,y = getEvents(\"key\",\"char\",\"mouse_click\",\"mouse_up\",\"mouse_drag\")",
1229
    "		if event == \"key\" then",
1230
    "			if key == keys.left then",
1231
    "				redrawmenu = true",
1232
    "				cursor = cursor - 1",
1233
    "			elseif key == keys.right then",
1234
    "				redrawmenu = true",
1235
    "				cursor = cursor + 1",
1236
    "			elseif key == keys.enter then",
1237
    "				local res = menuFunctions[cursor]()",
1238
    "				if res == \"exit\" then",
1239
    "					return \"exit\"",
1240
    "				else",
1241
    "					return",
1242
    "				end",
1243
    "			elseif key == keys.leftCtrl or key == keys.rightCtrl then",
1244
    "				doRender = true",
1245
    "				return",
1246
    "			end",
1247
    "		elseif event == \"char\" then",
1248
    "			for a = 1, #menuOptions do",
1249
    "				if key:lower() == menuOptions[a]:sub(1,1):lower() and a ~= cursor then",
1250
    "					cursor = a",
1251
    "					redrawmenu = true",
1252
    "					break",
1253
    "				end",
1254
    "			end",
1255
    "		elseif event == \"mouse_click\" or event == \"mouse_up\" then",
1256
    "			if y < cleary then",
1257
    "				return",
1258
    "			elseif key == 1 and initial+clickdelay < os.time() then --key? more like button",
1259
    "				for a = 1, #menuPoses do",
1260
    "					if y == menuPoses[a][2] then",
1261
    "						if x >= menuPoses[a][1] and x <= menuPoses[a][1]+#menuOptions[a] then",
1262
    "							local res = menuFunctions[a]()",
1263
    "							if res == \"exit\" then",
1264
    "								return \"exit\"",
1265
    "							else",
1266
    "								return",
1267
    "							end",
1268
    "						end",
1269
    "					end",
1270
    "				end",
1271
    "			end",
1272
    "		--elseif event == \"mouse_drag\" then",
1273
    "		end",
1274
    "		if (initial+clickdelay < os.time()) and string.find(event,\"mouse\") then",
1275
    "			if key == 1 then --key? key? what key? all I see is button!",
1276
    "				for a = 1, #menuPoses do",
1277
    "					if y == menuPoses[a][2] then",
1278
    "						if x >= menuPoses[a][1] and x <= menuPoses[a][1]+#menuOptions[a] then",
1279
    "							cursor = a",
1280
    "							redrawmenu = true",
1281
    "							break",
1282
    "						end",
1283
    "					end",
1284
    "				end",
1285
    "			end",
1286
    "		end",
1287
    "		if cursor < 1 then",
1288
    "			cursor = #menuOptions",
1289
    "		elseif cursor > #menuOptions then",
1290
    "			cursor = 1",
1291
    "		end",
1292
    "	end",
1293
    "end",
1294
    "",
1295
    "local lastMX,lastMY",
1296
    "",
1297
    "local doNonEventDrivenMovement = function() --what a STUPID function name, man",
1298
    "	local didMove",
1299
    "	while true do",
1300
    "		didMove = false",
1301
    "		if (not keysDown[keys.leftShift]) and (not isDragging) and (not keysDown[keys.tab]) then",
1302
    "			if keysDown[keys.right] then",
1303
    "				paint.scrollX = paint.scrollX + 1",
1304
    "				didMove = true",
1305
    "			elseif keysDown[keys.left] then",
1306
    "				paint.scrollX = paint.scrollX - 1",
1307
    "				didMove = true",
1308
    "			end",
1309
    "			if keysDown[keys.down] then",
1310
    "				paint.scrollY = paint.scrollY + 1",
1311
    "				didMove = true",
1312
    "			elseif keysDown[keys.up] then",
1313
    "				paint.scrollY = paint.scrollY - 1",
1314
    "				didMove = true",
1315
    "			end",
1316
    "			if didMove then",
1317
    "				if lastMX and lastMY then",
1318
    "					if miceDown[1] then",
1319
    "						os.queueEvent(\"mouse_click\",1,lastMX,lastMY)",
1320
    "					end",
1321
    "					if miceDown[2] then",
1322
    "						os.queueEvent(\"mouse_click\",2,lastMX,lastMY)",
1323
    "					end",
1324
    "				end",
1325
    "				doRender = true",
1326
    "			end",
1327
    "		end",
1328
    "		sleep(0)",
1329
    "	end",
1330
    "end",
1331
    "",
1332
    "local linePoses = {}",
1333
    "local dragPoses = {}",
1334
    "",
1335
    "local getInput = function() --gotta catch them all",
1336
    "	local button, x, y, oldmx, oldmy, origx, origy",
1337
    "	local isDragging = false",
1338
    "	local proceed = false",
1339
    "	renderBar(barmsg)",
1340
    "	while true do",
1341
    "		doRender = false",
1342
    "		local oldx,oldy = paint.scrollX,paint.scrollY",
1343
    "		local evt = {getEvents(\"mouse_scroll\",\"mouse_click\", \"mouse_drag\",\"mouse_up\",\"key\",\"key_up\",true)}",
1344
    "		if (evt[1] == \"mouse_scroll\") and (not viewing) then",
1345
    "			local dir = evt[2]",
1346
    "			if dir == 1 then",
1347
    "				if keysDown[keys.leftShift] or keysDown[keys.rightShift] then",
1348
    "					paint.t = paint.t * 2",
1349
    "					if paint.t > 32768 then",
1350
    "						paint.t = 32768",
1351
    "					end",
1352
    "				else",
1353
    "					paint.b = paint.b * 2",
1354
    "					if paint.b > 32768 then",
1355
    "						paint.b = 32768",
1356
    "					end",
1357
    "				end",
1358
    "			else",
1359
    "				if keysDown[keys.leftShift] or keysDown[keys.rightShift] then",
1360
    "					paint.t = math.ceil(paint.t / 2)",
1361
    "					if paint.t < 1 then",
1362
    "						paint.t = 1",
1363
    "					end",
1364
    "				else",
1365
    "					paint.b = math.ceil(paint.b / 2)",
1366
    "					if paint.b < 1 then",
1367
    "						paint.b = 1",
1368
    "					end",
1369
    "				end",
1370
    "			end",
1371
    "			renderBar(barmsg)",
1372
    "		elseif ((evt[1] == \"mouse_click\") or (evt[1] == \"mouse_drag\")) and (not viewing) then",
1373
    "			if evt[1] == \"mouse_click\" then",
1374
    "				origx, origy = evt[3], evt[4]",
1375
    "			end",
1376
    "			oldmx,oldmy = x or evt[3], y or evt[4]",
1377
    "			lastMX,lastMY = evt[3],evt[4]",
1378
    "			button,x,y = evt[2],evt[3],evt[4]",
1379
    "			if renderBlittle then",
1380
    "				x = 2*x",
1381
    "				y = 3*y",
1382
    "				lastMX = 2*lastMX",
1383
    "				lastMY = 3*lastMY",
1384
    "			end",
1385
    "			linePoses = {{x=oldmx,y=oldmy},{x=x,y=y}}",
1386
    "			miceDown[button] = true",
1387
    "			doRender = true",
1388
    "			if y <= scr_y-(renderBlittle and 0 or doRenderBar) then",
1389
    "				if (button == 3) then",
1390
    "					putDownText(x,y)",
1391
    "					miceDown = {}",
1392
    "					keysDown = {}",
1393
    "				elseif button == 1 then",
1394
    "					if keysDown[keys.leftShift] and evt[1] == \"mouse_click\" then",
1395
    "						isDragging = true",
1396
    "					end",
1397
    "					if isDragging then",
1398
    "						if evt[1] == \"mouse_click\" then",
1399
    "							dragPoses[1] = {x=x,y=y}",
1400
    "						end",
1401
    "						dragPoses[2] = {x=x,y=y}",
1402
    "					else",
1403
    "						if evt[1] == \"mouse_drag\" then",
1404
    "							local points = getDotsInLine(linePoses[1].x,linePoses[1].y,linePoses[2].x,linePoses[2].y)",
1405
    "							for a = 1, #points do",
1406
    "								table.insert(paintEncoded[frame],{",
1407
    "									x = points[a].x + paint.scrollX,",
1408
    "									y = points[a].y + paint.scrollY,",
1409
    "									c = paint.c,",
1410
    "									b = paint.b,",
1411
    "									t = paint.t,",
1412
    "									m = paint.m,",
1413
    "								})",
1414
    "							end",
1415
    "						else",
1416
    "							table.insert(paintEncoded[frame],{",
1417
    "								x = x + paint.scrollX,",
1418
    "								y = y + paint.scrollY,",
1419
    "								c = paint.c,",
1420
    "								b = paint.b,",
1421
    "								t = paint.t,",
1422
    "								m = paint.m,",
1423
    "							})",
1424
    "						end",
1425
    "					end",
1426
    "				elseif button == 2 and y <= scr_y-(renderBlittle and 0 or doRenderBar) then",
1427
    "					deleteDot(x+paint.scrollX,y+paint.scrollY)",
1428
    "				end",
1429
    "			elseif origy >= scr_y-(renderBlittle and 0 or doRenderBar) then",
1430
    "				keysDown = {}",
1431
    "				local res = displayMenu()",
1432
    "				if res == \"exit\" then break end",
1433
    "				doRender = true",
1434
    "			end",
1435
    "		elseif (evt[1] == \"mouse_up\") and (not viewing) then",
1436
    "			origx,origy = 0,0",
1437
    "			local button = evt[2]",
1438
    "			miceDown[button] = false",
1439
    "			oldmx,oldmy = nil,nil",
1440
    "			lastMX, lastMY = nil,nil",
1441
    "			if isDragging then",
1442
    "				local points = getDotsInLine(dragPoses[1].x,dragPoses[1].y,dragPoses[2].x,dragPoses[2].y)",
1443
    "				for a = 1, #points do",
1444
    "					table.insert(paintEncoded[frame],{",
1445
    "						x = points[a].x + paint.scrollX,",
1446
    "						y = points[a].y + paint.scrollY,",
1447
    "						c = paint.c,",
1448
    "						b = paint.b,",
1449
    "						t = paint.t,",
1450
    "						m = paint.m,",
1451
    "					})",
1452
    "				end",
1453
    "				doRender = true",
1454
    "			end",
1455
    "			isDragging = false",
1456
    "		elseif evt[1] == \"key\" then",
1457
    "			local key = evt[2]",
1458
    "			if (not keysDown[keys.leftShift]) and (keysDown[keys.tab]) then",
1459
    "				if key == keys.right and (not keysDown[keys.right]) then",
1460
    "					paint.scrollX = paint.scrollX + 1",
1461
    "					doRender = true",
1462
    "				elseif key == keys.left and (not keysDown[keys.left]) then",
1463
    "					paint.scrollX = paint.scrollX - 1",
1464
    "					doRender = true",
1465
    "				end",
1466
    "				if key == keys.down and (not keysDown[keys.down]) then",
1467
    "					paint.scrollY = paint.scrollY + 1",
1468
    "					doRender = true",
1469
    "				elseif key == keys.up and (not keysDown[keys.up]) then",
1470
    "					paint.scrollY = paint.scrollY - 1",
1471
    "					doRender = true",
1472
    "				end",
1473
    "			end",
1474
    "			keysDown[key] = true",
1475
    "			if key == keys.space then",
1476
    "				if keysDown[keys.leftShift] then",
1477
    "					evenDrawGrid = not evenDrawGrid",
1478
    "				else",
1479
    "					doRenderBar = math.abs(doRenderBar-1)",
1480
    "				end",
1481
    "				doRender = true",
1482
    "			end",
1483
    "			if key == keys.b then",
1484
    "				local blTerm, oldTerm = getBlittle()",
1485
    "				renderBlittle = not renderBlittle",
1486
    "				term.setBackgroundColor(colors.black)",
1487
    "				term.clear()",
1488
    "				if renderBlittle then",
1489
    "					term.redirect(blTerm)",
1490
    "					blTerm.setVisible(true)",
1491
    "				else",
1492
    "					term.redirect(oldTerm)",
1493
    "					blTerm.setVisible(false)",
1494
    "				end",
1495
    "				doRender = true",
1496
    "				scr_x, scr_y = term.current().getSize()",
1497
    "			end",
1498
    "			if (key == keys.c) and (not renderBlittle) then",
1499
    "				local newX = tonumber(bottomPrompt(\"Goto X:\"))",
1500
    "				local newY",
1501
    "				if newX then",
1502
    "					newY = tonumber(bottomPrompt(\"Goto Y:\"))",
1503
    "					paint.scrollX = newX or paint.scrollX",
1504
    "					paint.scrollY = newY or paint.scrollY",
1505
    "				end",
1506
    "				doRender = true",
1507
    "			end",
1508
    "			if (keysDown[keys.leftShift]) and (not isDragging) then",
1509
    "				if key == keys.left then",
1510
    "					paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],-1,0)",
1511
    "					doRender = true",
1512
    "				elseif key == keys.right then",
1513
    "					paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],1,0)",
1514
    "					doRender = true",
1515
    "				elseif key == keys.up then",
1516
    "					paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],0,-1)",
1517
    "					doRender = true",
1518
    "				elseif key == keys.down then",
1519
    "					paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],0,1)",
1520
    "					doRender = true",
1521
    "				end",
1522
    "			end",
1523
    "			if keysDown[keys.leftAlt] then",
1524
    "				if #paintEncoded > 1 then",
1525
    "					if key == keys.equals and paintEncoded[frame+1] then --basically plus",
1526
    "						local first = deepCopy(paintEncoded[frame])",
1527
    "						local next = deepCopy(paintEncoded[frame+1])",
1528
    "						paintEncoded[frame] = next",
1529
    "						paintEncoded[frame+1] = first",
1530
    "						frame = frame + 1",
1531
    "						barmsg = \"Swapped prev frame.\"",
1532
    "					end",
1533
    "					if key == keys.minus and paintEncoded[frame-1] then",
1534
    "						local first = deepCopy(paintEncoded[frame])",
1535
    "						local next = deepCopy(paintEncoded[frame-1])",
1536
    "						paintEncoded[frame] = next",
1537
    "						paintEncoded[frame-1] = first",
1538
    "						frame = frame - 1",
1539
    "						barmsg = \"Swapped next frame.\"",
1540
    "					end",
1541
    "				end",
1542
    "			end",
1543
    "			if not renderBlittle then",
1544
    "				if key == keys.m then",
1545
    "					local incum = bottomPrompt(\"Set meta: \",metaHistory)",
1546
    "					paint.m = incum:gsub(\" \",\"\") ~= \"\" and incum or paint.m",
1547
    "					if paint.m ~= metaHistory[#metaHistory] then",
1548
    "						table.insert(metaHistory,paint.m)",
1549
    "					end",
1550
    "					doRender = true",
1551
    "				end",
1552
    "				if key == keys.f7 then",
1553
    "					bepimode = not bepimode",
1554
    "					doRender = true",
1555
    "				end",
1556
    "				if key == keys.t then",
1557
    "					renderBottomBar(\"Click to place text.\")",
1558
    "					local mevt",
1559
    "					repeat",
1560
    "						mevt = {os.pullEvent(\"mouse_click\")}",
1561
    "					until mevt[2] == 1 and mevt[4] < scr_y-(renderBlittle and 0 or doRenderBar)",
1562
    "					local x,y = mevt[3],mevt[4]",
1563
    "					if renderBlittle then",
1564
    "						x = 2*x",
1565
    "						y = 3*y",
1566
    "					end",
1567
    "					putDownText(x,y)",
1568
    "					miceDown = {}",
1569
    "					keysDown = {}",
1570
    "				end",
1571
    "				if not keysDown[keys.leftAlt] then",
1572
    "					if key == keys.equals then --basically 'plus'",
1573
    "						if not paintEncoded[frame+1] then",
1574
    "							paintEncoded[frame+1] = {}",
1575
    "							local sheet = paintEncoded[frame]",
1576
    "							if keysDown[keys.leftShift] then",
1577
    "								paintEncoded[frame+1] = deepCopy(sheet)",
1578
    "							end",
1579
    "						end",
1580
    "						frame = frame + 1",
1581
    "						doRender = true",
1582
    "					elseif key == keys.minus then",
1583
    "						if frame > 1 then",
1584
    "							frame = frame - 1",
1585
    "							doRender = true",
1586
    "						end",
1587
    "					end",
1588
    "				end",
1589
    "				if (key == keys.leftCtrl or key == keys.rightCtrl) then",
1590
    "					keysDown = {}",
1591
    "					local res = displayMenu()",
1592
    "					if res == \"exit\" then break end",
1593
    "					doRender = true",
1594
    "				end",
1595
    "			end",
1596
    "			if (key == keys.f and keysDown[keys.leftShift]) then",
1597
    "				local deredots = {}",
1598
    "				for a = 1, #paintEncoded[frame] do",
1599
    "					local dot = paintEncoded[frame][a]",
1600
    "					if dot.x-paint.scrollX > 0 and dot.x-paint.scrollX <= scr_x then",
1601
    "						if dot.y-paint.scrollY > 0 and dot.y-paint.scrollY <= scr_y then",
1602
    "							table.insert(deredots,{dot.x-paint.scrollX, dot.y-paint.scrollY})",
1603
    "						end",
1604
    "					end",
1605
    "				end",
1606
    "				for y = 1, scr_y-(renderBlittle and 0 or doRenderBar) do",
1607
    "					for x = 1, scr_x do",
1608
    "						local good = true",
1609
    "						for a = 1, #deredots do",
1610
    "							if (deredots[a][1] == x) and (deredots[a][2] == y) then",
1611
    "								good = bad",
1612
    "								break",
1613
    "							end",
1614
    "						end",
1615
    "						if good then",
1616
    "							table.insert(paintEncoded[frame],{",
1617
    "								x = x+paint.scrollX,",
1618
    "								y = y+paint.scrollY,",
1619
    "								c = \" \",",
1620
    "								t = paint.t,",
1621
    "								b = paint.b,",
1622
    "								m = paint.m,",
1623
    "							})",
1624
    "						end",
1625
    "					end",
1626
    "				end",
1627
    "				doRender = true",
1628
    "			end",
1629
    "			if key == keys.g then",
1630
    "				paint.doGray = not paint.doGray",
1631
    "				doRender = true",
1632
    "			end",
1633
    "			if key == keys.a then",
1634
    "				paint.scrollX = 0",
1635
    "				paint.scrollY = 0",
1636
    "				doRender = true",
1637
    "			end",
1638
    "			if key == keys.f1 then",
1639
    "				guiHelp()",
1640
    "			end",
1641
    "			if key == keys.leftBracket then",
1642
    "				os.queueEvent(\"mouse_scroll\",2,1,1)",
1643
    "			elseif key == keys.rightBracket then",
1644
    "				os.queueEvent(\"mouse_scroll\",1,1,1)",
1645
    "			end",
1646
    "		elseif evt[1] == \"key_up\" then",
1647
    "			local key = evt[2]",
1648
    "			keysDown[key] = false",
1649
    "		end",
1650
    "		if (oldx~=paint.scrollX) or (oldy~=paint.scrollY) then",
1651
    "			doRender = true",
1652
    "		end",
1653
    "		if doRender then",
1654
    "			renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)",
1655
    "			doRender = false",
1656
    "		end",
1657
    "	end",
1658
    "end",
1659
    "",
1660
    "if not shell then return end",
1661
    "",
1662
    "fileName = shell.resolve(tostring(tArg[1]))",
1663
    "",
1664
    "if not fs.exists(fileName) then",
1665
    "	paintEncoded = {{}}",
1666
    "else",
1667
    "	local file = fs.open(fileName,\"r\")",
1668
    "	local contents = file.readAll()",
1669
    "	file.close()",
1670
    "	if type(tun(contents)) ~= \"table\" then",
1671
    "		if pMode ~= 1 then print(\"Importing from NFP...\") end",
1672
    "		paintEncoded = {importFromNFP(contents)}",
1673
    "		if fileName:sub(-4,-1) == \".nfp\" then",
1674
    "			fileName = fileName:sub(1,-5)",
1675
    "		end",
1676
    "	else",
1677
    "		paintEncoded = tun(contents)",
1678
    "	end",
1679
    "end",
1680
    "",
1681
    "paintEncoded = tun(tse(paintEncoded):gsub(\"bg\",\"b\"):gsub(\"txt\",\"t\"):gsub(\"char\",\"c\"):gsub(\"meta\",\"m\")) -- gotta have backwards compatibility, sorta",
1682
    "",
1683
    "if not paintEncoded[frame] then paintEncoded = {paintEncoded} end",
1684
    "if pMode == 1 then",
1685
    "	doRenderBar = 0",
1686
    "	renderPAIN(paintEncoded[tonumber(tArg[5]) or 1],tonumber(tArg[3]) or 0,tonumber(tArg[4]) or 0)",
1687
    "	sleep(0)",
1688
    "	return",
1689
    "else",
1690
    "	renderPAIN(paintEncoded[frame],paint.scrollX,paint.scrollY,true)",
1691
    "end",
1692
    "lastPaintEncoded = deepCopy(paintEncoded)",
1693
    "",
1694
    "parallel.waitForAny(getInput,doNonEventDrivenMovement)",
1695
    "",
1696
    "term.setCursorPos(1,scr_y)",
1697
    "term.setBackgroundColor(colors.black)",
1698
    "term.clearLine()",
1699
  },
1700
  r = {
1701
    "",
1702
    "",
1703
    "         000000000000000",
1704
    "         077777777777770",
1705
    "         078888888888880",
1706
    "         078800000007880",
1707
    "         07880     07880",
1708
    "         07880     07880",
1709
    "         078800000007880",
1710
    "         078877777777880",
1711
    "         078888888888880",
1712
    "         078800000078000",
1713
    "         07880    0780  ",
1714
    "         07880    078000",
1715
    "         07880    078770",
1716
    "         07880    078880",
1717
    "         07880    078880",
1718
    "         00000    000000",
1719
  },
1720
  X = {
1721
    "",
1722
    " 000000000000        000000000000",
1723
    " 0777777777700      0077777777770",
1724
    " 0788777888770      0778887778880",
1725
    " 0788877788870      0788877788880",
1726
    " 07888877788800    00788777888880",
1727
    " 008888877788700  007887778888800",
1728
    "  000000000078700007880000000000 ",
1729
    "           007880088800          ",
1730
    "            0088888800           ",
1731
    "             00888800            ",
1732
    "            0088888800           ",
1733
    "           007880088700          ",
1734
    "  000000000078800008870000000000 ",
1735
    " 007777777778800  008877777777700",
1736
    " 07888877788800    00788777888870",
1737
    " 0788877788870      0788877788880",
1738
    " 0788777888770      0778887778880",
1739
    " 0787778887700      0077887777880",
1740
    " 000000000000        000000000000",
1741
  },
1742
  progdor = {
1743
    "--[[",
1744
    " PROGDOR file bundling program",
1745
    "",
1746
    "Download with:",
1747
    " pastebin get YXx5jjMV progdor",
1748
    " std ld progdor progdor",
1749
    "",
1750
    "This is a stable release. You fool!",
1751
    "--]]",
1752
    "",
1753
    "local doCompress = false --even if this is false, it will decompress compressed files. nifty, huh?",
1754
    "",
1755
    "local tArg = {...}",
1756
    "local input = tArg[1]",
1757
    "local outpath = tArg[2]",
1758
    "",
1759
    "local progdor = fs.getName(shell.getRunningProgram())",
1760
    "local dir = shell.dir()",
1761
    "local displayHelp = function()",
1762
    "	local txt = progdor..\" <input> [output]\\nCompression is \"..tostring(doCompress):upper()..\".\"",
1763
    "	return print(txt)",
1764
    "end",
1765
    "",
1766
    "local yield = function()",
1767
    "	os.queueEvent(\"yield\")",
1768
    "	os.pullEvent(\"yield\")",
1769
    "end",
1770
    "",
1771
    "-- CCA API START --",
1772
    "",
1773
    "local bit = bit32",
1774
    "--[[",
1775
    "local function pack(bn1, bn2)",
1776
    "	bytes = {}",
1777
    "	bytes[1] = bit.band(bn1, 0xFF)",
1778
    "	bytes[2] = bit.rshift(bn1, 8) + bit.lshift(bit.band(bn2, 0xF), 4)",
1779
    "	bytes[3] = bit.rshift(bn2, 4)",
1780
    "	return bytes[1], bytes[2], bytes[3]",
1781
    "end",
1782
    "local function upack(b1, b2, b3)",
1783
    "	bn1 = b1 + bit.lshift(bit.band(b2, 0xF), 8)",
1784
    "	bn2 = bit.lshift(b3,4) + bit.band(bit.rshift(b2, 4), 0xF)",
1785
    "	return bn1, bn2",
1786
    "end",
1787
    "--]]",
1788
    "local function pack(bn1, bn2)",
1789
    "	return bit.band(bn1, 0xFF), bit.rshift(bn1, 8) + bit.lshift(bit.band(bn2, 0xF), 4), bit.rshift(bn2, 4)",
1790
    "end",
1791
    "local function upack(b1, b2, b3)",
1792
    "	return (b1 + bit.lshift(bit.band(b2, 0xF), 8)), (bit.lshift(b3,4) + bit.band(bit.rshift(b2, 4), 0xF))",
1793
    "end",
1794
    "local function createDict(bool)",
1795
    "	local ret = {}",
1796
    "	for i = 1, 255 do",
1797
    "		if bool then",
1798
    "			ret[string.char(i)] = i",
1799
    "		else",
1800
    "			ret[i] = string.char(i)",
1801
    "		end",
1802
    "	end",
1803
    "	if not bool then ret[256] = 256 end",
1804
    "	return ret",
1805
    "end",
1806
    "local function cp(sInput)",
1807
    "	local dic = createDict(true)",
1808
    "	local s = \"\"",
1809
    "	local ch",
1810
    "	local dlen = 256",
1811
    "	local result = {}",
1812
    "	local temp",
1813
    "	for i = 1, #sInput do",
1814
    "		if dlen == 4095 then",
1815
    "			result[#result + 1] = dic[s]",
1816
    "			result[#result + 1] = 256",
1817
    "			dic = createDict(true)",
1818
    "			dlen = 256",
1819
    "			s = \"\"",
1820
    "		end",
1821
    "		ch = sInput:sub(i, i)",
1822
    "		temp = s..ch",
1823
    "		if dic[temp] then",
1824
    "			s = temp",
1825
    "		else",
1826
    "			result[#result + 1] = dic[s]",
1827
    "			dlen = dlen	+1",
1828
    "			dic[temp] = dlen		",
1829
    "			s = ch",
1830
    "		end",
1831
    "	end",
1832
    "	result[#result + 1] = dic[s]",
1833
    "	",
1834
    "	return result",
1835
    "end",
1836
    "local function dc(data)",
1837
    "	local dic = createDict(false)	",
1838
    "	local entry",
1839
    "	local ch",
1840
    "	local currCode",
1841
    "	local result = {}",
1842
    "	result[#result + 1] = dic[data[1]]",
1843
    "	prefix = dic[data[1]]",
1844
    "	for i = 2, #data do",
1845
    "		currCode = data[i]",
1846
    "		if currCode == 256 then",
1847
    "			dic = createDict(false)",
1848
    "			prefix = \"\"",
1849
    "		else",
1850
    "			entry = dic[currCode]",
1851
    "			if entry then--exists in dictionary",
1852
    "				ch = entry:sub(1, 1)		",
1853
    "				result[#result + 1] = entry",
1854
    "				if prefix ~= \"\" then",
1855
    "					dic[#dic+1] = prefix .. ch",
1856
    "				end",
1857
    "			else	",
1858
    "				ch = prefix:sub(1, 1)",
1859
    "				result[#result + 1] = prefix..ch",
1860
    "				dic[#dic + 1] = prefix..ch",
1861
    "			end",
1862
    "		",
1863
    "			prefix = dic[currCode]",
1864
    "		end",
1865
    "	end",
1866
    "	",
1867
    "	return table.concat(result)",
1868
    "end",
1869
    "local function trim(inp)",
1870
    "	for i = 0,2 do",
1871
    "		if inp[#inp] == 0 then",
1872
    "			inp[#inp] = nil",
1873
    "		end",
1874
    "	end",
1875
    "end",
1876
    "local function decompress(input)",
1877
    "	local rec = {}",
1878
    "	for i = 1, #input, 3 do",
1879
    "		if i % 66 == 0 then",
1880
    "			yield()",
1881
    "		end",
1882
    "		rec[#rec+1], rec[#rec+2] = upack(input[i], input[i+1] or 0, input[i+2] or 0)",
1883
    "	end",
1884
    "	trim(rec)",
1885
    "	return dc(rec)",
1886
    "end",
1887
    "local function compress(input)",
1888
    "	local rec = {}",
1889
    "	local data = cp(input)",
1890
    "	for i=1, #data, 2 do",
1891
    "		yield()",
1892
    "		rec[#rec+1], rec[#rec+2], rec[#rec+3] = pack(data[i], data[i+1] or 0)",
1893
    "	end",
1894
    "	trim(rec)",
1895
    "	return rec",
1896
    "end",
1897
    "",
1898
    "-- CCA API END --",
1899
    "",
1900
    "local fixstr = function(str)",
1901
    "	return str:gsub(\"\\\\(%d%d%d)\",string.char)",
1902
    "end",
1903
    "",
1904
    "local explode = function(div,str)",
1905
    "    if (div=='') then return false end",
1906
    "    local pos,arr = 0,{}",
1907
    "    for st,sp in function() return string.find(str,div,pos,true) end do",
1908
    "        table.insert(arr,str:sub(pos,st-1))",
1909
    "        pos = sp + 1",
1910
    "    end",
1911
    "    table.insert(arr,str:sub(pos))",
1912
    "    return arr",
1913
    "end",
1914
    "local sanitize = function(sani,tize)",
1915
    "	local _,x = string.find(sani,tize)",
1916
    "	if x then",
1917
    "		return sani:sub(x+1)",
1918
    "	else",
1919
    "		return sani",
1920
    "	end",
1921
    "end",
1922
    "local tablize = function(input)",
1923
    "	if type(input) == \"string\" then",
1924
    "		return explode(\"\\n\",input)",
1925
    "	elseif type(input) == \"table\" then",
1926
    "		return table.concat(input,\"\\n\")",
1927
    "	end",
1928
    "end",
1929
    "local compyress = function(input)",
1930
    "	return string.char(unpack(compress(input)))",
1931
    "end",
1932
    "local decompyress = function(input)",
1933
    "	local out = {}",
1934
    "	for a = 1, #input do",
1935
    "		table.insert(out,string.byte(input:sub(a,a)))",
1936
    "	end",
1937
    "	return decompress(out)",
1938
    "end",
1939
    "local listAll",
1940
    "listAll = function(_path, _files, noredundant)",
1941
    "	local path = _path or \"\"",
1942
    "	local files = _files or {}",
1943
    "	if #path > 1 then table.insert(files, path) end",
1944
    "	for _, file in ipairs(fs.list(path)) do",
1945
    "		local path = fs.combine(path, file)",
1946
    "		if (file ~= thisProgram) then",
1947
    "			local guud = true",
1948
    "			if guud then",
1949
    "				if fs.isDir(path) then",
1950
    "					listAll(path, files, noredundant)",
1951
    "				else",
1952
    "					table.insert(files, path)",
1953
    "				end",
1954
    "			end",
1955
    "		end",
1956
    "	end",
1957
    "	if noredundant then",
1958
    "		for a = 1, #files do",
1959
    "			if fs.isDir(tostring(files[a])) then",
1960
    "				if #fs.list(tostring(files[a])) ~= 0 then",
1961
    "					table.remove(files,a)",
1962
    "				end",
1963
    "			end",
1964
    "		end",
1965
    "	end",
1966
    "	return files",
1967
    "end",
1968
    "if not (input) then",
1969
    "	return displayHelp()",
1970
    "end",
1971
    "if not outpath then",
1972
    "	outpath = input",
1973
    "end",
1974
    "",
1975
    "local choice = function(input,verbose)",
1976
    "	if not input then",
1977
    "		input = \"yn\"",
1978
    "	end",
1979
    "	if verbose then",
1980
    "		write(\"[\")",
1981
    "		for a = 1, #input do",
1982
    "			write(input:sub(a,a):upper())",
1983
    "			if a < #input then",
1984
    "				write(\",\")",
1985
    "			end",
1986
    "		end",
1987
    "		write(\"]?\")",
1988
    "	end",
1989
    "	local evt,char",
1990
    "	repeat",
1991
    "		evt,char = os.pullEvent(\"char\")",
1992
    "	until string.find(input:lower(),char:lower())",
1993
    "	if verbose then",
1994
    "		print(char:upper())",
1995
    "	end",
1996
    "	local pos = string.find(input:lower(),char:lower())",
1997
    "	return pos, char:lower()",
1998
    "end",
1999
    "",
2000
    "function doPack(input,output,doCompress,verbose) --make sure that shell exists before using verbose mode",
2001
    "	local tx = term.getTextColor()",
2002
    "	if not fs.exists(input) then return 3 end",
2003
    "	if fs.isReadOnly(output) then return 5 end",
2004
    "	local packageSelf = true",
2005
    "	local packageReadOnly = true",
2006
    "	local ro_asked = false",
2007
    "	local ps_asked = false",
2008
    "	if fs.isDir(input) then",
2009
    "		local out = {}",
2010
    "		local list = listAll(input,nil,true)",
2011
    "		if verbose then",
2012
    "			for a = 1, #list do --this checks for self and read-only files",
2013
    "				if fs.isReadOnly(list[a]) and (not ro_asked) then",
2014
    "					write(\"Include read-only files? \")",
2015
    "					if choice(\"yn\",true) == 2 then",
2016
    "						packageReadOnly = false",
2017
    "					end",
2018
    "					ro_asked = true",
2019
    "				end",
2020
    "				if fs.combine(\"\",list[a]) == shell.getRunningProgram() and (not ps_asked) then",
2021
    "					write(\"Include self? \")",
2022
    "					if choice(\"yn\",true) == 2 then",
2023
    "						packageSelf = false",
2024
    "					end",
2025
    "					ps_asked = true",
2026
    "				end",
2027
    "			end",
2028
    "		end",
2029
    "		for a = 1, #list do --this loop gets shit done",
2030
    "			local is_self = fs.combine(\"\",list[a]) == fs.combine(\"\",shell.getRunningProgram())",
2031
    "			if not ((is_self and not packageSelf) or (fs.isReadOnly(list[a]) and not packageReadOnly)) then",
2032
    "				if verbose then",
2033
    "					write(\"[\")",
2034
    "					if term.isColor() then term.setTextColor(colors.lightGray) end",
2035
    "					write(sanitize(list[a],fs.combine(dir,input)))",
2036
    "					term.setTextColor(tx)",
2037
    "					write(\"]\")",
2038
    "				end",
2039
    "				if fs.isDir(list[a]) then",
2040
    "					out[sanitize(list[a],fs.combine(dir,input))] = true",
2041
    "				else",
2042
    "					local file = fs.open(list[a],\"r\")",
2043
    "					local cont = file.readAll()",
2044
    "					file.close()",
2045
    "					if doCompress then",
2046
    "						out[sanitize(list[a],fs.combine(dir,input))] = tablize(compyress(cont))",
2047
    "					else",
2048
    "						out[sanitize(list[a],fs.combine(dir,input))] = tablize(cont)",
2049
    "					end",
2050
    "				end",
2051
    "				local tx = term.getTextColor()",
2052
    "				if fs.getName(list[a]):lower() == \"peasant\" then",
2053
    "					if term.isColor() then",
2054
    "						term.setTextColor(colors.orange)",
2055
    "					end",
2056
    "					print(\" BURNINATED\")",
2057
    "				else",
2058
    "					if term.isColor() then",
2059
    "						term.setTextColor(colors.green)",
2060
    "					end",
2061
    "					print(\" GOOD\")",
2062
    "				end",
2063
    "				term.setTextColor(tx)",
2064
    "			else",
2065
    "				if fs.getName(list[a]):lower() == \"peasant\" then",
2066
    "					print(\"Spared \"..list[a])",
2067
    "				else",
2068
    "					print(\"Skipped \"..list[a])",
2069
    "				end",
2070
    "			end",
2071
    "		end",
2072
    "		if fs.isDir(output) then fs.delete(output) end",
2073
    "		local file = fs.open(output,\"w\")",
2074
    "		file.writeLine(doCompress)",
2075
    "		file.write(fixstr(textutils.serialize(out)))",
2076
    "		file.close()",
2077
    "		return 1",
2078
    "	else",
2079
    "		local file = fs.open(input,\"r\")",
2080
    "		local isCompy = file.readLine()",
2081
    "		local list = file.readAll()",
2082
    "		file.close()",
2083
    "		local list = textutils.unserialize(list)",
2084
    "		if type(list) ~= \"table\" then",
2085
    "			return 4",
2086
    "		end",
2087
    "		if fs.exists(output) then",
2088
    "			fs.delete(output)",
2089
    "		end",
2090
    "		local amnt = 0",
2091
    "		for k,v in pairs(list) do",
2092
    "			amnt = amnt + 1",
2093
    "		end",
2094
    "		local num = 0",
2095
    "		for k,v in pairs(list) do",
2096
    "			num = num + 1",
2097
    "			if v == true then",
2098
    "				fs.makeDir(fs.combine(output,fs.combine(k,dir)))",
2099
    "			else",
2100
    "				local file = fs.open(fs.combine(output,fs.combine(k,dir)),\"w\")",
2101
    "				if verbose then",
2102
    "					write(\"[\")",
2103
    "					if term.isColor() then term.setTextColor(colors.lightGray) end",
2104
    "					write(k)",
2105
    "					term.setTextColor(tx)",
2106
    "					write(\"]\")",
2107
    "				end",
2108
    "				if isCompy:gsub(\" \",\"\") == \"true\" then",
2109
    "					file.write(decompyress(tablize(v)))",
2110
    "				else",
2111
    "					file.write(tablize(v))",
2112
    "				end",
2113
    "				file.close()",
2114
    "				local tx = term.getTextColor()",
2115
    "				if fs.getName(k):lower() == \"peasant\" then",
2116
    "					if term.isColor() then",
2117
    "						term.setTextColor(colors.orange)",
2118
    "					end",
2119
    "					print(\" UNBURNINATED\")",
2120
    "				else",
2121
    "					if term.isColor() then",
2122
    "						term.setTextColor(colors.green)",
2123
    "					end",
2124
    "					print(\" GOOD\")",
2125
    "				end",
2126
    "				term.setTextColor(tx)",
2127
    "			end",
2128
    "		end",
2129
    "		return 2",
2130
    "	end",
2131
    "end",
2132
    "",
2133
    "local success, res = pcall( function() return doPack(input,outpath,doCompress,true) end ) --functionized it!",
2134
    "",
2135
    "if not success then",
2136
    "	term.setTextColor(colors.white)",
2137
    "	print(\"\\n***Something went wrong!***\")",
2138
    "	return printError(res)",
2139
    "end",
2140
    "",
2141
    "if res then",
2142
    "	local msgs = {",
2143
    "		[1] = \"Successfully packed '\"..input..\"/' as '\"..outpath..\"'\",",
2144
    "		[2] = \"Successfully unpacked '\"..input..\"' to '\"..outpath..\"/'\",",
2145
    "		[3] = \"That file/folder does not exist.\",",
2146
    "		[4] = \"That file isn't a packed folder.\",",
2147
    "		[5] = \"You don't have permission.\",",
2148
    "	}",
2149
    "	print(msgs[res])",
2150
    "end",
2151
  },
2152
  test = {
2153
    "local mon = peripheral.find(\"monitor\")",
2154
    "term.redirect(mon)",
2155
    "os.loadAPI(\"pain\")",
2156
    "shell.run(\"render\")",
2157
    "term.setBackgroundColor(colors.black)",
2158
    "term.clear()",
2159
    "local space = 2",
2160
    "local dif = 0.4",
2161
    "function ion(txt)",
2162
    "  term.native().setCursorPos(1,2)",
2163
    "  term.native().write(txt..\"  \")",
2164
    "end",
2165
    "--pain.renderPAINFS(\"BETA\",2,4)",
2166
    "local reverse = false",
2167
    "while true do",
2168
    "  _G.render(1,space,reverse)",
2169
    "  if (math.abs(space) >= 3) or (space <= 0.2) then",
2170
    "    dif = dif*-1",
2171
    "    --if space <= 1 then reverse = not reverse end",
2172
    "    reverse = not reverse",
2173
    "  end",
2174
    "  space = space + dif",
2175
    "  ion(space..\"/\"..dif)",
2176
    "  sleep(0.2)",
2177
    "end",
2178
  },
2179
}